$a = new App(dirname(__DIR__));
-if ($a->mode === App::MODE_INSTALL) {
+if ($a->isInstallMode()) {
die("Friendica isn't properly installed yet.\n");
}
$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
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;
$process_id = session_id();
if ($process_id == '') {
- $process_id = get_app()->process_id;
+ $process_id = $a->process_id;
}
$callers = debug_backtrace();
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://")
// 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);
*/
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;
public $argv;
public $argc;
public $module;
- public $mode = App::MODE_NORMAL;
+ public $mode = App::MODE_INSTALL;
public $strings;
public $basepath;
public $urlpath;
$this->determineUrlPath();
- if ($this->mode === self::MODE_NORMAL) {
+ Config::load();
+
+ if ($this->mode & self::MODE_DBAVAILABLE) {
Core\Addon::loadHooks();
$this->loadAddonConfig();
*/
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()
$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
*
*/
public function getCurrentTheme()
{
- if ($this->mode == App::MODE_INSTALL) {
+ if ($this->isInstallMode()) {
return '';
}
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;
}
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;
}
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);
}
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;
}
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;
}
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');
}
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');
}
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');
}
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');
}
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');
}
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');
}
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;
}
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;
}
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;
}
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;
}
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;
}
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