mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-31 01:34:09 +02:00
parent
3ce42489c6
commit
a300877878
@ -10,6 +10,7 @@ use Icinga\Authentication\Manager as AuthenticationManager;
|
|||||||
use Icinga\Exception\ConfigurationError;
|
use Icinga\Exception\ConfigurationError;
|
||||||
use Icinga\Exception\NotReadableError;
|
use Icinga\Exception\NotReadableError;
|
||||||
use Icinga\Logger\Logger;
|
use Icinga\Logger\Logger;
|
||||||
|
use Icinga\Util\TimezoneDetect;
|
||||||
use Icinga\Web\Request;
|
use Icinga\Web\Request;
|
||||||
use Icinga\Web\Response;
|
use Icinga\Web\Response;
|
||||||
use Icinga\Web\View;
|
use Icinga\Web\View;
|
||||||
@ -273,10 +274,11 @@ class Web extends ApplicationBootstrap
|
|||||||
*/
|
*/
|
||||||
protected function setupTimezone()
|
protected function setupTimezone()
|
||||||
{
|
{
|
||||||
|
$userTimezone = null;
|
||||||
|
|
||||||
if ($this->user !== null && $this->user->getPreferences() !== null) {
|
if ($this->user !== null && $this->user->getPreferences() !== null) {
|
||||||
$userTimezone = $this->user->getPreferences()->get('app.timezone');
|
$detect = new TimezoneDetect();
|
||||||
} else {
|
$userTimezone = $this->user->getPreferences()->get('app.timezone', $detect->getTimezoneName());
|
||||||
$userTimezone = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
108
library/Icinga/Util/TimezoneDetect.php
Normal file
108
library/Icinga/Util/TimezoneDetect.php
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
<?php
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
|
||||||
|
namespace Icinga\Util;
|
||||||
|
|
||||||
|
use Icinga\Application\Platform;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve timezone information from cookie
|
||||||
|
*/
|
||||||
|
class TimezoneDetect
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* If detection was successful
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
private static $success;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timezone offset in minutes
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private static $offset = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private static $timezoneName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cookie name
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public static $cookieName = 'icingaweb2-tzo';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timezone name
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private static $timezone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new object and try to identify the timezone
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
if (self::$success !== null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Platform::isCli() === false && array_key_exists(self::$cookieName, $_COOKIE)) {
|
||||||
|
list($offset, $dst) = explode(',', $_COOKIE[self::$cookieName]);
|
||||||
|
$timezoneName = timezone_name_from_abbr('', (int)$offset, (int)$dst);
|
||||||
|
|
||||||
|
self::$success = (bool)$timezoneName;
|
||||||
|
|
||||||
|
if (self::$success === true) {
|
||||||
|
self::$offset = $offset;
|
||||||
|
self::$timezoneName = $timezoneName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get offset
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getOffset()
|
||||||
|
{
|
||||||
|
return self::$offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get timezone name
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTimezoneName()
|
||||||
|
{
|
||||||
|
return self::$timezoneName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True on success
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function success()
|
||||||
|
{
|
||||||
|
return self::$success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset object
|
||||||
|
*/
|
||||||
|
public function reset()
|
||||||
|
{
|
||||||
|
self::$success = null;
|
||||||
|
self::$timezoneName = null;
|
||||||
|
self::$offset = 0;
|
||||||
|
}
|
||||||
|
}
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Test for daylight saving time zone
|
* Test for daylight saving time zone
|
||||||
*
|
*
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
Date.prototype.isDst = function() {
|
Date.prototype.isDst = function() {
|
||||||
@ -71,7 +71,7 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.writeCookie(this.cookieName, timezoneOffset + ',' + dst);
|
this.writeCookie(this.cookieName, timezoneOffset + ',' + Number(dst));
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user