app/Plugin/ApexOrderItemOption/Event/CsvImportProductExtEvent.php line 54

Open in your IDE?
  1. <?php
  2. namespace Plugin\ApexOrderItemOption\Event;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Eccube\Event\EventArgs;
  5. use Plugin\ApexOrderItemOption\Entity\ProductOption;
  6. use Plugin\ApexOrderItemOption\Repository\OptionRepository;
  7. use Plugin\ApexOrderItemOption\Repository\ProductOptionRepository;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class CsvImportProductExtEvent implements EventSubscriberInterface
  10. {
  11.     private $entityManager;
  12.     private $optionRepository;
  13.     private $productOptionRepository;
  14.     public function __construct(
  15.         EntityManagerInterface $entityManager,
  16.         OptionRepository $optionRepository,
  17.         ProductOptionRepository $productOptionRepository
  18.     ){
  19.         $this->entityManager $entityManager;
  20.         $this->optionRepository $optionRepository;
  21.         $this->productOptionRepository $productOptionRepository;
  22.     }
  23.     /**
  24.      * @return array
  25.      */
  26.     public static function getSubscribedEvents()
  27.     {
  28.         return [
  29.             'csvimportproductext.admin.product.csv.import.product.descriptions' => 'hookAdminProductCsvImportProductDescriptions',
  30.             'csvimportproductext.admin.product.csv.import.product.check'=> 'hookAdminProductCsvImportProductCheck',
  31.             'csvimportproductext.admin.product.csv.import.product.process' => 'hookAdminProductCsvImportProductProcess',
  32.         ];
  33.     }
  34.     public function hookAdminProductCsvImportProductDescriptions(EventArgs $event)
  35.     {
  36.         $header $event->getArgument('header');
  37.         $key $event->getArgument('key');
  38.         if($key == trans('productoption.csv.product.label.id')){
  39.             $header['description'] = trans('productoption.admin.product.product_csv.product_assign_description');
  40.             $header['required'] = false;
  41.         }
  42.         $event->setArgument('header',$header);
  43.     }
  44.     public function hookAdminProductCsvImportProductCheck(EventArgs $event)
  45.     {
  46.         $row $event->getArgument('row');
  47.         $lineNo $event->getArgument('lineNo');
  48.         $errors $event->getArgument('errors');
  49.         if(isset($row[trans('productoption.csv.product.label.id')])){
  50.             if($row[trans('productoption.csv.product.label.id')] !== '' && preg_match("/[^0-9,]/"$row[trans('productoption.csv.product.label.id')])){
  51.                 $message trans('productoption.admin.product.product_csv.not_correct', [
  52.                     '%line%' => $lineNo,
  53.                     '%name%' => trans('productoption.csv.product.label.id'),
  54.                 ]);
  55.                 $errors[] = $message;
  56.             }
  57.         }
  58.         $event->setArgument('errors',$errors);
  59.     }
  60.     public function hookAdminProductCsvImportProductProcess(EventArgs $event)
  61.     {
  62.         $row $event->getArgument('row');
  63.         $ProductClass $event->getArgument('ProductClass');
  64.         $Product $ProductClass->getProduct();
  65.         if(isset($row[trans('productoption.csv.product.label.id')])){
  66.             // 一旦クリア
  67.             $currentProductOptions $Product->getProductOptions();
  68.             foreach ($currentProductOptions as $currentProductOption) {
  69.                 $this->entityManager->remove($currentProductOption);
  70.                 $Product->removeProductOption($currentProductOption);
  71.             }
  72.             $this->entityManager->persist($Product);
  73.             $this->entityManager->flush();
  74.         }
  75.         if(isset($row[trans('productoption.csv.product.label.id')]) && strlen($row[trans('productoption.csv.product.label.id')]) > 0){
  76.             $productOptions explode(','$row[trans('productoption.csv.product.label.id')]);
  77.             foreach($productOptions as $option_id){
  78.                 if(is_numeric($option_id)){
  79.                     $Option $this->optionRepository->find($option_id);
  80.                     if($Option){
  81.                         $ProductOption = new ProductOption();
  82.                         $ProductOption->setProduct($Product);
  83.                         $ProductOption->setOption($Option);
  84.                         $this->productOptionRepository->saveProductOption($ProductOption);
  85.                         $Product->addProductOption($ProductOption);
  86.                     }
  87.                 }
  88.             }
  89.         }
  90.     }
  91. }