2011-07-18 17:02:00 +02:00
|
|
|
<?php
|
|
|
|
|
2012-08-13 21:37:26 +02:00
|
|
|
final class PhabricatorSettingsPanelAccount
|
|
|
|
extends PhabricatorSettingsPanel {
|
2011-07-18 17:02:00 +02:00
|
|
|
|
2012-08-13 21:37:26 +02:00
|
|
|
public function getPanelKey() {
|
|
|
|
return 'account';
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getPanelName() {
|
|
|
|
return pht('Account');
|
|
|
|
}
|
2011-07-18 17:02:00 +02:00
|
|
|
|
2012-08-13 21:37:26 +02:00
|
|
|
public function getPanelGroup() {
|
|
|
|
return pht('Account Information');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function processRequest(AphrontRequest $request) {
|
2011-07-18 17:02:00 +02:00
|
|
|
$user = $request->getUser();
|
2013-09-02 21:40:04 +02:00
|
|
|
|
|
|
|
$pref_time = PhabricatorUserPreferences::PREFERENCE_TIME_FORMAT;
|
|
|
|
$preferences = $user->loadPreferences();
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
$errors = array();
|
|
|
|
if ($request->isFormPost()) {
|
|
|
|
$new_timezone = $request->getStr('timezone');
|
|
|
|
if (in_array($new_timezone, DateTimeZone::listIdentifiers(), true)) {
|
|
|
|
$user->setTimezoneIdentifier($new_timezone);
|
|
|
|
} else {
|
2013-03-03 15:52:42 +01:00
|
|
|
$errors[] = pht('The selected timezone is not a valid timezone.');
|
2011-07-18 17:02:00 +02:00
|
|
|
}
|
|
|
|
|
2013-07-10 14:09:50 +02:00
|
|
|
$sex = $request->getStr('sex');
|
|
|
|
$sexes = array(PhutilPerson::SEX_MALE, PhutilPerson::SEX_FEMALE);
|
|
|
|
if (in_array($sex, $sexes)) {
|
|
|
|
$user->setSex($sex);
|
|
|
|
} else {
|
|
|
|
$user->setSex(null);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Checked in runtime.
|
|
|
|
$user->setTranslation($request->getStr('translation'));
|
|
|
|
|
2013-09-02 21:40:04 +02:00
|
|
|
$preferences->setPreference($pref_time, $request->getStr($pref_time));
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
if (!$errors) {
|
2013-09-02 21:40:04 +02:00
|
|
|
$preferences->save();
|
2011-07-18 17:02:00 +02:00
|
|
|
$user->save();
|
|
|
|
return id(new AphrontRedirectResponse())
|
2012-08-13 21:37:26 +02:00
|
|
|
->setURI($this->getPanelURI('?saved=true'));
|
2011-07-18 17:02:00 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$notice = null;
|
|
|
|
if (!$errors) {
|
|
|
|
if ($request->getStr('saved')) {
|
|
|
|
$notice = new AphrontErrorView();
|
|
|
|
$notice->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
|
2013-03-03 15:52:42 +01:00
|
|
|
$notice->setTitle(pht('Changes Saved'));
|
2013-02-07 01:53:49 +01:00
|
|
|
$notice->appendChild(
|
2013-03-03 15:52:42 +01:00
|
|
|
phutil_tag('p', array(), pht('Your changes have been saved.')));
|
2011-07-18 17:02:00 +02:00
|
|
|
$notice = $notice->render();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$notice = new AphrontErrorView();
|
|
|
|
$notice->setErrors($errors);
|
|
|
|
}
|
|
|
|
|
2011-07-25 00:03:59 +02:00
|
|
|
$timezone_ids = DateTimeZone::listIdentifiers();
|
2013-01-26 02:06:55 +01:00
|
|
|
$timezone_id_map = array_fuse($timezone_ids);
|
2011-07-25 00:03:59 +02:00
|
|
|
|
2013-07-10 14:09:50 +02:00
|
|
|
$sexes = array(
|
|
|
|
PhutilPerson::SEX_UNKNOWN => pht('Unspecified'),
|
|
|
|
PhutilPerson::SEX_MALE => pht('Male'),
|
|
|
|
PhutilPerson::SEX_FEMALE => pht('Female'),
|
|
|
|
);
|
|
|
|
|
|
|
|
$translations = array();
|
|
|
|
$symbols = id(new PhutilSymbolLoader())
|
|
|
|
->setType('class')
|
|
|
|
->setAncestorClass('PhabricatorTranslation')
|
|
|
|
->setConcreteOnly(true)
|
|
|
|
->selectAndLoadSymbols();
|
|
|
|
foreach ($symbols as $symbol) {
|
|
|
|
$class = $symbol['name'];
|
|
|
|
$translations[$class] = newv($class, array())->getName();
|
|
|
|
}
|
|
|
|
asort($translations);
|
|
|
|
$default = PhabricatorEnv::newObjectFromConfig('translation.provider');
|
|
|
|
$translations = array(
|
|
|
|
'' => pht('Server Default (%s)', $default->getName()),
|
|
|
|
) + $translations;
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
$form = new AphrontFormView();
|
|
|
|
$form
|
|
|
|
->setUser($user)
|
|
|
|
->appendChild(
|
2011-07-25 00:03:59 +02:00
|
|
|
id(new AphrontFormSelectControl())
|
2013-03-03 15:52:42 +01:00
|
|
|
->setLabel(pht('Timezone'))
|
2011-07-25 00:03:59 +02:00
|
|
|
->setName('timezone')
|
|
|
|
->setOptions($timezone_id_map)
|
|
|
|
->setValue($user->getTimezoneIdentifier()))
|
2013-07-10 14:09:50 +02:00
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormSelectControl())
|
|
|
|
->setOptions($sexes)
|
|
|
|
->setLabel(pht('Sex'))
|
|
|
|
->setName('sex')
|
|
|
|
->setValue($user->getSex()))
|
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormSelectControl())
|
|
|
|
->setOptions($translations)
|
|
|
|
->setLabel(pht('Translation'))
|
|
|
|
->setName('translation')
|
|
|
|
->setValue($user->getTranslation()))
|
2013-09-02 21:40:04 +02:00
|
|
|
->appendRemarkupInstructions(
|
|
|
|
pht(
|
|
|
|
"**Custom Date and Time Formats**\n\n".
|
|
|
|
"You can specify custom formats which will be used when ".
|
|
|
|
"rendering dates and times of day. Examples:\n\n".
|
|
|
|
"| Format | Example | Notes |\n".
|
|
|
|
"| ------ | -------- | ----- |\n".
|
|
|
|
"| `g:i A` | 2:34 PM | Default 12-hour time. |\n".
|
|
|
|
"| `G.i a` | 02.34 pm | Alternate 12-hour time. |\n".
|
|
|
|
"| `H:i` | 14:34 | 24-hour time. |\n".
|
|
|
|
"\n\n".
|
|
|
|
"You can find a [[%s | full reference in the PHP manual]].",
|
|
|
|
"http://www.php.net/manual/en/function.date.php"
|
|
|
|
))
|
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormTextControl())
|
|
|
|
->setLabel(pht('Time-of-Day Format'))
|
|
|
|
->setName($pref_time)
|
|
|
|
->setCaption(
|
|
|
|
pht('Format used when rendering a time of day.'))
|
|
|
|
->setValue($preferences->getPreference($pref_time)))
|
2011-07-18 17:02:00 +02:00
|
|
|
->appendChild(
|
2011-07-25 00:03:59 +02:00
|
|
|
id(new AphrontFormSubmitControl())
|
2013-07-10 14:09:50 +02:00
|
|
|
->setValue(pht('Save Account Settings')));
|
2011-07-18 17:02:00 +02:00
|
|
|
|
2013-09-25 20:23:29 +02:00
|
|
|
$form_box = id(new PHUIObjectBoxView())
|
2013-08-26 20:53:11 +02:00
|
|
|
->setHeaderText(pht('Account Settings'))
|
|
|
|
->setForm($form);
|
2011-07-18 17:02:00 +02:00
|
|
|
|
2012-08-13 21:37:26 +02:00
|
|
|
return array(
|
|
|
|
$notice,
|
2013-08-26 20:53:11 +02:00
|
|
|
$form_box,
|
2012-08-13 21:37:26 +02:00
|
|
|
);
|
2011-07-18 17:02:00 +02:00
|
|
|
}
|
|
|
|
}
|