Path: blob/master/src/applications/diffusion/engineextension/DiffusionSourceHyperlinkEngineExtension.php
12242 views
<?php12final class DiffusionSourceHyperlinkEngineExtension3extends PhabricatorRemarkupHyperlinkEngineExtension {45const LINKENGINEKEY = 'diffusion-src';67public function processHyperlinks(array $hyperlinks) {8$engine = $this->getEngine();9$viewer = $engine->getConfig('viewer');1011if (!$viewer) {12return;13}1415$hyperlinks = $this->getSelfLinks($hyperlinks);1617$links = array();18foreach ($hyperlinks as $link) {19$uri = $link->getURI();20$uri = new PhutilURI($uri);2122$path = $uri->getPath();2324$pattern =25'(^'.26'/(?:diffusion|source)'.27'/(?P<identifier>[^/]+)'.28'/browse'.29'/(?P<blob>.*)'.30'\z)';31$matches = null;32if (!preg_match($pattern, $path, $matches)) {33continue;34}3536$links[] = array(37'ref' => $link,38'identifier' => $matches['identifier'],39'blob' => $matches['blob'],40);41}4243if (!$links) {44return;45}4647$identifiers = ipull($links, 'identifier');4849$query = id(new PhabricatorRepositoryQuery())50->setViewer($viewer)51->withIdentifiers($identifiers);5253$query->execute();5455$repository_map = $query->getIdentifierMap();5657foreach ($links as $link) {58$identifier = $link['identifier'];5960$repository = idx($repository_map, $identifier);61if (!$repository) {62continue;63}6465$ref = $link['ref'];66$uri = $ref->getURI();676869$tag = id(new DiffusionSourceLinkView())70->setViewer($viewer)71->setRepository($repository)72->setURI($uri)73->setBlob($link['blob']);7475if (!$ref->isEmbed()) {76$tag->setText($uri);77}7879$ref->setResult($tag);80}81}8283}848586