vendor/dvdw/events/src/Content/DvdwEvent/Cms/CountdownEventCmsElementResolver.php line 39

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Dvdw\Events\Content\DvdwEvent\Cms;
  3. use Dvdw\Events\Content\DvdwEvent\SalesChannel\AbstractDvdwEventRoute;
  4. use Dvdw\Events\Content\DvdwEvent\Struct\DvdwEventContextExtension;
  5. use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
  6. use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;
  7. use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
  8. use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
  9. use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
  10. use Shopware\Core\Defaults;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  13. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\RangeFilter;
  14. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  15. class CountdownEventCmsElementResolver extends AbstractCmsElementResolver
  16. {
  17.     private AbstractDvdwEventRoute $listingRoute;
  18.     public function __construct(
  19.         AbstractDvdwEventRoute $listingRoute
  20.     )
  21.     {
  22.         $this->listingRoute $listingRoute;
  23.     }
  24.     public function getType(): string
  25.     {
  26.         return 'countdown-event';
  27.     }
  28.     public function collect(CmsSlotEntity $slotResolverContext $resolverContext): ?CriteriaCollection
  29.     {
  30.         return null;
  31.     }
  32.     public function enrich(CmsSlotEntity $slotResolverContext $resolverContextElementDataCollection $result): void
  33.     {
  34.         $config $slot->getConfig();
  35.         $context $resolverContext->getSalesChannelContext();
  36.         $request $resolverContext->getRequest();
  37.         if (isset($config['eventId'])) {
  38.             $criteria = new Criteria([$config['eventId']['value']]);
  39.             $criteria->setTitle('cms::event-moments-listing');
  40.             $event $this->listingRoute->load($request$criteria$context)->getDvdwEvents()->first();
  41.             if ($event !== null) {
  42.                 $slot->setData($event);
  43.                 return;
  44.             }
  45.         }
  46.         /** @var DvdwEventContextExtension|null $extension */
  47.         $extension $context->getExtension(DvdwEventContextExtension::KEY);
  48.         if ($extension !== null) {
  49.             $slot->setData($extension->getEvent());
  50.             return;
  51.         }
  52.         $criteria = new Criteria();
  53.         $criteria->setTitle('cms::event-moments-listing');
  54.         $criteria->addFilter(
  55.             new RangeFilter(
  56.                 'endDate',
  57.                 [RangeFilter::GTE => (new \DateTime())->format(Defaults::STORAGE_DATE_TIME_FORMAT)]
  58.             )
  59.         );
  60.         $criteria->addFilter(new EqualsAnyFilter('salesChannelIds', [$context->getSalesChannelId()]));
  61.         $criteria->addSorting(new FieldSorting('endDate'FieldSorting::ASCENDING));
  62.         $event $this->listingRoute
  63.             ->load($request$criteria$resolverContext->getSalesChannelContext())
  64.             ->getDvdwEvents()->first();
  65.         if ($event !== null) {
  66.             $slot->setData($event);
  67.         }
  68.     }
  69. }