@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<?php
2
3final class PhabricatorProjectTriggerManiphestStatusRule
4 extends PhabricatorProjectTriggerRule {
5
6 const TRIGGERTYPE = 'task.status';
7
8 public function getSelectControlName() {
9 return pht('Change status to');
10 }
11
12 protected function assertValidRuleRecordFormat($value) {
13 if (!is_string($value)) {
14 throw new Exception(
15 pht(
16 'Status rule value should be a string, but is not (value is "%s").',
17 phutil_describe_type($value)));
18 }
19 }
20
21 protected function assertValidRuleRecordValue($value) {
22 $map = ManiphestTaskStatus::getTaskStatusMap();
23 if (!isset($map[$value])) {
24 throw new Exception(
25 pht(
26 'Task status value ("%s") is not a valid task status. '.
27 'Valid statues are: %s.',
28 $value,
29 implode(', ', array_keys($map))));
30 }
31 }
32
33 protected function newDropTransactions($object, $value) {
34 return array(
35 $this->newTransaction()
36 ->setTransactionType(ManiphestTaskStatusTransaction::TRANSACTIONTYPE)
37 ->setNewValue($value),
38 );
39 }
40
41 protected function newDropEffects($value) {
42 $status_name = ManiphestTaskStatus::getTaskStatusName($value);
43 $status_icon = ManiphestTaskStatus::getStatusIcon($value);
44 $status_color = ManiphestTaskStatus::getStatusColor($value);
45
46 $content = pht(
47 'Change status to %s.',
48 phutil_tag('strong', array(), $status_name));
49
50 return array(
51 $this->newEffect()
52 ->setIcon($status_icon)
53 ->setColor($status_color)
54 ->addCondition('status', '!=', $value)
55 ->setContent($content),
56 );
57 }
58
59 protected function getDefaultValue() {
60 return ManiphestTaskStatus::getDefaultClosedStatus();
61 }
62
63 protected function getPHUIXControlType() {
64 return 'select';
65 }
66
67 protected function getPHUIXControlSpecification() {
68 $map = ManiphestTaskStatus::getTaskStatusMap();
69
70 return array(
71 'options' => $map,
72 'order' => array_keys($map),
73 );
74 }
75
76 public function getRuleViewLabel() {
77 return pht('Change Status');
78 }
79
80 public function getRuleViewDescription($value) {
81 $status_name = ManiphestTaskStatus::getTaskStatusName($value);
82
83 return pht(
84 'Change task status to %s.',
85 phutil_tag('strong', array(), $status_name));
86 }
87
88 public function getRuleViewIcon($value) {
89 $status_icon = ManiphestTaskStatus::getStatusIcon($value);
90 $status_color = ManiphestTaskStatus::getStatusColor($value);
91
92 return id(new PHUIIconView())
93 ->setIcon($status_icon, $status_color);
94 }
95
96
97}