Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/packages/xaction/version/PhabricatorPackagesVersionPackageTransaction.php
12242 views
1
<?php
2
3
final class PhabricatorPackagesVersionPackageTransaction
4
extends PhabricatorPackagesVersionTransactionType {
5
6
const TRANSACTIONTYPE = 'packages.version.package';
7
8
public function generateOldValue($object) {
9
return $object->getPackagePHID();
10
}
11
12
public function applyInternalEffects($object, $value) {
13
$object->setPackagePHID($value);
14
}
15
16
public function validateTransactions($object, array $xactions) {
17
$errors = array();
18
19
if ($this->isEmptyTextTransaction($object->getPackagePHID(), $xactions)) {
20
$errors[] = $this->newRequiredError(
21
pht(
22
'You must select a package when creating a version'));
23
return $errors;
24
}
25
26
if (!$this->isNewObject()) {
27
foreach ($xactions as $xaction) {
28
$errors[] = $this->newInvalidError(
29
pht('Once a version is created, its package can not be changed.'),
30
$xaction);
31
}
32
}
33
34
$viewer = $this->getActor();
35
foreach ($xactions as $xaction) {
36
$package_phid = $xaction->getNewValue();
37
38
$package = id(new PhabricatorPackagesPackageQuery())
39
->setViewer($viewer)
40
->withPHIDs(array($package_phid))
41
->setRaisePolicyExceptions(false)
42
->requireCapabilities(
43
array(
44
PhabricatorPolicyCapability::CAN_VIEW,
45
PhabricatorPolicyCapability::CAN_EDIT,
46
))
47
->executeOne();
48
49
if (!$package) {
50
$errors[] = $this->newInvalidError(
51
pht(
52
'Package "%s" is invalid: the package must exist and you '.
53
'must have permission to edit it in order to create a new '.
54
'package.',
55
$package_phid),
56
$xaction);
57
continue;
58
}
59
60
$object->attachPackage($package);
61
}
62
63
return $errors;
64
}
65
66
}
67
68