src/EventSubscriber/PaymentSuccessSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\OrderItem;
  4. use App\Event\PaymentSuccessEvent;
  5. use App\Service\Manager\OrderManager;
  6. use App\Service\Manager\SiteManager;
  7. use App\Service\Site\SiteValidDateResolver;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class PaymentSuccessSubscriber implements EventSubscriberInterface
  10. {
  11.     private $siteManager;
  12.     private $validDateResolver;
  13.     private $orderManager;
  14.     public function __construct(
  15.         SiteManager $siteManager,
  16.         SiteValidDateResolver $validDateResolver,
  17.         OrderManager $orderManager
  18.     ) {
  19.         $this->siteManager $siteManager;
  20.         $this->validDateResolver $validDateResolver;
  21.         $this->orderManager $orderManager;
  22.     }
  23.     public static function getSubscribedEvents()
  24.     {
  25.         return [
  26.             PaymentSuccessEvent::class => [
  27.                 ['onPaymentSuccessUpdateSite'1],
  28.                 ['onPaymentSuccessOrderComplete', -2],
  29.             ],
  30.         ];
  31.     }
  32.     public function onPaymentSuccessUpdateSite(PaymentSuccessEvent $event)
  33.     {
  34.         $order $event->getOrder();
  35.         foreach ($order->getItems() as $orderItem) {
  36.             /** @var OrderItem $orderItem */
  37.             $site $orderItem->getSite();
  38.             $site->setSubscriptionType($orderItem->getSubscriptionType());
  39.             $site->setSubscriptionContract($orderItem->getSubscriptionContract());
  40.             $site->setPrice($orderItem->getAmount());
  41.             $site->setCurrency($order->getCurrency());
  42.             $site->setValidTo($this->validDateResolver->getBySiteSubscriptionContract($site));
  43.             $this->siteManager->save($site);
  44.         }
  45.     }
  46.     public function onPaymentSuccessOrderComplete(PaymentSuccessEvent $event)
  47.     {
  48.         $order $event->getOrder();
  49.         $this->orderManager->completed($order);
  50.     }
  51. }