<?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);
}
}
}
}
}