diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1321,6 +1321,7 @@ 'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php', 'ManiphestTaskStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php', 'ManiphestTaskStatusFunctionDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusFunctionDatasource.php', + 'ManiphestTaskStatusHeraldAction' => 'applications/maniphest/herald/ManiphestTaskStatusHeraldAction.php', 'ManiphestTaskStatusHeraldField' => 'applications/maniphest/herald/ManiphestTaskStatusHeraldField.php', 'ManiphestTaskStatusTestCase' => 'applications/maniphest/constants/__tests__/ManiphestTaskStatusTestCase.php', 'ManiphestTaskTestCase' => 'applications/maniphest/__tests__/ManiphestTaskTestCase.php', @@ -5313,6 +5314,7 @@ 'ManiphestTaskStatus' => 'ManiphestConstants', 'ManiphestTaskStatusDatasource' => 'PhabricatorTypeaheadDatasource', 'ManiphestTaskStatusFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'ManiphestTaskStatusHeraldAction' => 'HeraldAction', 'ManiphestTaskStatusHeraldField' => 'ManiphestTaskHeraldField', 'ManiphestTaskStatusTestCase' => 'PhabricatorTestCase', 'ManiphestTaskTestCase' => 'PhabricatorTestCase', diff --git a/src/applications/maniphest/herald/ManiphestTaskStatusHeraldAction.php b/src/applications/maniphest/herald/ManiphestTaskStatusHeraldAction.php new file mode 100644 --- /dev/null +++ b/src/applications/maniphest/herald/ManiphestTaskStatusHeraldAction.php @@ -0,0 +1,87 @@ +getTarget()); + + if (!$status) { + $this->logEffect(self::DO_STANDARD_EMPTY); + return; + } + + $adapter = $this->getAdapter(); + $object = $adapter->getObject(); + $current = $object->getStatus(); + + if ($current == $status) { + $this->logEffect(self::DO_STANDARD_NO_EFFECT, $status); + return; + } + + $xaction = $adapter->newTransaction() + ->setTransactionType(ManiphestTransaction::TYPE_STATUS) + ->setNewValue($status); + + $adapter->queueTransaction($xaction); + $this->logEffect(self::DO_STATUS, $status); + } + + public function getHeraldActionStandardType() { + return self::STANDARD_PHID_LIST; + } + + public function renderActionDescription($value) { + $status = head($value); + $name = ManiphestTaskStatus::getTaskStatusName($status); + return pht('Change status to: %s.', $name); + } + + protected function getDatasource() { + return new ManiphestTaskStatusDatasource(); + } + + protected function getDatasourceValueMap() { + return ManiphestTaskStatus::getTaskStatusMap(); + } + + protected function getActionEffectMap() { + return array( + self::DO_STATUS => array( + 'icon' => 'fa-pencil', + 'color' => 'green', + 'name' => pht('Changed Task Status'), + ), + ); + } + + protected function renderActionEffectDescription($type, $data) { + switch ($type) { + case self::DO_STATUS: + return pht( + 'Changed task status to "%s".', + ManiphestTaskStatus::getTaskStatusName($data)); + } + } + +}