<?php
namespace Customize\Controller\Admin;
use Customize\Entity\Banner;
use Customize\Form\Type\Admin\BannerType;
use Customize\Repository\BannerRepository;
use Eccube\Controller\AbstractController;
use Eccube\Util\CacheUtil;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
class BannerController extends AbstractController
{
/**
* @var BannerRepository
*/
protected $bannerRepository;
/**
* BannerController constructor.
* @param BannerRepository $bannerRepository
*/
public function __construct(BannerRepository $bannerRepository)
{
$this->bannerRepository = $bannerRepository;
}
/**
* @Route("/%eccube_admin_route%/content/banner", name="admin_content_banner")
* @Template("@admin/Content/banner.twig")
*/
public function index(Request $request)
{
$listBannerType = [
1 => trans('admin.content.banner.type.1'),
2 => trans('admin.content.banner.type.2'),
3 => trans('admin.content.banner.type.3'),
4 => trans('admin.content.banner.type.4'),
5 => trans('admin.content.banner.type.5'),
6 => trans('admin.content.banner.type.6'),
7 => trans('admin.content.banner.type.7'),
];
$linkPreviews = [
1 => "#toppage-recommend-block",
2 => "#toppage-masaito_rocktv-pc-block",
3 => "#toppage-special_page-block",
4 => "#toppage-official_page-block",
5 => "rock#rockpage-recommend-block",
6 => "rocktv#rocktvpage-list-banner-block",
7 => "rocktv#rocktvpage-list-products-rcm-block",
];
$groupBanner = [];
foreach ($listBannerType as $bannerType => $text) {
$groupBanner[$bannerType] = $this->bannerRepository->getBannersByTypeId($bannerType);
}
return [
'groupBanner' => $groupBanner,
'linkPreviews' => $linkPreviews,
'isShow' => $request->get('type') ?: null
];
}
/**
* バナーを登録・編集する。
*
* @Route("/%eccube_admin_route%/content/banner/new", name="admin_content_banner_new")
* @Route("/%eccube_admin_route%/content/banner/{id}/edit", requirements={"id" = "\d+"}, name="admin_content_banner_edit")
* @Template("@admin/Content/banner_edit.twig")
*
* @param null $id
*
* @return array|\Symfony\Component\HttpFoundation\RedirectResponse
*/
public function edit(Request $request, CacheUtil $cacheUtil, $id = null)
{
if ($id) {
$banner = $this->bannerRepository->find($id);
if (!$banner) {
throw new NotFoundHttpException();
}
} else {
$banner = new Banner();
}
$builder = $this->formFactory
->createBuilder(BannerType::class, $banner);
$form = $builder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$banner = $form->getData();
$allowExtensions = ['gif', 'jpg', 'jpeg', 'png', 'svg', 'GIF', 'JPG', 'JPEG', 'PNG', 'SVG'];
$image = $form->get('image')->getData();
if ($image && in_array(strtolower($image->getClientOriginalExtension()), $allowExtensions)) {
if ($banner->getImage() && file_exists('html/upload/save_banner/'.$banner->getImage())) {
unlink('html/upload/save_banner/'.$banner->getImage());
}
$extension = $image->getClientOriginalExtension();
$filename = date('mdHis').uniqid('_').'.'.$extension;
$image->move('html/upload/save_banner/', $filename);
$banner->setImage($filename);
}
$this->entityManager->persist($banner);
$this->entityManager->flush();
$this->addSuccess('admin.common.save_complete', 'admin');
// キャッシュの削除
$cacheUtil->clearDoctrineCache();
return $this->redirectToRoute('admin_content_banner', ['type' => $banner->getType()]);
}
return [
'form' => $form->createView(),
'banner' => $banner,
];
}
/**
* @Route("/%eccube_admin_route%/content/banner/{id}/delete", requirements={"id" = "\d+"}, name="admin_content_banner_delete", methods={"DELETE"})
*/
public function delete(Request $request, $id = null, CacheUtil $cacheUtil)
{
$this->isTokenValid();
$banner = $this->bannerRepository
->findOneBy([
'id' => $id,
]);
if (!$banner) {
$this->deleteMessage();
return $this->redirectToRoute('admin_content_banner');
}
if ($banner->getImage() && file_exists('html/upload/save_banner/'.$banner->getImage())) {
unlink('html/upload/save_banner/'.$banner->getImage());
}
$this->entityManager->remove($banner);
$this->entityManager->flush();
$this->addSuccess('admin.common.delete_complete', 'admin');
// キャッシュの削除
$cacheUtil->clearTwigCache();
$cacheUtil->clearDoctrineCache();
return $this->redirectToRoute('admin_content_banner');
}
/**
* Move rank with ajax.
*
* @throws \Exception
*
* @return Response
*
* @Route("/%eccube_admin_route%/content/banner/sort_no/move", name="banner_rank_move")
*/
public function moveRank(Request $request)
{
if ($request->isXmlHttpRequest()) {
$arrRank = $request->request->all();
$arrRankMoved = $this->bannerRepository->moveBannerRank($arrRank);
log_info('Top image move rank', $arrRankMoved);
}
return new Response('OK');
}
}