111 lines
3.4 KiB
PHP
111 lines
3.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Generates the timezone selection form and JavaScript.
|
||
|
*
|
||
|
* Note: 'UTC/UTC' is mapped to 'UTC' to form a valid option
|
||
|
*
|
||
|
* Example: preselect Europe/Paris
|
||
|
* list($htmlform, $js) = templateTZform('Europe/Paris');
|
||
|
*
|
||
|
* @param string $preselected_timezone preselected timezone (optional)
|
||
|
*
|
||
|
* @return an array containing the generated HTML form and Javascript code
|
||
|
**/
|
||
|
function generateTimeZoneForm($preselected_timezone='')
|
||
|
{
|
||
|
// Select the first available timezone if no preselected value is passed
|
||
|
if ($preselected_timezone == '') {
|
||
|
$l = timezone_identifiers_list();
|
||
|
$preselected_timezone = $l[0];
|
||
|
}
|
||
|
|
||
|
// Try to split the provided timezone
|
||
|
$spos = strpos($preselected_timezone, '/');
|
||
|
$pcontinent = substr($preselected_timezone, 0, $spos);
|
||
|
$pcity = substr($preselected_timezone, $spos+1);
|
||
|
|
||
|
// Display config form:
|
||
|
$timezone_form = '';
|
||
|
$timezone_js = '';
|
||
|
|
||
|
// The list is in the form 'Europe/Paris', 'America/Argentina/Buenos_Aires'...
|
||
|
// We split the list in continents/cities.
|
||
|
$continents = array();
|
||
|
$cities = array();
|
||
|
|
||
|
// TODO: use a template to generate the HTML/Javascript form
|
||
|
|
||
|
foreach (timezone_identifiers_list() as $tz) {
|
||
|
if ($tz == 'UTC') {
|
||
|
$tz = 'UTC/UTC';
|
||
|
}
|
||
|
$spos = strpos($tz, '/');
|
||
|
|
||
|
if ($spos !== false) {
|
||
|
$continent = substr($tz, 0, $spos);
|
||
|
$city = substr($tz, $spos+1);
|
||
|
$continents[$continent] = 1;
|
||
|
|
||
|
if (!isset($cities[$continent])) {
|
||
|
$cities[$continent] = '';
|
||
|
}
|
||
|
$cities[$continent] .= '<option value="'.$city.'"';
|
||
|
if ($pcity == $city) {
|
||
|
$cities[$continent] .= ' selected="selected"';
|
||
|
}
|
||
|
$cities[$continent] .= '>'.$city.'</option>';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$continents_html = '';
|
||
|
$continents = array_keys($continents);
|
||
|
|
||
|
foreach ($continents as $continent) {
|
||
|
$continents_html .= '<option value="'.$continent.'"';
|
||
|
if ($pcontinent == $continent) {
|
||
|
$continents_html .= ' selected="selected"';
|
||
|
}
|
||
|
$continents_html .= '>'.$continent.'</option>';
|
||
|
}
|
||
|
|
||
|
// Timezone selection form
|
||
|
$timezone_form = 'Continent:';
|
||
|
$timezone_form .= '<select name="continent" id="continent" onChange="onChangecontinent();">';
|
||
|
$timezone_form .= $continents_html.'</select>';
|
||
|
$timezone_form .= ' City:';
|
||
|
$timezone_form .= '<select name="city" id="city">'.$cities[$pcontinent].'</select><br />';
|
||
|
|
||
|
// Javascript handler - updates the city list when the user selects a continent
|
||
|
$timezone_js = '<script>';
|
||
|
$timezone_js .= 'function onChangecontinent() {';
|
||
|
$timezone_js .= 'document.getElementById("city").innerHTML =';
|
||
|
$timezone_js .= ' citiescontinent[document.getElementById("continent").value]; }';
|
||
|
$timezone_js .= 'var citiescontinent = '.json_encode($cities).';';
|
||
|
$timezone_js .= '</script>';
|
||
|
|
||
|
return array($timezone_form, $timezone_js);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Tells if a continent/city pair form a valid timezone
|
||
|
*
|
||
|
* Note: 'UTC/UTC' is mapped to 'UTC'
|
||
|
*
|
||
|
* @param string $continent the timezone continent
|
||
|
* @param string $city the timezone city
|
||
|
*
|
||
|
* @return whether continent/city is a valid timezone
|
||
|
*/
|
||
|
function isTimeZoneValid($continent, $city)
|
||
|
{
|
||
|
if ($continent == 'UTC' && $city == 'UTC') {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return in_array(
|
||
|
$continent.'/'.$city,
|
||
|
timezone_identifiers_list()
|
||
|
);
|
||
|
}
|
||
|
?>
|