From dc1ec02a4dd2ac459ad578357d84c967f9d6a02c Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Wed, 24 Jul 2019 17:21:36 +0200 Subject: [PATCH] [IndexBundle] split conditions into pre_conditions and user_conditions #690 --- .../Controller/FilterController.php | 15 ++++- .../IndexBundle/CoreShopIndexBundle.php | 4 ++ .../RegisterFilterConditionTypesPass.php | 19 +++--- .../RegisterFilterPreConditionTypesPass.php | 30 ++++++++++ .../RegisterFilterUserConditionTypesPass.php | 30 ++++++++++ .../CoreShopIndexExtension.php | 14 +++++ ...e.php => FilterPreConditionNestedType.php} | 22 ++----- .../Filter/FilterUserConditionNestedType.php | 49 +++++++++++++++ .../Form/Type/FilterConditionType.php | 2 +- .../Type/FilterPreConditionChoiceType.php | 59 +++++++++++++++++++ ...p => FilterPreConditionCollectionType.php} | 6 +- .../Form/Type/FilterPreConditionType.php | 45 ++++++++++++++ .../IndexBundle/Form/Type/FilterType.php | 4 +- .../Type/FilterUserConditionChoiceType.php | 59 +++++++++++++++++++ .../FilterUserConditionCollectionType.php | 34 +++++++++++ .../Form/Type/FilterUserConditionType.php | 45 ++++++++++++++ .../IndexBundle/Resources/config/services.yml | 31 +++++++--- .../Resources/config/services/form.yml | 50 ++++++++++++---- .../public/pimcore/js/filter/item.js | 4 +- .../public/pimcore/js/filter/panel.js | 3 +- .../FilterPreConditionProcessorInterface.php | 18 ++++++ .../Index/Filter/FilterProcessor.php | 33 ++++++++--- .../FilterUserConditionProcessorInterface.php | 18 ++++++ 23 files changed, 530 insertions(+), 64 deletions(-) create mode 100644 src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterPreConditionTypesPass.php create mode 100644 src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterUserConditionTypesPass.php rename src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/{FilterConditionNestedType.php => FilterPreConditionNestedType.php} (67%) create mode 100644 src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterUserConditionNestedType.php create mode 100755 src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionChoiceType.php rename src/CoreShop/Bundle/IndexBundle/Form/Type/{FilterConditionCollectionType.php => FilterPreConditionCollectionType.php} (79%) create mode 100644 src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionType.php create mode 100755 src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionChoiceType.php create mode 100755 src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionCollectionType.php create mode 100644 src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionType.php create mode 100644 src/CoreShop/Component/Index/Filter/FilterPreConditionProcessorInterface.php create mode 100644 src/CoreShop/Component/Index/Filter/FilterUserConditionProcessorInterface.php diff --git a/src/CoreShop/Bundle/IndexBundle/Controller/FilterController.php b/src/CoreShop/Bundle/IndexBundle/Controller/FilterController.php index 39ad1a5cbc..7cf369b519 100644 --- a/src/CoreShop/Bundle/IndexBundle/Controller/FilterController.php +++ b/src/CoreShop/Bundle/IndexBundle/Controller/FilterController.php @@ -30,7 +30,8 @@ public function getConfigAction() return $this->viewHandler->handle( [ 'success' => true, - 'conditions' => array_keys($this->getConditionTypes()), + 'pre_conditions' => array_keys($this->getPreConditionTypes()), + 'user_conditions' => array_keys($this->getUserConditionTypes()), ] ); } @@ -89,8 +90,16 @@ public function getValuesForFilterFieldAction(Request $request) /** * @return array */ - protected function getConditionTypes() + protected function getPreConditionTypes() { - return $this->getParameter('coreshop.filter.condition_types'); + return $this->getParameter('coreshop.filter.pre_condition_types'); + } + + /** + * @return array + */ + protected function getUserConditionTypes() + { + return $this->getParameter('coreshop.filter.user_condition_types'); } } diff --git a/src/CoreShop/Bundle/IndexBundle/CoreShopIndexBundle.php b/src/CoreShop/Bundle/IndexBundle/CoreShopIndexBundle.php index dc0c30ce6c..39be2d014a 100644 --- a/src/CoreShop/Bundle/IndexBundle/CoreShopIndexBundle.php +++ b/src/CoreShop/Bundle/IndexBundle/CoreShopIndexBundle.php @@ -16,6 +16,8 @@ use CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler\RegisterExtensionsPass; use CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler\RegisterColumnTypePass; use CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler\RegisterFilterConditionTypesPass; +use CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler\RegisterFilterPreConditionTypesPass; +use CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler\RegisterFilterUserConditionTypesPass; use CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler\RegisterGetterPass; use CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler\RegisterIndexWorkerPass; use CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler\RegisterInterpreterPass; @@ -65,6 +67,8 @@ public function build(ContainerBuilder $container) $container->addCompilerPass(new RegisterExtensionsPass()); $container->addCompilerPass(new RegisterConditionRendererTypesPass()); $container->addCompilerPass(new RegisterOrderRendererTypesPass()); + $container->addCompilerPass(new RegisterFilterPreConditionTypesPass()); + $container->addCompilerPass(new RegisterFilterUserConditionTypesPass()); } /** diff --git a/src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterConditionTypesPass.php b/src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterConditionTypesPass.php index 8198799d62..16c0133506 100644 --- a/src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterConditionTypesPass.php +++ b/src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterConditionTypesPass.php @@ -12,19 +12,20 @@ namespace CoreShop\Bundle\IndexBundle\DependencyInjection\Compiler; -use CoreShop\Bundle\PimcoreBundle\DependencyInjection\Compiler\RegisterRegistryTypePass; +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; -class RegisterFilterConditionTypesPass extends RegisterRegistryTypePass +class RegisterFilterConditionTypesPass implements CompilerPassInterface { public const INDEX_FILTER_CONDITION_TAG = 'coreshop.filter.condition_type'; - public function __construct() + public function process(ContainerBuilder $container) { - parent::__construct( - 'coreshop.registry.filter.condition_types', - 'coreshop.form_registry.filter.condition_types', - 'coreshop.filter.condition_types', - self::INDEX_FILTER_CONDITION_TAG - ); + foreach ($container->findTaggedServiceIds(self::INDEX_FILTER_CONDITION_TAG) as $id => $attributes) { + $definition = $container->findDefinition($id); + + $definition->addTag('coreshop.filter.user_condition_type', $attributes[0]); + $definition->addTag('coreshop.filter.pre_condition_type', $attributes[0]); + } } } diff --git a/src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterPreConditionTypesPass.php b/src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterPreConditionTypesPass.php new file mode 100644 index 0000000000..b831be0f83 --- /dev/null +++ b/src/CoreShop/Bundle/IndexBundle/DependencyInjection/Compiler/RegisterFilterPreConditionTypesPass.php @@ -0,0 +1,30 @@ +addTag(RegisterFilterConditionTypesPass::INDEX_FILTER_CONDITION_TAG) ; + $container + ->registerForAutoconfiguration(FilterPreConditionProcessorInterface::class) + ->addTag(RegisterFilterPreConditionTypesPass::INDEX_FILTER_PRE_CONDITION_TAG) + ; + + $container + ->registerForAutoconfiguration(FilterUserConditionProcessorInterface::class) + ->addTag(RegisterFilterUserConditionTypesPass::INDEX_FILTER_USER_CONDITION_TAG) + ; + $container ->registerForAutoconfiguration(GetterInterface::class) ->addTag(RegisterGetterPass::INDEX_GETTER_TAG) diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterConditionNestedType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterPreConditionNestedType.php similarity index 67% rename from src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterConditionNestedType.php rename to src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterPreConditionNestedType.php index 61910dd017..c28a95562f 100644 --- a/src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterConditionNestedType.php +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterPreConditionNestedType.php @@ -12,35 +12,21 @@ namespace CoreShop\Bundle\IndexBundle\Form\Type\Filter; -use CoreShop\Bundle\IndexBundle\Form\Type\FilterConditionCollectionType; -use CoreShop\Component\Resource\Repository\RepositoryInterface; +use CoreShop\Bundle\IndexBundle\Form\Type\FilterPreConditionCollectionType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; -final class FilterConditionNestedType extends AbstractType +final class FilterPreConditionNestedType extends AbstractType { - /** - * @var RepositoryInterface - */ - private $repository; - - /** - * @param RepositoryInterface $repository - */ - public function __construct(RepositoryInterface $repository) - { - $this->repository = $repository; - } - /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('conditions', FilterConditionCollectionType::class); + ->add('conditions', FilterPreConditionCollectionType::class); $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $data = $event->getData(); @@ -58,6 +44,6 @@ public function buildForm(FormBuilderInterface $builder, array $options) */ public function getBlockPrefix() { - return 'coreshop_filter_condition_type_nested'; + return 'coreshop_filter_pre_condition_type_nested'; } } diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterUserConditionNestedType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterUserConditionNestedType.php new file mode 100644 index 0000000000..c0c0dcbd1c --- /dev/null +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/Filter/FilterUserConditionNestedType.php @@ -0,0 +1,49 @@ +add('conditions', FilterUserConditionCollectionType::class); + + $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { + $data = $event->getData(); + + if (is_array($data)) { + $data['conditions'] = []; + + $event->setData($data); + } + }); + } + + /** + * {@inheritdoc} + */ + public function getBlockPrefix() + { + return 'coreshop_filter_user_condition_type_nested'; + } +} diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterConditionType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterConditionType.php index aa6f07b129..b741d9fc3a 100644 --- a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterConditionType.php +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterConditionType.php @@ -22,7 +22,7 @@ use Symfony\Component\Form\FormInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -final class FilterConditionType extends AbstractResourceType +class FilterConditionType extends AbstractResourceType { /** * @var FormTypeRegistryInterface diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionChoiceType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionChoiceType.php new file mode 100755 index 0000000000..47859db0aa --- /dev/null +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionChoiceType.php @@ -0,0 +1,59 @@ +types = $types; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'choices' => array_flip($this->types), + ]); + } + + /** + * {@inheritdoc} + */ + public function getParent() + { + return ChoiceType::class; + } + + /** + * {@inheritdoc} + */ + public function getBlockPrefix() + { + return 'coreshop_filter_pre_condition_choice'; + } +} diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterConditionCollectionType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionCollectionType.php similarity index 79% rename from src/CoreShop/Bundle/IndexBundle/Form/Type/FilterConditionCollectionType.php rename to src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionCollectionType.php index 648e4a484d..2806888548 100755 --- a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterConditionCollectionType.php +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionCollectionType.php @@ -15,13 +15,13 @@ use CoreShop\Bundle\IndexBundle\Form\Type\Core\AbstractConfigurationCollectionType; use Symfony\Component\OptionsResolver\OptionsResolver; -final class FilterConditionCollectionType extends AbstractConfigurationCollectionType +final class FilterPreConditionCollectionType extends AbstractConfigurationCollectionType { public function configureOptions(OptionsResolver $resolver) { parent::configureOptions($resolver); - $resolver->setDefault('entry_type', FilterConditionType::class); + $resolver->setDefault('entry_type', FilterPreConditionType::class); } /** @@ -29,6 +29,6 @@ public function configureOptions(OptionsResolver $resolver) */ public function getBlockPrefix() { - return 'coreshop_filter_condition_collection'; + return 'coreshop_filter_pre_condition_collection'; } } diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionType.php new file mode 100644 index 0000000000..87b9b1f43c --- /dev/null +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterPreConditionType.php @@ -0,0 +1,45 @@ +add('type', FilterPreConditionChoiceType::class); + } + + /** + * {@inheritdoc} + */ + public function getBlockPrefix() + { + return 'coreshop_filter_pre_condition'; + } +} diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterType.php index dddd00cd57..1f5437f341 100644 --- a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterType.php +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterType.php @@ -34,8 +34,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'DESC' => 'desc', ), ]) - ->add('preConditions', FilterConditionCollectionType::class) - ->add('conditions', FilterConditionCollectionType::class) + ->add('preConditions', FilterPreConditionCollectionType::class) + ->add('conditions', FilterUserConditionCollectionType::class) ->add('resultsPerPage', IntegerType::class) ->add('index', IndexChoiceType::class); } diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionChoiceType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionChoiceType.php new file mode 100755 index 0000000000..dbe975e01d --- /dev/null +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionChoiceType.php @@ -0,0 +1,59 @@ +types = $types; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'choices' => array_flip($this->types), + ]); + } + + /** + * {@inheritdoc} + */ + public function getParent() + { + return ChoiceType::class; + } + + /** + * {@inheritdoc} + */ + public function getBlockPrefix() + { + return 'coreshop_filter_user_condition_choice'; + } +} diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionCollectionType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionCollectionType.php new file mode 100755 index 0000000000..edbf3c0237 --- /dev/null +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionCollectionType.php @@ -0,0 +1,34 @@ +setDefault('entry_type', FilterUserConditionType::class); + } + + /** + * {@inheritdoc} + */ + public function getBlockPrefix() + { + return 'coreshop_filter_user_condition_collection'; + } +} diff --git a/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionType.php b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionType.php new file mode 100644 index 0000000000..c475b3cd58 --- /dev/null +++ b/src/CoreShop/Bundle/IndexBundle/Form/Type/FilterUserConditionType.php @@ -0,0 +1,45 @@ +add('type', FilterPreConditionChoiceType::class); + } + + /** + * {@inheritdoc} + */ + public function getBlockPrefix() + { + return 'coreshop_filter_user_condition'; + } +} diff --git a/src/CoreShop/Bundle/IndexBundle/Resources/config/services.yml b/src/CoreShop/Bundle/IndexBundle/Resources/config/services.yml index 63ef1ebe03..eea44a81d5 100755 --- a/src/CoreShop/Bundle/IndexBundle/Resources/config/services.yml +++ b/src/CoreShop/Bundle/IndexBundle/Resources/config/services.yml @@ -20,7 +20,8 @@ services: CoreShop\Component\Index\Filter\FilterProcessorInterface: '@CoreShop\Component\Index\Filter\FilterProcessor' CoreShop\Component\Index\Filter\FilterProcessor: arguments: - - '@coreshop.registry.filter.condition_types' + - '@coreshop.registry.filter.pre_condition_types' + - '@coreshop.registry.filter.user_condition_types' coreshop.factory.filter.list: '@CoreShop\Bundle\IndexBundle\Factory\FilteredListingFactory' CoreShop\Component\Index\Factory\FilteredListingFactoryInterface: '@CoreShop\Bundle\IndexBundle\Factory\FilteredListingFactory' @@ -57,13 +58,22 @@ services: - index-extensions # Filter Registry - coreshop.registry.filter.condition_types: + coreshop.registry.filter.pre_condition_types: class: CoreShop\Component\Registry\ServiceRegistry arguments: - CoreShop\Component\Index\Filter\FilterConditionProcessorInterface - filter-processor - coreshop.form_registry.filter.condition_types: + coreshop.form_registry.filter.pre_condition_types: + class: CoreShop\Bundle\ResourceBundle\Form\Registry\FormTypeRegistry + + coreshop.registry.filter.user_condition_types: + class: CoreShop\Component\Registry\ServiceRegistry + arguments: + - CoreShop\Component\Index\Filter\FilterConditionProcessorInterface + - filter-processor + + coreshop.form_registry.filter.user_condition_types: class: CoreShop\Bundle\ResourceBundle\Form\Registry\FormTypeRegistry # Index Getter Registry @@ -257,12 +267,19 @@ services: tags: - { name: coreshop.filter.condition_type, type: multiselect, form-type: CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterConditionMultiselectType} - coreshop.filter.condition_type.nested: '@CoreShop\Component\Index\Filter\NestedFilterConditionProcessor' - CoreShop\Component\Index\Filter\NestedFilterConditionProcessor: + coreshop.filter.condition_type.pre_nested: + class: CoreShop\Component\Index\Filter\NestedFilterConditionProcessor + arguments: + - '@coreshop.registry.filter.pre_condition_types' + tags: + - { name: coreshop.filter.pre_condition_type, type: nested, form-type: CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterPreConditionNestedType } + + coreshop.filter.condition_type.user_nested: + class: CoreShop\Component\Index\Filter\NestedFilterConditionProcessor arguments: - - '@coreshop.registry.filter.condition_types' + - '@coreshop.registry.filter.user_condition_types' tags: - - { name: coreshop.filter.condition_type, type: nested, form-type: CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterConditionNestedType} + - { name: coreshop.filter.user_condition_type, type: nested, form-type: CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterUserConditionNestedType } # Will be deactivated for now, this is not functional as it is right now #coreshop.filter.condition_type.boolean: diff --git a/src/CoreShop/Bundle/IndexBundle/Resources/config/services/form.yml b/src/CoreShop/Bundle/IndexBundle/Resources/config/services/form.yml index 36a718597e..0c294f0970 100644 --- a/src/CoreShop/Bundle/IndexBundle/Resources/config/services/form.yml +++ b/src/CoreShop/Bundle/IndexBundle/Resources/config/services/form.yml @@ -5,7 +5,8 @@ parameters: coreshop.form.type.index.columns.validation_groups: [coreshop] coreshop.form.type.index.worker.validation_groups: [coreshop] coreshop.form.type.filter.validation_groups: [coreshop] - coreshop.form.type.filter.filter_condition.validation_groups: [coreshop] + coreshop.form.type.filter.pre_condition.validation_groups: [coreshop] + coreshop.form.type.filter.user_condition.validation_groups: [coreshop] services: _defaults: @@ -81,23 +82,45 @@ services: tags: - { name: form.type } - CoreShop\Bundle\IndexBundle\Form\Type\FilterConditionType: + CoreShop\Bundle\IndexBundle\Form\Type\FilterPreConditionType: + class: CoreShop\Bundle\IndexBundle\Form\Type\FilterPreConditionType arguments: - '%coreshop.model.filter_condition.class%' - - '%coreshop.form.type.filter.filter_condition.validation_groups%' - - '@coreshop.form_registry.filter.condition_types' + - '%coreshop.form.type.filter.pre_condition.validation_groups%' + - '@coreshop.form_registry.filter.pre_condition_types' tags: - { name: form.type } - CoreShop\Bundle\IndexBundle\Form\Type\FilterConditionChoiceType: + CoreShop\Bundle\IndexBundle\Form\Type\FilterUserConditionType: arguments: - - '%coreshop.filter.condition_types%' + - '%coreshop.model.filter_condition.class%' + - '%coreshop.form.type.filter.user_condition.validation_groups%' + - '@coreshop.form_registry.filter.user_condition_types' + tags: + - { name: form.type } + + CoreShop\Bundle\IndexBundle\Form\Type\FilterPreConditionChoiceType: + arguments: + - '%coreshop.filter.pre_condition_types%' + tags: + - { name: form.type } + + CoreShop\Bundle\IndexBundle\Form\Type\FilterUserConditionChoiceType: + arguments: + - '%coreshop.filter.user_condition_types%' tags: - { name: form.type } - CoreShop\Bundle\IndexBundle\Form\Type\FilterConditionCollectionType: + CoreShop\Bundle\IndexBundle\Form\Type\FilterPreConditionCollectionType: + class: CoreShop\Bundle\IndexBundle\Form\Type\FilterPreConditionCollectionType arguments: - - '@coreshop.registry.filter.condition_types' + - '@coreshop.registry.filter.pre_condition_types' + tags: + - { name: form.type } + + CoreShop\Bundle\IndexBundle\Form\Type\FilterUserConditionCollectionType: + arguments: + - '@coreshop.registry.filter.user_condition_types' tags: - { name: form.type } @@ -107,8 +130,13 @@ services: tags: - { name: form.type } - CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterConditionNestedType: - arguments: - - '@coreshop.repository.filter_condition' + # Condition Config Types + CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterPreConditionNestedType: + class: CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterPreConditionNestedType + tags: + - { name: form.type } + + CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterUserConditionNestedType: + class: CoreShop\Bundle\IndexBundle\Form\Type\Filter\FilterUserConditionNestedType tags: - { name: form.type } diff --git a/src/CoreShop/Bundle/IndexBundle/Resources/public/pimcore/js/filter/item.js b/src/CoreShop/Bundle/IndexBundle/Resources/public/pimcore/js/filter/item.js index 8f4c0474a5..33e74d9b63 100644 --- a/src/CoreShop/Bundle/IndexBundle/Resources/public/pimcore/js/filter/item.js +++ b/src/CoreShop/Bundle/IndexBundle/Resources/public/pimcore/js/filter/item.js @@ -42,8 +42,8 @@ coreshop.filter.item = Class.create(coreshop.resource.item, { }, getItems: function () { - this.preConditions = new coreshop.filter.condition(this, this.parentPanel.conditions, 'preConditions', 'pre_conditions'); - this.conditions = new coreshop.filter.condition(this, this.parentPanel.conditions, 'conditions'); + this.preConditions = new coreshop.filter.condition(this, this.parentPanel.pre_conditions, 'preConditions', 'pre_conditions'); + this.conditions = new coreshop.filter.condition(this, this.parentPanel.user_conditions, 'conditions'); //this.similarities = new coreshop.filter.similarity(this, this.parentPanel.similarities); var items = [ diff --git a/src/CoreShop/Bundle/IndexBundle/Resources/public/pimcore/js/filter/panel.js b/src/CoreShop/Bundle/IndexBundle/Resources/public/pimcore/js/filter/panel.js index 2367c03446..e53e9ca2e8 100644 --- a/src/CoreShop/Bundle/IndexBundle/Resources/public/pimcore/js/filter/panel.js +++ b/src/CoreShop/Bundle/IndexBundle/Resources/public/pimcore/js/filter/panel.js @@ -46,7 +46,8 @@ coreshop.filter.panel = Class.create(coreshop.resource.panel, { success: function (result) { var config = Ext.decode(result.responseText); - me.conditions = config.conditions; + me.pre_conditions = config.pre_conditions; + me.user_conditions = config.user_conditions; //me.similarities = config.similarities; } }); diff --git a/src/CoreShop/Component/Index/Filter/FilterPreConditionProcessorInterface.php b/src/CoreShop/Component/Index/Filter/FilterPreConditionProcessorInterface.php new file mode 100644 index 0000000000..aa6d1e0f22 --- /dev/null +++ b/src/CoreShop/Component/Index/Filter/FilterPreConditionProcessorInterface.php @@ -0,0 +1,18 @@ +conditionProcessors = $conditionProcessors; + private $userConditionProcessors; + + /** + * @param ServiceRegistryInterface $preConditionProcessors + * @param ServiceRegistryInterface $userConditionProcessors + */ + public function __construct( + ServiceRegistryInterface $preConditionProcessors, + ServiceRegistryInterface $userConditionProcessors + ) { + $this->preConditionProcessors = $preConditionProcessors; + $this->userConditionProcessors = $userConditionProcessors; } /** @@ -50,7 +59,7 @@ public function processConditions(FilterInterface $filter, ListingInterface $lis if ($filter->hasPreConditions()) { foreach ($preConditions as $condition) { - $currentFilter = $this->getConditionProcessorForCondition($condition)->addCondition($condition, $filter, $list, $currentFilter, $parameterBag, true); + $currentFilter = $this->getPreConditionProcessorForCondition($condition)->addCondition($condition, $filter, $list, $currentFilter, $parameterBag, true); } } @@ -81,6 +90,16 @@ public function prepareConditionsForRendering(FilterInterface $filter, ListingIn */ private function getConditionProcessorForCondition(FilterConditionInterface $condition) { - return $this->conditionProcessors->get($condition->getType()); + return $this->userConditionProcessors->get($condition->getType()); + } + + /** + * @param FilterConditionInterface $condition + * + * @return FilterConditionProcessorInterface + */ + private function getPreConditionProcessorForCondition(FilterConditionInterface $condition) + { + return $this->preConditionProcessors->get($condition->getType()); } } diff --git a/src/CoreShop/Component/Index/Filter/FilterUserConditionProcessorInterface.php b/src/CoreShop/Component/Index/Filter/FilterUserConditionProcessorInterface.php new file mode 100644 index 0000000000..52a3283998 --- /dev/null +++ b/src/CoreShop/Component/Index/Filter/FilterUserConditionProcessorInterface.php @@ -0,0 +1,18 @@ +