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; | |||||
} | |||||
} |