@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 141 lines 4.0 kB view raw
1<?php 2 3final class DiffusionIdentityViewController 4 extends DiffusionController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 9 $id = $request->getURIData('id'); 10 $identity = id(new PhabricatorRepositoryIdentityQuery()) 11 ->setViewer($viewer) 12 ->withIDs(array($id)) 13 ->executeOne(); 14 if (!$identity) { 15 return new Aphront404Response(); 16 } 17 18 $title = pht('Identity %d', $identity->getID()); 19 20 $curtain = $this->buildCurtain($identity); 21 22 $header = id(new PHUIHeaderView()) 23 ->setUser($viewer) 24 ->setHeader($identity->getIdentityShortName()) 25 ->setHeaderIcon('fa-globe'); 26 27 $crumbs = $this->buildApplicationCrumbs(); 28 $crumbs->addTextCrumb( 29 pht('Identities'), 30 $this->getApplicationURI('identity/')); 31 $crumbs->addTextCrumb($identity->getObjectName()); 32 $crumbs->setBorder(true); 33 34 $timeline = $this->buildTransactionTimeline( 35 $identity, 36 new PhabricatorRepositoryIdentityTransactionQuery()); 37 $timeline->setShouldTerminate(true); 38 39 $properties = $this->buildPropertyList($identity); 40 41 $view = id(new PHUITwoColumnView()) 42 ->setHeader($header) 43 ->setCurtain($curtain) 44 ->setMainColumn(array( 45 $properties, 46 $timeline, 47 )); 48 49 return $this->newPage() 50 ->setTitle($title) 51 ->setCrumbs($crumbs) 52 ->appendChild( 53 array( 54 $view, 55 )); 56 } 57 58 private function buildCurtain(PhabricatorRepositoryIdentity $identity) { 59 $viewer = $this->getViewer(); 60 61 $can_edit = PhabricatorPolicyFilter::hasCapability( 62 $viewer, 63 $identity, 64 PhabricatorPolicyCapability::CAN_EDIT); 65 66 $id = $identity->getID(); 67 $edit_uri = $this->getApplicationURI("identity/edit/{$id}/"); 68 69 $curtain = $this->newCurtainView($identity); 70 71 $curtain->addAction( 72 id(new PhabricatorActionView()) 73 ->setIcon('fa-pencil') 74 ->setName(pht('Edit Identity')) 75 ->setHref($edit_uri) 76 ->setWorkflow(!$can_edit) 77 ->setDisabled(!$can_edit)); 78 79 return $curtain; 80 } 81 82 private function buildPropertyList( 83 PhabricatorRepositoryIdentity $identity) { 84 85 $viewer = $this->getViewer(); 86 87 $properties = id(new PHUIPropertyListView()) 88 ->setViewer($viewer); 89 90 $properties->addProperty( 91 pht('Email Address'), 92 $identity->getEmailAddress()); 93 94 $effective_phid = $identity->getCurrentEffectiveUserPHID(); 95 $automatic_phid = $identity->getAutomaticGuessedUserPHID(); 96 $manual_phid = $identity->getManuallySetUserPHID(); 97 98 if ($effective_phid) { 99 $tag = id(new PHUITagView()) 100 ->setType(PHUITagView::TYPE_SHADE) 101 ->setColor('green') 102 ->setIcon('fa-check') 103 ->setName('Assigned'); 104 } else { 105 $tag = id(new PHUITagView()) 106 ->setType(PHUITagView::TYPE_SHADE) 107 ->setColor('indigo') 108 ->setIcon('fa-bomb') 109 ->setName('Unassigned'); 110 } 111 $properties->addProperty( 112 pht('Effective User'), 113 $this->buildPropertyValue($effective_phid)); 114 $properties->addProperty( 115 pht('Automatically Detected User'), 116 $this->buildPropertyValue($automatic_phid)); 117 $properties->addProperty( 118 pht('Assigned To'), 119 $this->buildPropertyValue($manual_phid)); 120 121 $header = id(new PHUIHeaderView()) 122 ->setHeader(array(pht('Identity Assignments'), $tag)); 123 124 return id(new PHUIObjectBoxView()) 125 ->setHeader($header) 126 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 127 ->addPropertyList($properties); 128 } 129 130 private function buildPropertyValue($value) { 131 $viewer = $this->getViewer(); 132 133 if ($value == DiffusionIdentityUnassignedDatasource::FUNCTION_TOKEN) { 134 return phutil_tag('em', array(), pht('Explicitly Unassigned')); 135 } else if (!$value) { 136 return phutil_tag('em', array(), pht('None')); 137 } else { 138 return $viewer->renderHandle($value); 139 } 140 } 141}