app/Plugin/Synplgbase/Event.php line 685

Open in your IDE?
  1. <?php
  2. namespace Plugin\Synplgbase;
  3. use Eccube\Event\TemplateEvent;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Eccube\Entity\Block;
  6. use Eccube\Repository\BlockRepository;
  7. use Plugin\Synplgbase\Repository\ConfigRepository;
  8. use Eccube\Util\CacheUtil;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Eccube\Event\EccubeEvents;
  11. use Eccube\Event\EventArgs;
  12. use Symfony\Component\Validator\Constraints\DateTime;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Eccube\Common\EccubeConfig;
  17. use Eccube\Repository\BaseInfoRepository;
  18. use Eccube\Repository\PluginRepository;
  19. use Plugin\Synplgbase\Entity\PointHistory;
  20. use Plugin\Synplgbase\Repository\PointHistoryRepository;
  21. use Eccube\Repository\CustomerRepository;
  22. use Symfony\Component\Workflow\Event\Event as WorkflowEvent;
  23. use Eccube\Entity\ProductClass;
  24. use Symfony\Component\Filesystem\Filesystem;
  25. use Symfony\Component\HttpKernel\KernelEvents;
  26. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  27. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  28. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  29. use Symfony\Component\HttpFoundation\Cookie;
  30. use Symfony\Component\Routing\Route;
  31. use Symfony\Component\Routing\RouteCollection;
  32. use Symfony\Component\Routing\Exception\RouteNotFoundException;
  33. use Symfony\Component\Routing\RouterInterface;
  34. use Symfony\Component\Routing\Generator\UrlGenerator;
  35. use Symfony\Component\Routing\RequestContext;
  36. use Symfony\Component\HttpFoundation\RedirectResponse;
  37. use Symfony\Component\HttpFoundation\Response;
  38. use Eccube\Repository\PageRepository;
  39. use Symfony\Component\Routing\Matcher\UrlMatcherInterface;
  40. use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
  41. use Symfony\Component\Routing\Exception\ResourceNotFoundException;
  42. use Symfony\Component\DependencyInjection\ContainerInterface;
  43. use Twig\Environment;
  44. use Eccube\Request\Context;
  45. use Eccube\Entity\Master\DeviceType;
  46. use SunCat\MobileDetectBundle\DeviceDetector\MobileDetector;
  47. use Eccube\Entity\Layout;
  48. use Eccube\Entity\PageLayout;
  49. use Eccube\Repository\LayoutRepository;
  50. use Eccube\Repository\PageLayoutRepository;
  51. use Eccube\Common\Constant;
  52. use Eccube\Entity\Customer;
  53. use Eccube\Service\OrderHelper;
  54. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  55. use Eccube\Repository\Master\SexRepository;
  56. use Eccube\Service\MailService;
  57. use Eccube\Entity\Master\CustomerStatus;
  58. use Plugin\Synplgbase\Entity\CsvType;
  59. use Plugin\Synplgbase\Repository\CsvTypeRepository;
  60. use Eccube\Entity\Delivery;
  61. use Plugin\Synplgbase\Entity\DeliveryFeeAdvance;
  62. use Plugin\Synplgbase\Repository\DeliveryFeeAdvanceRepository;
  63. use Symfony\Component\Form\FormFactoryInterface;
  64. use Eccube\Form\Type\Admin\DeliveryType;
  65. use Symfony\Component\Form\Forms;
  66. class Event implements EventSubscriberInterface
  67. {
  68.     /**
  69.      * @var PageRepository
  70.      */
  71.     protected $pageRepository;
  72.     /**
  73.      * @var BlockRepository
  74.      */
  75.     protected $blockRepository;
  76.     /**
  77.      * @var ConfigRepository
  78.      */
  79.     protected $configRepository;
  80.     /**
  81.      * @var CacheUtil
  82.      */
  83.     protected $cacheUtil;
  84.     /**
  85.      * @var AuthorizationChecker
  86.      */
  87.     protected $authorizationChecker;
  88.     /**
  89.      * @var EntityManagerInterface
  90.      */
  91.     protected $entityManagerInterface;
  92.     /**
  93.      * @var EccubeConfig
  94.      */
  95.     protected $eccubeConfig;
  96.     /**
  97.      * @var BaseInfoRepository
  98.      */
  99.     protected $baseInfoRepository;
  100.     /**
  101.      * @var PluginRepository
  102.      */
  103.     protected $pluginRepository;
  104.     /**
  105.      * @var PointHistory
  106.      */
  107.     protected $pointHistory;
  108.     /**
  109.      * @var PointHistoryRepository
  110.      */
  111.     protected $pointHistoryRepository;
  112.     /**
  113.      * @var CustomerRepository
  114.      */
  115.     protected $customerRepository;
  116.     /**
  117.      * @var RouterInterface
  118.      */
  119.     protected $routerInterface;
  120.     
  121.     /**f
  122.      * @var UrlMatcherInterface
  123.      */
  124.     protected $urlMatcherInterface;
  125.     
  126.     /**
  127.      * @var ContainerInterface 
  128.      */
  129.     protected $containerInterface ;
  130.     /**
  131.      * @var Environment
  132.      */
  133.     protected $twig;
  134.     /**
  135.      * @var Context
  136.      */
  137.     protected $requestContext;
  138.     /**
  139.      * @var MobileDetector
  140.      */
  141.     private $mobileDetector;
  142.     /**
  143.      * @var PageLayoutRepository
  144.      */
  145.     protected $pageLayoutRepository;
  146.     /**
  147.      * @var LayoutRepository
  148.      */
  149.     private $layoutRepository;
  150.     /**
  151.      * @var SessionInterface
  152.      */
  153.     protected $session;
  154.     /**
  155.      * @var SexRepository
  156.      */
  157.     protected $sexRepository;
  158.     /**
  159.      * @var MailService
  160.      */
  161.     protected $mailService;
  162.     /**
  163.      * @var CsvTypeRepository
  164.      */
  165.     protected $csvTypeRepository;
  166.     /**
  167.      * @var DeliveryFeeAdvanceRepository
  168.      */
  169.     protected $deliveryFeeAdvanceRepository;
  170.     /**
  171.      * @var FormFactoryInterface
  172.      */
  173.     protected $formFactory;
  174.     /**
  175.      * Event constructor.
  176.      * 
  177.      * @param PageRepository $pageRepository
  178.      * @param BlockRepository $blockRepository
  179.      * @param ConfigRepository $configRepository
  180.      * @param CacheUtil $cacheUtil
  181.      * @param AuthorizationChecker $authorizationChecker
  182.      * @param EntityManagerInterface $entityManagerInterface
  183.      * @param EccubeConfig $eccubeConfig     
  184.      * @param BaseInfoRepository $baseInfoRepository
  185.      * @param PluginRepository $pluginRepository
  186.      * @param PointHistory $pointHistory
  187.      * @param PointHistoryRepository $pointHistoryRepository
  188.      * @param CustomerRepository $customerRepository
  189.      * @param RouterInterface $routerInterface
  190.      * @param UrlMatcherInterface|RequestMatcherInterface $urlMatcher   The URL or Request matcher
  191.      * @param ContainerInterface $containerInterface
  192.      * @param Environment $twig
  193.      * @param Context $context
  194.      * @param MobileDetector $mobileDetector
  195.      * @param PageLayoutRepository $pageLayoutRepository
  196.      * @param LayoutRepository $layoutRepository
  197.      * @param SessionInterface $session
  198.      * @param SexRepository $sexRepository
  199.      * @param MailService $mailService
  200.      * @param CsvTypeRepository $csvTypeRepository
  201.      * @param DeliveryFeeAdvanceRepository $deliveryFeeAdvanceRepository
  202.      * @param FormFactoryInterface $formFactory
  203.      * 
  204.      * @throws \InvalidArgumentException
  205.      */
  206.     public function __construct(
  207.         PageRepository $pageRepository,
  208.         BlockRepository $blockRepository,
  209.         ConfigRepository $configRepository,
  210.         CacheUtil $cacheUtil,
  211.         AuthorizationChecker $authorizationChecker,
  212.         EntityManagerInterface $entityManagerInterface,
  213.         EccubeConfig $eccubeConfig,
  214.         BaseInfoRepository $baseInfoRepository,
  215.         PluginRepository $pluginRepository,
  216.         PointHistory $pointHistory,
  217.         PointHistoryRepository $pointHistoryRepository,
  218.         CustomerRepository $customerRepository,
  219.         RouterInterface $routerInterface,
  220.         UrlMatcherInterface $urlMatcherInterface,
  221.         ContainerInterface $containerInterface,
  222.         Environment $twig,
  223.         Context $context,
  224.         MobileDetector $mobileDetector,
  225.         PageLayoutRepository $pageLayoutRepository,
  226.         LayoutRepository $layoutRepository,
  227.         SessionInterface $session,
  228.         SexRepository $sexRepository,
  229.         MailService $mailService,
  230.         CsvTypeRepository $csvTypeRepository,
  231.         DeliveryFeeAdvanceRepository $deliveryFeeAdvanceRepository,
  232.         FormFactoryInterface $formFactory)
  233.     {
  234.         $this->pageRepository $pageRepository;
  235.         $this->blockRepository $blockRepository;
  236.         $this->configRepository $configRepository;
  237.         $this->cacheUtil $cacheUtil;
  238.         $this->authorizationChecker $authorizationChecker;
  239.         $this->entityManagerInterface $entityManagerInterface;
  240.         $this->eccubeConfig $eccubeConfig;
  241.         $this->BaseInfo $baseInfoRepository->get();
  242.         $this->PluginRepository $pluginRepository;
  243.         $this->pointHistory $pointHistory;
  244.         $this->pointHistoryRepository $pointHistoryRepository;
  245.         $this->customerRepository $customerRepository;
  246.         $this->routerInterface $routerInterface;
  247.         $this->urlMatcherInterface $urlMatcherInterface;
  248.         $this->containerInterface $containerInterface;
  249.         $this->twig $twig;
  250.         $this->requestContext $context;
  251.         $this->mobileDetector $mobileDetector;
  252.         $this->pageLayoutRepository $pageLayoutRepository;
  253.         $this->layoutRepository $layoutRepository;
  254.         $this->session $session;
  255.         $this->sexRepository $sexRepository;
  256.         $this->mailService $mailService;
  257.         $this->csvTypeRepository $csvTypeRepository;
  258.         $this->deliveryFeeAdvanceRepository $deliveryFeeAdvanceRepository;
  259.         $this->formFactory $formFactory;
  260.     }
  261.     /**
  262.      * @return array
  263.      */
  264.     public static function getSubscribedEvents()
  265.     {
  266.         return [
  267.             KernelEvents::REQUEST => 'OnKernelRequest',
  268.             KernelEvents::RESPONSE => 'OnKernelResponse',
  269.             KernelEvents::CONTROLLER => 'onKernelController',
  270.             '@admin/default_frame.twig' => 'LoadAdminDefaultFrameTwig',
  271.             '@admin/Setting/Shop/shop_master.twig' => 'LoadAdminSettingShopShopMasterTwig',
  272.             '@admin/Setting/Shop/payment_edit.twig' => 'LoadAdminSettingShopPaymentEditTwig',
  273.             '@admin/Setting/Shop/delivery_edit.twig' => 'LoadAdminSettingShopDeliveryEditTwig',
  274.             '@admin/Product/index.twig' => 'LoadAdminProductIndexTwig',
  275.             '@admin/Product/product.twig' => 'LoadAdminProductProductTwig',
  276.             '@admin/Product/product_class.twig' => 'LoadAdminProductProductClassTwig',
  277.             '@admin/Product/category.twig' => 'LoadAdminProductCategoryTwig',
  278.             '@Synplgbase/admin/Customer/index.twig' => 'LoadAdminCustomerIndexTwig',//注意!!プラグイン用のtwigを使ってる
  279.             '@admin/Customer/edit.twig' => 'LoadAdminCustomerEditTwig',
  280.             '@admin/Order/index.twig' => 'LoadAdminOrderIndexTwig',
  281.             '@admin/Order/edit.twig' => 'LoadAdminOrderEditTwig',
  282.             'default_frame.twig' => 'LoadADefaultFrameTwig',
  283.             '@DataMigration4/admin/config.twig' => 'ClearCache',
  284.             EccubeEvents::FRONT_PRODUCT_DETAIL_INITIALIZE => 'FrontProductDetailInitialize',
  285.             EccubeEvents::FRONT_ENTRY_INDEX_COMPLETE => 'FrontEntryIndexComplete',
  286.             EccubeEvents::FRONT_SHOPPING_NONMEMBER_COMPLETE => 'FrontShoppingNonmemberComplete',
  287.             EccubeEvents::FRONT_SHOPPING_COMPLETE_INITIALIZE => 'FrontShoppingCompleteInitialize',
  288.             EccubeEvents::ADMIN_CUSTOMER_INDEX_SEARCH => 'AdminCustomerIndexSearch',
  289.             EccubeEvents::ADMIN_CUSTOMER_EDIT_INDEX_INITIALIZE => 'AdminCustomerEditIndexInitialize',
  290.             EccubeEvents::ADMIN_PRODUCT_INDEX_SEARCH => 'AdminProductIndexSearch',
  291.             EccubeEvents::ADMIN_PRODUCT_CATEGORY_DELETE_COMPLETE => 'AdminProductCategoryDeleteComplete',
  292.             EccubeEvents::ADMIN_ORDER_INDEX_SEARCH => 'AdminOrderIndexSearch',
  293.             EccubeEvents::ADMIN_SETTING_SHOP_DELIVERY_EDIT_INITIALIZE => 'AdminSettingShopDeliveryEditInitialize',
  294.             EccubeEvents::ADMIN_SETTING_SHOP_DELIVERY_EDIT_COMPLETE => 'AdminSettingShopDeliveryEditComplete',
  295.             EccubeEvents::ADMIN_SETTING_SHOP_DELIVERY_DELETE_COMPLETE => 'AdminSettingShopDeliveryDeleteComplete',
  296.             'workflow.order.transition.ship' => 'WorkflowOrderTransitionShip',
  297.             'workflow.order.transition.cancel' => 'WorkflowOrderTransitionCancel',
  298.             'workflow.order.transition.back_to_in_progress' => 'WorkflowOrderTransitionBackToInProgress',
  299.             'workflow.order.transition.return' => 'WorkflowOrderTransitionReturn',
  300.             'workflow.order.transition.cancel_return' => 'WorkflowOrderTransitionCancelReturn',
  301.         ];
  302.     }
  303.     /**
  304.      * @param TemplateEvent $event
  305.      */
  306.     public function LoadAdminDefaultFrameTwig(TemplateEvent $event)
  307.     {
  308.         $twig '@Synplgbase/admin/default_frame_snippet_open_detailsearch.twig';
  309.         $event->addAsset($twig);
  310.         $twig '@Synplgbase/admin/default_frame_snippet_header.twig';
  311.         $event->addAsset($twig);
  312.         $Config $this->configRepository->get();
  313.         $parameters $event->getParameters();
  314.         $parameters['admin_header'] = $Config->getAdminHeader();
  315.         $event->setParameters($parameters);
  316.     }
  317.     /**
  318.      * @param TemplateEvent $event
  319.      */
  320.     public function LoadAdminSettingShopShopMasterTwig(TemplateEvent $event){
  321.         $Config $this->configRepository->get();
  322.         if($Config->getDeliveryAdvanceFreeOn()){
  323.             $twig '@Synplgbase/admin/Setting/Shop/shop_master_snippet_delivery_advance_free_amount.twig';
  324.             $event->addSnippet($twig);
  325.         }
  326.         if($Config->getFirstPointOn()){
  327.             $twig '@Synplgbase/admin/Setting/Shop/shop_master_snippet_first_point.twig';
  328.             $event->addSnippet($twig);
  329.         }
  330.         if($Config->getWelcomePointOn()){
  331.             $twig '@Synplgbase/admin/Setting/Shop/shop_master_snippet_welcome_point.twig';
  332.             $event->addSnippet($twig);
  333.         }
  334.     }
  335.     /**
  336.      * @param TemplateEvent $event
  337.      */
  338.     public function LoadAdminSettingShopPaymentEditTwig(TemplateEvent $event){
  339.         $twig '@Synplgbase/admin/Setting/Shop/payment_edit_snippet_memo.twig';
  340.         $event->addSnippet($twig);
  341.     }
  342.     /**
  343.      * @param TemplateEvent $event
  344.      */
  345.     public function LoadAdminSettingShopDeliveryEditTwig(TemplateEvent $event){
  346.         $Config $this->configRepository->get();
  347.         if($Config->getDeliveryAdvanceOn()){
  348.             $twig '@Synplgbase/admin/Setting/Shop/delivery_edit_snippet_advance.twig';
  349.             $event->addSnippet($twig);
  350.         }
  351.     }
  352.     /**
  353.      * @param TemplateEvent $event
  354.      */
  355.     public function LoadAdminProductIndexTwig(TemplateEvent $event){
  356.         $parameters $event->getParameters();
  357.         $parameters['CsvDownloadMenuData'] = $this->csvTypeRepository->findBy(['parent_id'=>CsvType::CSV_TYPE_PRODUCT],['sort_no' => 'ASC']);
  358.         $event->setParameters($parameters);
  359.         $Config $this->configRepository->get();
  360.         $twig '@Synplgbase/admin/Product/index_snippet_search_items.twig';
  361.         $event->addSnippet($twig);
  362.         $twig '@Synplgbase/admin/Product/index_snippet_category.twig';
  363.         $event->addSnippet($twig);
  364.         $twig '@Synplgbase/admin/Product/index_snippet_add_orderby.twig';
  365.         $event->addSnippet($twig);
  366.         $twig '@Synplgbase/admin/Product/index_snippet_csv.twig';
  367.         $event->addSnippet($twig);
  368.         if($Config->getProductCustomerPriceOn()){
  369.             $twig '@Synplgbase/admin/Product/index_snippet_price03.twig';
  370.             $event->addSnippet($twig);
  371.         }
  372.     }
  373.     /**
  374.      * @param TemplateEvent $event
  375.      */
  376.     public function LoadAdminProductProductTwig(TemplateEvent $event){
  377.         $Config $this->configRepository->get();
  378.         //会員価格
  379.         if($Config->getProductCustomerPriceOn()){
  380.             $twig '@Synplgbase/admin/Product/product_snippet_price03.twig';
  381.             $event->addSnippet($twig);
  382.         }
  383.         //期間限定公開チェック
  384.         if($Config->getProductPublishDateOn()){
  385.             $twig '@Synplgbase/admin/Product/product_snippet_publish_date.twig';
  386.             $event->addSnippet($twig);
  387.         }
  388.         //会員限定公開チェック
  389.         if($Config->getProductCustomerOnlyOn()){
  390.             $twig '@Synplgbase/admin/Product/product_snippet_customer_only.twig';
  391.             $event->addSnippet($twig);
  392.         }
  393.         //会員価格
  394.         if($Config->getDeliveryAdvanceOn()){
  395.             $twig '@Synplgbase/admin/Product/product_snippet_delivery_advance_value.twig';
  396.             $event->addSnippet($twig);
  397.         }
  398.         //メタタグ追加
  399.         $twig '@Synplgbase/admin/Product/product_snippet_meta.twig';
  400.         $event->addSnippet($twig);
  401.     }
  402.     /**
  403.      * @param TemplateEvent $event
  404.      */
  405.     public function LoadAdminProductProductClassTwig(TemplateEvent $event){
  406.         $Config $this->configRepository->get();
  407.         //会員価格
  408.         if($Config->getProductCustomerPriceOn()){
  409.             $twig '@Synplgbase/admin/Product/product_class_snippet_price03.twig';
  410.             $event->addSnippet($twig);
  411.         }
  412.         //配送設定拡張による新項目
  413.         if($Config->getDeliveryAdvanceOn()){
  414.             $twig '@Synplgbase/admin/Product/product_class_snippet_delivery_advance_value.twig';
  415.             $event->addSnippet($twig);
  416.         }
  417.     }
  418.     /**
  419.      * @param TemplateEvent $event
  420.      */
  421.     public function LoadAdminProductCategoryTwig(TemplateEvent $event){
  422.         $twig '@Synplgbase/admin/Product/category_snippet_remove_action_edit.twig';
  423.         $event->addSnippet($twig);
  424.     }
  425.     /**
  426.      * @param TemplateEvent $event
  427.      */
  428.     public function LoadAdminCustomerIndexTwig(TemplateEvent $event){
  429.         $parameters $event->getParameters();
  430.         $parameters['CsvDownloadMenuData'] = $this->csvTypeRepository->findBy(['parent_id'=>CsvType::CSV_TYPE_CUSTOMER],['sort_no' => 'ASC']);
  431.         $event->setParameters($parameters);
  432.         $twig '@Synplgbase/admin/Customer/index_snippet_add_orderby.twig';
  433.         $event->addSnippet($twig);
  434.         $twig '@Synplgbase/admin/Customer/index_snippet_csv.twig';
  435.         $event->addSnippet($twig);
  436.     }
  437.     /**
  438.      * @param TemplateEvent $event
  439.      */
  440.     public function LoadAdminCustomerEditTwig(TemplateEvent $event){
  441.         $Config $this->configRepository->get();
  442.         if($Config->getFaxNumberOn()){
  443.             $twig '@Synplgbase/admin/Customer/edit_snippet_fax.twig';
  444.             $event->addSnippet($twig);
  445.         }
  446.         if($this->BaseInfo['option_point']){
  447.             $twig '@Synplgbase/admin/Customer/edit_snippet_point_history.twig';
  448.             $event->addSnippet($twig);
  449.             $parameters $event->getParameters();
  450.             $Customer=$parameters['Customer'];
  451.             $customer_id=$Customer->getId();
  452.             $parameters['PointHistory'] = $this->pointHistoryRepository->getList($customer_id);
  453.             $event->setParameters($parameters);
  454.         }
  455.     }
  456.     /**
  457.      * @param TemplateEvent $event
  458.      */
  459.     public function LoadAdminOrderIndexTwig(TemplateEvent $event){
  460.         $Config $this->configRepository->get();
  461.         $parameters $event->getParameters();
  462.         $parameters['CsvDownloadMenuData'] = $this->csvTypeRepository->findBy(['parent_id'=>[CsvType::CSV_TYPE_ORDER,CsvType::CSV_TYPE_SHIPPING]],['sort_no' => 'ASC']);
  463.         $event->setParameters($parameters);
  464.         $twig '@Synplgbase/admin/Order/index_snippet_search_items.twig';
  465.         $event->addSnippet($twig);
  466.         $twig '@Synplgbase/admin/Order/index_snippet_mail_button.twig';
  467.         $event->addSnippet($twig);
  468.         $twig '@Synplgbase/admin/Order/index_snippet_deliv.twig';
  469.         $event->addSnippet($twig);
  470.         $twig '@Synplgbase/admin/Order/index_snippet_add_orderby.twig';
  471.         $event->addSnippet($twig);
  472.         $twig '@Synplgbase/admin/Order/index_snippet_csv.twig';
  473.         $event->addSnippet($twig);
  474.     }
  475.     /**
  476.      * @param TemplateEvent $event
  477.      */
  478.     public function LoadAdminOrderEditTwig(TemplateEvent $event){
  479.         $Config $this->configRepository->get();     
  480.         if($Config->getOrderSexOn()){
  481.             $twig '@Synplgbase/admin/Order/edit_snippet_sex.twig';
  482.             $event->addSnippet($twig);
  483.         }
  484.         if($Config->getOrderBirthOn()){
  485.             $twig '@Synplgbase/admin/Order/edit_snippet_birth.twig';
  486.             $event->addSnippet($twig);
  487.         }
  488.         if($Config->getFaxNumberOn()){
  489.             $twig '@Synplgbase/admin/Order/edit_snippet_fax.twig';
  490.             $event->addSnippet($twig);
  491.         }
  492.         $twig '@Synplgbase/admin/Order/edit_snippet_mail_template_name.twig';
  493.         $event->addSnippet($twig);
  494.     }
  495.     /**
  496.      * @param TemplateEvent $event
  497.      */
  498.     public function LoadADefaultFrameTwig(TemplateEvent $event){
  499.         $twig '@Synplgbase/default/default_frame_snippet_header.twig';
  500.         $event->addAsset($twig);
  501.         $Config $this->configRepository->get();
  502.         $parameters $event->getParameters();
  503.         $parameters['front_header'] = $Config->getFrontHeader();
  504.         $event->setParameters($parameters);
  505.     }
  506.     /**
  507.      * @param TemplateEvent $event
  508.      */
  509.     public function ClearCache(TemplateEvent $event)
  510.     {
  511.         // キャッシュの削除
  512.         $this->cacheUtil->clearTwigCache();
  513.         $this->cacheUtil->clearDoctrineCache();
  514.     }
  515.     /**
  516.      * @param EventArgs $eventArgs
  517.      */
  518.     public function FrontProductDetailInitialize(EventArgs $eventArgs)
  519.     {
  520.         $Config $this->configRepository->get();
  521.         $Product $eventArgs->getArgument('Product');
  522.         //期間限定公開チェック
  523.         if($Config->getProductPublishDateOn()){
  524.             $check=false;
  525.             $currentDateTime = new \DateTime("now");
  526.             $publish_date_start=$Product->getPublishDateStart();
  527.             $publish_date_end=$Product->getPublishDateEnd();
  528.             if(($publish_date_start && $publish_date_start $currentDateTime) || ($publish_date_end && $publish_date_end $currentDateTime)){
  529.                 throw new NotFoundHttpException();
  530.             }
  531.         }
  532.         //会員限定公開チェック
  533.         if($Config->getProductCustomerOnlyOn()){
  534.             if($Product->getCustomerOnly()&&!$this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')){
  535.                 throw new NotFoundHttpException();
  536.             }
  537.         }
  538.     }
  539.     /**
  540.      * @param EventArgs $eventArgs
  541.      */
  542.     public function FrontEntryIndexComplete(EventArgs $eventArgs){
  543.         $Config $this->configRepository->get();
  544.         //会員登録時付与ポイント
  545.         if($this->BaseInfo['option_point']&&$this->BaseInfo['welcome_point']&&$Config->getWelcomePointOn()){
  546.             $Customer $eventArgs->getArgument('Customer');
  547.             $point $this->BaseInfo['welcome_point'];
  548.             $Customer->setPoint($point);
  549.             $this->entityManagerInterface->persist($Customer);
  550.             $this->entityManagerInterface->flush();
  551.             $this->savePointLog($Customer->getId(), '会員登録で'.$point.'pt追加されました。');
  552.         }
  553.     }
  554.     /**
  555.      * @param EventArgs $eventArgs
  556.      */
  557.     public function FrontShoppingCompleteInitialize(EventArgs $eventArgs){
  558.         $Config $this->configRepository->get();
  559.         $Order $eventArgs->getArgument('Order');
  560.         //初回購入時付与ポイント
  561.         if($this->BaseInfo['option_point']&&$this->BaseInfo['first_point']&&$Config->getFirstPointOn()){
  562.             $Customer $Order->getCustomer();
  563.             if(!empty($Customer)){
  564.                 if($Customer->getBuyTimes()<=1){
  565.                     $point $Customer->getPoint();
  566.                     $point += $this->BaseInfo['first_point'];
  567.                     $Customer->setPoint($point);
  568.                     $this->entityManagerInterface->persist($Customer);
  569.                     $this->entityManagerInterface->flush();
  570.                     $this->savePointLog($Customer->getId(), '受注ID:'.$Order->getId().' 初回購入で'.$this->BaseInfo['first_point'].'pt追加されました。');
  571.                 }
  572.             }
  573.         }
  574.     }
  575.     /**
  576.      * @param EventArgs $eventArgs
  577.      */
  578.     public function FrontShoppingNonmemberComplete(EventArgs $eventArgs){
  579.         $Config $this->configRepository->get();
  580.         if(!$Config->getOrderSexOn()&&!$Config->getOrderBirthOn()){
  581.             return false;
  582.         }
  583.         $form $eventArgs->getArgument('form');
  584.         $data $form->getData();
  585.         $Customer = new Customer();
  586.         $Customer
  587.             ->setName01($data['name01'])
  588.             ->setName02($data['name02'])
  589.             ->setKana01($data['kana01'])
  590.             ->setKana02($data['kana02'])
  591.             ->setCompanyName($data['company_name'])
  592.             ->setEmail($data['email'])
  593.             ->setPhonenumber($data['phone_number'])
  594.             ->setPostalcode($data['postal_code'])
  595.             ->setPref($data['pref'])
  596.             ->setAddr01($data['addr01'])
  597.             ->setAddr02($data['addr02']);
  598.      
  599.         if($Config->getOrderSexOn()){
  600.             $Customer->setSex($data['sex']);
  601.         }
  602.         if($Config->getOrderBirthOn()){
  603.             $Customer->setBirth($data['birth']);
  604.         }
  605.         $this->session->set(OrderHelper::SESSION_NON_MEMBER$Customer);
  606.     }
  607.     /**
  608.      * @param EventArgs $eventArgs
  609.      */
  610.     public function AdminCustomerIndexSearch(EventArgs $eventArgs){
  611.         $form $eventArgs->getArgument('form');
  612.         if ($form->isValid()){
  613.             $searchData $form->getData();
  614.             $ignores = ['multi','customer_status','orderby','dora'];
  615.             $this->checkDetailSearchAndOpenSearchBox($searchData,$ignores);
  616.         }
  617.     }
  618.     /**
  619.      * @param EventArgs $eventArgs
  620.      */
  621.     public function AdminCustomerEditIndexInitialize(EventArgs $eventArgs){
  622.         $builder $eventArgs->getArgument('builder');
  623.         $Customer $eventArgs->getArgument('Customer');
  624.         $request $eventArgs->getRequest();
  625.         $Config $this->configRepository->get();
  626.         $old_point=$Customer->getPoint();
  627.         $oldStatusId=$Customer->getStatus()->getId();
  628.         $form $builder->getForm();
  629.         $form->handleRequest($request);
  630.         if ($form->isSubmitted() && $form->isValid()){
  631.             //所持ポイント変更のログへの書き込み
  632.             $new_point $Customer->getPoint();
  633.             if($Customer->getId()&&$old_point!=$new_point){
  634.                 $this->savePointLog($Customer->getId(), '管理画面>会員登録画で所持ポイントが'.$old_point.'ptから'.$new_point.'ptに変更されました。');
  635.             }
  636.             //退会時の自動メール
  637.             if($Config->getCustomerWithdrawingAutomailOn()){
  638.                 $newStatusId $Customer->getStatus()->getId();
  639.                 if ($oldStatusId != $newStatusId && $newStatusId == CustomerStatus::WITHDRAWING) {
  640.                     $this->mailService->sendCustomerWithdrawMail($Customer$Customer->getEmail());
  641.                 }                
  642.             }
  643.         }
  644.     }
  645.     /**
  646.      * @param EventArgs $eventArgs
  647.      */
  648.     public function AdminProductIndexSearch(EventArgs $eventArgs){
  649.         $searchData $eventArgs->getArgument('searchData');
  650.         $ignores = ['id','status','orderby','dora'];
  651.         $this->checkDetailSearchAndOpenSearchBox($searchData,$ignores);
  652.     }
  653.     /**
  654.      * @param EventArgs $eventArgs
  655.      */
  656.     public function AdminProductCategoryDeleteComplete(EventArgs $eventArgs){
  657.         $TargetCategory $eventArgs->getArgument('TargetCategory');
  658.         $deleteImages $TargetCategory->getCategoryImage();
  659.         // 画像ファイルの削除(commit後に削除させる)
  660.         foreach ($deleteImages as $deleteImage) {
  661.             try {
  662.                 $fs = new Filesystem();
  663.                 $fs->remove($this->eccubeConfig['eccube_save_image_dir'].'/'.$deleteImage);
  664.             } catch (\Exception $e) {
  665.                 // エラーが発生しても無視する
  666.             }
  667.         }
  668.     }
  669.     /**
  670.      * @param EventArgs $eventArgs
  671.      */
  672.     public function AdminOrderIndexSearch(EventArgs $eventArgs){
  673.         $searchData $eventArgs->getArgument('searchData');
  674.         $ignores = ['multi','status','orderby','dora'];
  675.         $this->checkDetailSearchAndOpenSearchBox($searchData,$ignores);
  676.     }
  677.     /**
  678.      * @param EventArgs $eventArgs
  679.      */
  680.     public function AdminSettingShopDeliveryEditInitialize(EventArgs $eventArgs){
  681.         $builder $eventArgs->getArgument('builder');
  682.         $Prefs $eventArgs->getArgument('Prefs');
  683.         $Delivery $eventArgs->getArgument('Delivery');
  684.         $Config $this->configRepository->get();
  685.         $request $eventArgs->getRequest();
  686.         //配送方法拡張機能(編集画面)
  687.         if($Config->getDeliveryAdvanceOn()){
  688.             $arrColumnValues = [];
  689.             if ($request->getMethod() === 'POST'){//エラーでページがリロードされた時のため
  690.                 $arrTemp=$request->get('delivery_advance');
  691.                 if(!empty($arrTemp)){
  692.                     foreach ($Prefs as $Pref) {
  693.                         foreach($arrTemp[$Pref->getId()] as $key=>$value){
  694.                             $DeliveryFeeAdvance = new DeliveryFeeAdvance();
  695.                             $DeliveryFeeAdvance
  696.                                 ->setPref($Pref)
  697.                                 ->setDelivery($Delivery)
  698.                                 ->setExtra($key)
  699.                                 ->setFee($value);
  700.                             $arrDeliveryFeeAdvances[]=$DeliveryFeeAdvance;
  701.                         }                        
  702.                     }
  703.                 }
  704.             }
  705.             else{//初回の編集ページアクセス
  706.                 $arrDeliveryFeeAdvances $this->deliveryFeeAdvanceRepository->findBy(['Delivery'=>$Delivery]);
  707.             }
  708.             if(isset($arrDeliveryFeeAdvances)&&$arrDeliveryFeeAdvances){
  709.                 foreach($arrDeliveryFeeAdvances as $DeliveryFeeAdvance){
  710.                     $arrColumnValues[$DeliveryFeeAdvance->getExtra()]=$DeliveryFeeAdvance->getExtra();
  711.                 }
  712.                 $this->twig->addGlobal('arrDeliveryFeeAdvances',$arrDeliveryFeeAdvances);
  713.                 $this->twig->addGlobal('arrColumnValues',$arrColumnValues);
  714.             }
  715.         }        
  716.     }
  717.     /**
  718.      * @param EventArgs $eventArgs
  719.      */
  720.     public function AdminSettingShopDeliveryEditComplete(EventArgs $eventArgs){
  721.         $Config $this->configRepository->get();
  722.         //配送方法拡張機能(編集画面データ保存)
  723.         if($Config->getDeliveryAdvanceOn()){
  724.             $request $eventArgs->getRequest();
  725.             $Prefs $eventArgs->getArgument('Prefs');
  726.             $form $eventArgs->getArgument('form');
  727.             $Delivery $eventArgs->getArgument('Delivery');
  728.             $DeliveryData $form->getData();
  729.             if ($request->getMethod() === 'POST'){
  730.                 //古いデータを全削除してから。。
  731.                 $this->AdminSettingShopDeliveryDeleteComplete($eventArgs);
  732.                 //新しいデータを入れ込む
  733.                 $arrTemp=$request->get('delivery_advance');
  734.                 if(!empty($arrTemp)){
  735.                     foreach ($Prefs as $Pref) {
  736.                         foreach($arrTemp[$Pref->getId()] as $key=>$value){
  737.                             $DeliveryFeeAdvance = new DeliveryFeeAdvance();
  738.                             $DeliveryFeeAdvance
  739.                                 ->setPref($Pref)
  740.                                 ->setDelivery($Delivery)
  741.                                 ->setExtra($key)
  742.                                 ->setFee(str_replace(',','',$value));
  743.                             $DeliveryData->addDeliveryFeeAdvance($DeliveryFeeAdvance);
  744.                             $this->entityManagerInterface->persist($DeliveryData);
  745.                         }                        
  746.                     }
  747.                     $this->entityManagerInterface->flush();
  748.                 }
  749.             }
  750.         }
  751.     }
  752.     /**
  753.      * @param EventArgs $eventArgs
  754.      */
  755.     public function AdminSettingShopDeliveryDeleteComplete(EventArgs $eventArgs){
  756.         $Config $this->configRepository->get();
  757.         if($Config->getDeliveryAdvanceOn()){
  758.             $Delivery $eventArgs->getArgument('Delivery');
  759.             $arrDeliveryFeeAdvances $this->deliveryFeeAdvanceRepository->findBy(['Delivery'=>$Delivery]);
  760.             foreach($arrDeliveryFeeAdvances as $DeliveryFeeAdvance){
  761.                 $this->entityManagerInterface->remove($DeliveryFeeAdvance);
  762.             }
  763.             $this->entityManagerInterface->flush();
  764.         }  
  765.     }
  766.     /**
  767.      * @param WorkflowEvent $workflowEvent
  768.      */
  769.     public function WorkflowOrderTransitionShip(WorkflowEvent $workflowEvent){
  770.         $Order $workflowEvent->getSubject()->getOrder();
  771.         $Customer $Order->getCustomer();
  772.         if ($Customer&&$this->BaseInfo['option_point']) {
  773.             $this->savePointLog($Customer->getId(), '受注ID:'.$Order->getId().' 対応状況を「発送済み」に変更で'.$Order->getAddPoint().'pt追加されました。');
  774.         }
  775.     }
  776.     /**
  777.      * @param WorkflowEvent $workflowEvent
  778.      */
  779.     public function WorkflowOrderTransitionCancel(WorkflowEvent $workflowEvent){
  780.         $Order $workflowEvent->getSubject()->getOrder();
  781.         $Customer $Order->getCustomer();
  782.         if ($Customer&&$this->BaseInfo['option_point']) {
  783.             $this->savePointLog($Customer->getId(), '受注ID:'.$Order->getId().' 対応状況を「キャンセル」に変更で'.$Order->getUsePoint().'pt戻されました。');
  784.         }
  785.     }
  786.     /**
  787.      * @param WorkflowEvent $workflowEvent
  788.      */
  789.     public function WorkflowOrderTransitionBackToInProgress(WorkflowEvent $workflowEvent){
  790.         $Order $workflowEvent->getSubject()->getOrder();
  791.         $Customer $Order->getCustomer();
  792.         if ($Customer&&$this->BaseInfo['option_point']) {
  793.             $this->savePointLog($Customer->getId(), '受注ID:'.$Order->getId().' 対応状況を「キャンセル」から「決済処理中」に変更で'.$Order->getUsePoint().'pt引かれました。');
  794.         }
  795.     }
  796.     /**
  797.      * @param WorkflowEvent $workflowEvent
  798.      */
  799.     public function WorkflowOrderTransitionReturn(WorkflowEvent $workflowEvent){
  800.         $Order $workflowEvent->getSubject()->getOrder();
  801.         $Customer $Order->getCustomer();
  802.         if ($Customer&&$this->BaseInfo['option_point']) {
  803.             $this->savePointLog($Customer->getId(), '受注ID:'.$Order->getId().' 対応状況を「発送済み」から「返品」に変更で、使用ポイント('.$Order->getUsePoint().'pt)が戻されて、追加ポイント('.$Order->getAddPoint().'pt)が引かれました。');
  804.         }
  805.     }
  806.     /**
  807.      * @param WorkflowEvent $workflowEvent
  808.      */
  809.     public function WorkflowOrderTransitionCancelReturn(WorkflowEvent $workflowEvent){
  810.         $Order $workflowEvent->getSubject()->getOrder();
  811.         $Customer $Order->getCustomer();
  812.         if ($Customer&&$this->BaseInfo['option_point']) {
  813.             $this->savePointLog($Customer->getId(), '受注ID:'.$Order->getId().' 対応状況を「返品」から「発送済み」に変更で、使用ポイント('.$Order->getUsePoint().'pt)が引かれて、追加ポイント('.$Order->getAddPoint().'pt)が戻されました。');
  814.         }
  815.     }
  816.     /**
  817.      * @param GetResponseEvent $event
  818.      */
  819.     public function OnKernelRequest(GetResponseEvent $event){
  820.         $Synplgbase $this->configRepository->get();
  821.         $path $event->getRequest()->getPathInfo();
  822.         if($Synplgbase->getTopRedirectOn()&&$path=='/'){
  823.             header("Location: ".$Synplgbase->getTopRedirectUrl());
  824.             exit;
  825.         }
  826.         // トップページに/index.phpでアクセスした場合、index.phpを削除
  827.         if(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)=='/index.php'){
  828.             header("Location: http".((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS'])?'s':NULL)."://".$_SERVER['HTTP_HOST'].($_SERVER['QUERY_STRING']?'?':NULL).$_SERVER['QUERY_STRING']);
  829.             exit;
  830.         }
  831.         // www.の削除
  832.         if (!empty($_SERVER['HTTP_HOST'])&&substr($_SERVER['HTTP_HOST'],0,4)=='www.') {
  833.             header("Location: http".((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS'])?'s':NULL)."://".substr($_SERVER['HTTP_HOST'],4).$_SERVER['REQUEST_URI']);
  834.             exit;
  835.         }
  836.         // Synplabase Version 3.0.2 まで LoadADefaultFrameTwigでやってたグローバル変数、Synplgbaseの作成をVer 3.0.3からここに変更。管理画面やメールのtwigでも使えるようにするため
  837.         $this->twig->addGlobal('Synplgbase',$Synplgbase);
  838.     }
  839.     /**
  840.      * @param FilterResponseEvent $event
  841.      */
  842.     public function OnKernelResponse(FilterResponseEvent $event){
  843.         //商品詳細ページ閲覧履歴への書き込み
  844.         $this->writeProductViewHistory($event);
  845.     }
  846.     /**
  847.      * @param FilterControllerEvent $event
  848.      */
  849.     public function onKernelController(FilterControllerEvent $event){
  850.     }
  851.     private function savePointLog($customer_id$text)
  852.     {
  853.         if(!$this->BaseInfo['option_point']||!$customer_id||!$text) return;
  854.         $customerRepository=$this->customerRepository->find($customer_id);
  855.         if(!$customerRepository) return;
  856.         $point=$customerRepository->getPoint();
  857.         $this->pointHistory->setCustomerId($customer_id);
  858.         $this->pointHistory->setText($text);
  859.         $this->pointHistory->setDate(new \DateTime());
  860.         $this->pointHistory->setPoint($point);
  861.         $this->entityManagerInterface->persist($this->pointHistory);
  862.         $this->entityManagerInterface->flush();
  863.     }
  864.     public function readProductViewHistory(){
  865.         //ページ各所で使用するのでpublicにしておく(このファイルのwriteProductViewHistoryと、Plugin/Synplgbase/Twig/Extension/ProductExtension.phpで使用)
  866.         $name='ProductViewHistory';
  867.         global $request;
  868.         $cookie $request->cookies->get($name);
  869.         return json_decode($cookietrue)??[];
  870.     }
  871.     private function writeProductViewHistory($event){
  872.         if ($event->getRequest()->get('_route') !== 'product_detail') {
  873.             return;
  874.         }
  875.         if ($product_id $event->getRequest()->get('id')) {
  876.             $name='ProductViewHistory';
  877.             $arrProductIds=$this->readProductViewHistory();
  878.             if (($key=array_search($product_id$arrProductIds))!==false){
  879.                 unset($arrProductIds[$key]);
  880.             }
  881.             $arrProductIds[]=$product_id;            
  882.             $products=json_encode(array_unique($arrProductIds));
  883.             // Cookie作成・更新
  884.             $response $event->getResponse();
  885.             $response->headers->setCookie(new Cookie($name,$products));
  886.             $event->setResponse($response);
  887.         }
  888.     }
  889.     private function checkDetailSearchAndOpenSearchBox($searchData$ignores){
  890.         //global variable, searchDetailを作成するだけで、javascriptの処理はResource/template/admin/default_frame_snipped_open_detailsearch.twigで行われる
  891.         foreach($searchData as $key=>$value){
  892.             if(!in_array($key,$ignores)){
  893.                 if ($value instanceof \Doctrine\Common\Collections\ArrayCollection){
  894.                     if(!$value->isEmpty()){
  895.                         $this->twig->addGlobal('searchDetail',true);
  896.                         break;
  897.                     }
  898.                 }
  899.                 elseif(!empty($value)){
  900.                     $this->twig->addGlobal('searchDetail',true);
  901.                     break;
  902.                 }     
  903.             }
  904.         }
  905.     }
  906. }