diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-09 10:55:03 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-09 13:09:38 +0100 |
| commit | 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch) | |
| tree | 5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/libraries/classes/Template.php | |
| parent | 7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff) | |
| download | ft_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.php | 142 |
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); + } +} |
