icingaweb2/library/Icinga/Util/TimezoneDetect.php

108 lines
2.0 KiB
PHP

<?php
/* Icinga Web 2 | (c) 2014 Icinga Development Team | GPLv2+ */
namespace Icinga\Util;
/**
* 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 (array_key_exists(self::$cookieName, $_COOKIE)) {
$matches = array();
if (preg_match('/\A(-?\d+)[\-,](\d+)\z/', $_COOKIE[self::$cookieName], $matches)) {
$offset = $matches[1];
$timezoneName = timezone_name_from_abbr('', (int) $offset, (int) $matches[2]);
self::$success = (bool) $timezoneName;
if (self::$success) {
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;
}
}