- <?php
- /*
-  * This file is part of CategoryContentConfig Plugin
-  *
-  * Copyright(c) https://beststore.tokyo/ All Rights Reserved.
-  *
-  * For the full copyright and license information, please view the LICENSE
-  * file that was distributed with this source code.
-  */
- namespace Plugin\CategoryContentConfig;
- use Eccube\Event\TemplateEvent;
- use Eccube\Event\EccubeEvents;
- use Eccube\Common\EccubeConfig;
- use Eccube\Event\EventArgs;
- use Eccube\Repository\CategoryRepository;
- use Plugin\CategoryContentConfig\Entity\Config;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
- use Plugin\CategoryContentConfig\Util\ViewHelper;
- use Symfony\Component\Filesystem\Filesystem;
- class Event implements EventSubscriberInterface
- {
-     protected $twig;
-     protected $eccubeConfig;
-     protected $categoryRepository;
-     public function __construct(
-         \Twig\Environment      $twig,
-         EccubeConfig $eccubeConfig,
-         CategoryRepository $categoryRepository
-     )
-     {
-         $this->twig = $twig;
-         $this->eccubeConfig = $eccubeConfig;
-         $this->categoryRepository = $categoryRepository;
-     }
-     /**
-      * @return array
-      */
-     public static function getSubscribedEvents()
-     {
-         return [
-             '@admin/Product/category.twig' => 'onRenderAdminProductCategoryTwig',
-             'Product/list.twig' => 'onRenderProductListTwig',
-             EccubeEvents::ADMIN_PRODUCT_CATEGORY_INDEX_COMPLETE => 'onAdminProductCategoryIndexComplete'
-         ];
-     }
-     public function onRenderAdminProductCategoryTwig(TemplateEvent $event)
-     {
-         $source = $event->getSource();
-         $parameters = $event->getParameters();
-         // js
-         $insertSource = $this->twig->getLoader()->getSourceContext('@CategoryContentConfig/admin/category_image_js.twig')->getCode();
-         $source = ViewHelper::insertJs($source, $insertSource);
-         $pattern = '|<div class="row mb-3">(.*?){% endfor %}|s';
-         $addRow = $this->twig->getLoader()->getSourceContext('@CategoryContentConfig/admin/category_image.twig')->getCode();
-         if (preg_match($pattern, $source, $matches, PREG_OFFSET_CAPTURE)) {
-             $replacement = $matches[0][0] . $addRow;
-             $source = preg_replace($pattern, $replacement, $source);
-             $event->setSource($source);
-         }
-         $pattern = '|<form class="row(.*?){% endfor %}|s';
-         $addRow = $this->twig->getLoader()->getSourceContext('@CategoryContentConfig/admin/child_category_image.twig')->getCode();
-         if (preg_match($pattern, $source, $matches, PREG_OFFSET_CAPTURE)) {
-             $replacement = $matches[0][0] . $addRow;
-             $source = preg_replace($pattern, $replacement, $source);
-             $event->setSource($source);
-         }
-         $event->setSource($source);
-         $event->setParameters($parameters);
-     }
-     public function onRenderProductListTwig(TemplateEvent $event)
-     {
-         $source = $event->getSource();
-         $parameters = $event->getParameters();
-         if(!$event->hasParameter('Category')){
-             if(preg_match("|{{ eccube_plg_category_list }}|s",$source, $result)){
-                 $search = $result[0];
-                 $replace = "";
-                 $source = str_replace($search, $replace, $source);
-             }
-         } else {
-             if(preg_match("|eccube_plg_category_list|s",$source, $result)){
-                 $search = $result[0];
-                 $replace = "include('@CategoryContentConfig/Category/list.twig')";
-                 $source = str_replace($search, $replace, $source);
-             }else{
-                 $pattern = '|<div class="ec-searchnavRole__topicpath(.*?)</div>|s';
-                 $addRow = $this->twig->getLoader()->getSourceContext('@CategoryContentConfig/Category/list.twig')->getCode();
-                 if (preg_match($pattern, $source, $matches, PREG_OFFSET_CAPTURE)) {
-         
-                     $replacement = $matches[0][0] . $addRow;
-                     $source = preg_replace($pattern, $replacement, $source);
-                 }
-             }
-     
-             $pattern = '|<div class="ec-searchnavRole__counter(.*?)</div>|s';
-             $addRow = "{% if Category.page_display_mode == " . Config::PRODUCT_AND_CATEGORY_KEY ." or Category.page_display_mode == " . Config::PRODUCT_KEY ." %}";
-             if (preg_match($pattern, $source, $matches, PREG_OFFSET_CAPTURE)) {
-     
-                 $replacement = $addRow . $matches[0][0];
-                 $source = preg_replace($pattern, $replacement, $source);
-             }
-     
-             $pattern = '|<div class="ec-searchnavRole__counter(.*?)</div>|s';
-             $addRow = '{% endif %}';
-             if (preg_match($pattern, $source, $matches, PREG_OFFSET_CAPTURE)) {
-     
-                 $replacement = $matches[0][0] . $addRow;
-                 $source = preg_replace($pattern, $replacement, $source);
-             }
-     
-             $pattern = '|{% if pagination.totalItemCount > 0 |s';
-             $addRow = "and (Category.page_display_mode == " . Config::PRODUCT_AND_CATEGORY_KEY ." or Category.page_display_mode == " . Config::PRODUCT_KEY . ") ";
-             if (preg_match($pattern, $source, $matches, PREG_OFFSET_CAPTURE)) {
-     
-                 $replacement = $matches[0][0] . $addRow;
-                 $source = preg_replace($pattern, $replacement, $source);
-             }
-             $Category = $parameters['Category'];
-             $Parent = $this->categoryRepository->find($Category->getId());
-             $ChildCategories = $this->categoryRepository->getList($Parent);
-             $parameters['ChildCategories'] = $ChildCategories;
-         }
-         $event->setSource($source);
-         $event->setParameters($parameters);
-     }
-     public function onAdminProductCategoryIndexComplete(EventArgs $eventArgs)
-     {
-         $form = $eventArgs->getArgument('form');
-         if($eventArgs->hasArgument('editForm')){
-             $form = $eventArgs->getArgument('editForm');
-         }
-         $file = $form['category_image']->getData();
-         $fs = new Filesystem();
-         if ($file && strpos($file, '..') === false && $fs->exists($this->eccubeConfig['eccube_temp_image_dir'].'/'.$file)) {
-             $fs->rename(
-                 $this->eccubeConfig['eccube_temp_image_dir'].'/'.$file,
-                 $this->eccubeConfig['eccube_save_image_dir'].'/'.$file
-             );
-         }
-     }
- }
-