app/Plugin/HigashiyamaForProduct/EventSubscriber/Controller/Admin/ProductControllerSubscriber.php line 74

Open in your IDE?
  1. <?php
  2. namespace Plugin\HigashiyamaForProduct\EventSubscriber\Controller\Admin;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\Form\FormFactoryInterface;
  7. use Eccube\Entity\Product;
  8. use Eccube\Entity\Member;
  9. use Eccube\Repository\ProductRepository;
  10. use Eccube\Event\TemplateEvent;
  11. use Eccube\Event\EventArgs;
  12. use Eccube\Event\EccubeEvents;
  13. use Eccube\Common\EccubeConfig;
  14. use Plugin\HigashiyamaForProduct\Entity\StandReadingImage;
  15. use Plugin\HigashiyamaForProduct\Repository\StandReadingImageRepository;
  16. use Symfony\Component\Filesystem\Filesystem;
  17. use Symfony\Component\HttpFoundation\File\File;
  18. class ProductControllerSubscriber implements EventSubscriberInterface
  19. {
  20.     /**
  21.      * @var EntityManagerInterface
  22.      */
  23.     protected $entityManager;
  24.     /**
  25.      * @var EccubeConfig
  26.      */
  27.     protected $eccubeConfig;
  28.     /**
  29.      * @var ProductRepository
  30.      */
  31.     protected $productRepository;
  32.     /**
  33.      * @var StandReadingImageRepository
  34.      */
  35.     protected $standReadingImageRepository;
  36.     /**
  37.      * ProductController constructor.
  38.      *
  39.      * @param EccubeConfig $eccubeConfig
  40.      */
  41.     public function __construct(
  42.         EntityManagerInterface $entityManager,
  43.         EccubeConfig $eccubeConfig,
  44.         ProductRepository $productRepository,
  45.         StandReadingImageRepository $standReadingImageRepository
  46.     ) {
  47.         $this->entityManager $entityManager;
  48.         $this->eccubeConfig $eccubeConfig;
  49.         $this->productRepository $productRepository;
  50.         $this->standReadingImageRepository $standReadingImageRepository;
  51.     }
  52.     /**
  53.      * @return array
  54.      */
  55.     public static function getSubscribedEvents()
  56.     {
  57.         return [
  58.             '@admin/Product/product.twig' => ['HigashiyamaForProduct'1],
  59.             EccubeEvents::ADMIN_PRODUCT_EDIT_COMPLETE => 'AdminProductEditComplete',
  60.         ];
  61.     }
  62.     /**
  63.      * @param TemplateEvent $event
  64.      */
  65.     public function HigashiyamaForProduct(TemplateEvent $event)
  66.     {
  67.         $event->addSnippet('@HigashiyamaForProduct/admin/Product/higashiyama_for_product.twig');
  68.         $event->addSnippet('@HigashiyamaForProduct/admin/Product/admin_product_stand_reading_image.twig');
  69.     }
  70.     public function AdminProductEditComplete(EventArgs $event)
  71.     {
  72.         $form $event->getArgument('form');
  73.         $Product $event->getArgument('Product');
  74.         // 画像の登録
  75.         $add_stand_reading_images $form->get('add_stand_reading_images')->getData();
  76.         foreach ($add_stand_reading_images as $add_stand_reading_image) {
  77.             $StandReadingImage = new StandReadingImage();
  78.             $StandReadingImage
  79.                 ->setFileName($add_stand_reading_image)
  80.                 ->setProduct($Product)
  81.                 ->setCreator($Product->getCreator())
  82.                 ->setSortNo(1);
  83.             $Product->addStandReadingImage($StandReadingImage);
  84.             $this->entityManager->persist($StandReadingImage);
  85.             // 移動
  86.             $file = new File($this->eccubeConfig['eccube_temp_image_dir'] . '/' $add_stand_reading_image);
  87.             $file->move($this->eccubeConfig['eccube_save_image_dir']);
  88.         }
  89.         // 画像の削除
  90.         $delete_stand_reading_images $form->get('delete_stand_reading_images')->getData();
  91.         $fs = new Filesystem();
  92.         foreach ($delete_stand_reading_images as $delete_stand_reading_image) {
  93.             $StandReadingImage $this->standReadingImageRepository->findOneBy([
  94.                 'Product' => $Product,
  95.                 'file_name' => $delete_stand_reading_image,
  96.             ]);
  97.             if ($StandReadingImage instanceof StandReadingImage) {
  98.                 $Product->removeStandReadingImage($StandReadingImage);
  99.                 $this->entityManager->remove($StandReadingImage);
  100.                 $this->entityManager->flush();
  101.                 // 他に同じ画像を参照する商品がなければ画像ファイルを削除
  102.                 if (!$this->standReadingImageRepository->findOneBy(['file_name' => $delete_stand_reading_image])) {
  103.                     $fs->remove($this->eccubeConfig['eccube_save_image_dir'] . '/' $delete_stand_reading_image);
  104.                 }
  105.             } else {
  106.                 // 追加してすぐに削除した画像は、Entityに追加されない
  107.                 $fs->remove($this->eccubeConfig['eccube_temp_image_dir'] . '/' $delete_stand_reading_image);
  108.             }
  109.         }
  110.         $this->entityManager->flush();
  111.         if (array_key_exists('stand_reading_image'$event->getRequest()->request->get('admin_product'))) {
  112.             $stand_reading_image $event->getRequest()->request->get('admin_product')['stand_reading_image'];
  113.             foreach ($stand_reading_image as $sortNo => $filename) {
  114.                 $StandReadingImage $this->standReadingImageRepository
  115.                     ->findOneBy([
  116.                         'file_name' => pathinfo($filenamePATHINFO_BASENAME),
  117.                         'Product' => $Product,
  118.                     ]);
  119.                 if ($StandReadingImage !== null) {
  120.                     $StandReadingImage->setSortNo($sortNo);
  121.                     $this->entityManager->persist($StandReadingImage);
  122.                 }
  123.             }
  124.             $this->entityManager->flush();
  125.         }
  126.     }
  127. }