Differential D19443 Diff 46509 src/applications/diffusion/controller/DiffusionIdentityViewController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/diffusion/controller/DiffusionIdentityViewController.php
- This file was added.
<?php | |||||
final class DiffusionIdentityViewController | |||||
extends DiffusionController { | |||||
public function handleRequest(AphrontRequest $request) { | |||||
$viewer = $request->getViewer(); | |||||
$id = $request->getURIData('id'); | |||||
$identity = id(new PhabricatorRepositoryIdentityQuery()) | |||||
->setViewer($viewer) | |||||
->withIDs(array($id)) | |||||
->executeOne(); | |||||
if (!$identity) { | |||||
return new Aphront404Response(); | |||||
} | |||||
$title = pht('Identity %d', $identity->getID()); | |||||
$curtain = $this->buildCurtain($identity); | |||||
$header = id(new PHUIHeaderView()) | |||||
->setUser($viewer) | |||||
->setHeader($identity->getIdentityShortName()) | |||||
->setHeaderIcon('fa-globe') | |||||
->setPolicyObject($identity); | |||||
$crumbs = $this->buildApplicationCrumbs(); | |||||
$crumbs->addTextCrumb($identity->getID()); | |||||
$crumbs->setBorder(true); | |||||
$timeline = $this->buildTransactionTimeline( | |||||
$identity, | |||||
new PhabricatorRepositoryIdentityTransactionQuery()); | |||||
$timeline->setShouldTerminate(true); | |||||
$properties = $this->buildPropertyList($identity); | |||||
$view = id(new PHUITwoColumnView()) | |||||
->setHeader($header) | |||||
->setCurtain($curtain) | |||||
->setMainColumn(array( | |||||
$properties, | |||||
$timeline, | |||||
)); | |||||
return $this->newPage() | |||||
->setTitle($title) | |||||
->setCrumbs($crumbs) | |||||
->appendChild( | |||||
array( | |||||
$view, | |||||
)); | |||||
} | |||||
private function buildCurtain(PhabricatorRepositoryIdentity $identity) { | |||||
$viewer = $this->getViewer(); | |||||
$can_edit = PhabricatorPolicyFilter::hasCapability( | |||||
$viewer, | |||||
$identity, | |||||
PhabricatorPolicyCapability::CAN_EDIT); | |||||
$id = $identity->getID(); | |||||
$edit_uri = $this->getApplicationURI("identity/edit/{$id}/"); | |||||
$curtain = $this->newCurtainView($identity); | |||||
$curtain->addAction( | |||||
id(new PhabricatorActionView()) | |||||
->setIcon('fa-pencil') | |||||
->setName(pht('Edit Identity')) | |||||
->setHref($edit_uri) | |||||
->setWorkflow(!$can_edit) | |||||
->setDisabled(!$can_edit)); | |||||
return $curtain; | |||||
} | |||||
private function buildPropertyList( | |||||
PhabricatorRepositoryIdentity $identity) { | |||||
$viewer = $this->getViewer(); | |||||
$properties = id(new PHUIPropertyListView()) | |||||
->setUser($viewer); | |||||
$effective_phid = $identity->getCurrentEffectiveUserPHID(); | |||||
$automatic_phid = $identity->getAutomaticGuessedUserPHID(); | |||||
$manual_phid = $identity->getManuallySetUserPHID(); | |||||
if ($effective_phid) { | |||||
$tag = id(new PHUITagView()) | |||||
->setType(PHUITagView::TYPE_SHADE) | |||||
->setColor('green') | |||||
->setIcon('fa-check') | |||||
->setName('Assigned'); | |||||
} else { | |||||
$tag = id(new PHUITagView()) | |||||
->setType(PHUITagView::TYPE_SHADE) | |||||
->setColor('indigo') | |||||
->setIcon('fa-bomb') | |||||
->setName('Unassigned'); | |||||
} | |||||
$properties->addProperty( | |||||
pht('Effective User'), | |||||
$this->buildPropertyValue($effective_phid)); | |||||
$properties->addProperty( | |||||
pht('Automatically Detected User'), | |||||
$this->buildPropertyValue($automatic_phid)); | |||||
$properties->addProperty( | |||||
pht('Manually Set User'), | |||||
$this->buildPropertyValue($manual_phid)); | |||||
$header = id(new PHUIHeaderView()) | |||||
->setHeader(array(pht('Identity Assignments'), $tag)); | |||||
return id(new PHUIObjectBoxView()) | |||||
->setHeader($header) | |||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | |||||
->addPropertyList($properties); | |||||
} | |||||
private function buildPropertyValue($value) { | |||||
$viewer = $this->getViewer(); | |||||
// TODO: there must be a way to render the fancy "Unassigned" tag | |||||
Lint: TODO Comment: This comment has a TODO. | |||||
Done Inline ActionsI think there is, but it's super tricky. Something like you instantiate a copy of the Datasource, then set the value, render wire tokens from it, rebuild handles out of those wire tokens, then render tags out of the handles? There's a comment somewhere like "make this easier". The approach you've taken here is quite reasonable. epriestley: I think there is, but it's super tricky. Something like you instantiate a copy of the… | |||||
if ($value == DiffusionIdentityUnassignedDatasource::FUNCTION_TOKEN) { | |||||
return pht('<Explicitly Unassigned>'); | |||||
Done Inline ActionsJust for UI consistency, do something like: phutil_tag('em', array(), pht('Explicitly Unassigned')); epriestley: Just for UI consistency, do something like:
```
phutil_tag('em', array(), pht('Explicitly… | |||||
} else if (!$value) { | |||||
return null; | |||||
} else { | |||||
return $viewer->renderHandle($value); | |||||
} | |||||
} | |||||
} |
This comment has a TODO.