@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 AlmanacBindingDisableController
4 extends AlmanacServiceController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $request->getViewer();
8
9 $id = $request->getURIData('id');
10 $binding = id(new AlmanacBindingQuery())
11 ->setViewer($viewer)
12 ->withIDs(array($id))
13 ->requireCapabilities(
14 array(
15 PhabricatorPolicyCapability::CAN_VIEW,
16 PhabricatorPolicyCapability::CAN_EDIT,
17 ))
18 ->executeOne();
19 if (!$binding) {
20 return new Aphront404Response();
21 }
22
23 $id = $binding->getID();
24 $is_disable = !$binding->getIsDisabled();
25 $done_uri = $binding->getURI();
26
27 if ($is_disable) {
28 $disable_title = pht('Disable Binding');
29 $disable_body = pht('Disable this binding?');
30 $disable_button = pht('Disable Binding');
31
32 $v_disable = 1;
33 } else {
34 $disable_title = pht('Enable Binding');
35 $disable_body = pht('Enable this binding?');
36 $disable_button = pht('Enable Binding');
37
38 $v_disable = 0;
39 }
40
41
42 if ($request->isFormPost()) {
43 $type_disable = AlmanacBindingDisableTransaction::TRANSACTIONTYPE;
44
45 $xactions = array();
46
47 $xactions[] = id(new AlmanacBindingTransaction())
48 ->setTransactionType($type_disable)
49 ->setNewValue($v_disable);
50
51 $editor = id(new AlmanacBindingEditor())
52 ->setActor($viewer)
53 ->setContentSourceFromRequest($request)
54 ->setContinueOnNoEffect(true)
55 ->setContinueOnMissingFields(true);
56
57 $editor->applyTransactions($binding, $xactions);
58
59 return id(new AphrontRedirectResponse())->setURI($done_uri);
60 }
61
62 return $this->newDialog()
63 ->setTitle($disable_title)
64 ->appendParagraph($disable_body)
65 ->addSubmitButton($disable_button)
66 ->addCancelButton($done_uri);
67 }
68
69}