]> git.mxchange.org Git - friendica.git/commitdiff
Rework App modes
authorHypolite Petovan <mrpetovan@gmail.com>
Sat, 30 Jun 2018 18:40:09 +0000 (14:40 -0400)
committerHypolite Petovan <mrpetovan@gmail.com>
Mon, 16 Jul 2018 23:38:15 +0000 (19:38 -0400)
- Replace App mode constants with capability-based flags
- Add App->isInstallMode()
- Add file config fallback in (P)Config abstraction
- Removed logger disabling code

12 files changed:
bin/daemon.php
include/text.php
index.php
src/App.php
src/Core/Config.php
src/Core/Console/Config.php
src/Core/Console/GlobalCommunityBlock.php
src/Core/Console/GlobalCommunitySilence.php
src/Core/Console/Maintenance.php
src/Core/Console/NewPassword.php
src/Core/PConfig.php
src/Core/System.php

index 2813100267dfd3cc26c1ab3ce43f406b6a20b108..65ae2a53b6596730e9f4b107e95c7dffdf001c04 100755 (executable)
@@ -28,7 +28,7 @@ require_once "include/dba.php";
 
 $a = new App(dirname(__DIR__));
 
-if ($a->mode === App::MODE_INSTALL) {
+if ($a->isInstallMode()) {
        die("Friendica isn't properly installed yet.\n");
 }
 
index 3ee23ff1645056fb7a34d0350ff9c266e19fc737..d48986161dd25411d73a94872baa5fac06a0ce49 100644 (file)
@@ -608,17 +608,9 @@ function logger($msg, $level = 0) {
        $a = get_app();
        global $LOGGER_LEVELS;
 
-       // turn off logger in install mode
-       if (
-               $a->mode == App::MODE_INSTALL
-               || !dba::$connected
-       ) {
-               return;
-       }
-
-       $debugging = Config::get('system','debugging');
-       $logfile   = Config::get('system','logfile');
-       $loglevel = intval(Config::get('system','loglevel'));
+       $debugging = Config::get('system', 'debugging');
+       $logfile   = Config::get('system', 'logfile');
+       $loglevel = intval(Config::get('system', 'loglevel'));
 
        if (
                !$debugging
@@ -687,14 +679,6 @@ function logger($msg, $level = 0) {
 function dlogger($msg, $level = 0) {
        $a = get_app();
 
-       // turn off logger in install mode
-       if (
-               $a->mode == App::MODE_INSTALL
-               || !dba::$connected
-       ) {
-               return;
-       }
-
        $logfile = Config::get('system', 'dlogfile');
        if (!$logfile) {
                return;
@@ -716,7 +700,7 @@ function dlogger($msg, $level = 0) {
        $process_id = session_id();
 
        if ($process_id == '') {
-               $process_id = get_app()->process_id;
+               $process_id = $a->process_id;
        }
 
        $callers = debug_backtrace();
index 5da31f100e6b8ffda0c9b36f4b29db06fa4a5cfe..a8098942c2353e1a8963929fde47b8c259070634 100644 (file)
--- a/index.php
+++ b/index.php
@@ -35,20 +35,20 @@ $a->backend = false;
 
 require_once "include/dba.php";
 
-if (!$a->mode == App::MODE_INSTALL) {
-       /**
-        * Load configs from db. Overwrite configs from config/local.ini.php
-        */
-
-       Config::load();
+// Missing DB connection: ERROR
+if ($a->mode & App::MODE_LOCALCONFIGPRESENT && !($a->mode & App::MODE_DBAVAILABLE)) {
+       System::httpExit(500, ['title' => 'Error 500 - Internal Server Error', 'description' => 'Apologies but the website is unavailable at the moment.']);
+}
 
+// Max Load Average reached: ERROR
 if ($a->isMaxProcessesReached() || $a->isMaxLoadReached()) {
-               header($_SERVER["SERVER_PROTOCOL"] . ' 503 Service Temporarily Unavailable');
-               header('Retry-After: 120');
-               header('Refresh: 120; url=' . System::baseUrl() . "/" . $a->query_string);
-               die("System is currently unavailable. Please try again later");
-       }
+       header('Retry-After: 120');
+       header('Refresh: 120; url=' . System::baseUrl() . "/" . $a->query_string);
+
+       System::httpExit(503, ['title' => 'Error 503 - Service Temporarily Unavailable', 'description' => 'System is currently overloaded. Please try again later.']);
+}
 
+if ($a->isInstallMode()) {
        if (Config::get('system', 'force_ssl') && ($a->get_scheme() == "http")
                && (intval(Config::get('system', 'ssl_policy')) == SSL_POLICY_FULL)
                && (substr(System::baseUrl(), 0, 8) == "https://")
@@ -167,9 +167,9 @@ $_SESSION['last_updated'] = defaults($_SESSION, 'last_updated', []);
 
 // in install mode, any url loads install module
 // but we need "view" module for stylesheet
-if ($a->mode == App::MODE_INSTALL && $a->module!="view") {
+if ($a->isInstallMode() && $a->module!="view") {
        $a->module = 'install';
-} elseif ($a->mode == App::MODE_MAINTENANCE && $a->module!="view") {
+} elseif (!($a->mode & App::MODE_MAINTENANCEDISABLED) && $a->module != "view") {
        $a->module = 'maintenance';
 } else {
        check_url($a);
index eca5c4b7dbda4f7624de6f58386e64aba30fab54..6773140f264f3396a06d5dfcb1d212404ac971c7 100644 (file)
@@ -34,9 +34,20 @@ require_once 'include/text.php';
  */
 class App
 {
-       const MODE_NORMAL = 0;
-       const MODE_INSTALL = 1;
-       const MODE_MAINTENANCE = 2;
+       const MODE_LOCALCONFIGPRESENT = 1;
+       const MODE_DBAVAILABLE = 2;
+       const MODE_DBCONFIGAVAILABLE = 4;
+       const MODE_MAINTENANCEDISABLED = 8;
+
+       /**
+        * @deprecated since version 2008.08 Use App->isInstallMode() instead to check for install mode.
+        */
+       const MODE_INSTALL = 0;
+
+       /**
+        * @deprecated since version 2008.08 Use the precise mode constant to check for a specific capability instead.
+        */
+       const MODE_NORMAL = App::MODE_LOCALCONFIGPRESENT | App::MODE_DBAVAILABLE | App::MODE_DBCONFIGAVAILABLE | App::MODE_MAINTENANCEDISABLED;
 
        public $module_loaded = false;
        public $module_class = null;
@@ -59,7 +70,7 @@ class App
        public $argv;
        public $argc;
        public $module;
-       public $mode = App::MODE_NORMAL;
+       public $mode = App::MODE_INSTALL;
        public $strings;
        public $basepath;
        public $urlpath;
@@ -152,7 +163,9 @@ class App
 
                $this->determineUrlPath();
 
-               if ($this->mode === self::MODE_NORMAL) {
+               Config::load();
+
+               if ($this->mode & self::MODE_DBAVAILABLE) {
                        Core\Addon::loadHooks();
 
                        $this->loadAddonConfig();
@@ -449,30 +462,32 @@ class App
         */
        private function determineMode()
        {
-               $this->mode = App::MODE_INSTALL;
+               $this->mode = 0;
 
-               // Missing local config files: MODE_INSTALL
                if (!file_exists($this->basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.ini.php')
                        && !file_exists($this->basepath . DIRECTORY_SEPARATOR . '.htconfig.php')) {
                        return;
                }
 
-               // Missing DB connection: ERROR
+               $this->mode |= App::MODE_LOCALCONFIGPRESENT;
+
                if (!\dba::connected()) {
-                       System::unavailable();
+                       return;
                }
 
-               // Working DB connection, missing tables: MODE_INSTALL
+               $this->mode |= App::MODE_DBAVAILABLE;
+
                if (\dba::fetch_first("SHOW TABLES LIKE 'config'") === false) {
                        return;
                }
 
-               // Maintenance mode check
+               $this->mode |= App::MODE_DBCONFIGAVAILABLE;
+
                if (Config::get('system', 'maintenance')) {
-                       $this->mode = App::MODE_MAINTENANCE;
-               } else {
-                       $this->mode = App::MODE_NORMAL;
+                       return;
                }
+
+               $this->mode |= App::MODE_MAINTENANCEDISABLED;
        }
 
        public function loadDatabase()
@@ -520,6 +535,16 @@ class App
                $this->save_timestamp($stamp1, "network");
        }
 
+       /**
+        * Install mode is when the local config file is missing or the DB schema hasn't been installed yet.
+        *
+        * @return bool
+        */
+       public function isInstallMode()
+       {
+               return !($this->mode & App::MODE_LOCALCONFIGPRESENT) || !($this->mode & App::MODE_DBCONFIGAVAILABLE);
+       }
+
        /**
         * @brief Returns the base filesystem path of the App
         *
@@ -1311,7 +1336,7 @@ class App
         */
        public function getCurrentTheme()
        {
-               if ($this->mode == App::MODE_INSTALL) {
+               if ($this->isInstallMode()) {
                        return '';
                }
 
index b327eb133ff9e1233d247bed46605eaff22bf82c..93cb266577115e297fd76ed7d501624681e4cad2 100644 (file)
@@ -30,7 +30,7 @@ class Config extends BaseObject
        public static function init()
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return;
                }
 
@@ -54,7 +54,7 @@ class Config extends BaseObject
        public static function load($family = "config")
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return;
                }
 
@@ -87,7 +87,7 @@ class Config extends BaseObject
        public static function get($family, $key, $default_value = null, $refresh = false)
        {
                // Database isn't ready or populated yet, fallback to file config
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return self::getApp()->getConfigValue($family, $key, $default_value);
                }
 
@@ -115,7 +115,7 @@ class Config extends BaseObject
        public static function set($family, $key, $value)
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return false;
                }
 
@@ -140,7 +140,7 @@ class Config extends BaseObject
        public static function delete($family, $key)
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return false;
                }
 
index a6083ddb9fd40e87b62c215cc9069af9277830b5..f619afade06423a4f498e3bc730bddb97be27498 100644 (file)
@@ -92,7 +92,7 @@ HELP;
                        throw new CommandArgsException('Too many arguments');
                }
 
-               if ($a->mode === \Friendica\App::MODE_INSTALL) {
+               if (!($a->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        $this->out('Database isn\'t ready or populated yet, showing file config only');
                }
 
@@ -126,7 +126,7 @@ HELP;
                if (count($this->args) == 0) {
                        Core\Config::load();
 
-                       if (Core\Config::get('system', 'config_adapter') != 'preload' && $a->mode !== \Friendica\App::MODE_INSTALL) {
+                       if (Core\Config::get('system', 'config_adapter') != 'preload' && $a->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE) {
                                $this->out('Warning: The JIT (Just In Time) Config adapter doesn\'t support loading the entire configuration, showing file config only');
                        }
 
index 5fcc6be160acaf1686bf9987593efd3c4e95663d..59a5d9cfdc1ce99daa23eb813e940c62de14b5de 100644 (file)
@@ -56,7 +56,7 @@ HELP;
                        throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
                }
 
-               if ($a->mode == \Friendica\App::MODE_INSTALL) {
+               if ($a->isInstallMode()) {
                        throw new \RuntimeException('Database isn\'t ready or populated yet');
                }
 
index a70888e4542baebc15aab2ac1676bf743cf8b42e..ccd6014e9c727bfbd7f9731d7d0723c445b6c557 100644 (file)
@@ -64,7 +64,7 @@ HELP;
                        throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
                }
 
-               if ($a->mode == \Friendica\App::MODE_INSTALL) {
+               if ($a->isInstallMode()) {
                        throw new \RuntimeException('Database isn\'t ready or populated yet');
                }
 
index 68d33337abaef3e8ea19ad35360984a918d725f4..90449c47879b6cafb014433d9371e26412691ddf 100644 (file)
@@ -64,7 +64,7 @@ HELP;
                        throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
                }
 
-               if ($a->mode == \Friendica\App::MODE_INSTALL) {
+               if ($a->isInstallMode()) {
                        throw new \RuntimeException('Database isn\'t ready or populated yet');
                }
 
index e5f93491905b80fa5f19e95f8f171a771216c9d3..003597472716c990e1fab7560623ddbf39060e74 100644 (file)
@@ -58,7 +58,7 @@ HELP;
                        throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
                }
 
-               if ($a->mode == \Friendica\App::MODE_INSTALL) {
+               if ($a->isInstallMode()) {
                        throw new \RuntimeException('Database isn\'t ready or populated yet');
                }
 
index 3b01bceeaf8a916bcd86584b454f98f489f78ada..aa5f75abe737b2350e199ae9083e899e6a6bce0e 100644 (file)
@@ -29,7 +29,7 @@ class PConfig extends BaseObject
        public static function init($uid)
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return;
                }
 
@@ -54,7 +54,7 @@ class PConfig extends BaseObject
        public static function load($uid, $family)
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return;
                }
 
@@ -83,7 +83,7 @@ class PConfig extends BaseObject
        public static function get($uid, $family, $key, $default_value = null, $refresh = false)
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return;
                }
 
@@ -112,7 +112,7 @@ class PConfig extends BaseObject
        public static function set($uid, $family, $key, $value)
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return false;
                }
 
@@ -138,7 +138,7 @@ class PConfig extends BaseObject
        public static function delete($uid, $family, $key)
        {
                // Database isn't ready or populated yet
-               if (self::getApp()->mode === \Friendica\App::MODE_INSTALL) {
+               if (!(self::getApp()->mode & \Friendica\App::MODE_DBCONFIGAVAILABLE)) {
                        return false;
                }
 
index e3dc4e5870d96309d2cc0e74dfc2c583568ea8df..4e2b63f044bbb2ae30ee374924671bf37c3f040e 100644 (file)
@@ -85,20 +85,6 @@ class System extends BaseObject
                return implode(', ', $callstack2);
        }
 
-       /**
-        * @brief Called from db initialisation when db is dead.
-        */
-       static public function unavailable() {
-echo <<< EOT
-<html>
-       <head><title>System Unavailable</title></head>
-       <body>Apologies but this site is unavailable at the moment. Please try again later.</body>
-</html>
-EOT;
-
-               killme();
-       }
-
        /**
         * Generic XML return
         * Outputs a basic dfrn XML status structure to STDOUT, with a <status> variable