use Friendica\App\Arguments;
use Friendica\App\BaseURL;
use Friendica\App\Module;
+use Friendica\Core\Config\Factory\Config;
use Friendica\Module\Maintenance;
use Friendica\Security\Authentication;
-use Friendica\Core\Config\Cache;
-use Friendica\Core\Config\IConfig;
-use Friendica\Core\PConfig\IPConfig;
+use Friendica\Core\Config\ValueObject\Cache;
+use Friendica\Core\Config\Capability\IManageConfigValues;
+use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\L10n;
use Friendica\Core\System;
use Friendica\Core\Theme;
use Friendica\Database\Database;
use Friendica\Model\Contact;
use Friendica\Model\Profile;
-use Friendica\Model\User;
use Friendica\Module\Special\HTTPException as ModuleHTTPException;
use Friendica\Network\HTTPException;
-use Friendica\Util\ConfigFileLoader;
+use Friendica\Util\DateTimeFormat;
use Friendica\Util\HTTPSignature;
use Friendica\Util\Profiler;
use Friendica\Util\Strings;
*/
class App
{
- public $user;
-
// Allow themes to control internal parameters
// by changing App values in theme.php
private $theme_info = [
private $currentMobileTheme;
/**
- * @var IConfig The config
+ * @var IManageConfigValues The config
*/
private $config;
private $process;
/**
- * @var IPConfig
+ * @var IManagePersonalConfigValues
*/
private $pConfig;
* @param int $user_id
* @return void
*/
- public function setUserId(int $user_id)
+ public function setLoggedInUserId(int $user_id)
{
$this->user_id = $user_id;
}
* @param int $user_id
* @return void
*/
- public function setNickname(string $nickname)
+ public function setLoggedInUserNickname(string $nickname)
{
$this->nickname = $nickname;
}
+ public function isLoggedIn()
+ {
+ return local_user() && $this->user_id && ($this->user_id == local_user());
+ }
+
/**
* Fetch the user id
* @return int
*/
- public function getUserId()
+ public function getLoggedInUserId()
{
return $this->user_id;
}
* Fetch the user nick name
* @return string
*/
- public function getNickname()
+ public function getLoggedInUserNickname()
{
return $this->nickname;
}
- /**
- * Fetch a specific user field
- *
- * @param string $index
- * @return mixed
- */
- public function getUserValue(string $index)
- {
- if (empty($this->user_id)) {
- return null;
- }
-
- if (empty($this->user)) {
- $this->user = User::getById($this->user_id);
- }
-
- return $this->user[$index] ?? null;
- }
-
/**
* Set the profile owner ID
*
/**
* Set the timezone
*
- * @param int $timezone
+ * @param string $timezone A valid time zone identifier, see https://www.php.net/manual/en/timezones.php
* @return void
*/
public function setTimeZone(string $timezone)
{
- $this->timezone = $timezone;
+ $this->timezone = (new \DateTimeZone($timezone))->getName();
+ DateTimeFormat::setLocalTimeZone($this->timezone);
}
/**
}
/**
- * @param Database $database The Friendica Database
- * @param IConfig $config The Configuration
- * @param App\Mode $mode The mode of this Friendica app
- * @param BaseURL $baseURL The full base URL of this Friendica app
- * @param LoggerInterface $logger The current app logger
- * @param Profiler $profiler The profiler of this application
- * @param L10n $l10n The translator instance
- * @param App\Arguments $args The Friendica Arguments of the call
- * @param Core\Process $process The process methods
- * @param IPConfig $pConfig Personal configuration
+ * @param Database $database The Friendica Database
+ * @param IManageConfigValues $config The Configuration
+ * @param App\Mode $mode The mode of this Friendica app
+ * @param BaseURL $baseURL The full base URL of this Friendica app
+ * @param LoggerInterface $logger The current app logger
+ * @param Profiler $profiler The profiler of this application
+ * @param L10n $l10n The translator instance
+ * @param App\Arguments $args The Friendica Arguments of the call
+ * @param Core\Process $process The process methods
+ * @param IManagePersonalConfigValues $pConfig Personal configuration
*/
- public function __construct(Database $database, IConfig $config, App\Mode $mode, BaseURL $baseURL, LoggerInterface $logger, Profiler $profiler, L10n $l10n, Arguments $args, Core\Process $process, IPConfig $pConfig)
+ public function __construct(Database $database, IManageConfigValues $config, App\Mode $mode, BaseURL $baseURL, LoggerInterface $logger, Profiler $profiler, L10n $l10n, Arguments $args, Core\Process $process, IManagePersonalConfigValues $pConfig)
{
$this->database = $database;
$this->config = $config;
{
set_time_limit(0);
+ // Ensure that all "strtotime" operations do run timezone independent
+ date_default_timezone_set('UTC');
+
// This has to be quite large to deal with embedded private photos
ini_set('pcre.backtrack_limit', 500000);
$this->profiler->update($this->config);
Core\Hook::loadHooks();
- $loader = new ConfigFileLoader($this->getBasePath());
+ $loader = (new Config())->createConfigFileLoader($this->getBasePath(), $_SERVER);
Core\Hook::callAll('load_config', $loader);
}
private function loadDefaultTimezone()
{
if ($this->config->get('system', 'default_timezone')) {
- $this->timezone = $this->config->get('system', 'default_timezone');
+ $timezone = $this->config->get('system', 'default_timezone', 'UTC');
} else {
global $default_timezone;
- $this->timezone = !empty($default_timezone) ? $default_timezone : 'UTC';
+ $timezone = $default_timezone ?? '' ?: 'UTC';
}
- if ($this->timezone) {
- date_default_timezone_set($this->timezone);
- }
+ $this->setTimeZone($timezone);
}
/**
*
* This probably should change to limit the size of this monster method.
*
- * @param App\Module $module The determined module
- * @param App\Router $router
- * @param IPConfig $pconfig
- * @param Authentication $auth The Authentication backend of the node
- * @param App\Page $page The Friendica page printing container
+ * @param App\Module $module The determined module
+ * @param App\Router $router
+ * @param IManagePersonalConfigValues $pconfig
+ * @param Authentication $auth The Authentication backend of the node
+ * @param App\Page $page The Friendica page printing container
*
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public function runFrontend(App\Module $module, App\Router $router, IPConfig $pconfig, Authentication $auth, App\Page $page, float $start_time)
+ public function runFrontend(App\Module $module, App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, float $start_time)
{
$this->profiler->set($start_time, 'start');
$this->profiler->set(microtime(true), 'classinit');
Model\Profile::openWebAuthInit($token);
}
- $auth->withSession($this);
+ if (!$this->mode->isBackend()) {
+ $auth->withSession($this);
+ }
if (empty($_SESSION['authenticated'])) {
header('X-Account-Management-Status: none');