src/Controller/AuthorController.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\DolpoSearchService;
  4. use App\Service\Website\Navigation\BreadcrumbHelperService;
  5. use Pimcore\Controller\FrontendController;
  6. use Pimcore\Model\DataObject\Author;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  10. // ADDED
  11. class AuthorController extends FrontendController
  12. {
  13.     /**
  14.      * @param Request $request
  15.      *
  16.      * @return Response
  17.      */
  18.     public function singleAction(Request $request,
  19.         BreadcrumbHelperService $breadcrumbHelperService,
  20.         DolpoSearchService $dolpoSearchService
  21.     ): Response {
  22.         $author = Author::getByDolpoId($request->get('dolpoId'), true);
  23.         if (!$author instanceof Author) {
  24.             throw new NotFoundHttpException('Author not found.');
  25.         }
  26.         $author_id = $author->getId();
  27.         //tous les livres / On utilise ES
  28.         $books = $author->getAllBooks($dolpoSearchService);
  29.         //tableau des séries (clé : id série, puis un tableau ['book_id'=>id du premier livre trouvé, 'best'=>true/false])
  30.         $series=[];
  31.         $best_books=[]; //meilleurs livres hors séries
  32.         $other_books=[]; //autres livres
  33.         $best_series=[]; //meilleurs séries
  34.         $other_series=[]; // autres séries
  35.         foreach($books as $book) {
  36.             //on vérifie si c'est un best book ou non.
  37.             $top_best_book=false;
  38.             $bookId = array_key_exists('o_id', $book) ? (int) $book['o_id'] : null;
  39.             if (empty($bookId)) {
  40.                 continue;
  41.             }
  42.             $tags = is_array($book['tags'] ?? null) ? $book['tags'] : [];
  43.             foreach ($tags as $tag) {
  44.                 if (is_array($tag) && array_key_exists('id', $tag) && (int) $tag['id'] === 5915) {
  45.                     $top_best_book = true;
  46.                     break;
  47.                 }
  48.             }
  49.             //on récupère les éventuelles séries
  50.             $serieid = array_key_exists('serie_id', $book) ? (int) $book['serie_id'] : null;
  51.             if(!empty($serieid) and $serieid > 0) {
  52.                 if (!array_key_exists($serieid, $series)) {
  53.                     $series[$serieid]=['book_id'=>$bookId, 'best'=>false]; // on garde le premier livre trouvé pour afficher la série
  54.                 }
  55.                 if($top_best_book) {
  56.                     //le livre appartient à une série et la série est une best
  57.                     $series[$serieid]['best']=true;
  58.                 }
  59.                 continue;
  60.             }
  61.             if($top_best_book) {
  62.                 //si ce n'est pas un livre qui appartient à une série et qu'il s'agit d'un meilleur livre
  63.                 $best_books[] = $bookId;
  64.             } else {
  65.                 $other_books[] = $bookId;
  66.             }
  67.         }
  68.         //une fois que tous les livres ont été parcourus, on peut dire si les séries sont des best ou pas.
  69.         foreach($series as $serie) {
  70.             if($serie['best']) {
  71.                 $best_series[]=$serie['book_id'];
  72.             } else {
  73.                 $other_series[]=$serie['book_id'];
  74.             }
  75.         }
  76.         $top_tags = $author->getAuthorBookNumberByCategory($dolpoSearchService);
  77.         // Get the category to retreive the page (for breadcrumb)
  78.         $document = \Pimcore\Model\Document::getById(1);
  79.         $pageLinkedToCategory = $author->getPageLinkedToMainCategory($dolpoSearchService);
  80.         if($pageLinkedToCategory != null) {
  81.             $document = $pageLinkedToCategory;
  82.         }
  83.         // SEO
  84.         $document->setTitle($author->getName());
  85.         $document->setDescription(\App\Service\Website\Tool\Text::cutStringRespectingWhitespace($author->getBiography(), 250));
  86.         $params = [
  87.             'document' => $document,
  88.             'author' => $author,
  89.              'top_tags' => $top_tags,
  90.         ];
  91.         if(count(array_merge($best_series, $best_books)) > 0) {
  92.             $params['best_items'] = [
  93.                 'tagsToShow' => false,
  94.                 'tagsSelectionIds' => '',
  95.                 'objectsSelectionIds' => implode(',', array_merge($best_series, $best_books)),
  96.                 'frontFilters' => null,
  97.                 'pagination' => null,
  98.                 'showCount' => false,
  99.                 'ad' => null,
  100.                 'title' => 'Ouvrages de référence de ' . $author->getName(),
  101.                 'editmode' => false,
  102.                 'uniqueId' => null
  103.             ];
  104.         }
  105.         if(count($other_series) > 0) {
  106.             $params['other_series'] = [
  107.                 'tagsToShow' => false,
  108.                 'tagsSelectionIds' => '',
  109.                 'objectsSelectionIds' => implode(',', $other_series),
  110.                 'frontFilters' => null,
  111.                 'pagination' => null,
  112.                 'showCount' => false,
  113.                 'ad' => null,
  114.                 'title' => 'Les séries de ' . $author->getName(),
  115.                 'editmode' => false,
  116.                 'uniqueId' => null
  117.             ];
  118.         }
  119.         if(count($other_books) > 0) {
  120.             $params['other_books'] = [
  121.                 'tagsToShow' => false,
  122.                 'tagsSelectionIds' => '',
  123.                 'objectsSelectionIds' => implode(',', $other_books),
  124.                 'frontFilters' => null,
  125.                 'pagination' => null,
  126.                 'showCount' => false,
  127.                 'ad' => null,
  128.                 'title' => 'Les livres de ' . $author->getName(),
  129.                 'editmode' => false,
  130.                 'uniqueId' => null
  131.             ];
  132.         }
  133.         $breadcrumbHelperService->enrichAuteurDetailPage($author);
  134.         return $this->render('author/single.html.twig', $params);
  135.     }
  136. }