@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.

T5015, Allow Herald rules for Maniphest to act on task status changes

Summary: Fixes T5015, Allow Herald rules for Maniphest to act on task status changes.

Test Plan: Create Herald rule for Maniphest tasks to flag a task with status "wontfix". Change status of Maniphest task to "wontfix". Task should be flagged.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T5015

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

authored by

lkassianik and committed by
epriestley
3d2e03d0 22551d10

+61 -1
+2
src/__phutil_library_map__.php
··· 1014 1014 'ManiphestTaskResultListView' => 'applications/maniphest/view/ManiphestTaskResultListView.php', 1015 1015 'ManiphestTaskSearchEngine' => 'applications/maniphest/query/ManiphestTaskSearchEngine.php', 1016 1016 'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php', 1017 + 'ManiphestTaskStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php', 1017 1018 'ManiphestTaskStatusTestCase' => 'applications/maniphest/constants/__tests__/ManiphestTaskStatusTestCase.php', 1018 1019 'ManiphestTaskSubscriber' => 'applications/maniphest/storage/ManiphestTaskSubscriber.php', 1019 1020 'ManiphestTransaction' => 'applications/maniphest/storage/ManiphestTransaction.php', ··· 4073 4074 'ManiphestTaskResultListView' => 'ManiphestView', 4074 4075 'ManiphestTaskSearchEngine' => 'PhabricatorApplicationSearchEngine', 4075 4076 'ManiphestTaskStatus' => 'ManiphestConstants', 4077 + 'ManiphestTaskStatusDatasource' => 'PhabricatorTypeaheadDatasource', 4076 4078 'ManiphestTaskStatusTestCase' => 'PhabricatorTestCase', 4077 4079 'ManiphestTaskSubscriber' => 'ManiphestDAO', 4078 4080 'ManiphestTransaction' => 'PhabricatorApplicationTransaction',
+15
src/applications/herald/adapter/HeraldAdapter.php
··· 40 40 const FIELD_COMMITTER_RAW = 'committer-raw'; 41 41 const FIELD_IS_NEW_OBJECT = 'new-object'; 42 42 const FIELD_TASK_PRIORITY = 'taskpriority'; 43 + const FIELD_TASK_STATUS = 'taskstatus'; 43 44 const FIELD_ARCANIST_PROJECT = 'arcanist-project'; 44 45 const FIELD_PUSHER_IS_COMMITTER = 'pusher-is-committer'; 45 46 const FIELD_PATH = 'path'; ··· 96 97 const VALUE_USER_OR_PROJECT = 'userorproject'; 97 98 const VALUE_BUILD_PLAN = 'buildplan'; 98 99 const VALUE_TASK_PRIORITY = 'taskpriority'; 100 + const VALUE_TASK_STATUS = 'taskstatus'; 99 101 const VALUE_ARCANIST_PROJECT = 'arcanistprojects'; 100 102 const VALUE_LEGAL_DOCUMENTS = 'legaldocuments'; 101 103 ··· 311 313 self::FIELD_COMMITTER_RAW => pht('Raw committer name'), 312 314 self::FIELD_IS_NEW_OBJECT => pht('Is newly created?'), 313 315 self::FIELD_TASK_PRIORITY => pht('Task priority'), 316 + self::FIELD_TASK_STATUS => pht('Task status'), 314 317 self::FIELD_ARCANIST_PROJECT => pht('Arcanist Project'), 315 318 self::FIELD_PUSHER_IS_COMMITTER => pht('Pusher same as committer'), 316 319 self::FIELD_PATH => pht('Path'), ··· 366 369 case self::FIELD_REVIEWER: 367 370 case self::FIELD_PUSHER: 368 371 case self::FIELD_TASK_PRIORITY: 372 + case self::FIELD_TASK_STATUS: 369 373 case self::FIELD_ARCANIST_PROJECT: 370 374 return array( 371 375 self::CONDITION_IS_ANY, ··· 843 847 return self::VALUE_REPOSITORY; 844 848 case self::FIELD_TASK_PRIORITY: 845 849 return self::VALUE_TASK_PRIORITY; 850 + case self::FIELD_TASK_STATUS: 851 + return self::VALUE_TASK_STATUS; 846 852 case self::FIELD_ARCANIST_PROJECT: 847 853 return self::VALUE_ARCANIST_PROJECT; 848 854 default: ··· 1157 1163 $priority_map = ManiphestTaskPriority::getTaskPriorityMap(); 1158 1164 foreach ($value as $index => $val) { 1159 1165 $name = idx($priority_map, $val); 1166 + if ($name) { 1167 + $value[$index] = $name; 1168 + } 1169 + } 1170 + break; 1171 + case self::FIELD_TASK_STATUS: 1172 + $status_map = ManiphestTaskStatus::getTaskStatusMap(); 1173 + foreach ($value as $index => $val) { 1174 + $name = idx($status_map, $val); 1160 1175 if ($name) { 1161 1176 $value[$index] = $name; 1162 1177 }
+3
src/applications/herald/adapter/HeraldManiphestTaskAdapter.php
··· 89 89 self::FIELD_CONTENT_SOURCE, 90 90 self::FIELD_PROJECTS, 91 91 self::FIELD_TASK_PRIORITY, 92 + self::FIELD_TASK_STATUS, 92 93 self::FIELD_IS_NEW_OBJECT, 93 94 ), 94 95 parent::getFields()); ··· 145 146 PhabricatorProjectObjectHasProjectEdgeType::EDGECONST); 146 147 case self::FIELD_TASK_PRIORITY: 147 148 return $this->getTask()->getPriority(); 149 + case self::FIELD_TASK_STATUS: 150 + return $this->getTask()->getStatus(); 148 151 } 149 152 150 153 return parent::getHeraldField($field);
+9
src/applications/herald/controller/HeraldRuleController.php
··· 358 358 } 359 359 $value = $value_map; 360 360 break; 361 + case HeraldAdapter::FIELD_TASK_STATUS: 362 + $value_map = array(); 363 + $status_map = ManiphestTaskStatus::getTaskStatusMap(); 364 + foreach ($value as $status) { 365 + $value_map[$status] = idx($status_map, $status); 366 + } 367 + $value = $value_map; 368 + break; 361 369 default: 362 370 if (is_array($value)) { 363 371 $value_map = array(); ··· 586 594 'repository' => new DiffusionRepositoryDatasource(), 587 595 'legaldocuments' => new LegalpadDocumentDatasource(), 588 596 'taskpriority' => new ManiphestTaskPriorityDatasource(), 597 + 'taskstatus' => new ManiphestTaskStatusDatasource(), 589 598 'buildplan' => new HarbormasterBuildPlanDatasource(), 590 599 'arcanistprojects' => new DiffusionArcanistProjectDatasource(), 591 600 'package' => new PhabricatorOwnersPackageDatasource(),
+1 -1
src/applications/herald/storage/HeraldRule.php
··· 18 18 protected $isDisabled = 0; 19 19 protected $triggerObjectPHID; 20 20 21 - protected $configVersion = 37; 21 + protected $configVersion = 38; 22 22 23 23 // PHIDs for which this rule has been applied 24 24 private $ruleApplied = self::ATTACHABLE;
+30
src/applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php
··· 1 + <?php 2 + 3 + final class ManiphestTaskStatusDatasource 4 + extends PhabricatorTypeaheadDatasource { 5 + 6 + public function getPlaceholderText() { 7 + return pht('Type a task status name...'); 8 + } 9 + 10 + public function getDatasourceApplicationClass() { 11 + return 'PhabricatorManiphestApplication'; 12 + } 13 + 14 + public function loadResults() { 15 + $viewer = $this->getViewer(); 16 + $raw_query = $this->getRawQuery(); 17 + 18 + $results = array(); 19 + 20 + $status_map = ManiphestTaskStatus::getTaskStatusMap(); 21 + foreach ($status_map as $value => $name) { 22 + // NOTE: $value is not a PHID but is unique. This'll work. 23 + $results[] = id(new PhabricatorTypeaheadResult()) 24 + ->setPHID($value) 25 + ->setName($name); 26 + } 27 + 28 + return $results; 29 + } 30 + }
+1
webroot/rsrc/js/application/herald/HeraldRuleEditor.js
··· 219 219 case 'userorproject': 220 220 case 'buildplan': 221 221 case 'taskpriority': 222 + case 'taskstatus': 222 223 case 'arcanistprojects': 223 224 case 'legaldocuments': 224 225 var tokenizer = this._newTokenizer(type);