Skip to content

Commit 9e6fbbf

Browse files
committed
[smarcet] - #14021
* migrated from time zone idx to time zone identifier * refactoring
1 parent 3e85204 commit 9e6fbbf

6 files changed

Lines changed: 601 additions & 157 deletions

File tree

elections/code/infrastructure/active_records/Election.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ final class Election extends DataObject implements IElection {
2323
'NominationAppDeadline' => 'SS_Datetime', // When a candidate must have completed the application in order to be listed
2424
'ElectionsOpen' => 'SS_Datetime', // The day elections start
2525
'ElectionsClose' => 'SS_Datetime', // The day they close
26-
'TimeZone' => 'Text',
26+
// @see http://php.net/manual/en/timezones.php
27+
'TimeZoneIdentifier' => 'VarChar(255)',
2728
];
2829

2930
static $has_one = [
@@ -123,13 +124,13 @@ function getCMSFields()
123124
// Dates
124125

125126
$fields->addFieldsToTab('Root.Dates',
126-
$ddl_timezone = new DropdownField('TimeZone', 'Time Zone', DateTimeZone::listIdentifiers()));
127+
$ddl_timezone = new DropdownField('TimeZoneIdentifier', 'Time Zone', $this->getTimezones()));
127128
$ddl_timezone->setEmptyString('-- Select a Timezone --');
128129

