X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp.php;h=bc7890fcf9ce89eef0374a3f79a1e3d9c254e262;hb=89eaf508f19be57a07971c5f40b4bb538e36e891;hp=57d61d04bb32eca58dacf912a886b54ea1870645;hpb=94eca7704130822bf83bb5fee6930dee6bae81dd;p=friendica.git diff --git a/src/App.php b/src/App.php index 57d61d04bb..bc7890fcf9 100644 --- a/src/App.php +++ b/src/App.php @@ -9,6 +9,7 @@ use DOMDocument; use DOMXPath; use Exception; use Friendica\Database\DBA; +use Friendica\Network\HTTPException; use Friendica\Network\HTTPException\InternalServerErrorException; /** @@ -101,6 +102,11 @@ class App */ private $isAjax; + /** + * @var MobileDetect + */ + public $mobileDetect; + /** * Register a stylesheet file path to be included in the tag of every page. * Inclusion is done in App->initHead(). @@ -268,6 +274,9 @@ class App // Detect mobile devices $mobile_detect = new MobileDetect(); + + $this->mobileDetect = $mobile_detect; + $this->is_mobile = $mobile_detect->isMobile(); $this->is_tablet = $mobile_detect->isTablet(); @@ -1360,14 +1369,18 @@ class App 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(); + if (!$this->currentTheme) { + $this->computeCurrentTheme(); + } return $this->currentTheme; } + public function setCurrentTheme($theme) + { + $this->currentTheme = $theme; + } + /** * Computes the current theme name based on the node settings, the user settings and the device type * @@ -1706,30 +1719,30 @@ class App } } - // Load current theme info - $theme_info_file = 'view/theme/' . $this->getCurrentTheme() . '/theme.php'; - if (file_exists($theme_info_file)) { - require_once $theme_info_file; - } + // Initialize module that can set the current theme in the init() method, either directly or via App->profile_uid + try { + $content = ''; - // initialise content region - if ($this->getMode()->isNormal()) { - Core\Addon::callHooks('page_content_top', $this->page['content']); - } + // Initialize module that can set the current theme in the init() method, either directly or via App->profile_uid + if ($this->module_loaded) { + $this->page['page_title'] = $this->module; + $placeholder = ''; - // Call module functions - if ($this->module_loaded) { - $this->page['page_title'] = $this->module; - $placeholder = ''; + Core\Addon::callHooks($this->module . '_mod_init', $placeholder); - Core\Addon::callHooks($this->module . '_mod_init', $placeholder); + call_user_func([$this->module_class, 'init']); - call_user_func([$this->module_class, 'init']); + // "rawContent" is especially meant for technical endpoints. + // This endpoint doesn't need any theme initialization or other comparable stuff. + if (!$this->error) { + call_user_func([$this->module_class, 'rawContent']); + } + } - // "rawContent" is especially meant for technical endpoints. - // This endpoint doesn't need any theme initialization or other comparable stuff. - if (!$this->error) { - call_user_func([$this->module_class, 'rawContent']); + // Load current theme info after module has been initialized as theme could have been set in module + $theme_info_file = 'view/theme/' . $this->getCurrentTheme() . '/theme.php'; + if (file_exists($theme_info_file)) { + require_once $theme_info_file; } if (function_exists(str_replace('-', '_', $this->getCurrentTheme()) . '_init')) { @@ -1737,29 +1750,40 @@ class App $func($this); } - if (! $this->error && $_SERVER['REQUEST_METHOD'] === 'POST') { - Core\Addon::callHooks($this->module . '_mod_post', $_POST); - call_user_func([$this->module_class, 'post']); - } + if ($this->module_loaded) { + if (! $this->error && $_SERVER['REQUEST_METHOD'] === 'POST') { + Core\Addon::callHooks($this->module . '_mod_post', $_POST); + call_user_func([$this->module_class, 'post']); + } - if (! $this->error) { - Core\Addon::callHooks($this->module . '_mod_afterpost', $placeholder); - call_user_func([$this->module_class, 'afterpost']); - } + if (! $this->error) { + Core\Addon::callHooks($this->module . '_mod_afterpost', $placeholder); + call_user_func([$this->module_class, 'afterpost']); + } - if (! $this->error) { - $arr = ['content' => $this->page['content']]; - Core\Addon::callHooks($this->module . '_mod_content', $arr); - $this->page['content'] = $arr['content']; - $arr = ['content' => call_user_func([$this->module_class, 'content'])]; - Core\Addon::callHooks($this->module . '_mod_aftercontent', $arr); - $this->page['content'] .= $arr['content']; + if (! $this->error) { + $arr = ['content' => $content]; + Core\Addon::callHooks($this->module . '_mod_content', $arr); + $content = $arr['content']; + $arr = ['content' => call_user_func([$this->module_class, 'content'])]; + Core\Addon::callHooks($this->module . '_mod_aftercontent', $arr); + $content .= $arr['content']; + } } - if (function_exists(str_replace('-', '_', $this->getCurrentTheme()) . '_content_loaded')) { - $func = str_replace('-', '_', $this->getCurrentTheme()) . '_content_loaded'; - $func($this); + // initialise content region + if ($this->getMode()->isNormal()) { + Core\Addon::callHooks('page_content_top', $this->page['content']); } + + $this->page['content'] .= $content; + } catch (HTTPException $e) { + header($_SERVER["SERVER_PROTOCOL"] . " " . $e->httpcode . " " . $e->httpdesc , true, $e->httpcode); + $error = ($e->getMessage() !== "" ? $e->getMessage() : $e->httpdesc); + $tpl = Core\Renderer::getMarkupTemplate("404.tpl"); + $this->page['content'] = Core\Renderer::replaceMacros($tpl, [ + '$message' => $error + ]); } /* Create the page head after setting the language