use Friendica\Database\DBA;
use Friendica\Network\HTTPException\InternalServerErrorException;
-require_once 'boot.php';
-require_once 'include/text.php';
-
/**
*
* class: App
*/
private $isAjax;
+ /**
+ * @var MobileDetect
+ */
+ public $mobileDetect;
+
/**
* Register a stylesheet file path to be included in the <head> tag of every page.
* Inclusion is done in App->initHead().
// Detect mobile devices
$mobile_detect = new MobileDetect();
+
+ $this->mobileDetect = $mobile_detect;
+
$this->is_mobile = $mobile_detect->isMobile();
$this->is_tablet = $mobile_detect->isTablet();
if (!empty($relative_script_path)) {
// Module
if (!empty($_SERVER['QUERY_STRING'])) {
- $path = trim(dirname($relative_script_path, substr_count(trim($_SERVER['QUERY_STRING'], '/'), '/') + 1), '/');
+ $path = trim(rdirname($relative_script_path, substr_count(trim($_SERVER['QUERY_STRING'], '/'), '/') + 1), '/');
} else {
// Root page
$path = trim($relative_script_path, '/');
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
*
}
}
- // 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
+ // 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 = '';
if (!$this->error) {
call_user_func([$this->module_class, 'rawContent']);
}
+ }
- if (function_exists(str_replace('-', '_', $this->getCurrentTheme()) . '_init')) {
- $func = str_replace('-', '_', $this->getCurrentTheme()) . '_init';
- $func($this);
- }
+ // 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')) {
+ $func = str_replace('-', '_', $this->getCurrentTheme()) . '_init';
+ $func($this);
+ }
+
+ 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) {
- $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);
- }
+ // 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.
*