Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F1382752
PhabricatorSelfHyperlinkEngineExtension.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
PhabricatorSelfHyperlinkEngineExtension.php
View Options
<?php
final
class
PhabricatorSelfHyperlinkEngineExtension
extends
PhutilRemarkupHyperlinkEngineExtension
{
const
LINKENGINEKEY
=
'phabricator-self'
;
public
function
processHyperlinks
(
array
$hyperlinks
)
{
$engine
=
$this
->
getEngine
();
$viewer
=
$engine
->
getConfig
(
'viewer'
);
// If we don't have a valid viewer, just bail out. We aren't going to be
// able to do very much.
if
(!
$viewer
)
{
return
;
}
// Find links which point to resources on the Phabricator install itself.
// We're going to try to enhance these.
$self_links
=
array
();
foreach
(
$hyperlinks
as
$link
)
{
$uri
=
$link
->
getURI
();
if
(
PhabricatorEnv
::
isSelfURI
(
$uri
))
{
$self_links
[]
=
$link
;
}
}
// For links in the form "/X123", we can reasonably guess that they are
// fairly likely to be object names. Try to look them up.
$object_names
=
array
();
foreach
(
$self_links
as
$key
=>
$link
)
{
$uri
=
new
PhutilURI
(
$link
->
getURI
());
$matches
=
null
;
$path
=
$uri
->
getPath
();
if
(!
preg_match
(
'(^/([^/]+)
\z
)'
,
$path
,
$matches
))
{
continue
;
}
$object_names
[
$key
]
=
$matches
[
1
];
}
if
(
$object_names
)
{
$object_query
=
id
(
new
PhabricatorObjectQuery
())
->
setViewer
(
$viewer
)
->
withNames
(
$object_names
);
$object_query
->
execute
();
$object_map
=
$object_query
->
getNamedResults
();
}
else
{
$object_map
=
array
();
}
if
(
$object_map
)
{
$handles
=
$viewer
->
loadHandles
(
mpull
(
$object_map
,
'getPHID'
));
}
else
{
$handles
=
array
();
}
foreach
(
$object_names
as
$key
=>
$object_name
)
{
$object
=
idx
(
$object_map
,
$object_name
);
if
(!
$object
)
{
continue
;
}
$phid
=
$object
->
getPHID
();
$handle
=
$handles
[
$phid
];
$link
=
$self_links
[
$key
];
$raw_uri
=
$link
->
getURI
();
$is_embed
=
$link
->
isEmbed
();
$tag
=
$handle
->
renderTag
()
->
setPHID
(
$phid
)
->
setHref
(
$raw_uri
);
if
(!
$is_embed
)
{
$tag
->
setName
(
$raw_uri
);
}
$link
->
setResult
(
$tag
);
unset
(
$self_links
[
$key
]);
}
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Mon, Jul 7, 12:41 PM (2 d)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
318267
Default Alt Text
PhabricatorSelfHyperlinkEngineExtension.php (2 KB)
Attached To
Mode
rP Phorge
Attached
Detach File
Event Timeline
Log In to Comment