Page MenuHomePhabricator

D20303.id48457.diff
No OneTemporary

D20303.id48457.diff

diff --git a/src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php b/src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php
--- a/src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php
+++ b/src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php
@@ -21,6 +21,7 @@
return new Aphront404Response();
}
+ $rules_view = $this->newRulesView($trigger);
$columns_view = $this->newColumnsView($trigger);
$title = $trigger->getObjectName();
@@ -40,6 +41,7 @@
->setCurtain($curtain)
->setMainColumn(
array(
+ $rules_view,
$columns_view,
$timeline,
));
@@ -139,6 +141,48 @@
->setTable($table_view);
}
+ private function newRulesView(PhabricatorProjectTrigger $trigger) {
+ $viewer = $this->getViewer();
+ $rules = $trigger->getTriggerRules();
+
+ $rows = array();
+ foreach ($rules as $rule) {
+ $value = $rule->getRecord()->getValue();
+
+ $rows[] = array(
+ $rule->getRuleViewIcon($value),
+ $rule->getRuleViewLabel(),
+ $rule->getRuleViewDescription($value),
+ );
+ }
+
+ $table_view = id(new AphrontTableView($rows))
+ ->setNoDataString(pht('This trigger has no rules.'))
+ ->setHeaders(
+ array(
+ null,
+ pht('Rule'),
+ pht('Action'),
+ ))
+ ->setColumnClasses(
+ array(
+ null,
+ 'pri',
+ 'wide',
+ ));
+
+ $header_view = id(new PHUIHeaderView())
+ ->setHeader(pht('Trigger Rules'))
+ ->setSubheader(
+ pht(
+ 'When a card is dropped into a column that uses this trigger, '.
+ 'these actions will be taken.'));
+
+ return id(new PHUIObjectBoxView())
+ ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
+ ->setHeader($header_view)
+ ->setTable($table_view);
+ }
private function newCurtain(PhabricatorProjectTrigger $trigger) {
$viewer = $this->getViewer();
diff --git a/src/applications/project/storage/PhabricatorProjectTrigger.php b/src/applications/project/storage/PhabricatorProjectTrigger.php
--- a/src/applications/project/storage/PhabricatorProjectTrigger.php
+++ b/src/applications/project/storage/PhabricatorProjectTrigger.php
@@ -174,7 +174,8 @@
}
$rule = id(new PhabricatorProjectTriggerInvalidRule())
- ->setRecord($record);
+ ->setRecord($record)
+ ->setException($ex);
}
$trigger_rules[] = $rule;
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php
@@ -5,6 +5,17 @@
const TRIGGERTYPE = 'invalid';
+ private $exception;
+
+ public function setException(Exception $exception) {
+ $this->exception = $exception;
+ return $this;
+ }
+
+ public function getException() {
+ return $this->exception;
+ }
+
public function getDescription() {
return pht(
'Invalid rule (of type "%s").',
@@ -59,4 +70,30 @@
return null;
}
+ public function getRuleViewLabel() {
+ return pht('Invalid Rule');
+ }
+
+ public function getRuleViewDescription($value) {
+ $record = $this->getRecord();
+ $type = $record->getType();
+
+ $exception = $this->getException();
+ if ($exception) {
+ return pht(
+ 'This rule (of type "%s") is invalid: %s',
+ $type,
+ $exception->getMessage());
+ } else {
+ return pht(
+ 'This rule (of type "%s") is invalid.',
+ $type);
+ }
+ }
+
+ public function getRuleViewIcon($value) {
+ return id(new PHUIIconView())
+ ->setIcon('fa-exclamation-triangle', 'red');
+ }
+
}
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerRule.php
@@ -39,6 +39,9 @@
abstract public function getDescription();
abstract public function getSelectControlName();
+ abstract public function getRuleViewLabel();
+ abstract public function getRuleViewDescription($value);
+ abstract public function getRuleViewIcon($value);
abstract protected function assertValidRuleValue($value);
abstract protected function newDropTransactions($object, $value);
abstract protected function newDropEffects($value);
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerStatusRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerStatusRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerStatusRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerStatusRule.php
@@ -77,4 +77,25 @@
);
}
+ public function getRuleViewLabel() {
+ return pht('Change Status');
+ }
+
+ public function getRuleViewDescription($value) {
+ $status_name = ManiphestTaskStatus::getTaskStatusName($value);
+
+ return pht(
+ 'Change task status to %s.',
+ phutil_tag('strong', array(), $status_name));
+ }
+
+ public function getRuleViewIcon($value) {
+ $status_icon = ManiphestTaskStatus::getStatusIcon($value);
+ $status_color = ManiphestTaskStatus::getStatusColor($value);
+
+ return id(new PHUIIconView())
+ ->setIcon($status_icon, $status_color);
+ }
+
+
}
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php
@@ -58,4 +58,20 @@
return null;
}
+ public function getRuleViewLabel() {
+ return pht('Unknown Rule');
+ }
+
+ public function getRuleViewDescription($value) {
+ return pht(
+ 'This is an unknown rule of type "%s". An administrator may have '.
+ 'edited or removed an extension which implements this rule type.',
+ $this->getRecord()->getType());
+ }
+
+ public function getRuleViewIcon($value) {
+ return id(new PHUIIconView())
+ ->setIcon('fa-question-circle', 'yellow');
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
Thu, May 9, 9:18 PM (1 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6277790
Default Alt Text
D20303.id48457.diff (6 KB)

Event Timeline