Page MenuHomePhabricator

D20809.diff
No OneTemporary

D20809.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
@@ -3217,6 +3217,7 @@
'PhabricatorEditEngineSettingsPanel' => 'applications/settings/panel/PhabricatorEditEngineSettingsPanel.php',
'PhabricatorEditEngineStaticCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineStaticCommentAction.php',
'PhabricatorEditEngineSubtype' => 'applications/transactions/editengine/PhabricatorEditEngineSubtype.php',
+ 'PhabricatorEditEngineSubtypeHeraldField' => 'applications/transactions/herald/PhabricatorEditEngineSubtypeHeraldField.php',
'PhabricatorEditEngineSubtypeInterface' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php',
'PhabricatorEditEngineSubtypeMap' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php',
'PhabricatorEditEngineSubtypeTestCase' => 'applications/transactions/editengine/__tests__/PhabricatorEditEngineSubtypeTestCase.php',
@@ -9550,6 +9551,7 @@
'PhabricatorEditEngineSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorEditEngineStaticCommentAction' => 'PhabricatorEditEngineCommentAction',
'PhabricatorEditEngineSubtype' => 'Phobject',
+ 'PhabricatorEditEngineSubtypeHeraldField' => 'HeraldField',
'PhabricatorEditEngineSubtypeMap' => 'Phobject',
'PhabricatorEditEngineSubtypeTestCase' => 'PhabricatorTestCase',
'PhabricatorEditEngineSubtypeTransaction' => 'PhabricatorEditEngineTransactionType',
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
@@ -564,7 +564,8 @@
public function newEditEngineSubtypeMap() {
$config = PhabricatorEnv::getEnvConfig('maniphest.subtypes');
- return PhabricatorEditEngineSubtype::newSubtypeMap($config);
+ return PhabricatorEditEngineSubtype::newSubtypeMap($config)
+ ->setDatasource(new ManiphestTaskSubtypeDatasource());
}
diff --git a/src/applications/project/storage/PhabricatorProject.php b/src/applications/project/storage/PhabricatorProject.php
--- a/src/applications/project/storage/PhabricatorProject.php
+++ b/src/applications/project/storage/PhabricatorProject.php
@@ -904,7 +904,8 @@
public function newEditEngineSubtypeMap() {
$config = PhabricatorEnv::getEnvConfig('projects.subtypes');
- return PhabricatorEditEngineSubtype::newSubtypeMap($config);
+ return PhabricatorEditEngineSubtype::newSubtypeMap($config)
+ ->setDatasource(new PhabricatorProjectSubtypeDatasource());
}
public function newSubtypeObject() {
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php b/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php
--- a/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php
+++ b/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php
@@ -5,6 +5,7 @@
extends Phobject {
private $subtypes;
+ private $datasource;
public function __construct(array $subtypes) {
assert_instances_of($subtypes, 'PhabricatorEditEngineSubtype');
@@ -39,6 +40,19 @@
return $this->subtypes[$subtype_key];
}
+ public function setDatasource(PhabricatorTypeaheadDatasource $datasource) {
+ $this->datasource = $datasource;
+ return $this;
+ }
+
+ public function newDatasource() {
+ if (!$this->datasource) {
+ throw new PhutilInvalidStateException('setDatasource');
+ }
+
+ return clone($this->datasource);
+ }
+
public function getCreateFormsForSubtype(
PhabricatorEditEngine $edit_engine,
PhabricatorEditEngineSubtypeInterface $object) {
diff --git a/src/applications/transactions/herald/PhabricatorEditEngineSubtypeHeraldField.php b/src/applications/transactions/herald/PhabricatorEditEngineSubtypeHeraldField.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/herald/PhabricatorEditEngineSubtypeHeraldField.php
@@ -0,0 +1,52 @@
+<?php
+
+final class PhabricatorEditEngineSubtypeHeraldField
+ extends HeraldField {
+
+ const FIELDCONST = 'subtype';
+
+ public function getHeraldFieldName() {
+ return pht('Subtype');
+ }
+
+ public function getFieldGroupKey() {
+ return HeraldSupportFieldGroup::FIELDGROUPKEY;
+ }
+
+ public function supportsObject($object) {
+ return ($object instanceof PhabricatorEditEngineSubtypeInterface);
+ }
+
+ public function getHeraldFieldValue($object) {
+ return $object->getEditEngineSubtype();
+ }
+
+ protected function getHeraldFieldStandardType() {
+ return self::STANDARD_PHID;
+ }
+
+ protected function getDatasource() {
+ $object = $this->getAdapter()->getObject();
+ $map = $object->newEditEngineSubtypeMap();
+ return $map->newDatasource();
+ }
+
+ protected function getDatasourceValueMap() {
+ $object = $this->getAdapter()->getObject();
+ $map = $object->newEditEngineSubtypeMap();
+
+ $result = array();
+ foreach ($map->getSubtypes() as $subtype) {
+ $result[$subtype->getKey()] = $subtype->getName();
+ }
+
+ return $result;
+ }
+
+ public function isFieldAvailable() {
+ $object = $this->getAdapter()->getObject();
+ $map = $object->newEditEngineSubtypeMap();
+ return ($map->getCount() > 1);
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Apr 6 2025, 4:00 PM (4 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7718858
Default Alt Text
D20809.diff (5 KB)

Event Timeline