@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
2
fork

Configure Feed

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

at recaptime-dev/main 95 lines 2.8 kB view raw
1<?php 2 3final class PhabricatorSearchRelationshipSourceController 4 extends PhabricatorSearchBaseController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 9 $object = $this->loadRelationshipObject(); 10 if (!$object) { 11 return new Aphront404Response(); 12 } 13 14 $relationship = $this->loadRelationship($object); 15 if (!$relationship) { 16 return new Aphront404Response(); 17 } 18 19 $source = $relationship->newSource(); 20 $query = new PhabricatorSavedQuery(); 21 22 $action = $request->getURIData('action'); 23 $query_str = $request->getStr('query'); 24 $filter = $request->getStr('filter'); 25 26 $query->setEngineClassName('PhabricatorSearchApplicationSearchEngine'); 27 $query->setParameter('query', $query_str); 28 29 $types = $source->getResultPHIDTypes(); 30 $query->setParameter('types', $types); 31 32 $status_open = PhabricatorSearchRelationship::RELATIONSHIP_OPEN; 33 34 switch ($filter) { 35 case 'assigned': 36 $query->setParameter('ownerPHIDs', array($viewer->getPHID())); 37 $query->setParameter('statuses', array($status_open)); 38 break; 39 case 'created': 40 $query->setParameter('authorPHIDs', array($viewer->getPHID())); 41 $query->setParameter('statuses', array($status_open)); 42 break; 43 case 'open': 44 $query->setParameter('statuses', array($status_open)); 45 break; 46 } 47 48 $query->setParameter('excludePHIDs', array($request->getStr('exclude'))); 49 50 $capabilities = $relationship->getRequiredRelationshipCapabilities(); 51 52 $results = id(new PhabricatorSearchDocumentQuery()) 53 ->setViewer($viewer) 54 ->requireObjectCapabilities($capabilities) 55 ->withSavedQuery($query) 56 ->setOffset(0) 57 ->setLimit(100) 58 ->execute(); 59 60 $phids = array_fill_keys(mpull($results, 'getPHID'), true); 61 $phids = $this->queryObjectNames($query, $capabilities) + $phids; 62 63 $phids = array_keys($phids); 64 $handles = $viewer->loadHandles($phids); 65 66 $data = array(); 67 foreach ($handles as $handle) { 68 $view = new PhabricatorHandleObjectSelectorDataView($handle); 69 $data[] = $view->renderData(); 70 } 71 72 return id(new AphrontAjaxResponse())->setContent($data); 73 } 74 75 private function queryObjectNames( 76 PhabricatorSavedQuery $query, 77 array $capabilities) { 78 79 $request = $this->getRequest(); 80 $viewer = $request->getUser(); 81 82 $types = $query->getParameter('types'); 83 $match = $query->getParameter('query'); 84 85 $objects = id(new PhabricatorObjectQuery()) 86 ->setViewer($viewer) 87 ->requireCapabilities($capabilities) 88 ->withTypes($query->getParameter('types')) 89 ->withNames(array($match)) 90 ->execute(); 91 92 return mpull($objects, 'getPHID'); 93 } 94 95}