app/Plugin/ApexOrderItemOption/Event/AdminProductEvent.php line 36

Open in your IDE?
  1. <?php
  2. namespace Plugin\ApexOrderItemOption\Event;
  3. use Eccube\Event\EccubeEvents;
  4. use Eccube\Event\EventArgs;
  5. use Eccube\Event\TemplateEvent;
  6. use Plugin\ApexOrderItemOption\Entity\Option;
  7. use Plugin\ApexOrderItemOption\Entity\ProductOption;
  8. use Plugin\ApexOrderItemOption\Repository\ProductOptionRepository;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class AdminProductEvent implements EventSubscriberInterface
  11. {
  12.     private $productOptionRepository;
  13.     public function __construct(
  14.         ProductOptionRepository $productOptionRepository
  15.     ){
  16.         $this->productOptionRepository $productOptionRepository;
  17.     }
  18.     /**
  19.      * @return array
  20.      */
  21.     public static function getSubscribedEvents()
  22.     {
  23.         return [
  24.             '@admin/Product/index.twig' => 'onTemplateAdminProduct',
  25.             '@admin/Product/product.twig' => 'onTemplateAdminProductEdit',
  26.             EccubeEvents::ADMIN_PRODUCT_COPY_COMPLETE => 'hookAdminProductCopyComplete',
  27.             EccubeEvents::ADMIN_PRODUCT_CSV_EXPORT => 'hookAdminProductCsvExport',
  28.         ];
  29.     }
  30.     public function onTemplateAdminProduct(TemplateEvent $event)
  31.     {
  32.         $twig '@ApexOrderItemOption/admin/Product/product_list.twig';
  33.         $event->addSnippet($twig);
  34.         $js '@ApexOrderItemOption/admin/Product/product_list.js';
  35.         $event->addAsset($js);
  36.     }
  37.     public function onTemplateAdminProductEdit(TemplateEvent $event)
  38.     {
  39.         $source $event->getSource();
  40.         if(preg_match("/\<\/div\>[\n|\r\n|\r]\s*\{\%\sif\sid\sis\snot\snull\s\%\}[\n|\r\n|\r]/",$source$result)){
  41.             $search $result[0];
  42.             $replace_parts trim($search'</div>');
  43.             $replace "</div>{{ include('@ApexOrderItemOption/admin/Product/product_edit.twig') }}" $replace_parts;
  44.             $source str_replace($search$replace$source);
  45.         }
  46.         $event->setSource($source);
  47.         $parameters $event->getParameters();
  48.         $arrType[Option::SELECT_TYPE] = trans("aoio.option.type.select");
  49.         $arrType[Option::RADIO_TYPE] = trans("aoio.option.type.radio");
  50.         $arrType[Option::CHECKBOX_TYPE] = trans("aoio.option.type.checkbox");
  51.         $arrType[Option::TEXT_TYPE] = trans("aoio.option.type.text");
  52.         $arrType[Option::TEXTAREA_TYPE] = trans("aoio.option.type.textarea");
  53.         $arrType[Option::DATE_TYPE] = trans("aoio.option.type.date");
  54.         $arrType[Option::NUMBER_TYPE] = trans("aoio.option.type.number");
  55.         $parameters['arrType'] = $arrType;
  56.         $event->setParameters($parameters);
  57.     }
  58.     public function hookAdminProductCopyComplete(EventArgs $event)
  59.     {
  60.         $Product $event->getArgument('Product');
  61.         $CopyProduct $event->getArgument('CopyProduct');
  62.         foreach ($Product->getProductOptions() as $oldProductOption) {
  63.             $newProductOption = new ProductOption();
  64.             $newProductOption->setProduct($CopyProduct);
  65.             $newProductOption->setOption($oldProductOption->getOption());
  66.             $newProductOption->setSortNo($oldProductOption->getSortNo());
  67.             $this->productOptionRepository->saveProductOption($newProductOption);
  68.         }
  69.     }
  70.     public function hookAdminProductCsvExport(EventArgs $event)
  71.     {
  72.         $ExportCsvRow $event->getArgument('ExportCsvRow');
  73.         if ($ExportCsvRow->isDataNull()) {
  74.             $ProductClass $event->getArgument('ProductClass');
  75.             $Product $ProductClass->getProduct();
  76.             $Csv $event->getArgument('Csv');
  77.             $csvEntityName str_replace('\\\\''\\'$Csv->getEntityName());
  78.             if($csvEntityName == 'Plugin\ApexOrderItemOption\Entity\ProductOption'){
  79.                 $array = [];
  80.                 foreach($Product->getProductOptions() as $ProductOption){
  81.                     if($Csv->getFieldName() == 'product_option_id'){
  82.                         $array[] = $ProductOption->getOption()->getId();
  83.                     }elseif($Csv->getFieldName() == 'product_option_name'){
  84.                         $array[] = $ProductOption->getOption()->getBackendName();
  85.                     }
  86.                 }
  87.                 $ExportCsvRow->setData(implode(','$array));
  88.             }
  89.         }
  90.     }
  91. }