app/Customize/Controller/Admin/BannerController.php line 133

Open in your IDE?
  1. <?php
  2. namespace Customize\Controller\Admin;
  3. use Customize\Entity\Banner;
  4. use Customize\Form\Type\Admin\BannerType;
  5. use Customize\Repository\BannerRepository;
  6. use Eccube\Controller\AbstractController;
  7. use Eccube\Util\CacheUtil;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. class BannerController extends AbstractController
  14. {
  15.     /**
  16.      * @var BannerRepository
  17.      */
  18.     protected $bannerRepository;
  19.     /**
  20.      * BannerController constructor.
  21.      * @param BannerRepository $bannerRepository
  22.      */
  23.     public function __construct(BannerRepository $bannerRepository)
  24.     {
  25.         $this->bannerRepository $bannerRepository;
  26.     }
  27.     /**
  28.      * @Route("/%eccube_admin_route%/content/banner", name="admin_content_banner")
  29.      * @Template("@admin/Content/banner.twig")
  30.      */
  31.     public function index(Request $request)
  32.     {
  33.         $listBannerType = [
  34.             => trans('admin.content.banner.type.1'),
  35.             => trans('admin.content.banner.type.2'),
  36.             => trans('admin.content.banner.type.3'),
  37.             => trans('admin.content.banner.type.4'),
  38.             => trans('admin.content.banner.type.5'),
  39.             => trans('admin.content.banner.type.6'),
  40.             => trans('admin.content.banner.type.7'),
  41.         ];
  42.         $linkPreviews = [
  43.             => "#toppage-recommend-block",
  44.             => "#toppage-masaito_rocktv-pc-block",
  45.             => "#toppage-special_page-block",
  46.             => "#toppage-official_page-block",
  47.             => "rock#rockpage-recommend-block",
  48.             => "rocktv#rocktvpage-list-banner-block",
  49.             => "rocktv#rocktvpage-list-products-rcm-block",
  50.         ];
  51.         $groupBanner = [];
  52.         foreach ($listBannerType as $bannerType => $text) {
  53.             $groupBanner[$bannerType] = $this->bannerRepository->getBannersByTypeId($bannerType);
  54.         }
  55.         return [
  56.             'groupBanner' => $groupBanner,
  57.             'linkPreviews' => $linkPreviews,
  58.             'isShow' => $request->get('type') ?: null
  59.         ];
  60.     }
  61.     /**
  62.      * バナーを登録・編集する。
  63.      *
  64.      * @Route("/%eccube_admin_route%/content/banner/new", name="admin_content_banner_new")
  65.      * @Route("/%eccube_admin_route%/content/banner/{id}/edit", requirements={"id" = "\d+"}, name="admin_content_banner_edit")
  66.      * @Template("@admin/Content/banner_edit.twig")
  67.      *
  68.      * @param null $id
  69.      *
  70.      * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
  71.      */
  72.     public function edit(Request $requestCacheUtil $cacheUtil$id null)
  73.     {
  74.         if ($id) {
  75.             $banner $this->bannerRepository->find($id);
  76.             if (!$banner) {
  77.                 throw new NotFoundHttpException();
  78.             }
  79.         } else {
  80.             $banner = new Banner();
  81.         }
  82.         $builder $this->formFactory
  83.             ->createBuilder(BannerType::class, $banner);
  84.         $form $builder->getForm();
  85.         $form->handleRequest($request);
  86.         if ($form->isSubmitted() && $form->isValid()) {
  87.             $banner $form->getData();
  88.             $allowExtensions = ['gif''jpg''jpeg''png''svg''GIF''JPG''JPEG''PNG''SVG'];
  89.             $image $form->get('image')->getData();
  90.             if ($image && in_array(strtolower($image->getClientOriginalExtension()), $allowExtensions)) {
  91.                 if ($banner->getImage() && file_exists('html/upload/save_banner/'.$banner->getImage())) {
  92.                     unlink('html/upload/save_banner/'.$banner->getImage());
  93.                 }
  94.                 $extension $image->getClientOriginalExtension();
  95.                 $filename date('mdHis').uniqid('_').'.'.$extension;
  96.                 $image->move('html/upload/save_banner/'$filename);
  97.                 $banner->setImage($filename);
  98.             }
  99.             $this->entityManager->persist($banner);
  100.             $this->entityManager->flush();
  101.             $this->addSuccess('admin.common.save_complete''admin');
  102.             // キャッシュの削除
  103.             $cacheUtil->clearDoctrineCache();
  104.             return $this->redirectToRoute('admin_content_banner', ['type' => $banner->getType()]);
  105.         }
  106.         return [
  107.             'form' => $form->createView(),
  108.             'banner' => $banner,
  109.         ];
  110.     }
  111.     /**
  112.      * @Route("/%eccube_admin_route%/content/banner/{id}/delete", requirements={"id" = "\d+"}, name="admin_content_banner_delete", methods={"DELETE"})
  113.      */
  114.     public function delete(Request $request$id nullCacheUtil $cacheUtil)
  115.     {
  116.         $this->isTokenValid();
  117.         $banner $this->bannerRepository
  118.             ->findOneBy([
  119.                 'id' => $id,
  120.             ]);
  121.         if (!$banner) {
  122.             $this->deleteMessage();
  123.             return $this->redirectToRoute('admin_content_banner');
  124.         }
  125.         if ($banner->getImage() && file_exists('html/upload/save_banner/'.$banner->getImage())) {
  126.             unlink('html/upload/save_banner/'.$banner->getImage());
  127.         }
  128.         $this->entityManager->remove($banner);
  129.         $this->entityManager->flush();
  130.         $this->addSuccess('admin.common.delete_complete''admin');
  131.         // キャッシュの削除
  132.         $cacheUtil->clearTwigCache();
  133.         $cacheUtil->clearDoctrineCache();
  134.         return $this->redirectToRoute('admin_content_banner');
  135.     }
  136.     /**
  137.      * Move rank with ajax.
  138.      *
  139.      * @throws \Exception
  140.      *
  141.      * @return Response
  142.      *
  143.      * @Route("/%eccube_admin_route%/content/banner/sort_no/move", name="banner_rank_move")
  144.      */
  145.     public function moveRank(Request $request)
  146.     {
  147.         if ($request->isXmlHttpRequest()) {
  148.             $arrRank $request->request->all();
  149.             $arrRankMoved $this->bannerRepository->moveBannerRank($arrRank);
  150.             log_info('Top image move rank'$arrRankMoved);
  151.         }
  152.         return new Response('OK');
  153.     }
  154. }