<?php
namespace App\Controller;
use App\Entity\Blog;
use App\Entity\DeliveryCountry;
use App\Entity\DeliveryMethod;
use App\Exception\CartException;
use App\Form\Handler\CartHandler;
use App\Form\Type\CartType;
use App\Helper\VeltisControllerTrait;
use App\Repository\BlogRepository;
use App\Repository\DeliveryCountryRepository;
use App\Repository\DeliveryMethodRepository;
use App\Repository\LanguageRepository;
use App\Repository\ProductRepository;
use App\Services\CartService;
use App\Twig\AppExtension;
use Doctrine\Common\Collections\ArrayCollection;
use FOS\RestBundle\Controller\FOSRestController;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use FOS\RestBundle\Controller\Annotations as Rest;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\BrowserKit\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\View\View;
use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class BlogController extends AbstractController
{
use VeltisControllerTrait;
private function prepareTags($pagination) {
$tags = [];
/** @var $blog Blog */
foreach ($pagination as $blog) {
$blogTags = explode(",", $blog->getTags());
foreach ($blogTags as $tag) {
if (!in_array($tag, $tags)) {
$tags[] = trim($tag);
}
}
}
return $tags;
}
/**
* @Route("/blog/tags/{name}", name="blogs_by_tags")
*/
public function byTagsAction(Request $request, BlogRepository $blogRepository, PaginatorInterface $paginator)
{
$entries = $blogRepository->getBlogByTags($request->getLocale(), $request->attributes->get('name'));
$pagination = $paginator->paginate($entries, $request->query->getInt('page', 1)/*page number*/, 15, ['wrap-queries'=>true]);
return $this->render('frontend/blog/blog.html.twig', [
'entries' => $pagination,
'tags' => $this->prepareTags($pagination),
]);
}
/**
* @Route("/blog", name="blog")
*/
public function indexAction(Request $request, BlogRepository $blogRepository, PaginatorInterface $paginator)
{
$entries = $blogRepository->getBlogByLanguage($request->getLocale());
$pagination = $paginator->paginate($entries, $request->query->getInt('page', 1)/*page number*/, 15, ['wrap-queries'=>true]);
return $this->render('frontend/blog/blog.html.twig', [
'tags' => $this->prepareTags($pagination),
'entries' => $pagination,
]);
}
/**
* @Route("/blog/{id}/{slug}", name="blog_entry")
*/
public function entryAction(Request $request, BlogRepository $blogRepository, ProductRepository $productRepository)
{
/** @var $blog Blog */
$blog = $blogRepository->getRepository()->findOneBy(['id'=>$request->attributes->get('id'), 'deletedBy'=>null]);
if (!$blog) {
throw new NotFoundHttpException();
}
$entries = $blogRepository->getBlogByLanguage($request->getLocale())->getQuery()->getResult();
$previous = $blogRepository->getPrevious($request->getLocale(), $request->attributes->get('id'))->getQuery()->getResult();
$previousEntry = false;
if (count($previous)) {
$previousEntry = $previous[0];
}
$next = $blogRepository->getNext($request->getLocale(), $request->attributes->get('id'))->getQuery()->getResult();
$nextEntry = false;
if (count($next)) {
$nextEntry = $next[0];
}
$language = $blog->getLanguage();
$locale = $request->getLocale();
if ($language->getLocale() != $locale) {
throw new NotFoundHttpException();
}
if ($request->attributes->get('slug') !== $blog->getSlug()) {
return $this->redirect($this->generateUrl('blog_entry', ['id'=>$blog->getId(), 'slug'=>$blog->getSlug()]), 301);
}
$products = $productRepository->getForBlogEntry($blog, ['locale'=>$blog->getLanguage()->getLocale()])->getQuery()->getResult();
return $this->render('frontend/blog/entry.html.twig', [
'blog' => $blog,
'nextEntry' => $nextEntry,
'products' => $products,
'language' => $blog->getLanguage(),
'previousEntry' => $previousEntry,
'entries' => $entries,
]);
}
/**
* @Route("/blog/{id}/{slug}/c", name="blog_entry_old_url")
*/
public function entryOldUrlAction(Request $request, BlogRepository $blogRepository)
{
return new RedirectResponse($this->generateUrl('blog_entry', ['id'=>$request->attributes->get('id'), 'slug'=>$request->attributes->get('slug')]), 301);
}
}