X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp.php;h=3325f5b260357694b0bc81d590cd48abe31788d3;hb=d7c832748289b24741e34bc44e4906fc71a45d84;hp=c7305c8c1dd40e0abcba0ac36df862040fb41449;hpb=0a82fe4211f73cf10107feb69fe38eaa85eb61f8;p=friendica.git diff --git a/src/App.php b/src/App.php index c7305c8c1d..3325f5b260 100644 --- a/src/App.php +++ b/src/App.php @@ -8,10 +8,12 @@ use Exception; use Friendica\App\Arguments; use Friendica\App\BaseURL; use Friendica\App\Page; +use Friendica\App\Authentication; use Friendica\Core\Config\Cache\ConfigCache; use Friendica\Core\Config\Configuration; use Friendica\Core\Config\PConfiguration; use Friendica\Core\L10n\L10n; +use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Core\Theme; use Friendica\Database\Database; @@ -92,10 +94,10 @@ class App */ private $baseURL; - /** - * @var string The name of the current theme - */ + /** @var string The name of the current theme */ private $currentTheme; + /** @var string The name of the current mobile theme */ + private $currentMobileTheme; /** * @var Configuration The config @@ -383,7 +385,7 @@ class App * @deprecated 2019.09 - Use BaseURL->remove() instead * @see BaseURL::remove() */ - public function removeBaseURL($origURL) + public function removeBaseURL(string $origURL) { return $this->baseURL->remove($origURL); } @@ -450,10 +452,10 @@ class App } /** - * Returns the current theme name. + * Returns the current theme name. May be overriden by the mobile theme name. * - * @return string the name of the current theme - * @throws HTTPException\InternalServerErrorException + * @return string + * @throws Exception */ public function getCurrentTheme() { @@ -461,6 +463,16 @@ class App return ''; } + // Specific mobile theme override + if (($this->mode->isMobile() || $this->mode->isTablet()) && Core\Session::get('show-mobile', true)) { + $user_mobile_theme = $this->getCurrentMobileTheme(); + + // --- means same mobile theme as desktop + if (!empty($user_mobile_theme) && $user_mobile_theme !== '---') { + return $user_mobile_theme; + } + } + if (!$this->currentTheme) { $this->computeCurrentTheme(); } @@ -468,13 +480,37 @@ class App return $this->currentTheme; } + /** + * Returns the current mobile theme name. + * + * @return string + * @throws Exception + */ + public function getCurrentMobileTheme() + { + if ($this->mode->isInstall()) { + return ''; + } + + if (is_null($this->currentMobileTheme)) { + $this->computeCurrentMobileTheme(); + } + + return $this->currentMobileTheme; + } + public function setCurrentTheme($theme) { $this->currentTheme = $theme; } + public function setCurrentMobileTheme($theme) + { + $this->currentMobileTheme = $theme; + } + /** - * Computes the current theme name based on the node settings, the user settings and the device type + * Computes the current theme name based on the node settings, the page owner settings and the user settings * * @throws Exception */ @@ -486,7 +522,7 @@ class App } // Sane default - $this->currentTheme = $system_theme; + $this->setCurrentTheme($system_theme); $page_theme = null; // Find the theme that belongs to the user whose stuff we are looking at @@ -499,24 +535,7 @@ class App } } - $user_theme = Core\Session::get('theme', $system_theme); - - // Specific mobile theme override - if (($this->is_mobile || $this->is_tablet) && Core\Session::get('show-mobile', true)) { - $system_mobile_theme = $this->config->get('system', 'mobile-theme'); - $user_mobile_theme = Core\Session::get('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; - } + $theme_name = $page_theme ?: Core\Session::get('theme', $system_theme); $theme_name = Strings::sanitizeFilePathItem($theme_name); if ($theme_name @@ -524,7 +543,40 @@ class App && (file_exists('view/theme/' . $theme_name . '/style.css') || file_exists('view/theme/' . $theme_name . '/style.php')) ) { - $this->currentTheme = $theme_name; + $this->setCurrentTheme($theme_name); + } + } + + /** + * Computes the current mobile theme name based on the node settings, the page owner settings and the user settings + */ + private function computeCurrentMobileTheme() + { + $system_mobile_theme = $this->config->get('system', 'mobile-theme', ''); + + // Sane default + $this->setCurrentMobileTheme($system_mobile_theme); + + $page_mobile_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 + if (!Core\PConfig::get(local_user(), 'system', 'always_my_theme')) { + $page_mobile_theme = Core\PConfig::get($this->profile_uid, 'system', 'mobile-theme'); + } + } + + $mobile_theme_name = $page_mobile_theme ?: Core\Session::get('mobile-theme', $system_mobile_theme); + + $mobile_theme_name = Strings::sanitizeFilePathItem($mobile_theme_name); + if ($mobile_theme_name == '---' + || + in_array($mobile_theme_name, Theme::getAllowedList()) + && (file_exists('view/theme/' . $mobile_theme_name . '/style.css') + || file_exists('view/theme/' . $mobile_theme_name . '/style.php')) + ) { + $this->setCurrentMobileTheme($mobile_theme_name); } } @@ -534,7 +586,7 @@ class App * Provide a sane default if nothing is chosen or the specified theme does not exist. * * @return string - * @throws HTTPException\InternalServerErrorException + * @throws Exception */ public function getCurrentThemeStylesheetPath() { @@ -587,9 +639,14 @@ class App * * This probably should change to limit the size of this monster method. * - * @param App\Module $module The determined module + * @param App\Module $module The determined module + * @param App\Router $router + * @param PConfiguration $pconfig + * @param Authentication $auth The Authentication backend of the node + * @throws HTTPException\InternalServerErrorException + * @throws \ImagickException */ - public function runFrontend(App\Module $module, App\Router $router, PConfiguration $pconfig) + public function runFrontend(App\Module $module, App\Router $router, PConfiguration $pconfig, Authentication $auth) { $moduleName = $module->getName(); @@ -613,19 +670,11 @@ class App System::externalRedirect($this->baseURL->get() . '/' . $this->args->getQueryString()); } - Core\Session::init(); Core\Hook::callAll('init_1'); } // Exclude the backend processes from the session management - if (!$this->mode->isBackend()) { - $stamp1 = microtime(true); - session_start(); - $this->profiler->saveTimestamp($stamp1, 'parser', Core\System::callstack()); - $this->l10n->setSessionVariable(); - $this->l10n->setLangFromSession(); - } else { - $_SESSION = []; + if ($this->mode->isBackend()) { Core\Worker::executeIfIdle(); } @@ -663,7 +712,7 @@ class App Model\Profile::openWebAuthInit($token); } - Login::sessionAuth(); + $auth->withSession($this); if (empty($_SESSION['authenticated'])) { header('X-Account-Management-Status: none'); @@ -733,8 +782,7 @@ class App $module = $module->determineClass($this->args, $router, $this->config); // Let the module run it's internal process (init, get, post, ...) - $module->run($this->l10n, $this, $this->logger, $this->getCurrentTheme(), $_SERVER, $_POST); - + $module->run($this->l10n, $this, $this->logger, $_SERVER, $_POST); } catch (HTTPException $e) { ModuleHTTPException::rawContent($e); } @@ -743,22 +791,12 @@ class App } /** - * Redirects to another module relative to the current Friendica base. - * If you want to redirect to a external URL, use System::externalRedirectTo() - * - * @param string $toUrl The destination URL (Default is empty, which is the default page of the Friendica node) - * @param bool $ssl if true, base URL will try to get called with https:// (works just for relative paths) - * - * @throws HTTPException\InternalServerErrorException In Case the given URL is not relative to the Friendica node + * @deprecated 2019.12 use BaseUrl::redirect instead + * @see BaseURL::redirect() */ public function internalRedirect($toUrl = '', $ssl = false) { - if (!empty(parse_url($toUrl, PHP_URL_SCHEME))) { - throw new HTTPException\InternalServerErrorException("'$toUrl is not a relative path, please use System::externalRedirectTo"); - } - - $redirectTo = $this->baseURL->get($ssl) . '/' . ltrim($toUrl, '/'); - Core\System::externalRedirect($redirectTo); + $this->baseURL->redirect($toUrl, $ssl); } /** @@ -774,7 +812,7 @@ class App if (!empty(parse_url($toUrl, PHP_URL_SCHEME))) { Core\System::externalRedirect($toUrl); } else { - $this->internalRedirect($toUrl); + $this->baseURL->redirect($toUrl); } } }