diff --git a/src/applications/meta/engineextension/PhabricatorSelfHyperlinkEngineExtension.php b/src/applications/meta/engineextension/PhabricatorSelfHyperlinkEngineExtension.php index 44055df3c4..0bc9228d44 100644 --- a/src/applications/meta/engineextension/PhabricatorSelfHyperlinkEngineExtension.php +++ b/src/applications/meta/engineextension/PhabricatorSelfHyperlinkEngineExtension.php @@ -1,88 +1,97 @@ 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')); + $object_phids = mpull($object_map, 'getPHID'); } else { - $handles = array(); + $object_phids = array(); } + $handles = $viewer->loadHandles($object_phids); + 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]); } + + $key_mentioned = PhabricatorObjectRemarkupRule::KEY_MENTIONED_OBJECTS; + $mentioned_phids = $engine->getTextMetadata($key_mentioned, array()); + foreach ($object_phids as $object_phid) { + $mentioned_phids[$object_phid] = $object_phid; + } + $engine->setTextMetadata($key_mentioned, $mentioned_phids); } }