custom/plugins/NetiNextEasyCouponDesigns/src/Subscriber/Account.php line 42

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace NetInventors\NetiNextEasyCouponDesigns\Subscriber;
  4. use NetInventors\NetiNextEasyCoupon\Core\Content\EasyCoupon\EasyCouponEntity;
  5. use NetInventors\NetiNextEasyCoupon\Storefront\Page\Account\VoucherListingPageLoadedEvent;
  6. use NetInventors\NetiNextEasyCouponDesigns\Core\Content\Design\Aggregate\Variant\Aggregate\Type\TypeEntity;
  7. use NetInventors\NetiNextEasyCouponDesigns\Core\Content\EasyCoupon\Aggregate\Media\MediaEntity;
  8. use NetInventors\NetiNextEasyCouponDesigns\Service\PluginConfig;
  9. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. class Account implements EventSubscriberInterface
  14. {
  15.     private EntityRepositoryInterface $voucherRepository;
  16.     private PluginConfig              $pluginConfig;
  17.     private EntityRepositoryInterface $ecMediaRepository;
  18.     public function __construct(
  19.         EntityRepositoryInterface $voucherRepository,
  20.         PluginConfig              $pluginConfig,
  21.         EntityRepositoryInterface $ecMediaRepository
  22.     ) {
  23.         $this->voucherRepository $voucherRepository;
  24.         $this->pluginConfig      $pluginConfig;
  25.         $this->ecMediaRepository $ecMediaRepository;
  26.     }
  27.     public static function getSubscribedEvents(): array
  28.     {
  29.         return [
  30.             VoucherListingPageLoadedEvent::class => 'onVoucherListing',
  31.         ];
  32.     }
  33.     public function onVoucherListing(VoucherListingPageLoadedEvent $event): void
  34.     {
  35.         if (!$this->pluginConfig->isActive() || !$this->pluginConfig->isAccountDownloadEnabled()) {
  36.             return;
  37.         }
  38.         $page               $event->getPage();
  39.         $vouchers           $page->getVouchers();
  40.         $voucherIds         = [];
  41.         $availableDocuments = [];
  42.         $availableMedia     = [];
  43.         /** @var EasyCouponEntity $voucher */
  44.         foreach ($vouchers as $voucher) {
  45.             $voucherIds[] = $voucher->getId();
  46.         }
  47.         $criteria = new Criteria();
  48.         $criteria->addFilter(new EqualsAnyFilter('id'$voucherIds));
  49.         $criteria->addAssociation('documents');
  50.         $result $this->voucherRepository->search($criteria$event->getContext());
  51.         /** @var EasyCouponEntity $element */
  52.         foreach ($result->getElements() as $element) {
  53.             if (null === $element->getExtension('documents')->first()) {
  54.                 continue;
  55.             }
  56.             $elementId                      $element->getId();
  57.             $availableDocuments[$elementId] = $elementId;
  58.         }
  59.         $page->assign([ 'availableDesigns' => $availableDocuments ]);
  60.         $criteria = (new Criteria())->addFilter(new EqualsAnyFilter('easyCouponId'$voucherIds));
  61.         $ecMedia $this->ecMediaRepository->search($criteria$event->getContext());
  62.         /** @var MediaEntity $ecMedium */
  63.         foreach ($ecMedia->getElements() as $ecMedium) {
  64.             $types   $ecMedium->get('types');
  65.             $ecId    $ecMedium->get('easyCouponId');
  66.             $mediaId $ecMedium->get('mediaId');
  67.             if (!\is_string($types) || !\is_string($ecId) || !\is_string($mediaId)) {
  68.                 continue;
  69.             }
  70.             $typesArray explode(','$types);
  71.             if (!\in_array(TypeEntity::CODE_STANDARD_PDF$typesArrayfalse)) {
  72.                 continue;
  73.             }
  74.             $availableMedia[$ecId][] = $mediaId;
  75.         }
  76.         $page->assign([ 'availableMedia' => $availableMedia ]);
  77.     }
  78. }