vendor/contao-community-alliance/events-contao-bindings/src/Subscribers/ControllerSubscriber.php line 282

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of contao-community-alliance/events-contao-bindings
  4.  *
  5.  * (c) 2014-2018 The Contao Community Alliance
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  *
  10.  * This project is provided in good faith and hope to be usable by anyone.
  11.  *
  12.  * @package    ContaoCommunityAlliance\Contao\Bindings
  13.  * @subpackage Subscribers
  14.  * @author     Christian Schiffler <c.schiffler@cyberspectrum.de>
  15.  * @author     Tristan Lins <tristan.lins@bit3.de>
  16.  * @author     Sven Baumann <baumann.sv@gmail.com>
  17.  * @author     David Molineus <david.molineus@netzmacht.de>
  18.  * @copyright  2018 The Contao Community Alliance.
  19.  * @license    https://github.com/contao-community-alliance/events-contao-bindings/blob/master/LICENSE LGPL-3.0
  20.  * @filesource
  21.  */
  22. namespace ContaoCommunityAlliance\Contao\Bindings\Subscribers;
  23. use Contao\Controller;
  24. use Contao\CoreBundle\Framework\ContaoFrameworkInterface;
  25. use Contao\PageModel;
  26. use ContaoCommunityAlliance\Contao\Bindings\ContaoEvents;
  27. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\AddEnclosureToTemplateEvent;
  28. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\AddImageToTemplateEvent;
  29. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\AddToUrlEvent;
  30. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\GenerateFrontendUrlEvent;
  31. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\GetArticleEvent;
  32. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\GetContentElementEvent;
  33. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\GetPageDetailsEvent;
  34. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\GetTemplateGroupEvent;
  35. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\LoadDataContainerEvent;
  36. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\RedirectEvent;
  37. use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\ReplaceInsertTagsEvent;
  38. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  39. /**
  40.  * Subscriber for the Controller class in Contao.
  41.  *
  42.  * @SuppressWarnings(PHPMD.TooManyPublicMethods)
  43.  */
  44. class ControllerSubscriber implements EventSubscriberInterface
  45. {
  46.     /**
  47.      * The contao framework.
  48.      *
  49.      * @var ContaoFrameworkInterface
  50.      */
  51.     protected $framework;
  52.     /**
  53.      * ControllerSubscriber constructor.
  54.      *
  55.      * @param ContaoFrameworkInterface $framework The contao framework.
  56.      */
  57.     public function __construct(ContaoFrameworkInterface $framework)
  58.     {
  59.         $this->framework $framework;
  60.     }
  61.     /**
  62.      * Returns an array of event names this subscriber wants to listen to.
  63.      *
  64.      * @return array
  65.      */
  66.     public static function getSubscribedEvents()
  67.     {
  68.         return [
  69.             ContaoEvents::CONTROLLER_ADD_TO_URL                => 'handleAddToUrl',
  70.             ContaoEvents::CONTROLLER_ADD_ENCLOSURE_TO_TEMPLATE => 'handleAddEnclosureToTemplate',
  71.             ContaoEvents::CONTROLLER_ADD_IMAGE_TO_TEMPLATE     => 'handleAddImageToTemplate',
  72.             ContaoEvents::CONTROLLER_GENERATE_FRONTEND_URL     => 'handleGenerateFrontendUrl',
  73.             ContaoEvents::CONTROLLER_GET_ARTICLE               => 'handleGetArticle',
  74.             ContaoEvents::CONTROLLER_GET_CONTENT_ELEMENT       => 'handleGetContentElement',
  75.             ContaoEvents::CONTROLLER_GET_PAGE_DETAILS          => 'handleGetPageDetails',
  76.             ContaoEvents::CONTROLLER_GET_TEMPLATE_GROUP        => 'handleGetTemplateGroup',
  77.             ContaoEvents::CONTROLLER_LOAD_DATA_CONTAINER       => 'handleLoadDataContainer',
  78.             ContaoEvents::CONTROLLER_REDIRECT                  => 'handleRedirect',
  79.             ContaoEvents::CONTROLLER_RELOAD                    => 'handleReload',
  80.             ContaoEvents::CONTROLLER_REPLACE_INSERT_TAGS       => 'handleReplaceInsertTags',
  81.         ];
  82.     }
  83.     /**
  84.      * Add some suffix to the current URL.
  85.      *
  86.      * @param AddToUrlEvent $event The event.
  87.      *
  88.      * @return void
  89.      */
  90.     public function handleAddToUrl(AddToUrlEvent $event)
  91.     {
  92.         /** @var Controller $controllerAdapter */
  93.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  94.         $event->setUrl($controllerAdapter->addToUrl($event->getSuffix()));
  95.     }
  96.     /**
  97.      * Add an enclosure to a template.
  98.      *
  99.      * @param AddEnclosureToTemplateEvent $event The event.
  100.      *
  101.      * @return void
  102.      */
  103.     public function handleAddEnclosureToTemplate(AddEnclosureToTemplateEvent $event)
  104.     {
  105.         /** @var Controller $controllerAdapter */
  106.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  107.         $controllerAdapter->addEnclosuresToTemplate(
  108.             $event->getTemplate(),
  109.             $event->getEnclosureData(),
  110.             $event->getKey()
  111.         );
  112.     }
  113.     /**
  114.      * Add an image to a template.
  115.      *
  116.      * @param AddImageToTemplateEvent $event The event.
  117.      *
  118.      * @return void
  119.      */
  120.     public function handleAddImageToTemplate(AddImageToTemplateEvent $event)
  121.     {
  122.         /** @var Controller $controllerAdapter */
  123.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  124.         $controllerAdapter->addImageToTemplate(
  125.             $event->getTemplate(),
  126.             $event->getImageData(),
  127.             $event->getMaxWidth(),
  128.             $event->getLightboxId()
  129.         );
  130.     }
  131.     /**
  132.      * Generate a frontend url.
  133.      *
  134.      * @param GenerateFrontendUrlEvent $event The event.
  135.      *
  136.      * @return void
  137.      */
  138.     public function handleGenerateFrontendUrl(GenerateFrontendUrlEvent $event)
  139.     {
  140.         /** @var Controller $controllerAdapter */
  141.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  142.         $url $controllerAdapter->generateFrontendUrl(
  143.             $event->getPageData(),
  144.             $event->getParameters(),
  145.             $event->getLanguage(),
  146.             $event->getFixDomain()
  147.         );
  148.         $event->setUrl($url);
  149.     }
  150.     /**
  151.      * Render an article.
  152.      *
  153.      * @param GetArticleEvent $event The event.
  154.      *
  155.      * @return void
  156.      */
  157.     public function handleGetArticle(GetArticleEvent $event)
  158.     {
  159.         /** @var Controller $controllerAdapter */
  160.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  161.         $article $controllerAdapter->getArticle(
  162.             $event->getArticleId(),
  163.             $event->getTeaserOnly(),
  164.             true,
  165.             $event->getColumn()
  166.         );
  167.         $event->setArticle($article);
  168.     }
  169.     /**
  170.      * Render an content element.
  171.      *
  172.      * @param GetContentElementEvent $event The event.
  173.      *
  174.      * @return void
  175.      */
  176.     public function handleGetContentElement(GetContentElementEvent $event)
  177.     {
  178.         /** @var Controller $controllerAdapter */
  179.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  180.         $contentElement $controllerAdapter->getContentElement(
  181.             $event->getContentElementId(),
  182.             $event->getColumn()
  183.         );
  184.         $event->setContentElementHtml($contentElement);
  185.     }
  186.     /**
  187.      * Collect details for a page.
  188.      *
  189.      * @param GetPageDetailsEvent $event The event.
  190.      *
  191.      * @return void
  192.      */
  193.     public function handleGetPageDetails(GetPageDetailsEvent $event)
  194.     {
  195.         /** @var PageModel $pageModelAdapter */
  196.         $pageModelAdapter $this->framework->getAdapter(PageModel::class);
  197.         $page $pageModelAdapter->findWithDetails($event->getPageId());
  198.         if ($page) {
  199.             $event->setPageDetails($page->row());
  200.         }
  201.     }
  202.     /**
  203.      * Collect a template group.
  204.      *
  205.      * @param GetTemplateGroupEvent $event The event.
  206.      *
  207.      * @return void
  208.      */
  209.     public function handleGetTemplateGroup(GetTemplateGroupEvent $event)
  210.     {
  211.         /** @var Controller $controllerAdapter */
  212.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  213.         $templatesArray $controllerAdapter->getTemplateGroup($event->getPrefix());
  214.         $templates      $event->getTemplates();
  215.         foreach ($templatesArray as $templateName => $templateLabel) {
  216.             $templates[$templateName] = $templateLabel;
  217.         }
  218.     }
  219.     /**
  220.      * Load a data container.
  221.      *
  222.      * @param LoadDataContainerEvent $event The event.
  223.      *
  224.      * @return void
  225.      */
  226.     public function handleLoadDataContainer(LoadDataContainerEvent $event)
  227.     {
  228.         /** @var Controller $controllerAdapter */
  229.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  230.         $controllerAdapter->loadDataContainer($event->getName(), $event->isCacheIgnored());
  231.     }
  232.     /**
  233.      * Handle a redirect event.
  234.      *
  235.      * @param RedirectEvent $event The event.
  236.      *
  237.      * @return void
  238.      */
  239.     public function handleRedirect(RedirectEvent $event)
  240.     {
  241.         /** @var Controller $controllerAdapter */
  242.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  243.         $controllerAdapter->redirect($event->getNewLocation(), $event->getStatusCode());
  244.     }
  245.     /**
  246.      * Reload the current page.
  247.      *
  248.      * @return void
  249.      */
  250.     public function handleReload()
  251.     {
  252.         /** @var Controller $controllerAdapter */
  253.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  254.         $controllerAdapter->reload();
  255.     }
  256.     /**
  257.      * Replace insert tags.
  258.      *
  259.      * @param ReplaceInsertTagsEvent $event The event.
  260.      *
  261.      * @return void
  262.      */
  263.     public function handleReplaceInsertTags(ReplaceInsertTagsEvent $event)
  264.     {
  265.         /** @var Controller $controllerAdapter */
  266.         $controllerAdapter $this->framework->getAdapter(Controller::class);
  267.         $result $controllerAdapter->replaceInsertTags($event->getBuffer(), $event->isCachingAllowed());
  268.         $event->setBuffer($result);
  269.     }
  270. }