mirror of
https://github.com/flarum/framework.git
synced 2024-11-29 12:43:52 +08:00
Merge pull request #2684 from flarum/as/filter-mutator-consistency
Make filter mutator API consistent with search mutator API.
This commit is contained in:
commit
a419c5804a
|
@ -62,6 +62,7 @@ abstract class AbstractFilterer
|
|||
$filterKey = substr($filterKey, 1);
|
||||
}
|
||||
foreach (Arr::get($this->filters, $filterKey, []) as $filter) {
|
||||
$filterState->addActiveFilter($filter);
|
||||
$filter->filter($filterState, $filterValue, $negate);
|
||||
}
|
||||
}
|
||||
|
@ -77,7 +78,7 @@ abstract class AbstractFilterer
|
|||
// END DEPRECATED BC LAYER
|
||||
|
||||
foreach ($this->filterMutators as $mutator) {
|
||||
$mutator($query, $actor, $criteria->query, $criteria->sort);
|
||||
$mutator($filterState, $criteria);
|
||||
}
|
||||
|
||||
// Execute the filter query and retrieve the results. We get one more
|
||||
|
|
|
@ -13,4 +13,29 @@ use Flarum\Query\AbstractQueryState;
|
|||
|
||||
class FilterState extends AbstractQueryState
|
||||
{
|
||||
/**
|
||||
* @var FilterInterface[]
|
||||
*/
|
||||
protected $activeFilters = [];
|
||||
|
||||
/**
|
||||
* Get a list of the filters that are active.
|
||||
*
|
||||
* @return FilterInterface[]
|
||||
*/
|
||||
public function getActiveFilters()
|
||||
{
|
||||
return $this->activeFilters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a filter as being active.
|
||||
*
|
||||
* @param FilterInterface $filter
|
||||
* @return void
|
||||
*/
|
||||
public function addActiveFilter(FilterInterface $filter)
|
||||
{
|
||||
$this->activeFilters[] = $filter;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,10 +75,14 @@ class Index
|
|||
|
||||
$params = [
|
||||
'sort' => $sort && isset($sortMap[$sort]) ? $sortMap[$sort] : '',
|
||||
'filter' => compact('q'),
|
||||
'filter' => [],
|
||||
'page' => ['offset' => ($page - 1) * 20, 'limit' => 20]
|
||||
];
|
||||
|
||||
if ($q) {
|
||||
$params['filter']['q'] = $q;
|
||||
}
|
||||
|
||||
$apiDocument = $this->getApiDocument($request->getAttribute('actor'), $params);
|
||||
$defaultRoute = $this->settings->get('default_route');
|
||||
|
||||
|
|
|
@ -84,8 +84,8 @@ class FilterTest extends TestCase
|
|||
*/
|
||||
public function filter_mutator_has_effect_if_added()
|
||||
{
|
||||
$this->extend((new Extend\Filter(DiscussionFilterer::class))->addFilterMutator(function ($query, $actor, $filters, $sort) {
|
||||
$query->getQuery()->whereRaw('1=0');
|
||||
$this->extend((new Extend\Filter(DiscussionFilterer::class))->addFilterMutator(function ($filterState, $criteria) {
|
||||
$filterState->getQuery()->whereRaw('1=0');
|
||||
}));
|
||||
|
||||
$this->prepDb();
|
||||
|
@ -127,8 +127,8 @@ class NoResultFilter implements FilterInterface
|
|||
|
||||
class CustomFilterMutator
|
||||
{
|
||||
public function __invoke($query, $actor, $filters, $sort)
|
||||
public function __invoke($filterState, $criteria)
|
||||
{
|
||||
$query->getQuery()->whereRaw('1=0');
|
||||
$filterState->getQuery()->whereRaw('1=0');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user