]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/Update.php
Adding unittest for empty setApp()
[friendica.git] / src / Core / Update.php
index b9f3f3d1c9fdc985ec9d83c570b1ee5dd0195f14..5df0675cdaeb46cd7520468d693e79f349b034c2 100644 (file)
@@ -4,6 +4,7 @@ namespace Friendica\Core;
 
 use Friendica\Database\DBA;
 use Friendica\Database\DBStructure;
+use Friendica\Util\Strings;
 
 class Update
 {
@@ -13,10 +14,16 @@ class Update
        /**
         * @brief Function to check if the Database structure needs an update.
         *
+        * @param string $basePath The base path of this application
         * @param boolean $via_worker boolean Is the check run via the worker?
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public static function check($via_worker)
+       public static function check($basePath, $via_worker)
        {
+               if (!DBA::connected()) {
+                       return;
+               }
+
                $build = Config::get('system', 'build');
 
                if (empty($build)) {
@@ -32,7 +39,7 @@ class Update
                if ($build < DB_UPDATE_VERSION) {
                        // When we cannot execute the database update via the worker, we will do it directly
                        if (!Worker::add(PRIORITY_CRITICAL, 'DBUpdate') && $via_worker) {
-                               self::run();
+                               self::run($basePath);
                        }
                }
        }
@@ -40,13 +47,15 @@ class Update
        /**
         * Automatic database updates
         *
-        * @param bool $force Force the Update-Check even if the lock is set
-        * @param bool $verbose Run the Update-Check verbose
-        * @param bool $sendMail Sends a Mail to the administrator in case of success/failure
+        * @param string $basePath The base path of this application
+        * @param bool $force      Force the Update-Check even if the lock is set
+        * @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($force = false, $verbose = false, $sendMail = true)
+       public static function run($basePath, $force = false, $verbose = false, $sendMail = true)
        {
                // In force mode, we release the dbupdate lock first
                // Necessary in case of an stuck update
@@ -69,6 +78,8 @@ class Update
                        if ($stored < $current) {
                                Config::load('database');
 
+                               Logger::log('Update from \'' . $stored . '\'  to \'' . $current . '\' - starting', Logger::DEBUG);
+
                                // Compare the current structure with the defined structure
                                // If the Lock is acquired, never release it automatically to avoid double updates
                                if (Lock::acquire('dbupdate', 120, Cache::INFINITE)) {
@@ -82,7 +93,7 @@ class Update
                                        }
 
                                        // update the structure in one call
-                                       $retval = DBStructure::update($verbose, true);
+                                       $retval = DBStructure::update($basePath, $verbose, true);
                                        if ($retval) {
                                                if ($sendMail) {
                                                        self::updateFailed(
@@ -90,11 +101,13 @@ class Update
                                                                $retval
                                                        );
                                                }
+                                               Logger::log('ERROR: Update from \'' . $stored . '\'  to \'' . $current . '\' - failed:  ' - $retval, Logger::ALL);
                                                Lock::release('dbupdate');
                                                return $retval;
                                        } else {
                                                Config::set('database', 'last_successful_update', $current);
                                                Config::set('database', 'last_successful_update_time', time());
+                                               Logger::log('Update from \'' . $stored . '\'  to \'' . $current . '\' - finished', Logger::DEBUG);
                                        }
 
                                        // run the update_nnnn functions in update.php
@@ -105,6 +118,7 @@ class Update
                                                }
                                        }
 
+                                       Logger::log('Update from \'' . $stored . '\'  to \'' . $current . '\' - successful', Logger::DEBUG);
                                        if ($sendMail) {
                                                self::updateSuccessfull($stored, $current);
                                        }
@@ -112,6 +126,8 @@ class Update
                                        Lock::release('dbupdate');
                                }
                        }
+               } elseif ($force) {
+                       DBStructure::update($basePath, $verbose, true);
                }
 
                return '';
@@ -120,15 +136,18 @@ class Update
        /**
         * Executes a specific update function
         *
-        * @param int $x the DB version number of the function
+        * @param int    $x      the DB version number of the function
         * @param string $prefix the prefix of the function (update, pre_update)
         *
         * @return bool true, if the update function worked
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function runUpdateFunction($x, $prefix)
        {
                $funcname = $prefix . '_' . $x;
 
+               Logger::log('Update function \'' . $funcname . '\' - start', Logger::DEBUG);
+
                if (function_exists($funcname)) {
                        // There could be a lot of processes running or about to run.
                        // We want exactly one process to run the update command.
@@ -148,6 +167,7 @@ class Update
                                                $x,
                                                L10n::t('Update %s failed. See error logs.', $x)
                                        );
+                                       Logger::log('ERROR: Update function \'' . $funcname . '\' - failed: ' . $retval, Logger::ALL);
                                        Lock::release('dbupdate_function');
                                        return false;
                                } else {
@@ -159,6 +179,7 @@ class Update
                                        }
 
                                        Lock::release('dbupdate_function');
+                                       Logger::log('Update function \'' . $funcname . '\' - finished', Logger::DEBUG);
                                        return true;
                                }
                        }
@@ -179,8 +200,9 @@ class Update
        /**
         * send the email and do what is needed to do on update fails
         *
-        * @param int $update_id                number of failed update
-        * @param string $error_message error message
+        * @param int    $update_id     number of failed update
+        * @param string $error_message error message
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function updateFailed($update_id, $error_message) {
                //send the administrators an e-mail
@@ -200,7 +222,7 @@ class Update
                        $lang = (($admin['language'])?$admin['language']:'en');
                        L10n::pushLang($lang);
 
-                       $preamble = deindent(L10n::t("
+                       $preamble = Strings::deindent(L10n::t("
                                The friendica developers released update %s recently,
                                but when I tried to install it, something went terribly wrong.
                                This needs to be fixed soon and I can't do it alone. Please contact a
@@ -235,7 +257,7 @@ class Update
                                $lang = (($admin['language']) ? $admin['language'] : 'en');
                                L10n::pushLang($lang);
 
-                               $preamble = deindent(L10n::t("
+                               $preamble = Strings::deindent(L10n::t("
                                        The friendica database was successfully updated from %s to %s.",
                                        $from_build, $to_build));