@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 upstream/main 131 lines 3.9 kB view raw
1<?php 2 3final class DrydockAuthorizationViewController 4 extends DrydockController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 $id = $request->getURIData('id'); 9 10 $authorization = id(new DrydockAuthorizationQuery()) 11 ->setViewer($viewer) 12 ->withIDs(array($id)) 13 ->executeOne(); 14 if (!$authorization) { 15 return new Aphront404Response(); 16 } 17 18 $id = $authorization->getID(); 19 $title = pht('Authorization %d', $id); 20 21 $blueprint = $authorization->getBlueprint(); 22 $blueprint_id = $blueprint->getID(); 23 24 $header = id(new PHUIHeaderView()) 25 ->setHeader($title) 26 ->setUser($viewer) 27 ->setPolicyObject($authorization); 28 29 $state = $authorization->getBlueprintAuthorizationState(); 30 $icon = DrydockAuthorization::getBlueprintStateIcon($state); 31 $name = DrydockAuthorization::getBlueprintStateName($state); 32 33 $header->setStatus($icon, null, $name); 34 35 $curtain = $this->buildCurtain($authorization); 36 $properties = $this->buildPropertyListView($authorization); 37 38 $crumbs = $this->buildApplicationCrumbs(); 39 $crumbs->addTextCrumb( 40 pht('Blueprints'), 41 $this->getApplicationURI('blueprint/')); 42 $crumbs->addTextCrumb( 43 $blueprint->getBlueprintName(), 44 $this->getApplicationURI("blueprint/{$blueprint_id}/")); 45 $crumbs->addTextCrumb($title); 46 $crumbs->setBorder(true); 47 48 $object_box = id(new PHUIObjectBoxView()) 49 ->setHeader($header) 50 ->addPropertyList($properties); 51 52 $view = id(new PHUITwoColumnView()) 53 ->setHeader($header) 54 ->setCurtain($curtain) 55 ->addPropertySection(pht('Properties'), $properties); 56 57 return $this->newPage() 58 ->setTitle($title) 59 ->setCrumbs($crumbs) 60 ->appendChild( 61 array( 62 $view, 63 )); 64 65 } 66 67 private function buildCurtain(DrydockAuthorization $authorization) { 68 $viewer = $this->getViewer(); 69 $id = $authorization->getID(); 70 71 $curtain = $this->newCurtainView($authorization); 72 73 $can_edit = PhabricatorPolicyFilter::hasCapability( 74 $viewer, 75 $authorization, 76 PhabricatorPolicyCapability::CAN_EDIT); 77 78 $authorize_uri = $this->getApplicationURI("authorization/{$id}/authorize/"); 79 $decline_uri = $this->getApplicationURI("authorization/{$id}/decline/"); 80 81 $state_authorized = DrydockAuthorization::BLUEPRINTAUTH_AUTHORIZED; 82 $state_declined = DrydockAuthorization::BLUEPRINTAUTH_DECLINED; 83 84 $state = $authorization->getBlueprintAuthorizationState(); 85 $can_authorize = $can_edit && ($state != $state_authorized); 86 $can_decline = $can_edit && ($state != $state_declined); 87 88 $curtain->addAction( 89 id(new PhabricatorActionView()) 90 ->setHref($authorize_uri) 91 ->setName(pht('Approve Authorization')) 92 ->setIcon('fa-check') 93 ->setWorkflow(true) 94 ->setDisabled(!$can_authorize)); 95 96 $curtain->addAction( 97 id(new PhabricatorActionView()) 98 ->setHref($decline_uri) 99 ->setName(pht('Decline Authorization')) 100 ->setIcon('fa-times') 101 ->setWorkflow(true) 102 ->setDisabled(!$can_decline)); 103 104 return $curtain; 105 } 106 107 private function buildPropertyListView(DrydockAuthorization $authorization) { 108 $viewer = $this->getViewer(); 109 110 $object_phid = $authorization->getObjectPHID(); 111 $handles = $viewer->loadHandles(array($object_phid)); 112 $handle = $handles[$object_phid]; 113 114 $view = new PHUIPropertyListView(); 115 116 $view->addProperty( 117 pht('Authorized Object'), 118 $handle->renderLink($handle->getFullName())); 119 120 $view->addProperty(pht('Object Type'), $handle->getTypeName()); 121 122 $object_state = $authorization->getObjectAuthorizationState(); 123 124 $view->addProperty( 125 pht('Authorization State'), 126 DrydockAuthorization::getObjectStateName($object_state)); 127 128 return $view; 129 } 130 131}