Use grouped select field for timezone selection

This commit is contained in:
Stefan Parviainen 2015-01-01 14:44:50 +01:00
parent ef94747e5e
commit 686b6ee118
5 changed files with 13 additions and 44 deletions

View File

@ -14,25 +14,17 @@ function timezone_cmp($a, $b) {
return ( t($a) < t($b)) ? -1 : 1; return ( t($a) < t($b)) ? -1 : 1;
} }
// emit a timezone selector grouped (primarily) by continent // Return timezones grouped (primarily) by continent
function get_timezones( ){
function select_timezone($current = 'America/Los_Angeles') {
$timezone_identifiers = DateTimeZone::listIdentifiers(); $timezone_identifiers = DateTimeZone::listIdentifiers();
$o ='<select id="timezone_select" name="timezone">';
usort($timezone_identifiers, 'timezone_cmp'); usort($timezone_identifiers, 'timezone_cmp');
$continent = ''; $continent = '';
$continents = array();
foreach($timezone_identifiers as $value) { foreach($timezone_identifiers as $value) {
$ex = explode("/", $value); $ex = explode("/", $value);
if(count($ex) > 1) { if(count($ex) > 1) {
if($ex[0] != $continent) { $continent = t($ex[0]);
if($continent != '')
$o .= '</optgroup>';
$continent = $ex[0];
$o .= '<optgroup label="' . t($continent) . '">';
}
if(count($ex) > 2) if(count($ex) > 2)
$city = substr($value,strpos($value,'/')+1); $city = substr($value,strpos($value,'/')+1);
else else
@ -40,35 +32,14 @@ function select_timezone($current = 'America/Los_Angeles') {
} }
else { else {
$city = $ex[0]; $city = $ex[0];
if($continent != t('Miscellaneous')) { $continent = t('Miscellaneous');
$o .= '</optgroup>';
$continent = t('Miscellaneous');
$o .= '<optgroup label="' . t($continent) . '">';
}
} }
$city = str_replace('_', ' ', t($city)); $city = str_replace('_', ' ', t($city));
$selected = (($value == $current) ? " selected=\"selected\" " : "");
$o .= "<option value=\"$value\" $selected >$city</option>"; if(!x($continents,$ex[0])) $continents[$ex[0]] = array();
$continents[$continent][$value] = $city;
} }
$o .= '</optgroup></select>'; return $continents;
return $o;
}
// return a select using 'field_select_raw' template, with timezones
// groupped (primarily) by continent
// arguments follow convetion as other field_* template array:
// 'name', 'label', $value, 'help'
function field_timezone($name='timezone', $label='', $current = 'America/Los_Angeles', $help){
$options = select_timezone($current);
$options = str_replace('<select id="timezone_select" name="timezone">','', $options);
$options = str_replace('</select>','', $options);
$tpl = get_markup_template('field_select_raw.tpl');
return replace_macros($tpl, array(
'$field' => array($name, $label, $current, $help, $options),
));
} }
// General purpose date parse/convert function. // General purpose date parse/convert function.

View File

@ -1010,12 +1010,10 @@ function settings_content(&$a) {
'$uid' => local_user(), '$uid' => local_user(),
'$form_security_token' => get_form_security_token("settings"), '$form_security_token' => get_form_security_token("settings"),
'$nickname_block' => $prof_addr, '$nickname_block' => $prof_addr,
'$h_basic' => t('Basic Settings'), '$h_basic' => t('Basic Settings'),
'$username' => array('username', t('Full Name:'), $username,''), '$username' => array('username', t('Full Name:'), $username,''),
'$email' => array('email', t('Email Address:'), $email, ''), '$email' => array('email', t('Email Address:'), $email, ''),
'$timezone' => array('timezone_select' , t('Your Timezone:'), select_timezone($timezone), ''), '$timezone' => array('timezone_select' , t('Your Timezone:'), $timezone, '', get_timezones()),
'$defloc' => array('defloc', t('Default Post Location:'), $defloc, t('Geographical location to display on your posts')), '$defloc' => array('defloc', t('Default Post Location:'), $defloc, t('Geographical location to display on your posts')),
'$allowloc' => array('allow_location', t('Use Browser Location:'), ((get_pconfig(local_user(),'system','use_browser_location')) ? 1 : ''), ''), '$allowloc' => array('allow_location', t('Use Browser Location:'), ((get_pconfig(local_user(),'system','use_browser_location')) ? 1 : ''), ''),

View File

@ -349,7 +349,7 @@ function setup_content(&$a) {
'$siteurl' => array('siteurl', t('Website URL'), z_root(), t('Please use SSL (https) URL if available.')), '$siteurl' => array('siteurl', t('Website URL'), z_root(), t('Please use SSL (https) URL if available.')),
'$timezone' => field_timezone('timezone', t('Please select a default timezone for your website'), $timezone, ''), '$timezone' => array('timezone', t('Please select a default timezone for your website'), $timezone, '', get_timezones()),
'$baseurl' => $a->get_baseurl(), '$baseurl' => $a->get_baseurl(),

View File

@ -20,7 +20,7 @@
{{include file="field_input.tpl" field=$adminmail}} {{include file="field_input.tpl" field=$adminmail}}
{{include file="field_input.tpl" field=$siteurl}} {{include file="field_input.tpl" field=$siteurl}}
{{$timezone}} {{include file="field_select_grouped.tpl" field=$timezone}}
<input id="install-submit" type="submit" name="submit" value="{{$submit}}" /> <input id="install-submit" type="submit" name="submit" value="{{$submit}}" />

View File

@ -9,7 +9,7 @@
<h3 class="settings-heading">{{$h_basic}}</h3> <h3 class="settings-heading">{{$h_basic}}</h3>
{{include file="field_input.tpl" field=$username}} {{include file="field_input.tpl" field=$username}}
{{include file="field_custom.tpl" field=$timezone}} {{include file="field_select_grouped.tpl" field=$timezone}}
{{include file="field_input.tpl" field=$defloc}} {{include file="field_input.tpl" field=$defloc}}
{{include file="field_checkbox.tpl" field=$allowloc}} {{include file="field_checkbox.tpl" field=$allowloc}}