From d3a42cd98966626f269c4783da2f7600390e547d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 20 Aug 2022 00:10:41 +0200 Subject: [PATCH] Added filters for creationDate and lastModified state --- .../Constraints/DateTimeConstraint.php | 10 +++ .../Filters/Constraints/NumberConstraint.php | 16 ++-- src/DataTables/Filters/PartFilter.php | 29 ++++++- .../Constraints/DateTimeConstraintType.php | 76 +++++++++++++++++++ src/Form/Filters/PartFilterType.php | 11 +++ templates/Form/FilterTypesLayout.html.twig | 4 + 6 files changed, 137 insertions(+), 9 deletions(-) create mode 100644 src/DataTables/Filters/Constraints/DateTimeConstraint.php create mode 100644 src/Form/Filters/Constraints/DateTimeConstraintType.php diff --git a/src/DataTables/Filters/Constraints/DateTimeConstraint.php b/src/DataTables/Filters/Constraints/DateTimeConstraint.php new file mode 100644 index 00000000..4cc3f50f --- /dev/null +++ b/src/DataTables/Filters/Constraints/DateTimeConstraint.php @@ -0,0 +1,10 @@ +description; } + /** + * @return DateTimeConstraint + */ + public function getLastModified(): DateTimeConstraint + { + return $this->lastModified; + } + + /** + * @return DateTimeConstraint + */ + public function getAddedDate(): DateTimeConstraint + { + return $this->addedDate; + } + + + public function __construct() { - $this->favorite = new BooleanConstraint('part.favorite'); + $this->favorite = $this->needsReview = new BooleanConstraint('part.needs_review'); $this->mass = new NumberConstraint('part.mass'); $this->name = new TextConstraint('part.name'); $this->description = new TextConstraint('part.description'); + $this->addedDate = new DateTimeConstraint('part.addedDate'); + $this->lastModified = new DateTimeConstraint('part.lastModified'); } public function apply(QueryBuilder $queryBuilder): void diff --git a/src/Form/Filters/Constraints/DateTimeConstraintType.php b/src/Form/Filters/Constraints/DateTimeConstraintType.php new file mode 100644 index 00000000..9cc805b6 --- /dev/null +++ b/src/Form/Filters/Constraints/DateTimeConstraintType.php @@ -0,0 +1,76 @@ +setDefaults([ + 'compound' => true, + 'data_class' => DateTimeConstraint::class, + 'text_suffix' => '', // An suffix which is attached as text-append to the input group. This can for example be used for units + + 'value1_options' => [], // Options for the first value input + 'value2_options' => [], // Options for the second value input + ]); + } + + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $choices = [ + '' => '', + '=' => '=', + '!=' => '!=', + '<' => '<', + '>' => '>', + '<=' => '<=', + '>=' => '>=', + 'BETWEEN' => 'BETWEEN', + ]; + + $builder->add('value1', DateTimeType::class, array_merge_recursive([ + 'label' => 'filter.datetime_constraint.value1', + 'attr' => [ + 'placeholder' => 'filter.datetime_constraint.value1', + ], + 'required' => false, + 'html5' => true, + 'widget' => 'single_text', + ], $options['value1_options'])); + + $builder->add('value2', DateTimeType::class, array_merge_recursive([ + 'label' => 'filter.datetime_constraint.value2', + 'attr' => [ + 'placeholder' => 'filter.datetime_constraint.value2', + ], + 'required' => false, + 'html5' => true, + 'widget' => 'single_text', + ], $options['value2_options'])); + + $builder->add('operator', ChoiceType::class, [ + 'label' => 'filter.datetime_constraint.operator', + 'choices' => $choices, + 'required' => false, + ]); + } + + public function buildView(FormView $view, FormInterface $form, array $options) + { + parent::buildView($view, $form, $options); + + $view->vars['text_suffix'] = $options['text_suffix']; + } +} \ No newline at end of file diff --git a/src/Form/Filters/PartFilterType.php b/src/Form/Filters/PartFilterType.php index dcd5ce78..ffa76976 100644 --- a/src/Form/Filters/PartFilterType.php +++ b/src/Form/Filters/PartFilterType.php @@ -4,9 +4,11 @@ namespace App\Form\Filters; use App\DataTables\Filters\PartFilter; use App\Form\Filters\Constraints\BooleanConstraintType; +use App\Form\Filters\Constraints\DateTimeConstraintType; use App\Form\Filters\Constraints\NumberConstraintType; use App\Form\Filters\Constraints\TextConstraintType; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\DateTimeType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\SubmitButton; @@ -47,6 +49,15 @@ class PartFilterType extends AbstractType 'label' => 'part.edit.description', ]); + $builder->add('lastModified', DateTimeConstraintType::class, [ + 'label' => 'lastModified' + ]); + + $builder->add('addedDate', DateTimeConstraintType::class, [ + 'label' => 'createdAt' + ]); + + $builder->add('submit', SubmitType::class, [ 'label' => 'Update', ]); diff --git a/templates/Form/FilterTypesLayout.html.twig b/templates/Form/FilterTypesLayout.html.twig index 9344cdc7..46dc7e5f 100644 --- a/templates/Form/FilterTypesLayout.html.twig +++ b/templates/Form/FilterTypesLayout.html.twig @@ -18,4 +18,8 @@ {{ form.vars["text_suffix"] }} {% endif %} +{% endblock %} + +{% block date_time_constraint_widget %} + {{ block('number_constraint_widget') }} {% endblock %} \ No newline at end of file