diff --git a/src/Core/Update.php b/src/Core/Update.php index 96d2f0a8b..d2a3c810e 100644 --- a/src/Core/Update.php +++ b/src/Core/Update.php @@ -27,6 +27,7 @@ use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; use Friendica\Network\HTTPException\InternalServerErrorException; +use Friendica\Util\DateTimeFormat; use Friendica\Util\Strings; class Update @@ -143,14 +144,20 @@ class Update return ''; } + DI::config()->set('system', 'maintenance', 1); + // run the pre_update_nnnn functions in update.php for ($version = $stored + 1; $version <= $current; $version++) { Logger::notice('Execute pre update.', ['version' => $version]); + DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: executing pre update %d', + DateTimeFormat::utcNow() . ' ' . date('e'), $version)); $r = self::runUpdateFunction($version, 'pre_update', $sendMail); if (!$r) { Logger::warning('Pre update failed', ['version' => $version]); DI::config()->set('system', 'update', Update::FAILED); DI::lock()->release('dbupdate'); + DI::config()->set('system', 'maintenance', 0); + DI::config()->set('system', 'maintenance_reason', ''); return $r; } else { Logger::notice('Pre update executed.', ['version' => $version]); @@ -170,6 +177,8 @@ class Update Logger::error('Update ERROR.', ['from' => $stored, 'to' => $current, 'retval' => $retval]); DI::config()->set('system', 'update', Update::FAILED); DI::lock()->release('dbupdate'); + DI::config()->set('system', 'maintenance', 0); + DI::config()->set('system', 'maintenance_reason', ''); return $retval; } else { Logger::notice('Database structure update finished.', ['from' => $stored, 'to' => $current]); @@ -178,11 +187,15 @@ class Update // run the update_nnnn functions in update.php for ($version = $stored + 1; $version <= $current; $version++) { Logger::notice('Execute post update.', ['version' => $version]); + DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: executing post update %d', + DateTimeFormat::utcNow() . ' ' . date('e'), $version)); $r = self::runUpdateFunction($version, 'update', $sendMail); if (!$r) { Logger::warning('Post update failed', ['version' => $version]); DI::config()->set('system', 'update', Update::FAILED); DI::lock()->release('dbupdate'); + DI::config()->set('system', 'maintenance', 0); + DI::config()->set('system', 'maintenance_reason', ''); return $r; } else { DI::config()->set('system', 'build', $version); @@ -193,6 +206,8 @@ class Update DI::config()->set('system', 'build', $current); DI::config()->set('system', 'update', Update::SUCCESS); DI::lock()->release('dbupdate'); + DI::config()->set('system', 'maintenance', 0); + DI::config()->set('system', 'maintenance_reason', ''); Logger::notice('Update success.', ['from' => $stored, 'to' => $current]); if ($sendMail) { diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index 9b69f7b11..c8375c857 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -375,6 +375,8 @@ class DBStructure */ public static function update($basePath, $verbose, $action, $install = false, array $tables = null, array $definition = null) { + $in_maintenance = DI::config()->get('system', 'maintenance'); + if ($action && !$install) { if (self::isUpdating()) { return DI::l10n()->t('Another database update is currently running.'); @@ -737,8 +739,10 @@ class DBStructure self::checkInitialValues(); if ($action && !$install) { - DI::config()->set('system', 'maintenance', 0); - DI::config()->set('system', 'maintenance_reason', ''); + if (!$in_maintenance) { + DI::config()->set('system', 'maintenance', 0); + DI::config()->set('system', 'maintenance_reason', ''); + } if ($errors) { DI::config()->set('system', 'dbupdate', self::UPDATE_FAILED);