src/ModuleHandler/PageCategorieService.php line 132

Open in your IDE?
  1. <?php
  2. namespace App\ModuleHandler;
  3. use App\Entity\Post;
  4. use App\Entity\Category;
  5. use App\Entity\MediaCms;
  6. use App\Service\RenderBlocService;
  7. use App\Service\CodeService;
  8. use App\Service\MetaService;
  9. use App\Entity\ModelGallerie;
  10. use Symfony\Component\Intl\Locale;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use App\Service\ImageGalleryService;
  13. use App\ModuleHandler\ModuleHandlerInterface;
  14. use Symfony\Component\HttpFoundation\RequestStack;
  15. use Leogout\Bundle\SeoBundle\Seo\Og\OgSeoGenerator;
  16. use Symfony\Component\String\Slugger\SluggerInterface;
  17. use Leogout\Bundle\SeoBundle\Seo\Basic\BasicSeoGenerator;
  18. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  19. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  20. class PageCategorieService implements ModuleHandlerInterface
  21. {
  22. public $basicSeo;
  23. public $seo;
  24. public $metaService;
  25. private $theme;
  26. private $em;
  27. private $renderBloc;
  28. private $codeService;
  29. private $urlGenerator;
  30. private $imageGalleryService;
  31. private $requestStack;
  32. public function __construct(string $theme,
  33. UrlGeneratorInterface $urlGenerator,
  34. BasicSeoGenerator $basicSeo,
  35. OgSeoGenerator $seo,
  36. MetaService $metaService,
  37. RenderBlocService $renderBloc,
  38. EntityManagerInterface $em,
  39. ImageGalleryService $imageGalleryService,
  40. CodeService $codeService,
  41. RequestStack $requestStack){
  42. $this->em = $em;
  43. $this->metaService = $metaService;
  44. $this->renderBloc = $renderBloc;
  45. $this->basicSeo = $basicSeo;
  46. $this->seo = $seo;
  47. $this->theme = $theme;
  48. $this->codeService = $codeService;
  49. $this->urlGenerator = $urlGenerator;
  50. $this->imageGalleryService = $imageGalleryService;
  51. $this->requestStack = $requestStack;
  52. }
  53. public function handle(string $slug): array
  54. {
  55. $locale = Locale::getDefault();
  56. $request = $this->requestStack->getCurrentRequest();
  57. $path = $request->get('slug');
  58. $nb_page = $request->query->get('page') ?? 1;
  59. $categorie = $this->em->getRepository(Category::class)->findCategoryBySlug($slug);
  60. if(!$categorie){
  61. throw new NotFoundHttpException('Sorry not existing!');
  62. }
  63. $this->metaService->metaTags($categorie);
  64. $this->codeService->setCodeHead($categorie->getTagManagerhead()?? '');
  65. $this->codeService->setCodeBody($categorie->getTagManagerbody()?? '');
  66. $slugs = explode('/', $path);
  67. $breadcrumb = [];
  68. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('index_page_home', [], UrlGeneratorInterface::ABSOLUTE_URL),
  69. 'name'=> 'Accueil','active'=> true];
  70. if($categorie->getTypePost()->getSystemName() == 'actualites' && $categorie->getParent()){
  71. $categorieParent = $this->em->getRepository(Category::class)->find($categorie->getParent());
  72. if($categorieParent){
  73. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $categorieParent->translate($locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL),
  74. 'name'=> $categorieParent->translate($locale)->getTitreCategorie(),'active'=> true];
  75. }
  76. }
  77. if (false) {
  78. array_pop($slugs);
  79. foreach ($slugs as $value) {
  80. $res_categorie = $this->em->getRepository(Category::class)->findCategoryBySlug($value);
  81. if($res_categorie){
  82. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $value], UrlGeneratorInterface::ABSOLUTE_URL),
  83. 'name'=> $res_categorie->translate($locale)->getTitreCategorie(),'active'=> true];
  84. }
  85. }
  86. }else{
  87. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $slug], UrlGeneratorInterface::ABSOLUTE_URL),
  88. 'name'=> $categorie->translate($locale)->getTitreCategorie(),'active'=> false];
  89. }
  90. $schemaOrg = $this->metaService->schemaOrgBreadcrumb($breadcrumb);
  91. $renderService = $this->renderBloc->RenderBloc($categorie,$schemaOrg,'Category');
  92. $blocs = $renderService['bloc'];
  93. $schemaOrg = $renderService['schemaOrg'];
  94. $this->codeService->setSchemaOrg($schemaOrg);
  95. $this->codeService->setcanonicalUrl($this->metaService->canonicalCategorieUrl($categorie));
  96. $titre_page = $categorie->translate($locale)->getTitreCategorie();
  97. $image_bandeau = $categorie->getImageBandeau() ?? null;
  98. $image_bandeau_alt = $titre_page;
  99. $galleries = $this->em->getRepository(MediaCms::class)->findFileByModule('category',$categorie->getId(),'media');
  100. $galleries_images = $this->imageGalleryService->getGalleryImages($galleries);
  101. $modele_galerie_choisie = $categorie->getModeleGallerie() ? $categorie->getModeleGallerie()->getId() : 6;
  102. $modele_gallerie = $this->em->getRepository(ModelGallerie::class)->findById($modele_galerie_choisie);
  103. $twig_galerie = $modele_gallerie[0]->getTwig();
  104. $sous_categories = $this->em->getRepository(Category::class)->findCategoryIdsByParentId($categorie->getId());
  105. $resultats = $this->em->getRepository(Post::class)->findPostBySpecifiqueCategory($categorie,$nb_page,$sous_categories);
  106. $template = $categorie->getTypeAffichageHome();
  107. if($categorie->getParent() != 0){
  108. $categorieParent = $this->em->getRepository(Category::class)->find($categorie->getParent());
  109. if($categorieParent){
  110. $liste_sous_categorie = $this->em->getRepository(Category::class)->findListSousCategorie($categorieParent);
  111. }
  112. }else{
  113. $liste_sous_categorie = $this->em->getRepository(Category::class)->findListSousCategorie($categorie);
  114. }
  115. $categories = null;
  116. if($categorie->getTypePost()->getSystemName() == 'actualites'){
  117. $categories = $this->em->getRepository(Category::class)->findBy(['actif'=> true,'TypePost'=> $categorie->getTypePost()->getId()],['position'=> 'ASC']);
  118. }
  119. if($categorie->getTypePost()->getSystemName() == 'actualites' || $categorie->getTypePost()->getSystemName() == 'besoins'){
  120. return [
  121. 'template' => 'theme/'.$this->theme.'/page_categorie_custom.html.twig',
  122. 'data' => [
  123. 'id_page'=> 'categorie-'.$categorie->getId(),
  124. 'breadcrumb'=> $breadcrumb,
  125. 'titre_page'=> $titre_page,
  126. 'image_bandeau'=> $image_bandeau,
  127. 'image_bandeau_alt'=> $image_bandeau_alt,
  128. 'galleries'=> $galleries_images,
  129. 'twig_galerie'=> $twig_galerie,
  130. 'categorie' => $categorie,
  131. 'categories'=> $categories,
  132. 'blocs'=> $blocs,
  133. 'liste_sous_categorie'=> $liste_sous_categorie,
  134. 'articles'=> $resultats,
  135. 'template'=> $template,
  136. 'systemName' => $categorie->getTypePost()->getSystemName(),
  137. ]
  138. ];
  139. }else{
  140. return [
  141. 'template' => 'theme/'.$this->theme.'/page_categorie.html.twig',
  142. 'data' => [
  143. 'id_page'=> 'categorie-'.$categorie->getId(),
  144. 'breadcrumb'=> $breadcrumb,
  145. 'titre_page'=> $titre_page,
  146. 'image_bandeau'=> $image_bandeau,
  147. 'image_bandeau_alt'=> $image_bandeau_alt,
  148. 'galleries'=> $galleries_images,
  149. 'twig_galerie'=> $twig_galerie,
  150. 'categorie' => $categorie,
  151. 'categories'=> $categories,
  152. 'blocs'=> $blocs,
  153. 'liste_sous_categorie'=> $liste_sous_categorie,
  154. 'articles'=> $resultats,
  155. 'template'=> $template
  156. ]
  157. ];
  158. }
  159. }
  160. }