src/Controller/RecipeController.php line 99

Open in your IDE?
  1. <?php
  2.     namespace App\Controller;
  3.     use App\Website\Tool\Image;
  4.     use Devkitchen\DocumentIndexingBundle\Annotations\IndexingDocumentType;
  5.     use Devkitchen\DocumentIndexingBundle\Controller\DocumentTypeAwareController;
  6.     use Devkitchen\DocumentIndexingBundle\IndexingService\IndexingService;
  7.     use Pimcore\Http\Request\Resolver\EditmodeResolver;
  8.     use Pimcore\Model\Asset;
  9.     use Pimcore\Model\Document\Page;
  10.     use Pimcore\Model\Document\Service;
  11.     use Pimcore\Translation\Translator;
  12.     use Symfony\Component\DomCrawler\Crawler;
  13.     use Symfony\Component\HttpFoundation\Request;
  14.     use Symfony\Component\HttpFoundation\Response;
  15.     use Symfony\Component\Routing\Annotation\Route;
  16.     class RecipeController extends BaseController implements DocumentTypeAwareController {
  17.         /**
  18.          * @Route({
  19.          *         "de": "/{_locale}/erleben-geniessen/rezepte",
  20.          *         "en": "/{_locale}/erleben-geniessen/rezepte"
  21.          * }, name="recipe_not_filtered", methods={"GET"})
  22.          *
  23.          * @Route({
  24.          *         "de": "/{_locale}/erleben-geniessen/rezepte/typ/{key}",
  25.          *         "en": "/{_locale}/erleben-geniessen/rezepte/typ/{key}"
  26.          * }, name="recipe_filtered_by_key", methods={"GET"})
  27.          *
  28.          * @param Request $request
  29.          *
  30.          * @return Response
  31.          */
  32.         public function listingAction(Request $requestIndexingService $indexingServiceTranslator $translator): Response {
  33.             $filterActive $request->get('key''default');
  34.             $aggregatedFilter $indexingService->getFieldAggregated'recipe''documentSubtype');
  35.             $listing $indexingService->setOrderBy'teaserTitle.raw')
  36.                                        ->setOrderDirection'asc')
  37.                                        ->listing'recipe', [ $filterActive ]);
  38.             if ($listing) {
  39.                 $listingCount count$listing );
  40.                 $columnCount  3;
  41.                 $rows         = [];
  42.                 if ( $listingCount ) {
  43.                     $rowCount     ceil$listingCount $columnCount );
  44.                     $contentIndex 0;
  45.                     for ( $i 0$i $rowCount$i ++ ) {
  46.                         $content = [];
  47.                         for ( $c 0$c $columnCount$c ++ ) {
  48.                             if ( isset( $listing$contentIndex ] ) ) {
  49.                                 $item $listing$contentIndex ];
  50.                                 $teaserImageId $item->teaserAssetId;
  51.                                 if ( $teaserImageId ) {
  52.                                     $teaserImage Asset::getById$teaserImageId );
  53.                                 } else {
  54.                                     $teaserImage $this->document->getProperty'document-teaser-image-fallback' );
  55.                                 }
  56.                                 if ( $teaserImage ) {
  57.                                     $gridImageData   Image::getGridThumbnailMetaData$teaserImage4$this->editmode'teaser-default' );
  58.                                     $teaserThumbnail $teaserImage->getThumbnail$gridImageData->thumbnail );
  59.                                     $teaserSubtitle  null;
  60.                                     if ( $item->documentSubtype ) {
  61.                                         foreach ( $item->documentSubtype as $key ) {
  62.                                             $teaserSubtitle[] = $translator->trans'filter.value.' $key );
  63.                                         }
  64.                                         $teaserSubtitle implode', '$teaserSubtitle );
  65.                                     }
  66.                                     $content[] = $this->renderView'includes/partials/teaser/teaser-image-title.html.twig', [
  67.                                         'url'      => Page::getById$item->documentId ),
  68.                                         'title'    => $item->teaserTitle,
  69.                                         'subtitle' => $teaserSubtitle,
  70.                                         'image'    => $teaserThumbnail->getHtml()
  71.                                     ] );
  72.                                     $contentIndex ++;
  73.                                 }
  74.                             }
  75.                         }
  76.                         $rows[] = $this->renderView'includes/partials/stuff/grid-row.html.twig', [
  77.                             'columns' => $content,
  78.                             'classes' => 'grid--t33 grid--4-4-4'
  79.                         ] );
  80.                     } //endfor
  81.                     $request->getSession()->set('recipe-listing'$listing);
  82.                     $request->getSession()->set('recipe-listing-route', [
  83.                         'route' => $request->get('_route'),
  84.                         'params' => $request->get('_route_params')
  85.                     ]);
  86.                 }
  87.             }
  88.             return $this->render'recipe/listing.html.twig', [
  89.                 'layoutClass' => 'layout--listing layout--recipe',
  90.                 'filter' => $aggregatedFilter,
  91.                 'filterActive' => $filterActive,
  92.                 'listing' => $listing,
  93.                 'listingRows' => $rows ?? 0
  94.             ]);
  95.         }
  96.         /**
  97.          * @param Request         $request
  98.          * @param IndexingService $indexingService
  99.          *
  100.          * @return Response
  101.          *
  102.          * @IndexingDocumentType(type="recipe", tagIdForSubtype="2")
  103.          */
  104.         public function detailAction(Request $requestIndexingService $indexingService): Response {
  105.             $prevItem null;
  106.             $nextItem null;
  107.             $overview null;
  108.             if ($recipeListing $request->getSession()->get'recipe-listing')) {
  109.                 $item $indexingService->get$this->document );
  110.                 if ($item) {
  111.                     foreach($recipeListing as $key => $listingItem) {
  112.                         if ($listingItem->id == $item->id) {
  113.                             if (isset($recipeListing[$key 1])) {
  114.                                 $prevItem $recipeListing[$key 1];
  115.                             }
  116.                             if (isset($recipeListing[$key 1])) {
  117.                                 $nextItem $recipeListing[$key 1];
  118.                             }
  119.                         }
  120.                     }
  121.                 }
  122.                 $overview $request->headers->get'referer');
  123.                 if ( $overviewRouteInfo $request->getSession()->get'recipe-listing-route' ) ) {
  124.                     $overview $this->generateUrl$overviewRouteInfo['route'], $overviewRouteInfo['params'] ?: [] );
  125.                 }
  126.                 //p_r($request->get('_route'));
  127.                 //p_r($request->get('_route_params'));
  128.             }
  129.             return $this->render('recipe/detail.html.twig', [
  130.                 'layoutClass' => 'layout--detail layout--recipe',
  131.                 'overview' => $overview,
  132.                 'prev' => $prevItem,
  133.                 'next' => $nextItem
  134.             ]);
  135.         }
  136.         /**
  137.          * @Route("/pdf")
  138.          * @param Request $request
  139.          *
  140.          * @return void
  141.          */
  142.         public function printAction(Request $request) {
  143.             $html Service::renderPage::getById35 ));
  144.             $crawler = new Crawler();
  145.             $crawler->add($html);
  146.             $htmlFiltered $crawler->filter'.section--printable' )->each( function ( Crawler $node$i ) {
  147.                 return $node->html();
  148.             });
  149.             $params = [];
  150.             $adapter \Pimcore\Web2Print\Processor::getInstance();
  151.             if ($adapter instanceof \Pimcore\Web2Print\Processor\HeadlessChrome) {
  152.                 $params['adapterConfig'] = [
  153.                     'landscape' => false,
  154.                     'printBackground' => false,
  155.                     'mediaType' => 'print',
  156.                     'format' => null,
  157.                     'margin' => [
  158.                         'top' => '16 mm',
  159.                         'bottom' => '30 mm',
  160.                         'right' => '8 mm',
  161.                         'left' => '8 mm',
  162.                     ],
  163.                     'displayHeaderFooter' => false,
  164.                 ];
  165.             }
  166.             return new \Symfony\Component\HttpFoundation\Response(
  167.                 $adapter->getPdfFromString($html$params),
  168.                 200,
  169.                 [
  170.                     'Content-Type' => 'application/pdf',
  171.                     // 'Content-Disposition'   => 'attachment; filename="custom-pdf.pdf"' //direct download
  172.                 ]
  173.             );
  174.         }
  175.     }