src/ModuleHandler/PageCmsService.php line 192

Open in your IDE?
  1. <?php
  2. namespace App\ModuleHandler;
  3. use App\Entity\Post;
  4. use App\Entity\Video;
  5. use App\Entity\Category;
  6. use App\Entity\MediaCms;
  7. use App\Service\CodeService;
  8. use App\Service\MetaService;
  9. use App\Entity\ModelGallerie;
  10. use App\Service\HrefLangService;
  11. use App\Service\RenderBlocService;
  12. use Symfony\Component\Intl\Locale;
  13. use App\Service\ImageGalleryService;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use App\ModuleHandler\ModuleHandlerInterface;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Leogout\Bundle\SeoBundle\Seo\Og\OgSeoGenerator;
  18. use Symfony\Component\String\Slugger\SluggerInterface;
  19. use Leogout\Bundle\SeoBundle\Seo\Basic\BasicSeoGenerator;
  20. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  21. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  22. class PageCmsService implements ModuleHandlerInterface
  23. {
  24. public $basicSeo;
  25. public $seo;
  26. public $metaService;
  27. private $theme;
  28. private $em;
  29. private $renderBloc;
  30. private $codeService;
  31. private $urlGenerator;
  32. private $imageGalleryService;
  33. private $requestStack;
  34. private $hrefLang;
  35. public function __construct(string $theme,
  36. UrlGeneratorInterface $urlGenerator,
  37. BasicSeoGenerator $basicSeo,
  38. OgSeoGenerator $seo,
  39. MetaService $metaService,
  40. RenderBlocService $renderBloc,
  41. EntityManagerInterface $em,
  42. ImageGalleryService $imageGalleryService,
  43. CodeService $codeService,
  44. HrefLangService $hrefLang,
  45. RequestStack $requestStack){
  46. $this->em = $em;
  47. $this->metaService = $metaService;
  48. $this->renderBloc = $renderBloc;
  49. $this->basicSeo = $basicSeo;
  50. $this->seo = $seo;
  51. $this->hrefLang = $hrefLang;
  52. $this->theme = $theme;
  53. $this->codeService = $codeService;
  54. $this->urlGenerator = $urlGenerator;
  55. $this->requestStack = $requestStack;
  56. $this->imageGalleryService = $imageGalleryService;
  57. }
  58. public function handle(string $slug): array
  59. {
  60. $locale = Locale::getDefault();
  61. $request = $this->requestStack->getCurrentRequest();
  62. $url = $request->getUri();
  63. $page = $this->em->getRepository(Post::class)->findPostBySlug($slug);
  64. if($page == null){
  65. throw new NotFoundHttpException('Sorry not existing!');
  66. }
  67. if ($page->getTypePost()->getSystemName() == "produits") {
  68. throw new NotFoundHttpException('Sorry not existing!');
  69. }
  70. $this->metaService->metaTags($page);
  71. $this->codeService->setCodeRobots($page->getMetaRobots()?? '');
  72. $this->codeService->setCodeHead($page->getTagManagerhead()?? '');
  73. $this->codeService->setCodeBody($page->getTagManagerbody()?? '');
  74. $this->codeService->setcanonicalUrl($this->metaService->canonicalUrl($page));
  75. $this->codeService->setSchemaOrgGeneral($page->translate($locale)->getSchema()?? '');
  76. $this->codeService->sethreflang($this->hrefLang->hreflangCmsPage($page));
  77. $breadcrumb = [];
  78. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('index_page_home', [], UrlGeneratorInterface::ABSOLUTE_URL),
  79. 'name'=> 'Accueil','active'=> true];
  80. // $path = $request->get('slug');
  81. // $slugs = explode('/', $path);
  82. // if ($slugs && count($slugs) > 1) {
  83. // array_pop($slugs);
  84. // foreach ($slugs as $value) {
  85. // $res_categorie = $this->em->getRepository(Category::class)->findCategoryBySlug($value);
  86. // if($res_categorie){
  87. // if($res_categorie->getParent() != 0){
  88. // $categorieParent = $this->em->getRepository(Category::class)->find($res_categorie->getParent());
  89. // if($categorieParent){
  90. // $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $categorieParent->translate($locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL),
  91. // 'name'=> $categorieParent->translate($locale)->getTitreCategorie(),'active'=> true];
  92. // $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $categorieParent->translate($locale)->getSlugUrl().'/'.$value], UrlGeneratorInterface::ABSOLUTE_URL),
  93. // 'name'=> $res_categorie->translate($locale)->getTitreCategorie(),'active'=> true];
  94. // }
  95. // }else{
  96. // $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $value], UrlGeneratorInterface::ABSOLUTE_URL),
  97. // 'name'=> $res_categorie->translate($locale)->getTitreCategorie(),'active'=> true];
  98. // }
  99. // }
  100. // }
  101. // }else{
  102. // if ($page->getDefaultCategorie()) {
  103. // $categorieDefault = $this->em->getRepository(Category::class)->find($page->getDefaultCategorie());
  104. // if ($categorieDefault) {
  105. // if($page->getTypePost()->getSystemName() == 'actualites'){
  106. // $categorieParent = $this->em->getRepository(Category::class)->find($categorieDefault->getParent());
  107. // if($categorieParent){
  108. // $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $categorieParent->translate($locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL),
  109. // 'name'=> $categorieParent->translate($locale)->getTitreCategorie(),'active'=> true];
  110. // }
  111. // }
  112. // $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $categorieDefault->translate($locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL),
  113. // 'name'=> $categorieDefault->translate($locale)->getTitreCategorie(),'active'=> true];
  114. // }
  115. // }
  116. // }
  117. if ($page->getDefaultCategorie()) {
  118. $categorieDefault = $this->em->getRepository(Category::class)->find($page->getDefaultCategorie());
  119. if ($categorieDefault) {
  120. if($categorieDefault->getParent() != 0){
  121. $categorieParent = $this->em->getRepository(Category::class)->find($categorieDefault->getParent());
  122. if($categorieParent){
  123. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', [
  124. 'slug'=> $categorieParent->translate($locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL),
  125. 'name'=> $categorieParent->translate($locale)->getTitreCategorie(),'active'=> true];
  126. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', [
  127. 'slug'=> $categorieParent->translate($locale)->getSlugUrl().'/'. $categorieDefault->translate($locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL),
  128. 'name'=> $categorieDefault->translate($locale)->getTitreCategorie(),'active'=> true];
  129. }
  130. }else{
  131. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $categorieDefault->translate($locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL),
  132. 'name'=> $categorieDefault->translate($locale)->getTitreCategorie(),'active'=> true];
  133. }
  134. }
  135. }
  136. $breadcrumb [] = ['url'=> $this->urlGenerator->generate('page', ['slug'=> $slug], UrlGeneratorInterface::ABSOLUTE_URL),
  137. 'name'=> $page->translate($locale)->getTitle(),'active'=> false];
  138. $schemaOrg = $this->metaService->schemaOrgBreadcrumb($breadcrumb);
  139. // schemaOrg page article
  140. if($page->getTypePost()->getSystemName() == 'actualites'){
  141. $schemaOrg = $this->metaService->schemaOrgArticle($schemaOrg,$page);
  142. $time_update = $page->getUpdatedAt() != null ?$page->getUpdatedAt()->format('Y-m-d h:i:s'):$page->getCreatedAt()->format('Y-m-d h:i:s');
  143. $codeHead = $this->codeService->getCodeHead().' <meta property="article:modified_time" content="'.$time_update.'" />';
  144. $this->codeService->setCodeHead($codeHead);
  145. }
  146. $renderService = $this->renderBloc->RenderBloc($page,$schemaOrg);
  147. $blocs = $renderService['bloc'];
  148. $schemaOrg = $renderService['schemaOrg'];
  149. $this->codeService->setSchemaOrg($schemaOrg);
  150. $titre_page = $page->translate($locale)->getTitle();
  151. $image_bandeau = $page->getImageBandeau() ?? null;
  152. $image_bandeau_alt = $page->getImageBandeauAlt() ?$page->getImageBandeauAlt() :$titre_page;
  153. $galleries = $this->em->getRepository(MediaCms::class)->findFileByModule($page->getTypePost()->translate($locale)->getSystemName(),$page->getId(),'media');
  154. $galleries_images = $this->imageGalleryService->getGalleryImages($galleries);
  155. $modele_galerie_choisie = $page->getModeleGallerie() ? $page->getModeleGallerie()->getId() : 6;
  156. $modele_gallerie = $this->em->getRepository(ModelGallerie::class)->findById($modele_galerie_choisie);
  157. $twig_galerie = $modele_gallerie[0]->getTwig();
  158. $post_aleatoire = null;
  159. if ($page->getTypePost()->getSystemName() == 'actualites') {
  160. $post_aleatoire = $this->em->getRepository(Post::class)->findPostAleatoire($page->getTypePost()->getId(),3,$page->getId());
  161. }
  162. $post_associer = [];
  163. if($page->getPostsAssocies() != null){
  164. $ids_post_associer = explode(',',$page->getPostsAssocies());
  165. foreach ($ids_post_associer as $key => $id) {
  166. $postExiste = $this->em->getRepository(Post::class)->find($id);
  167. if($postExiste){
  168. $post_associer[] = $postExiste;
  169. }
  170. }
  171. }
  172. if($slug == 'nos-videos'){
  173. $nb_page = $request->query->get('page') ?? 1;
  174. $videos = $this->em->getRepository(Video::class)->findAllVideo($nb_page);
  175. return [
  176. 'template' => 'theme/'.$this->theme.'/page_nos_videos.html.twig',
  177. 'data' => [
  178. 'id_page'=> 'page-'.$page->getId(),
  179. 'breadcrumb'=> $breadcrumb,
  180. 'titre_page'=> $titre_page,
  181. 'image_bandeau'=> $image_bandeau,
  182. 'image_bandeau_alt'=> $image_bandeau_alt,
  183. 'galleries'=> $galleries_images,
  184. 'twig_galerie'=> $twig_galerie,
  185. 'page' => $page,
  186. 'blocs'=> $blocs,
  187. 'post_aleatoire'=> $post_aleatoire,
  188. 'post_associer'=> $post_associer,
  189. 'videos'=> $videos,
  190. ]
  191. ];
  192. }else{
  193. return [
  194. 'template' => 'theme/'.$this->theme.'/page_cms.html.twig',
  195. 'data' => [
  196. 'id_page'=> 'page-'.$page->getId(),
  197. 'breadcrumb'=> $breadcrumb,
  198. 'titre_page'=> $titre_page,
  199. 'image_bandeau'=> $image_bandeau,
  200. 'image_bandeau_alt'=> $image_bandeau_alt,
  201. 'galleries'=> $galleries_images,
  202. 'twig_galerie'=> $twig_galerie,
  203. 'page' => $page,
  204. 'blocs'=> $blocs,
  205. 'post_aleatoire'=> $post_aleatoire,
  206. 'post_associer'=> $post_associer
  207. ]
  208. ];
  209. }
  210. }
  211. }