<?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() ); } ?>