Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/people/xaction/PhabricatorUserApproveTransaction.php
12256 views
1
<?php
2
3
final class PhabricatorUserApproveTransaction
4
extends PhabricatorUserTransactionType {
5
6
const TRANSACTIONTYPE = 'user.approve';
7
8
public function generateOldValue($object) {
9
return (bool)$object->getIsApproved();
10
}
11
12
public function generateNewValue($object, $value) {
13
return (bool)$value;
14
}
15
16
public function applyInternalEffects($object, $value) {
17
$object->setIsApproved((int)$value);
18
}
19
20
public function applyExternalEffects($object, $value) {
21
$user = $object;
22
23
$actor = $this->getActor();
24
$title = pht(
25
'%s Account "%s" Approved',
26
PlatformSymbols::getPlatformServerName(),
27
$user->getUsername());
28
29
$body = sprintf(
30
"%s\n\n %s\n\n",
31
pht(
32
'Your Phabricator account (%s) has been approved. You can '.
33
'login here:',
34
PlatformSymbols::getPlatformServerName(),
35
$user->getUsername()),
36
PhabricatorEnv::getProductionURI('/'));
37
38
$mail = id(new PhabricatorMetaMTAMail())
39
->addTos(array($user->getPHID()))
40
->setSubject('[FreeBSD] '.$title)
41
->setForceDelivery(true)
42
->setBody($body)
43
->saveAndSend();
44
}
45
46
public function getTitle() {
47
$new = $this->getNewValue();
48
if ($new) {
49
return pht(
50
'%s approved this user.',
51
$this->renderAuthor());
52
} else {
53
return pht(
54
'%s rejected this user.',
55
$this->renderAuthor());
56
}
57
}
58
59
public function shouldHideForFeed() {
60
return true;
61
}
62
63
public function validateTransactions($object, array $xactions) {
64
$actor = $this->getActor();
65
$errors = array();
66
67
foreach ($xactions as $xaction) {
68
$is_approved = (bool)$object->getIsApproved();
69
70
if ((bool)$xaction->getNewValue() === $is_approved) {
71
continue;
72
}
73
74
$is_admin = $actor->getIsAdmin();
75
$is_omnipotent = $actor->isOmnipotent();
76
77
if (!$is_admin && !$is_omnipotent) {
78
$errors[] = $this->newInvalidError(
79
pht('You must be an administrator to approve users.'));
80
}
81
}
82
83
return $errors;
84
}
85
86
public function getRequiredCapabilities(
87
$object,
88
PhabricatorApplicationTransaction $xaction) {
89
90
// Unlike normal user edits, approvals require admin permissions, which
91
// is enforced by validateTransactions().
92
93
return null;
94
}
95
}
96
97