Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/badges/controller/PhabricatorBadgesEditRecipientsController.php
12256 views
1
<?php
2
3
final class PhabricatorBadgesEditRecipientsController
4
extends PhabricatorBadgesController {
5
6
public function handleRequest(AphrontRequest $request) {
7
$viewer = $request->getViewer();
8
$id = $request->getURIData('id');
9
$xactions = array();
10
11
$badge = id(new PhabricatorBadgesQuery())
12
->setViewer($viewer)
13
->withIDs(array($id))
14
->requireCapabilities(
15
array(
16
PhabricatorPolicyCapability::CAN_EDIT,
17
PhabricatorPolicyCapability::CAN_VIEW,
18
))
19
->executeOne();
20
if (!$badge) {
21
return new Aphront404Response();
22
}
23
24
$view_uri = $this->getApplicationURI('recipients/'.$badge->getID().'/');
25
26
if ($request->isFormPost()) {
27
$award_phids = array();
28
29
$add_recipients = $request->getArr('phids');
30
if ($add_recipients) {
31
foreach ($add_recipients as $phid) {
32
$award_phids[] = $phid;
33
}
34
}
35
36
$xactions[] = id(new PhabricatorBadgesTransaction())
37
->setTransactionType(
38
PhabricatorBadgesBadgeAwardTransaction::TRANSACTIONTYPE)
39
->setNewValue($award_phids);
40
41
$editor = id(new PhabricatorBadgesEditor())
42
->setActor($viewer)
43
->setContentSourceFromRequest($request)
44
->setContinueOnNoEffect(true)
45
->setContinueOnMissingFields(true)
46
->applyTransactions($badge, $xactions);
47
48
return id(new AphrontRedirectResponse())
49
->setURI($view_uri);
50
}
51
52
$can_edit = PhabricatorPolicyFilter::hasCapability(
53
$viewer,
54
$badge,
55
PhabricatorPolicyCapability::CAN_EDIT);
56
57
$form_box = null;
58
$title = pht('Add Recipient');
59
if ($can_edit) {
60
$header_name = pht('Edit Recipients');
61
62
$form = new AphrontFormView();
63
$form
64
->setUser($viewer)
65
->setFullWidth(true)
66
->appendControl(
67
id(new AphrontFormTokenizerControl())
68
->setName('phids')
69
->setLabel(pht('Recipients'))
70
->setDatasource(new PhabricatorPeopleDatasource()));
71
}
72
73
$dialog = id(new AphrontDialogView())
74
->setUser($viewer)
75
->setTitle(pht('Add Recipients'))
76
->appendForm($form)
77
->addCancelButton($view_uri)
78
->addSubmitButton(pht('Add Recipients'));
79
80
return $dialog;
81
}
82
83
}
84
85