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

Show a trigger rule summary on the rule view page

Summary: Ref T5474. When you view the main page for a rule, show what the rule does before you actually edit it.

Test Plan:
Viewed a real trigger, then faked invalid/unknown rules:

{F6300211}

{F6300212}

{F6300213}

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T5474

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

+123 -1
+44
src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php
··· 21 21 return new Aphront404Response(); 22 22 } 23 23 24 + $rules_view = $this->newRulesView($trigger); 24 25 $columns_view = $this->newColumnsView($trigger); 25 26 26 27 $title = $trigger->getObjectName(); ··· 40 41 ->setCurtain($curtain) 41 42 ->setMainColumn( 42 43 array( 44 + $rules_view, 43 45 $columns_view, 44 46 $timeline, 45 47 )); ··· 139 141 ->setTable($table_view); 140 142 } 141 143 144 + private function newRulesView(PhabricatorProjectTrigger $trigger) { 145 + $viewer = $this->getViewer(); 146 + $rules = $trigger->getTriggerRules(); 147 + 148 + $rows = array(); 149 + foreach ($rules as $rule) { 150 + $value = $rule->getRecord()->getValue(); 151 + 152 + $rows[] = array( 153 + $rule->getRuleViewIcon($value), 154 + $rule->getRuleViewLabel(), 155 + $rule->getRuleViewDescription($value), 156 + ); 157 + } 158 + 159 + $table_view = id(new AphrontTableView($rows)) 160 + ->setNoDataString(pht('This trigger has no rules.')) 161 + ->setHeaders( 162 + array( 163 + null, 164 + pht('Rule'), 165 + pht('Action'), 166 + )) 167 + ->setColumnClasses( 168 + array( 169 + null, 170 + 'pri', 171 + 'wide', 172 + )); 173 + 174 + $header_view = id(new PHUIHeaderView()) 175 + ->setHeader(pht('Trigger Rules')) 176 + ->setSubheader( 177 + pht( 178 + 'When a card is dropped into a column that uses this trigger, '. 179 + 'these actions will be taken.')); 180 + 181 + return id(new PHUIObjectBoxView()) 182 + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 183 + ->setHeader($header_view) 184 + ->setTable($table_view); 185 + } 142 186 private function newCurtain(PhabricatorProjectTrigger $trigger) { 143 187 $viewer = $this->getViewer(); 144 188
+2 -1
src/applications/project/storage/PhabricatorProjectTrigger.php
··· 174 174 } 175 175 176 176 $rule = id(new PhabricatorProjectTriggerInvalidRule()) 177 - ->setRecord($record); 177 + ->setRecord($record) 178 + ->setException($ex); 178 179 } 179 180 180 181 $trigger_rules[] = $rule;
+37
src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php
··· 5 5 6 6 const TRIGGERTYPE = 'invalid'; 7 7 8 + private $exception; 9 + 10 + public function setException(Exception $exception) { 11 + $this->exception = $exception; 12 + return $this; 13 + } 14 + 15 + public function getException() { 16 + return $this->exception; 17 + } 18 + 8 19 public function getDescription() { 9 20 return pht( 10 21 'Invalid rule (of type "%s").', ··· 57 68 58 69 protected function getPHUIXControlSpecification() { 59 70 return null; 71 + } 72 + 73 + public function getRuleViewLabel() { 74 + return pht('Invalid Rule'); 75 + } 76 + 77 + public function getRuleViewDescription($value) { 78 + $record = $this->getRecord(); 79 + $type = $record->getType(); 80 + 81 + $exception = $this->getException(); 82 + if ($exception) { 83 + return pht( 84 + 'This rule (of type "%s") is invalid: %s', 85 + $type, 86 + $exception->getMessage()); 87 + } else { 88 + return pht( 89 + 'This rule (of type "%s") is invalid.', 90 + $type); 91 + } 92 + } 93 + 94 + public function getRuleViewIcon($value) { 95 + return id(new PHUIIconView()) 96 + ->setIcon('fa-exclamation-triangle', 'red'); 60 97 } 61 98 62 99 }
+21
src/applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php
··· 77 77 ); 78 78 } 79 79 80 + public function getRuleViewLabel() { 81 + return pht('Change Status'); 82 + } 83 + 84 + public function getRuleViewDescription($value) { 85 + $status_name = ManiphestTaskStatus::getTaskStatusName($value); 86 + 87 + return pht( 88 + 'Change task status to %s.', 89 + phutil_tag('strong', array(), $status_name)); 90 + } 91 + 92 + public function getRuleViewIcon($value) { 93 + $status_icon = ManiphestTaskStatus::getStatusIcon($value); 94 + $status_color = ManiphestTaskStatus::getStatusColor($value); 95 + 96 + return id(new PHUIIconView()) 97 + ->setIcon($status_icon, $status_color); 98 + } 99 + 100 + 80 101 }
+3
src/applications/project/trigger/PhabricatorProjectTriggerRule.php
··· 39 39 40 40 abstract public function getDescription(); 41 41 abstract public function getSelectControlName(); 42 + abstract public function getRuleViewLabel(); 43 + abstract public function getRuleViewDescription($value); 44 + abstract public function getRuleViewIcon($value); 42 45 abstract protected function assertValidRuleValue($value); 43 46 abstract protected function newDropTransactions($object, $value); 44 47 abstract protected function newDropEffects($value);
+16
src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php
··· 58 58 return null; 59 59 } 60 60 61 + public function getRuleViewLabel() { 62 + return pht('Unknown Rule'); 63 + } 64 + 65 + public function getRuleViewDescription($value) { 66 + return pht( 67 + 'This is an unknown rule of type "%s". An administrator may have '. 68 + 'edited or removed an extension which implements this rule type.', 69 + $this->getRecord()->getType()); 70 + } 71 + 72 + public function getRuleViewIcon($value) { 73 + return id(new PHUIIconView()) 74 + ->setIcon('fa-question-circle', 'yellow'); 75 + } 76 + 61 77 }