@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.

Support filtering feed transactions by object type

Summary: Depends on D20533. Allow querying for transactions of a specific object type, so you can run queries like "Show all edits to Herald rules between date X and Y".

Test Plan: {F6463478}

Reviewers: amckinley

Reviewed By: amckinley

Differential Revision: https://secure.phabricator.com/D20534

+95 -3
+2
src/__phutil_library_map__.php
··· 4809 4809 'PhabricatorTransactionsApplication' => 'applications/transactions/application/PhabricatorTransactionsApplication.php', 4810 4810 'PhabricatorTransactionsDestructionEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsDestructionEngineExtension.php', 4811 4811 'PhabricatorTransactionsFulltextEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php', 4812 + 'PhabricatorTransactionsObjectTypeDatasource' => 'applications/transactions/typeahead/PhabricatorTransactionsObjectTypeDatasource.php', 4812 4813 'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php', 4813 4814 'PhabricatorTranslationSetting' => 'applications/settings/setting/PhabricatorTranslationSetting.php', 4814 4815 'PhabricatorTranslationsConfigOptions' => 'applications/config/option/PhabricatorTranslationsConfigOptions.php', ··· 11158 11159 'PhabricatorTransactionsApplication' => 'PhabricatorApplication', 11159 11160 'PhabricatorTransactionsDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', 11160 11161 'PhabricatorTransactionsFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', 11162 + 'PhabricatorTransactionsObjectTypeDatasource' => 'PhabricatorTypeaheadDatasource', 11161 11163 'PhabricatorTransformedFile' => 'PhabricatorFileDAO', 11162 11164 'PhabricatorTranslationSetting' => 'PhabricatorOptionGroupSetting', 11163 11165 'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions',
+21 -3
src/applications/feed/query/PhabricatorFeedTransactionQuery.php
··· 5 5 6 6 private $phids; 7 7 private $authorPHIDs; 8 + private $objectTypes; 8 9 private $createdMin; 9 10 private $createdMax; 10 11 ··· 15 16 16 17 public function withAuthorPHIDs(array $phids) { 17 18 $this->authorPHIDs = $phids; 19 + return $this; 20 + } 21 + 22 + public function withObjectTypes(array $types) { 23 + $this->objectTypes = $types; 18 24 return $this; 19 25 } 20 26 ··· 158 164 } 159 165 } 160 166 167 + $object_types = $this->objectTypes; 168 + if ($object_types) { 169 + $object_types = array_fuse($object_types); 170 + } 171 + 161 172 $results = array(); 162 173 foreach ($queries as $query) { 174 + $query_type = $query->getTemplateApplicationTransaction() 175 + ->getApplicationTransactionType(); 176 + 163 177 if ($type_map) { 164 - $type = $query->getTemplateApplicationTransaction() 165 - ->getApplicationTransactionType(); 166 - if (!isset($type_map[$type])) { 178 + if (!isset($type_map[$query_type])) { 179 + continue; 180 + } 181 + } 182 + 183 + if ($object_types) { 184 + if (!isset($object_types[$query_type])) { 167 185 continue; 168 186 } 169 187 }
+9
src/applications/feed/query/PhabricatorFeedTransactionSearchEngine.php
··· 21 21 ->setLabel(pht('Authors')) 22 22 ->setKey('authorPHIDs') 23 23 ->setAliases(array('author', 'authors')), 24 + id(new PhabricatorSearchDatasourceField()) 25 + ->setLabel(pht('Object Types')) 26 + ->setKey('objectTypes') 27 + ->setAliases(array('objectType')) 28 + ->setDatasource(new PhabricatorTransactionsObjectTypeDatasource()), 24 29 id(new PhabricatorSearchDateField()) 25 30 ->setLabel(pht('Created After')) 26 31 ->setKey('createdStart'), ··· 35 40 36 41 if ($map['authorPHIDs']) { 37 42 $query->withAuthorPHIDs($map['authorPHIDs']); 43 + } 44 + 45 + if ($map['objectTypes']) { 46 + $query->withObjectTypes($map['objectTypes']); 38 47 } 39 48 40 49 $created_min = $map['createdStart'];
+63
src/applications/transactions/typeahead/PhabricatorTransactionsObjectTypeDatasource.php
··· 1 + <?php 2 + 3 + final class PhabricatorTransactionsObjectTypeDatasource 4 + extends PhabricatorTypeaheadDatasource { 5 + 6 + public function getBrowseTitle() { 7 + return pht('Browse Forms'); 8 + } 9 + 10 + public function getPlaceholderText() { 11 + return pht('Type an object type name...'); 12 + } 13 + 14 + public function getDatasourceApplicationClass() { 15 + return 'PhabricatorTransactionsApplication'; 16 + } 17 + 18 + protected function renderSpecialTokens(array $values) { 19 + return $this->renderTokensFromResults($this->buildResults(), $values); 20 + } 21 + 22 + public function loadResults() { 23 + $results = $this->buildResults(); 24 + return $this->filterResultsAgainstTokens($results); 25 + } 26 + 27 + private function buildResults() { 28 + $queries = id(new PhutilClassMapQuery()) 29 + ->setAncestorClass('PhabricatorApplicationTransactionQuery') 30 + ->execute(); 31 + 32 + $phid_types = PhabricatorPHIDType::getAllTypes(); 33 + 34 + $results = array(); 35 + foreach ($queries as $query) { 36 + $query_type = $query->getTemplateApplicationTransaction() 37 + ->getApplicationTransactionType(); 38 + 39 + $phid_type = idx($phid_types, $query_type); 40 + 41 + if ($phid_type) { 42 + $name = $phid_type->getTypeName(); 43 + $icon = $phid_type->getTypeIcon(); 44 + } else { 45 + $name = pht('%s ("%s")', $query_type, get_class($query)); 46 + $icon = null; 47 + } 48 + 49 + $result = id(new PhabricatorTypeaheadResult()) 50 + ->setName($name) 51 + ->setPHID($query_type); 52 + 53 + if ($icon) { 54 + $result->setIcon($icon); 55 + } 56 + 57 + $results[$query_type] = $result; 58 + } 59 + 60 + return $results; 61 + } 62 + 63 + }