<?php
/*
* This file is part of EC-CUBE, Addition by INSPIRATION
*
*/
namespace Customize\Controller;
use Customize\Repository\CategoriesRepository;
use Customize\Repository\VoicesRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Eccube\Controller\AbstractController;
use Knp\Component\Pager\PaginatorInterface;
class CaseController extends AbstractController
{
/**
* @var CategoriesRepository
*/
protected $categoriesRepository;
/**
* @var VoicesRepository
*/
protected $voicesRepository;
/**
* CaseController constructor.
*
* @param CategoriesRepository $categoriesRepository
* @param VoicesRepository $voicesRepository
*/
public function __construct(
CategoriesRepository $categoriesRepository,
VoicesRepository $voicesRepository
)
{
$this->categoriesRepository = $categoriesRepository;
$this->voicesRepository = $voicesRepository;
}
/**
* 導入事例.
*
* @Route("/case", name="case", methods={"GET"})
* @Template("Case/index.twig")
*/
public function index(Request $request, PaginatorInterface $paginator)
{
//絞り込み情報
// カテゴリー読み込み
$CategoryDatas = $this->categoriesRepository->findBy(['del_flg' => 0, 'release_flg' => 1, 'program_name' => 'Voice'], ['rank' => 'asc']);
$CaseDatas = $this->voicesRepository->findBy(['del_flg' => 0, 'release_flg' => 1], ['rank' => 'asc']);
$checkCategory = [];
foreach( $CaseDatas AS $CaseData ) {
if( in_array( $CaseData['category'], $checkCategory ) ) {
continue;
}
else {
$checkCategory[] = $CaseData['category'];
}
}
//削除実行
$checkCategory = array_diff( $checkCategory, array( '0' ) );
//indexを詰める
$checkCategory = array_values( $checkCategory );
// カテゴリー取得
$searchCategory = $request->query->get('category') ? $request->query->get('category') : '';
$searchCategoryData = $searchCategory ? $this->categoriesRepository->find($searchCategory) : '';
$searchData = array(
'pageno' => $request->query->get('pageno')
);
// パラメータ取得(一覧)
$parameter_qb = $this->entityManager->createQueryBuilder();
$parameter = $parameter_qb->select('pr.num_list')
->from('Customize\Entity\Parameters', 'pr')
->where('pr.program_name = :program_name')
->setParameter('program_name', 'Voice')
->setMaxResults(1)
->getQuery()
->getSingleScalarResult()
;
$parameter_data = $parameter_qb->getQuery()->getOneOrNullResult();
$NumList = $parameter_data['num_list'];
if( $searchCategory ) {
$qb = $this->voicesRepository->createQueryBuilder('v')
->andWhere('v.del_flg = 0')
->andWhere('v.release_flg = 1')
->andWhere('v.category = :findCategory')
->setParameter(':findCategory', $searchCategory)
->orderBy('v.rank', 'DESC');
}
else {
$qb = $this->voicesRepository->createQueryBuilder('v')
->andWhere('v.del_flg = 0')
->andWhere('v.release_flg = 1')
->orderBy('v.rank', 'DESC');
}
$query = $qb->getQuery()
->useResultCache(true, $this->eccubeConfig['eccube_result_cache_lifetime_short']);
$pagination = $paginator->paginate(
$query,
!empty($searchData['pageno']) ? $searchData['pageno'] : 1,
!empty($searchData['disp_number']) ? $searchData['disp_number']->getId() : $NumList
);
return [
'CategoryDatas' => $CategoryDatas,
'CheckCategory' => $checkCategory,
'SearchCategory' => $searchCategory,
'SearchCategoryData' => $searchCategoryData,
'pagination' => $pagination,
];
}
/**
* 導入事例詳細画面.
*
* @Route("/case/detail/{id}", name="case_detail", methods={"GET"}, requirements={"id" = "\d+"})
* @Template("Case/detail.twig")
*/
public function detail($id)
{
//絞り込み情報
// カテゴリー読み込み
$CategoryDatas = $this->categoriesRepository->findBy(['del_flg' => 0, 'release_flg' => 1, 'program_name' => 'Voice'], ['rank' => 'asc']);
$CaseDatas = $this->voicesRepository->findBy(['del_flg' => 0, 'release_flg' => 1], ['rank' => 'asc']);
$checkCategory = [];
foreach( $CaseDatas AS $CaseData ) {
if( in_array( $CaseData['category'], $checkCategory ) ) {
continue;
}
else {
$checkCategory[] = $CaseData['category'];
}
}
//削除実行
$checkCategory = array_diff( $checkCategory, array( '0' ) );
//indexを詰める
$checkCategory = array_values( $checkCategory );
$CaseData = $this->voicesRepository->findOneBy(['del_flg' => 0, 'release_flg' => 1, 'id' => $id]);
//非表示や削除済み導入事例は一覧へ
if( empty( $CaseData ) ) {
return $this->redirectToRoute('case');
}
// カテゴリー取得
$categoryData = $this->categoriesRepository->find($CaseData['category']);
return [
'CategoryDatas' => $CategoryDatas,
'CheckCategory' => $checkCategory,
'CategoryData' => $categoryData,
'CaseData' => $CaseData,
];
}
}