Allow theme setting in module
authorHypolite Petovan <hypolite@mrpetovan.com>
Sat, 29 Dec 2018 05:18:52 +0000 (00:18 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sat, 29 Dec 2018 20:40:04 +0000 (15:40 -0500)
- Restore theme name caching

src/App.php

index 57d61d04bb32eca58dacf912a886b54ea1870645..1045c413dca53f8e0256ce96fb3c9f056e162ef1 100644 (file)
@@ -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'];
+                               $content .= $arr['content'];
                        }
+               }
 
-                       if (function_exists(str_replace('-', '_', $this->getCurrentTheme()) . '_content_loaded')) {
-                               $func = str_replace('-', '_', $this->getCurrentTheme()) . '_content_loaded';
-                               $func($this);
-                       }
+               // 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.
                 *