app/Plugin/CategoryContentConfig/Event.php line 53

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of CategoryContentConfig Plugin
  4.  *
  5.  * Copyright(c) https://beststore.tokyo/ All Rights Reserved.
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Plugin\CategoryContentConfig;
  11. use Eccube\Event\TemplateEvent;
  12. use Eccube\Event\EccubeEvents;
  13. use Eccube\Common\EccubeConfig;
  14. use Eccube\Event\EventArgs;
  15. use Eccube\Repository\CategoryRepository;
  16. use Plugin\CategoryContentConfig\Entity\Config;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. use Plugin\CategoryContentConfig\Util\ViewHelper;
  19. use Symfony\Component\Filesystem\Filesystem;
  20. class Event implements EventSubscriberInterface
  21. {
  22.     protected $twig;
  23.     protected $eccubeConfig;
  24.     protected $categoryRepository;
  25.     public function __construct(
  26.         \Twig\Environment      $twig,
  27.         EccubeConfig $eccubeConfig,
  28.         CategoryRepository $categoryRepository
  29.     )
  30.     {
  31.         $this->twig $twig;
  32.         $this->eccubeConfig $eccubeConfig;
  33.         $this->categoryRepository $categoryRepository;
  34.     }
  35.     /**
  36.      * @return array
  37.      */
  38.     public static function getSubscribedEvents()
  39.     {
  40.         return [
  41.             '@admin/Product/category.twig' => 'onRenderAdminProductCategoryTwig',
  42.             'Product/list.twig' => 'onRenderProductListTwig',
  43.             EccubeEvents::ADMIN_PRODUCT_CATEGORY_INDEX_COMPLETE => 'onAdminProductCategoryIndexComplete'
  44.         ];
  45.     }
  46.     public function onRenderAdminProductCategoryTwig(TemplateEvent $event)
  47.     {
  48.         $source $event->getSource();
  49.         $parameters $event->getParameters();
  50.         // js
  51.         $insertSource $this->twig->getLoader()->getSourceContext('@CategoryContentConfig/admin/category_image_js.twig')->getCode();
  52.         $source ViewHelper::insertJs($source$insertSource);
  53.         $pattern '|<div class="row mb-3">(.*?){% endfor %}|s';
  54.         $addRow $this->twig->getLoader()->getSourceContext('@CategoryContentConfig/admin/category_image.twig')->getCode();
  55.         if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  56.             $replacement $matches[0][0] . $addRow;
  57.             $source preg_replace($pattern$replacement$source);
  58.             $event->setSource($source);
  59.         }
  60.         $pattern '|<form class="row(.*?){% endfor %}|s';
  61.         $addRow $this->twig->getLoader()->getSourceContext('@CategoryContentConfig/admin/child_category_image.twig')->getCode();
  62.         if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  63.             $replacement $matches[0][0] . $addRow;
  64.             $source preg_replace($pattern$replacement$source);
  65.             $event->setSource($source);
  66.         }
  67.         $event->setSource($source);
  68.         $event->setParameters($parameters);
  69.     }
  70.     public function onRenderProductListTwig(TemplateEvent $event)
  71.     {
  72.         $source $event->getSource();
  73.         $parameters $event->getParameters();
  74.         if(!$event->hasParameter('Category')){
  75.             if(preg_match("|{{ eccube_plg_category_list }}|s",$source$result)){
  76.                 $search $result[0];
  77.                 $replace "";
  78.                 $source str_replace($search$replace$source);
  79.             }
  80.         } else {
  81.             if(preg_match("|eccube_plg_category_list|s",$source$result)){
  82.                 $search $result[0];
  83.                 $replace "include('@CategoryContentConfig/Category/list.twig')";
  84.                 $source str_replace($search$replace$source);
  85.             }else{
  86.                 $pattern '|<div class="ec-searchnavRole__topicpath(.*?)</div>|s';
  87.                 $addRow $this->twig->getLoader()->getSourceContext('@CategoryContentConfig/Category/list.twig')->getCode();
  88.                 if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  89.         
  90.                     $replacement $matches[0][0] . $addRow;
  91.                     $source preg_replace($pattern$replacement$source);
  92.                 }
  93.             }
  94.     
  95.             $pattern '|<div class="ec-searchnavRole__counter(.*?)</div>|s';
  96.             $addRow "{% if Category.page_display_mode == " Config::PRODUCT_AND_CATEGORY_KEY ." or Category.page_display_mode == " Config::PRODUCT_KEY ." %}";
  97.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  98.     
  99.                 $replacement $addRow $matches[0][0];
  100.                 $source preg_replace($pattern$replacement$source);
  101.             }
  102.     
  103.             $pattern '|<div class="ec-searchnavRole__counter(.*?)</div>|s';
  104.             $addRow '{% endif %}';
  105.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  106.     
  107.                 $replacement $matches[0][0] . $addRow;
  108.                 $source preg_replace($pattern$replacement$source);
  109.             }
  110.     
  111.             $pattern '|{% if pagination.totalItemCount > 0 |s';
  112.             $addRow "and (Category.page_display_mode == " Config::PRODUCT_AND_CATEGORY_KEY ." or Category.page_display_mode == " Config::PRODUCT_KEY ") ";
  113.             if (preg_match($pattern$source$matchesPREG_OFFSET_CAPTURE)) {
  114.     
  115.                 $replacement $matches[0][0] . $addRow;
  116.                 $source preg_replace($pattern$replacement$source);
  117.             }
  118.             $Category $parameters['Category'];
  119.             $Parent $this->categoryRepository->find($Category->getId());
  120.             $ChildCategories $this->categoryRepository->getList($Parent);
  121.             $parameters['ChildCategories'] = $ChildCategories;
  122.         }
  123.         $event->setSource($source);
  124.         $event->setParameters($parameters);
  125.     }
  126.     public function onAdminProductCategoryIndexComplete(EventArgs $eventArgs)
  127.     {
  128.         $form $eventArgs->getArgument('form');
  129.         if($eventArgs->hasArgument('editForm')){
  130.             $form $eventArgs->getArgument('editForm');
  131.         }
  132.         $file $form['category_image']->getData();
  133.         $fs = new Filesystem();
  134.         if ($file && strpos($file'..') === false && $fs->exists($this->eccubeConfig['eccube_temp_image_dir'].'/'.$file)) {
  135.             $fs->rename(
  136.                 $this->eccubeConfig['eccube_temp_image_dir'].'/'.$file,
  137.                 $this->eccubeConfig['eccube_save_image_dir'].'/'.$file
  138.             );
  139.         }
  140.     }
  141. }