diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -4809,6 +4809,7 @@ 'PhabricatorTransactionsApplication' => 'applications/transactions/application/PhabricatorTransactionsApplication.php', 'PhabricatorTransactionsDestructionEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsDestructionEngineExtension.php', 'PhabricatorTransactionsFulltextEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php', + 'PhabricatorTransactionsObjectTypeDatasource' => 'applications/transactions/typeahead/PhabricatorTransactionsObjectTypeDatasource.php', 'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php', 'PhabricatorTranslationSetting' => 'applications/settings/setting/PhabricatorTranslationSetting.php', 'PhabricatorTranslationsConfigOptions' => 'applications/config/option/PhabricatorTranslationsConfigOptions.php', @@ -11158,6 +11159,7 @@ 'PhabricatorTransactionsApplication' => 'PhabricatorApplication', 'PhabricatorTransactionsDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', 'PhabricatorTransactionsFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', + 'PhabricatorTransactionsObjectTypeDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorTransformedFile' => 'PhabricatorFileDAO', 'PhabricatorTranslationSetting' => 'PhabricatorOptionGroupSetting', 'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions', diff --git a/src/applications/feed/query/PhabricatorFeedTransactionQuery.php b/src/applications/feed/query/PhabricatorFeedTransactionQuery.php --- a/src/applications/feed/query/PhabricatorFeedTransactionQuery.php +++ b/src/applications/feed/query/PhabricatorFeedTransactionQuery.php @@ -5,6 +5,7 @@ private $phids; private $authorPHIDs; + private $objectTypes; private $createdMin; private $createdMax; @@ -18,6 +19,11 @@ return $this; } + public function withObjectTypes(array $types) { + $this->objectTypes = $types; + return $this; + } + public function withDateCreatedBetween($min, $max) { $this->createdMin = $min; $this->createdMax = $max; @@ -158,12 +164,24 @@ } } + $object_types = $this->objectTypes; + if ($object_types) { + $object_types = array_fuse($object_types); + } + $results = array(); foreach ($queries as $query) { + $query_type = $query->getTemplateApplicationTransaction() + ->getApplicationTransactionType(); + if ($type_map) { - $type = $query->getTemplateApplicationTransaction() - ->getApplicationTransactionType(); - if (!isset($type_map[$type])) { + if (!isset($type_map[$query_type])) { + continue; + } + } + + if ($object_types) { + if (!isset($object_types[$query_type])) { continue; } } diff --git a/src/applications/feed/query/PhabricatorFeedTransactionSearchEngine.php b/src/applications/feed/query/PhabricatorFeedTransactionSearchEngine.php --- a/src/applications/feed/query/PhabricatorFeedTransactionSearchEngine.php +++ b/src/applications/feed/query/PhabricatorFeedTransactionSearchEngine.php @@ -21,6 +21,11 @@ ->setLabel(pht('Authors')) ->setKey('authorPHIDs') ->setAliases(array('author', 'authors')), + id(new PhabricatorSearchDatasourceField()) + ->setLabel(pht('Object Types')) + ->setKey('objectTypes') + ->setAliases(array('objectType')) + ->setDatasource(new PhabricatorTransactionsObjectTypeDatasource()), id(new PhabricatorSearchDateField()) ->setLabel(pht('Created After')) ->setKey('createdStart'), @@ -37,6 +42,10 @@ $query->withAuthorPHIDs($map['authorPHIDs']); } + if ($map['objectTypes']) { + $query->withObjectTypes($map['objectTypes']); + } + $created_min = $map['createdStart']; $created_max = $map['createdEnd']; diff --git a/src/applications/transactions/typeahead/PhabricatorTransactionsObjectTypeDatasource.php b/src/applications/transactions/typeahead/PhabricatorTransactionsObjectTypeDatasource.php new file mode 100644 --- /dev/null +++ b/src/applications/transactions/typeahead/PhabricatorTransactionsObjectTypeDatasource.php @@ -0,0 +1,63 @@ +renderTokensFromResults($this->buildResults(), $values); + } + + public function loadResults() { + $results = $this->buildResults(); + return $this->filterResultsAgainstTokens($results); + } + + private function buildResults() { + $queries = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorApplicationTransactionQuery') + ->execute(); + + $phid_types = PhabricatorPHIDType::getAllTypes(); + + $results = array(); + foreach ($queries as $query) { + $query_type = $query->getTemplateApplicationTransaction() + ->getApplicationTransactionType(); + + $phid_type = idx($phid_types, $query_type); + + if ($phid_type) { + $name = $phid_type->getTypeName(); + $icon = $phid_type->getTypeIcon(); + } else { + $name = pht('%s ("%s")', $query_type, get_class($query)); + $icon = null; + } + + $result = id(new PhabricatorTypeaheadResult()) + ->setName($name) + ->setPHID($query_type); + + if ($icon) { + $result->setIcon($icon); + } + + $results[$query_type] = $result; + } + + return $results; + } + +}