Path: blob/master/src/applications/doorkeeper/engineextension/DoorkeeperHyperlinkEngineExtension.php
12256 views
<?php12final class DoorkeeperHyperlinkEngineExtension3extends PhabricatorRemarkupHyperlinkEngineExtension {45const LINKENGINEKEY = 'doorkeeper';67public function processHyperlinks(array $hyperlinks) {8$engine = $this->getEngine();9$viewer = $engine->getConfig('viewer');1011if (!$viewer) {12return;13}1415$configs = id(new PhabricatorAuthProviderConfigQuery())16->setViewer($viewer)17->withIsEnabled(true)18->execute();1920$providers = array();21foreach ($configs as $key => $config) {22$provider = $config->getProvider();23if (($provider instanceof DoorkeeperRemarkupURIInterface)) {24$providers[] = $provider;25}26}2728if (!$providers) {29return;30}3132$refs = array();33foreach ($hyperlinks as $hyperlink) {34$uri = $hyperlink->getURI();35$uri = new PhutilURI($uri);3637foreach ($providers as $provider) {38$ref = $provider->getDoorkeeperURIRef($uri);3940if (($ref !== null) && !($ref instanceof DoorkeeperURIRef)) {41throw new Exception(42pht(43'Expected "getDoorkeeperURIRef()" to return "null" or an '.44'object of type "DoorkeeperURIRef", but got %s from provider '.45'"%s".',46phutil_describe_type($ref),47get_class($provider)));48}4950if ($ref === null) {51continue;52}5354$tag_id = celerity_generate_unique_node_id();55$href = phutil_string_cast($ref->getURI());5657$refs[] = array(58'id' => $tag_id,59'href' => $href,60'ref' => array(61$ref->getApplicationType(),62$ref->getApplicationDomain(),63$ref->getObjectType(),64$ref->getObjectID(),65),66'view' => $ref->getDisplayMode(),67);6869$text = $ref->getText();70if ($text === null) {71$text = $href;72}7374$view = id(new PHUITagView())75->setID($tag_id)76->setName($text)77->setHref($href)78->setType(PHUITagView::TYPE_OBJECT)79->setExternal(true);8081$hyperlink->setResult($view);82break;83}84}8586if ($refs) {87Javelin::initBehavior('doorkeeper-tag', array('tags' => $refs));88}89}9091}929394