Page MenuHomePhabricator

D13262.id32054.diff
No OneTemporary

D13262.id32054.diff

diff --git a/src/applications/settings/panel/PhabricatorDateTimeSettingsPanel.php b/src/applications/settings/panel/PhabricatorDateTimeSettingsPanel.php
--- a/src/applications/settings/panel/PhabricatorDateTimeSettingsPanel.php
+++ b/src/applications/settings/panel/PhabricatorDateTimeSettingsPanel.php
@@ -19,6 +19,7 @@
$username = $user->getUsername();
$pref_time = PhabricatorUserPreferences::PREFERENCE_TIME_FORMAT;
+ $pref_date = PhabricatorUserPreferences::PREFERENCE_DATE_FORMAT;
$pref_week_start = PhabricatorUserPreferences::PREFERENCE_WEEK_START_DAY;
$preferences = $user->loadPreferences();
@@ -31,12 +32,16 @@
$errors[] = pht('The selected timezone is not a valid timezone.');
}
- $preferences->setPreference(
- $pref_time,
- $request->getStr($pref_time));
- $preferences->setPreference(
- $pref_week_start,
- $request->getStr($pref_week_start));
+ $preferences
+ ->setPreference(
+ $pref_time,
+ $request->getStr($pref_time))
+ ->setPreference(
+ $pref_date,
+ $request->getStr($pref_date))
+ ->setPreference(
+ $pref_week_start,
+ $request->getStr($pref_week_start));
if (!$errors) {
$preferences->save();
@@ -71,6 +76,17 @@
->setValue($preferences->getPreference($pref_time)))
->appendChild(
id(new AphrontFormSelectControl())
+ ->setLabel(pht('Date Format'))
+ ->setName($pref_date)
+ ->setOptions(array(
+ 'm/d/Y' => pht('US (2/28/2000)'),
+ 'd/m/Y' => pht('Little-Endian (28/2/2000)'),
+ ))
+ ->setCaption(
+ pht('Format used when rendering a date.'))
+ ->setValue($preferences->getPreference($pref_date)))
+ ->appendChild(
+ id(new AphrontFormSelectControl())
->setLabel(pht('Week Starts On'))
->setOptions($this->getWeekDays())
->setName($pref_week_start)
diff --git a/src/applications/settings/storage/PhabricatorUserPreferences.php b/src/applications/settings/storage/PhabricatorUserPreferences.php
--- a/src/applications/settings/storage/PhabricatorUserPreferences.php
+++ b/src/applications/settings/storage/PhabricatorUserPreferences.php
@@ -8,6 +8,7 @@
const PREFERENCE_MULTIEDIT = 'multiedit';
const PREFERENCE_TITLES = 'titles';
const PREFERENCE_MONOSPACED_TEXTAREAS = 'monospaced-textareas';
+ const PREFERENCE_DATE_FORMAT = 'date-format';
const PREFERENCE_TIME_FORMAT = 'time-format';
const PREFERENCE_WEEK_START_DAY = 'week-start-day';
diff --git a/src/view/form/control/AphrontFormDateControl.php b/src/view/form/control/AphrontFormDateControl.php
--- a/src/view/form/control/AphrontFormDateControl.php
+++ b/src/view/form/control/AphrontFormDateControl.php
@@ -13,6 +13,8 @@
private $isDisabled;
private $endDateID;
+ private $viewer;
+
public function setAllowNull($allow_null) {
$this->allowNull = $allow_null;
return $this;
@@ -127,7 +129,21 @@
}
private function getDateInputValue() {
- return $this->valueDate;
+ $date_format = $this->getDateFormat();
+ $timezone = $this->getTimezone();
+
+ $datetime = new DateTime("{$this->valueDate}", $timezone);
+ $date = $datetime->format($date_format);
+
+ return $date;
+ }
+
+ private function getDateFormat() {
+ $viewer = $this->getUser();
+ $preferences = $viewer->loadPreferences();
+ $pref_date_format = PhabricatorUserPreferences::PREFERENCE_DATE_FORMAT;
+
+ return $preferences->getPreference($pref_date_format, 'm/d/Y');
}
private function getTimeInputValue() {
@@ -242,7 +258,9 @@
),
$time_sel);
- Javelin::initBehavior('fancy-datepicker', array());
+ Javelin::initBehavior('fancy-datepicker', array(
+ 'format' => $this->getDateFormat(),
+ ));
$classes = array();
$classes[] = 'aphront-form-date-container';
diff --git a/webroot/rsrc/js/core/behavior-fancy-datepicker.js b/webroot/rsrc/js/core/behavior-fancy-datepicker.js
--- a/webroot/rsrc/js/core/behavior-fancy-datepicker.js
+++ b/webroot/rsrc/js/core/behavior-fancy-datepicker.js
@@ -7,7 +7,11 @@
* javelin-vector
*/
-JX.behavior('fancy-datepicker', function() {
+JX.behavior('fancy-datepicker', function(config, statics) {
+ if (statics.initialized) {
+ return;
+ }
+ statics.initialized = true;
var picker;
var root;
@@ -16,6 +20,21 @@
var value_m;
var value_d;
+ function getKeyMap() {
+ var format = getFormat();
+ return format.split('/');
+ }
+
+ function getFormat() {
+ var f = config.format;
+
+ if (f === null) {
+ f = 'm/d/Y';
+ }
+
+ return f;
+ }
+
var onopen = function(e) {
e.kill();
@@ -85,18 +104,60 @@
};
};
- var read_date = function() {
- var i = get_inputs();
- var date = i.d.value;
- var parts = date.split('/');
- value_y = +parts[2];
- value_m = +parts[0];
- value_d = +parts[1];
+ var read_date = function(){
+ var inputs = get_inputs();
+ var date = inputs.d.value;
+ var date_parts = date.split('/');
+ var map = getKeyMap();
+
+ for (var i=0; i < date_parts.length; i++) {
+ var key = map[i].toLowerCase();
+
+ switch (key) {
+ case 'y':
+ value_y = date_parts[i];
+ break;
+ case 'm':
+ value_m = date_parts[i];
+ break;
+ case 'd':
+ value_d = date_parts[i];
+ break;
+ }
+ }
};
var write_date = function() {
- var i = get_inputs();
- i.d.value = value_m + '/' + value_d + '/' + value_y;
+ var inputs = get_inputs();
+ var map = getKeyMap();
+ var arr_values = [];
+
+ for(var i=0; i < map.length; i++) {
+ switch (map[i].toLowerCase()) {
+ case 'y':
+ arr_values[i] = value_y;
+ break;
+ case 'm':
+ arr_values[i] = value_m;
+ break;
+ case 'd':
+ arr_values[i] = value_d;
+ break;
+ }
+ }
+
+ var text_value = '';
+
+ for(var j=0; j < arr_values.length; j++) {
+ var element = arr_values[j] ? arr_values[j] : '';
+ if (text_value.length === 0) {
+ text_value += element;
+ } else {
+ text_value = text_value + '/' + element;
+ }
+ }
+
+ inputs.d.value = text_value;
};
var render = function() {

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 29, 12:20 AM (3 d, 4 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7629826
Default Alt Text
D13262.id32054.diff (6 KB)

Event Timeline