app/Plugin/SSProductDetailPage42/Event.php line 53

Open in your IDE?
  1. <?php
  2. namespace Plugin\SSProductDetailPage42;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Eccube\Entity\Layout;
  5. use Eccube\Entity\Product;
  6. use Eccube\Event\EccubeEvents;
  7. use Eccube\Event\EventArgs;
  8. use Eccube\Event\TemplateEvent;
  9. use Plugin\SSProductDetailPage42\Entity\ProductLayout;
  10. use Plugin\SSProductDetailPage42\Repository\ProductLayoutRepository;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class Event implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @var EntityManagerInterface
  16.      */
  17.     protected $entityManager;
  18.     /**
  19.      * @var ProductLayoutRepository
  20.      */
  21.     protected $productLayoutRepository;
  22.     public function __construct(EntityManagerInterface $entityManagerProductLayoutRepository $productLayoutRepository)
  23.     {
  24.         $this->entityManager $entityManager;
  25.         $this->productLayoutRepository $productLayoutRepository;
  26.     }
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             '@admin/Product/product.twig' => ['onTemplateAdminProduct'10],
  31.             EccubeEvents::ADMIN_PRODUCT_EDIT_COMPLETE => ['onAdminProductEditComplete'10],
  32.             EccubeEvents::ADMIN_PRODUCT_DELETE_COMPLETE => ['onAdminProductDeleteComplete'10],
  33.             EccubeEvents::ADMIN_PRODUCT_COPY_COMPLETE => ['onAdminProductCopyComplete'10],
  34.         ];
  35.     }
  36.     public function onTemplateAdminProduct(TemplateEvent $templateEvent)
  37.     {
  38.         $templateEvent->addSnippet('@SSProductDetailPage42/admin/Product/product.twig');
  39.     }
  40.     /**
  41.      * @param EventArgs $eventArgs
  42.      * @throws \Doctrine\ORM\ORMException
  43.      * @throws \Doctrine\ORM\OptimisticLockException
  44.      */
  45.     public function onAdminProductEditComplete(EventArgs $eventArgs)
  46.     {
  47.         /** @var \Symfony\Component\Form\Form $form */
  48.         /** @var \Eccube\Entity\Product $Product */
  49.         $form $eventArgs->getArgument('form');
  50.         $Product $eventArgs->getArgument('Product');
  51.         /** @var ProductLayout $productLayout */
  52.         foreach ($Product->getProductLayouts() as $productLayout) {
  53.             $Product->removeProductLayout($productLayout);
  54.             $this->entityManager->remove($productLayout);
  55.             $this->entityManager->flush($productLayout);
  56.         }
  57.         /** @var Layout $Layout */
  58.         $Layout $form['PcLayout']->getData();
  59.         $LastPageLayout $this->productLayoutRepository->findOneBy([], ['sort_no' => 'DESC']);
  60.         if ($LastPageLayout == null) {
  61.             $sortNo 0;
  62.         } else {
  63.             $sortNo $LastPageLayout->getSortNo();
  64.         }
  65.         if ($Layout) {
  66.             $PageLayout = new ProductLayout();
  67.             $PageLayout->setLayoutId($Layout->getId());
  68.             $PageLayout->setLayout($Layout);
  69.             $PageLayout->setProductId($Product->getId());
  70.             $PageLayout->setSortNo($sortNo++);
  71.             $PageLayout->setProduct($Product);
  72.             $this->entityManager->persist($PageLayout);
  73.             $this->entityManager->flush($PageLayout);
  74.             $Product->addProductLayout($PageLayout);
  75.         }
  76.         $Layout $form['SpLayout']->getData();
  77.         if ($Layout) {
  78.             $PageLayout = new ProductLayout();
  79.             $PageLayout->setLayoutId($Layout->getId());
  80.             $PageLayout->setLayout($Layout);
  81.             $PageLayout->setProductId($Product->getId());
  82.             $PageLayout->setSortNo($sortNo++);
  83.             $PageLayout->setProduct($Product);
  84.             $this->entityManager->persist($PageLayout);
  85.             $this->entityManager->flush($PageLayout);
  86.             $Product->addProductLayout($PageLayout);
  87.         }
  88.         $this->entityManager->persist($Product);
  89.         $this->entityManager->flush($Product);
  90.     }
  91.     /**
  92.      * @param EventArgs $eventArgs
  93.      * @throws \Doctrine\ORM\ORMException
  94.      * @throws \Doctrine\ORM\OptimisticLockException
  95.      */
  96.     public function onAdminProductDeleteComplete(EventArgs $eventArgs)
  97.     {
  98.     }
  99.     /**
  100.      * @param EventArgs $eventArgs
  101.      * @throws \Doctrine\ORM\ORMException
  102.      * @throws \Doctrine\ORM\OptimisticLockException
  103.      */
  104.     public function onAdminProductCopyComplete(EventArgs $eventArgs)
  105.     {
  106.         /** @var Product $Product */
  107.         $Product $eventArgs->getArgument('Product');
  108.         /** @var Product $CopyProduct */
  109.         $CopyProduct $eventArgs->getArgument('CopyProduct');
  110.         /** @var ProductLayout $productLayout */
  111.         foreach ($Product->getProductLayouts() as $productLayout) {
  112.             $CopyProductLayout = clone $productLayout;
  113.             $CopyProductLayout->setProductId($CopyProduct->getId());
  114.             $CopyProductLayout->setProduct($CopyProduct);
  115.             $CopyProduct->addProductLayout($CopyProductLayout);
  116.             $this->entityManager->persist($CopyProductLayout);
  117.         }
  118.         $this->entityManager->persist($CopyProduct);
  119.         $this->entityManager->flush();
  120.     }
  121. }