Basic changes to integrate ipl/stdlib/Filter and ipl/web/Filter

This commit is contained in:
Johannes Meyer 2020-10-30 15:02:24 +01:00
parent 0aacc44c2f
commit 4314f9decd
2 changed files with 31 additions and 9 deletions

View file

@ -15,6 +15,7 @@ use ipl\Orm\Resolver;
use ipl\Sql\Cursor;
use ipl\Sql\Expression;
use ipl\Sql\Select;
use ipl\Stdlib\Filter as StdlibFilter;
use ipl\Web\Control\SearchBar\Suggestions;
use PDO;
@ -77,11 +78,11 @@ class ObjectSuggestions extends Suggestions
{
$model = $this->getModel();
$quickFilter = Filter::matchAny();
$quickFilter = StdlibFilter::any();
foreach ($model->getSearchColumns() as $column) {
$where = Filter::where($model->getTableName() . '.' . $column, $searchTerm);
$where->metaData['label'] = $model->getMetaData()[$column];
$quickFilter->addFilter($where);
$where = StdlibFilter::equal($model->getTableName() . '.' . $column, $searchTerm);
$where->columnLabel = $model->getMetaData()[$column];
$quickFilter->add($where);
}
return $quickFilter;

View file

@ -20,11 +20,14 @@ use ipl\Orm\Common\SortUtil;
use ipl\Orm\Compat\FilterProcessor;
use ipl\Orm\Query;
use ipl\Stdlib\Contract\Paginatable;
use ipl\Stdlib\Filter\Condition;
use ipl\Stdlib\Filter\Rule;
use ipl\Web\Compat\CompatController;
use ipl\Web\Control\LimitControl;
use ipl\Web\Control\PaginationControl;
use ipl\Web\Control\SearchBar;
use ipl\Web\Control\SortControl;
use ipl\Web\Filter\QueryString;
use ipl\Web\Url;
class Controller extends CompatController
@ -127,16 +130,34 @@ class Controller extends CompatController
*
* @return SearchBar
*/
public function createSearchBar(array $preserveParams = null)
public function createSearchBar(Query $query, array $preserveParams = null)
{
$requestUrl = Url::fromRequest();
if ($preserveParams !== null) {
$requestUrl = $requestUrl->onlyWith($preserveParams);
}
$filter = QueryString::fromString($this->getFilter()->toQueryString())
->on(QueryString::ON_CONDITION, function (Condition $condition) use ($query) {
$path = $condition->getColumn();
if (strpos($path, '.vars.') !== false) {
list($target, $varName) = explode('.vars.', $path);
if (strpos($target, '.') === false) {
// Programmatically translated since the full definition is available in class ObjectSuggestions
$condition->columnLabel = sprintf(t(ucfirst($target) . ' %s', '..<customvar-name>'), $varName);
}
} else {
$metaData = $query->getResolver()->getMetaData($query->getModel());
if (isset($metaData[$path])) {
$condition->columnLabel = $metaData[$path];
}
}
})
->parse();
$searchBar = new SearchBar();
$searchBar->setSubmitLabel(t('Search'));
$searchBar->setFilter($this->getFilter());
$searchBar->setFilter($filter);
$searchBar->setAction($requestUrl->getAbsoluteUrl());
$searchBar->setIdProtector([$this->getRequest(), 'protectId']);
@ -149,7 +170,7 @@ class Controller extends CompatController
$searchBar->on(SearchBar::ON_SENT, function (SearchBar $form) use ($requestUrl) {
$existingParams = $requestUrl->getParams();
$requestUrl->setQueryString($form->getFilter()->toQueryString());
$requestUrl->setQueryString(QueryString::render($form->getFilter()));
foreach ($existingParams->toArray(false) as $name => $value) {
if (is_int($name)) {
$name = $value;
@ -320,12 +341,12 @@ class Controller extends CompatController
return parent::addContent($content);
}
public function filter(Query $query, Filter $filter = null)
public function filter(Query $query, Rule $filter = null)
{
$this->applyMonitoringRestriction($query);
FilterProcessor::apply(
$filter ?: $this->getFilter(),
$filter ? Filter::fromQueryString(QueryString::render($filter)) : $this->getFilter(),
$query
);