app/Plugin/ShelvingOption4/Controller/Admin/ConfigController.php line 98

Open in your IDE?
  1. <?php
  2. namespace Plugin\ShelvingOption4\Controller\Admin;
  3. use Eccube\Controller\AbstractController;
  4. use Eccube\Repository\ProductRepository;
  5. use Eccube\Util\CacheUtil;
  6. use Eccube\Event\EventArgs;
  7. use Plugin\ShelvingOption4\Entity\ShelvingOptionConfig;
  8. use Plugin\ShelvingOption4\Form\Type\Admin\ShelvingOptionConfigType;
  9. use Plugin\ShelvingOption4\Repository\ShelvingOptionConfigRepository;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Routing\RouterInterface;
  15. class ConfigController extends AbstractController
  16. {
  17.     /**
  18.      * @var ShelvingOptionConfigRepository
  19.      */
  20.     protected $configRepository;
  21.     /** @var ProductRepository */
  22.     protected $productRepository;
  23.     /**
  24.      * ConfigController constructor.
  25.      *
  26.      * @param ShelvingOptionConfigRepository $configRepository
  27.      */
  28.     public function __construct(
  29.         ShelvingOptionConfigRepository $configRepository,
  30.         ProductRepository $productRepository
  31.     ) {
  32.         $this->configRepository $configRepository;
  33.         $this->productRepository $productRepository;
  34.     }
  35.     /**
  36.      * @Route("/%eccube_admin_route%/shelving_option4/config", name="shelving_option4_admin_config")
  37.      * @Template("@ShelvingOption4/admin/config.twig")
  38.      */
  39.     public function index(Request $request)
  40.     {
  41.         $Config $this->configRepository->get();
  42.         $form $this->createForm(ShelvingOptionConfigType::class, $Config);
  43.         $form->handleRequest($request);
  44.         if ($form->isSubmitted() && $form->isValid()) {
  45.             $Config $form->getData();
  46.             $this->entityManager->persist($Config);
  47.             $this->entityManager->flush($Config);
  48.             $this->addSuccess('登録しました。''admin');
  49.             return $this->redirectToRoute('shelving_option4_admin_config');
  50.         }
  51.         return [
  52.             'form' => $form->createView(),
  53.         ];
  54.     }
  55.     /**
  56.      * @Route("/%eccube_admin_route%/shelving_option4/product/{id}", requirements={"id" = "\d+"}, name="shelving_option4_admin_product", methods={"GET"})
  57.      * @Template("@ShelvingOption4/admin/edit.twig")
  58.      */
  59.     public function edit(Request $request$id null)
  60.     {
  61.         if (is_null($id)) {
  62.             $this->addError('商品が選択されていません。''admin');
  63.             return $this->redirectToRoute('admin_product_page');
  64.         }
  65.         /** @var \ECCube\Entity\Product */
  66.         $Product $this->productRepository->find($id);
  67.         if (!$Product) {
  68.             throw new NotFoundHttpException();
  69.         }
  70.         $ShelvingOption $Product->getShelvingOption();
  71.         $builder $this->formFactory->createBuilder(ShelvingOptionConfigType::class, $ShelvingOption);
  72.         $form $builder->getForm();
  73.         return [
  74.             'Product' => $Product,
  75.             'ShelvingOption' => $ShelvingOption $ShelvingOption->toJson() : 'null',
  76.             'form' => $form->createView(),
  77.             'id' => $id,
  78.         ];
  79.     }
  80.     /**
  81.      * @Route("/%eccube_admin_route%/shelving_option4/product/{id}", requirements={"id" = "\d+"}, name="shelving_option4_admin_product_update", methods={"POST"})
  82.      */
  83.     public function update(Request $request$id nullRouterInterface $routerCacheUtil $cacheUtil)
  84.     {
  85.         if (is_null($id)) {
  86.             $this->addError('商品が選択されていません。''admin');
  87.             return $this->redirectToRoute('admin_product_page');
  88.         }
  89.         /** @var \ECCube\Entity\Product */
  90.         $Product $this->productRepository->find($id);
  91.         if (!$Product) {
  92.             throw new NotFoundHttpException();
  93.         }
  94.         $builder $this->formFactory->createBuilder(ShelvingOptionConfigType::class);
  95.         /* @var $form \Symfony\Component\Form\FormInterface */
  96.         $form $builder->getForm();
  97.         $form->handleRequest($request);
  98.         if (!$form->isValid()) {
  99.             throw new NotFoundHttpException();
  100.         }
  101.         $ShelvingOption $Product->getShelvingOption() ?? new ShelvingOptionConfig();
  102.         /** @var ShelvingOptionConfig */
  103.         $UpdateShelvingOption $form->getData();
  104.         if($UpdateShelvingOption != null && $UpdateShelvingOption->getFileName()) {
  105.             $filename $UpdateShelvingOption->getFileName();
  106.             if(file_exists($this->eccubeConfig['eccube_temp_shelving_image_dir'] . '/' $filename)) {
  107.                 rename($this->eccubeConfig['eccube_temp_shelving_image_dir'] . '/' $filename$this->eccubeConfig['eccube_save_shelving_image_dir'] . '/' $filename);
  108.             }
  109.         }
  110.         $ShelvingOption->setPattern($UpdateShelvingOption->getPattern());
  111.         $ShelvingOption->setWidthList($UpdateShelvingOption->getWidthList());
  112.         $ShelvingOption->setFullWidth($UpdateShelvingOption->getFullWidth());
  113.         $ShelvingOption->setHeightList($UpdateShelvingOption->getHeightList());
  114.         $ShelvingOption->setFullHeight($UpdateShelvingOption->getFullHeight());
  115.         $ShelvingOption->setItems($UpdateShelvingOption->getItems());
  116.         $ShelvingOption->setRowDoors($UpdateShelvingOption->getRowDoors());
  117.         $ShelvingOption->setRowDrawers($UpdateShelvingOption->getRowDrawers());
  118.         $ShelvingOption->setDepth($UpdateShelvingOption->getDepth());
  119.         $ShelvingOption->setTexture($UpdateShelvingOption->getTexture());
  120.         $ShelvingOption->setColorId($UpdateShelvingOption->getColorId());
  121.         $ShelvingOption->setBackPanel($UpdateShelvingOption->getBackPanel());
  122.         $ShelvingOption->setDoorSwing($UpdateShelvingOption->getDoorSwing());
  123.         $ShelvingOption->setFileName($UpdateShelvingOption->getFileName());
  124.         $ShelvingOption->setProduct($Product);
  125.         $this->entityManager->persist($ShelvingOption);
  126.         $this->entityManager->flush($ShelvingOption);
  127.         $this->addSuccess('登録しました。''admin');
  128.         return $this->redirectToRoute('shelving_option4_admin_product', ['id' => $id]);
  129.     }
  130.     /**
  131.      * @Route("/%eccube_admin_route%/shelving_option4/product/image/add", name="shelving_option4_admin_product_image_add", methods={"POST"})
  132.      */
  133.     public function addImage(Request $request)
  134.     {
  135.         if (!$request->isXmlHttpRequest()) {
  136.             throw new BadRequestHttpException();
  137.         }
  138.         $product_id $request->get('id');
  139.         $image_base64 $request->get('image');
  140.         $allowExtensions = ['gif''jpg''jpeg''png'];
  141.         $file '';
  142.         if($product_id && $image_base64) {
  143.             $data_image_png_base64 'data:image/png;base64,';
  144.             if(substr($image_base640strlen($data_image_png_base64)) == $data_image_png_base64) {
  145.                 $image str_replace($data_image_png_base64''$image_base64);
  146.                 $image str_replace(' ''+'$image);
  147.                 $image base64_decode($image);
  148.                 
  149.                 $extension 'png';
  150.                 
  151.                 $filename $product_id '.' $extension;
  152.                 file_put_contents($this->eccubeConfig['eccube_temp_shelving_image_dir'] . '/' $filename$image);
  153.                 $file $filename;
  154.             }
  155.         }
  156.         $event = new EventArgs(
  157.             [
  158.                 'file' => $file,
  159.             ],
  160.             $request
  161.         );
  162.         $file $event->getArgument('file');
  163.         return $this->json(['file' => $file], 200);
  164.     }
  165. }