Skip to content

Commit

Permalink
Time detection: Add receiever to bootstrap method
Browse files Browse the repository at this point in the history
refs #6078
  • Loading branch information
mxhash committed Sep 5, 2014
1 parent 3ce4248 commit a300877
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 5 deletions.
8 changes: 5 additions & 3 deletions library/Icinga/Application/Web.php
Expand Up @@ -10,6 +10,7 @@
use Icinga\Exception\ConfigurationError;
use Icinga\Exception\NotReadableError;
use Icinga\Logger\Logger;
use Icinga\Util\TimezoneDetect;
use Icinga\Web\Request;
use Icinga\Web\Response;
use Icinga\Web\View;
Expand Down Expand Up @@ -273,10 +274,11 @@ private function setupPagination()
*/
protected function setupTimezone()
{
$userTimezone = null;

if ($this->user !== null && $this->user->getPreferences() !== null) {
$userTimezone = $this->user->getPreferences()->get('app.timezone');
} else {
$userTimezone = null;
$detect = new TimezoneDetect();
$userTimezone = $this->user->getPreferences()->get('app.timezone', $detect->getTimezoneName());
}

try {
Expand Down
108 changes: 108 additions & 0 deletions library/Icinga/Util/TimezoneDetect.php
@@ -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;
}
}
4 changes: 2 additions & 2 deletions public/js/icinga/timezone.js
Expand Up @@ -31,7 +31,7 @@

/**
* Test for daylight saving time zone
*
*
* @returns {boolean}
*/
Date.prototype.isDst = function() {
Expand Down Expand Up @@ -71,7 +71,7 @@
return;
}

this.writeCookie(this.cookieName, timezoneOffset + ',' + dst);
this.writeCookie(this.cookieName, timezoneOffset + ',' + Number(dst));
},

/**
Expand Down

0 comments on commit a300877

Please sign in to comment.