app/Plugin/SheebDlc/Event.php line101

Open in your IDE?
  1. <?php
  2. /*
  3.  * Project Name: ダウンロードコンテンツ販売 プラグイン for 4.0
  4.  * Copyright(c) 2019 Kenji Nakanishi. All Rights Reserved.
  5.  *
  6.  * https://www.facebook.com/web.kenji.nakanishi
  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\SheebDlc;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Eccube\Common\EccubeConfig;
  14. use Eccube\Entity\Product;
  15. use Eccube\Entity\ProductClass;
  16. use Eccube\Event\EccubeEvents;
  17. use Eccube\Event\EventArgs;
  18. use Eccube\Event\TemplateEvent;
  19. use Eccube\Repository\ProductRepository;
  20. use Plugin\SheebDlc\Entity\Config;
  21. use Plugin\SheebDlc\Repository\ConfigRepository;
  22. use Plugin\SheebDlc\Service\SaveFile\SaveFileModuleFactory;
  23. use Symfony\Component\Asset\Packages;
  24. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  25. use Symfony\Component\Filesystem\Filesystem;
  26. class Event implements EventSubscriberInterface
  27. {
  28.     /**
  29.      * @return array
  30.      */
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             // 管理画面「商品詳細画面」読み込み・描画処理への介入
  35.             '@admin/Product/product.twig' => ['onTemplateProductEdit'10],
  36.             // 管理画面「商品詳細画面」保存処理への介入
  37.             EccubeEvents::ADMIN_PRODUCT_EDIT_COMPLETE => ['onProductEditComplete'10],
  38.             // 管理画面「商品詳細画面」削除処理への介入
  39.             EccubeEvents::ADMIN_PRODUCT_DELETE_COMPLETE => ['onProductEditDelete'10],
  40.             
  41.             // フロント画面 会員ログイン画面
  42.             'Shopping/login.twig' => ['onTemplateShoppingLogin'10],
  43.             // フロント画面 注文手続画面
  44.             'Shopping/index.twig' => ['onTemplateShoppingIndex'10],
  45.             // フロント画面 注文確認画面
  46.             'Shopping/confirm.twig' => ['onTemplateShoppingConfirm'10],
  47.             
  48.             
  49.             // フロント画面 マイページ 注文履歴詳細
  50.             'Mypage/history.twig' => ['onTemplateMypageHistory'10],
  51.             
  52.             // フロント画面 マイページのその他全ページ(共通ヘッダを修正するだけ)
  53.             'Mypage/index.twig' => ['onTemplateMypageNavi'10],
  54.             'Mypage/change.twig' => ['onTemplateMypageNavi'10],
  55.             'Mypage/change_complete.twig' => ['onTemplateMypageNavi'10],
  56.             'Mypage/delivery.twig' => ['onTemplateMypageNavi'10],
  57.             'Mypage/delivery_edit.twig' => ['onTemplateMypageNavi'10],
  58.             'Mypage/favorite.twig' => ['onTemplateMypageNavi'10],
  59.             'Mypage/withdraw.twig' => ['onTemplateMypageNavi'10],
  60.             'Mypage/withdraw_confirm.twig' => ['onTemplateMypageNavi'10],
  61.             'Mypage/withdraw_complete.twig' => ['onTemplateMypageNavi'10],
  62.         ];
  63.     }
  64.     /**
  65.      * @var EccubeConfig
  66.      */
  67.     private $eccubeConfig;
  68.     /**
  69.      * @var ProductRepository
  70.      */
  71.     private $product_repository;
  72.     /**
  73.      * @var EntityManagerInterface
  74.      */
  75.     private $em;
  76.     /**
  77.      * @var Packages
  78.      */
  79.     private $assets;
  80.     public function __construct(EccubeConfig $eccubeConfigProductRepository $product_repositoryEntityManagerInterface $emPackages $package)
  81.     {
  82.         $this->eccubeConfig $eccubeConfig;
  83.         $this->product_repository $product_repository;
  84.         $this->em $em;
  85.         $this->assets $package;
  86.     }
  87.     /**
  88.      * 管理画面 商品管理 詳細画面
  89.      * @param TemplateEvent $templateEvent
  90.      */
  91.     public function onTemplateProductEdit(TemplateEvent $templateEvent)
  92.     {
  93.         // フロントエンド系
  94.         $templateEvent->addSnippet('@SheebDlc/Modules/content_view.twig');
  95.         $templateEvent->addSnippet('@SheebDlc/Admin/Product/product.twig');
  96.     }
  97.     /**
  98.      * 管理画面 商品管理 詳細画面 保存時
  99.      * @param EventArgs $event
  100.      * @throws \Exception
  101.      */
  102.     public function onProductEditComplete(EventArgs $event$param$test)
  103.     {
  104.         /**
  105.          * @var $Product Product
  106.          * @var $ProductClass ProductClass
  107.          * @var $configRepository ConfigRepository
  108.          */
  109.         $Product $event->getArgument('Product');
  110.         $file_name $Product->getSheebDownloadContent();
  111.         
  112.         // 販売種別「ダウンロードコンテンツ」以外では何もしない
  113.         $ProductClass $Product->getProductClasses()->current();
  114.         if ($ProductClass->getSaleType()->getId() !== PluginManager::getDlcSaleType($this->em)->getId()) {
  115.             return;
  116.         }
  117.         
  118.         $configRepository $this->em->getRepository(Config::class);
  119.         $module SaveFileModuleFactory::get($this->eccubeConfig$configRepository->get(), $this->assets$file_name);
  120.         
  121.         /*
  122.          * モジュールごとに保存先に保存
  123.          * (今回保存するファイルが既に保存先にある場合はsave_urlについては何もしない)
  124.          */
  125.         if (!$module->isExistSaveFile($Product)) {
  126.             $module->throwIfNotExistTempFile();
  127.             $Product->setSheebDlcSaveUrl($module->save($Product));
  128.         }
  129.         
  130.         /*
  131.          * 数値系はデフォルトは0
  132.          */
  133.         if (empty($Product->getSheebDlcDownloadDueDays())) {
  134.             $Product->setSheebDlcDownloadDueDays(PluginManager::DEFAULT_DOWNLOAD_DUE_DAYS);
  135.         }
  136.         if (empty($Product->getSheebDlcViewingDays())) {
  137.             $Product->setSheebDlcViewingDays(PluginManager::DEFAULT_VIEWING_DAYS);
  138.         }
  139.         if (empty($Product->getSheebDlcDownloadableCount())) {
  140.             $Product->setSheebDlcDownloadableCount(PluginManager::DEFAULT_DOWNLOADABLE_COUNT);
  141.         }
  142.         
  143.         $this->em->persist($Product);
  144.         $this->em->flush();
  145.         
  146.         /*
  147.          * 一時ファイルを削除
  148.          */
  149.         $fs = new Filesystem();
  150.         $fs->remove($module->getTempFilePath());
  151.     }
  152.     /**
  153.      * 管理画面 商品管理 削除時
  154.      * @param EventArgs $event
  155.      * @throws \Exception
  156.      */
  157.     public function onProductEditDelete(EventArgs $event)
  158.     {
  159.         /**
  160.          * @var $Product Product
  161.          * @var $configRepository ConfigRepository
  162.          */
  163.         $Product $event->getArgument('Product');
  164.         $file_name $Product->getSheebDlcDownloadableCount();
  165.         
  166.         $configRepository $this->em->getRepository(Config::class);
  167.         $module SaveFileModuleFactory::get($this->eccubeConfig$configRepository->get(), $this->assets$file_name);
  168.         /*
  169.          * モジュールごとに削除
  170.          */
  171.         $module->remove($Product);
  172.     }
  173.     /**
  174.      * フロント画面 会員ログイン画面
  175.      * @param TemplateEvent $templateEvent
  176.      */
  177.     public function onTemplateShoppingLogin(TemplateEvent $templateEvent)
  178.     {
  179.         $templateEvent->addSnippet('@SheebDlc/Shopping/login.twig');
  180.     }
  181.     /**
  182.      * フロント画面 注文手続画面
  183.      * @param TemplateEvent $templateEvent
  184.      */
  185.     public function onTemplateShoppingIndex(TemplateEvent $templateEvent)
  186.     {
  187.         if (defined('EXIST_DOWNLOAD_CONTENT')) {
  188.             $templateEvent->addSnippet('@SheebDlc/Shopping/index.twig');
  189.         }
  190.     }
  191.     /**
  192.      * フロント画面 注文確認画面
  193.      * @param TemplateEvent $templateEvent
  194.      */
  195.     public function onTemplateShoppingConfirm(TemplateEvent $templateEvent)
  196.     {
  197.         if (defined('EXIST_DOWNLOAD_CONTENT')) {
  198.             $templateEvent->addSnippet('@SheebDlc/Shopping/confirm.twig');
  199.         }
  200.     }
  201.     public function onTemplateMypageNavi(TemplateEvent $templateEvent)
  202.     {
  203.         $templateEvent->addSnippet('@SheebDlc/Mypage/navi.twig');
  204.     }
  205.     public function onTemplateMypageHistory(TemplateEvent $templateEvent)
  206.     {
  207.         $templateEvent->addSnippet('@SheebDlc/Mypage/history.twig');
  208.     }
  209.     
  210. }