Path: blob/master/src/applications/harbormaster/xaction/build/HarbormasterBuildMessageTransaction.php
12264 views
<?php12abstract class HarbormasterBuildMessageTransaction3extends HarbormasterBuildTransactionType {45final public function getHarbormasterBuildMessageType() {6return $this->getPhobjectClassConstant('MESSAGETYPE');7}89abstract public function getHarbormasterBuildMessageName();10abstract public function getHarbormasterBuildMessageDescription();11abstract public function getHarbormasterBuildableMessageName();12abstract public function getHarbormasterBuildableMessageEffect();1314abstract public function newConfirmPromptTitle();15abstract public function newConfirmPromptBody();1617abstract public function newBuildableConfirmPromptTitle(18array $builds,19array $sendable);2021abstract public function newBuildableConfirmPromptBody(22array $builds,23array $sendable);2425public function newBuildableConfirmPromptWarnings(26array $builds,27array $sendable) {28return array();29}3031final public function generateOldValue($object) {32return null;33}3435final public function getTransactionTypeForConduit($xaction) {36return 'message';37}3839final public function getFieldValuesForConduit($xaction, $data) {40return array(41'type' => $xaction->getNewValue(),42);43}4445final public static function getAllMessages() {46$message_xactions = id(new PhutilClassMapQuery())47->setAncestorClass(__CLASS__)48->execute();4950return $message_xactions;51}5253final public static function getTransactionObjectForMessageType(54$message_type) {55$message_xactions = self::getAllMessages();5657foreach ($message_xactions as $message_xaction) {58$xaction_type = $message_xaction->getHarbormasterBuildMessageType();59if ($xaction_type === $message_type) {60return $message_xaction;61}62}6364return null;65}6667final public static function getTransactionTypeForMessageType($message_type) {68$message_xaction = self::getTransactionObjectForMessageType($message_type);6970if ($message_xaction) {71return $message_xaction->getTransactionTypeConstant();72}7374return null;75}7677final public function getTransactionHasEffect($object, $old, $new) {78return $this->canApplyMessage($this->getActor(), $object);79}8081final public function canApplyMessage(82PhabricatorUser $viewer,83HarbormasterBuild $build) {8485try {86$this->assertCanApplyMessage($viewer, $build);87return true;88} catch (HarbormasterMessageException $ex) {89return false;90}91}9293final public function canSendMessage(94PhabricatorUser $viewer,95HarbormasterBuild $build) {9697try {98$this->assertCanSendMessage($viewer, $build);99return true;100} catch (HarbormasterMessageException $ex) {101return false;102}103}104105final public function assertCanApplyMessage(106PhabricatorUser $viewer,107HarbormasterBuild $build) {108$this->newCanApplyMessageAssertion($viewer, $build);109}110111final public function assertCanSendMessage(112PhabricatorUser $viewer,113HarbormasterBuild $build) {114$plan = $build->getBuildPlan();115116// See T13526. Users without permission to access the build plan can117// currently end up here with no "BuildPlan" object.118if (!$plan) {119throw new HarbormasterMessageException(120pht('No Build Plan Permission'),121pht(122'You can not issue this command because you do not have '.123'permission to access the build plan for this build.'));124}125126// Issuing these commands requires that you be able to edit the build, to127// prevent enemy engineers from sabotaging your builds. See T9614.128if (!$plan->canRunWithoutEditCapability()) {129try {130PhabricatorPolicyFilter::requireCapability(131$viewer,132$plan,133PhabricatorPolicyCapability::CAN_EDIT);134} catch (PhabricatorPolicyException $ex) {135throw new HarbormasterMessageException(136pht('Insufficent Build Plan Permission'),137pht(138'The build plan for this build is configured to prevent '.139'users who can not edit it from issuing commands to the '.140'build, and you do not have permission to edit the build '.141'plan.'));142}143}144145$this->newCanSendMessageAssertion($viewer, $build);146$this->assertCanApplyMessage($viewer, $build);147}148149abstract protected function newCanSendMessageAssertion(150PhabricatorUser $viewer,151HarbormasterBuild $build);152153abstract protected function newCanApplyMessageAssertion(154PhabricatorUser $viewer,155HarbormasterBuild $build);156157}158159160