aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/libraries/classes/Template.php
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-09 10:55:03 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-09 13:09:38 +0100
commit04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch)
tree5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/libraries/classes/Template.php
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Template.php')
-rw-r--r--srcs/phpmyadmin/libraries/classes/Template.php142
1 files changed, 142 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/Template.php b/srcs/phpmyadmin/libraries/classes/Template.php
new file mode 100644
index 0000000..3866fd2
--- /dev/null
+++ b/srcs/phpmyadmin/libraries/classes/Template.php
@@ -0,0 +1,142 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * hold PhpMyAdmin\Template class
+ *
+ * @package PhpMyAdmin
+ */
+declare(strict_types=1);
+
+namespace PhpMyAdmin;
+
+use PhpMyAdmin\Twig\CoreExtension;
+use PhpMyAdmin\Twig\I18nExtension;
+use PhpMyAdmin\Twig\MessageExtension;
+use PhpMyAdmin\Twig\PluginsExtension;
+use PhpMyAdmin\Twig\RelationExtension;
+use PhpMyAdmin\Twig\SanitizeExtension;
+use PhpMyAdmin\Twig\ServerPrivilegesExtension;
+use PhpMyAdmin\Twig\StorageEngineExtension;
+use PhpMyAdmin\Twig\TableExtension;
+use PhpMyAdmin\Twig\TrackerExtension;
+use PhpMyAdmin\Twig\TransformationsExtension;
+use PhpMyAdmin\Twig\UrlExtension;
+use PhpMyAdmin\Twig\UtilExtension;
+use RuntimeException;
+use Throwable;
+use Twig\Environment;
+use Twig\Error\LoaderError;
+use Twig\Error\RuntimeError;
+use Twig\Error\SyntaxError;
+use Twig\Loader\FilesystemLoader;
+use Twig_Error_Loader;
+use Twig_Error_Runtime;
+use Twig_Error_Syntax;
+use Twig_TemplateWrapper;
+
+/**
+ * Class Template
+ *
+ * Handle front end templating
+ *
+ * @package PhpMyAdmin
+ */
+class Template
+{
+ /**
+ * Twig environment
+ * @var Environment
+ */
+ protected static $twig;
+
+ /**
+ * @var string
+ */
+ public const BASE_PATH = 'templates/';
+
+ /**
+ * Template constructor
+ */
+ public function __construct()
+ {
+ /** @var Config $config */
+ $config = $GLOBALS['PMA_Config'];
+ if (static::$twig === null) {
+ $loader = new FilesystemLoader(self::BASE_PATH);
+ $cache_dir = $config->getTempDir('twig');
+ /* Twig expects false when cache is not configured */
+ if ($cache_dir === null) {
+ $cache_dir = false;
+ }
+ $twig = new Environment($loader, [
+ 'auto_reload' => true,
+ 'cache' => $cache_dir,
+ 'debug' => false,
+ ]);
+ $twig->addExtension(new CoreExtension());
+ $twig->addExtension(new I18nExtension());
+ $twig->addExtension(new MessageExtension());
+ $twig->addExtension(new PluginsExtension());
+ $twig->addExtension(new RelationExtension());
+ $twig->addExtension(new SanitizeExtension());
+ $twig->addExtension(new ServerPrivilegesExtension());
+ $twig->addExtension(new StorageEngineExtension());
+ $twig->addExtension(new TableExtension());
+ $twig->addExtension(new TrackerExtension());
+ $twig->addExtension(new TransformationsExtension());
+ $twig->addExtension(new UrlExtension());
+ $twig->addExtension(new UtilExtension());
+ static::$twig = $twig;
+ }
+ }
+
+ /**
+ * Loads a template.
+ *
+ * @param string $templateName Template path name
+ *
+ * @return Twig_TemplateWrapper
+ * @throws LoaderError
+ * @throws RuntimeError
+ * @throws SyntaxError
+ */
+ public function load(string $templateName): Twig_TemplateWrapper
+ {
+ try {
+ $template = static::$twig->load($templateName . '.twig');
+ } catch (RuntimeException $e) {
+ /* Retry with disabled cache */
+ static::$twig->setCache(false);
+ $template = static::$twig->load($templateName . '.twig');
+ /*
+ * The trigger error is intentionally after second load
+ * to avoid triggering error when disabling cache does not
+ * solve it.
+ */
+ trigger_error(
+ sprintf(
+ __('Error while working with template cache: %s'),
+ $e->getMessage()
+ ),
+ E_USER_WARNING
+ );
+ }
+
+ return $template;
+ }
+
+ /**
+ * @param string $template Template path name
+ * @param array $data Associative array of template variables
+ *
+ * @return string
+ * @throws Throwable
+ * @throws Twig_Error_Loader
+ * @throws Twig_Error_Runtime
+ * @throws Twig_Error_Syntax
+ */
+ public function render(string $template, array $data = []): string
+ {
+ return $this->load($template)->render($data);
+ }
+}