3 namespace Friendica\App;
5 use Friendica\Core\Config\Cache\ConfigCache;
6 use Friendica\Database\Database;
7 use Friendica\Util\BasePath;
10 * Mode of the current Friendica Node
12 * @package Friendica\App
16 const LOCALCONFIGPRESENT = 1;
17 const DBAVAILABLE = 2;
18 const DBCONFIGAVAILABLE = 4;
19 const MAINTENANCEDISABLED = 8;
22 * @var int the mode of this Application
27 public function __construct(int $mode = 0)
35 * - App::MODE_INSTALL : Either the database connection can't be established or the config table doesn't exist
36 * - App::MODE_MAINTENANCE: The maintenance mode has been set
37 * - App::MODE_NORMAL : Normal run with all features enabled
39 * @return Mode returns the determined mode
43 public function determine(BasePath $basepath, Database $database, ConfigCache $configCache)
47 $basepathName = $basepath->getPath();
49 if (!file_exists($basepathName . '/config/local.config.php')
50 && !file_exists($basepathName . '/config/local.ini.php')
51 && !file_exists($basepathName . '/.htconfig.php')) {
52 return new Mode($mode);
55 $mode |= Mode::LOCALCONFIGPRESENT;
57 if (!$database->connected()) {
58 return new Mode($mode);
61 $mode |= Mode::DBAVAILABLE;
63 if ($database->fetchFirst("SHOW TABLES LIKE 'config'") === false) {
64 return new Mode($mode);
67 $mode |= Mode::DBCONFIGAVAILABLE;
69 if (!empty($configCache->get('system', 'maintenance')) ||
70 // Don't use Config or Configuration here because we're possibly BEFORE initializing the Configuration,
71 // so this could lead to a dependency circle
72 !empty($database->selectFirst('config', ['v'], ['cat' => 'system', 'k' => 'maintenance'])['v'])) {
73 return new Mode($mode);
76 $mode |= Mode::MAINTENANCEDISABLED;
78 return new Mode($mode);
82 * Checks, if the Friendica Node has the given mode
84 * @param int $mode A mode to test
86 * @return bool returns true, if the mode is set
88 public function has($mode)
90 return ($this->mode & $mode) > 0;
95 * Install mode is when the local config file is missing or the DB schema hasn't been installed yet.
99 public function isInstall()
101 return !$this->has(Mode::LOCALCONFIGPRESENT) ||
102 !$this->has(MODE::DBCONFIGAVAILABLE);
106 * Normal mode is when the local config file is set, the DB schema is installed and the maintenance mode is off.
110 public function isNormal()
112 return $this->has(Mode::LOCALCONFIGPRESENT) &&
113 $this->has(Mode::DBAVAILABLE) &&
114 $this->has(Mode::DBCONFIGAVAILABLE) &&
115 $this->has(Mode::MAINTENANCEDISABLED);