diff --git a/src/App.php b/src/App.php index 57d61d04bb..1045c413dc 100644 --- a/src/App.php +++ b/src/App.php @@ -1360,14 +1360,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,16 +1710,7 @@ 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; - } - - // initialise content region - if ($this->getMode()->isNormal()) { - Core\Addon::callHooks('page_content_top', $this->page['content']); - } + $content = ''; // Call module functions if ($this->module_loaded) { @@ -1748,20 +1743,28 @@ class App } if (! $this->error) { - $arr = ['content' => $this->page['content']]; + $arr = ['content' => $content]; Core\Addon::callHooks($this->module . '_mod_content', $arr); - $this->page['content'] = $arr['content']; + $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 (function_exists(str_replace('-', '_', $this->getCurrentTheme()) . '_content_loaded')) { - $func = str_replace('-', '_', $this->getCurrentTheme()) . '_content_loaded'; - $func($this); + $content .= $arr['content']; } } + // Load current theme info after module has been executed 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; + } + + // initialise content region + if ($this->getMode()->isNormal()) { + Core\Addon::callHooks('page_content_top', $this->page['content']); + } + + $this->page['content'] .= $content; + /* Create the page head after setting the language * and getting any auth credentials. *