custom/plugins/SmsBecoTechnicCategoryCustomListing/src/Subscriber/ListingSubscriber.php line 312

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace SmsBecoTechnicCategoryCustomListing\Subscriber;
  4. use Doctrine\DBAL\Connection;
  5. use phpDocumentor\Reflection\Types\Boolean;
  6. use PhpParser\Node\Expr\BinaryOp\Equal;
  7. use Shopware\Core\Content\Category\CategoryEntity;
  8. use Shopware\Core\Content\Cms\Events\CmsPageLoadedEvent;
  9. use Shopware\Core\Content\Product\Aggregate\ProductManufacturer\ProductManufacturerCollection;
  10. use Shopware\Core\Content\Product\Aggregate\ProductManufacturer\ProductManufacturerEntity;
  11. use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
  12. use Shopware\Core\Content\Product\Events\ProductListingResultEvent;
  13. use Shopware\Core\Content\Product\ProductEntity;
  14. use Shopware\Core\Content\Product\SalesChannel\SalesChannelProductEntity;
  15. use Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionCollection;
  16. use Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity;
  17. use Shopware\Core\Content\Property\PropertyGroupCollection;
  18. use Shopware\Core\Content\Property\PropertyGroupEntity;
  19. use Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityWriteGateway;
  20. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  21. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  22. use Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Metric\EntityResult;
  23. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  24. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
  25. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  26. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  27. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
  28. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\NotFilter;
  29. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  30. use Shopware\Core\Framework\Struct\ArrayEntity;
  31. use Shopware\Core\Framework\Struct\StructCollection;
  32. use Shopware\Core\Framework\Uuid\Uuid;
  33. use Shopware\Core\System\SalesChannel\Entity\SalesChannelRepository;
  34. use Shopware\Core\System\SystemConfig\SystemConfigService;
  35. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  36. use Symfony\Component\VarDumper\Cloner\VarCloner;
  37. use Symfony\Component\VarDumper\Dumper\CliDumper;
  38. use Symfony\Component\VarDumper\Dumper\HtmlDumper;
  39. class
  40. ListingSubscriber implements EventSubscriberInterface
  41. {
  42.     private $categoryRepository;
  43.     private $productRepository;
  44.     private Connection $connection;
  45.     private $propertyRepository;
  46.     private $propertyGroupOptionRepository;
  47.     private $config;
  48.     public function __construct(
  49.         EntityRepositoryInterface $categoryRepository,
  50.         SalesChannelRepository    $productRepository,
  51.         Connection                $connection,
  52.         EntityRepositoryInterface $propertyRepository,
  53.         EntityRepositoryInterface $propertyGroupOptionRepository,
  54.         SystemConfigService       $config
  55.     )
  56.     {
  57.         $this->categoryRepository $categoryRepository;
  58.         $this->productRepository $productRepository;
  59.         $this->connection $connection;
  60.         $this->propertyRepository $propertyRepository;
  61.         $this->propertyGroupOptionRepository $propertyGroupOptionRepository;
  62.         $this->config $config;
  63.     }
  64.     public static function getSubscribedEvents()
  65.     {
  66.         return [
  67.             ProductListingCriteriaEvent::class => 'handleListingRequest',
  68.             CmsPageLoadedEvent::class => 'handleCMSPageLoadedEvent',
  69.             ProductListingResultEvent::class => 'handleProductListingResultEvent'
  70.         ];
  71.     }
  72.     /**
  73.      * @param $a
  74.      * @param $b
  75.      * @return bool
  76.      */
  77.     function cmpare($a$b)
  78.     {
  79.         //Sort Products
  80.         $customListingConfig $this->config->get("SmsBecoTechnicCategoryCustomListing");
  81.         if (!is_null($customListingConfig) && isset($customListingConfig["config"])) {
  82.             $customListingConfig $customListingConfig["config"];
  83.         }
  84.         if (!is_null($customListingConfig) && isset($customListingConfig["movementListingSortProperty"]) && $customListingConfig["movementListingSortProperty"] != "") {
  85.             $sortBy $customListingConfig["movementListingSortProperty"];
  86.             if ($sortBy) {
  87.                 $propertyA $a->getProperties()->filter(function (PropertyGroupOptionEntity $property) use ($sortBy) {
  88.                     return $property->getGroupId() == $sortBy;
  89.                 })->first();
  90.                 $propertyB $b->getProperties()->filter(function (PropertyGroupOptionEntity $property) use ($sortBy) {
  91.                     return $property->getGroupId() == $sortBy;
  92.                 })->first();
  93.                 if ($propertyA && $propertyB) {
  94.                     return intval($propertyA->getName()) > intval($propertyB->getName());
  95.                 }
  96.                 return false;
  97.             }
  98.         }
  99.         if (strlen($a->getProductNumber()) > strlen($b->getProductNumber())) {
  100.             return true;
  101.         } else {
  102.             return $a->getProductNumber() > $b->getProductNumber();
  103.         }
  104.     }
  105.     public function handleProductListingResultEvent(ProductListingResultEvent $event): void
  106.     {
  107.         $mainProduct null;
  108.         /** @var SalesChannelProductEntity[] $products */
  109.         $products $event->getResult()->getElements();
  110.         //Get current category and custom fields
  111.         $navigationId $event->getRequest()->get("navigationId");
  112.         if (!is_null($navigationId)) {
  113.             $categoryCriteria = new Criteria([$navigationId]);
  114.             $category $this->categoryRepository->search(
  115.                 $categoryCriteria,
  116.                 \Shopware\Core\Framework\Context::createDefaultContext()
  117.             )->first();
  118.             $event->getSalesChannelContext()->getSalesChannel()->addExtension("currentCategory"$category);
  119.             $customFields $category->getCustomFields();
  120.             if (!empty($customFields)
  121.                 && isset($customFields["sms_beco_technic_category_type"])
  122.                 && $customFields["sms_beco_technic_category_type"] == 'KAT_WERKE') {
  123.                 //Try to get MainProduct
  124.                 $mainProductCriteria = new Criteria();
  125.                 $mainProductCriteria->addAssociation("categories");
  126.                 $mainProductCriteria->addAssociation("manufacturer");
  127.                 $mainProductCriteria->addAssociation('properties');
  128.                 $mainProductCriteria->addAssociation('properties.group');
  129.                 $mainProductCriteria->addFilter(new EqualsFilter("categories.id"$category->getId()));
  130.                 $mainProductCriteria->addFilter(new NotFilter(NotFilter::CONNECTION_AND, [new ContainsFilter("productNumber"".")]));
  131.                 $mainProductCriteria->addSorting(new FieldSorting("productNumber"FieldSorting::ASCENDING));
  132.                 $mainProduct $this->productRepository->search($mainProductCriteria$event->getSalesChannelContext())->first();
  133.                 if ($mainProduct && !in_array($mainProduct->getId(), array_keys($products))) {
  134.                     $products[$mainProduct->getId()] = $mainProduct;
  135.                 }
  136.             }
  137. //            if (isset($_GET["debug"]) && $_GET["debug"] == "true") {
  138.             if (!empty($customFields)
  139.                 && isset($customFields["sms_beco_technic_category_table_primary_property_option"])
  140.                 && isset($customFields["sms_beco_technic_category_type"])
  141.                 && (str_contains($customFields["sms_beco_technic_category_type"], 'KAT_ZWEI_TABELLEN')
  142.                     || str_contains($customFields["sms_beco_technic_category_type"], 'KAT_WERKE'))
  143.             ) {
  144.                 $productCriteria = new Criteria();
  145.                 $productCriteria->addAssociation('properties');
  146.                 $productCriteria->addAssociation('properties.group');
  147.                 $productCriteria->addAssociation('manufacturer');
  148.                 $productCriteria->addAssociation('manufacturer.media');
  149.                 $productCriteria->addAssociation('categories');
  150.                 $productCriteria->addAssociation('media');
  151.                 $productCriteria->addAssociation('cover');
  152.                 $productCriteria->addFilter(new EqualsFilter("properties.id"$customFields["sms_beco_technic_category_table_primary_property_option"]));
  153.                 $productCriteria->addFilter(new EqualsFilter("categoriesRo.id"$navigationId));
  154.                 $productCriteria->addSorting(new FieldSorting("productNumber"FieldSorting::DESCENDING));
  155.                 $properties $event->getRequest()->get("properties");
  156.                 if (!empty($properties)) {
  157.                     $productCriteria->addFilter(new EqualsAnyFilter("properties.id"explode("|"$properties)));
  158.                 }
  159.                 $newProducts $this->productRepository->search($productCriteria$event->getSalesChannelContext())->getElements();
  160. //
  161.                 /** @var ProductManufacturerCollection $manufacturerAggregation */
  162.                 $manufacturerAggregation $event->getResult()->getAggregations()->get("manufacturer");
  163.                 /** @var EntityResult|null $propertyGroupAggregation */
  164.                 $propertyGroupAggregation $event->getResult()->getAggregations()->get("properties");
  165.                 /** @var SalesChannelProductEntity $product */
  166.                 foreach ($newProducts as $product) {
  167. //                        $this->dump($product->getProperties()->first()->getGroup()->getName());
  168.                     //Enrich manufacturer aggregation
  169.                     if ($manufacturerAggregation) {
  170.                         $manufacturer $product->getManufacturer();
  171.                         if ($manufacturer) {
  172.                             $manufacturerAggregation->add($manufacturer);
  173.                         }
  174.                     }
  175.                     //Enrich property aggregation
  176.                     if ($propertyGroupAggregation instanceof EntityResult) {
  177.                         /** @var PropertyGroupCollection $propertyGroupsOld */
  178.                         $propertyGroupCollectionFromAggregation $propertyGroupAggregation->getEntities();
  179.                         $properties $product->getProperties();
  180.                         if ($properties) {
  181.                             /** @var PropertyGroupOptionEntity $property */
  182.                             foreach ($properties as $property) {
  183.                                 //Get property group from aggregation by property group id
  184.                                 /** @var PropertyGroupEntity $propertyGroup */
  185.                                 $propertyGroup $propertyGroupCollectionFromAggregation->filter(function ($propertyGroup) use ($property) {
  186.                                     return $propertyGroup->getId() == $property->getGroupId();
  187.                                 })->first();
  188.                                 if ($propertyGroup) {
  189.                                     $propertyGroup->getOptions()->add($property);
  190.                                 } elseif ($property->getGroup()->getVisibleOnProductDetailPage()) {
  191.                                     $propertyGroup $property->getGroup();
  192.                                     $propertyGroupOptionCollection = new PropertyGroupOptionCollection();
  193.                                     $propertyGroupOptionCollection->add($property);
  194.                                     $propertyGroup->setOptions($propertyGroupOptionCollection);
  195.                                     $propertyGroupAggregation->add($propertyGroup);
  196.                                 }
  197.                             }
  198.                         }
  199.                     }
  200.                 }
  201.                 if ($event->getRequest()->query->get("manufacturer")) {
  202.                     //Remove products without manufacturer
  203.                     $newProducts array_filter($newProducts, function ($product) use ($event) {
  204.                         return !is_null($product->getManufacturer()) && in_array($product->getManufacturer()->getId(), explode("|"$event->getRequest()->query->get("manufacturer")));
  205.                     });
  206.                 }
  207.                 if ($event->getRequest()->query->get("properties")) {
  208.                     //Group the properties from request into correct property groups
  209.                     $propertiesFromRequest explode("|"$event->getRequest()->query->get("properties"));
  210.                     $propertiesFromRequest $this->propertyGroupOptionRepository->search(new Criteria($propertiesFromRequest), $event->getContext())->getElements();
  211. //                    if($_GET["debug"] == "true") {
  212. //                        $this->dump([$propertiesFromRequest]);
  213. //                    }
  214.                     if ($propertiesFromRequest) {
  215.                         //Remove products without properties
  216.                         $propertiesFromRequestGrouped = [];
  217.                         foreach ($propertiesFromRequest as $propertyFromRequest) {
  218.                             $propertiesFromRequestGrouped[$propertyFromRequest->getGroupId()][] = $propertyFromRequest->getId();
  219.                         }
  220.                         $newProducts array_filter($newProducts, function ($product) use ($event$propertiesFromRequestGrouped) {
  221.                             /** @var PropertyGroupOptionCollection $properties */
  222.                             $properties $product->getProperties();
  223.                             $propertiesGrouped = [];
  224.                             foreach ($properties as $property) {
  225.                                 $propertiesGrouped[$property->getGroupId()][] = $property->getId();
  226.                             }
  227.                             foreach ($propertiesFromRequestGrouped as $groupId => $propertyFromRequestGrouped) {
  228.                                 $propertyFound false;
  229.                                 foreach ($propertyFromRequestGrouped as $propertyFromRequest) {
  230. //                                    if($_GET["debug"] == "true") {
  231. //                                        $this->dump([$propertiesFromRequestGrouped, $propertiesGrouped, $groupId, $propertyFromRequest, $propertiesGrouped[$groupId]]);
  232. //                                    }
  233.                                     if (isset($propertiesGrouped[$groupId]) && in_array($propertyFromRequest$propertiesGrouped[$groupId])) {
  234.                                         $propertyFound true;
  235.                                     }
  236.                                 }
  237.                                 if (!$propertyFound) {
  238.                                     return false;
  239.                                 }
  240.                             }
  241.                             return true;
  242.                         });
  243.                     }
  244.                 }
  245.                 $products array_merge($products$newProducts);
  246.                 if (str_contains($customFields["sms_beco_technic_category_type"], 'KAT_ZWEI_TABELLEN')) {
  247.                     $event->getSalesChannelContext()->addExtension("showMoreButton", new ArrayEntity([true]));
  248.                 } else {
  249.                     $event->getSalesChannelContext()->addExtension("showMoreButton", new ArrayEntity([false]));
  250.                 }
  251.             } else {
  252.                 $event->getSalesChannelContext()->addExtension("showMoreButton", new ArrayEntity([false]));
  253.             }
  254.         }
  255.         usort($products, array($this"cmpare"));
  256. //        if (!empty($customFields)
  257. //            && isset($customFields["sms_beco_technic_category_table_primary_property_option"])
  258. //            && isset($customFields["sms_beco_technic_category_type"])
  259. //            && !str_contains($customFields["sms_beco_technic_category_type"], 'KAT_ZWEI_TABELLEN')
  260. //            && str_contains($customFields["sms_beco_technic_category_type"], 'KAT_WERKE')
  261. //        ) {
  262. //            $products = array_slice($products, intval($event->getRequest()->get('p')), 20);
  263. //        }
  264.         $listingProducts = new ArrayEntity($products);
  265.         $event->getSalesChannelContext()->addExtension("listingProducts"$listingProducts);
  266.         $event->getSalesChannelContext()->addExtension("mainProduct"$mainProduct);
  267.     }
  268.     public function handleListingRequest(ProductListingCriteriaEvent $event): void
  269.     {
  270.         //Get current category and custom fields
  271.         $navigationId $event->getRequest()->get("navigationId");
  272.         $customListingConfig $this->config->get("SmsBecoTechnicCategoryCustomListing");
  273.         if (!is_null($navigationId)) {
  274.             $category $this->categoryRepository->search(
  275.                 new Criteria([$navigationId]),
  276.                 \Shopware\Core\Framework\Context::createDefaultContext()
  277.             )->first();
  278.             $customFields $category->getCustomFields();
  279.         } else {
  280.             $customFields null;
  281.         }
  282.         if (!is_null($customListingConfig) && isset($customListingConfig["config"])) {
  283.             $customListingConfig $customListingConfig["config"];
  284.         }
  285.         if (!is_null($customListingConfig)
  286.             && isset($customListingConfig["config"]["movementListingMovements"])
  287.             && !is_null($customListingConfig["config"]["movementListingMovements"])
  288.             && $customListingConfig["config"]["movementListingMovements"] != ""
  289.             && !is_null($navigationId)) {
  290.             if (!empty($customFields)
  291.                 && isset($customFields["sms_beco_technic_category_type"])
  292.                 && $customFields["sms_beco_technic_category_type"] == 'KAT_WERKE_KOPF') {
  293. //                $event->getCriteria()->addAssociation('properties');
  294.                 $event->getCriteria()->addPostFilter(new EqualsFilter("properties.id"$customListingConfig["movementListingMovements"]));
  295.             }
  296.         }
  297.         //
  298.         $event->getCriteria()->addAssociation('properties');
  299.         $event->getCriteria()->addAssociation('properties.group');
  300.         $event->getCriteria()->addAssociation('manufacturer');
  301.         $event->getCriteria()->addAssociation('manufacturer.media');
  302.         $event->getCriteria()->addAssociation('categories');
  303.         $event->getCriteria()->addAssociation('media');
  304.         $event->getCriteria()->addAssociation('cover');
  305.         //Remove Main Articles for Two Table Categories
  306.         if (!empty($customFields)
  307.             && isset($customFields["sms_beco_technic_category_table_primary_property_option"])
  308.             && isset($customFields["sms_beco_technic_category_type"])
  309.             && $customFields["sms_beco_technic_category_type"] == 'KAT_ZWEI_TABELLEN'
  310.         ) {
  311.             $event->getCriteria()->addFilter(new NotFilter(NotFilter::CONNECTION_AND, [new EqualsFilter("properties.id"$customFields["sms_beco_technic_category_table_primary_property_option"])]));
  312.         }
  313.         //Sorting
  314. //        $event->getCriteria()->addSorting(new FieldSorting('CustomProductCategoryExtension.sortingPriority', FieldSorting::DESCENDING));
  315.         $event->getCriteria()->addSorting(new FieldSorting('productNumber'FieldSorting::ASCENDING));
  316.     }
  317.     public function handleCMSPageLoadedEvent(CmsPageLoadedEvent $event): void
  318.     {
  319.         if (!is_null($event->getRequest()->get("navigationId"))) {
  320.             /** @var CategoryEntity $category */
  321.             $navigationId $event->getRequest()->get("navigationId");
  322.             $categoryCriteria = new Criteria();
  323.             $categoryCriteria->addAssociation("properties");
  324.             $category $this->categoryRepository->search(
  325.                 new Criteria([$navigationId]),
  326.                 \Shopware\Core\Framework\Context::createDefaultContext()
  327.             )->first();
  328. //            echo "<pre>";
  329. //            die(var_dump($category));
  330.             $categoryCustomFields $category->getCustomFields();
  331.             $propertyGroupIds = [];
  332.             if ($categoryCustomFields) {
  333.                 $propertyOne null;
  334.                 $propertyTwo null;
  335.                 $propertyThree null;
  336.                 $propertyFour null;
  337.                 $propertyFive null;
  338.                 $propertySix null;
  339.                 $propertyOneMovement null;
  340.                 $propertyTwoMovement null;
  341.                 $propertyThreeMovement null;
  342.                 $propertyFourMovement null;
  343.                 $propertyFiveMovement null;
  344.                 $propertyOneMovementPart null;
  345.                 $propertyTwoMovementPart null;
  346.                 // Table Listing Properties
  347.                 if (isset($categoryCustomFields["sms_beco_technic_category_table_field_one"]) && $categoryCustomFields["sms_beco_technic_category_table_field_one"] != "") {
  348.                     $propertyGroupIds[] = $categoryCustomFields["sms_beco_technic_category_table_field_one"];
  349.                     $propertyOne $categoryCustomFields["sms_beco_technic_category_table_field_one"];
  350.                 }
  351.                 if (isset($categoryCustomFields["sms_beco_technic_category_table_field_two"]) && $categoryCustomFields["sms_beco_technic_category_table_field_two"] != "") {
  352.                     $propertyGroupIds[] = $categoryCustomFields["sms_beco_technic_category_table_field_two"];
  353.                     $propertyTwo $categoryCustomFields["sms_beco_technic_category_table_field_two"];
  354.                 }
  355.                 if (isset($categoryCustomFields["sms_beco_technic_category_table_field_three"]) && $categoryCustomFields["sms_beco_technic_category_table_field_three"] != "") {
  356.                     $propertyGroupIds[] = $categoryCustomFields["sms_beco_technic_category_table_field_three"];
  357.                     $propertyThree $categoryCustomFields["sms_beco_technic_category_table_field_three"];
  358.                 }
  359.                 if (isset($categoryCustomFields["sms_beco_technic_category_table_field_four"]) && $categoryCustomFields["sms_beco_technic_category_table_field_four"] != "") {
  360.                     $propertyGroupIds[] = $categoryCustomFields["sms_beco_technic_category_table_field_four"];
  361.                     $propertyFour $categoryCustomFields["sms_beco_technic_category_table_field_four"];
  362.                 }
  363.                 if (isset($categoryCustomFields["sms_beco_technic_category_table_field_five"]) && $categoryCustomFields["sms_beco_technic_category_table_field_five"] != "") {
  364.                     $propertyGroupIds[] = $categoryCustomFields["sms_beco_technic_category_table_field_five"];
  365.                     $propertyFive $categoryCustomFields["sms_beco_technic_category_table_field_five"];
  366.                 }
  367.                 if (isset($categoryCustomFields["sms_beco_technic_category_table_field_six"]) && $categoryCustomFields["sms_beco_technic_category_table_field_six"] != "") {
  368.                     $propertyGroupIds[] = $categoryCustomFields["sms_beco_technic_category_table_field_six"];
  369.                     $propertySix $categoryCustomFields["sms_beco_technic_category_table_field_six"];
  370.                 }
  371.                 //
  372.             }
  373.             if (isset ($categoryCustomFields["sms_beco_technic_category_type"])
  374.                 && ($categoryCustomFields["sms_beco_technic_category_type"] == 'KAT_WERKE' || $categoryCustomFields["sms_beco_technic_category_type"] == 'KAT_WERKE_KOPF')) {
  375.                 $propertyOneMovement $this->config->get("SmsBecoTechnicCategoryCustomListing.config.movementListingPropertyOne");
  376.                 $propertyTwoMovement $this->config->get("SmsBecoTechnicCategoryCustomListing.config.movementListingPropertyTwo");
  377.                 $propertyThreeMovement $this->config->get("SmsBecoTechnicCategoryCustomListing.config.movementListingPropertyThree");
  378.                 $propertyFourMovement $this->config->get("SmsBecoTechnicCategoryCustomListing.config.movementListingPropertyFour");
  379.                 $propertyFiveMovement $this->config->get("SmsBecoTechnicCategoryCustomListing.config.movementListingPropertyFive");
  380.                 $propertyOneMovementPart $this->config->get("SmsBecoTechnicCategoryCustomListing.config.movementPartsListingPropertyOne");
  381.                 $propertyTwoMovementPart $this->config->get("SmsBecoTechnicCategoryCustomListing.config.movementPartsListingPropertyTwo");
  382.                 //Movement Listing Properties
  383.                 if ($propertyOneMovement) {
  384.                     $propertyGroupIds[] = $propertyOneMovement;
  385.                 }
  386.                 if ($propertyTwoMovement) {
  387.                     $propertyGroupIds[] = $propertyTwoMovement;
  388.                 }
  389.                 if ($propertyThreeMovement) {
  390.                     $propertyGroupIds[] = $propertyThreeMovement;
  391.                 }
  392.                 if ($propertyFourMovement) {
  393.                     $propertyGroupIds[] = $propertyFourMovement;
  394.                 }
  395.                 if ($propertyFiveMovement) {
  396.                     $propertyGroupIds[] = $propertyFiveMovement;
  397.                 }
  398.                 //Movement Listing Part Properties
  399.                 if ($propertyOneMovementPart) {
  400.                     $propertyGroupIds[] = $propertyOneMovementPart;
  401.                 }
  402.                 if ($propertyTwoMovementPart) {
  403.                     $propertyGroupIds[] = $propertyTwoMovementPart;
  404.                 }
  405.             }
  406.             if (count($propertyGroupIds) > 0) {
  407.                 $propertyGroupCriteria = new Criteria();
  408.                 $propertyGroupCriteria->addFilter(new EqualsAnyFilter("id"$propertyGroupIds));
  409. //                    $propertyGroupCriteria->addAssociation("options");
  410.                 $propertyGroups $this->propertyRepository->search($propertyGroupCriteria$event->getContext());
  411.                 /** @var PropertyGroupEntity $propertyGroup */
  412.                 foreach ($propertyGroups as $propertyGroup) {
  413.                     if ($propertyOne && $propertyOne == $propertyGroup->getId()) {
  414.                         $category->addExtension("propOne"$propertyGroup);
  415.                     }
  416.                     if ($propertyTwo && $propertyTwo == $propertyGroup->getId()) {
  417.                         $category->addExtension("propTwo"$propertyGroup);
  418.                     }
  419.                     if ($propertyThree && $propertyThree == $propertyGroup->getId()) {
  420.                         $category->addExtension("propThree"$propertyGroup);
  421.                     }
  422.                     if ($propertyFour && $propertyFour == $propertyGroup->getId()) {
  423.                         $category->addExtension("propFour"$propertyGroup);
  424.                     }
  425.                     if ($propertyFive && $propertyFive == $propertyGroup->getId()) {
  426.                         $category->addExtension("propFive"$propertyGroup);
  427.                     }
  428.                     if ($propertySix && $propertySix == $propertyGroup->getId()) {
  429.                         $category->addExtension("propSix"$propertyGroup);
  430.                     }
  431.                     if ($propertyOneMovement && $propertyOneMovement == $propertyGroup->getId()) {
  432.                         $category->addExtension("propertyOneMovement"$propertyGroup);
  433.                     }
  434.                     if ($propertyTwoMovement && $propertyTwoMovement == $propertyGroup->getId()) {
  435.                         $category->addExtension("propertyTwoMovement"$propertyGroup);
  436.                     }
  437.                     if ($propertyThreeMovement && $propertyThreeMovement == $propertyGroup->getId()) {
  438.                         $category->addExtension("propertyThreeMovement"$propertyGroup);
  439.                     }
  440.                     if ($propertyFourMovement && $propertyFourMovement == $propertyGroup->getId()) {
  441.                         $category->addExtension("propertyFourMovement"$propertyGroup);
  442.                     }
  443.                     if ($propertyFiveMovement && $propertyFiveMovement == $propertyGroup->getId()) {
  444.                         $category->addExtension("propertyFiveMovement"$propertyGroup);
  445.                     }
  446.                     if ($propertyOneMovementPart && $propertyOneMovementPart == $propertyGroup->getId()) {
  447.                         $category->addExtension("propertyOneMovementPart"$propertyGroup);
  448.                     }
  449.                     if ($propertyTwoMovementPart && $propertyTwoMovementPart == $propertyGroup->getId()) {
  450.                         $category->addExtension("propertyTwoMovementPart"$propertyGroup);
  451.                     }
  452.                 }
  453.             }
  454.             $event->getSalesChannelContext()->addExtension("currentCategory"$category);
  455.         }
  456.     }
  457.     public function dump($value)
  458.     {
  459.         if (class_exists(CliDumper::class)) {
  460.             $dumper 'cli' === PHP_SAPI ? new CliDumper : new HtmlDumper;
  461.             $cloner = new VarCloner();
  462.             $cloner->setMaxItems(5000);
  463.             $cloner->setMinDepth(6);
  464.             $dumper->dump($cloner->cloneVar($value));
  465.         } else {
  466.             var_dump($value);
  467.         }
  468.         die(1);
  469.     }
  470. }