Page MenuHomePhabricator

D17451.diff
No OneTemporary

D17451.diff

diff --git a/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php b/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
--- a/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
+++ b/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
@@ -335,9 +335,16 @@
"task", "feature", or "bug".
- `name` //Required string.// Human-readable name for this subtype, like
"Task", "Feature Request" or "Bug Report".
+ - `tag` //Optional string.// Tag text for this subtype.
+ - `color` //Optional string.// Display color for this subtype.
+ - `icon` //Optional string.// Icon for the subtype.
Each subtype must have a unique key, and you must define a subtype with
the key "%s", which is used as a default subtype.
+
+The tag text (`tag`) is used to set the text shown in the subtype tag on list
+views and workboards. If you do not configure it, the default subtype will have
+no subtype tag and other subtypes will use their name as tag text.
EOTEXT
,
$subtype_default_key));
diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
--- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php
@@ -240,6 +240,12 @@
}
}
+ $subtype = $task->newSubtypeObject();
+ if ($subtype && $subtype->hasTagView()) {
+ $subtype_tag = $subtype->newTagView();
+ $view->addTag($subtype_tag);
+ }
+
return $view;
}
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
@@ -540,6 +540,11 @@
);
}
+ public function newSubtypeObject() {
+ $subtype_key = $this->getEditEngineSubtype();
+ $subtype_map = $this->newEditEngineSubtypeMap();
+ return idx($subtype_map, $subtype_key);
+ }
/* -( PhabricatorFulltextInterface )--------------------------------------- */
diff --git a/src/applications/maniphest/storage/ManiphestTransaction.php b/src/applications/maniphest/storage/ManiphestTransaction.php
--- a/src/applications/maniphest/storage/ManiphestTransaction.php
+++ b/src/applications/maniphest/storage/ManiphestTransaction.php
@@ -211,4 +211,14 @@
return parent::getNoEffectDescription();
}
+ public function renderSubtypeName($value) {
+ $object = $this->getObject();
+ $map = $object->newEditEngineSubtypeMap();
+ if (!isset($map[$value])) {
+ return $value;
+ }
+
+ return $map[$value]->getName();
+ }
+
}
diff --git a/src/applications/maniphest/typeahead/ManiphestTaskSubtypeDatasource.php b/src/applications/maniphest/typeahead/ManiphestTaskSubtypeDatasource.php
--- a/src/applications/maniphest/typeahead/ManiphestTaskSubtypeDatasource.php
+++ b/src/applications/maniphest/typeahead/ManiphestTaskSubtypeDatasource.php
@@ -32,6 +32,7 @@
$result = id(new PhabricatorTypeaheadResult())
->setIcon($subtype->getIcon())
+ ->setColor($subtype->getColor())
->setPHID($key)
->setName($subtype->getName());
diff --git a/src/applications/maniphest/view/ManiphestTaskListView.php b/src/applications/maniphest/view/ManiphestTaskListView.php
--- a/src/applications/maniphest/view/ManiphestTaskListView.php
+++ b/src/applications/maniphest/view/ManiphestTaskListView.php
@@ -56,6 +56,9 @@
Javelin::initBehavior('maniphest-list-editor');
}
+ $subtype_map = id(new ManiphestTask())
+ ->newEditEngineSubtypeMap();
+
foreach ($this->tasks as $task) {
$item = id(new PHUIObjectItemView())
->setUser($this->getUser())
@@ -94,6 +97,13 @@
$item->addSigil('maniphest-task');
}
+ $subtype = $task->newSubtypeObject();
+ if ($subtype && $subtype->hasTagView()) {
+ $subtype_tag = $subtype->newTagView()
+ ->setSlimShady(true);
+ $item->addAttribute($subtype_tag);
+ }
+
$project_handles = array_select_keys(
$handles,
array_reverse($task->getProjectPHIDs()));
diff --git a/src/applications/maniphest/xaction/ManiphestTaskTransactionType.php b/src/applications/maniphest/xaction/ManiphestTaskTransactionType.php
--- a/src/applications/maniphest/xaction/ManiphestTaskTransactionType.php
+++ b/src/applications/maniphest/xaction/ManiphestTaskTransactionType.php
@@ -3,14 +3,4 @@
abstract class ManiphestTaskTransactionType
extends PhabricatorModularTransactionType {
- public function renderSubtypeName($value) {
- $object = $this->getObject();
- $map = $object->newEditEngineSubtypeMap();
- if (!isset($map[$value])) {
- return $value;
- }
-
- return $map[$value]->getName();
- }
-
}
diff --git a/src/applications/project/view/ProjectBoardTaskCard.php b/src/applications/project/view/ProjectBoardTaskCard.php
--- a/src/applications/project/view/ProjectBoardTaskCard.php
+++ b/src/applications/project/view/ProjectBoardTaskCard.php
@@ -108,6 +108,13 @@
}
}
+ $subtype = $task->newSubtypeObject();
+ if ($subtype && $subtype->hasTagView()) {
+ $subtype_tag = $subtype->newTagView()
+ ->setSlimShady(true);
+ $card->addAttribute($subtype_tag);
+ }
+
if ($task->isClosed()) {
$icon = ManiphestTaskStatus::getStatusIcon($task->getStatus());
$icon = id(new PHUIIconView())
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngineSubtype.php b/src/applications/transactions/editengine/PhabricatorEditEngineSubtype.php
--- a/src/applications/transactions/editengine/PhabricatorEditEngineSubtype.php
+++ b/src/applications/transactions/editengine/PhabricatorEditEngineSubtype.php
@@ -8,6 +8,9 @@
private $key;
private $name;
+ private $icon;
+ private $tagText;
+ private $color;
public function setKey($key) {
$this->key = $key;
@@ -27,8 +30,48 @@
return $this->name;
}
+ public function setIcon($icon) {
+ $this->icon = $icon;
+ return $this;
+ }
+
public function getIcon() {
- return 'fa-drivers-license-o';
+ return $this->icon;
+ }
+
+ public function setTagText($text) {
+ $this->tagText = $text;
+ return $this;
+ }
+
+ public function getTagText() {
+ return $this->tagText;
+ }
+
+ public function setColor($color) {
+ $this->color = $color;
+ return $this;
+ }
+
+ public function getColor() {
+ return $this->color;
+ }
+
+ public function hasTagView() {
+ return (bool)strlen($this->getTagText());
+ }
+
+ public function newTagView() {
+ $view = id(new PHUITagView())
+ ->setType(PHUITagView::TYPE_OUTLINE)
+ ->setName($this->getTagText());
+
+ $color = $this->getColor();
+ if ($color) {
+ $view->setColor($color);
+ }
+
+ return $view;
}
public static function validateSubtypeKey($subtype) {
@@ -72,6 +115,9 @@
array(
'key' => 'string',
'name' => 'string',
+ 'tag' => 'optional string',
+ 'color' => 'optional string',
+ 'icon' => 'optional string',
));
$key = $value['key'];
@@ -113,9 +159,27 @@
$key = $entry['key'];
$name = $entry['name'];
- $map[$key] = id(new self())
+ $tag_text = idx($entry, 'tag');
+ if ($tag_text === null) {
+ if ($key != self::SUBTYPE_DEFAULT) {
+ $tag_text = phutil_utf8_strtoupper($name);
+ }
+ }
+
+ $color = idx($entry, 'color', 'blue');
+ $icon = idx($entry, 'icon', 'fa-drivers-license-o');
+
+ $subtype = id(new self())
->setKey($key)
- ->setName($name);
+ ->setName($name)
+ ->setTagText($tag_text)
+ ->setIcon($icon);
+
+ if ($color) {
+ $subtype->setColor($color);
+ }
+
+ $map[$key] = $subtype;
}
return $map;

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 5, 12:38 PM (6 d, 5 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7225548
Default Alt Text
D17451.diff (7 KB)

Event Timeline