@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final 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 $errors = array();
11 $e_recipient = true;
12
13 $badge = id(new PhabricatorBadgesQuery())
14 ->setViewer($viewer)
15 ->withIDs(array($id))
16 ->requireCapabilities(
17 array(
18 PhabricatorPolicyCapability::CAN_EDIT,
19 PhabricatorPolicyCapability::CAN_VIEW,
20 ))
21 ->executeOne();
22 if (!$badge) {
23 return new Aphront404Response();
24 }
25
26 $view_uri = $this->getApplicationURI('recipients/'.$badge->getID().'/');
27
28 if ($request->isFormPost()) {
29 $award_phids = array();
30
31 $add_recipients = $request->getArr('phids');
32 if ($add_recipients) {
33 foreach ($add_recipients as $phid) {
34 $award_phids[$phid] = $phid;
35 }
36 } else {
37 $errors[] = pht('Recipient name is required.');
38 $e_recipient = pht('Required');
39 }
40
41 if (!$errors) {
42 $xactions[] = id(new PhabricatorBadgesTransaction())
43 ->setTransactionType(
44 PhabricatorBadgesBadgeAwardTransaction::TRANSACTIONTYPE)
45 ->setNewValue($award_phids);
46
47 $editor = id(new PhabricatorBadgesEditor())
48 ->setActor($viewer)
49 ->setContentSourceFromRequest($request)
50 ->setContinueOnNoEffect(true)
51 ->setContinueOnMissingFields(true)
52 ->applyTransactions($badge, $xactions);
53
54 return id(new AphrontRedirectResponse())
55 ->setURI($view_uri);
56 }
57 }
58
59 $form = new AphrontFormView();
60 $form
61 ->setUser($viewer)
62 ->setFullWidth(true)
63 ->appendControl(
64 id(new AphrontFormTokenizerControl())
65 ->setName('phids')
66 ->setLabel(pht('Recipients'))
67 ->setError($e_recipient)
68 ->setDatasource(new PhabricatorPeopleDatasource()));
69
70 $dialog = id(new AphrontDialogView())
71 ->setUser($viewer)
72 ->setTitle(pht('Add Recipients'))
73 ->appendForm($form)
74 ->addCancelButton($view_uri)
75 ->addSubmitButton(pht('Add Recipients'));
76
77 return $dialog;
78 }
79
80}