Page MenuHomePhabricator

D19852.diff
No OneTemporary

D19852.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2976,6 +2976,7 @@
'PhabricatorEditEngineStaticCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineStaticCommentAction.php',
'PhabricatorEditEngineSubtype' => 'applications/transactions/editengine/PhabricatorEditEngineSubtype.php',
'PhabricatorEditEngineSubtypeInterface' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php',
+ 'PhabricatorEditEngineSubtypeMap' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php',
'PhabricatorEditEngineSubtypeTestCase' => 'applications/transactions/editengine/__tests__/PhabricatorEditEngineSubtypeTestCase.php',
'PhabricatorEditEngineTokenizerCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineTokenizerCommentAction.php',
'PhabricatorEditField' => 'applications/transactions/editfield/PhabricatorEditField.php',
@@ -8729,6 +8730,7 @@
'PhabricatorEditEngineSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorEditEngineStaticCommentAction' => 'PhabricatorEditEngineCommentAction',
'PhabricatorEditEngineSubtype' => 'Phobject',
+ 'PhabricatorEditEngineSubtypeMap' => 'Phobject',
'PhabricatorEditEngineSubtypeTestCase' => 'PhabricatorTestCase',
'PhabricatorEditEngineTokenizerCommentAction' => 'PhabricatorEditEngineCommentAction',
'PhabricatorEditField' => 'Phobject',
diff --git a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php
--- a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php
+++ b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php
@@ -47,7 +47,7 @@
// Hide the "Subtypes" constraint from the web UI if the install only
// defines one task subtype, since it isn't of any use in this case.
$subtype_map = id(new ManiphestTask())->newEditEngineSubtypeMap();
- $hide_subtypes = (count($subtype_map) == 1);
+ $hide_subtypes = ($subtype_map->getCount() == 1);
return array(
id(new PhabricatorOwnersSearchField())
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
@@ -573,7 +573,7 @@
public function newSubtypeObject() {
$subtype_key = $this->getEditEngineSubtype();
$subtype_map = $this->newEditEngineSubtypeMap();
- return idx($subtype_map, $subtype_key);
+ return $subtype_map->getSubtype($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
@@ -214,11 +214,12 @@
public function renderSubtypeName($value) {
$object = $this->getObject();
$map = $object->newEditEngineSubtypeMap();
- if (!isset($map[$value])) {
+
+ if (!$map->isValidSubtype($value)) {
return $value;
}
- return $map[$value]->getName();
+ return $map->getSubtype($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
@@ -28,7 +28,7 @@
$results = array();
$subtype_map = id(new ManiphestTask())->newEditEngineSubtypeMap();
- foreach ($subtype_map as $key => $subtype) {
+ foreach ($subtype_map->getSubtypes() as $key => $subtype) {
$result = id(new PhabricatorTypeaheadResult())
->setIcon($subtype->getIcon())
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,9 +56,6 @@
Javelin::initBehavior('maniphest-list-editor');
}
- $subtype_map = id(new ManiphestTask())
- ->newEditEngineSubtypeMap();
-
foreach ($this->tasks as $task) {
$item = id(new PHUIObjectItemView())
->setUser($this->getUser())
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php
@@ -61,8 +61,7 @@
EOTEXT
);
- $map = $engine->newSubtypeMap();
- $map = mpull($map, 'getName');
+ $map = $engine->newSubtypeMap()->getDisplayMap();
$form = id(new AphrontFormView())
->setUser($viewer)
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
@@ -182,7 +182,7 @@
$map[$key] = $subtype;
}
- return $map;
+ return new PhabricatorEditEngineSubtypeMap($map);
}
}
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php b/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php
@@ -0,0 +1,42 @@
+<?php
+
+
+final class PhabricatorEditEngineSubtypeMap
+ extends Phobject {
+
+ private $subtypes;
+
+ public function __construct(array $subtypes) {
+ assert_instances_of($subtypes, 'PhabricatorEditEngineSubtype');
+
+ $this->subtypes = $subtypes;
+ }
+
+ public function getDisplayMap() {
+ return mpull($this->subtypes, 'getName');
+ }
+
+ public function getCount() {
+ return count($this->subtypes);
+ }
+
+ public function isValidSubtype($subtype_key) {
+ return isset($this->subtypes[$subtype_key]);
+ }
+
+ public function getSubtypes() {
+ return $this->subtypes;
+ }
+
+ public function getSubtype($subtype_key) {
+ if (!$this->isValidSubtype($subtype_key)) {
+ throw new Exception(
+ pht(
+ 'Subtype key "%s" does not identify a valid subtype.',
+ $subtype_key));
+ }
+
+ return $this->subtypes[$subtype_key];
+ }
+
+}
diff --git a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
--- a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
+++ b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
@@ -2541,7 +2541,7 @@
continue;
}
- if (!isset($map[$new])) {
+ if (!$map->isValidSubtype($new)) {
$errors[] = new PhabricatorApplicationTransactionValidationError(
$transaction_type,
pht('Invalid'),
diff --git a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
--- a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
+++ b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
@@ -64,7 +64,7 @@
foreach ($xactions as $xaction) {
$new = $xaction->getNewValue();
- if (isset($map[$new])) {
+ if ($map->isValidSubtype($new)) {
continue;
}
diff --git a/src/applications/transactions/engineextension/PhabricatorSubtypeEditEngineExtension.php b/src/applications/transactions/engineextension/PhabricatorSubtypeEditEngineExtension.php
--- a/src/applications/transactions/engineextension/PhabricatorSubtypeEditEngineExtension.php
+++ b/src/applications/transactions/engineextension/PhabricatorSubtypeEditEngineExtension.php
@@ -31,7 +31,7 @@
$subtype_type = PhabricatorTransactions::TYPE_SUBTYPE;
$map = $object->newEditEngineSubtypeMap();
- $options = mpull($map, 'getName');
+ $options = $map->getDisplayMap();
$subtype_field = id(new PhabricatorSelectEditField())
->setKey(self::EDITKEY)
@@ -45,7 +45,7 @@
// If subtypes are configured, enable changing them from the bulk editor
// and comment action stack.
- if (count($map) > 1) {
+ if ($map->getCount() > 1) {
$subtype_field
->setBulkEditLabel(pht('Change subtype to'))
->setCommentActionLabel(pht('Change Subtype'))

File Metadata

Mime Type
text/plain
Expires
Thu, May 16, 2:19 AM (2 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6290672
Default Alt Text
D19852.diff (8 KB)

Event Timeline