diff --git a/src/Bundle/ChillMainBundle/Form/Type/Listing/FilterOrderType.php b/src/Bundle/ChillMainBundle/Form/Type/Listing/FilterOrderType.php
index 139328b7c..3af4474ff 100644
--- a/src/Bundle/ChillMainBundle/Form/Type/Listing/FilterOrderType.php
+++ b/src/Bundle/ChillMainBundle/Form/Type/Listing/FilterOrderType.php
@@ -17,6 +17,7 @@ use Chill\MainBundle\Templating\Listing\FilterOrderHelper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
+use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\SearchType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
@@ -129,6 +130,23 @@ final class FilterOrderType extends \Symfony\Component\Form\AbstractType
$builder->add($userPickersBuilder);
}
+
+ if ([] !== $helper->getIntegerFields()) {
+ $integerFieldBuilder = $builder->create('integer_fields', null, ['compound' => true]);
+ foreach ($helper->getIntegerFields() as $name => ['label' => $label, 'options' => $opts]) {
+ $integerFieldBuilder->add(
+ $name,
+ IntegerType::class,
+ [
+ 'label' => $label,
+ 'required' => false,
+ ...$opts,
+ ]
+ );
+ }
+
+ $builder->add($integerFieldBuilder);
+ }
}
public static function buildCheckboxChoices(array $choices, array $trans = []): array
diff --git a/src/Bundle/ChillMainBundle/Resources/views/FilterOrder/base.html.twig b/src/Bundle/ChillMainBundle/Resources/views/FilterOrder/base.html.twig
index 555cb7da1..4083c1756 100644
--- a/src/Bundle/ChillMainBundle/Resources/views/FilterOrder/base.html.twig
+++ b/src/Bundle/ChillMainBundle/Resources/views/FilterOrder/base.html.twig
@@ -115,6 +115,23 @@
{% endfor %}
{% endif %}
+ {% if form.integer_fields is defined %}
+ {% set btnSubmit = 1 %}
+ {% for name, _o in form.integer_fields %}
+
+ {% if form.integer_fields[name].vars.label is not same as(false) %}
+ {{ form_label(form.integer_fields[name]) }}
+ {% else %}
+ {{ form_label(form.integer_fields[name].vars.label) }}
+ {% endif %}
+
+ {{ form_widget(form.integer_fields[name]) }}
+
+
+ {% endfor %}
+
+ {% endif %}
+
{% if btnSubmit == 1 %}
diff --git a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderGetActiveFilterHelper.php b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderGetActiveFilterHelper.php
index 4ca9eda41..1612dd3b1 100644
--- a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderGetActiveFilterHelper.php
+++ b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderGetActiveFilterHelper.php
@@ -14,6 +14,7 @@ namespace Chill\MainBundle\Templating\Listing;
use Chill\MainBundle\Templating\Entity\UserRender;
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
use Symfony\Component\PropertyAccess\PropertyPathInterface;
+use Symfony\Contracts\Translation\TranslatableInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
final readonly class FilterOrderGetActiveFilterHelper
@@ -85,6 +86,13 @@ final readonly class FilterOrderGetActiveFilterHelper
}
}
+ foreach ($filterOrderHelper->getIntegerFields() as $name => ['label' => $label]) {
+ if (null !== $integerData = $filterOrderHelper->getIntegerField($name)) {
+ $translated = $label instanceof TranslatableInterface ? $label->trans($this->translator) : $this->translator->trans($label);
+ $result[] = ['label' => $translated, 'position' => FilterOrderPositionEnum::IntegerField->value, 'name' => $name, 'value' => $integerData];
+ }
+ }
+
return $result;
}
}
diff --git a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelper.php b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelper.php
index 993fd871d..9dc594209 100644
--- a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelper.php
+++ b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelper.php
@@ -40,15 +40,20 @@ final class FilterOrderHelper
private ?array $submitted = null;
/**
- * @var array
+ * @var array
*/
private array $entityChoices = [];
/**
- * @var array
+ * @var array
*/
private array $userPickers = [];
+ /**
+ * @var array
+ */
+ private array $integerFields = [];
+
public function __construct(
private readonly FormFactoryInterface $formFactory,
private readonly RequestStack $requestStack,
@@ -122,6 +127,11 @@ final class FilterOrderHelper
return $this->userPickers;
}
+ public function getIntegerField(string $name): ?int
+ {
+ return $this->getFormData()['integer_fields'][$name];
+ }
+
/**
* @return list
*/
@@ -213,6 +223,23 @@ final class FilterOrderHelper
return $this;
}
+ public function addIntegerField(string $name, string|TranslatableInterface|null $label, array $options): self
+ {
+ $this->integerFields[$name] = ['label' => $label, 'options' => $options];
+
+ return $this;
+ }
+
+ public function getIntegerFields(): array
+ {
+ return $this->integerFields;
+ }
+
+ public function getIntegerFieldData(string $name): ?int
+ {
+ return $this->getFormData()['integer_fields'][$name];
+ }
+
private function getDefaultData(): array
{
$r = [
@@ -221,6 +248,7 @@ final class FilterOrderHelper
'single_checkboxes' => [],
'entity_choices' => [],
'user_pickers' => [],
+ 'integer_fields' => [],
];
if ($this->hasSearchBox()) {
@@ -248,6 +276,10 @@ final class FilterOrderHelper
$r['user_pickers'][$name] = ($u['options']['multiple'] ?? true) ? [] : null;
}
+ foreach ($this->integerFields as $name => $c) {
+ $r['integer_fields'][$name] = null;
+ }
+
return $r;
}
diff --git a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelperBuilder.php b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelperBuilder.php
index 010b17217..0fcb6b681 100644
--- a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelperBuilder.php
+++ b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelperBuilder.php
@@ -24,20 +24,25 @@ class FilterOrderHelperBuilder
private ?array $searchBoxFields = null;
/**
- * @var array
+ * @var array
*/
private array $singleCheckboxes = [];
/**
- * @var array
+ * @var array
*/
private array $entityChoices = [];
/**
- * @var array
+ * @var array
*/
private array $userPickers = [];
+ /**
+ * @var array
+ */
+ private array $integerField = [];
+
public function __construct(private readonly FormFactoryInterface $formFactory, private readonly RequestStack $requestStack) {}
public function addSingleCheckbox(string $name, string|TranslatableInterface $label): self
@@ -71,6 +76,13 @@ class FilterOrderHelperBuilder
return $this;
}
+ public function addIntegerField(string $name, string|TranslatableInterface|null $label = null, array $options = []): self
+ {
+ $this->integerField[$name] = ['label' => $label, 'options' => $options];
+
+ return $this;
+ }
+
public function addSearchBox(?array $fields = [], ?array $options = []): self
{
$this->searchBoxFields = $fields;
@@ -135,6 +147,10 @@ class FilterOrderHelperBuilder
$helper->addUserPicker($name, $label, $options);
}
+ foreach ($this->integerField as $name => $label) {
+ $helper->addIntegerField($name, $label['label'], $label['options']);
+ }
+
return $helper;
}
}
diff --git a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderPositionEnum.php b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderPositionEnum.php
index ed2337f1d..0c6ae9778 100644
--- a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderPositionEnum.php
+++ b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderPositionEnum.php
@@ -19,4 +19,6 @@ enum FilterOrderPositionEnum: string
case EntityChoice = 'entity_choice';
case SingleCheckbox = 'single_checkbox';
case UserPicker = 'user_picker';
+
+ case IntegerField = 'integer_field';
}