app/Plugin/Karte/KarteEvent.php line 74

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Plugin\Karte;
  13. use Eccube\Entity\Cart;
  14. use Eccube\Entity\Customer;
  15. use Eccube\Entity\Order;
  16. use Eccube\Entity\OrderItem;
  17. use Eccube\Entity\Page;
  18. use Eccube\Entity\ProductCategory;
  19. use Eccube\Event\TemplateEvent;
  20. use Plugin\Karte\Repository\KarteConfigRepository;
  21. use Symfony\Component\DependencyInjection\ContainerInterface;
  22. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  23. use Twig\Environment;
  24. class KarteEvent implements EventSubscriberInterface
  25. {
  26.     /**
  27.      * @var KarteConfigRepository
  28.      */
  29.     protected $karteConfigRepository;
  30.     /**
  31.      * @var Environment
  32.      */
  33.     protected $twig;
  34.     /**
  35.      * @var ContainerInterface
  36.      */
  37.     protected $container;
  38.     /**
  39.      * @param ContainerInterface $container
  40.      * @param KarteConfigRepository $karteConfigRepository
  41.      * @param Environment $twig
  42.      */
  43.     public function __construct(ContainerInterface $container,
  44.                                 KarteConfigRepository $karteConfigRepository,
  45.                                 Environment $twig)
  46.     {
  47.         $this->karteConfigRepository $karteConfigRepository;
  48.         $this->twig $twig;
  49.         $this->container $container;
  50.     }
  51.     /**
  52.      * @return array
  53.      */
  54.     public static function getSubscribedEvents()
  55.     {
  56.         return [
  57.             'default_frame.twig' => 'head',
  58.         ];
  59.     }
  60.     /**
  61.      * @param TemplateEvent $event
  62.      */
  63.     public function head(TemplateEvent $event)
  64.     {
  65.         $source $this->twig->getLoader()
  66.             ->getSourceContext('@Karte/tag/head.twig')
  67.             ->getCode();
  68.         /** @var Page $page */
  69.         $page $event->getParameter('Page');
  70.         $userAge null;
  71.         /** @var Customer $user */
  72.         $user $this->getUser();
  73.         if ($user && $user->getBirth()) {
  74.             $userAge $user->getBirth()->diff(new \DateTime())->y;
  75.         }
  76.         $event->setParameter('PlgKarteConfig'$this->karteConfigRepository->get());
  77.         $event->setParameter('PlgKarteUserAge'$userAge);
  78.         $data $event->getSource();
  79.         switch ($page->getUrl()) {
  80.             case 'cart':
  81.                 /** @var Cart[] $Carts */
  82.                 $Carts $event->getParameter('Carts');
  83.                 $productCategory = [];
  84.                 $PlgKarteTotalPrice 0;
  85.                 $PlgKarteTotalQuantity 0;
  86.                 foreach ($Carts as $cart) {
  87.                     $PlgKarteTotalQuantity += $cart->getTotalQuantity();
  88.                     foreach ($cart->getItems() as $item) {
  89.                         $PlgKarteTotalPrice += $item->getProductClass()->getPrice02() * $item->getQuantity();
  90.                         if (!array_key_exists($item->getProductClass()->getProduct()->getId(), $productCategory)) {
  91.                             /** @var []ProductCategory $pcs */
  92.                             $pcs $item->getProductClass()->getProduct()->getProductCategories();
  93.                             foreach ($pcs as $pc) {
  94.                                 $productCategory[$pc->getProductId()] = $pc->getCategory()->getName();
  95.                                 break;
  96.                             }
  97.                         }
  98.                     }
  99.                 }
  100.                 $event->setParameter('PlgKarteProductCategory'$productCategory);
  101.                 $event->setParameter('PlgKarteTotalPrice'$PlgKarteTotalPrice);
  102.                 $event->setParameter('PlgKarteTotalQuantity'$PlgKarteTotalQuantity);
  103.                 break;
  104.             case 'shopping_complete':
  105.                 $productCategory = [];
  106.                 $revenue 0;
  107.                 $shipping 0;
  108.                 /** @var Order $Order */
  109.                 $Order $event->getParameter('Order');
  110.                 $revenueTotal 0;
  111.                 /** @var OrderItem $item */
  112.                 foreach ($Order->getItems() as $item) {
  113.                     if ($item->isProduct()) {
  114.                         $revenue += $item->getQuantity() * $item->getPrice();
  115.                         $revenueTotal += $item->getTotalPrice();
  116.                         if (!array_key_exists($item->getProduct()->getId(), $productCategory)) {
  117.                             /** @var []ProductCategory $pcs */
  118.                             $pcs $item->getProduct()->getProductCategories();
  119.                             foreach ($pcs as $pc) {
  120.                                 $productCategory[$pc->getProductId()] = $pc->getCategory()->getName();
  121.                                 break;
  122.                             }
  123.                         }
  124.                     } else if ($item->isDeliveryFee()) {
  125.                         $shipping $item->getTotalPrice();
  126.                     }
  127.                 }
  128.                 $event->setParameter('PlgKarteProductCategory'$productCategory);
  129.                 $event->setParameter('PlgKarteRevenue'$revenue);
  130.                 $event->setParameter('PlgKarteShipping'$shipping);
  131.                 $event->setParameter('PlgKarteTax'$revenueTotal $revenue);
  132.                 break;
  133.         }
  134.         $event->setSource(str_replace('</head>'$source "\n</head>"$data));
  135.     }
  136.     protected function getUser()
  137.     {
  138.         if (!$this->container->has('security.token_storage')) {
  139.             throw new \LogicException('The SecurityBundle is not registered in your application. Try running "composer require symfony/security-bundle".');
  140.         }
  141.         if (null === $token $this->container->get('security.token_storage')->getToken()) {
  142.             return null;
  143.         }
  144.         if (!\is_object($user $token->getUser())) {
  145.             // e.g. anonymous authentication
  146.             return null;
  147.         }
  148.         return $user;
  149.     }
  150. }