X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp.php;h=f5626761e59d5ac8327e4d7fb6ada1395f1137a4;hb=d6af9515ba13bf6350fd3a2714e44e0d2765a121;hp=2330bc118586026f119e80c0c3a5596d171a58f4;hpb=3086666c38e6595d2254a08534668b900524927f;p=friendica.git diff --git a/src/App.php b/src/App.php index 2330bc1185..f5626761e5 100644 --- a/src/App.php +++ b/src/App.php @@ -9,6 +9,8 @@ use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Core\System; +use Friendica\Database\DBM; +use dba; use Detection\MobileDetect; @@ -32,6 +34,10 @@ require_once 'include/text.php'; */ class App { + const MODE_NORMAL = 0; + const MODE_INSTALL = 1; + const MODE_MAINTENANCE = 2; + public $module_loaded = false; public $module_class = null; public $query_string; @@ -52,6 +58,7 @@ class App public $argv; public $argc; public $module; + public $mode = App::MODE_NORMAL; public $pager; public $strings; public $basepath; @@ -212,12 +219,6 @@ class App . $this->basepath . DIRECTORY_SEPARATOR . 'library' . PATH_SEPARATOR . $this->basepath); - - if (is_array($_SERVER['argv']) && $_SERVER['argc'] > 1 && substr(end($_SERVER['argv']), 0, 4) == 'http') { - $this->set_baseurl(array_pop($_SERVER['argv'])); - $_SERVER['argc'] --; - } - if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === 'pagename=') { $this->query_string = substr($_SERVER['QUERY_STRING'], 9); @@ -294,6 +295,14 @@ class App // Register template engines $this->register_template_engine('Friendica\Render\FriendicaSmartyEngine'); + /** + * Load the configuration file which contains our DB credentials. + * Ignore errors. If the file doesn't exist or is empty, we are running in + * installation mode. * + */ + $this->mode = ((file_exists('.htconfig.php') && filesize('.htconfig.php')) ? App::MODE_NORMAL : App::MODE_INSTALL); + + self::$a = $this; } @@ -854,23 +863,8 @@ class App return; } - // If the last worker fork was less than 2 seconds before then don't fork another one. - // This should prevent the forking of masses of workers. - $cachekey = 'app:proc_run:started'; - $result = Cache::get($cachekey); - - if (!is_null($result) && ( time() - $result) < 2) { - return; - } - - // Set the timestamp of the last proc_run - Cache::set($cachekey, time(), CACHE_MINUTE); - array_unshift($args, ((x($this->config, 'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php')); - // add baseurl to args. cli scripts can't construct it - $args[] = $this->get_baseurl(); - for ($x = 0; $x < count($args); $x ++) { $args[$x] = escapeshellarg($args[$x]); } @@ -982,6 +976,10 @@ class App if ($cat === 'config') { $this->config[$k] = $value; } else { + if (!isset($this->config[$cat])) { + $this->config[$cat] = []; + } + $this->config[$cat][$k] = $value; } } @@ -1040,6 +1038,14 @@ class App // Only arrays are serialized in database, so we have to unserialize sparingly $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + if (!isset($this->config[$uid])) { + $this->config[$uid] = []; + } + + if (!isset($this->config[$uid][$cat])) { + $this->config[$uid][$cat] = []; + } + $this->config[$uid][$cat][$k] = $value; } @@ -1056,4 +1062,125 @@ class App unset($this->config[$uid][$cat][$k]); } } + + /** + * Generates the site's default sender email address + * + * @return string + */ + public function getSenderEmailAddress() + { + $sender_email = Config::get('config', 'sender_email'); + if (empty($sender_email)) { + $hostname = $this->get_hostname(); + if (strpos($hostname, ':')) { + $hostname = substr($hostname, 0, strpos($hostname, ':')); + } + + $sender_email = 'noreply@' . $hostname; + } + + return $sender_email; + } + + /** + * @note Checks, if the App is in the Maintenance-Mode + * + * @return boolean + */ + public function checkMaintenanceMode() + { + if (Config::get('system', 'maintenance')) { + $this->mode = App::MODE_MAINTENANCE; + return true; + } + + return false; + } + + /** + * Returns the current theme name. + * + * @return string + */ + public function getCurrentTheme() + { + if ($this->mode == App::MODE_INSTALL) { + return ''; + } + + //// @TODO Compute the current theme only once (this behavior has + /// already been implemented, but it didn't work well - + /// https://github.com/friendica/friendica/issues/5092) + $this->computeCurrentTheme(); + + return $this->current_theme; + } + + /** + * Computes the current theme name based on the node settings, the user settings and the device type + * + * @throws Exception + */ + private function computeCurrentTheme() + { + $system_theme = Config::get('system', 'theme'); + if (!$system_theme) { + throw new Exception(L10n::t('No system theme config value set.')); + } + + // Sane default + $this->current_theme = $system_theme; + + $allowed_themes = explode(',', Config::get('system', 'allowed_themes', $system_theme)); + + $page_theme = null; + // Find the theme that belongs to the user whose stuff we are looking at + if ($this->profile_uid && ($this->profile_uid != local_user())) { + // Allow folks to override user themes and always use their own on their own site. + // This works only if the user is on the same server + $user = dba::selectFirst('user', ['theme'], ['uid' => $this->profile_uid]); + if (DBM::is_result($user) && !PConfig::get(local_user(), 'system', 'always_my_theme')) { + $page_theme = $user['theme']; + } + } + + $user_theme = defaults($_SESSION, 'theme', $system_theme); + // Specific mobile theme override + if (($this->is_mobile || $this->is_tablet) && defaults($_SESSION, 'show-mobile', true)) { + $system_mobile_theme = Config::get('system', 'mobile-theme'); + $user_mobile_theme = defaults($_SESSION, 'mobile-theme', $system_mobile_theme); + + // --- means same mobile theme as desktop + if (!empty($user_mobile_theme) && $user_mobile_theme !== '---') { + $user_theme = $user_mobile_theme; + } + } + + if ($page_theme) { + $theme_name = $page_theme; + } else { + $theme_name = $user_theme; + } + + if ($theme_name + && in_array($theme_name, $allowed_themes) + && (file_exists('view/theme/' . $theme_name . '/style.css') + || file_exists('view/theme/' . $theme_name . '/style.php')) + ) { + $this->current_theme = $theme_name; + } + } + + /** + * @brief Return full URL to theme which is currently in effect. + * + * Provide a sane default if nothing is chosen or the specified theme does not exist. + * + * @return string + */ + public function getCurrentThemeStylesheetPath() + { + return Core\Theme::getStylesheetPath($this->getCurrentTheme()); + } }