Differential D17020 Diff 41522 src/applications/release/xaction/ReleaseChangeRequestReleaseTransaction.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/release/xaction/ReleaseChangeRequestReleaseTransaction.php
- This file was added.
| <?php | |||||
| class ReleaseChangeRequestReleaseTransaction | |||||
| extends ReleaseChangeRequestTransactionType { | |||||
| const TRANSACTIONTYPE = 'change:release'; | |||||
| public function generateOldValue($object) { | |||||
| return $object->getReleasePHID(); | |||||
| } | |||||
| public function applyInternalEffects($object, $value) { | |||||
| $object->setReleasePHID($value); | |||||
| } | |||||
| public function applyExternalEffects($object, $value) { | |||||
| $release_phid = $value; | |||||
| $actor = $this->getActor(); | |||||
| $release = id(new ReleaseReleaseQuery()) | |||||
| ->setViewer($actor) | |||||
| ->withPHIDs(array($release_phid)) | |||||
| ->executeOne(); | |||||
| $sub_xactions = array( | |||||
| id(new ReleaseReleaseTransaction()) | |||||
| ->setTransactionType( | |||||
| ReleaseReleaseChangeRequestAddedTransaction::TRANSACTIONTYPE) | |||||
| ->setNewValue($object->getPHID()), | |||||
| ); | |||||
| $sub_editor = id(new ReleaseReleaseEditor()) | |||||
| ->setActor($actor) | |||||
| ->setContentSource($this->getEditor()->getContentSource()) | |||||
| ->setContinueOnNoEffect(true); | |||||
| $sub_editor->applyTransactions($release, $sub_xactions); | |||||
| } | |||||
| public function shouldHide() { | |||||
| return true; | |||||
| } | |||||
| public function validateTransactions($object, array $xactions) { | |||||
| $errors = $this->validateRequiredFieldTransactions( | |||||
| $object, | |||||
| $xactions, | |||||
| pht('Release')); | |||||
| $viewer = $this->getActor(); | |||||
| foreach ($xactions as $xaction) { | |||||
| $release_phid = $xaction->getNewValue(); | |||||
| $target_object = id(new ReleaseReleaseQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withPHIDs(array($release_phid)) | |||||
| ->setRaisePolicyExceptions(false) | |||||
| ->requireCapabilities( | |||||
| array( | |||||
| PhabricatorPolicyCapability::CAN_VIEW, | |||||
| )) | |||||
| ->executeOne(); | |||||
| if (!$target_object) { | |||||
| $errors[] = $this->newInvalidError( | |||||
| pht( | |||||
| 'Release "%s" is invalid: the release must exist and you '. | |||||
| 'must have permission to view it in order to create a new Change'. | |||||
| 'Request.', | |||||
| $release_phid), | |||||
| $xaction); | |||||
| } | |||||
| } | |||||
| return $errors; | |||||
| } | |||||
| } | |||||