<?phpdeclare(strict_types=1);namespace App\CoreBundle\EventSubscriber;use App\CoreBundle\Command\WooDeleteCouponCommand;use App\CoreBundle\Command\WooSyncCouponCommand;use App\CoreBundle\Component\WooCommerce\WooCommerce;use App\CoreBundle\Model\Coupon\Coupon;use App\CoreBundle\Model\Coupon\CouponDataFactoryInterface;use App\CoreBundle\Model\Coupon\CouponEvent;use App\CoreBundle\Model\Coupon\CouponFacade;use App\CoreBundle\Model\Coupon\Variant\CouponVariantFacade;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\Process\Process;class CouponEventSubscriber implements EventSubscriberInterface{ /** * @var \App\CoreBundle\Component\WooCommerce\WooCommerce */ private $wooCommerce; /** * @var \App\CoreBundle\Command\WooSyncCouponCommand */ private $wooSyncCouponCommand; /** * @var \App\CoreBundle\Command\WooDeleteCouponCommand */ private $wooDeleteCouponCommand; /** * @var \App\CoreBundle\Model\Coupon\CouponDataFactoryInterface */ private $couponDataFactory; /** * @param \App\CoreBundle\Component\WooCommerce\WooCommerce $wooCommerce * @param \App\CoreBundle\Command\WooSyncCouponCommand $wooSyncCouponCommand * @param \App\CoreBundle\Command\WooDeleteCouponCommand $wooDeleteCouponCommand * @param \App\CoreBundle\Model\Coupon\CouponFacade $couponFacade * @param \App\CoreBundle\Model\Coupon\CouponDataFactoryInterface $couponDataFactory */ public function __construct( WooCommerce $wooCommerce, WooSyncCouponCommand $wooSyncCouponCommand, WooDeleteCouponCommand $wooDeleteCouponCommand, CouponFacade $couponFacade, CouponDataFactoryInterface $couponDataFactory ) { $this->wooCommerce = $wooCommerce; $this->wooSyncCouponCommand = $wooSyncCouponCommand; $this->wooDeleteCouponCommand = $wooDeleteCouponCommand; $this->couponFacade = $couponFacade; $this->couponDataFactory = $couponDataFactory; } /** * @param \App\CoreBundle\Model\Coupon\CouponEvent $couponVariant */ public function syncAllCoupons(CouponEvent $couponVariant): void { $command = $this->wooSyncCouponCommand->getShellCommand(); $process = \Symfony\Component\Process\Process::fromShellCommandline($command); $process->start(); } /** * @param \App\CoreBundle\Model\Coupon\CouponEvent $couponVariant */ public function deleteCoupon(CouponEvent $couponVariant): void { $coupon = $couponVariant->getCoupon(); if ($coupon instanceof Coupon) { $command = $this->wooDeleteCouponCommand->getShellCommand($coupon->getId()); $process = \Symfony\Component\Process\Process::fromShellCommandline($command); $process->start(); $this->waitProcess($process); } } public function waitProcess(Process $process) { while ($process) { if ($process->isRunning() === true) { break; } $process = null; } sleep(1); } /** * @return array */ public static function getSubscribedEvents(): array { return [ CouponEvent::CREATE => 'syncAllCoupons', CouponEvent::UPDATE => 'syncAllCoupons', CouponEvent::DELETE => 'deleteCoupon', ]; }}