<?php
namespace App\Controller\Front;
use App\Repository\TutorialRepository;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\TutorialCategoryRepository;
use App\Repository\WebsiteLanguageRepository;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route(path: '/{_locale}')]
class TutoController extends AbstractController
{
#[Route(path: '/tutorials', name: 'tutos')]
public function tutos(TutorialRepository $tutorialRepository, WebsiteLanguageRepository $wl, TutorialCategoryRepository $tutorialCategoryRepository, Request $request)
{
$locale = ($request->getLocale() ? $request->getLocale() : 'en');
$language = $wl->findOneBy(['slug' => $locale]);
$tutos = $tutorialRepository->findBy(['websiteLanguage' => $language]);
$categories = $tutorialCategoryRepository->findAll();
$infos = [];
foreach($categories as $category){
$tutos = $tutorialRepository->findTutosByCategories(null, $category, $locale);
$infos[] = [
$category,
$tutos
];
}
return $this->render("front/tuto/tutos.html.twig", [
'infos' => $infos,
'preview' => false
]);
}
#[Route(path: '/tutorials/read/{slug}', name: 'tuto_detail')]
public function detailTuto($slug, TutorialRepository $tutorialRepository, Request $request, ObjectManager $manager)
{
$tuto = $tutorialRepository->findOneBy(['slug' => $slug]);
if (!$tuto) {
return $this->redirectToRoute('tutos');
}
$locale = ($request->getLocale() ? $request->getLocale() : 'fr');
if ($tuto->getWebsiteLanguage()->getSlug() != $locale) {
$tutorialInLocale = $tutorialRepository->getLocaleTutorialByUnit($tuto->getUnit(), $locale);
if (!$tutorialInLocale) {
return $this->redirectToRoute('tutos');
}
return $this->redirectToRoute('tuto_detail', ['slug' => $tutorialInLocale->getSlug()]);
}
$othersTuto = $tutorialRepository->findTutosByCategories($tuto, $tuto->getCategories()->first(), $locale, 4);
return $this->render("front/tuto/single-tuto.html.twig", [
'tuto' => $tuto,
'othersTuto' => $othersTuto,
'preview' => false
]);
}
}