X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp.php;h=6f95b8edb7d1994637012409b7f7a078eb965dc3;hb=458981f75cff2427976c9abc787eadf8e9e6267f;hp=deb15f702c5dbc98713c34ab523bc7ad622bdf3b;hpb=3f74ba88c2b44189e6df07fee2f1e8014a9bb7f5;p=friendica.git diff --git a/src/App.php b/src/App.php index deb15f702c..6f95b8edb7 100644 --- a/src/App.php +++ b/src/App.php @@ -136,30 +136,6 @@ class App $this->footerScripts[] = trim($url, '/'); } - /** - * @brief An array for all theme-controllable parameters - * - * Mostly unimplemented yet. Only options 'template_engine' and - * beyond are used. - */ - public $theme = [ - 'sourcename' => '', - 'videowidth' => 425, - 'videoheight' => 350, - 'force_max_items' => 0, - 'stylesheet' => '', - 'template_engine' => 'smarty3', - ]; - - /** - * @brief An array of registered template engines ('name'=>'class name') - */ - public $template_engines = []; - - /** - * @brief An array of instanced template engines ('name'=>'instance') - */ - public $template_engine_instance = []; public $process_id; public $queue; private $scheme; @@ -238,7 +214,7 @@ class App set_include_path( get_include_path() . PATH_SEPARATOR . $this->getBasePath() . DIRECTORY_SEPARATOR . 'include' . PATH_SEPARATOR - . $this->getBasePath(). DIRECTORY_SEPARATOR . 'library' . PATH_SEPARATOR + . $this->getBasePath() . DIRECTORY_SEPARATOR . 'library' . PATH_SEPARATOR . $this->getBasePath()); if (!empty($_SERVER['QUERY_STRING']) && strpos($_SERVER['QUERY_STRING'], 'pagename=') === 0) { @@ -301,7 +277,7 @@ class App $this->isAjax = strtolower(defaults($_SERVER, 'HTTP_X_REQUESTED_WITH', '')) == 'xmlhttprequest'; // Register template engines - $this->registerTemplateEngine('Friendica\Render\FriendicaSmartyEngine'); + Core\Renderer::registerTemplateEngine('Friendica\Render\FriendicaSmartyEngine'); } /** @@ -353,24 +329,24 @@ class App * Load the configuration files * * First loads the default value for all the configuration keys, then the legacy configuration files, then the - * expected local.ini.php + * expected local.config.php */ private function loadConfigFiles() { - $this->loadConfigFile($this->getBasePath() . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.ini.php'); - $this->loadConfigFile($this->getBasePath() . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'settings.ini.php'); + $this->loadConfigFile($this->getBasePath() . '/config/defaults.config.php'); + $this->loadConfigFile($this->getBasePath() . '/config/settings.config.php'); // Legacy .htconfig.php support - if (file_exists($this->getBasePath() . DIRECTORY_SEPARATOR . '.htpreconfig.php')) { + if (file_exists($this->getBasePath() . '/.htpreconfig.php')) { $a = $this; - include $this->getBasePath() . DIRECTORY_SEPARATOR . '.htpreconfig.php'; + include $this->getBasePath() . '/.htpreconfig.php'; } // Legacy .htconfig.php support - if (file_exists($this->getBasePath() . DIRECTORY_SEPARATOR . '.htconfig.php')) { + if (file_exists($this->getBasePath() . '/.htconfig.php')) { $a = $this; - include $this->getBasePath() . DIRECTORY_SEPARATOR . '.htconfig.php'; + include $this->getBasePath() . '/.htconfig.php'; $this->setConfigValue('database', 'hostname', $db_host); $this->setConfigValue('database', 'username', $db_user); @@ -398,33 +374,26 @@ class App } } - if (file_exists($this->getBasePath() . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.ini.php')) { - $this->loadConfigFile($this->getBasePath() . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.ini.php', true); + if (file_exists($this->getBasePath() . '/config/local.config.php')) { + $this->loadConfigFile($this->getBasePath() . '/config/local.config.php', true); + } elseif (file_exists($this->getBasePath() . '/config/local.ini.php')) { + $this->loadINIConfigFile($this->getBasePath() . '/config/local.ini.php', true); } } /** - * Tries to load the specified configuration file into the App->config array. + * Tries to load the specified legacy configuration file into the App->config array. * Doesn't overwrite previously set values by default to prevent default config files to supersede DB Config. * - * The config format is INI and the template for configuration files is the following: - * - * $values) { - foreach ($values as $key => $value) { - if ($overwrite) { - $this->setConfigValue($category, $key, $value); - } else { - $this->setDefaultConfigValue($category, $key, $value); - } - } + $this->loadConfigArray($config, $overwrite); + } + + /** + * Tries to load the specified configuration file into the App->config array. + * Doesn't overwrite previously set values by default to prevent default config files to supersede DB Config. + * + * The config format is PHP array and the template for configuration files is the following: + * + * [ + * 'key' => 'value', + * ], + * ]; + * + * @param string $filepath + * @param bool $overwrite Force value overwrite if the config key already exists + * @throws Exception + */ + public function loadConfigFile($filepath, $overwrite = false) + { + if (!file_exists($filepath)) { + throw new Exception('Error loading non-existent config file ' . $filepath); } + + $config = include($filepath); + + if (!is_array($config)) { + throw new Exception('Error loading config file ' . $filepath); + } + + $this->loadConfigArray($config, $overwrite); } /** * Loads addons configuration files * - * First loads all activated addons default configuration throught the load_config hook, then load the local.ini.php + * First loads all activated addons default configuration through the load_config hook, then load the local.config.php * again to overwrite potential local addon configuration. */ private function loadAddonConfig() { // Loads addons default config - Core\Addon::callHooks('load_config'); + Core\Hook::callAll('load_config'); // Load the local addon config file to overwritten default addon config values - if (file_exists($this->getBasePath() . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'addon.ini.php')) { - $this->loadConfigFile($this->getBasePath() . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'addon.ini.php', true); + if (file_exists($this->getBasePath() . '/config/addon.config.php')) { + $this->loadConfigFile($this->getBasePath() . '/config/addon.config.php', true); + } elseif (file_exists($this->getBasePath() . '/config/addon.ini.php')) { + $this->loadINIConfigFile($this->getBasePath() . '/config/addon.ini.php', true); + } + } + + /** + * Tries to load the specified configuration array into the App->config array. + * Doesn't overwrite previously set values by default to prevent default config files to supersede DB Config. + * + * @param array $config + * @param bool $overwrite Force value overwrite if the config key already exists + */ + private function loadConfigArray(array $config, $overwrite = false) + { + foreach ($config as $category => $values) { + foreach ($values as $key => $value) { + if ($overwrite) { + $this->setConfigValue($category, $key, $value); + } else { + $this->setDefaultConfigValue($category, $key, $value); + } + } } } @@ -535,7 +549,7 @@ class App // Use environment variables for mysql if they are set beforehand if (!empty(getenv('MYSQL_HOST')) - && (!empty(getenv('MYSQL_USERNAME')) || !empty(getenv('MYSQL_USER'))) + && !empty(getenv('MYSQL_USERNAME') || !empty(getenv('MYSQL_USER'))) && getenv('MYSQL_PASSWORD') !== false && !empty(getenv('MYSQL_DATABASE'))) { @@ -654,7 +668,7 @@ class App $this->hostname = Core\Config::get('config', 'hostname'); } - return $scheme . '://' . $this->hostname . (!empty($this->getURLPath()) ? '/' . $this->getURLPath() : '' ); + return $scheme . '://' . $this->hostname . !empty($this->getURLPath() ? '/' . $this->getURLPath() : '' ); } /** @@ -685,8 +699,8 @@ class App $this->urlPath = trim($parsed['path'], '\\/'); } - if (file_exists($this->getBasePath() . DIRECTORY_SEPARATOR . '.htpreconfig.php')) { - include $this->getBasePath() . DIRECTORY_SEPARATOR . '.htpreconfig.php'; + if (file_exists($this->getBasePath() . '/.htpreconfig.php')) { + include $this->getBasePath() . '/.htpreconfig.php'; } if (Core\Config::get('config', 'hostname') != '') { @@ -744,8 +758,8 @@ class App $this->page['title'] = $this->config['sitename']; } - if (!empty($this->theme['stylesheet'])) { - $stylesheet = $this->theme['stylesheet']; + if (!empty(Core\Renderer::$theme['stylesheet'])) { + $stylesheet = Core\Renderer::$theme['stylesheet']; } else { $stylesheet = $this->getCurrentThemeStylesheetPath(); } @@ -811,9 +825,9 @@ class App */ if ($this->is_mobile || $this->is_tablet) { if (isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) { - $link = 'toggle_mobile?address=' . curPageURL(); + $link = 'toggle_mobile?address=' . urlencode(curPageURL()); } else { - $link = 'toggle_mobile?off=1&address=' . curPageURL(); + $link = 'toggle_mobile?off=1&address=' . urlencode(curPageURL()); } $this->page['footer'] .= Core\Renderer::replaceMacros(Core\Renderer::getMarkupTemplate("toggle_mobile_footer.tpl"), [ '$toggle_link' => $link, @@ -840,82 +854,18 @@ class App public function removeBaseURL($origURL) { // Remove the hostname from the url if it is an internal link - $nurl = normalise_link($origURL); - $base = normalise_link($this->getBaseURL()); + $nurl = Util\Strings::normaliseLink($origURL); + $base = Util\Strings::normaliseLink($this->getBaseURL()); $url = str_replace($base . '/', '', $nurl); // if it is an external link return the orignal value - if ($url == normalise_link($origURL)) { + if ($url == Util\Strings::normaliseLink($origURL)) { return $origURL; } else { return $url; } } - /** - * @brief Register template engine class - * - * @param string $class - */ - private function registerTemplateEngine($class) - { - $v = get_class_vars($class); - if (!empty($v['name'])) { - $name = $v['name']; - $this->template_engines[$name] = $class; - } else { - echo "template engine $class cannot be registered without a name.\n"; - die(); - } - } - - /** - * @brief Return template engine instance. - * - * If $name is not defined, return engine defined by theme, - * or default - * - * @return object Template Engine instance - */ - public function getTemplateEngine() - { - $template_engine = defaults($this->theme, 'template_engine', 'smarty3'); - - if (isset($this->template_engines[$template_engine])) { - if (isset($this->template_engine_instance[$template_engine])) { - return $this->template_engine_instance[$template_engine]; - } else { - $class = $this->template_engines[$template_engine]; - $obj = new $class; - $this->template_engine_instance[$template_engine] = $obj; - return $obj; - } - } - - echo "template engine $template_engine is not registered!\n"; - exit(); - } - - /** - * @brief Returns the active template engine. - * - * @return string the active template engine - */ - public function getActiveTemplateEngine() - { - return $this->theme['template_engine']; - } - - /** - * sets the active template engine - * - * @param string $engine the template engine (default is Smarty3) - */ - public function setActiveTemplateEngine($engine = 'smarty3') - { - $this->theme['template_engine'] = $engine; - } - /** * Saves a timestamp for a value - f.e. a call * Necessary for profiling Friendica @@ -1101,11 +1051,11 @@ class App $meminfo[$key] = (int) ($meminfo[$key] / 1024); } - if (!isset($meminfo['MemAvailable']) || !isset($meminfo['MemFree'])) { + if (!isset($meminfo['MemFree'])) { return false; } - $free = $meminfo['MemAvailable'] + $meminfo['MemFree']; + $free = $meminfo['MemFree']; $reached = ($free < $min_memory); @@ -1531,7 +1481,7 @@ class App // and www.example.com vs example.com. // We will only change the url to an ip address if there is no existing setting - if (empty($url) || (!link_compare($url, $this->getBaseURL())) && (!preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/", $this->getHostName()))) { + if (empty($url) || (!Util\Strings::compareLink($url, $this->getBaseURL())) && (!preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/", $this->getHostName()))) { Core\Config::set('system', 'url', $this->getBaseURL()); } } @@ -1642,7 +1592,7 @@ class App $this->module = 'maintenance'; } else { $this->checkURL(); - check_db(false); + Core\Update::check(false); Core\Addon::loadAddons(); Core\Hook::loadHooks(); }