@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 142 lines 4.1 kB view raw
1<?php 2 3final class PhabricatorAuthContactNumberViewController 4 extends PhabricatorAuthContactNumberController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $this->getViewer(); 8 9 $sms_auth_factor = new PhabricatorSMSAuthFactor(); 10 if ($sms_auth_factor->isSMSMailerConfigured()) { 11 $number = id(new PhabricatorAuthContactNumberQuery()) 12 ->setViewer($viewer) 13 ->withIDs(array($request->getURIData('id'))) 14 ->executeOne(); 15 } 16 if (!isset($number) || !$number) { 17 return new Aphront404Response(); 18 } 19 20 $crumbs = $this->buildApplicationCrumbs() 21 ->addTextCrumb($number->getObjectName()) 22 ->setBorder(true); 23 24 $header = $this->buildHeaderView($number); 25 $properties = $this->buildPropertiesView($number); 26 $curtain = $this->buildCurtain($number); 27 28 $timeline = $this->buildTransactionTimeline( 29 $number, 30 new PhabricatorAuthContactNumberTransactionQuery()); 31 $timeline->setShouldTerminate(true); 32 33 $view = id(new PHUITwoColumnView()) 34 ->setHeader($header) 35 ->setCurtain($curtain) 36 ->setMainColumn( 37 array( 38 $timeline, 39 )) 40 ->addPropertySection(pht('Details'), $properties); 41 42 return $this->newPage() 43 ->setTitle($number->getDisplayName()) 44 ->setCrumbs($crumbs) 45 ->setPageObjectPHIDs( 46 array( 47 $number->getPHID(), 48 )) 49 ->appendChild($view); 50 } 51 52 private function buildHeaderView(PhabricatorAuthContactNumber $number) { 53 $viewer = $this->getViewer(); 54 55 $view = id(new PHUIHeaderView()) 56 ->setViewer($viewer) 57 ->setHeader($number->getObjectName()) 58 ->setPolicyObject($number); 59 60 if ($number->isDisabled()) { 61 $view->setStatus('fa-ban', 'red', pht('Disabled')); 62 } else if ($number->getIsPrimary()) { 63 $view->setStatus('fa-certificate', 'blue', pht('Primary')); 64 } 65 66 return $view; 67 } 68 69 private function buildPropertiesView( 70 PhabricatorAuthContactNumber $number) { 71 $viewer = $this->getViewer(); 72 73 $view = id(new PHUIPropertyListView()) 74 ->setViewer($viewer); 75 76 $view->addProperty( 77 pht('Owner'), 78 $viewer->renderHandle($number->getObjectPHID())); 79 80 $view->addProperty(pht('Contact Number'), $number->getDisplayName()); 81 82 return $view; 83 } 84 85 private function buildCurtain(PhabricatorAuthContactNumber $number) { 86 $viewer = $this->getViewer(); 87 $id = $number->getID(); 88 89 $can_edit = PhabricatorPolicyFilter::hasCapability( 90 $viewer, 91 $number, 92 PhabricatorPolicyCapability::CAN_EDIT); 93 94 $curtain = $this->newCurtainView($number); 95 96 $curtain->addAction( 97 id(new PhabricatorActionView()) 98 ->setName(pht('Edit Contact Number')) 99 ->setIcon('fa-pencil') 100 ->setHref($this->getApplicationURI("contact/edit/{$id}/")) 101 ->setDisabled(!$can_edit) 102 ->setWorkflow(!$can_edit)); 103 104 $curtain->addAction( 105 id(new PhabricatorActionView()) 106 ->setName(pht('Send Test Message')) 107 ->setIcon('fa-envelope-o') 108 ->setHref($this->getApplicationURI("contact/test/{$id}/")) 109 ->setDisabled(!$can_edit) 110 ->setWorkflow(true)); 111 112 if ($number->isDisabled()) { 113 $disable_uri = $this->getApplicationURI("contact/enable/{$id}/"); 114 $disable_name = pht('Enable Contact Number'); 115 $disable_icon = 'fa-check'; 116 $can_primary = false; 117 } else { 118 $disable_uri = $this->getApplicationURI("contact/disable/{$id}/"); 119 $disable_name = pht('Disable Contact Number'); 120 $disable_icon = 'fa-ban'; 121 $can_primary = !$number->getIsPrimary(); 122 } 123 124 $curtain->addAction( 125 id(new PhabricatorActionView()) 126 ->setName(pht('Make Primary Number')) 127 ->setIcon('fa-certificate') 128 ->setHref($this->getApplicationURI("contact/primary/{$id}/")) 129 ->setDisabled(!$can_primary) 130 ->setWorkflow(true)); 131 132 $curtain->addAction( 133 id(new PhabricatorActionView()) 134 ->setName($disable_name) 135 ->setIcon($disable_icon) 136 ->setHref($disable_uri) 137 ->setWorkflow(true)); 138 139 return $curtain; 140 } 141 142}