src/CoreBundle/EventSubscriber/CouponEventSubscriber.php line 65

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\CoreBundle\EventSubscriber;
  4. use App\CoreBundle\Command\WooDeleteCouponCommand;
  5. use App\CoreBundle\Command\WooSyncCouponCommand;
  6. use App\CoreBundle\Component\WooCommerce\WooCommerce;
  7. use App\CoreBundle\Model\Coupon\Coupon;
  8. use App\CoreBundle\Model\Coupon\CouponDataFactoryInterface;
  9. use App\CoreBundle\Model\Coupon\CouponEvent;
  10. use App\CoreBundle\Model\Coupon\CouponFacade;
  11. use App\CoreBundle\Model\Coupon\Variant\CouponVariantFacade;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Process\Process;
  14. class CouponEventSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var \App\CoreBundle\Component\WooCommerce\WooCommerce
  18.      */
  19.     private $wooCommerce;
  20.     /**
  21.      * @var \App\CoreBundle\Command\WooSyncCouponCommand
  22.      */
  23.     private $wooSyncCouponCommand;
  24.     /**
  25.      * @var \App\CoreBundle\Command\WooDeleteCouponCommand
  26.      */
  27.     private $wooDeleteCouponCommand;
  28.     /**
  29.      * @var \App\CoreBundle\Model\Coupon\CouponDataFactoryInterface
  30.      */
  31.     private $couponDataFactory;
  32.     /**
  33.      * @param \App\CoreBundle\Component\WooCommerce\WooCommerce $wooCommerce
  34.      * @param \App\CoreBundle\Command\WooSyncCouponCommand $wooSyncCouponCommand
  35.      * @param \App\CoreBundle\Command\WooDeleteCouponCommand $wooDeleteCouponCommand
  36.      * @param \App\CoreBundle\Model\Coupon\CouponFacade $couponFacade
  37.      * @param \App\CoreBundle\Model\Coupon\CouponDataFactoryInterface $couponDataFactory
  38.      */
  39.     public function __construct(
  40.         WooCommerce $wooCommerce,
  41.         WooSyncCouponCommand $wooSyncCouponCommand,
  42.         WooDeleteCouponCommand $wooDeleteCouponCommand,
  43.         CouponFacade $couponFacade,
  44.         CouponDataFactoryInterface $couponDataFactory
  45.     )
  46.     {
  47.         $this->wooCommerce $wooCommerce;
  48.         $this->wooSyncCouponCommand $wooSyncCouponCommand;
  49.         $this->wooDeleteCouponCommand $wooDeleteCouponCommand;
  50.         $this->couponFacade $couponFacade;
  51.         $this->couponDataFactory $couponDataFactory;
  52.     }
  53.     /**
  54.      * @param \App\CoreBundle\Model\Coupon\CouponEvent $couponVariant
  55.      */
  56.     public function syncAllCoupons(CouponEvent $couponVariant): void
  57.     {
  58.         $command $this->wooSyncCouponCommand->getShellCommand();
  59.         $process = \Symfony\Component\Process\Process::fromShellCommandline($command);
  60.         $process->start();
  61.     }
  62.     /**
  63.      * @param \App\CoreBundle\Model\Coupon\CouponEvent $couponVariant
  64.      */
  65.     public function deleteCoupon(CouponEvent $couponVariant): void
  66.     {
  67.         $coupon $couponVariant->getCoupon();
  68.         if ($coupon instanceof Coupon) {
  69.             $command $this->wooDeleteCouponCommand->getShellCommand($coupon->getId());
  70.             $process = \Symfony\Component\Process\Process::fromShellCommandline($command);
  71.             $process->start();
  72.             $this->waitProcess($process);
  73.         }
  74.     }
  75.     public function waitProcess(Process $process)
  76.     {
  77.         while ($process) {
  78.             if ($process->isRunning() === true) {
  79.                 break;
  80.             }
  81.             $process null;
  82.         }
  83.         sleep(1);
  84.     }
  85.     /**
  86.      * @return array
  87.      */
  88.     public static function getSubscribedEvents(): array
  89.     {
  90.         return [
  91.             CouponEvent::CREATE => 'syncAllCoupons',
  92.             CouponEvent::UPDATE => 'syncAllCoupons',
  93.             CouponEvent::DELETE => 'deleteCoupon',
  94.         ];
  95.     }
  96. }