mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-07-21 11:24:40 +02:00
Added the very basic foundations for a filter system
This commit is contained in:
parent
ef389dcc15
commit
f9d945c4c7
15 changed files with 460 additions and 5 deletions
28
src/Form/Filters/Constraints/BooleanConstraintType.php
Normal file
28
src/Form/Filters/Constraints/BooleanConstraintType.php
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace App\Form\Filters\Constraints;
|
||||
|
||||
use App\DataTables\Filters\Constraints\BooleanConstraint;
|
||||
use App\Form\Type\TriStateCheckboxType;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class BooleanConstraintType extends AbstractType
|
||||
{
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'compound' => true,
|
||||
'data_class' => BooleanConstraint::class,
|
||||
]);
|
||||
}
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder->add('value', TriStateCheckboxType::class, [
|
||||
'label' => $options['label'],
|
||||
'required' => false,
|
||||
]);
|
||||
}
|
||||
}
|
57
src/Form/Filters/Constraints/NumberConstraintType.php
Normal file
57
src/Form/Filters/Constraints/NumberConstraintType.php
Normal file
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
namespace App\Form\Filters\Constraints;
|
||||
|
||||
use App\DataTables\Filters\Constraints\NumberConstraint;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\NumberType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class NumberConstraintType extends AbstractType
|
||||
{
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'compound' => true,
|
||||
'data_class' => NumberConstraint::class,
|
||||
]);
|
||||
}
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$choices = [
|
||||
'=' => '=',
|
||||
'!=' => '!=',
|
||||
'<' => '<',
|
||||
'>' => '>',
|
||||
'<=' => '<=',
|
||||
'>=' => '>=',
|
||||
'BETWEEN' => 'BETWEEN',
|
||||
];
|
||||
|
||||
$builder->add('value1', NumberType::class, [
|
||||
'label' => 'filter.number_constraint.value1',
|
||||
'attr' => [
|
||||
'placeholder' => 'filter.number_constraint.value1',
|
||||
],
|
||||
'required' => false,
|
||||
'html5' => true,
|
||||
]);
|
||||
$builder->add('value2', NumberType::class, [
|
||||
'label' => 'filter.number_constraint.value2',
|
||||
'attr' => [
|
||||
'placeholder' => 'filter.number_constraint.value2',
|
||||
],
|
||||
'required' => false,
|
||||
'html5' => true,
|
||||
]);
|
||||
$builder->add('operator', ChoiceType::class, [
|
||||
'label' => 'filter.number_constraint.operator',
|
||||
'choices' => $choices,
|
||||
]);
|
||||
}
|
||||
}
|
43
src/Form/Filters/PartFilterType.php
Normal file
43
src/Form/Filters/PartFilterType.php
Normal file
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
namespace App\Form\Filters;
|
||||
|
||||
use App\DataTables\Filters\PartFilter;
|
||||
use App\Form\Filters\Constraints\BooleanConstraintType;
|
||||
use App\Form\Filters\Constraints\NumberConstraintType;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\SubmitButton;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class PartFilterType extends AbstractType
|
||||
{
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'compound' => true,
|
||||
'data_class' => PartFilter::class,
|
||||
'csrf_protection' => false,
|
||||
]);
|
||||
}
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder->add('favorite', BooleanConstraintType::class, [
|
||||
'label' => 'part.edit.is_favorite'
|
||||
]);
|
||||
|
||||
$builder->add('needsReview', BooleanConstraintType::class, [
|
||||
'label' => 'part.edit.needs_review'
|
||||
]);
|
||||
|
||||
$builder->add('mass', NumberConstraintType::class, [
|
||||
'label' => 'part.edit.mass'
|
||||
]);
|
||||
|
||||
$builder->add('submit', SubmitType::class, [
|
||||
'label' => 'Update',
|
||||
]);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue