mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
The SQL query retrieving the time zone from the database may return an empty result set if the session timeout was reached. Handle such cases gracefully by leaving the timezone variable unset. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
63 lines
1.5 KiB
PHP
63 lines
1.5 KiB
PHP
<?php
|
|
set_include_path(get_include_path() . PATH_SEPARATOR . '../lib');
|
|
|
|
/**
|
|
* Generate an associative of the PHP timezones and display text.
|
|
*
|
|
* @return array PHP Timezone => Displayed Description
|
|
*/
|
|
function generate_timezone_list() {
|
|
$php_timezones = DateTimeZone::listIdentifiers(DateTimeZone::ALL);
|
|
|
|
$offsets = array();
|
|
foreach ($php_timezones as $timezone) {
|
|
$tz = new DateTimeZone($timezone);
|
|
$offset = $tz->getOffset(new DateTime());
|
|
$offsets[$timezone] = "(UTC" . ($offset < 0 ? "-" : "+") . gmdate("H:i", abs($offset)) .
|
|
") " . $timezone;
|
|
}
|
|
|
|
asort($offsets);
|
|
return $offsets;
|
|
}
|
|
|
|
/**
|
|
* Set the timezone for the user.
|
|
*
|
|
* @return null
|
|
*/
|
|
function set_tz() {
|
|
$timezones = generate_timezone_list();
|
|
$update_cookie = false;
|
|
|
|
if (isset($_COOKIE["AURTZ"])) {
|
|
$timezone = $_COOKIE["AURTZ"];
|
|
} elseif (isset($_COOKIE["AURSID"])) {
|
|
$dbh = DB::connect();
|
|
$q = "SELECT Timezone FROM Users, Sessions ";
|
|
$q .= "WHERE Users.ID = Sessions.UsersID ";
|
|
$q .= "AND Sessions.SessionID = ";
|
|
$q .= $dbh->quote($_COOKIE["AURSID"]);
|
|
$result = $dbh->query($q);
|
|
|
|
if ($result) {
|
|
$timezone = $result->fetchColumn(0);
|
|
if (!$timezone) {
|
|
unset($timezone);
|
|
}
|
|
}
|
|
|
|
$update_cookie = true;
|
|
}
|
|
|
|
if (!isset($timezone) || !array_key_exists($timezone, $timezones)) {
|
|
$timezone = config_get("options", "default_timezone");
|
|
}
|
|
date_default_timezone_set($timezone);
|
|
|
|
if ($update_cookie) {
|
|
$timeout = intval(config_get("options", "persistent_cookie_timeout"));
|
|
$cookie_time = time() + $timeout;
|
|
setcookie("AURTZ", $timezone, $cookie_time, "/");
|
|
}
|
|
}
|