src/Controller/RenderletController.php line 59

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Elements.at New Media Solutions GmbH
  4.  *
  5.  */
  6. namespace App\Controller;
  7. use App\Service\LinkGenerator\NewsLinkGenerator;
  8. use App\Service\RenderletService;
  9. use Elements\Bundle\TicketShopFrameworkBundle\Service\CartService;
  10. use Pimcore\Model\DataObject\Concrete;
  11. use Pimcore\Model\DataObject\News;
  12. use Pimcore\Model\Document;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. use Twig\Environment;
  17. class RenderletController extends AbstractController
  18. {
  19.     public function __construct(
  20.         CartService $cartService,
  21.         Environment $twig,
  22.         protected NewsLinkGenerator $newsLinkGenerator
  23.     ) {
  24.         parent::__construct($cartService$twig);
  25.     }
  26.     /**
  27.      *
  28.      * @param Request $request
  29.      * @param RenderletService $service
  30.      *
  31.      * @return Response
  32.      */
  33.     public function largeImageTeaserAction(Request $requestRenderletService $service): Response
  34.     {
  35.         if ($request->get('type') == 'document') {
  36.             $document Document::getById((int)$request->get('id'));
  37.             if ($document instanceof Document\Snippet && $document->getTemplate() == 'snippets/image-text.html.twig') {
  38.                 return $this->renderTemplate('teaser/large-image-teaser.html.twig'$service->getLargeImageTeaserDataFromSnippet([ $document ])[0]);
  39.             }
  40.         }
  41.         // return information for customer:
  42.         if ($request->get('editmode')) {
  43.             return $this->renderTemplate('teaser/error-teaser.html.twig', [
  44.                 'message' => 'Please use only "Offer Teaser" snippets or PackageOffer objects!',
  45.             ]);
  46.         }
  47.         // return empty response to prevent error
  48.         return new Response();
  49.     }
  50.     public function citationAction(Request $request): Response
  51.     {
  52.         if ($request->get('type') == 'document') {
  53.             $document Document::getById((int)$request->get('id'));
  54.             if ($document instanceof Document\Snippet && $document->getTemplate() == 'snippets/citation.html.twig') {
  55.                 $returnArray = [
  56.                     'author' => $document->getEditable('author'),
  57.                     'position' => $document->getEditable('position'),
  58.                     'image' => $document->getEditable('image'),
  59.                     'quote' => $document->getEditable('quote'),
  60.                 ];
  61.                 return $this->renderTemplate($request->get('template'), $returnArray);
  62.             }
  63.         }
  64.         // return information for customer:
  65.         if ($request->get('editmode')) {
  66.             return $this->renderTemplate('teaser/error-teaser.html.twig', [
  67.                 'message' => 'Please use only "Offer Teaser" snippets or PackageOffer objects!',
  68.             ]);
  69.         }
  70.         // return empty response to prevent error
  71.         return new Response();
  72.     }
  73.     public function productTeaserAction(Request $request): Response
  74.     {
  75.         if ($request->get('type') == 'object') {
  76.             $product Concrete::getById((int)$request->get('id'));
  77.             if ($product instanceof Concrete) {
  78.                 $returnArray = [
  79.                     'product' => $product,
  80.                     'className' => $request->get('className'),
  81.                     'singleButton' => $request->get('singleButton'),
  82.                 ];
  83.                 return $this->renderTemplate($request->get('template'), $returnArray);
  84.             }
  85.         } elseif ($request->get('type') == 'document') {
  86.             $document Document::getById((int)$request->get('id'));
  87.             if ($document instanceof Document\Snippet && $document->getTemplate() == 'snippets/card-teaser.html.twig') {
  88.                 return $this->renderTemplate('teaser/card-teaser.html.twig', [
  89.                     'image' => $document->getEditable('image'),
  90.                     'toptitle' => $document->getEditable('toptitle') ? $document->getEditable('toptitle')->getData() : '',
  91.                     'title' => $document->getEditable('title'),
  92.                     'text' => $document->getEditable('text') ? $document->getEditable('text')->getData() : ' ',
  93.                     'link' => $document->getEditable('link'),
  94.                     'useRedButton' => $request->get('useRedButton'),
  95.                     'key' => $request->get('key'),
  96.                 ]);
  97.             }
  98.         }
  99.         // return information for customer:
  100.         if ($request->get('editmode')) {
  101.             return $this->renderTemplate('teaser/error-teaser.html.twig', [
  102.                 'message' => 'Please use only Ticket objects!',
  103.             ]);
  104.         }
  105.         // return empty response to prevent error
  106.         return new Response();
  107.     }
  108.     public function newsTeaserAction(Request $requestTranslatorInterface $translator): Response
  109.     {
  110.         if ($request->get('type') == 'object') {
  111.             $news News::getById((int)$request->get('id'));
  112.             $tagNames = [];
  113.             foreach ($news->getCategories() as $category) {
  114.                 $tagNames[]= $category->getName();
  115.             }
  116.             if ($news instanceof News) {
  117.                 $returnArray = [
  118.                     'title' => $news->getTitle(),
  119.                     'toptitle' => $news->getPublishDate()->format('d.m.Y'),
  120.                     'className' => $request->get('className'),
  121.                     'type' => $request->get('teaserType'),
  122.                     'tag' =>   $request->get('tag') ? implode(', '$tagNames) : false,
  123.                     'image' => $request->get('image') ? $news->getImage() : false,
  124.                     'content' => $request->get('content') ? $news->getIntro() : false,
  125.                     'link' => [
  126.                         'href' => $this->newsLinkGenerator->generate($news),
  127.                         'text' => $translator->trans('news.overview.read-more'),
  128.                     ],
  129.                 ];
  130.                 return $this->renderTemplate($request->get('template'), $returnArray);
  131.             }
  132.         }
  133.         return new Response();
  134.     }
  135. }