custom/plugins/NetiNextEasyCoupon/src/Subscriber/ExportSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace NetInventors\NetiNextEasyCoupon\Subscriber;
  4. use NetInventors\NetiNextEasyCoupon\Core\Content\Condition\ConditionEntity;
  5. use Shopware\Core\Content\ImportExport\Event\ImportExportBeforeExportRecordEvent;
  6. use Shopware\Core\Framework\Context;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. class ExportSubscriber implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var EntityRepositoryInterface
  17.      */
  18.     private $conditionRepository;
  19.     /**
  20.      * ExportSubscriber constructor.
  21.      *
  22.      * @param EntityRepositoryInterface $conditionRepository
  23.      */
  24.     public function __construct(EntityRepositoryInterface $conditionRepository)
  25.     {
  26.         $this->conditionRepository $conditionRepository;
  27.     }
  28.     public static function getSubscribedEvents()
  29.     {
  30.         return [
  31.             ImportExportBeforeExportRecordEvent::class => 'beforeExport',
  32.         ];
  33.     }
  34.     public function beforeExport(ImportExportBeforeExportRecordEvent $event)
  35.     {
  36.         if ('neti_easy_coupon' !== $event->getConfig()->get('sourceEntity')) {
  37.             return;
  38.         }
  39.         $record          $event->getRecord();
  40.         $conditions      $this->getCouponConditions($record['id']);
  41.         $conditionsArray = [];
  42.         if ($conditions->getElements() !== []) {
  43.             /** @var ConditionEntity $condition */
  44.             foreach ($conditions->getElements() as $condition) {
  45.                 $conditionArray             = [];
  46.                 $conditionArray['id']       = $condition->getId();
  47.                 $conditionArray['couponId'] = $condition->getCouponId();
  48.                 $conditionArray['parentId'] = $condition->getParentId();
  49.                 $conditionArray['value']    = $condition->getValue();
  50.                 $conditionArray['position'] = $condition->getPosition();
  51.                 //getType crashes if the return value not a string, for some reason we also save a null value
  52.                 // there for a dirty solution is needed
  53.                 try {
  54.                     $conditionArray['type'] = $condition->getType();
  55.                 } catch (\TypeError $exception) {
  56.                     $conditionArray['type'] = null;
  57.                 }
  58.                 $conditionsArray[] = $conditionArray;
  59.             }
  60.         }
  61.         $jsonConditions       json_encode($conditionsArray);
  62.         $record['conditions'] = $jsonConditions;
  63.         $event->setRecord($record);
  64.     }
  65.     /**
  66.      * @param string $couponId
  67.      *
  68.      * @return EntitySearchResult
  69.      */
  70.     private function getCouponConditions(string $couponId): EntitySearchResult
  71.     {
  72.         $criteria = new Criteria();
  73.         $criteria->addFilter(new EqualsFilter('couponId'$couponId));
  74.         $criteria->addSorting(new FieldSorting('createdAt'FieldSorting::ASCENDING));
  75.         return $this->conditionRepository->search($criteriaContext::createDefaultContext());
  76.     }
  77. }