<?php
namespace App\Controller\Mvc;
use App\Service\Entry\FrontService;
use App\Utils\TargetChoiceUtil;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/activity")
*/
class activityController extends AbstractController
{
/**
* @Route ("/", name="activity_index", methods={"GET"})
*/
public function index(
Request $request,
FrontService $service
) {
$service
->setType(TargetChoiceUtil::ACTIVITY)
->setLocale($request->getLocale())
;
$filter = $service->getFilter();
$criteria = $service->getCriteriaFromRequest($request);
$filter = $service->handleRequest($filter, $criteria);
$qb = $service->getQueryBuilderForList();
$service->addDqlWhere($qb, $filter);
$qb->orderBy("a.id", "desc");
$paginate = $service->handleList($qb, $criteria);
$query = $service->createQueryFromFilter($filter);
$query4area = $query;
unset($query4area['area']);
$query4category = $query;
unset($query4category['category']);
return $this->render('pages/activity/index.html.twig', [
"paginate" => $paginate,
"data" => $paginate->getPaginator()->getIterator(),
"filter" => $filter,
"query" => $query,
"query4area" => $query4area,
"query4category" => $query4category
]);
}
/**
* @Route ("/filter", name="activity_filter", methods={"GET"})
*/
public function filter(
Request $request,
FrontService $service
) {
$service
->setType(TargetChoiceUtil::ACTIVITY)
->setLocale($request->getLocale())
;
$filter = $service->getFilter();
$criteria = $service->getCriteriaFromRequest($request);
$filter = $service->handleRequest($filter, $criteria);
$query = $service->createQueryFromFilter($filter);
return $this->render('pages/activity/filter.html.twig', [
"filter" => $filter,
"query" => $query
]);
}
/**
* @Route("/{id}", name="activity_detail", methods={"GET"}, requirements={"id" = "\d+"})
*/
public function detail(
Request $request,
FrontService $service,
int $id
) {
$service
->setType(TargetChoiceUtil::ACTIVITY)
->setLocale($request->getLocale())
;
$entry = $service->getOneEntry($id);
if(!$entry) {
throw new NotFoundHttpException('Entry not found.');
}
$filter = $service->getFilter();
$criteria = $service->getCriteriaFromSession($request);
$filter = $service->handleRequest($filter, $criteria);
$query = $service->createQueryFromFilter($filter);
return $this->render('pages/activity/detail.html.twig', [
"entry" => $entry,
"query" => $query,
"recommend" => $service->getRelatedEntry($entry)
]);
}
}