diff --git a/src/applications/differential/command/DifferentialActionEmailCommand.php b/src/applications/differential/command/DifferentialActionEmailCommand.php --- a/src/applications/differential/command/DifferentialActionEmailCommand.php +++ b/src/applications/differential/command/DifferentialActionEmailCommand.php @@ -55,65 +55,28 @@ } public function getCommandObjects() { - $actions = array( - DifferentialAction::ACTION_REJECT => 'request', - DifferentialAction::ACTION_ABANDON => 'abandon', - DifferentialAction::ACTION_RECLAIM => 'reclaim', - DifferentialAction::ACTION_RESIGN => 'resign', - DifferentialAction::ACTION_RETHINK => 'planchanges', - DifferentialAction::ACTION_CLAIM => 'commandeer', - ); - - if (PhabricatorEnv::getEnvConfig('differential.enable-email-accept')) { - $actions[DifferentialAction::ACTION_ACCEPT] = 'accept'; - } - - $aliases = array( - DifferentialAction::ACTION_REJECT => array('reject'), - DifferentialAction::ACTION_CLAIM => array('claim'), - DifferentialAction::ACTION_RETHINK => array('rethink'), - ); - - $summaries = array( - DifferentialAction::ACTION_REJECT => - pht('Request changes to a revision.'), - DifferentialAction::ACTION_ABANDON => - pht('Abandon a revision.'), - DifferentialAction::ACTION_RECLAIM => - pht('Reclaim a revision.'), - DifferentialAction::ACTION_RESIGN => - pht('Resign from a revision.'), - DifferentialAction::ACTION_RETHINK => - pht('Plan changes to a revision.'), - DifferentialAction::ACTION_CLAIM => - pht('Commandeer a revision.'), - DifferentialAction::ACTION_ACCEPT => - pht('Accept a revision.'), - ); - - $descriptions = array( - - ); + $actions = DifferentialRevisionActionTransaction::loadAllActions(); + $actions = msort($actions, 'getRevisionActionOrderVector'); $objects = array(); - foreach ($actions as $action => $keyword) { - $object = id(new DifferentialActionEmailCommand()) - ->setCommand($keyword) - ->setAction($action) - ->setCommandSummary($summaries[$action]); - - if (isset($aliases[$action])) { - $object->setCommandAliases($aliases[$action]); + foreach ($actions as $action) { + $keyword = $action->getCommandKeyword(); + if ($keyword === null) { + continue; } - if (isset($descriptions[$action])) { - $object->setCommandDescription($descriptions[$action]); - } + $aliases = $action->getCommandAliases(); + $summary = $action->getCommandSummary(); + + $object = id(new self()) + ->setCommand($keyword) + ->setCommandAliases($aliases) + ->setAction($action->getTransactionTypeConstant()) + ->setCommandSummary($summary); $objects[] = $object; } - return $objects; } @@ -131,8 +94,8 @@ $xactions = array(); $xactions[] = $object->getApplicationTransactionTemplate() - ->setTransactionType(DifferentialTransaction::TYPE_ACTION) - ->setNewValue($this->getAction()); + ->setTransactionType($this->getAction()) + ->setNewValue(true); return $xactions; } diff --git a/src/applications/differential/xaction/DifferentialRevisionAbandonTransaction.php b/src/applications/differential/xaction/DifferentialRevisionAbandonTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionAbandonTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionAbandonTransaction.php @@ -26,6 +26,18 @@ return 500; } + public function getCommandKeyword() { + return 'abandon'; + } + + public function getCommandAliases() { + return array(); + } + + public function getCommandSummary() { + return pht('Abandon a revision.'); + } + public function generateOldValue($object) { return $object->isAbandoned(); } diff --git a/src/applications/differential/xaction/DifferentialRevisionAcceptTransaction.php b/src/applications/differential/xaction/DifferentialRevisionAcceptTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionAcceptTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionAcceptTransaction.php @@ -26,6 +26,24 @@ return 500; } + public function getCommandKeyword() { + $accept_key = 'differential.enable-email-accept'; + $allow_email_accept = PhabricatorEnv::getEnvConfig($accept_key); + if (!$allow_email_accept) { + return null; + } + + return 'accept'; + } + + public function getCommandAliases() { + return array(); + } + + public function getCommandSummary() { + return pht('Accept a revision.'); + } + public function generateOldValue($object) { $actor = $this->getActor(); return $this->isViewerAcceptingReviewer($object, $actor); diff --git a/src/applications/differential/xaction/DifferentialRevisionActionTransaction.php b/src/applications/differential/xaction/DifferentialRevisionActionTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionActionTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionActionTransaction.php @@ -19,6 +19,18 @@ abstract protected function validateAction($object, PhabricatorUser $viewer); abstract protected function getRevisionActionLabel(); + public function getCommandKeyword() { + return null; + } + + public function getCommandAliases() { + return array(); + } + + public function getCommandSummary() { + return null; + } + protected function getRevisionActionOrder() { return 1000; } diff --git a/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php b/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php @@ -26,6 +26,20 @@ return 700; } + public function getCommandKeyword() { + return 'commandeer'; + } + + public function getCommandAliases() { + return array( + 'claim', + ); + } + + public function getCommandSummary() { + return pht('Commadeer a revision.'); + } + public function generateOldValue($object) { return $object->getAuthorPHID(); } diff --git a/src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php b/src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php @@ -27,6 +27,20 @@ return 200; } + public function getCommandKeyword() { + return 'planchanges'; + } + + public function getCommandAliases() { + return array( + 'rethink', + ); + } + + public function getCommandSummary() { + return pht('Plan changes to a revision.'); + } + public function generateOldValue($object) { $status_planned = ArcanistDifferentialRevisionStatus::CHANGES_PLANNED; return ($object->getStatus() == $status_planned); diff --git a/src/applications/differential/xaction/DifferentialRevisionReclaimTransaction.php b/src/applications/differential/xaction/DifferentialRevisionReclaimTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionReclaimTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionReclaimTransaction.php @@ -26,6 +26,18 @@ return 600; } + public function getCommandKeyword() { + return 'reclaim'; + } + + public function getCommandAliases() { + return array(); + } + + public function getCommandSummary() { + return pht('Reclaim a revision.'); + } + public function generateOldValue($object) { return !$object->isAbandoned(); } diff --git a/src/applications/differential/xaction/DifferentialRevisionRejectTransaction.php b/src/applications/differential/xaction/DifferentialRevisionRejectTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionRejectTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionRejectTransaction.php @@ -26,6 +26,20 @@ return 600; } + public function getCommandKeyword() { + return 'request'; + } + + public function getCommandAliases() { + return array( + 'reject', + ); + } + + public function getCommandSummary() { + return pht('Request changes to a revision.'); + } + public function generateOldValue($object) { $actor = $this->getActor(); return $this->isViewerRejectingReviewer($object, $actor); diff --git a/src/applications/differential/xaction/DifferentialRevisionResignTransaction.php b/src/applications/differential/xaction/DifferentialRevisionResignTransaction.php --- a/src/applications/differential/xaction/DifferentialRevisionResignTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionResignTransaction.php @@ -26,6 +26,18 @@ return 700; } + public function getCommandKeyword() { + return 'resign'; + } + + public function getCommandAliases() { + return array(); + } + + public function getCommandSummary() { + return pht('Resign from a revision.'); + } + public function generateOldValue($object) { $actor = $this->getActor(); return !$this->isViewerAnyReviewer($object, $actor);