@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
at recaptime-dev/main 91 lines 2.7 kB view raw
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}