1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-01-10 23:01:04 +01:00

Validate timezones

Summary:
Add validation for timezones, since date_default_timezone_set() returns a usable error code.

Note that we could also list all the timezones using timezone_identifiers_list(), but the list is enormous (many hundreds of entries) and impossible to use (~160 entries in "America" alone). I listed the likely US values as examples but left it as a string input text field.

Test Plan: Tried to save an invalid setting. Saved a valid setting.

Reviewers: codeblock, btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2255

Differential Revision: https://secure.phabricator.com/D4318
This commit is contained in:
epriestley 2013-01-02 14:02:22 -08:00
parent 9c41ea9609
commit cff043a800

View file

@ -46,7 +46,10 @@ final class PhabricatorCoreConfigOptions
"possible (for instance, because you are using HPHP) you can set ". "possible (for instance, because you are using HPHP) you can set ".
"some valid constant for date_default_timezone_set() here and ". "some valid constant for date_default_timezone_set() here and ".
"Phabricator will set it on your behalf, silencing the warning.")) "Phabricator will set it on your behalf, silencing the warning."))
->addExample('America/New_York', 'Valid Setting'), ->addExample('America/New_York', pht('US East (EDT)'))
->addExample('America/Chicago', pht('US Central (CDT)'))
->addExample('America/Boise', pht('US Mountain (MDT)'))
->addExample('America/Los_Angeles', pht('US West (PDT)')),
$this->newOption('phabricator.serious-business', 'bool', false) $this->newOption('phabricator.serious-business', 'bool', false)
->setOptions( ->setOptions(
array( array(
@ -132,6 +135,27 @@ final class PhabricatorCoreConfigOptions
$key)); $key));
} }
} }
if ($key === 'phabricator.timezone') {
$old = date_default_timezone_get();
$ok = @date_default_timezone_set($value);
@date_default_timezone_set($old);
if (!$ok) {
throw new PhabricatorConfigValidationException(
pht(
"Config option '%s' is invalid. The timezone identifier must ".
"be a valid timezone identifier recognized by PHP, like ".
"'America/Los_Angeles'. You can find a list of valid identifiers ".
"here: %s",
$key,
'http://php.net/manual/timezones.php'));
}
}
} }