app/Plugin/ApgProductClassImage42/Event.php line 265

Open in your IDE?
  1. <?php
  2. namespace Plugin\ApgProductClassImage42;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Doctrine\ORM\NonUniqueResultException;
  5. use Eccube\Event\EventArgs;
  6. use Eccube\Event\TemplateEvent;
  7. use Eccube\Log\Logger;
  8. use Plugin\ApgProductClassImage42\Domain\ClassImageInsertType;
  9. use Plugin\ApgProductClassImage42\Domain\ClassImageListType;
  10. use Plugin\ApgProductClassImage42\Entity\Config;
  11. use Plugin\ApgProductClassImage42\Repository\ConfigRepository;
  12. use Plugin\ApgProductClassImage42\Util\Paths;
  13. use Plugin\ApgProductClassImage42\Util\ViewHelper;
  14. use Psr\Log\LoggerInterface;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
  17. class Event implements EventSubscriberInterface
  18. {
  19.     const TEMPLATE_NAMESPACE '@ApgProductClassImage42';
  20.     /**
  21.      * @var ConfigRepository
  22.      */
  23.     protected $configRepository;
  24.     /**
  25.      * @var \Twig\Environment
  26.      */
  27.     protected $twig;
  28.     /**
  29.      * @var Logger
  30.      */
  31.     protected $logger;
  32.     /**
  33.      * @var EntityManagerInterface
  34.      */
  35.     protected $em;
  36.     /**
  37.      * @var Paths
  38.      */
  39.     protected $path;
  40.     public function __construct(
  41.         ConfigRepository       $configRepository,
  42.         EntityManagerInterface $em,
  43.         \Twig\Environment      $twig,
  44.         LoggerInterface        $logger,
  45.         Paths                  $path
  46.     )
  47.     {
  48.         $this->configRepository $configRepository;
  49.         $this->twig $twig;
  50.         $this->logger $logger;
  51.         $this->em $em;
  52.         $this->path $path;
  53.     }
  54.     /**
  55.      * @return array
  56.      */
  57.     public static function getSubscribedEvents()
  58.     {
  59.         return [
  60.             '@admin/Product/product_class.twig' => 'onRenderAdminProductProductClass',
  61.             'Product/detail.twig' => 'onRenderFrontProductDetail',
  62.             'Product/list.twig' => 'onRenderFrontProductList',
  63.             'Cart/index.twig' => 'onRenderFrontCartIndex',
  64.             'Block/cart.twig' => 'onRenderFrontBlockCart',
  65.             'Block/header.twig' => 'onRenderFrontBlockHeader',
  66.             'Shopping/index.twig' => 'onRenderFrontShoppingIndex',
  67.             'Shopping/shipping_multiple.twig' => 'onRenderFrontShoppingShippingMultiple',
  68.             'Shopping/confirm.twig' => 'onRenderFrontShoppingConfirm',
  69. //            'Mypage/index.twig' => 'onRenderFrontMypageIndex',
  70. //            'Mypage/history.twig' => 'onRenderFrontMypageHistory',
  71.         ];
  72.     }
  73.     /**
  74.      * [Front]商品詳細情報表示
  75.      * @param EventArgs $event
  76.      */
  77.     public function onRenderFrontProductDetail(TemplateEvent $event)
  78.     {
  79.         $parameters $event->getParameters();
  80.         $source $event->getSource();
  81.         $config $this->configRepository->getOrNew();
  82.         $parameters['apgProductClassConfig'] = $config;
  83.         /** @var Config $config */
  84.         try {
  85.             if ($config->getImageInsertType() === ClassImageInsertType::UNDER_SELECT_CLASS) {
  86.                 // js
  87.                 $insertSource $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_product_class_images_js1.twig')->getCode();
  88.                 $source ViewHelper::insertJs($source$insertSource);
  89.                 // twig
  90.                 $pattern '|<div class="ec-numberInput">|s';
  91.                 $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_product_class_images1.twig')->getCode();
  92.                 if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  93.                     $replacement $addRow $matches[0][0];
  94.                     $source preg_replace($pattern$replacement$source);
  95.                 }
  96.             } elseif ($config->getImageInsertType() === ClassImageInsertType::SLIDERS) {
  97.                 // js
  98.                 $insertSource $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_product_class_images_js2.twig')->getCode();
  99.                 $source ViewHelper::insertJs($source$insertSource);
  100.                 // twig
  101.                 $pattern '/<div class="item_visual">(.*?){% endfor %}/s';
  102.                 $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_product_class_images2.twig')->getCode();
  103.                 if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  104.                     $replacement $matches[0][0] . $addRow;
  105.                     $source preg_replace($pattern$replacement$source);
  106.                 }
  107.                 $pattern '/<div class="item_nav">(.*?){% endfor %}/s';
  108.                 $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_product_class_images3.twig')->getCode();
  109.                 if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  110.                     $replacement $matches[0][0] . $addRow;
  111.                     $source preg_replace($pattern$replacement$source);
  112.                 }
  113.             }
  114.         } catch (NonUniqueResultException $e) {
  115.             $this->logger->warning("[" self::class . "]plg_apg_product_class_image_config にデータが存在しません。");
  116.         }
  117.         $event->setParameters($parameters);
  118.         $event->setSource($source);
  119.     }
  120.     /**
  121.      * [Front]商品一覧表示
  122.      * @param EventArgs $event
  123.      */
  124.     public function onRenderFrontProductList(TemplateEvent $event)
  125.     {
  126.         $parameters $event->getParameters();
  127.         $source $event->getSource();
  128.         $config $this->configRepository->getOrNew();
  129.         $parameters['apgProductClassConfig'] = $config;
  130.         if ($config->getImageListType() == ClassImageListType::ENABLED) {
  131.             // js
  132.             $insertSource $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_product_class_images_list_js.twig')->getCode();
  133.             $source ViewHelper::insertJs($source$insertSource);
  134.             // twig
  135.             $pattern '/<p class="ec-shelfGrid__item-image">(.*?)<\/p>/s';
  136.             $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_product_class_images_list.twig')->getCode();
  137.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  138.                 $replacement $matches[0][0] . $addRow;
  139.                 $source preg_replace($pattern$replacement$source);
  140.             }
  141.         }
  142.         $event->setParameters($parameters);
  143.         $event->setSource($source);
  144.     }
  145.     /**
  146.      * [Admin]商品規格ページ表示
  147.      * @param TemplateEvent $event
  148.      * @return void
  149.      * @throws \Twig\Error\LoaderError
  150.      */
  151.     public function onRenderAdminProductProductClass(TemplateEvent $event)
  152.     {
  153.         $source $event->getSource();
  154.         // data
  155.         $parameters $event->getParameters();
  156.         // setting
  157.         try {
  158.             $config $this->configRepository->getOrNew();
  159.             $parameters['ApgRichEditorConfig'] = $config;
  160.             $loader $this->twig->getLoader();
  161.             // js
  162.             $insertSource $this->twig->getLoader()->getSourceContext(self::TEMPLATE_NAMESPACE '/admin/product_class_image_js.twig')->getCode();
  163.             $source ViewHelper::insertJs($source$insertSource);
  164.             // css
  165.             $insertSource $this->twig->getLoader()->getSourceContext(self::TEMPLATE_NAMESPACE '/admin/product_class_image_css.twig')->getCode();
  166.             $source ViewHelper::insertCss($source$insertSource);
  167.             // header
  168.             $pattern '|<div id="ex-product_class" class="card-body p-0">(.*?){% endfor %}|s';
  169.             $addRow '<th class="pt-2 pb-2">画像</th>';
  170.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  171.                 $replacement $matches[0][0] . $addRow;
  172.                 $source preg_replace($pattern$replacement$source);
  173.             }
  174.             // data
  175.             $pattern '|<tr id="ex-product_class-(.*?){% endfor %}|s';
  176.             $addRow $this->twig->getLoader()->getSourceContext(self::TEMPLATE_NAMESPACE '/admin/product_class_image.twig')->getCode();
  177.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  178.                 $replacement $matches[0][0] . $addRow;
  179.                 $source preg_replace($pattern$replacement$source);
  180.             }
  181.             $event->setSource($source);
  182.             $event->setParameters($parameters);
  183.         } catch (NonUniqueResultException $e) {
  184.             $this->logger->warning("[" self::class . "]plg_apg_product_class_image_config にデータが存在しません。");
  185.         }
  186.     }
  187.     public function onRenderFrontCartIndex(TemplateEvent $event)
  188.     {
  189.         $source $event->getSource();
  190.         $parameters $event->getParameters();
  191.         // setting
  192.         try {
  193.             $config $this->configRepository->getOrNew();
  194.             $parameters['apgProductClassConfig'] = $config;
  195.             $pattern '/<img src="{{ asset\(Product.MainListImage\|no_image_product, \'save_image\'\) }}" alt="{{ Product.name }}"\/>/s';
  196.             $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_item_images.twig')->getCode();
  197.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  198.                 $replacement $addRow;
  199.                 $source preg_replace($pattern$replacement$source);
  200.             }
  201.         } catch (NonUniqueResultException $e) {
  202.             $this->logger->warning("[" self::class . "]plg_apg_product_class_image_config にデータが存在しません。");
  203.         }
  204.         $event->setParameters($parameters);
  205.         $event->setSource($source);
  206.     }
  207.     public function onRenderFrontBlockCart(TemplateEvent $event)
  208.     {
  209.         $source $event->getSource();
  210.         $parameters $event->getParameters();
  211.         // setting
  212.         try {
  213.             $config $this->configRepository->getOrNew();
  214.             $parameters['apgProductClassConfig'] = $config;
  215.             $pattern '/<img src="{{ asset\(Product.MainListImage\|no_image_product, \'save_image\'\) }}" alt="{{ Product.name }}">/s';
  216.             $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_item_images.twig')->getCode();
  217.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  218.                 $replacement $addRow;
  219.                 $source preg_replace($pattern$replacement$source);
  220.             }
  221.         } catch (NonUniqueResultException $e) {
  222.             $this->logger->warning("[" self::class . "]plg_apg_product_class_image_config にデータが存在しません。");
  223.         }
  224.         $event->setParameters($parameters);
  225.         $event->setSource($source);
  226.     }
  227.     public function onRenderFrontBlockHeader(TemplateEvent $event)
  228.     {
  229.         $source $event->getSource();
  230.         $parameters $event->getParameters();
  231.         // setting
  232.         try {
  233.             $config $this->configRepository->getOrNew();
  234.             $parameters['apgProductClassConfig'] = $config;
  235.             $pattern '/{{ include\(\'Block\/cart.twig\'\) }}/s';
  236.             $addRow $this->twig->getLoader()->getSourceContext('Block/cart.twig')->getCode();
  237.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  238.                 $replacement $addRow;
  239.                 $source preg_replace($pattern$replacement$source);
  240.             }
  241.             $pattern '/<img src="{{ asset\(Product.MainListImage\|no_image_product, \'save_image\'\) }}" alt="{{ Product.name }}">/s';
  242.             $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_item_images.twig')->getCode();
  243.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  244.                 $replacement $addRow;
  245.                 $source preg_replace($pattern$replacement$source);
  246.             }
  247.         } catch (NonUniqueResultException $e) {
  248.             $this->logger->warning("[" self::class . "]plg_apg_product_class_image_config にデータが存在しません。");
  249.         }
  250.         $event->setParameters($parameters);
  251.         $event->setSource($source);
  252.     }
  253.     public function onRenderFrontShoppingIndex(TemplateEvent $event)
  254.     {
  255.         $source $event->getSource();
  256.         $parameters $event->getParameters();
  257.         // setting
  258.         try {
  259.             $config $this->configRepository->getOrNew();
  260.             $parameters['apgProductClassConfig'] = $config;
  261.             $pattern '/<img src="{{ asset\(\(orderItem.product is null \? null : orderItem.product.MainListImage\)\|no_image_product, \'save_image\'\) }}" alt="{{ orderItem.productName }}">/s';
  262.             $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_order_item_images.twig')->getCode();
  263.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  264.                 $replacement $addRow;
  265.                 $source preg_replace($pattern$replacement$source);
  266.             }
  267.         } catch (NonUniqueResultException $e) {
  268.             $this->logger->warning("[" self::class . "]plg_apg_product_class_image_config にデータが存在しません。");
  269.         }
  270.         $event->setParameters($parameters);
  271.         $event->setSource($source);
  272.     }
  273.     public function onRenderFrontShoppingShippingMultiple(TemplateEvent $event)
  274.     {
  275.         $source $event->getSource();
  276.         $parameters $event->getParameters();
  277.         // setting
  278.         try {
  279.             $config $this->configRepository->getOrNew();
  280.             $parameters['apgProductClassConfig'] = $config;
  281.             $pattern '/<img src="{{ asset\(orderItem.product.MainListImage\|no_image_product, \'save_image\'\) }}">/';
  282.             $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_order_item_images.twig')->getCode();
  283.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  284.                 $replacement $addRow;
  285.                 $source preg_replace($pattern$replacement$source);
  286.             }
  287.         } catch (NonUniqueResultException $e) {
  288.             $this->logger->warning("[" self::class . "]plg_apg_product_class_image_config にデータが存在しません。");
  289.         }
  290.         $event->setParameters($parameters);
  291.         $event->setSource($source);
  292.     }
  293.     public function onRenderFrontShoppingConfirm(TemplateEvent $event)
  294.     {
  295.         $source $event->getSource();
  296.         $parameters $event->getParameters();
  297.         // setting
  298.         try {
  299.             $config $this->configRepository->getOrNew();
  300.             $parameters['apgProductClassConfig'] = $config;
  301.             $pattern '/<img src="{{ asset\(\(orderItem.product is null \? null : orderItem.product.MainListImage\)\|no_image_product, \'save_image\'\) }}" alt="{{ orderItem.productName }}">/s';
  302.             $addRow $this->twig->getLoader()->getSourceContext('@user_data/Plugin/ApgProductClassImage/render_order_item_images.twig')->getCode();
  303.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  304.                 $replacement $addRow;
  305.                 $source preg_replace($pattern$replacement$source);
  306.             }
  307.         } catch (NonUniqueResultException $e) {
  308.             $this->logger->warning("[" self::class . "]plg_apg_product_class_image_config にデータが存在しません。");
  309.         }
  310.         $event->setParameters($parameters);
  311.         $event->setSource($source);
  312.     }
  313.     public function onRenderFrontMypageIndex(TemplateEvent $event)
  314.     {
  315.         // もしやる場合は、Mypage.index.twig自体を変更しないと厳しいので、対応しない。
  316.         // お客様でどうしても必要な場合は、説明をした上で個別対応が必要。
  317.         throw new NotAcceptableHttpException();
  318.     }
  319.     public function onRenderFrontMypageHistory(TemplateEvent $event)
  320.     {
  321.         // もしやる場合は、Mypage.index.twig自体を変更しないと厳しいので、対応しない。
  322.         // お客様でどうしても必要な場合は、説明をした上で個別対応が必要。
  323.         throw new NotAcceptableHttpException();
  324.     }
  325. }