@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 PhabricatorAuthContactNumberDisableController
4 extends PhabricatorAuthContactNumberController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $request->getViewer();
8 $id = $request->getURIData('id');
9
10 $sms_auth_factor = new PhabricatorSMSAuthFactor();
11 if ($sms_auth_factor->isSMSMailerConfigured()) {
12 $number = id(new PhabricatorAuthContactNumberQuery())
13 ->setViewer($viewer)
14 ->withIDs(array($id))
15 ->requireCapabilities(
16 array(
17 PhabricatorPolicyCapability::CAN_VIEW,
18 PhabricatorPolicyCapability::CAN_EDIT,
19 ))
20 ->executeOne();
21 }
22 if (!isset($number) || !$number) {
23 return new Aphront404Response();
24 }
25
26 $is_disable = ($request->getURIData('action') == 'disable');
27 $id = $number->getID();
28 $cancel_uri = $number->getURI();
29
30 if ($request->isFormOrHisecPost()) {
31 $xactions = array();
32
33 if ($is_disable) {
34 $new_status = PhabricatorAuthContactNumber::STATUS_DISABLED;
35 } else {
36 $new_status = PhabricatorAuthContactNumber::STATUS_ACTIVE;
37 }
38
39 $xactions[] = id(new PhabricatorAuthContactNumberTransaction())
40 ->setTransactionType(
41 PhabricatorAuthContactNumberStatusTransaction::TRANSACTIONTYPE)
42 ->setNewValue($new_status);
43
44 $editor = id(new PhabricatorAuthContactNumberEditor())
45 ->setActor($viewer)
46 ->setContentSourceFromRequest($request)
47 ->setContinueOnNoEffect(true)
48 ->setContinueOnMissingFields(true)
49 ->setCancelURI($cancel_uri);
50
51 try {
52 $editor->applyTransactions($number, $xactions);
53 } catch (PhabricatorApplicationTransactionValidationException $ex) {
54 // This happens when you enable a number which collides with another
55 // number.
56 return $this->newDialog()
57 ->setTitle(pht('Changing Status Failed'))
58 ->setValidationException($ex)
59 ->addCancelButton($cancel_uri);
60 }
61
62 return id(new AphrontRedirectResponse())->setURI($cancel_uri);
63 }
64
65 $number_display = phutil_tag(
66 'strong',
67 array(),
68 $number->getDisplayName());
69
70 if ($is_disable) {
71 $title = pht('Disable Contact Number');
72 $body = pht(
73 'Disable the contact number %s?',
74 $number_display);
75 $button = pht('Disable Number');
76 } else {
77 $title = pht('Enable Contact Number');
78 $body = pht(
79 'Enable the contact number %s?',
80 $number_display);
81 $button = pht('Enable Number');
82 }
83
84 return $this->newDialog()
85 ->setTitle($title)
86 ->appendParagraph($body)
87 ->addSubmitButton($button)
88 ->addCancelButton($cancel_uri);
89 }
90
91}