app/Plugin/ProductPlus42/Event/CsvImportProductExtEvent.php line 92

Open in your IDE?
  1. <?php
  2. /*
  3. * Plugin Name : ProductPlus
  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\ProductPlus42\Event;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Eccube\Event\EventArgs;
  14. use Plugin\ProductPlus42\Entity\ProductData;
  15. use Plugin\ProductPlus42\Entity\ProductDataDetail;
  16. use Plugin\ProductPlus42\Entity\ProductItem;
  17. use Plugin\ProductPlus42\Repository\ProductDataRepository;
  18. use Plugin\ProductPlus42\Repository\ProductItemRepository;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. class CsvImportProductExtEvent implements EventSubscriberInterface
  21. {
  22.     private $entityManager;
  23.     private $productItemRepository;
  24.     private $productDataRepository;
  25.     public function __construct(
  26.             EntityManagerInterface $entityManager,
  27.             ProductItemRepository $productItemRepository,
  28.             ProductDataRepository $productDataRepository
  29.             )
  30.     {
  31.         $this->entityManager $entityManager;
  32.         $this->productItemRepository $productItemRepository;
  33.         $this->productDataRepository $productDataRepository;
  34.     }
  35.     /**
  36.      * @return array
  37.      */
  38.     public static function getSubscribedEvents()
  39.     {
  40.         return [
  41.             'csvimportproductext.admin.product.csv.import.product.descriptions' => 'hookAdminProductCsvImportProductDescriptions',
  42.             'csvimportproductext.admin.product.csv.import.product.check'=> 'hookAdminProductCsvImportProductCheck',
  43.             'csvimportproductext.admin.product.csv.import.product.process' => 'hookAdminProductCsvImportProductProcess',
  44.         ];
  45.     }
  46.     public function hookAdminProductCsvImportProductDescriptions(EventArgs $event)
  47.     {
  48.         $header $event->getArgument('header');
  49.         $key $event->getArgument('key');
  50.         $ProductItems $this->productItemRepository->getList();
  51.         foreach($ProductItems as $ProductItem){
  52.             if($key == $ProductItem->getName() . trans('productplus.csv.common.id')){
  53.                 $header['description'] = trans('productplus.admin.product.product_csv.product_plus.id_description');
  54.                 $header['required'] = false;
  55.             }elseif($key == $ProductItem->getName() && $ProductItem->getInputType() == ProductItem::IMAGE_TYPE){
  56.                 $header['description'] = trans('productplus.admin.product.product_csv.product_plus.image_description');
  57.                 $header['required'] = false;
  58.             }
  59.         }
  60.         $event->setArgument('header',$header);
  61.     }
  62.     public function hookAdminProductCsvImportProductCheck(EventArgs $event)
  63.     {
  64.         $row $event->getArgument('row');
  65.         $lineNo $event->getArgument('lineNo');
  66.         $errors $event->getArgument('errors');
  67.         $ProductItems $this->productItemRepository->getList();
  68.         foreach($ProductItems as $ProductItem){
  69.             if(isset($row[$ProductItem->getName() . trans('productplus.csv.common.id')])){
  70.                 if($row[$ProductItem->getName() . trans('productplus.csv.common.id')] !== '' && preg_match("/[^0-9,]/"$row[$ProductItem->getName() . trans('productplus.csv.common.id')])){
  71.                     $message trans('productplus.admin.product.product_csv.not_correct', [
  72.                         '%line%' => $lineNo,
  73.                         '%name%' => $ProductItem->getName() . trans('productplus.csv.common.id'),
  74.                     ]);
  75.                     $errors[] = $message;
  76.                 }
  77.             }
  78.         }
  79.         $event->setArgument('errors',$errors);
  80.     }
  81.     public function hookAdminProductCsvImportProductProcess(EventArgs $event)
  82.     {
  83.         $row $event->getArgument('row');
  84.         $ProductClass $event->getArgument('ProductClass');
  85.         $Product $ProductClass->getProduct();
  86.         $ProductItems $this->productItemRepository->getList();
  87.         foreach($ProductItems as $ProductItem){
  88.             if(isset($row[$ProductItem->getName() . trans('productplus.csv.common.id')])
  89.              || isset($row[$ProductItem->getName()])){
  90.                 $value null;
  91.                 $ProductData $this->productDataRepository->findOneBy(['ProductItem' => $ProductItem'Product' => $Product]);
  92.                 if(!$ProductData){
  93.                     $ProductData = new ProductData();
  94.                     $ProductData->setProductItem($ProductItem);
  95.                     $ProductData->setProduct($Product);
  96.                 }
  97.                 if(isset($row[$ProductItem->getName() . trans('productplus.csv.common.id')])){
  98.                     $value $row[$ProductItem->getName() . trans('productplus.csv.common.id')];
  99.                     if (is_array($value)) {
  100.                         $value implode(','$value);
  101.                     }
  102.                 }
  103.                 if(isset($row[$ProductItem->getName()])){
  104.                     $value $row[$ProductItem->getName()];
  105.                 }
  106.                 if($ProductItem->getInputType() == ProductItem::IMAGE_TYPE) {
  107.                     foreach($ProductData->getDetails() as $removeDetail){
  108.                         $ProductData->removeDetail($removeDetail);
  109.                         $this->entityManager->remove($removeDetail);
  110.                     }
  111.                     $arrValue explode(',',$value);
  112.                     $sortNo 0;
  113.                     foreach($arrValue as $value){
  114.                         if(strlen($value) == 0)continue;
  115.                         $Detail = new ProductDataDetail();
  116.                         $Detail
  117.                             ->setValue($value)
  118.                             ->setProductData($ProductData)
  119.                             ->setSortNo(++$sortNo);
  120.                         $ProductData->addDetail($Detail);
  121.                         $this->entityManager->persist($Detail);
  122.                     }
  123.                     $this->entityManager->persist($ProductData);
  124.                     $Product->addProductData($ProductData);
  125.                     $this->entityManager->flush();
  126.                 }else{
  127.                     $ProductData $this->productDataRepository->regist($ProductData$ProductItem$value);
  128.                     $Product->addProductData($ProductData);
  129.                 }
  130.             }
  131.         }
  132.     }
  133. }