mirror of
https://github.com/flarum/core.git
synced 2025-08-26 01:34:16 +02:00
Search Filter Split, Use Same Controller (#2454)
This commit is contained in:
committed by
GitHub
parent
1c578a83e4
commit
023871ef86
74
src/Extend/Filter.php
Normal file
74
src/Extend/Filter.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* For detailed copyright and license information, please view the
|
||||
* LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Extend;
|
||||
|
||||
use Flarum\Extension\Extension;
|
||||
use Illuminate\Contracts\Container\Container;
|
||||
|
||||
class Filter implements ExtenderInterface
|
||||
{
|
||||
private $filtererClass;
|
||||
private $filters = [];
|
||||
private $filterMutators = [];
|
||||
|
||||
/**
|
||||
* @param string $filtererClass: The ::class attribute of the filterer to extend
|
||||
*/
|
||||
public function __construct($filtererClass)
|
||||
{
|
||||
$this->filtererClass = $filtererClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a filter to run when the filtererClass is filtered.
|
||||
*
|
||||
* @param string $filterClass: The ::class attribute of the filter you are adding.
|
||||
*/
|
||||
public function addFilter(string $filterClass)
|
||||
{
|
||||
$this->filters[] = $filterClass;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a callback through which to run all filter queries after filters have been applied.
|
||||
*
|
||||
* @param callable|string $callback
|
||||
*
|
||||
* The callback can be a closure or an invokable class, and should accept:
|
||||
* - Flarum\Filter\FilterState $filter
|
||||
* - Flarum\Search\SearchCriteria $criteria
|
||||
*/
|
||||
public function addFilterMutator($callback)
|
||||
{
|
||||
$this->filterMutators[] = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function extend(Container $container, Extension $extension = null)
|
||||
{
|
||||
$container->extend('flarum.filter.filters', function ($originalFilters) {
|
||||
foreach ($this->filters as $filter) {
|
||||
$originalFilters[$this->filtererClass][] = $filter;
|
||||
}
|
||||
|
||||
return $originalFilters;
|
||||
});
|
||||
$container->extend('flarum.filter.filter_mutators', function ($originalMutators) {
|
||||
foreach ($this->filterMutators as $mutator) {
|
||||
$originalMutators[$this->filtererClass][] = $mutator;
|
||||
}
|
||||
|
||||
return $originalMutators;
|
||||
});
|
||||
}
|
||||
}
|
@@ -60,7 +60,7 @@ class SimpleFlarumSearch implements ExtenderInterface
|
||||
* @param callable|string $callback
|
||||
*
|
||||
* The callback can be a closure or an invokable class, and should accept:
|
||||
* - Flarum\Search\AbstractSearch $search
|
||||
* - Flarum\Search\SearchState $search
|
||||
* - Flarum\Search\SearchCriteria $criteria
|
||||
*/
|
||||
public function addSearchMutator($callback)
|
||||
|
Reference in New Issue
Block a user