- <?php
- /*
- * Plugin Name : ProductPlus
- *
- * Copyright (C) BraTech Co., Ltd. All Rights Reserved.
- * http://www.bratech.co.jp/
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Plugin\ProductPlus42\Event;
- use Doctrine\ORM\EntityManagerInterface;
- use Eccube\Event\EventArgs;
- use Plugin\ProductPlus42\Entity\ProductData;
- use Plugin\ProductPlus42\Entity\ProductDataDetail;
- use Plugin\ProductPlus42\Entity\ProductItem;
- use Plugin\ProductPlus42\Repository\ProductDataRepository;
- use Plugin\ProductPlus42\Repository\ProductItemRepository;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
- class CsvImportProductExtEvent implements EventSubscriberInterface
- {
-     private $entityManager;
-     private $productItemRepository;
-     private $productDataRepository;
-     public function __construct(
-             EntityManagerInterface $entityManager,
-             ProductItemRepository $productItemRepository,
-             ProductDataRepository $productDataRepository
-             )
-     {
-         $this->entityManager = $entityManager;
-         $this->productItemRepository = $productItemRepository;
-         $this->productDataRepository = $productDataRepository;
-     }
-     /**
-      * @return array
-      */
-     public static function getSubscribedEvents()
-     {
-         return [
-             'csvimportproductext.admin.product.csv.import.product.descriptions' => 'hookAdminProductCsvImportProductDescriptions',
-             'csvimportproductext.admin.product.csv.import.product.check'=> 'hookAdminProductCsvImportProductCheck',
-             'csvimportproductext.admin.product.csv.import.product.process' => 'hookAdminProductCsvImportProductProcess',
-         ];
-     }
-     public function hookAdminProductCsvImportProductDescriptions(EventArgs $event)
-     {
-         $header = $event->getArgument('header');
-         $key = $event->getArgument('key');
-         $ProductItems = $this->productItemRepository->getList();
-         foreach($ProductItems as $ProductItem){
-             if($key == $ProductItem->getName() . trans('productplus.csv.common.id')){
-                 $header['description'] = trans('productplus.admin.product.product_csv.product_plus.id_description');
-                 $header['required'] = false;
-             }elseif($key == $ProductItem->getName() && $ProductItem->getInputType() == ProductItem::IMAGE_TYPE){
-                 $header['description'] = trans('productplus.admin.product.product_csv.product_plus.image_description');
-                 $header['required'] = false;
-             }
-         }
-         $event->setArgument('header',$header);
-     }
-     public function hookAdminProductCsvImportProductCheck(EventArgs $event)
-     {
-         $row = $event->getArgument('row');
-         $lineNo = $event->getArgument('lineNo');
-         $errors = $event->getArgument('errors');
-         $ProductItems = $this->productItemRepository->getList();
-         foreach($ProductItems as $ProductItem){
-             if(isset($row[$ProductItem->getName() . trans('productplus.csv.common.id')])){
-                 if($row[$ProductItem->getName() . trans('productplus.csv.common.id')] !== '' && preg_match("/[^0-9,]/", $row[$ProductItem->getName() . trans('productplus.csv.common.id')])){
-                     $message = trans('productplus.admin.product.product_csv.not_correct', [
-                         '%line%' => $lineNo,
-                         '%name%' => $ProductItem->getName() . trans('productplus.csv.common.id'),
-                     ]);
-                     $errors[] = $message;
-                 }
-             }
-         }
-         $event->setArgument('errors',$errors);
-     }
-     public function hookAdminProductCsvImportProductProcess(EventArgs $event)
-     {
-         $row = $event->getArgument('row');
-         $ProductClass = $event->getArgument('ProductClass');
-         $Product = $ProductClass->getProduct();
-         $ProductItems = $this->productItemRepository->getList();
-         foreach($ProductItems as $ProductItem){
-             if(isset($row[$ProductItem->getName() . trans('productplus.csv.common.id')])
-              || isset($row[$ProductItem->getName()])){
-                 $value = null;
-                 $ProductData = $this->productDataRepository->findOneBy(['ProductItem' => $ProductItem, 'Product' => $Product]);
-                 if(!$ProductData){
-                     $ProductData = new ProductData();
-                     $ProductData->setProductItem($ProductItem);
-                     $ProductData->setProduct($Product);
-                 }
-                 if(isset($row[$ProductItem->getName() . trans('productplus.csv.common.id')])){
-                     $value = $row[$ProductItem->getName() . trans('productplus.csv.common.id')];
-                     if (is_array($value)) {
-                         $value = implode(',', $value);
-                     }
-                 }
-                 if(isset($row[$ProductItem->getName()])){
-                     $value = $row[$ProductItem->getName()];
-                 }
-                 if($ProductItem->getInputType() == ProductItem::IMAGE_TYPE) {
-                     foreach($ProductData->getDetails() as $removeDetail){
-                         $ProductData->removeDetail($removeDetail);
-                         $this->entityManager->remove($removeDetail);
-                     }
-                     $arrValue = explode(',',$value);
-                     $sortNo = 0;
-                     foreach($arrValue as $value){
-                         if(strlen($value) == 0)continue;
-                         $Detail = new ProductDataDetail();
-                         $Detail
-                             ->setValue($value)
-                             ->setProductData($ProductData)
-                             ->setSortNo(++$sortNo);
-                         $ProductData->addDetail($Detail);
-                         $this->entityManager->persist($Detail);
-                     }
-                     $this->entityManager->persist($ProductData);
-                     $Product->addProductData($ProductData);
-                     $this->entityManager->flush();
-                 }else{
-                     $ProductData = $this->productDataRepository->regist($ProductData, $ProductItem, $value);
-                     $Product->addProductData($ProductData);
-                 }
-             }
-         }
-     }
- }