<?php
namespace Mod\TopicsBundle\Controller\Display;
use AppBundle\Component\Util\Hash;
use Mod\TopicsBundle\Service\BundleUtility;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use CustomBundle\Controller\CustomFacilityDisplayBaseController as FacilityDisplayBaseController;
use Mod\TopicsBundle\PageForm\ItemForm;
use Mod\TopicsBundle\Entity\Item;
use Mod\TopicsBundle\Entity\Category;
use Mod\TopicsBundle\Entity\Tag;
class ActionController extends FacilityDisplayBaseController
{
public $formClass = ItemForm::class;
public $itemClass = Item::class;
public $categoryClass = Category::class;
public $tagClass = Tag::class;
public $views = [
"index" => "topics/index.php",
"detail" => "topics/detail.php",
];
public $settings = [
"pageLimit" => 10,
"theme" => "topics",
"themeDirectory" => "CustomBundle:Default:page-builder/themes"
];
public function before(FilterControllerEvent $event)
{
parent::before($event);
$this->default_setting = $this->getDefaultParameter('mod_topics.default_settings');
$this->entity_setting = $this->getDefaultParameter('mod_topics.entity_settings');
/** @var BundleUtility $util */
$util = $this->get('mod_topics.bundle_utility');
if($this->entity_setting){
$multi_category = Hash::get($this->entity_setting, "item.multi_category", false);
} else {
$multi_category = false;
}
if(isset($this->default_setting['list_limit'])){
$this->settings['pageLimit'] = $this->default_setting['list_limit'];
}
// 共通の変数
$this->view_params->set('cms__archives', $util->getArchiveList());
$this->view_params->set('cms__categories', $util->getCategoryList($multi_category));
}
/**
* @Route("/topics/", name="mod_topics_group_list")
*/
public function groupListAction(Request $request)
{
return $this->facilityListAction($request, 'master');
}
/**
* @Route("/topics/{id}/", name="mod_topics_group_detail")
*/
public function groupDetailAction(Request $request, $id)
{
return $this->facilityDetailAction($request, 'master', $id);
}
/**
* @Route("/{facility}/topics/", name="mod_topics_facility_list")
*/
public function facilityListAction(Request $request, $facility)
{
/** @var BundleUtility $util */
$util = $this->get('mod_topics.bundle_utility');
$repo = $this->getDoctrine()->getRepository($this->itemClass);
$order = ['public_date' => 'DESC', 'post_id' => 'DESC'];
$page = $request->query->getInt('page', 1);
if($page < 1){
$page = 1;
}
$limit = $this->settings['pageLimit'];
$paginator = $util->searchItems($request->query->all(), $order, $limit, $page);
if(isset($this->default_setting['pagination']['page_range'])){
$paginator->setPageRange($this->default_setting['pagination']['page_range']);
}
$pagination = $this->getPaginationParams($paginator);
$items = $paginator->getItems();
$view = str_replace('{facility}', $facility, $this->views['index']);
return $this->renderFront($view, [
'cms__items' => $items,
'cms__pagination' => $pagination
]);
}
/**
* @Route("/{facility}/topics/{id}/", name="mod_topics_facility_detail")
*/
public function facilityDetailAction(Request $request, $facility, $id)
{
/** @var BundleUtility $util */
$util = $this->get('mod_topics.bundle_utility');
$item = $this->findItemBy($request, $this->itemClass, ['post_id' => $id]);
if(!$item){
throw new NotFoundHttpException();
}
$page_builder = $this->createPageBuilder($this->formClass, $item);
$page_builder->setTheme($this->settings['theme']);
$page_builder->setThemeDirectory($this->settings['themeDirectory']);
$siblings = $util->getItemSibLings($item);
$view = str_replace('{facility}', $facility, $this->views['detail']);
return $this->renderFront($view, [
'cms__item' => $item,
'cms__siblings' => $siblings,
'cms__page_builder' => $page_builder,
]);
}
}