@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 89 lines 2.3 kB view raw
1<?php 2 3final class PhabricatorSelfHyperlinkEngineExtension 4 extends PhabricatorRemarkupHyperlinkEngineExtension { 5 6 const LINKENGINEKEY = 'phabricator-self'; 7 8 public function processHyperlinks(array $hyperlinks) { 9 $engine = $this->getEngine(); 10 $viewer = $engine->getConfig('viewer'); 11 12 // If we don't have a valid viewer, just bail out. We aren't going to be 13 // able to do very much. 14 if (!$viewer) { 15 return; 16 } 17 18 $self_links = $this->getSelfLinks($hyperlinks); 19 20 // For links in the form "/X123", we can reasonably guess that they are 21 // fairly likely to be object names. Try to look them up. 22 $object_names = array(); 23 foreach ($self_links as $key => $link) { 24 $uri = new PhutilURI($link->getURI()); 25 26 $matches = null; 27 $path = $uri->getPath(); 28 if (!preg_match('(^/([^/]+)\z)', $path, $matches)) { 29 continue; 30 } 31 32 $object_names[$key] = $matches[1]; 33 } 34 35 if ($object_names) { 36 $object_query = id(new PhabricatorObjectQuery()) 37 ->setViewer($viewer) 38 ->withNames($object_names); 39 40 $object_query->execute(); 41 42 $object_map = $object_query->getNamedResults(); 43 } else { 44 $object_map = array(); 45 } 46 47 if ($object_map) { 48 $object_phids = mpull($object_map, 'getPHID'); 49 } else { 50 $object_phids = array(); 51 } 52 53 $handles = $viewer->loadHandles($object_phids); 54 55 foreach ($object_names as $key => $object_name) { 56 $object = idx($object_map, $object_name); 57 if (!$object) { 58 continue; 59 } 60 61 $phid = $object->getPHID(); 62 $handle = $handles[$phid]; 63 64 $link = $self_links[$key]; 65 $raw_uri = $link->getURI(); 66 $is_embed = $link->isEmbed(); 67 68 $tag = $handle->renderTag() 69 ->setPHID($phid) 70 ->setHref($raw_uri); 71 72 if (!$is_embed) { 73 $tag->setName($raw_uri); 74 } 75 76 $link->setResult($tag); 77 78 unset($self_links[$key]); 79 } 80 81 $key_mentioned = PhabricatorObjectRemarkupRule::KEY_MENTIONED_OBJECTS; 82 $mentioned_phids = $engine->getTextMetadata($key_mentioned, array()); 83 foreach ($object_phids as $object_phid) { 84 $mentioned_phids[$object_phid] = $object_phid; 85 } 86 $engine->setTextMetadata($key_mentioned, $mentioned_phids); 87 } 88 89}