app/Plugin/SearchPlus42/Event/AdminOrderEvent.php line 79

Open in your IDE?
  1. <?php
  2. /*
  3. * Plugin Name : SearchPlus
  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\SearchPlus42\Event;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Eccube\Event\EccubeEvents;
  14. use Eccube\Event\EventArgs;
  15. use Eccube\Event\TemplateEvent;
  16. use Plugin\SearchPlus42\Service\SearchPlusService;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. class AdminOrderEvent implements EventSubscriberInterface
  20. {
  21.     private $entityManager;
  22.     private $searchPlusService;
  23.     private $requestStack;
  24.     public function __construct(
  25.             EntityManagerInterface $entityManager,
  26.             SearchPlusService $searchPlusService,
  27.             RequestStack $requestStack
  28.             )
  29.     {
  30.         $this->entityManager $entityManager;
  31.         $this->searchPlusService $searchPlusService;
  32.         $this->requestStack $requestStack;
  33.     }
  34.     /**
  35.      * @return array
  36.      */
  37.     public static function getSubscribedEvents()
  38.     {
  39.         return [
  40.             '@admin/Order/edit.twig' => 'onTemplateAdminOrderEdit',
  41.             EccubeEvents::ADMIN_ORDER_EDIT_SEARCH_PRODUCT_SEARCH => 'hookAdminOrderEditSearchProductSearch',
  42.         ];
  43.     }
  44.     public function onTemplateAdminOrderEdit(TemplateEvent $event)
  45.     {
  46.         if($this->searchPlusService->checkInstallPlugin('ProductPlus42')){
  47.             $productItemRepository $this->entityManager->getRepository('Plugin\ProductPlus42\Entity\ProductItem');
  48.             $ProductItems $productItemRepository->findAll([],['sort_no' => 'DESC']);
  49.             $parameters $event->getParameters();
  50.             $parameters['ProductItems'] = $ProductItems;
  51.             $event->setParameters($parameters);
  52.         }
  53.         $twig '@SearchPlus42/admin/Order/ext_search.twig';
  54.         $event->addSnippet($twig);
  55.         $js '@SearchPlus42/admin/Order/ext_search.js';
  56.         $event->addAsset($js);
  57.         $source $event->getSource();
  58.         if(preg_match("/admin\_search\_product\_category\_id\'\)\.val\(\)/",$source$result)){
  59.             $search $result[0];
  60.             $replace $search ",{{ include('@SearchPlus42/admin/Order/ext_js.twig') }}";
  61.             $source str_replace($search$replace$source);
  62.         }
  63.         $event->setSource($source);
  64.     }
  65.     public function hookAdminOrderEditSearchProductSearch(EventArgs $event)
  66.     {
  67.         $qb $event->getArgument('qb');
  68.         $request $this->requestStack->getMasterRequest();
  69.         $searchData['tag_ids'] = $request->get('tag_ids');
  70.         if (!empty($searchData['tag_ids']) && $searchData['tag_ids']) {
  71.             $ids $searchData['tag_ids'];
  72.             if(!is_array($ids))$ids = [$ids];
  73.             $qb->innerJoin('p.ProductTag''pt');
  74.             $qb->andWhere($qb->expr()->in('pt.Tag'$ids));
  75.         }
  76.         $searchData['pmin'] = $request->get('pmin');
  77.         $searchData['pmax'] = $request->get('pmax');
  78.         $searchData['instock'] = $request->get('instock');
  79.         if(strlen($searchData['pmin']) > || strlen($searchData['pmax'] > || strlen($searchData['instock'] > 0))){
  80.             $dql $qb->getDQL();
  81.             if(!preg_match('/INNER\sJOIN\sp\.ProductClasses/',$dql)){
  82.                 $qb->innerJoin('p.ProductClasses''pc')
  83.                    ->andWhere('pc.visible = true');
  84.             }
  85.             if(isset($searchData['pmin']) && is_numeric($searchData['pmin'])){
  86.                 $qb
  87.                     ->andWhere('pc.price02 >= :price_min')
  88.                     ->setParameter('price_min'$searchData['pmin']);
  89.             }
  90.             if(isset($searchData['pmax']) && is_numeric($searchData['pmax'])){
  91.                 $qb
  92.                     ->andWhere('pc.price02 <= :price_max')
  93.                     ->setParameter('price_max'$searchData['pmax']);
  94.             }
  95.             if(isset($searchData['instock']) && !empty($searchData['instock'])){
  96.                 $qb
  97.                     ->andWhere('pc.stock_unlimited = true OR pc.stock > 0');
  98.             }
  99.         }
  100.         if(method_exists('Eccube\Entity\Product','getMaker')){
  101.             $searchData['maker_id'] = $request->get('maker_id');
  102.             if (!empty($searchData['maker_id']) && $searchData['maker_id']) {
  103.                 $ids $searchData['maker_id'];
  104.                 if(!is_array($ids))$ids = [$ids];
  105.                 $qb->andWhere($qb->expr()->in('p.Maker'$ids));
  106.             }
  107.         }
  108.         if($this->searchPlusService->checkInstallPlugin('ProductPlus42')){
  109.             $productItemRepository $this->entityManager->getRepository('Plugin\ProductPlus42\Entity\ProductItem');
  110.             $ProductItems $productItemRepository->findAll();
  111.             foreach($ProductItems as $ProductItem){
  112.                 if($ProductItem->getInputType() == \Plugin\ProductPlus42\Entity\ProductItem::DATE_TYPE){
  113.                     $start $request->get('productplus_'.$ProductItem->getId().'_date_start');
  114.                     $end $request->get('productplus_'.$ProductItem->getId().'_date_end');
  115.                     if(strlen($start) > 0)$searchData['productplus_'.$ProductItem->getId().'_date_start'] = new \DateTime($start);
  116.                     if(strlen($end) > 0)$searchData['productplus_'.$ProductItem->getId().'_date_end'] = new \DateTime($end);
  117.                 }else{
  118.                     $searchData['productplus_'.$ProductItem->getId()] = $request->get('productplus_'.$ProductItem->getId());
  119.                 }
  120.             }
  121.             $qb $this->searchPlusService->createQueryBuilder($qb$searchData);
  122.         }
  123.         $event->setArgument('qb',$qb);
  124.     }
  125. }