app/Plugin/HiddenDeliveryDate/HiddenDeliveryDateEvent.php line 116

Open in your IDE?
  1. <?php
  2. /*
  3. * Plugin Name : HiddenDeliveryDate
  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\HiddenDeliveryDate;
  12. use Eccube\Event\EccubeEvents;
  13. use Eccube\Event\TemplateEvent;
  14. use Eccube\Event\EventArgs;
  15. use Plugin\HiddenDeliveryDate\Entity\Hiddenday;
  16. use Plugin\HiddenDeliveryDate\Service\ShoppingService;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. class HiddenDeliveryDateEvent implements EventSubscriberInterface
  20. {
  21.     private $entityManager;
  22.     private $shoppingService;
  23.     public function __construct(
  24.             EntityManagerInterface $entityManager,
  25.             ShoppingService $shoppingService
  26.             )
  27.     {
  28.         $this->entityManager $entityManager;
  29.         $this->shoppingService $shoppingService;
  30.     }
  31.     /**
  32.      * @return array
  33.      */
  34.     public static function getSubscribedEvents()
  35.     {
  36.         return [
  37.             EccubeEvents::ADMIN_PRODUCT_COPY_COMPLETE => 'hookAdminProductCopyComplete',
  38.             EccubeEvents::ADMIN_PRODUCT_CSV_EXPORT => 'hookAdminProductCsvExport',
  39.             '@admin/Product/index.twig' => 'onTemplateAdminProduct',
  40.             '@admin/Product/product.twig' => 'onTemplateAdminProductEdit',
  41.             'deliverydate.getformdeliverydates' => 'hookGetDeliveryDates',
  42.             'csvimportproductext.admin.product.csv.import.product.descriptions' => 'hookAdminProductCsvImportProductDescriptions',
  43.             'csvimportproductext.admin.product.csv.import.product.check'=> 'hookAdminProductCsvImportProductCheck',
  44.             'csvimportproductext.admin.product.csv.import.product.process' => 'hookAdminProductCsvImportProductProcess',
  45.         ];
  46.     }
  47.     public function hookAdminProductCopyComplete(EventArgs $event)
  48.     {
  49.         $Product $event->getArgument('Product');
  50.         $CopyProduct $event->getArgument('CopyProduct');
  51.         $Hiddendays $Product->getHiddendays();
  52.         if(count($Hiddendays) > 0){
  53.             foreach($Hiddendays as $Hiddenday){
  54.                 $newHiddenday = new Hiddenday();
  55.                 $newHiddenday->setProduct($CopyProduct)
  56.                              ->setDate($Hiddenday->getDate());
  57.                 $CopyProduct->addHiddenday($newHiddenday);
  58.                 $this->entityManager->persist($newHiddenday);
  59.             }
  60.         }
  61.         $this->entityManager->flush();
  62.     }
  63.     public function hookAdminProductCsvExport(EventArgs $event)
  64.     {
  65.         $ExportCsvRow $event->getArgument('ExportCsvRow');
  66.         if ($ExportCsvRow->isDataNull()) {
  67.             $ProductClass $event->getArgument('ProductClass');
  68.             $Product $ProductClass->getProduct();
  69.             $Csv $event->getArgument('Csv');
  70.             $csvEntityName str_replace('\\\\''\\'$Csv->getEntityName());
  71.             if($csvEntityName == 'Plugin\HiddenDeliveryDate\Entity\Hiddenday'){
  72.                 $ret = [];
  73.                 foreach($Product->getHiddendays() as $Hiddenday){
  74.                     $ret[] = $Hiddenday->getDate()->format('Y/m/d');
  75.                 }
  76.                 $ExportCsvRow->setData(implode(',',$ret));
  77.             }
  78.         }
  79.     }
  80.     public function onTemplateAdminProduct(TemplateEvent $event)
  81.     {
  82.         $twig '@HiddenDeliveryDate/admin/Product/product_menu.twig';
  83.         $event->addSnippet($twig);
  84.         $js '@HiddenDeliveryDate/admin/Product/product_menu.js';
  85.         $event->addAsset($js);
  86.     }
  87.     public function onTemplateAdminProductEdit(TemplateEvent $event)
  88.     {
  89.         $twig '@HiddenDeliveryDate/admin/Product/product_edit_button.twig';
  90.         $event->addSnippet($twig);
  91.         $js '@HiddenDeliveryDate/admin/Product/product_edit_button.js';
  92.         $event->addAsset($js);
  93.     }
  94.     public function hookGetDeliveryDates(EventArgs $event)
  95.     {
  96.         $deliveryDates $event->getArgument('deliveryDates');
  97.         $Shipping $event->getArgument('Shipping');
  98.         $deliveryDates $this->shoppingService->getHiddenDeliveryDates($deliveryDates$Shipping);
  99.         $event->setArgument('deliveryDates'$deliveryDates);
  100.     }
  101.     public function hookAdminProductCsvImportProductDescriptions(EventArgs $event)
  102.     {
  103.         $header $event->getArgument('header');
  104.         $key $event->getArgument('key');
  105.         if($key == trans('hiddendeliverydate.common.hiddenday')){
  106.             $header['description'] = trans('hiddendeliverydate.admin.product.product_csv.hidden_delivery_date_description');
  107.             $header['required'] = false;
  108.         }
  109.         $event->setArgument('header',$header);
  110.     }
  111.     public function hookAdminProductCsvImportProductCheck(EventArgs $event)
  112.     {
  113.         $row $event->getArgument('row');
  114.         $data $event->getArgument('data');
  115.         $errors $event->getArgument('errors');
  116.         if(isset($row[trans('hiddendeliverydate.common.hiddenday')]) && strlen($row[trans('hiddendeliverydate.common.hiddenday')]) > 0){
  117.             $hiddendays explode(',',$row[trans('hiddendeliverydate.common.hiddenday')]);
  118.             $format_str '%Y/%m/%d';
  119.             foreach($hiddendays as $hiddenday){
  120.                 $is_date_str strptime($hiddenday$format_str);
  121.                 if(!$is_date_str){
  122.                     $message trans('admin.common.csv_invalid_date_format', [
  123.                         '%line%' => $data->key() + 1,
  124.                         '%name%' => trans('hiddendeliverydate.common.hiddenday'),
  125.                         ]);
  126.                     $errors[] = $message;
  127.                 }
  128.                 list($year$month$day) = explode("/"$hiddenday);
  129.                 if (!checkdate($month$day$year)) {
  130.                     $message trans('admin.common.csv_invalid_not_found_target', [
  131.                         '%line%' => $data->key() + 1,
  132.                         '%name%' => trans('hiddendeliverydate.common.hiddenday'),
  133.                         '%target_name%' => $hiddenday,
  134.                         ]);
  135.                     $errors[] = $message;
  136.                 }
  137.             }
  138.         }
  139.         $event->setArgument('errors',$errors);
  140.     }
  141.     public function hookAdminProductCsvImportProductProcess(EventArgs $event)
  142.     {
  143.         $row $event->getArgument('row');
  144.         $ProductClass $event->getArgument('ProductClass');
  145.         $Product $ProductClass->getProduct();
  146.         if(isset($row[trans('hiddendeliverydate.common.hiddenday')])){
  147.             foreach($Product->getHiddendays() as $Hiddenday){
  148.                 $Product->removeHiddenday($Hiddenday);
  149.                 $this->entityManager->remove($Hiddenday);
  150.             }
  151.             if($row[trans('hiddendeliverydate.common.hiddenday')] != ''){
  152.                 $hiddendays explode(',',$row[trans('hiddendeliverydate.common.hiddenday')]);
  153.                 foreach($hiddendays as $hiddenday){
  154.                     $hiddenDate = new \DateTime($hiddenday , new \DateTimeZone('UTC'));
  155.                     $Hiddenday = new Hiddenday();
  156.                     $Hiddenday->setDate($hiddenDate)
  157.                               ->setProduct($Product);
  158.                     $Product->addHiddenday($Hiddenday);
  159.                     $this->entityManager->persist($Hiddenday);
  160.                 }
  161.             }
  162.         }
  163.     }
  164. }