app/Plugin/DeliveryPlus4/DeliveryPlusEvent.php line 55

Open in your IDE?
  1. <?php
  2. /*
  3. * Plugin Name : DeliveryPlus4
  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\DeliveryPlus4;
  12. use Eccube\Repository\ProductClassRepository;
  13. use Eccube\Event\EccubeEvents;
  14. use Eccube\Event\TemplateEvent;
  15. use Eccube\Event\EventArgs;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. class DeliveryPlusEvent implements EventSubscriberInterface
  19. {
  20.     private $entityManager;
  21.     private $productClassRepository;
  22.     public function __construct(
  23.             EntityManagerInterface $entityManager,
  24.             ProductClassRepository $productClassRepository
  25.             )
  26.     {
  27.         $this->entityManager $entityManager;
  28.         $this->productClassRepository $productClassRepository;
  29.     }
  30.     /**
  31.      * @return array
  32.      */
  33.     public static function getSubscribedEvents()
  34.     {
  35.         return [
  36.             '@admin/Setting/Shop/delivery_edit.twig' => 'onTemplateAdminSettingShopDeliveryEdit',
  37.             EccubeEvents::ADMIN_PRODUCT_COPY_COMPLETE => 'hookAdminProductCopyComplete',
  38.             '@admin/Product/product.twig' => 'onTemplateAdminProductEdit',
  39.             '@admin/Product/product_class.twig' => 'onTemplateAdminProductClassEdit',
  40.             'Product/list.twig' => 'onTemplateProductList',
  41.             'Product/detail.twig' => 'onTemplateProductDetail',
  42.             'Shopping/index.twig' => 'onTemplateShoppingIndex',
  43.             'csvimportproductext.admin.product.csv.import.product.descriptions' => 'hookAdminProductCsvImportProductDescriptions',
  44.             'csvimportproductext.admin.product.csv.import.product.check'=> 'hookAdminProductCsvImportProductCheck',
  45.             'csvimportproductext.admin.product.csv.import.product.process' => 'hookAdminProductCsvImportProductProcess',
  46.         ];
  47.     }
  48.     public function onTemplateAdminSettingShopDeliveryEdit(TemplateEvent $event)
  49.     {
  50.         $twig '@DeliveryPlus4/admin/Setting/Shop/delivery_condition.twig';
  51.         $event->addSnippet($twig);
  52.         $js '@DeliveryPlus4/admin/Setting/Shop/delivery_condition.js';
  53.         $event->addAsset($js);
  54.     }
  55.     public function hookAdminProductCopyComplete(EventArgs $event)
  56.     {
  57.         $Product $event->getArgument('Product');
  58.         $CopyProduct $event->getArgument('CopyProduct');
  59.         $orgProductClasses $Product->getProductClasses();
  60.         foreach ($orgProductClasses as $ProductClass) {
  61.             $CopyProductClass $this->productClassRepository->findOneBy(['Product'=> $CopyProduct'ClassCategory1' => $ProductClass->getClassCategory1(), 'ClassCategory2' => $ProductClass->getClassCategory2()]);
  62.             if($CopyProductClass){
  63.                 $CopyProductClass->setDeliveryplusWeight($ProductClass->getDeliveryplusWeight());
  64.                 $CopyProductClass->setDeliveryplusSize($ProductClass->getDeliveryplusSize());
  65.                 $this->entityManager->persist($CopyProductClass);
  66.             }
  67.         }
  68.         $this->entityManager->flush();
  69.     }
  70.     public function onTemplateAdminProductEdit(TemplateEvent $event)
  71.     {
  72.         $twig '@DeliveryPlus4/admin/Product/product_weight_size.twig';
  73.         $event->addSnippet($twig);
  74.         $js '@DeliveryPlus4/admin/Product/product_weight_size.js';
  75.         $event->addAsset($js);
  76.     }
  77.     public function onTemplateAdminProductClassEdit(TemplateEvent $event)
  78.     {
  79.         $twig '@DeliveryPlus4/admin/Product/product_class_weight_size.twig';
  80.         $event->addSnippet($twig);
  81.         $js '@DeliveryPlus4/admin/Product/product_class_weight_size.js';
  82.         $event->addAsset($js);
  83.     }
  84.     public function onTemplateProductDetail(TemplateEvent $event)
  85.     {
  86.         $parameters $event->getParameters();
  87.         $Product $parameters['Product'];
  88.         $class_categories[$Product->getId()]['__unselected']['#'] = [
  89.             'weight' => '',
  90.             'size' => '',
  91.         ];
  92.         foreach($Product->getProductClasses() as $ProductClass){
  93.             if(!$ProductClass->isVisible())continue;
  94.             $ClassCategory1 $ProductClass->getClassCategory1();
  95.             $ClassCategory2 $ProductClass->getClassCategory2();
  96.             if ($ClassCategory2 && !$ClassCategory2->isVisible()) {
  97.                 continue;
  98.             }
  99.             $class_category_id1 $ClassCategory1 ? (string) $ClassCategory1->getId() : '__unselected2';
  100.             $class_category_id2 $ClassCategory2 ? (string) $ClassCategory2->getId() : '';
  101.             $class_category_name2 $ClassCategory2 $ClassCategory2->getName().($ProductClass->getStockFind() ? '' trans('product.text.out_of_stock')) : '';
  102.             $class_categories[$Product->getId()][$class_category_id1]['#'] = [
  103.                 'weight' => '',
  104.                 'size' => '',
  105.             ];
  106.             $class_categories[$Product->getId()][$class_category_id1]['#'.$class_category_id2] = [
  107.                 'weight' => number_format($ProductClass->getDeliveryplusWeight(),2),
  108.                 'size' => number_format($ProductClass->getDeliveryplusSize(),2),
  109.             ];
  110.         }
  111.         $parameters['DeliveryPlusParams'] = $class_categories;
  112.         $event->setParameters($parameters);
  113.         $twig '@DeliveryPlus4/default/Product/product_js.twig';
  114.         $event->addSnippet($twig);
  115.     }
  116.     public function onTemplateProductList(TemplateEvent $event)
  117.     {
  118.         $parameters $event->getParameters();
  119.         $pagination $parameters['pagination'];
  120.         $class_categories = [];
  121.         foreach($pagination as $Product){
  122.             $class_categories[$Product->getId()]['__unselected']['#'] = [
  123.                 'weight' => '',
  124.                 'size' => '',
  125.             ];
  126.             foreach($Product->getProductClasses() as $ProductClass){
  127.                 if(!$ProductClass->isVisible())continue;
  128.                 $ClassCategory1 $ProductClass->getClassCategory1();
  129.                 $ClassCategory2 $ProductClass->getClassCategory2();
  130.                 if ($ClassCategory2 && !$ClassCategory2->isVisible()) {
  131.                     continue;
  132.                 }
  133.                 $class_category_id1 $ClassCategory1 ? (string) $ClassCategory1->getId() : '__unselected2';
  134.                 $class_category_id2 $ClassCategory2 ? (string) $ClassCategory2->getId() : '';
  135.                 $class_category_name2 $ClassCategory2 $ClassCategory2->getName().($ProductClass->getStockFind() ? '' trans('product.text.out_of_stock')) : '';
  136.                 $class_categories[$Product->getId()][$class_category_id1]['#'] = [
  137.                     'weight' => '',
  138.                     'size' => '',
  139.                 ];
  140.                 $class_categories[$Product->getId()][$class_category_id1]['#'.$class_category_id2] = [
  141.                     'weight' => number_format($ProductClass->getDeliveryplusWeight(),2),
  142.                     'size' => number_format($ProductClass->getDeliveryplusSize(),2),
  143.                 ];
  144.             }
  145.         }
  146.         $parameters['DeliveryPlusParams'] = $class_categories;
  147.         $event->setParameters($parameters);
  148.         $twig '@DeliveryPlus4/default/Product/product_js.twig';
  149.         $event->addSnippet($twig);
  150.     }
  151.     public function onTemplateShoppingIndex(TemplateEvent $event)
  152.     {
  153.         $parameters $event->getParameters();
  154.         $form $parameters['form'];
  155.         $cannot_order false;
  156.         foreach($form['Shippings'] as $Shipping){
  157.             if(count($Shipping['Delivery']->vars['choices']) == 0)$cannot_order true;
  158.         }
  159.         if($cannot_order){
  160.             $twig '@DeliveryPlus4/default/Shopping/cannot_order.twig';
  161.             $event->addSnippet($twig);
  162.         }
  163.     }
  164.     public function hookAdminProductCsvImportProductDescriptions(EventArgs $event)
  165.     {
  166.         $header $event->getArgument('header');
  167.         $key $event->getArgument('key');
  168.         if($key == trans('deliveryplus.common.1')){
  169.             $header['description'] = trans('deliveryplus.admin.product.product_csv.weight_description');
  170.             $header['required'] = false;
  171.         }
  172.         if($key == trans('deliveryplus.common.2')){
  173.             $header['description'] = trans('deliveryplus.admin.product.product_csv.size_description');
  174.             $header['required'] = false;
  175.         }
  176.         $event->setArgument('header',$header);
  177.     }
  178.     public function hookAdminProductCsvImportProductCheck(EventArgs $event)
  179.     {
  180.         $row $event->getArgument('row');
  181.         $data $event->getArgument('data');
  182.         $errors $event->getArgument('errors');
  183.         if(isset($row[trans('deliveryplus.common.1')])){
  184.             if($row[trans('deliveryplus.common.1')] !== '' && !is_numeric($row[trans('deliveryplus.common.1')]) || $row[trans('deliveryplus.common.1')] < 0){
  185.                 $message trans('admin.common.csv_invalid_greater_than_zero', [
  186.                     '%line%' => $data->key() + 1,
  187.                     '%name%' => trans('deliveryplus.common.1'),
  188.                 ]);
  189.                 $errors[] = $message;
  190.             }
  191.         }
  192.         if(isset($row[trans('deliveryplus.common.2')])){
  193.             if($row[trans('deliveryplus.common.2')] !== '' && !is_numeric($row[trans('deliveryplus.common.2')]) || $row[trans('deliveryplus.common.2')] < 0){
  194.                 $message trans('admin.common.csv_invalid_greater_than_zero', [
  195.                     '%line%' => $data->key() + 1,
  196.                     '%name%' => trans('deliveryplus.common.2'),
  197.                 ]);
  198.                 $errors[] = $message;
  199.             }
  200.         }
  201.         $event->setArgument('errors',$errors);
  202.     }
  203.     public function hookAdminProductCsvImportProductProcess(EventArgs $event)
  204.     {
  205.         $row $event->getArgument('row');
  206.         $data $event->getArgument('data');
  207.         $ProductClass $event->getArgument('ProductClass');
  208.         if(isset($row[trans('deliveryplus.common.1')])){
  209.             if($row[trans('deliveryplus.common.1')] != ''){
  210.                 $ProductClass->setDeliveryplusWeight($row[trans('deliveryplus.common.1')]);
  211.             }else{
  212.                 $ProductClass->setDeliveryplusWeight(NULL);
  213.             }
  214.         }
  215.         if(isset($row[trans('deliveryplus.common.2')])){
  216.             if($row[trans('deliveryplus.common.2')] != ''){
  217.                 $ProductClass->setDeliveryplusSize($row[trans('deliveryplus.common.2')]);
  218.             }else{
  219.                 $ProductClass->setDeliveryplusSize(NULL);
  220.             }
  221.         }
  222.     }
  223. }