diff --git a/indefero/src/IDF/Form/UserAccount.php b/indefero/src/IDF/Form/UserAccount.php index da10bd6..2ceb9e8 100644 --- a/indefero/src/IDF/Form/UserAccount.php +++ b/indefero/src/IDF/Form/UserAccount.php @@ -187,6 +187,13 @@ class IDF_Form_UserAccount extends Pluf_Form 'size' => 32, ), )); + + $this->fields['timezone'] = new Pluf_Form_Field_TimeZone( + array('required' => false, + 'label' => __('Change Timezone'), + 'initial' => $this->user->timezone, + 'help_text' => __('This will change the way some of the date and times are displayed on the site.'), + )); } diff --git a/indefero/src/IDF/templates/idf/issues/view.html b/indefero/src/IDF/templates/idf/issues/view.html index 606437d..bc91af9 100644 --- a/indefero/src/IDF/templates/idf/issues/view.html +++ b/indefero/src/IDF/templates/idf/issues/view.html @@ -22,12 +22,12 @@  {/if} {if $i == 0} -

{blocktrans}Reported by {$submitter}, {$c.creation_dtime|date}{/blocktrans}

+

{blocktrans}Reported by {$submitter}, {/blocktrans}{$request.user.convertToUserTimezone($c.creation_dtime)}

{else} {aurl 'url', 'IDF_Views_Issue::view', array($project.shortname, $issue.id)} {assign $id = $c.id} {assign $url = $url~'#ic'~$c.id} -

{blocktrans}Comment {$i} by {$submitter}, {$c.creation_dtime|date}{/blocktrans}

+

{blocktrans}Comment {$i} by {$submitter}, {/blocktrans}{$request.user.convertToUserTimezone($c.creation_dtime)}

{/if} diff --git a/indefero/src/IDF/templates/idf/user/myaccount.html b/indefero/src/IDF/templates/idf/user/myaccount.html index 7dfa607..7623635 100644 --- a/indefero/src/IDF/templates/idf/user/myaccount.html +++ b/indefero/src/IDF/templates/idf/user/myaccount.html @@ -34,6 +34,13 @@ {$form.f.email.help_text} + + {$form.f.timezone.labelTag}: + {if $form.f.timezone.errors}{$form.f.timezone.fieldErrors}{/if} + {$form.f.timezone|unsafe}
+ {$form.f.timezone.help_text} + + {$form.f.language.labelTag}: {if $form.f.language.errors}{$form.f.language.fieldErrors}{/if} diff --git a/pluf/src/Pluf/Form/Field/TimeZone.php b/pluf/src/Pluf/Form/Field/TimeZone.php new file mode 100644 index 0000000..01dcdb8 --- /dev/null +++ b/pluf/src/Pluf/Form/Field/TimeZone.php @@ -0,0 +1,8 @@ +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[] = ""; + } else { + $listArray[] = ""; + } + } + + return ""; + } +} \ No newline at end of file diff --git a/pluf/src/Pluf/User.php b/pluf/src/Pluf/User.php index fc44b7d..31f133d 100644 --- a/pluf/src/Pluf/User.php +++ b/pluf/src/Pluf/User.php @@ -233,6 +233,12 @@ class Pluf_User extends Pluf_Model } } + public function convertToUserTimezone($date) { + $currentDateTime = new \DateTime(date('Y-m-d H:i:s', strtotime($date.' GMT'))); + $currentDateTime->setTimezone(new \DateTimeZone($this->timezone)); + return $currentDateTime->format("M, j Y g:i:s A"); + } + /** * Set the password of a user. *