store search in session (#2735)

* allow to detect used query filters
* allow to set label in action buttons
* allow to reset last search from session
* migrate invoice archive to new search system
* display number of used search filters
This commit is contained in:
Kevin Papst
2021-08-26 01:37:40 +02:00
committed by GitHub
parent 56524a9773
commit 98a3fc99a2
55 changed files with 365 additions and 81 deletions

View File

@@ -177,6 +177,15 @@ abstract class AbstractController extends BaseAbstractController implements Serv
return $this->get('session')->get($name);
}
private function removeLastSearch(BaseQuery $query): void
{
$name = 'search_' . $this->getSearchName($query);
if ($this->get('session')->has($name)) {
$this->get('session')->remove($name);
}
}
private function getSearchName(BaseQuery $query): string
{
return substr($query->getName(), 0, 50);
@@ -198,6 +207,13 @@ abstract class AbstractController extends BaseAbstractController implements Serv
throw new \InvalidArgumentException('handleSearchForm() requires an instanceof BaseQuery as form data');
}
if ($request->query->has('resetSearchFilter')) {
$data->resetFilter();
$this->removeLastSearch($data);
return true;
}
$submitData = $request->query->all();
// allow to use forms with block-prefix
if (!empty($formName = $form->getConfig()->getName()) && $request->request->has($formName)) {
@@ -228,6 +244,7 @@ abstract class AbstractController extends BaseAbstractController implements Serv
$submitData = array_merge($sessionSearch, $submitData);
} elseif ($bookmark !== null && !$request->query->has('setDefaultQuery')) {
$submitData = array_merge($bookmark->getContent(), $submitData);
$data->flagAsBookmarkSearch();
}
}
@@ -259,7 +276,9 @@ abstract class AbstractController extends BaseAbstractController implements Serv
}
}
$this->get('session')->set('search_' . $searchName, $params);
if ($request->query->has('performSearch')) {
$this->get('session')->set('search_' . $searchName, $params);
}
// filter stuff, that does not belong in a bookmark
$filter = ['page'];
@@ -270,6 +289,7 @@ abstract class AbstractController extends BaseAbstractController implements Serv
}
if ($request->query->has('setDefaultQuery')) {
$this->removeLastSearch($data);
if ($bookmark === null) {
$bookmark = new Bookmark();
$bookmark->setType(Bookmark::SEARCH_DEFAULT);

View File

@@ -134,11 +134,8 @@ class ExportController extends AbstractController
$end = $this->getDateTimeFactory()->getEndOfMonth();
$query = new ExportQuery();
$query->setOrder(ExportQuery::ORDER_ASC);
$query->setBegin($begin);
$query->setEnd($end);
$query->setState(ExportQuery::STATE_STOPPED);
$query->setExported(ExportQuery::STATE_NOT_EXPORTED);
$query->setCurrentUser($this->getUser());
return $query;

View File

@@ -188,10 +188,8 @@ final class InvoiceController extends AbstractController
$end = $factory->getEndOfMonth();
$query = new InvoiceQuery();
$query->setOrder(InvoiceQuery::ORDER_ASC);
$query->setBegin($begin);
$query->setEnd($end);
$query->setExported(InvoiceQuery::STATE_NOT_EXPORTED);
// limit access to data from teams
$query->setCurrentUser($this->getUser());
@@ -301,11 +299,8 @@ final class InvoiceController extends AbstractController
$query->setCurrentUser($this->getUser());
$form = $this->getArchiveToolbarForm($query);
$form->setData($query);
$form->submit($request->query->all(), false);
if (!$form->isValid()) {
$query->resetByFormError($form->getErrors());
if ($this->handleSearch($form, $request)) {
return $this->redirectToRoute('admin_invoice_list');
}
$invoices = $this->invoiceRepository->getPagerfantaForQuery($query);