Page MenuHomePhabricator

D18134.diff
No OneTemporary

D18134.diff

diff --git a/src/applications/maniphest/constants/ManiphestTaskPriority.php b/src/applications/maniphest/constants/ManiphestTaskPriority.php
--- a/src/applications/maniphest/constants/ManiphestTaskPriority.php
+++ b/src/applications/maniphest/constants/ManiphestTaskPriority.php
@@ -43,6 +43,58 @@
return $map;
}
+ /**
+ * Get the canonical keyword for a given priority constant.
+ *
+ * @return string|null Keyword, or `null` if no keyword is configured.
+ */
+ public static function getKeywordForTaskPriority($priority) {
+ $map = self::getConfig();
+
+ $spec = idx($map, $priority);
+ if (!$spec) {
+ return null;
+ }
+
+ $keywords = idx($spec, 'keywords');
+ if (!$keywords) {
+ return null;
+ }
+
+ return head($keywords);
+ }
+
+
+ /**
+ * Get a map of supported alternate names for each priority.
+ *
+ * Keys are aliases, like "wish" and "wishlist". Values are canonical
+ * priority keywords, like "wishlist".
+ *
+ * @return map<string, string> Map of aliases to canonical priority keywords.
+ */
+ public static function getTaskPriorityAliasMap() {
+ $keyword_map = self::getTaskPriorityKeywordsMap();
+
+ $result = array();
+ foreach ($keyword_map as $key => $keywords) {
+ $target = self::getKeywordForTaskPriority($key);
+ if ($target === null) {
+ continue;
+ }
+
+ // NOTE: Include the raw priority value, like "25", in the list of
+ // aliases. This supports legacy sources like saved EditEngine forms.
+ $result[$key] = $target;
+
+ foreach ($keywords as $keyword) {
+ $result[$keyword] = $target;
+ }
+ }
+
+ return $result;
+ }
+
/**
* Get the priorities and their related short (one-word) descriptions.
diff --git a/src/applications/maniphest/editor/ManiphestEditEngine.php b/src/applications/maniphest/editor/ManiphestEditEngine.php
--- a/src/applications/maniphest/editor/ManiphestEditEngine.php
+++ b/src/applications/maniphest/editor/ManiphestEditEngine.php
@@ -77,6 +77,8 @@
$status_map = $this->getTaskStatusMap($object);
$priority_map = $this->getTaskPriorityMap($object);
+ $alias_map = ManiphestTaskPriority::getTaskPriorityAliasMap();
+
if ($object->isClosed()) {
$default_status = ManiphestTaskStatus::getDefaultStatus();
} else {
@@ -217,6 +219,7 @@
->setIsCopyable(true)
->setValue($object->getPriorityKeyword())
->setOptions($priority_map)
+ ->setOptionAliases($alias_map)
->setCommentActionLabel(pht('Change Priority')),
);
diff --git a/src/applications/maniphest/storage/ManiphestTask.php b/src/applications/maniphest/storage/ManiphestTask.php
--- a/src/applications/maniphest/storage/ManiphestTask.php
+++ b/src/applications/maniphest/storage/ManiphestTask.php
@@ -247,10 +247,13 @@
public function getPriorityKeyword() {
$priority = $this->getPriority();
- $map = ManiphestTaskPriority::getTaskPriorityKeywordsMap();
- $default = array(ManiphestTaskPriority::UNKNOWN_PRIORITY_KEYWORD);
- $keywords = idx($map, $priority, $default);
- return head($keywords);
+
+ $keyword = ManiphestTaskPriority::getKeywordForTaskPriority($priority);
+ if ($keyword !== null) {
+ return $keyword;
+ }
+
+ return ManiphestTaskPriority::UNKNOWN_PRIORITY_KEYWORD;
}
private function comparePriorityTo(ManiphestTask $other) {
diff --git a/src/applications/transactions/editfield/PhabricatorSelectEditField.php b/src/applications/transactions/editfield/PhabricatorSelectEditField.php
--- a/src/applications/transactions/editfield/PhabricatorSelectEditField.php
+++ b/src/applications/transactions/editfield/PhabricatorSelectEditField.php
@@ -4,6 +4,7 @@
extends PhabricatorEditField {
private $options;
+ private $optionAliases = array();
public function setOptions(array $options) {
$this->options = $options;
@@ -17,6 +18,29 @@
return $this->options;
}
+ public function setOptionAliases(array $option_aliases) {
+ $this->optionAliases = $option_aliases;
+ return $this;
+ }
+
+ public function getOptionAliases() {
+ return $this->optionAliases;
+ }
+
+ protected function getValueForControl() {
+ $value = parent::getValueForControl();
+
+ $options = $this->getOptions();
+ if (!isset($options[$value])) {
+ $aliases = $this->getOptionAliases();
+ if (isset($aliases[$value])) {
+ $value = $aliases[$value];
+ }
+ }
+
+ return $value;
+ }
+
protected function newControl() {
return id(new AphrontFormSelectControl())
->setOptions($this->getOptions());

File Metadata

Mime Type
text/plain
Expires
Fri, May 24, 3:51 AM (3 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6288726
Default Alt Text
D18134.diff (4 KB)

Event Timeline