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