summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMichael Gapczynski <mtgap@owncloud.com>2013-01-05 09:33:29 -0800
committerMichael Gapczynski <mtgap@owncloud.com>2013-01-05 09:33:29 -0800
commitda7a14e9a6cc5a388ae817a226af7fa262fe6846 (patch)
tree32901cc0472166121c1f1a99c78c41dbb4a7d232 /lib
parent0c6213a371059952bc2393563ad93ca74fbdddfc (diff)
parent035d0aa9d5b2768672af89ddd543913ec1f6b657 (diff)
downloadnextcloud-server-da7a14e9a6cc5a388ae817a226af7fa262fe6846.tar.gz
nextcloud-server-da7a14e9a6cc5a388ae817a226af7fa262fe6846.zip
Merge pull request #1079 from owncloud/update-progress
Updater progress feedback
Diffstat (limited to 'lib')
-rw-r--r--lib/app.php4
-rw-r--r--lib/base.php90
-rw-r--r--lib/db.php10
3 files changed, 56 insertions, 48 deletions
diff --git a/lib/app.php b/lib/app.php
index 30f76300365..e60bce2a201 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -648,12 +648,15 @@ class OC_App{
if ($currentVersion) {
$installedVersion = $versions[$app];
if (version_compare($currentVersion, $installedVersion, '>')) {
+ $info = self::getAppInfo($app);
OC_Log::write($app, 'starting app upgrade from '.$installedVersion.' to '.$currentVersion, OC_Log::DEBUG);
try {
OC_App::updateApp($app);
+ OC_Hook::emit('update', 'success', 'Updated '.$info['name'].' app');
}
catch (Exception $e) {
echo 'Failed to upgrade "'.$app.'". Exception="'.$e->getMessage().'"';
+ OC_Hook::emit('update', 'failure', 'Failed to update '.$info['name'].' app: '.$e->getMessage());
die;
}
OC_Appconfig::setValue($app, 'installed_version', OC_App::getAppVersion($app));
@@ -678,6 +681,7 @@ class OC_App{
if(!isset($info['require']) or (($version[0].'.'.$version[1])>$info['require'])) {
OC_Log::write('core', 'App "'.$info['name'].'" ('.$app.') can\'t be used because it is not compatible with this version of ownCloud', OC_Log::ERROR);
OC_App::disable( $app );
+ OC_Hook::emit('update', 'success', 'Disabled '.$info['name'].' app because it is not compatible');
}
}
}
diff --git a/lib/base.php b/lib/base.php
index ef203b33c2b..3d3e7d59f90 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -193,6 +193,15 @@ class OC
);
}
+ public static function checkConfig() {
+ if (file_exists(OC::$SERVERROOT . "/config/config.php") and !is_writable(OC::$SERVERROOT . "/config/config.php")) {
+ $tmpl = new OC_Template('', 'error', 'guest');
+ $tmpl->assign('errors', array(1 => array('error' => "Can't write into config directory 'config'", 'hint' => "You can usually fix this by giving the webserver user write access to the config directory in owncloud")));
+ $tmpl->printPage();
+ exit();
+ }
+ }
+
public static function checkInstalled()
{
// Redirect to installer if not installed
@@ -219,43 +228,35 @@ class OC
}
}
- public static function checkUpgrade()
- {
- if (OC_Config::getValue('installed', false)) {
- $installedVersion = OC_Config::getValue('version', '0.0.0');
- $currentVersion = implode('.', OC_Util::getVersion());
- if (version_compare($currentVersion, $installedVersion, '>')) {
- // Check if the .htaccess is existing - this is needed for upgrades from really old ownCloud versions
- if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
- if (!OC_Util::ishtaccessworking()) {
- if (!file_exists(OC::$SERVERROOT . '/data/.htaccess')) {
- OC_Setup::protectDataDirectory();
- }
- }
- }
- OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::DEBUG);
- $result = OC_DB::updateDbFromStructure(OC::$SERVERROOT . '/db_structure.xml');
- if (!$result) {
- echo 'Error while upgrading the database';
- die();
- }
- if (file_exists(OC::$SERVERROOT . "/config/config.php") and !is_writable(OC::$SERVERROOT . "/config/config.php")) {
- $tmpl = new OC_Template('', 'error', 'guest');
- $tmpl->assign('errors', array(1 => array('error' => "Can't write into config directory 'config'", 'hint' => "You can usually fix this by giving the webserver user write access to the config directory in owncloud")));
- $tmpl->printPage();
- exit;
- }
- $minimizerCSS = new OC_Minimizer_CSS();
- $minimizerCSS->clearCache();
- $minimizerJS = new OC_Minimizer_JS();
- $minimizerJS->clearCache();
- OC_Config::setValue('version', implode('.', OC_Util::getVersion()));
- OC_App::checkAppsRequirements();
- // load all apps to also upgrade enabled apps
- OC_App::loadApps();
- }
- }
- }
+ public static function checkMaintenanceMode() {
+ // Allow ajax update script to execute without being stopped
+ if (OC_Config::getValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') {
+ $tmpl = new OC_Template('', 'error', 'guest');
+ $tmpl->assign('errors', array(1 => array('error' => 'ownCloud is in maintenance mode')));
+ $tmpl->printPage();
+ exit();
+ }
+ }
+
+ public static function checkUpgrade($showTemplate = true) {
+ if (OC_Config::getValue('installed', false)) {
+ $installedVersion = OC_Config::getValue('version', '0.0.0');
+ $currentVersion = implode('.', OC_Util::getVersion());
+ if (version_compare($currentVersion, $installedVersion, '>')) {
+ if ($showTemplate && !OC_Config::getValue('maintenance', false)) {
+ OC_Config::setValue('maintenance', true);
+ OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::DEBUG);
+ $tmpl = new OC_Template('', 'update', 'guest');
+ $tmpl->assign('version', OC_Util::getVersionString());
+ $tmpl->printPage();
+ exit();
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
public static function initTemplateEngine()
{
@@ -273,12 +274,6 @@ class OC
OC_Util::addScript('search', 'result');
OC_Util::addScript('router');
- if (OC_Config::getValue('installed', false)) {
- if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
- OC_Util::addScript('backgroundjobs');
- }
- }
-
OC_Util::addStyle("styles");
OC_Util::addStyle("multiselect");
OC_Util::addStyle("jquery-ui-1.8.16.custom");
@@ -403,11 +398,13 @@ class OC
stream_wrapper_register('static', 'OC_StaticStreamWrapper');
stream_wrapper_register('close', 'OC_CloseStreamWrapper');
+ self::checkConfig();
self::checkInstalled();
self::checkSSL();
self::initSession();
self::initTemplateEngine();
- self::checkUpgrade();
+ self::checkMaintenanceMode();
+ self::checkUpgrade();
$errors = OC_Util::checkServer();
if (count($errors) > 0) {
@@ -482,6 +479,11 @@ class OC
if (OC_Util::issetlocaleworking() == false) {
OC_Log::write('core', 'setting locate to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR);
}
+ if (OC_Config::getValue('installed', false)) {
+ if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
+ OC_Util::addScript('backgroundjobs');
+ }
+ }
}
/**
diff --git a/lib/db.php b/lib/db.php
index 7e60b41d230..74e7ca5b0e0 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -495,8 +495,9 @@ class OC_DB {
if (PEAR::isError($previousSchema)) {
$error = $previousSchema->getMessage();
$detail = $previousSchema->getDebugInfo();
- OC_Log::write('core', 'Failed to get existing database structure for upgrading ('.$error.', '.$detail.')', OC_Log::FATAL);
- return false;
+ $message = 'Failed to get existing database structure for updating ('.$error.', '.$detail.')';
+ OC_Log::write('core', $message, OC_Log::FATAL);
+ throw new Exception($message);
}
// Make changes and save them to an in-memory file
@@ -523,8 +524,9 @@ class OC_DB {
if (PEAR::isError($op)) {
$error = $op->getMessage();
$detail = $op->getDebugInfo();
- OC_Log::write('core', 'Failed to update database structure ('.$error.', '.$detail.')', OC_Log::FATAL);
- return false;
+ $message = 'Failed to update database structure ('.$error.', '.$detail.')';
+ OC_Log::write('core', $message, OC_Log::FATAL);
+ throw new Exception($message);
}
return true;
}