@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Support "Subtype" in Herald

Summary: See PHI1434. For objects that support subtypes and have subtypes configured, allow Herald rules to act on subtypes.

Test Plan:
- Configured task and project subtypes, wrote Herald rules, saw "Subtypes" as an option, saw appropriate typeahead values and detail page rendering.
- Unconfigured project subtypes, saw field vanish from UI for new rules.
- Wrote a "subtype"-depenent rule that added a comment, interacted with tasks of that subtype and a different subtype. Saw Herald act only on tasks with the correct subtype.

Differential Revision: https://secure.phabricator.com/D20809

+72 -2
+2
src/__phutil_library_map__.php
··· 3217 3217 'PhabricatorEditEngineSettingsPanel' => 'applications/settings/panel/PhabricatorEditEngineSettingsPanel.php', 3218 3218 'PhabricatorEditEngineStaticCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineStaticCommentAction.php', 3219 3219 'PhabricatorEditEngineSubtype' => 'applications/transactions/editengine/PhabricatorEditEngineSubtype.php', 3220 + 'PhabricatorEditEngineSubtypeHeraldField' => 'applications/transactions/herald/PhabricatorEditEngineSubtypeHeraldField.php', 3220 3221 'PhabricatorEditEngineSubtypeInterface' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php', 3221 3222 'PhabricatorEditEngineSubtypeMap' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php', 3222 3223 'PhabricatorEditEngineSubtypeTestCase' => 'applications/transactions/editengine/__tests__/PhabricatorEditEngineSubtypeTestCase.php', ··· 9550 9551 'PhabricatorEditEngineSettingsPanel' => 'PhabricatorSettingsPanel', 9551 9552 'PhabricatorEditEngineStaticCommentAction' => 'PhabricatorEditEngineCommentAction', 9552 9553 'PhabricatorEditEngineSubtype' => 'Phobject', 9554 + 'PhabricatorEditEngineSubtypeHeraldField' => 'HeraldField', 9553 9555 'PhabricatorEditEngineSubtypeMap' => 'Phobject', 9554 9556 'PhabricatorEditEngineSubtypeTestCase' => 'PhabricatorTestCase', 9555 9557 'PhabricatorEditEngineSubtypeTransaction' => 'PhabricatorEditEngineTransactionType',
+2 -1
src/applications/maniphest/storage/ManiphestTask.php
··· 564 564 565 565 public function newEditEngineSubtypeMap() { 566 566 $config = PhabricatorEnv::getEnvConfig('maniphest.subtypes'); 567 - return PhabricatorEditEngineSubtype::newSubtypeMap($config); 567 + return PhabricatorEditEngineSubtype::newSubtypeMap($config) 568 + ->setDatasource(new ManiphestTaskSubtypeDatasource()); 568 569 } 569 570 570 571
+2 -1
src/applications/project/storage/PhabricatorProject.php
··· 904 904 905 905 public function newEditEngineSubtypeMap() { 906 906 $config = PhabricatorEnv::getEnvConfig('projects.subtypes'); 907 - return PhabricatorEditEngineSubtype::newSubtypeMap($config); 907 + return PhabricatorEditEngineSubtype::newSubtypeMap($config) 908 + ->setDatasource(new PhabricatorProjectSubtypeDatasource()); 908 909 } 909 910 910 911 public function newSubtypeObject() {
+14
src/applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php
··· 5 5 extends Phobject { 6 6 7 7 private $subtypes; 8 + private $datasource; 8 9 9 10 public function __construct(array $subtypes) { 10 11 assert_instances_of($subtypes, 'PhabricatorEditEngineSubtype'); ··· 37 38 } 38 39 39 40 return $this->subtypes[$subtype_key]; 41 + } 42 + 43 + public function setDatasource(PhabricatorTypeaheadDatasource $datasource) { 44 + $this->datasource = $datasource; 45 + return $this; 46 + } 47 + 48 + public function newDatasource() { 49 + if (!$this->datasource) { 50 + throw new PhutilInvalidStateException('setDatasource'); 51 + } 52 + 53 + return clone($this->datasource); 40 54 } 41 55 42 56 public function getCreateFormsForSubtype(
+52
src/applications/transactions/herald/PhabricatorEditEngineSubtypeHeraldField.php
··· 1 + <?php 2 + 3 + final class PhabricatorEditEngineSubtypeHeraldField 4 + extends HeraldField { 5 + 6 + const FIELDCONST = 'subtype'; 7 + 8 + public function getHeraldFieldName() { 9 + return pht('Subtype'); 10 + } 11 + 12 + public function getFieldGroupKey() { 13 + return HeraldSupportFieldGroup::FIELDGROUPKEY; 14 + } 15 + 16 + public function supportsObject($object) { 17 + return ($object instanceof PhabricatorEditEngineSubtypeInterface); 18 + } 19 + 20 + public function getHeraldFieldValue($object) { 21 + return $object->getEditEngineSubtype(); 22 + } 23 + 24 + protected function getHeraldFieldStandardType() { 25 + return self::STANDARD_PHID; 26 + } 27 + 28 + protected function getDatasource() { 29 + $object = $this->getAdapter()->getObject(); 30 + $map = $object->newEditEngineSubtypeMap(); 31 + return $map->newDatasource(); 32 + } 33 + 34 + protected function getDatasourceValueMap() { 35 + $object = $this->getAdapter()->getObject(); 36 + $map = $object->newEditEngineSubtypeMap(); 37 + 38 + $result = array(); 39 + foreach ($map->getSubtypes() as $subtype) { 40 + $result[$subtype->getKey()] = $subtype->getName(); 41 + } 42 + 43 + return $result; 44 + } 45 + 46 + public function isFieldAvailable() { 47 + $object = $this->getAdapter()->getObject(); 48 + $map = $object->newEditEngineSubtypeMap(); 49 + return ($map->getCount() > 1); 50 + } 51 + 52 + }