app/Plugin/PointExpired/PointExpiredEvent.php line 70

Open in your IDE?
  1. <?php
  2. /*
  3. * Plugin Name : PointExpired
  4. *
  5. * Copyright (C) BraTech Co., Ltd. All Rights Reserved.
  6. * http://www.bratech.co.jp/
  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 Plugin\PointExpired;
  12. use Eccube\Event\EccubeEvents;
  13. use Eccube\Event\EventArgs;
  14. use Eccube\Event\TemplateEvent;
  15. use Plugin\PointExpired\Repository\ConfigRepository;
  16. use Plugin\PointExpired\Service\PointExpiredService;
  17. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  18. use Symfony\Component\HttpKernel\KernelEvents;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  21. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  22. use Symfony\Component\Workflow\Event\Event;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. class PointExpiredEvent implements EventSubscriberInterface
  25. {
  26.     private $entityManager;
  27.     private $authorizationChecker;
  28.     private $tokenStorage;
  29.     private $configRepository;
  30.     private $pointexpiredService;
  31.     public function __construct(
  32.             EntityManagerInterface $entityManager,
  33.             AuthorizationCheckerInterface $authorizationChecker,
  34.             TokenStorageInterface $tokenStorage,
  35.             ConfigRepository $configRepository,
  36.             PointExpiredService $pointExpiredService
  37.             )
  38.     {
  39.         $this->entityManager $entityManager;
  40.         $this->authorizationChecker $authorizationChecker;
  41.         $this->tokenStorage $tokenStorage;
  42.         $this->configRepository $configRepository;
  43.         $this->pointexpiredService $pointExpiredService;
  44.     }
  45.     /**
  46.      * @return array
  47.      */
  48.     public static function getSubscribedEvents()
  49.     {
  50.         return [
  51.             KernelEvents::CONTROLLER => 'checkPointExpired',
  52.             EccubeEvents::FRONT_ENTRY_INDEX_COMPLETE => 'hookFrontEntryIndexComplete',
  53.             EccubeEvents::FRONT_SHOPPING_COMPLETE_INITIALIZE => 'hookFrontShoppingCompleteInitialize',
  54.             'workflow.order.transition.cancel' => 'rollbackPeriod',
  55.             'workflow.order.transition.back_to_in_progress' => 'extendPeriod',
  56.             'workflow.order.transition.return' => 'rollbackPeriod',
  57.             'workflow.order.transition.cancel_return' => 'extendPeriod',
  58.             '@admin/Customer/index.twig' => 'onTemplateAdminCustomer',
  59.             '@MailMagazine4/admin/index.twig' => 'onTemplateAdminCustomer',
  60.             '@MailMagazine4/admin/history_condition.twig' => 'onTemplateMailmagazineHistoryCondition',
  61.                 ];
  62.     }
  63.     public function checkPointExpired(FilterControllerEvent $event)
  64.     {
  65.         if (!$event->isMasterRequest()) {
  66.             return;
  67.         }
  68.         $request $event->getRequest();
  69.         $attributes $request->attributes;
  70.         $route $attributes->get('_route');
  71.         $checkList = ['homepage','mypage','cart','shopping'];
  72.         if (in_array($route$checkList)){
  73.             if ($this->authorizationChecker->isGranted('ROLE_USER')) {
  74.                 $Customer $this->tokenStorage->getToken()->getUser();
  75.                 if($Customer instanceof \Eccube\Entity\Customer){
  76.                     $expiredDate $Customer->getPointExpiredDate();
  77.                     if($expiredDate instanceof \DateTime){
  78.                         $now = new \DateTime();
  79.                         if($expiredDate $now){
  80.                             $Customer->setPoint(0);
  81.                             $this->entityManager->persist($Customer);
  82.                             $this->entityManager->flush($Customer);
  83.                         }
  84.                     }
  85.                 }
  86.             }
  87.         }
  88.     }
  89.     public function hookFrontShoppingCompleteInitialize(EventArgs $event)
  90.     {
  91.         $Order $event->getArgument('Order');
  92.         $Customer $Order->getCustomer();
  93.         if($Customer instanceof \Eccube\Entity\Customer){
  94.             $period $this->pointexpiredService->getExpiredPeriod($Customer);
  95.             if(!is_null($period)){
  96.                 $date = new \DateTime();
  97.                 $date->modify('+ '$period .' days');
  98.                 $expiredDate $Customer->getPointExpiredDate();
  99.                 $Order->setPrevPointExpiredDate($expiredDate)
  100.                         ->setExtensionPeriod($period);
  101.                 $this->entityManager->persist($Order);
  102.                 $this->entityManager->flush($Order);
  103.                 if($expiredDate instanceof \DateTime){
  104.                     if($date $expiredDate){
  105.                         $Customer->setPointExpiredDate($date);
  106.                     }
  107.                 }else{
  108.                     $Customer->setPointExpiredDate($date);
  109.                 }
  110.                 $this->entityManager->persist($Customer);
  111.                 $this->entityManager->flush($Customer);
  112.             }
  113.         }
  114.     }
  115.     public function extendPeriod(Event $event)
  116.     {
  117.         $Order $event->getSubject()->getOrder();
  118.         $Customer $Order->getCustomer();
  119.         if ($Customer) {
  120.             $period $this->pointexpiredService->getExpiredPeriod($Customer);
  121.             if(!is_null($period)){
  122.                 $date $Order->getOrderDate();
  123.                 if(is_null($date))return;
  124.                 $date->modify('+ '$period .' days');
  125.                 $expiredDate $Customer->getPointExpiredDate();
  126.                 $Order->setPrevPointExpiredDate($expiredDate)
  127.                       ->setExtensionPeriod($period);
  128.                 $this->entityManager->persist($Order);
  129.                 $this->entityManager->flush($Order);
  130.                 if($expiredDate instanceof \DateTime){
  131.                     if($date $expiredDate){
  132.                         $Customer->setPointExpiredDate($date);
  133.                     }
  134.                 }else{
  135.                     $Customer->setPointExpiredDate($date);
  136.                 }
  137.             }
  138.         }
  139.     }
  140.     public function rollbackPeriod(Event $event)
  141.     {
  142.         $Order $event->getSubject()->getOrder();
  143.         $Customer $Order->getCustomer();
  144.         if ($Customer) {
  145.             $period $Order->getExtensionPeriod();
  146.             $expiredDate $Order->getPrevPointExpiredDate();
  147.             if(!is_null($period)){
  148.                 if($expiredDate instanceof \DateTime){
  149.                     $Customer->setPointExpiredDate($expiredDate);
  150.                 }else{
  151.                     $expiredDate $Customer->getPointExpiredDate();
  152.                     if($expiredDate instanceof \DateTime){
  153.                         $expiredDate->modify('- '$period .' days');
  154.                         $date = new \DateTime($expiredDate->format('Y/m/d'));
  155.                         $Customer->setPointExpiredDate($date);
  156.                     }
  157.                 }
  158.             }else{
  159.                 // ver.1.0.0の設定のために残す
  160.                 $period $this->pointexpiredService->getExpiredPeriod($Customer);
  161.                 if(!is_null($period)){
  162.                     $expiredDate $Customer->getPointExpiredDate();
  163.                     if($expiredDate instanceof \DateTime){
  164.                         $expiredDate->modify('- '$period .' days');
  165.                         $date = new \DateTime($expiredDate->format('Y/m/d'));
  166.                         $Customer->setPointExpiredDate($date);
  167.                     }
  168.                 }
  169.             }
  170.         }
  171.     }
  172.     public function hookFrontEntryIndexComplete(EventArgs $event)
  173.     {
  174.         $Customer $event->getArgument('Customer');
  175.         $config $this->configRepository->findOneBy(['name' => 'period']);
  176.         if($config){
  177.             $period $config->getValue();
  178.             $Customer->setExtensionPeriod($period);
  179.             $this->entityManager->persist($Customer);
  180.             $this->entityManager->flush($Customer);
  181.         }
  182.     }
  183.     public function onTemplateAdminCustomer(TemplateEvent $event)
  184.     {
  185.         $twig '@PointExpired/admin/Customer/customer_search.twig';
  186.         $event->addSnippet($twig);
  187.         $js '@PointExpired/admin/Customer/customer_search.js';
  188.         $event->addAsset($js);
  189.     }
  190.     public function onTemplateMailmagazineHistoryCondition(TemplateEvent $event)
  191.     {
  192.         $parameters $event->getParameters();
  193.         $searchData $parameters['search_data'];
  194.         $parameters['search_data'] = $searchData;
  195.         $event->setParameters($parameters);
  196.         $twig '@PointExpired/admin/mailmagazine_history_condition_add.twig';
  197.         $event->addSnippet($twig);
  198.         $js '@PointExpired/admin/mailmagazine_history_condition_add.js';
  199.         $event->addAsset($js);
  200.     }
  201. }