use Exception;
use Friendica\Database\DBA;
use Friendica\Network\HTTPException\InternalServerErrorException;
+use Psr\Log\LoggerInterface;
/**
*
*/
private $isAjax;
+ /**
+ * @var MobileDetect
+ */
+ public $mobileDetect;
+
+ /**
+ * @var LoggerInterface The current logger of this App
+ */
+ private $logger;
+
/**
* Register a stylesheet file path to be included in the <head> tag of every page.
* Inclusion is done in App->initHead().
* @see initHead()
*
* @param string $path
+ * @throws InternalServerErrorException
*/
public function registerStylesheet($path)
{
* @see initFooter()
*
* @param string $path
+ * @throws InternalServerErrorException
*/
public function registerFooterScript($path)
{
/**
* @brief App constructor.
*
- * @param string $basePath Path to the app base folder
- * @param bool $isBackend Whether it is used for backend or frontend (Default true=backend)
+ * @param string $basePath Path to the app base folder
+ * @param LoggerInterface $logger Logger of this application
+ * @param bool $isBackend Whether it is used for backend or frontend (Default true=backend)
*
* @throws Exception if the Basepath is not usable
*/
- public function __construct($basePath, $isBackend = true)
+ public function __construct($basePath, LoggerInterface $logger, $isBackend = true)
{
+ $this->logger = $logger;
+
if (!static::isDirectoryUsable($basePath, false)) {
throw new Exception('Basepath ' . $basePath . ' isn\'t usable.');
}
// Detect mobile devices
$mobile_detect = new MobileDetect();
+
+ $this->mobileDetect = $mobile_detect;
+
$this->is_mobile = $mobile_detect->isMobile();
$this->is_tablet = $mobile_detect->isTablet();
return $this->mode;
}
+ /**
+ * Returns the Logger of the Application
+ *
+ * @return LoggerInterface The Logger
+ * @throws InternalServerErrorException when the logger isn't created
+ */
+ public function getLogger()
+ {
+ if (empty($this->logger)) {
+ throw new InternalServerErrorException('Logger of the Application is not defined');
+ }
+
+ return $this->logger;
+ }
+
/**
* Reloads the whole app instance
*/
Core\L10n::init();
$this->process_id = Core\System::processID('log');
+
+ Core\Logger::setLogger($this->logger);
}
/**
* finally for PWD
*
* @return string
+ * @throws InternalServerErrorException
*/
public function getBasePath()
{
*
* @param bool $ssl Whether to append http or https under SSL_POLICY_SELFSIGN
* @return string Friendica server base URL
+ * @throws InternalServerErrorException
*/
public function getBaseURL($ssl = false)
{
$this->hostname = Core\Config::get('config', 'hostname');
}
- return $scheme . '://' . $this->hostname . !empty($this->getURLPath() ? '/' . $this->getURLPath() : '' );
+ return $scheme . '://' . $this->hostname . (!empty($this->getURLPath()) ? '/' . $this->getURLPath() : '' );
}
/**
* Clears the baseurl cache to prevent inconsistencies
*
* @param string $url
+ * @throws InternalServerErrorException
*/
public function setBaseURL($url)
{
$touch_icon = 'images/friendica-128.png';
}
- Core\Addon::callHooks('head', $this->page['htmlhead']);
+ Core\Hook::callAll('head', $this->page['htmlhead']);
$tpl = Core\Renderer::getMarkupTemplate('head.tpl');
/* put the head template at the beginning of page['htmlhead']
]);
}
- Core\Addon::callHooks('footer', $this->page['footer']);
+ Core\Hook::callAll('footer', $this->page['footer']);
$tpl = Core\Renderer::getMarkupTemplate('footer.tpl');
$this->page['footer'] = Core\Renderer::replaceMacros($tpl, [
* @param string $origURL
*
* @return string The cleaned url
+ * @throws InternalServerErrorException
*/
public function removeBaseURL($origURL)
{
* Returns the current UserAgent as a String
*
* @return string the UserAgent as a String
+ * @throws InternalServerErrorException
*/
public function getUserAgent()
{
* @brief Checks if the minimal memory is reached
*
* @return bool Is the memory limit reached?
+ * @throws InternalServerErrorException
*/
public function isMinMemoryReached()
{
* @brief Checks if the maximum load is reached
*
* @return bool Is the load reached?
+ * @throws InternalServerErrorException
*/
public function isMaxLoadReached()
{
*
* @param string $command The command to execute
* @param array $args Arguments to pass to the command ( [ 'key' => value, 'key2' => value2, ... ]
+ * @throws InternalServerErrorException
*/
public function proc_run($command, $args)
{
/**
* @brief Checks if a given directory is usable for the system
*
+ * @param $directory
+ * @param bool $check_writable
* @return boolean the directory is usable
+ * @throws Exception
*/
public static function isDirectoryUsable($directory, $check_writable = true)
{
* Generates the site's default sender email address
*
* @return string
+ * @throws InternalServerErrorException
*/
public function getSenderEmailAddress()
{
* Returns the current theme name.
*
* @return string the name of the current theme
+ * @throws InternalServerErrorException
*/
public function getCurrentTheme()
{
* Provide a sane default if nothing is chosen or the specified theme does not exist.
*
* @return string
+ * @throws InternalServerErrorException
*/
public function getCurrentThemeStylesheetPath()
{
}
Core\Session::init();
- Core\Addon::callHooks('init_1');
+ Core\Hook::callAll('init_1');
}
// Exclude the backend processes from the session management
$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 = '';
- Core\Addon::callHooks($this->module . '_mod_init', $placeholder);
+ Core\Hook::callAll($this->module . '_mod_init', $placeholder);
call_user_func([$this->module_class, 'init']);
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);
+ Core\Hook::callAll($this->module . '_mod_post', $_POST);
call_user_func([$this->module_class, 'post']);
}
if (! $this->error) {
- Core\Addon::callHooks($this->module . '_mod_afterpost', $placeholder);
+ Core\Hook::callAll($this->module . '_mod_afterpost', $placeholder);
call_user_func([$this->module_class, 'afterpost']);
}
if (! $this->error) {
$arr = ['content' => $content];
- Core\Addon::callHooks($this->module . '_mod_content', $arr);
+ Core\Hook::callAll($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);
+ Core\Hook::callAll($this->module . '_mod_aftercontent', $arr);
$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']);
+ Core\Hook::callAll('page_content_top', $this->page['content']);
}
$this->page['content'] .= $content;
}
// Report anything which needs to be communicated in the notification area (before the main body)
- Core\Addon::callHooks('page_end', $this->page['content']);
+ Core\Hook::callAll('page_end', $this->page['content']);
// Add the navigation (menu) template
if ($this->module != 'install' && $this->module != 'maintenance') {
// And then append it to the target
$target->documentElement->appendChild($item);
}
- }
- if (isset($_GET["mode"]) && ($_GET["mode"] == "raw")) {
- header("Content-type: text/html; charset=utf-8");
+ if ($_GET["mode"] == "raw") {
+ header("Content-type: text/html; charset=utf-8");
- echo substr($target->saveHTML(), 6, -8);
+ echo substr($target->saveHTML(), 6, -8);
- exit();
+ exit();
+ }
}
$page = $this->page;
* Should only be used if it isn't clear if the URL is either internal or external
*
* @param string $toUrl The target URL
- *
+ * @throws InternalServerErrorException
*/
public function redirect($toUrl)
{