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