129130
$election_time_zone = null;
130-
if($this->TimeZone) {
131-
$time_zone_list = timezone_identifiers_list();
132-
$election_time_zone = $time_zone_list[$this->TimeZone];
131+
132+
if(!empty($this->TimeZoneIdentifier)) {
133+
$election_time_zone = $this->TimeZoneIdentifier;
133134
}
134135

135136
if($election_time_zone) {
@@ -266,7 +267,7 @@ protected function validate()
266267
}
267268

268269

269-
$time_zone = $this->TimeZone;
270+
$time_zone = $this->TimeZoneIdentifier;
270271
if (empty($time_zone)) {
271272
return $valid->error('Time Zone is required!');
272273
}

migrations/migrations.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,5 @@ migrations:
105105
- SummitReferencialIntegrityMigration
106106
- UpdateRSVPReferencialIntegrityMigration
107107
- FixedCategoryGroupReferencialIntegrityMigration
108-
- UpdatedSurveyQuestionsMigration
108+
- UpdatedSurveyQuestionsMigration
109+
- SummitTimeZoneMigration

openstack/code/utils/traits/TimeZoneEntity.php

Lines changed: 65 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -30,43 +30,46 @@ public function getFromUTCtoLocal($field, $format = "Y-m-d H:i:s")
3030
/**
3131
* @return DateTimeZone|null
3232
*/
33-
public function getEntityTimeZone(){
34-
$time_zone_id = $this->TimeZone;
35-
if (empty($time_zone_id)) {
33+
public function getEntityTimeZone()
34+
{
35+
// @see http://php.net/manual/en/timezones.php
36+
$time_zone_identifier = $this->TimeZoneIdentifier;
37+
if (empty($time_zone_identifier)) {
3638
return null;
3739
}
38-
$time_zone_list = timezone_identifiers_list();
39-
if (isset($time_zone_list[$time_zone_id])) {
40-
$time_zone_name = $time_zone_list[$time_zone_id];
41-
return $time_zone = new DateTimeZone($time_zone_name);
40+
try {
41+
return new DateTimeZone($time_zone_identifier);
42+
} catch (Exception $ex) {
43+
return null;
4244
}
43-
44-
return null;
4545
}
46+
4647
/**
4748
* @param $value
4849
* @param $format
4950
* @return null|string
5051
*/
5152
public function convertDateFromTimeZone2UTC($value, $format = "Y-m-d H:i:s")
5253
{
53-
$time_zone_id = $this->TimeZone;
54-
if (empty($time_zone_id)) {
54+
$time_zone_identifier = $this->TimeZoneIdentifier;
55+
if (empty($time_zone_identifier)) {
5556
return $value;
5657
}
57-
$time_zone_list = timezone_identifiers_list();
5858

59-
if (isset($time_zone_list[$time_zone_id]) && !empty($value)) {
60-
$utc_timezone = new DateTimeZone("UTC");
61-
$time_zone_name = $time_zone_list[$time_zone_id];
62-
$time_zone = new DateTimeZone($time_zone_name);
63-
$date = new DateTime($value, $time_zone);
64-
$date->setTimezone($utc_timezone);
59+
if (empty($value)) {
60+
return null;
61+
}
6562

66-
return $date->format($format);
63+
try {
64+
$local_time_zone = new DateTimeZone($time_zone_identifier);
65+
} catch (Exception $ex) {
66+
return null;
6767
}
6868

69-
return null;
69+
$utc_timezone = new DateTimeZone("UTC");
70+
$date = new DateTime($value, $local_time_zone);
71+
$date->setTimezone($utc_timezone);
72+
return $date->format($format);
7073
}
7174

7275
/**
@@ -76,52 +79,65 @@ public function convertDateFromTimeZone2UTC($value, $format = "Y-m-d H:i:s")
7679
*/
7780
public function convertDateFromUTC2TimeZone($value, $format = "Y-m-d H:i:s")
7881
{
79-
$time_zone_id = $this->TimeZone;
80-
if (empty($time_zone_id)) {
82+
$time_zone_identifier = $this->TimeZoneIdentifier;
83+
if (empty($time_zone_identifier)) {
8184
return $value;
8285
}
83-
$time_zone_list = timezone_identifiers_list();
84-
85-
if (isset($time_zone_list[$time_zone_id]) && !empty($value)) {
86-
$utc_timezone = new DateTimeZone("UTC");
87-
$time_zone_name = $time_zone_list[$time_zone_id];
88-
$time_zone = new DateTimeZone($time_zone_name);
89-
$date = new DateTime($value, $utc_timezone);
9086

91-
$date->setTimezone($time_zone);
87+
if (empty($value)) {
88+
return null;
89+
}
9290

93-
return $date->format($format);
91+
try {
92+
$local_time_zone = new DateTimeZone($time_zone_identifier);
93+
} catch (Exception $ex) {
94+
return null;
9495
}
9596

96-
return null;
97+
$utc_timezone = new DateTimeZone("UTC");
98+
$date = new DateTime($value, $utc_timezone);
99+
$date->setTimezone($local_time_zone);
100+
101+
return $date->format($format);
102+
97103
}
98104

99105
/**
100106
* @return string
101107
*/
102-
public function getTimeZoneName(){
103-
$time_zone_id = $this->TimeZone;
104-
if (empty($time_zone_id)) {
108+
public function getTimeZoneName()
109+
{
110+
$time_zone_identifier = $this->TimeZoneIdentifier;
111+
if (empty($time_zone_identifier)) {
105112
return 'Not Set';
106113
}
107-
$time_zone_list = timezone_identifiers_list();
108-
$time_zone_name = $time_zone_list[$time_zone_id];
109-
return $time_zone_name;
114+
return $time_zone_identifier;
110115
}
111116

112-
public function getTimeZoneOffsetFriendly(){
113-
$time_zone_id = $this->TimeZone;
114-
if (empty($time_zone_id)) {
117+
public function getTimeZoneOffsetFriendly()
118+
{
119+
$time_zone_identifier = $this->TimeZoneIdentifier;
120+
if (empty($time_zone_identifier)) {
115121
return 'Not Set';
116122
}
117-
$time_zone_list = timezone_identifiers_list();
118-
if(!isset($time_zone_list[$time_zone_id]))
119-
return 'Not Set';
120-
$time_zone_name = $time_zone_list[$time_zone_id];
121-
$tz = new DateTimeZone($time_zone_name);
122-
$now = new DateTime("now", $tz);
123-
$offset = $tz->getOffset( $now ) / 3600;
124-
return "GMT" . ($offset < 0 ? $offset : "+".$offset);
123+
try {
124+
$local_time_zone = new DateTimeZone($time_zone_identifier);
125+
$now = new DateTime("now", $local_time_zone);
126+
$offset = $local_time_zone->getOffset($now) / 3600;
127+
return "GMT" . ($offset < 0 ? $offset : "+" . $offset);
128+
} catch (Exception $ex) {
129+
return null;
130+
}
131+
}
125132

133+
/**
134+
* @return array
135+
*/
136+
public function getTimezones(){
137+
$timezones_list = [];
138+
foreach(DateTimeZone::listIdentifiers() as $timezone_identifier){
139+
$timezones_list[$timezone_identifier] = $timezone_identifier;
140+
}
141+
return $timezones_list;
126142
}
127143
}

0 commit comments

Comments
 (0)