Skip to content

Commit 8b19465

Browse files
author
epriestley
committed
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
1 parent 3c21375 commit 8b19465

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

src/__phutil_library_map__.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,7 @@
621621
'DoorkeeperRemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRule.php',
622622
'DoorkeeperRemarkupRuleAsana' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleAsana.php',
623623
'DoorkeeperRemarkupRuleJIRA' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRuleJIRA.php',
624+
'DoorkeeperTagView' => 'applications/doorkeeper/view/DoorkeeperTagView.php',
624625
'DoorkeeperTagsController' => 'applications/doorkeeper/controller/DoorkeeperTagsController.php',
625626
'DrydockAllocatorWorker' => 'applications/drydock/worker/DrydockAllocatorWorker.php',
626627
'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php',
@@ -2944,6 +2945,7 @@
29442945
'DoorkeeperRemarkupRule' => 'PhutilRemarkupRule',
29452946
'DoorkeeperRemarkupRuleAsana' => 'DoorkeeperRemarkupRule',
29462947
'DoorkeeperRemarkupRuleJIRA' => 'DoorkeeperRemarkupRule',
2948+
'DoorkeeperTagView' => 'AphrontView',
29472949
'DoorkeeperTagsController' => 'PhabricatorController',
29482950
'DrydockAllocatorWorker' => 'PhabricatorWorker',
29492951
'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface',

src/applications/differential/field/specification/DifferentialJIRAIssuesFieldSpecification.php

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,11 @@ public function renderValueForRevisionView() {
5858

5959
$links = array();
6060
foreach ($xobjs as $xobj) {
61-
$links[] = phutil_tag(
62-
'a',
63-
array(
64-
'href' => $xobj->getObjectURI(),
65-
'target' => '_blank',
66-
),
67-
$xobj->getObjectID());
61+
$links[] = id(new DoorkeeperTagView())
62+
->setExternalObject($xobj);
6863
}
6964

70-
return phutil_implode_html(', ', $links);
65+
return phutil_implode_html(phutil_tag('br'), $links);
7166
}
7267

7368
public function shouldAppearOnConduitView() {
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
final class DoorkeeperTagView extends AphrontView {
4+
5+
private $xobj;
6+
7+
public function setExternalObject(DoorkeeperExternalObject $xobj) {
8+
$this->xobj = $xobj;
9+
return $this;
10+
}
11+
12+
public function render() {
13+
$xobj = $this->xobj;
14+
if (!$xobj) {
15+
throw new Exception('Call setExternalObject() before render()!');
16+
}
17+
18+
$tag_id = celerity_generate_unique_node_id();
19+
20+
$href = $xobj->getObjectURI();
21+
22+
$spec = array(
23+
'id' => $tag_id,
24+
'ref' => array(
25+
$xobj->getApplicationType(),
26+
$xobj->getApplicationDomain(),
27+
$xobj->getObjectType(),
28+
$xobj->getObjectID(),
29+
),
30+
);
31+
32+
Javelin::initBehavior('doorkeeper-tag', array('tags' => array($spec)));
33+
34+
return id(new PhabricatorTagView())
35+
->setID($tag_id)
36+
->setHref($href)
37+
->setName($href)
38+
->setType(PhabricatorTagView::TYPE_OBJECT)
39+
->setExternal(true);
40+
}
41+
42+
}

0 commit comments

Comments
 (0)