Version 1
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / Profiler / TemplateManager.php
diff --git a/web/modules/contrib/devel/webprofiler/src/Profiler/TemplateManager.php b/web/modules/contrib/devel/webprofiler/src/Profiler/TemplateManager.php
new file mode 100644 (file)
index 0000000..87aa685
--- /dev/null
@@ -0,0 +1,130 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Drupal\webprofiler\Profiler;
+
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+use Symfony\Component\HttpKernel\Profiler\Profiler as SymfonyProfiler;
+use Symfony\Component\HttpKernel\Profiler\Profile;
+
+/**
+ * Profiler Templates Manager
+ */
+class TemplateManager {
+
+  /**
+   * @var \Twig_Environment
+   */
+  protected $twig;
+
+  /**
+   * @var \Twig_Loader_Chain
+   */
+  protected $twigLoader;
+
+  /**
+   * @var array
+   */
+  protected $templates;
+
+  /**
+   * @var \Symfony\Component\HttpKernel\Profiler\Profiler
+   */
+  protected $profiler;
+
+  /**
+   * Constructor.
+   *
+   * @param SymfonyProfiler $profiler
+   * @param \Twig_Environment $twig
+   * @param \Twig_Loader_Chain $twigLoader
+   * @param array $templates
+   */
+  public function __construct(SymfonyProfiler $profiler, \Twig_Environment $twig, \Twig_Loader_Chain $twigLoader, array $templates) {
+    $this->profiler = $profiler;
+    $this->twig = $twig;
+    $this->twigLoader = $twigLoader;
+    $this->templates = $templates;
+  }
+
+  /**
+   * Gets the template name for a given panel.
+   *
+   * @param Profile $profile
+   * @param string $panel
+   *
+   * @return mixed
+   *
+   * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+   */
+  public function getName(Profile $profile, $panel) {
+    $templates = $this->getNames($profile);
+
+    if (!isset($templates[$panel])) {
+      throw new NotFoundHttpException(sprintf('Panel "%s" is not registered in profiler or is not present in viewed profile.', $panel));
+    }
+
+    return $templates[$panel];
+  }
+
+  /**
+   * Gets the templates for a given profile.
+   *
+   * @param \Symfony\Component\HttpKernel\Profiler\Profile $profile
+   *
+   * @return array
+   */
+  public function getTemplates(Profile $profile) {
+    $templates = $this->getNames($profile);
+    foreach ($templates as $name => $template) {
+      $templates[$name] = $this->twig->loadTemplate($template);
+    }
+
+    return $templates;
+  }
+
+  /**
+   * Gets template names of templates that are present in the viewed profile.
+   *
+   * @param \Symfony\Component\HttpKernel\Profiler\Profile $profile
+   *
+   * @return array
+   *
+   * @throws \UnexpectedValueException
+   */
+  protected function getNames(Profile $profile) {
+    $templates = [];
+
+    foreach ($this->templates as $arguments) {
+      if (NULL === $arguments) {
+        continue;
+      }
+
+      list($name, $template) = $arguments;
+
+      if (!$this->profiler->has($name) || !$profile->hasCollector($name)) {
+        continue;
+      }
+
+      if ('.html.twig' === substr($template, -10)) {
+        $template = substr($template, 0, -10);
+      }
+
+      if (!$this->twigLoader->exists($template . '.html.twig')) {
+        throw new \UnexpectedValueException(sprintf('The profiler template "%s.html.twig" for data collector "%s" does not exist.', $template, $name));
+      }
+
+      $templates[$name] = $template . '.html.twig';
+    }
+
+    return $templates;
+  }
+}