Path: blob/master/src/applications/diffusion/xaction/DiffusionCommitActionTransaction.php
12241 views
<?php12abstract class DiffusionCommitActionTransaction3extends DiffusionCommitTransactionType {45final public function getCommitActionKey() {6return $this->getPhobjectClassConstant('ACTIONKEY', 32);7}89public function isActionAvailable($object, PhabricatorUser $viewer) {10try {11$this->validateAction($object, $viewer);12return true;13} catch (Exception $ex) {14return false;15}16}1718abstract protected function validateAction($object, PhabricatorUser $viewer);19abstract protected function getCommitActionLabel();2021public function getCommandKeyword() {22return null;23}2425public function getCommandAliases() {26return array();27}2829public function getCommandSummary() {30return null;31}3233protected function getCommitActionOrder() {34return 1000;35}3637public function getCommitActionOrderVector() {38return id(new PhutilSortVector())39->addInt($this->getCommitActionOrder());40}4142protected function getCommitActionGroupKey() {43return DiffusionCommitEditEngine::ACTIONGROUP_COMMIT;44}4546protected function getCommitActionDescription() {47return null;48}4950public static function loadAllActions() {51return id(new PhutilClassMapQuery())52->setAncestorClass(__CLASS__)53->setUniqueMethod('getCommitActionKey')54->execute();55}5657protected function isViewerCommitAuthor(58PhabricatorRepositoryCommit $commit,59PhabricatorUser $viewer) {6061if (!$viewer->getPHID()) {62return false;63}6465return ($viewer->getPHID() === $commit->getEffectiveAuthorPHID());66}6768public function newEditField(69PhabricatorRepositoryCommit $commit,70PhabricatorUser $viewer) {7172// Actions in the "audit" group, like "Accept Commit", do not require73// that the actor be able to edit the commit.74$group_audit = DiffusionCommitEditEngine::ACTIONGROUP_AUDIT;75$is_audit = ($this->getCommitActionGroupKey() == $group_audit);7677$field = id(new PhabricatorApplyEditField())78->setKey($this->getCommitActionKey())79->setTransactionType($this->getTransactionTypeConstant())80->setCanApplyWithoutEditCapability($is_audit)81->setValue(true);8283if ($this->isActionAvailable($commit, $viewer)) {84$label = $this->getCommitActionLabel();85if ($label !== null) {86$field->setCommentActionLabel($label);8788$description = $this->getCommitActionDescription();89$field->setActionDescription($description);9091$group_key = $this->getCommitActionGroupKey();92$field->setCommentActionGroupKey($group_key);9394$field->setActionConflictKey('commit.action');95}96}9798return $field;99}100101public function validateTransactions($object, array $xactions) {102$errors = array();103$actor = $this->getActor();104105$action_exception = null;106try {107$this->validateAction($object, $actor);108} catch (Exception $ex) {109$action_exception = $ex;110}111112foreach ($xactions as $xaction) {113if ($action_exception) {114$errors[] = $this->newInvalidError(115$action_exception->getMessage(),116$xaction);117}118}119120return $errors;121}122123}124125126