2015-10-30 16:15:58 +00:00
|
|
|
<?php
|
2016-02-03 22:22:56 +00:00
|
|
|
/**
|
|
|
|
* Holds the templating engine class.
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2016-02-03 22:22:56 +00:00
|
|
|
* @package Sakura
|
|
|
|
*/
|
|
|
|
|
2015-10-30 16:15:58 +00:00
|
|
|
namespace Sakura;
|
|
|
|
|
2015-10-31 18:14:54 +00:00
|
|
|
use Twig_Environment;
|
|
|
|
use Twig_Extension_StringLoader;
|
|
|
|
use Twig_Loader_Filesystem;
|
2016-03-31 20:03:25 +00:00
|
|
|
use Twig_SimpleFilter;
|
2016-02-27 16:46:16 +00:00
|
|
|
use Twig_SimpleFunction;
|
2015-10-31 18:14:54 +00:00
|
|
|
|
2015-10-30 16:15:58 +00:00
|
|
|
/**
|
2016-02-02 21:04:15 +00:00
|
|
|
* Sakura wrapper for Twig.
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2015-10-30 16:15:58 +00:00
|
|
|
* @package Sakura
|
2016-02-02 21:04:15 +00:00
|
|
|
* @author Julian van de Groep <me@flash.moe>
|
2015-10-30 16:15:58 +00:00
|
|
|
*/
|
|
|
|
class Template
|
|
|
|
{
|
2016-02-02 21:04:15 +00:00
|
|
|
/**
|
|
|
|
* The variables passed on to the templating engine.
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2016-02-02 21:04:15 +00:00
|
|
|
* @var array
|
|
|
|
*/
|
2016-02-04 20:56:40 +00:00
|
|
|
private static $vars = [];
|
2016-02-02 21:04:15 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The templating engine.
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2016-02-02 21:04:15 +00:00
|
|
|
* @var Twig_Environment
|
|
|
|
*/
|
2016-02-04 20:56:40 +00:00
|
|
|
private static $template;
|
2016-02-02 21:04:15 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The template name.
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2016-02-02 21:04:15 +00:00
|
|
|
* @var string
|
|
|
|
*/
|
2016-02-04 20:56:40 +00:00
|
|
|
private static $templateName;
|
2016-02-02 21:04:15 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The file extension used by template files
|
|
|
|
*/
|
2016-02-04 20:56:40 +00:00
|
|
|
const FILE_EXT = '.twig';
|
2015-10-31 18:14:54 +00:00
|
|
|
|
2016-02-02 21:04:15 +00:00
|
|
|
/**
|
|
|
|
* Set the template name.
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2016-02-02 21:04:15 +00:00
|
|
|
* @param string $name The name of the template directory.
|
|
|
|
*/
|
2016-02-04 20:56:40 +00:00
|
|
|
public static function set($name)
|
2015-11-01 13:26:05 +00:00
|
|
|
{
|
2015-10-31 18:14:54 +00:00
|
|
|
// Set variables
|
2016-02-04 20:56:40 +00:00
|
|
|
self::$templateName = $name;
|
2015-10-31 18:14:54 +00:00
|
|
|
|
|
|
|
// Reinitialise
|
2016-02-04 20:56:40 +00:00
|
|
|
self::init();
|
2015-10-31 18:14:54 +00:00
|
|
|
}
|
|
|
|
|
2016-02-02 21:04:15 +00:00
|
|
|
/**
|
|
|
|
* Initialise the templating engine.
|
|
|
|
*/
|
2016-02-04 20:56:40 +00:00
|
|
|
public static function init()
|
2015-11-01 13:26:05 +00:00
|
|
|
{
|
2015-10-31 18:14:54 +00:00
|
|
|
// Initialise Twig Filesystem Loader
|
2016-02-04 20:56:40 +00:00
|
|
|
$twigLoader = new Twig_Loader_Filesystem(ROOT . 'templates/' . self::$templateName);
|
2015-10-31 18:14:54 +00:00
|
|
|
|
|
|
|
// Environment variable
|
|
|
|
$twigEnv = [];
|
|
|
|
|
|
|
|
// Enable caching
|
2015-12-04 14:19:10 +00:00
|
|
|
if (Config::get('enable_tpl_cache')) {
|
2015-12-01 13:34:16 +00:00
|
|
|
$twigEnv['cache'] = ROOT . 'cache/twig';
|
2015-10-31 18:14:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// And now actually initialise the templating engine
|
2016-02-04 20:56:40 +00:00
|
|
|
self::$template = new Twig_Environment($twigLoader, $twigEnv);
|
2015-10-31 18:14:54 +00:00
|
|
|
|
|
|
|
// Load String template loader
|
2016-02-04 20:56:40 +00:00
|
|
|
self::$template->addExtension(new Twig_Extension_StringLoader());
|
2016-02-27 16:46:16 +00:00
|
|
|
|
|
|
|
// Add route function
|
|
|
|
self::$template->addFunction(new Twig_SimpleFunction('route', function ($name, $args = null) {
|
|
|
|
return Router::route($name, $args);
|
|
|
|
}));
|
2016-03-27 22:15:51 +00:00
|
|
|
|
2016-03-31 20:03:25 +00:00
|
|
|
// Add config function
|
|
|
|
self::$template->addFunction(new Twig_SimpleFunction('config', function ($name) {
|
|
|
|
return Config::get($name);
|
|
|
|
}));
|
|
|
|
|
|
|
|
// Method of getting the currently active session id
|
2016-03-27 22:15:51 +00:00
|
|
|
self::$template->addFunction(new Twig_SimpleFunction('session_id', 'session_id'));
|
2016-03-31 20:03:25 +00:00
|
|
|
|
|
|
|
// json_decode filter (why doesn't this exist to begin with?)
|
|
|
|
self::$template->addFilter(new Twig_SimpleFilter('json_decode', 'json_decode'));
|
2015-10-31 18:14:54 +00:00
|
|
|
}
|
|
|
|
|
2016-02-02 21:04:15 +00:00
|
|
|
/**
|
|
|
|
* Merge the parse variables.
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2016-02-02 21:04:15 +00:00
|
|
|
* @param array $vars The new variables.
|
|
|
|
*/
|
2016-02-04 20:56:40 +00:00
|
|
|
public static function vars($vars)
|
2015-11-01 13:26:05 +00:00
|
|
|
{
|
2016-02-04 20:56:40 +00:00
|
|
|
self::$vars = array_merge(self::$vars, $vars);
|
2015-10-31 18:14:54 +00:00
|
|
|
}
|
|
|
|
|
2016-02-02 21:04:15 +00:00
|
|
|
/**
|
|
|
|
* Render a template file.
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2016-02-02 21:04:15 +00:00
|
|
|
* @param string $file The filename/path
|
2016-03-08 23:07:58 +00:00
|
|
|
*
|
2016-02-02 21:04:15 +00:00
|
|
|
* @return bool|string An error or the HTML.
|
|
|
|
*/
|
2016-02-04 20:56:40 +00:00
|
|
|
public static function render($file)
|
2015-10-31 18:14:54 +00:00
|
|
|
{
|
|
|
|
try {
|
2016-02-04 20:56:40 +00:00
|
|
|
return self::$template->render($file . self::FILE_EXT, self::$vars);
|
2015-10-31 18:14:54 +00:00
|
|
|
} catch (\Exception $e) {
|
2015-12-10 20:55:51 +00:00
|
|
|
return trigger_error($e->getMessage(), E_USER_ERROR);
|
2015-10-31 18:14:54 +00:00
|
|
|
}
|
|
|
|
}
|
2015-10-30 16:15:58 +00:00
|
|
|
}
|