add more filtering possibilities with order helper

This commit is contained in:
2021-10-28 00:11:05 +02:00
parent aea5e9b1d7
commit 97dbc4bc16
6 changed files with 127 additions and 79 deletions

View File

@@ -13,6 +13,11 @@ class FilterOrderHelper
private RequestStack $requestStack;
private ?array $searchBoxFields = null;
private array $checkboxes = [];
private ?array $submitted = null;
private ?string $formName = 'filter';
private string $formType = FilterOrderType::class;
private array $formOptions = [];
public function __construct(
FormFactoryInterface $formFactory,
@@ -45,10 +50,9 @@ class FilterOrderHelper
return $this;
}
public function getCheckbox(string $name): array
public function getCheckboxData(string $name): array
{
return $this->requestStack->getCurrentRequest()
->query->get('c_'.$name, $this->checkboxes[$name]['default']);
return $this->getFormData()['checkboxes'][$name];
}
public function getCheckboxes(): array
@@ -63,12 +67,23 @@ class FilterOrderHelper
private function getFormData(): array
{
$r = [
'q' => $this->getQueryString(),
];
if (NULL === $this->submitted) {
$this->submitted = $this->buildForm()
->getData();
}
return $this->submitted;
}
private function getDefaultData(): array
{
$r = [];
if ($this->hasSearchBox()) {
$r['q'] = '';
}
foreach ($this->checkboxes as $name => $c) {
$r[$name] = $this->getCheckbox($name);
$r['checkboxes'][$name] = $c['default'];
}
return $r;
@@ -76,21 +91,17 @@ class FilterOrderHelper
public function getQueryString(): ?string
{
$q = $this->requestStack->getCurrentRequest()
->query->get('q', null);
return empty($q) ? NULL : $q;
return $this->getFormData()['q'];
}
public function buildForm($name = null, string $type = FilterOrderType::class, array $options = []): FormInterface
public function buildForm(): FormInterface
{
$form = $this->formFactory
->createNamed($name, $type, $this->getFormData(), \array_merge([
return $this->formFactory
->createNamed($this->formName, $this->formType, $this->getDefaultData(), \array_merge([
'helper' => $this,
'method' => 'GET',
'csrf_protection' => false,
], $options));
return $form;
], $this->formOptions))
->handleRequest($this->requestStack->getCurrentRequest());
}
}