mirror of
https://we.phorge.it/source/phorge.git
synced 2025-04-09 19:08:40 +02:00
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
This commit is contained in:
parent
2e5b1885e7
commit
16537f7b32
4 changed files with 95 additions and 3 deletions
|
@ -4809,6 +4809,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorTransactionsApplication' => 'applications/transactions/application/PhabricatorTransactionsApplication.php',
|
'PhabricatorTransactionsApplication' => 'applications/transactions/application/PhabricatorTransactionsApplication.php',
|
||||||
'PhabricatorTransactionsDestructionEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsDestructionEngineExtension.php',
|
'PhabricatorTransactionsDestructionEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsDestructionEngineExtension.php',
|
||||||
'PhabricatorTransactionsFulltextEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php',
|
'PhabricatorTransactionsFulltextEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php',
|
||||||
|
'PhabricatorTransactionsObjectTypeDatasource' => 'applications/transactions/typeahead/PhabricatorTransactionsObjectTypeDatasource.php',
|
||||||
'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php',
|
'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php',
|
||||||
'PhabricatorTranslationSetting' => 'applications/settings/setting/PhabricatorTranslationSetting.php',
|
'PhabricatorTranslationSetting' => 'applications/settings/setting/PhabricatorTranslationSetting.php',
|
||||||
'PhabricatorTranslationsConfigOptions' => 'applications/config/option/PhabricatorTranslationsConfigOptions.php',
|
'PhabricatorTranslationsConfigOptions' => 'applications/config/option/PhabricatorTranslationsConfigOptions.php',
|
||||||
|
@ -11158,6 +11159,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorTransactionsApplication' => 'PhabricatorApplication',
|
'PhabricatorTransactionsApplication' => 'PhabricatorApplication',
|
||||||
'PhabricatorTransactionsDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension',
|
'PhabricatorTransactionsDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension',
|
||||||
'PhabricatorTransactionsFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension',
|
'PhabricatorTransactionsFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension',
|
||||||
|
'PhabricatorTransactionsObjectTypeDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||||
'PhabricatorTransformedFile' => 'PhabricatorFileDAO',
|
'PhabricatorTransformedFile' => 'PhabricatorFileDAO',
|
||||||
'PhabricatorTranslationSetting' => 'PhabricatorOptionGroupSetting',
|
'PhabricatorTranslationSetting' => 'PhabricatorOptionGroupSetting',
|
||||||
'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
||||||
|
|
|
@ -5,6 +5,7 @@ final class PhabricatorFeedTransactionQuery
|
||||||
|
|
||||||
private $phids;
|
private $phids;
|
||||||
private $authorPHIDs;
|
private $authorPHIDs;
|
||||||
|
private $objectTypes;
|
||||||
private $createdMin;
|
private $createdMin;
|
||||||
private $createdMax;
|
private $createdMax;
|
||||||
|
|
||||||
|
@ -18,6 +19,11 @@ final class PhabricatorFeedTransactionQuery
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function withObjectTypes(array $types) {
|
||||||
|
$this->objectTypes = $types;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function withDateCreatedBetween($min, $max) {
|
public function withDateCreatedBetween($min, $max) {
|
||||||
$this->createdMin = $min;
|
$this->createdMin = $min;
|
||||||
$this->createdMax = $max;
|
$this->createdMax = $max;
|
||||||
|
@ -158,12 +164,24 @@ final class PhabricatorFeedTransactionQuery
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$object_types = $this->objectTypes;
|
||||||
|
if ($object_types) {
|
||||||
|
$object_types = array_fuse($object_types);
|
||||||
|
}
|
||||||
|
|
||||||
$results = array();
|
$results = array();
|
||||||
foreach ($queries as $query) {
|
foreach ($queries as $query) {
|
||||||
if ($type_map) {
|
$query_type = $query->getTemplateApplicationTransaction()
|
||||||
$type = $query->getTemplateApplicationTransaction()
|
|
||||||
->getApplicationTransactionType();
|
->getApplicationTransactionType();
|
||||||
if (!isset($type_map[$type])) {
|
|
||||||
|
if ($type_map) {
|
||||||
|
if (!isset($type_map[$query_type])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object_types) {
|
||||||
|
if (!isset($object_types[$query_type])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,11 @@ final class PhabricatorFeedTransactionSearchEngine
|
||||||
->setLabel(pht('Authors'))
|
->setLabel(pht('Authors'))
|
||||||
->setKey('authorPHIDs')
|
->setKey('authorPHIDs')
|
||||||
->setAliases(array('author', 'authors')),
|
->setAliases(array('author', 'authors')),
|
||||||
|
id(new PhabricatorSearchDatasourceField())
|
||||||
|
->setLabel(pht('Object Types'))
|
||||||
|
->setKey('objectTypes')
|
||||||
|
->setAliases(array('objectType'))
|
||||||
|
->setDatasource(new PhabricatorTransactionsObjectTypeDatasource()),
|
||||||
id(new PhabricatorSearchDateField())
|
id(new PhabricatorSearchDateField())
|
||||||
->setLabel(pht('Created After'))
|
->setLabel(pht('Created After'))
|
||||||
->setKey('createdStart'),
|
->setKey('createdStart'),
|
||||||
|
@ -37,6 +42,10 @@ final class PhabricatorFeedTransactionSearchEngine
|
||||||
$query->withAuthorPHIDs($map['authorPHIDs']);
|
$query->withAuthorPHIDs($map['authorPHIDs']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($map['objectTypes']) {
|
||||||
|
$query->withObjectTypes($map['objectTypes']);
|
||||||
|
}
|
||||||
|
|
||||||
$created_min = $map['createdStart'];
|
$created_min = $map['createdStart'];
|
||||||
$created_max = $map['createdEnd'];
|
$created_max = $map['createdEnd'];
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorTransactionsObjectTypeDatasource
|
||||||
|
extends PhabricatorTypeaheadDatasource {
|
||||||
|
|
||||||
|
public function getBrowseTitle() {
|
||||||
|
return pht('Browse Forms');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPlaceholderText() {
|
||||||
|
return pht('Type an object type name...');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDatasourceApplicationClass() {
|
||||||
|
return 'PhabricatorTransactionsApplication';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function renderSpecialTokens(array $values) {
|
||||||
|
return $this->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue