<?php␊ |
␊ |
class Pluf_Form_Widget_TimeZoneInput extends Pluf_Form_Widget_Input␊ |
{␊ |
public $input_type = 'text';␊ |
public $initial = "";␊ |
␊ |
public function __construct($attrs = []) {␊ |
parent::__construct($attrs);␊ |
}␊ |
␊ |
public function render($name, $value, $extra_attrs=array()) {␊ |
return Pluf_Template::markSafe($this->getHTML($name, $value));␊ |
}␊ |
␊ |
public function getHTML($name, $value) {␊ |
// Based off snippet here: http://stackoverflow.com/a/17355238/195722␊ |
static $regions = array(␊ |
DateTimeZone::AFRICA,␊ |
DateTimeZone::AMERICA,␊ |
DateTimeZone::ANTARCTICA,␊ |
DateTimeZone::ASIA,␊ |
DateTimeZone::ATLANTIC,␊ |
DateTimeZone::AUSTRALIA,␊ |
DateTimeZone::EUROPE,␊ |
DateTimeZone::INDIAN,␊ |
DateTimeZone::PACIFIC,␊ |
);␊ |
␊ |
$timezones = array();␊ |
foreach( $regions as $region )␊ |
{␊ |
$timezones = array_merge( $timezones, DateTimeZone::listIdentifiers( $region ) );␊ |
}␊ |
␊ |
$timezone_offsets = array();␊ |
foreach( $timezones as $timezone )␊ |
{␊ |
$tz = new DateTimeZone($timezone);␊ |
$timezone_offsets[$timezone] = $tz->getOffset(new DateTime);␊ |
}␊ |
␊ |
// sort timezone by timezone name␊ |
ksort($timezone_offsets);␊ |
␊ |
$timezone_list = array();␊ |
foreach( $timezone_offsets as $timezone => $offset )␊ |
{␊ |
$offset_prefix = $offset < 0 ? '-' : '+';␊ |
$offset_formatted = gmdate( 'H:i', abs($offset) );␊ |
␊ |
$pretty_offset = "UTC${offset_prefix}${offset_formatted}";␊ |
␊ |
$t = new DateTimeZone($timezone);␊ |
$c = new DateTime(null, $t);␊ |
$current_time = $c->format('g:i A');␊ |
␊ |
$timezone_list[$timezone] = "(${pretty_offset}) $timezone - $current_time";␊ |
}␊ |
␊ |
$listArray = [];␊ |
foreach($timezone_list as $key => $val) {␊ |
if ($key == $value) {␊ |
$listArray[] = "<option selected=\"selected\" value=\"$key\">$val</option>";␊ |
} else {␊ |
$listArray[] = "<option value=\"$key\">$val</option>";␊ |
}␊ |
}␊ |
␊ |
return "<select name=\"$name\">" . implode("\n", $listArray) . "</select>";␊ |
}␊ |
} |