custom/static-plugins/NdStl/src/DataResolver/ShopTheLookSlider.php line 67

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Nd\Stl\DataResolver;
  3. use Nd\Stl\Struct\LookSliderStruct;
  4. use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
  5. use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;
  6. use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
  7. use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
  8. use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
  9. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\NotFilter;
  13. use Shopware\Core\Framework\Uuid\Uuid;
  14. class ShopTheLookSlider extends AbstractCmsElementResolver
  15. {
  16.     private EntityRepository $lookRepository;
  17.     public function __construct(EntityRepository $lookRepository)
  18.     {
  19.         $this->lookRepository $lookRepository;
  20.     }
  21.     public function getType(): string
  22.     {
  23.         return 'shop-the-look-slider';
  24.     }
  25.     public function collect(CmsSlotEntity $slotResolverContext $resolverContext): ?CriteriaCollection
  26.     {
  27.         return null;
  28.     }
  29.     public function enrich(CmsSlotEntity $slotResolverContext $resolverContextElementDataCollection $result): void
  30.     {
  31.         $selectedLooks $slot->getConfig()['looks']['value'] ?? [];
  32.         $request $resolverContext->getRequest();
  33.         $removeLookIds = [];
  34.         if ($request->get('_route') === 'frontend.look.detail') {
  35.             $currentLookId $request->get('lookId');
  36.             if (is_string($currentLookId) && Uuid::isValid($currentLookId)) {
  37.                 $removeLookIds = [$currentLookId];
  38.             }
  39.         }
  40.         $criteria = new Criteria();
  41.         $criteria->setTitle('cms::shop-the-look-slider');
  42.         $criteria->addAssociation('cover');
  43.         if (count($selectedLooks) === 0  && count($removeLookIds) > 0) {
  44.             $criteria->addFilter(new NotFilter(NotFilter::CONNECTION_AND, [
  45.                 new EqualsAnyFilter('id'$removeLookIds)
  46.             ]));
  47.         }
  48.         if (count($selectedLooks) > 0) {
  49.             if (count($removeLookIds) > 0) {
  50.                 $selectedLooks array_diff($selectedLooks$removeLookIds);
  51.             }
  52.             $criteria->addFilter(new EqualsAnyFilter('id'$selectedLooks));
  53.         }
  54.         $looks $this->lookRepository->search($criteria$resolverContext->getSalesChannelContext()->getContext());
  55.         $data = new LookSliderStruct();
  56.         $slot->setData($data);
  57.         $data->setLooks($looks);
  58.     }
  59. }