<?php
namespace App\Controller\Mvc;
use App\Entity\News\Child;
use App\Entity\News\Entry;
use App\Form\News\ListType;
use App\Repository\News\CategoryRepository;
use App\Repository\News\EntryRepository;
use App\Service\CmsHelperService;
use App\Service\FileUploader\UploadService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/news")
*/
class NewsController extends AbstractController
{
/**
* @Route("/", name="news_index", methods={"GET"})
*/
public function index(
Request $request,
EntryRepository $repository,
CategoryRepository $categoryRepository,
CmsHelperService $helper
): Response {
$form = $this->createForm(ListType::class);
$criteria = $request->query->all();
$criteria['limit'] = $criteria['limit'] ?? 8;
$form->submit($criteria);
$paginate = $helper->listHandle($repository, $form->getViewData());
return $this->render("pages/news/index.html.twig", [
"paginate" => $paginate,
"data" => $paginate->getPaginator()->getIterator(),
"categories" => $categoryRepository->getCategoriesHaveEntry(),
"current_category" => $form->getViewData()['category']
]);
}
/**
* @Route("/{id}", name="news_detail", methods={"GET"}, requirements={"id" = "\d+"})
*/
public function detail(
EntryRepository $repository,
$id
) {
$Entry = $repository->getEntry($id);
if(!$Entry) {
throw new NotFoundHttpException('page not found');
}
if($Entry->getLinkUrl()) {
return $this->redirect($Entry->getLinkUrl());
}
return $this->render("pages/news/detail.html.twig", [
"entry" => $Entry
]);
}
/**
* @Route("/image/{filename}", name="news_image", methods={"GET"})
*/
public function image(UploadService $uploader, $filename) {
$config = $uploader->getUploadConfig(new Entry, "main_img");
return $uploader->outputResponseOrWebpResponse($filename, $config);
}
/**
* @Route ("/file/{filename}", name="news_file", methods={"GET"})
*/
public function pdfFile(UploadService $service, $filename) {
$config = $service->getUploadConfig(new Child(), "file");
return $service->output($filename, $config);
}
/**
* @Route("/headline", name="news_headline", methods={"GET"})
*/
public function headline(Request $request, EntryRepository $repository) {
$criteria = $request->query->all();
$qb = $repository->getListQuery($criteria);
$qb->setMaxResults(isset($criteria['limit']) && $criteria['limit']? $criteria['limit']: 6);
switch ($request->query->get('view')) {
case "topics":
$view = 'pages/news/topics_headline.html.twig';
break;
case "life":
$view = 'pages/life/_news.html.twig';
break;
default:
$view = 'pages/news/headline.html.twig';
break;
}
return $this->render($view, [
"data" => $qb->getQuery()->getResult()
]);
}
}