X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FUpdate.php;h=8ec96dc9893662d68216900712c29ad015e3cd78;hb=44b2b97e80624aca5768511def80a95f0e6e0381;hp=6b4d6f286bea8f2b2193a7a7cedf3c172b8306a5;hpb=054c301ef0345c4ff9f35cfd08717757eab17b9d;p=friendica.git diff --git a/src/Core/Update.php b/src/Core/Update.php index 6b4d6f286b..8ec96dc989 100644 --- a/src/Core/Update.php +++ b/src/Core/Update.php @@ -1,6 +1,6 @@ t('Updates from version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.', $build); if (DI::mode()->getExecutor() == Mode::INDEX) { die($error); @@ -73,8 +76,8 @@ class Update } // The postupdate has to completed version 1288 for the new post views to take over - $postupdate = DI::config()->get("system", "post_update_version", NEW_TABLE_STRUCTURE_VERSION); - if ($postupdate < NEW_TABLE_STRUCTURE_VERSION) { + $postupdate = DI::config()->get('system', 'post_update_version', self::NEW_TABLE_STRUCTURE_VERSION); + if ($postupdate < self::NEW_TABLE_STRUCTURE_VERSION) { $error = DI::l10n()->t('Updates from postupdate version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.', $postupdate); if (DI::mode()->getExecutor() == Mode::INDEX) { die($error); @@ -85,12 +88,14 @@ class Update if ($build < DB_UPDATE_VERSION) { if ($via_worker) { - // Calling the database update directly via the worker enables us to perform database changes to the workerqueue table itself. - // This is a fallback, since normally the database update will be performed by a worker job. - // This worker job doesn't work for changes to the "workerqueue" table itself. + /* + * Calling the database update directly via the worker enables us to perform database changes to the workerqueue table itself. + * This is a fallback, since normally the database update will be performed by a worker job. + * This worker job doesn't work for changes to the "workerqueue" table itself. + */ self::run($basePath); } else { - Worker::add(PRIORITY_CRITICAL, 'DBUpdate'); + Worker::add(Worker::PRIORITY_CRITICAL, 'DBUpdate'); } } } @@ -103,11 +108,10 @@ class Update * @param bool $override Overrides any running/stuck updates * @param bool $verbose Run the Update-Check verbose * @param bool $sendMail Sends a Mail to the administrator in case of success/failure - * * @return string Empty string if the update is successful, error messages otherwise * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function run(string $basePath, bool $force = false, bool $override = false, bool $verbose = false, bool $sendMail = true) + public static function run(string $basePath, bool $force = false, bool $override = false, bool $verbose = false, bool $sendMail = true): string { // In force mode, we release the dbupdate lock first // Necessary in case of an stuck update @@ -132,7 +136,7 @@ class Update // Compare the current structure with the defined structure // If the Lock is acquired, never release it automatically to avoid double updates - if (DI::lock()->acquire('dbupdate', 0, Cache\Duration::INFINITE)) { + if (DI::lock()->acquire('dbupdate', 0, Cache\Enum\Duration::INFINITE)) { Logger::notice('Update starting.', ['from' => $stored, 'to' => $current]); @@ -145,7 +149,7 @@ class Update } 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]); @@ -213,6 +217,8 @@ class Update if ($sendMail) { self::updateSuccessful($stored, $current); } + } else { + Logger::warning('Update lock could not be acquired'); } } } @@ -226,11 +232,10 @@ class Update * @param int $version the DB version number of the function * @param string $prefix the prefix of the function (update, pre_update) * @param bool $sendMail whether to send emails on success/failure - * @return bool true, if the update function worked * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function runUpdateFunction(int $version, string $prefix, bool $sendMail = true) + public static function runUpdateFunction(int $version, string $prefix, bool $sendMail = true): bool { $funcname = $prefix . '_' . $version; @@ -244,7 +249,7 @@ class Update // If the update fails or times-out completely you may need to // delete the config entry to try again. - if (DI::lock()->acquire('dbupdate_function', 120, Cache\Duration::INFINITE)) { + if (DI::lock()->acquire('dbupdate_function', 120, Cache\Enum\Duration::INFINITE)) { // call the specific update Logger::notice('Pre update function start.', ['function' => $funcname]); @@ -282,32 +287,19 @@ class Update * * @param int $update_id number of failed update * @param string $error_message error message + * @return void * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private static function updateFailed(int $update_id, string $error_message) { - //send the administrators an e-mail - $condition = ['email' => explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email'))), 'parent-uid' => 0]; - $adminlist = DBA::select('user', ['uid', 'language', 'email'], $condition, ['order' => ['uid']]); - - // No valid result? - if (!DBA::isResult($adminlist)) { + private static function updateFailed(int $update_id, string $error_message) + { + $adminEmails = User::getAdminListForEmailing(['uid', 'language', 'email']); + if (!$adminEmails) { Logger::warning('Cannot notify administrators .', ['update' => $update_id, 'message' => $error_message]); - - // Don't continue return; } - $sent = []; - - // every admin could had different language - while ($admin = DBA::fetch($adminlist)) { - if (in_array($admin['email'], $sent)) { - continue; - } - $sent[] = $admin['email']; - - $lang = $admin['language'] ?? 'en'; - $l10n = DI::l10n()->withLang($lang); + foreach($adminEmails as $admin) { + $l10n = DI::l10n()->withLang($admin['language'] ?: 'en'); $preamble = Strings::deindent($l10n->t(" The friendica developers released update %s recently, @@ -338,35 +330,20 @@ class Update */ private static function updateSuccessful(int $from_build, int $to_build) { - //send the administrators an e-mail - $condition = ['email' => explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email'))), 'parent-uid' => 0]; - $adminlist = DBA::select('user', ['uid', 'language', 'email'], $condition, ['order' => ['uid']]); + foreach(User::getAdminListForEmailing(['uid', 'language', 'email']) as $admin) { + $l10n = DI::l10n()->withLang($admin['language'] ?: 'en'); - if (DBA::isResult($adminlist)) { - $sent = []; + $preamble = Strings::deindent($l10n->t(' + The friendica database was successfully updated from %s to %s.', + $from_build, $to_build)); - // every admin could had different language - while ($admin = DBA::fetch($adminlist)) { - if (in_array($admin['email'], $sent)) { - continue; - } - $sent[] = $admin['email']; - - $lang = (($admin['language']) ? $admin['language'] : 'en'); - $l10n = DI::l10n()->withLang($lang); - - $preamble = Strings::deindent($l10n->t(' - The friendica database was successfully updated from %s to %s.', - $from_build, $to_build)); - - $email = DI::emailer() - ->newSystemMail() - ->withMessage($l10n->t('[Friendica Notify] Database update'), $preamble) - ->forUser($admin) - ->withRecipient($admin['email']) - ->build(); - DI::emailer()->send($email); - } + $email = DI::emailer() + ->newSystemMail() + ->withMessage($l10n->t('[Friendica Notify] Database update'), $preamble) + ->forUser($admin) + ->withRecipient($admin['email']) + ->build(); + DI::emailer()->send($email); } Logger::debug('Database structure update successful.');