Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

HIncludeFragmentRenderer.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 5.42 KiB


 001  <?php
 002   
 003  /*
 004   * This file is part of the Symfony package.
 005   *
 006   * (c) Fabien Potencier <fabien@symfony.com>
 007   *
 008   * For the full copyright and license information, please view the LICENSE
 009   * file that was distributed with this source code.
 010   */
 011   
 012  namespace Symfony\Component\HttpKernel\Fragment;
 013   
 014  if (!defined('ENT_SUBSTITUTE')) {
 015      define('ENT_SUBSTITUTE', 8);
 016  }
 017   
 018  use Symfony\Component\HttpFoundation\Request;
 019  use Symfony\Component\HttpFoundation\Response;
 020  use Symfony\Component\Templating\EngineInterface;
 021  use Symfony\Component\HttpKernel\Controller\ControllerReference;
 022  use Symfony\Component\HttpKernel\UriSigner;
 023   
 024  /**
 025   * Implements the Hinclude rendering strategy.
 026   *
 027   * @author Fabien Potencier <fabien@symfony.com>
 028   */
 029  class HIncludeFragmentRenderer extends RoutableFragmentRenderer
 030  {
 031      private $globalDefaultTemplate;
 032      private $signer;
 033      private $templating;
 034      private $charset;
 035   
 036      /**
 037       * Constructor.
 038       *
 039       * @param EngineInterface|\Twig_Environment $templating            An EngineInterface or a \Twig_Environment instance
 040       * @param UriSigner                         $signer                A UriSigner instance
 041       * @param string                            $globalDefaultTemplate The global default content (it can be a template name or the content)
 042       * @param string                            $charset
 043       */
 044      public function __construct($templating = null, UriSigner $signer = null, $globalDefaultTemplate = null, $charset = 'utf-8')
 045      {
 046          $this->setTemplating($templating);
 047          $this->globalDefaultTemplate = $globalDefaultTemplate;
 048          $this->signer = $signer;
 049          $this->charset = $charset;
 050      }
 051   
 052      /**
 053       * Sets the templating engine to use to render the default content.
 054       *
 055       * @param EngineInterface|\Twig_Environment|null $templating An EngineInterface or a \Twig_Environment instance
 056       *
 057       * @throws \InvalidArgumentException
 058       */
 059      public function setTemplating($templating)
 060      {
 061          if (null !== $templating && !$templating instanceof EngineInterface && !$templating instanceof \Twig_Environment) {
 062              throw new \InvalidArgumentException('The hinclude rendering strategy needs an instance of \Twig_Environment or Symfony\Component\Templating\EngineInterface');
 063          }
 064   
 065          $this->templating = $templating;
 066      }
 067   
 068      /**
 069       * Checks if a templating engine has been set.
 070       *
 071       * @return bool    true if the templating engine has been set, false otherwise
 072       */
 073      public function hasTemplating()
 074      {
 075          return null !== $this->templating;
 076      }
 077   
 078      /**
 079       * {@inheritdoc}
 080       *
 081       * Additional available options:
 082       *
 083       *  * default:    The default content (it can be a template name or the content)
 084       *  * id:         An optional hx:include tag id attribute
 085       *  * attributes: An optional array of hx:include tag attributes
 086       */
 087      public function render($uri, Request $request, array $options = array())
 088      {
 089          if ($uri instanceof ControllerReference) {
 090              if (null === $this->signer) {
 091                  throw new \LogicException('You must use a proper URI when using the Hinclude rendering strategy or set a URL signer.');
 092              }
 093   
 094              // we need to sign the absolute URI, but want to return the path only.
 095              $uri = substr($this->signer->sign($this->generateFragmentUri($uri, $request, true)), strlen($request->getSchemeAndHttpHost()));
 096          }
 097   
 098          // We need to replace ampersands in the URI with the encoded form in order to return valid html/xml content.
 099          $uri = str_replace('&', '&amp;', $uri);
 100   
 101          $template = isset($options['default']) ? $options['default'] : $this->globalDefaultTemplate;
 102          if (null !== $this->templating && $template && $this->templateExists($template)) {
 103              $content = $this->templating->render($template);
 104          } else {
 105              $content = $template;
 106          }
 107   
 108          $attributes = isset($options['attributes']) && is_array($options['attributes']) ? $options['attributes'] : array();
 109          if (isset($options['id']) && $options['id']) {
 110              $attributes['id'] = $options['id'];
 111          }
 112          $renderedAttributes = '';
 113          if (count($attributes) > 0) {
 114              foreach ($attributes as $attribute => $value) {
 115                  $renderedAttributes .= sprintf(
 116                      ' %s="%s"',
 117                      htmlspecialchars($attribute, ENT_QUOTES | ENT_SUBSTITUTE, $this->charset, false),
 118                      htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, $this->charset, false)
 119                  );
 120              }
 121          }
 122   
 123          return new Response(sprintf('<hx:include src="%s"%s>%s</hx:include>', $uri, $renderedAttributes, $content));
 124      }
 125   
 126      /**
 127       * @param string $template
 128       *
 129       * @return bool
 130       */
 131      private function templateExists($template)
 132      {
 133          if ($this->templating instanceof EngineInterface) {
 134              try {
 135                  return $this->templating->exists($template);
 136              } catch (\InvalidArgumentException $e) {
 137                  return false;
 138              }
 139          }
 140   
 141          $loader = $this->templating->getLoader();
 142          if ($loader instanceof \Twig_ExistsLoaderInterface) {
 143              return $loader->exists($template);
 144          }
 145   
 146          try {
 147              $loader->getSource($template);
 148   
 149              return true;
 150          } catch (\Twig_Error_Loader $e) {
 151          }
 152   
 153          return false;
 154      }
 155   
 156      /**
 157       * {@inheritdoc}
 158       */
 159      public function getName()
 160      {
 161          return 'hinclude';
 162      }
 163  }
 164