core/lib/Thelia/Action/Delivery.php line 32

  1. <?php
  2. /*
  3.  * This file is part of the Thelia package.
  4.  * http://www.thelia.net
  5.  *
  6.  * (c) OpenStudio <info@thelia.net>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Thelia\Action;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Thelia\Core\Event\Delivery\DeliveryPostageEvent;
  15. use Thelia\Core\Event\TheliaEvents;
  16. use Thelia\Module\AbstractDeliveryModule;
  17. use Thelia\Module\DeliveryModuleWithStateInterface;
  18. /**
  19.  * Class Delivery.
  20.  *
  21.  * @author Julien Chanséaume <julien@thelia.net>
  22.  */
  23. class Delivery implements EventSubscriberInterface
  24. {
  25.     /**
  26.      * Get postage from module using the classical module functions.
  27.      */
  28.     public function getPostage(DeliveryPostageEvent $event$eventNameEventDispatcherInterface $dispatcher): void
  29.     {
  30.         /** @var AbstractDeliveryModule $module */
  31.         $module $event->getModule();
  32.         // dispatch event to target specific module
  33.         $dispatcher->dispatch(
  34.             $event,
  35.             TheliaEvents::getModuleEvent(
  36.                 TheliaEvents::MODULE_DELIVERY_GET_POSTAGE,
  37.                 $module->getCode()
  38.             )
  39.         );
  40.         if ($event->isPropagationStopped()) {
  41.             return;
  42.         }
  43.         // Add state param to isValidDelivery only if module handle state
  44.         $isValidModule $module instanceof DeliveryModuleWithStateInterface
  45.             $module->isValidDelivery($event->getCountry(), $event->getState())
  46.             : $module->isValidDelivery($event->getCountry());
  47.         $event->setValidModule($isValidModule)
  48.             ->setDeliveryMode($module->getDeliveryMode());
  49.         if ($event->isValidModule()) {
  50.             // Add state param to getPostage only if module handle state
  51.             $modulePostage $module instanceof DeliveryModuleWithStateInterface
  52.                 $module->getPostage($event->getCountry(), $event->getState())
  53.                 : $module->getPostage($event->getCountry());
  54.             $event->setPostage($modulePostage);
  55.         }
  56.     }
  57.     /**
  58.      * {@inheritdoc}
  59.      */
  60.     public static function getSubscribedEvents()
  61.     {
  62.         return [
  63.             TheliaEvents::MODULE_DELIVERY_GET_POSTAGE => ['getPostage'128],
  64.         ];
  65.     }
  66. }