diff --git a/core/js/js.js b/core/js/js.js
index d49001ee38..dde8ffa321 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -256,6 +256,7 @@ var OC={
* @param {string} type the type of the file to link to (e.g. css,img,ajax.template)
* @param {string} file the filename
* @return {string} Absolute URL for a file in an app
+ * @deprecated use OC.generateUrl() instead
*/
filePath:function(app,type,file){
var isCore=OC.coreApps.indexOf(app)!==-1,
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
new file mode 100644
index 0000000000..f351c1b451
--- /dev/null
+++ b/core/js/setupchecks.js
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2014
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function() {
+ OC.SetupChecks = {
+ /**
+ * Check whether the WebDAV connection works.
+ *
+ * @return $.Deferred object resolved with an array of error messages
+ */
+ checkWebDAV: function() {
+ var deferred = $.Deferred();
+ var afterCall = function(xhr) {
+ var messages = [];
+ if (xhr.status !== 207 && xhr.status !== 401) {
+ messages.push(
+ t('core', 'Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.')
+ );
+ }
+ deferred.resolve(messages);
+ };
+
+ $.ajax({
+ type: 'PROPFIND',
+ url: OC.linkToRemoteBase('webdav'),
+ data: '' +
+ '' +
+ '' +
+ '',
+ complete: afterCall
+ });
+ return deferred.promise();
+ },
+
+ /**
+ * Runs setup checks on the server side
+ *
+ * @return $.Deferred object resolved with an array of error messages
+ */
+ checkSetup: function() {
+ var deferred = $.Deferred();
+ var afterCall = function(data, statusText, xhr) {
+ var messages = [];
+ if (xhr.status === 200 && data) {
+ if (!data.serverhasinternetconnection) {
+ messages.push(
+ t('core', 'This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.')
+ );
+ }
+ } else {
+ messages.push(t('core', 'Error occurred while checking server setup'));
+ }
+ deferred.resolve(messages);
+ };
+
+ $.ajax({
+ type: 'GET',
+ url: OC.generateUrl('settings/ajax/checksetup')
+ }).then(afterCall, afterCall);
+ return deferred.promise();
+ }
+ };
+})();
+
diff --git a/lib/private/util.php b/lib/private/util.php
index c5483c1654..f65269a0fd 100755
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -1027,53 +1027,6 @@ class OC_Util {
return $content !== $testContent;
}
- /**
- * test if webDAV is working properly
- *
- * @return bool
- * @description
- * The basic assumption is that if the server returns 401/Not Authenticated for an unauthenticated PROPFIND
- * the web server it self is setup properly.
- *
- * Why not an authenticated PROPFIND and other verbs?
- * - We don't have the password available
- * - We have no idea about other auth methods implemented (e.g. OAuth with Bearer header)
- *
- */
- public static function isWebDAVWorking() {
- if (!function_exists('curl_init')) {
- return true;
- }
- if (!\OC_Config::getValue("check_for_working_webdav", true)) {
- return true;
- }
- $settings = array(
- 'baseUri' => OC_Helper::linkToRemote('webdav'),
- );
-
- $client = new \OC_DAVClient($settings);
-
- $client->setRequestTimeout(10);
-
- // for this self test we don't care if the ssl certificate is self signed and the peer cannot be verified.
- $client->setVerifyPeer(false);
- // also don't care if the host can't be verified
- $client->setVerifyHost(0);
-
- $return = true;
- try {
- // test PROPFIND
- $client->propfind('', array('{DAV:}resourcetype'));
- } catch (\Sabre\DAV\Exception\NotAuthenticated $e) {
- $return = true;
- } catch (\Exception $e) {
- OC_Log::write('core', 'isWebDAVWorking: NO - Reason: ' . $e->getMessage() . ' (' . get_class($e) . ')', OC_Log::WARN);
- $return = false;
- }
-
- return $return;
- }
-
/**
* Check if the setlocal call does not work. This can happen if the right
* local packages are not available on the server.
diff --git a/settings/admin.php b/settings/admin.php
index 6b93e6e3f0..f77145e034 100755
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -9,11 +9,12 @@ OC_Util::checkAdminUser();
OCP\Util::addStyle('settings', 'settings');
OCP\Util::addScript('settings', 'settings');
-OC_Util::addScript( "settings", "admin" );
-OC_Util::addScript( "settings", "log" );
-OC_Util::addScript( 'core', 'multiselect' );
+OCP\Util::addScript( "settings", "admin" );
+OCP\Util::addScript( "settings", "log" );
+OCP\Util::addScript( 'core', 'multiselect' );
OCP\Util::addScript('core', 'select2/select2');
OCP\Util::addStyle('core', 'select2/select2');
+OCP\Util::addScript('core', 'setupchecks');
OC_App::setActiveNavigationEntry( "admin" );
$tmpl = new OC_Template( 'settings', 'admin', 'user');
@@ -41,11 +42,9 @@ $tmpl->assign('mail_smtppassword', OC_Config::getValue( "mail_smtppassword", ''
$tmpl->assign('entries', $entries);
$tmpl->assign('entriesremain', $entriesremain);
$tmpl->assign('htaccessworking', $htaccessworking);
-$tmpl->assign('internetconnectionworking', OC_Util::isInternetConnectionEnabled() ? OC_Util::isInternetConnectionWorking() : 'disabled');
$tmpl->assign('isLocaleWorking', OC_Util::isSetLocaleWorking());
$tmpl->assign('isPhpCharSetUtf8', OC_Util::isPhpCharSetUtf8());
$tmpl->assign('isAnnotationsWorking', OC_Util::isAnnotationsWorking());
-$tmpl->assign('isWebDavWorking', OC_Util::isWebDAVWorking());
$tmpl->assign('has_fileinfo', OC_Util::fileInfoLoaded());
$tmpl->assign('old_php', OC_Util::isPHPoutdated());
$tmpl->assign('backgroundjobs_mode', OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax'));
diff --git a/settings/ajax/checksetup.php b/settings/ajax/checksetup.php
new file mode 100644
index 0000000000..6bf5bc5642
--- /dev/null
+++ b/settings/ajax/checksetup.php
@@ -0,0 +1,23 @@
+
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+
+OCP\JSON::checkAdminUser();
+OCP\JSON::callCheck();
+
+\OC::$server->getSession()->close();
+
+// no warning when has_internet_connection is false in the config
+$hasInternet = true;
+if (OC_Util::isInternetConnectionEnabled()) {
+ $hasInternet = OC_Util::isInternetConnectionWorking();
+}
+
+OCP\JSON::success(
+ array(
+ 'serverhasinternetconnection' => $hasInternet
+ )
+);
diff --git a/settings/css/settings.css b/settings/css/settings.css
index 95fab85df9..581904591d 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -165,7 +165,7 @@ table.grid td.date{
}
/* ADMIN */
-span.securitywarning, span.connectionwarning {
+span.securitywarning, span.connectionwarning, .setupwarning {
color:#C33;
font-weight:bold;
}
@@ -256,3 +256,15 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
border: 0;
overflow: auto;
}
+
+#postsetupchecks .loading {
+ height: 50px;
+}
+
+#postsetupchecks.section .loading {
+ background-position: left center;
+}
+
+#postsetupchecks .hint, #postsetupchecks .setupwarning {
+ margin-top: 15px;
+}
diff --git a/settings/js/admin.js b/settings/js/admin.js
index 95be13d228..d8cdae9d11 100644
--- a/settings/js/admin.js
+++ b/settings/js/admin.js
@@ -122,4 +122,25 @@ $(document).ready(function(){
$('#shareapiExcludeGroups').change(function() {
$("#selectExcludedGroups").toggleClass('hidden', !this.checked);
});
+
+ // run setup checks then gather error messages
+ $.when(
+ OC.SetupChecks.checkWebDAV(),
+ OC.SetupChecks.checkSetup()
+ ).then(function(check1, check2) {
+ var errors = [].concat(check1, check2);
+ var $el = $('#postsetupchecks');
+ var $errorsEl;
+ $el.find('.loading').addClass('hidden');
+ if (errors.length === 0) {
+ $el.find('.success').removeClass('hidden');
+ } else {
+ $errorsEl = $el.find('.errors');
+ for (var i = 0; i < errors.length; i++ ) {
+ $errorsEl.append('
' + errors[i] + '
');
+ }
+ $errorsEl.removeClass('hidden');
+ $el.find('.hint').removeClass('hidden');
+ }
+ });
});
diff --git a/settings/routes.php b/settings/routes.php
index 86d6049551..25a8b1da7e 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -98,3 +98,5 @@ $this->create('settings_ajax_setsecurity', '/settings/ajax/setsecurity.php')
->actionInclude('settings/ajax/setsecurity.php');
$this->create('settings_ajax_excludegroups', '/settings/ajax/excludegroups.php')
->actionInclude('settings/ajax/excludegroups.php');
+$this->create('settings_ajax_checksetup', '/settings/ajax/checksetup')
+ ->actionInclude('settings/ajax/checksetup.php');
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 9ceebad4ee..1209cf86d8 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -72,21 +72,6 @@ if (!$_['htaccessworking']) {
-
-
t('Setup Warning'));?>
-
-
- t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.')); ?>
- t('Please double check the installation guides.', link_to_docs('admin-install'))); ?>
-
-
-
-
@@ -183,20 +168,6 @@ if (!$_['isLocaleWorking']) {
-
-
t('Internet connection not working'));?>
-
-
- t('This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.')); ?>
-
-
-
-
@@ -210,7 +181,17 @@ if ($_['suggestedOverwriteWebroot']) {
-
+
+
t('Connectivity checks'));?>
+
+
t('No problems found'));?>
+
+
+
t('Please double check the installation guides.', \OC_Helper::linkToDocs('admin-install')));
+ ?>
+
+