Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/doorkeeper/engineextension/DoorkeeperHyperlinkEngineExtension.php
12256 views
1
<?php
2
3
final class DoorkeeperHyperlinkEngineExtension
4
extends PhabricatorRemarkupHyperlinkEngineExtension {
5
6
const LINKENGINEKEY = 'doorkeeper';
7
8
public function processHyperlinks(array $hyperlinks) {
9
$engine = $this->getEngine();
10
$viewer = $engine->getConfig('viewer');
11
12
if (!$viewer) {
13
return;
14
}
15
16
$configs = id(new PhabricatorAuthProviderConfigQuery())
17
->setViewer($viewer)
18
->withIsEnabled(true)
19
->execute();
20
21
$providers = array();
22
foreach ($configs as $key => $config) {
23
$provider = $config->getProvider();
24
if (($provider instanceof DoorkeeperRemarkupURIInterface)) {
25
$providers[] = $provider;
26
}
27
}
28
29
if (!$providers) {
30
return;
31
}
32
33
$refs = array();
34
foreach ($hyperlinks as $hyperlink) {
35
$uri = $hyperlink->getURI();
36
$uri = new PhutilURI($uri);
37
38
foreach ($providers as $provider) {
39
$ref = $provider->getDoorkeeperURIRef($uri);
40
41
if (($ref !== null) && !($ref instanceof DoorkeeperURIRef)) {
42
throw new Exception(
43
pht(
44
'Expected "getDoorkeeperURIRef()" to return "null" or an '.
45
'object of type "DoorkeeperURIRef", but got %s from provider '.
46
'"%s".',
47
phutil_describe_type($ref),
48
get_class($provider)));
49
}
50
51
if ($ref === null) {
52
continue;
53
}
54
55
$tag_id = celerity_generate_unique_node_id();
56
$href = phutil_string_cast($ref->getURI());
57
58
$refs[] = array(
59
'id' => $tag_id,
60
'href' => $href,
61
'ref' => array(
62
$ref->getApplicationType(),
63
$ref->getApplicationDomain(),
64
$ref->getObjectType(),
65
$ref->getObjectID(),
66
),
67
'view' => $ref->getDisplayMode(),
68
);
69
70
$text = $ref->getText();
71
if ($text === null) {
72
$text = $href;
73
}
74
75
$view = id(new PHUITagView())
76
->setID($tag_id)
77
->setName($text)
78
->setHref($href)
79
->setType(PHUITagView::TYPE_OBJECT)
80
->setExternal(true);
81
82
$hyperlink->setResult($view);
83
break;
84
}
85
}
86
87
if ($refs) {
88
Javelin::initBehavior('doorkeeper-tag', array('tags' => $refs));
89
}
90
}
91
92
}
93
94