1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-02-02 09:58:24 +01:00

Render linked JIRA issues with a Doorkeeper tag

Summary: Fixes T3687. Instead of rendering "JIRA Issues" in Differential using plain links, render them using Doorkeeper tags so they get the nice "enhance with object name" effect.

Test Plan: {F84886}

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T3687

Differential Revision: https://secure.phabricator.com/D7648
This commit is contained in:
epriestley 2013-11-25 14:54:35 -08:00
parent 3c21375930
commit 8b19465a9d
3 changed files with 47 additions and 8 deletions

View file

@ -621,6 +621,7 @@ phutil_register_library_map(array(
'DoorkeeperRemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRule.php', 'DoorkeeperRemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRule.php',
'DoorkeeperRemarkupRuleAsana' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleAsana.php', 'DoorkeeperRemarkupRuleAsana' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleAsana.php',
'DoorkeeperRemarkupRuleJIRA' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleJIRA.php', 'DoorkeeperRemarkupRuleJIRA' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleJIRA.php',
'DoorkeeperTagView' => 'applications/doorkeeper/view/DoorkeeperTagView.php',
'DoorkeeperTagsController' => 'applications/doorkeeper/controller/DoorkeeperTagsController.php', 'DoorkeeperTagsController' => 'applications/doorkeeper/controller/DoorkeeperTagsController.php',
'DrydockAllocatorWorker' => 'applications/drydock/worker/DrydockAllocatorWorker.php', 'DrydockAllocatorWorker' => 'applications/drydock/worker/DrydockAllocatorWorker.php',
'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php', 'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php',
@ -2944,6 +2945,7 @@ phutil_register_library_map(array(
'DoorkeeperRemarkupRule' => 'PhutilRemarkupRule', 'DoorkeeperRemarkupRule' => 'PhutilRemarkupRule',
'DoorkeeperRemarkupRuleAsana' => 'DoorkeeperRemarkupRule', 'DoorkeeperRemarkupRuleAsana' => 'DoorkeeperRemarkupRule',
'DoorkeeperRemarkupRuleJIRA' => 'DoorkeeperRemarkupRule', 'DoorkeeperRemarkupRuleJIRA' => 'DoorkeeperRemarkupRule',
'DoorkeeperTagView' => 'AphrontView',
'DoorkeeperTagsController' => 'PhabricatorController', 'DoorkeeperTagsController' => 'PhabricatorController',
'DrydockAllocatorWorker' => 'PhabricatorWorker', 'DrydockAllocatorWorker' => 'PhabricatorWorker',
'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface', 'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface',

View file

@ -58,16 +58,11 @@ final class DifferentialJIRAIssuesFieldSpecification
$links = array(); $links = array();
foreach ($xobjs as $xobj) { foreach ($xobjs as $xobj) {
$links[] = phutil_tag( $links[] = id(new DoorkeeperTagView())
'a', ->setExternalObject($xobj);
array(
'href' => $xobj->getObjectURI(),
'target' => '_blank',
),
$xobj->getObjectID());
} }
return phutil_implode_html(', ', $links); return phutil_implode_html(phutil_tag('br'), $links);
} }
public function shouldAppearOnConduitView() { public function shouldAppearOnConduitView() {

View file

@ -0,0 +1,42 @@
<?php
final class DoorkeeperTagView extends AphrontView {
private $xobj;
public function setExternalObject(DoorkeeperExternalObject $xobj) {
$this->xobj = $xobj;
return $this;
}
public function render() {
$xobj = $this->xobj;
if (!$xobj) {
throw new Exception('Call setExternalObject() before render()!');
}
$tag_id = celerity_generate_unique_node_id();
$href = $xobj->getObjectURI();
$spec = array(
'id' => $tag_id,
'ref' => array(
$xobj->getApplicationType(),
$xobj->getApplicationDomain(),
$xobj->getObjectType(),
$xobj->getObjectID(),
),
);
Javelin::initBehavior('doorkeeper-tag', array('tags' => array($spec)));
return id(new PhabricatorTagView())
->setID($tag_id)
->setHref($href)
->setName($href)
->setType(PhabricatorTagView::TYPE_OBJECT)
->setExternal(true);
}
}