Changeset View
Changeset View
Standalone View
Standalone View
src/applications/settings/setting/PhabricatorTimezoneSetting.php
| <?php | <?php | ||||
| final class PhabricatorTimezoneSetting | final class PhabricatorTimezoneSetting | ||||
| extends PhabricatorOptionGroupSetting { | extends PhabricatorOptionGroupSetting { | ||||
| const SETTINGKEY = 'timezone'; | const SETTINGKEY = 'timezone'; | ||||
| public function getSettingName() { | public function getSettingName() { | ||||
| return pht('Timezone'); | return pht('Timezone'); | ||||
| } | } | ||||
| public function getSettingDefaultValue() { | public function getSettingDefaultValue() { | ||||
| return date_default_timezone_get(); | return date_default_timezone_get(); | ||||
| } | } | ||||
| public function assertValidValue($value) { | |||||
| // NOTE: This isn't doing anything fancy, it's just a much faster | |||||
| // validator than doing all the timezone calculations to build the full | |||||
| // list of options. | |||||
| if (!$value) { | |||||
| return; | |||||
| } | |||||
| static $identifiers; | |||||
| if ($identifiers === null) { | |||||
| $identifiers = DateTimeZone::listIdentifiers(); | |||||
| $identifiers = array_fuse($identifiers); | |||||
| } | |||||
| if (isset($identifiers[$value])) { | |||||
| return; | |||||
| } | |||||
| throw new Exception( | |||||
| pht( | |||||
| 'Timezone "%s" is not a valid timezone identiifer.', | |||||
| $value)); | |||||
| } | |||||
| protected function getSelectOptionGroups() { | protected function getSelectOptionGroups() { | ||||
| $timezones = DateTimeZone::listIdentifiers(); | $timezones = DateTimeZone::listIdentifiers(); | ||||
| $now = new DateTime('@'.PhabricatorTime::getNow()); | $now = new DateTime('@'.PhabricatorTime::getNow()); | ||||
| $groups = array(); | $groups = array(); | ||||
| foreach ($timezones as $timezone) { | foreach ($timezones as $timezone) { | ||||
| $zone = new DateTimeZone($timezone); | $zone = new DateTimeZone($timezone); | ||||
| $offset = -($zone->getOffset($now) / (60 * 60)); | $offset = -($zone->getOffset($now) / (60 * 60)); | ||||
| Show All 30 Lines | |||||