diff options
author | Nils Adermann <naderman@naderman.de> | 2013-07-14 01:32:34 -0400 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2013-07-14 01:32:34 -0400 |
commit | 7030578bbe9e11c18b5becaf8b06e670e3c2e3cd (patch) | |
tree | a260c846cb47713e72de11cfb9803d981ea6faaf /phpBB/includes/template/twig | |
parent | 4186c05bb4b97374392031a10b796e77b857afaf (diff) | |
download | forums-7030578bbe9e11c18b5becaf8b06e670e3c2e3cd.tar forums-7030578bbe9e11c18b5becaf8b06e670e3c2e3cd.tar.gz forums-7030578bbe9e11c18b5becaf8b06e670e3c2e3cd.tar.bz2 forums-7030578bbe9e11c18b5becaf8b06e670e3c2e3cd.tar.xz forums-7030578bbe9e11c18b5becaf8b06e670e3c2e3cd.zip |
[ticket/11698] Moving all autoloadable files to phpbb/
PHPBB3-11698
Diffstat (limited to 'phpBB/includes/template/twig')
22 files changed, 0 insertions, 2028 deletions
diff --git a/phpBB/includes/template/twig/definition.php b/phpBB/includes/template/twig/definition.php deleted file mode 100644 index 6557b209eb..0000000000 --- a/phpBB/includes/template/twig/definition.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -/** -* This class holds all DEFINE variables from the current page load -*/ -class phpbb_template_twig_definition -{ - /** @var array **/ - protected $definitions = array(); - - /** - * Get a DEFINE'd variable - * - * @param string $name - * @return mixed Null if not found - */ - public function __call($name, $arguments) - { - return (isset($this->definitions[$name])) ? $this->definitions[$name] : null; - } - - /** - * DEFINE a variable - * - * @param string $name - * @param mixed $value - * @return phpbb_template_twig_definition - */ - public function set($name, $value) - { - $this->definitions[$name] = $value; - - return $this; - } - - /** - * Append to a variable - * - * @param string $name - * @param string $value - * @return phpbb_template_twig_definition - */ - public function append($name, $value) - { - if (!isset($this->definitions[$name])) - { - $this->definitions[$name] = ''; - } - - $this->definitions[$name] .= $value; - - return $this; - } -} diff --git a/phpBB/includes/template/twig/environment.php b/phpBB/includes/template/twig/environment.php deleted file mode 100644 index b60cd72325..0000000000 --- a/phpBB/includes/template/twig/environment.php +++ /dev/null @@ -1,140 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -class phpbb_template_twig_environment extends Twig_Environment -{ - /** @var array */ - protected $phpbb_extensions; - - /** @var phpbb_config */ - protected $phpbb_config; - - /** @var string */ - protected $phpbb_root_path; - - /** @var array **/ - protected $namespace_look_up_order = array('__main__'); - - /** - * Constructor - * - * @param phpbb_config $phpbb_config - * @param array $phpbb_extensions Array of enabled extensions (name => path) - * @param string $phpbb_root_path - * @param Twig_LoaderInterface $loader - * @param array $options Array of options to pass to Twig - */ - public function __construct($phpbb_config, $phpbb_extensions, $phpbb_root_path, Twig_LoaderInterface $loader = null, $options = array()) - { - $this->phpbb_config = $phpbb_config; - $this->phpbb_extensions = $phpbb_extensions; - $this->phpbb_root_path = $phpbb_root_path; - - return parent::__construct($loader, $options); - } - - /** - * Get the list of enabled phpBB extensions - * - * Used in EVENT node - * - * @return array - */ - public function get_phpbb_extensions() - { - return $this->phpbb_extensions; - } - - /** - * Get phpBB config - * - * @return phpbb_config - */ - public function get_phpbb_config() - { - return $this->phpbb_config; - } - - /** - * Get the phpBB root path - * - * @return string - */ - public function get_phpbb_root_path() - { - return $this->phpbb_root_path; - } - - /** - * Get the namespace look up order - * - * @return array - */ - public function getNamespaceLookUpOrder() - { - return $this->namespace_look_up_order; - } - - /** - * Set the namespace look up order to load templates from - * - * @param array $namespace - * @return Twig_Environment - */ - public function setNamespaceLookUpOrder($namespace) - { - $this->namespace_look_up_order = $namespace; - - return $this; - } - - /** - * Loads a template by name. - * - * @param string $name The template name - * @param integer $index The index if it is an embedded template - * @return Twig_TemplateInterface A template instance representing the given template name - */ - public function loadTemplate($name, $index = null) - { - if (strpos($name, '@') === false) - { - foreach ($this->getNamespaceLookUpOrder() as $namespace) - { - try - { - if ($namespace === '__main__') - { - return parent::loadTemplate($name, $index); - } - - return parent::loadTemplate('@' . $namespace . '/' . $name, $index); - } - catch (Twig_Error_Loader $e) - { - } - } - - // We were unable to load any templates - throw $e; - } - else - { - return parent::loadTemplate($name, $index); - } - } -} diff --git a/phpBB/includes/template/twig/extension.php b/phpBB/includes/template/twig/extension.php deleted file mode 100644 index c279726434..0000000000 --- a/phpBB/includes/template/twig/extension.php +++ /dev/null @@ -1,188 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -class phpbb_template_twig_extension extends Twig_Extension -{ - /** @var phpbb_template_context */ - protected $context; - - /** @var phpbb_user */ - protected $user; - - /** - * Constructor - * - * @param phpbb_template_context $context - * @param phpbb_user $user - * @return phpbb_template_twig_extension - */ - public function __construct(phpbb_template_context $context, $user) - { - $this->context = $context; - $this->user = $user; - } - - /** - * Get the name of this extension - * - * @return string - */ - public function getName() - { - return 'phpbb'; - } - - /** - * Returns the token parser instance to add to the existing list. - * - * @return array An array of Twig_TokenParser instances - */ - public function getTokenParsers() - { - return array( - new phpbb_template_twig_tokenparser_define, - new phpbb_template_twig_tokenparser_include, - new phpbb_template_twig_tokenparser_includejs, - new phpbb_template_twig_tokenparser_includecss, - new phpbb_template_twig_tokenparser_event, - new phpbb_template_twig_tokenparser_includephp, - new phpbb_template_twig_tokenparser_php, - ); - } - - /** - * Returns a list of filters to add to the existing list. - * - * @return array An array of filters - */ - public function getFilters() - { - return array( - new Twig_SimpleFilter('subset', array($this, 'loop_subset'), array('needs_environment' => true)), - new Twig_SimpleFilter('addslashes', 'addslashes'), - ); - } - - /** - * Returns a list of global functions to add to the existing list. - * - * @return array An array of global functions - */ - public function getFunctions() - { - return array( - new Twig_SimpleFunction('lang', array($this, 'lang')), - ); - } - - /** - * Returns a list of operators to add to the existing list. - * - * @return array An array of operators - */ - public function getOperators() - { - return array( - array( - '!' => array('precedence' => 50, 'class' => 'Twig_Node_Expression_Unary_Not'), - ), - array( - // precedence settings are copied from similar operators in Twig core extension - '||' => array('precedence' => 10, 'class' => 'Twig_Node_Expression_Binary_Or', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '&&' => array('precedence' => 15, 'class' => 'Twig_Node_Expression_Binary_And', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - - 'eq' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Equal', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - - 'ne' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'neq' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '<>' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - - '===' => array('precedence' => 20, 'class' => 'phpbb_template_twig_node_expression_binary_equalequal', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '!==' => array('precedence' => 20, 'class' => 'phpbb_template_twig_node_expression_binary_notequalequal', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - - 'gt' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Greater', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'gte' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_GreaterEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'ge' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_GreaterEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'lt' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Less', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'lte' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_LessEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'le' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_LessEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - - 'mod' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mod', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - ), - ); - } - - /** - * Grabs a subset of a loop - * - * @param Twig_Environment $env A Twig_Environment instance - * @param mixed $item A variable - * @param integer $start Start of the subset - * @param integer $end End of the subset - * @param Boolean $preserveKeys Whether to preserve key or not (when the input is an array) - * - * @return mixed The sliced variable - */ - function loop_subset(Twig_Environment $env, $item, $start, $end = null, $preserveKeys = false) - { - // We do almost the same thing as Twig's slice (array_slice), except when $end is positive - if ($end >= 1) - { - // When end is > 1, subset will end on the last item in an array with the specified $end - // This is different from slice in that it is the number we end on rather than the number - // of items to grab (length) - - // Start must always be the actual starting number for this calculation (not negative) - $start = ($start < 0) ? sizeof($item) + $start : $start; - $end = $end - $start; - } - - // We always include the last element (this was the past design) - $end = ($end == -1 || $end === null) ? null : $end + 1; - - return twig_slice($env, $item, $start, $end, $preserveKeys); - } - - /** - * Get output for a language variable (L_FOO, LA_FOO) - * - * This function checks to see if the language var was outputted to $context - * (e.g. in the ACP, L_TITLE) - * If not, we return the result of $user->lang() - * - * @param string $lang name - * @return string - */ - function lang() - { - $args = func_get_args(); - $key = $args[0]; - - $context = $this->context->get_data_ref(); - $context_vars = $context['.'][0]; - - if (isset($context_vars['L_' . $key])) - { - return $context_vars['L_' . $key]; - } - - // LA_ is transformed into lang(\'$1\')|addslashes, so we should not - // need to check for it - - return call_user_func_array(array($this->user, 'lang'), $args); - } -} diff --git a/phpBB/includes/template/twig/lexer.php b/phpBB/includes/template/twig/lexer.php deleted file mode 100644 index 46412ad048..0000000000 --- a/phpBB/includes/template/twig/lexer.php +++ /dev/null @@ -1,300 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -class phpbb_template_twig_lexer extends Twig_Lexer -{ - public function tokenize($code, $filename = null) - { - // Our phpBB tags - // Commented out tokens are handled separately from the main replace - $phpbb_tags = array( - /*'BEGIN', - 'BEGINELSE', - 'END', - 'IF', - 'ELSE', - 'ELSEIF', - 'ENDIF', - 'DEFINE', - 'UNDEFINE',*/ - 'ENDDEFINE', - 'INCLUDE', - 'INCLUDEPHP', - 'INCLUDEJS', - 'INCLUDECSS', - 'PHP', - 'ENDPHP', - 'EVENT', - ); - - // Twig tag masks - $twig_tags = array( - 'autoescape', - 'endautoescape', - 'if', - 'elseif', - 'else', - 'endif', - 'block', - 'endblock', - 'use', - 'extends', - 'embed', - 'filter', - 'endfilter', - 'flush', - 'for', - 'endfor', - 'macro', - 'endmacro', - 'import', - 'from', - 'sandbox', - 'endsandbox', - 'set', - 'endset', - 'spaceless', - 'endspaceless', - 'verbatim', - 'endverbatim', - ); - - // Fix tokens that may have inline variables (e.g. <!-- DEFINE $TEST = '{FOO}') - $code = $this->fix_inline_variable_tokens(array( - 'DEFINE.+=', - 'INCLUDE', - 'INCLUDEPHP', - 'INCLUDEJS', - 'INCLUDECSS', - ), $code); - - // Fix our BEGIN statements - $code = $this->fix_begin_tokens($code); - - // Fix our IF tokens - $code = $this->fix_if_tokens($code); - - // Fix our DEFINE tokens - $code = $this->fix_define_tokens($code); - - // Replace all of our starting tokens, <!-- TOKEN --> with Twig style, {% TOKEN %} - // This also strips outer parenthesis, <!-- IF (blah) --> becomes <!-- IF blah --> - $code = preg_replace('#<!-- (' . implode('|', $phpbb_tags) . ')(?: (.*?) ?)?-->#', '{% $1 $2 %}', $code); - - // Replace all of our twig masks with Twig code (e.g. <!-- BLOCK .+ --> with {% block $1 %}) - $code = $this->replace_twig_tag_masks($code, $twig_tags); - - // Replace all of our language variables, {L_VARNAME}, with Twig style, {{ lang('NAME') }} - // Appends any filters after lang() - $code = preg_replace('#{L_([a-zA-Z0-9_\.]+)(\|[^}]+?)?}#', '{{ lang(\'$1\')$2 }}', $code); - - // Replace all of our escaped language variables, {LA_VARNAME}, with Twig style, {{ lang('NAME')|addslashes }} - // Appends any filters after lang(), but before addslashes - $code = preg_replace('#{LA_([a-zA-Z0-9_\.]+)(\|[^}]+?)?}#', '{{ lang(\'$1\')$2|addslashes }}', $code); - - // Replace all of our variables, {VARNAME}, with Twig style, {{ VARNAME }} - // Appends any filters - $code = preg_replace('#{([a-zA-Z0-9_\.]+)(\|[^}]+?)?}#', '{{ $1$2 }}', $code); - - return parent::tokenize($code, $filename); - } - - /** - * Fix tokens that may have inline variables - * - * E.g. <!-- INCLUDE {TEST}.html - * - * @param array $tokens array of tokens to search for (imploded to a regular expression) - * @param string $code - * @return string - */ - protected function fix_inline_variable_tokens($tokens, $code) - { - $callback = function($matches) - { - // Remove any quotes that may have been used in different implementations - // E.g. DEFINE $TEST = 'blah' vs INCLUDE foo - // Replace {} with start/end to parse variables (' ~ TEST ~ '.html) - $matches[2] = str_replace(array('"', "'", '{', '}'), array('', '', "' ~ ", " ~ '"), $matches[2]); - - // Surround the matches in single quotes ('' ~ TEST ~ '.html') - return "<!-- {$matches[1]} '{$matches[2]}' -->"; - }; - - return preg_replace_callback('#<!-- (' . implode('|', $tokens) . ') (.+?) -->#', $callback, $code); - } - - /** - * Fix begin tokens (convert our BEGIN to Twig for) - * - * Not meant to be used outside of this context, public because the anonymous function calls this - * - * @param string $code - * @param array $parent_nodes (used in recursion) - * @return string - */ - public function fix_begin_tokens($code, $parent_nodes = array()) - { - // PHP 5.3 cannot use $this in an anonymous function, so use this as a work-around - $parent_class = $this; - $callback = function ($matches) use ($parent_class, $parent_nodes) - { - $name = $matches[1]; - $subset = trim(substr($matches[2], 1, -1)); // Remove parenthesis - $body = $matches[3]; - - // Is the designer wanting to call another loop in a loop? - // <!-- BEGIN loop --> - // <!-- BEGIN !loop2 --> - // <!-- END !loop2 --> - // <!-- END loop --> - // 'loop2' is actually on the same nesting level as 'loop' you assign - // variables to it with template->assign_block_vars('loop2', array(...)) - if (strpos($name, '!') === 0) - { - // Count the number if ! occurrences - $count = substr_count($name, '!'); - for ($i = 0; $i < $count; $i++) - { - array_pop($parent_nodes); - $name = substr($name, 1); - } - } - - // Remove all parent nodes, e.g. foo, bar from foo.bar.foobar.VAR - foreach ($parent_nodes as $node) - { - $body = preg_replace('#([^a-zA-Z0-9_])' . $node . '\.([a-zA-Z0-9_]+)\.#', '$1$2.', $body); - } - - // Add current node to list of parent nodes for child nodes - $parent_nodes[] = $name; - - // Recursive...fix any child nodes - $body = $parent_class->fix_begin_tokens($body, $parent_nodes); - - // Rename loopname vars (to prevent collisions, loop children are named (loop name)_loop_element) - $body = str_replace($name . '.', $name . '_loop_element.', $body); - - // Need the parent variable name - array_pop($parent_nodes); - $parent = (!empty($parent_nodes)) ? end($parent_nodes) . '_loop_element.' : ''; - - if ($subset !== '') - { - $subset = '|subset(' . $subset . ')'; - } - - // Turn into a Twig for loop, using (loop name)_loop_element for each child - return "{% for {$name}_loop_element in {$parent}{$name}{$subset} %}{$body}{% endfor %}"; - }; - - // Replace <!-- BEGINELSE --> correctly, only needs to be done once - $code = str_replace('<!-- BEGINELSE -->', '{% else %}', $code); - - return preg_replace_callback('#<!-- BEGIN ([!a-zA-Z0-9_]+)(\([0-9,\-]+\))? -->(.+?)<!-- END \1 -->#s', $callback, $code); - } - - /** - * Fix IF statements - * - * @param string $code - * @return string - */ - protected function fix_if_tokens($code) - { - $callback = function($matches) - { - // Replace $TEST with definition.TEST - $matches[1] = preg_replace('#\s\$([a-zA-Z_0-9]+)#', ' definition.$1', $matches[1]); - - // Replace .test with test|length - $matches[1] = preg_replace('#\s\.([a-zA-Z_0-9\.]+)#', ' $1|length', $matches[1]); - - return '<!-- IF' . $matches[1] . '-->'; - }; - - // Replace our "div by" with Twig's divisibleby (Twig does not like test names with spaces) - $code = preg_replace('# div by ([0-9]+)#', ' divisibleby($1)', $code); - - return preg_replace_callback('#<!-- IF((.*)[\s][\$|\.|!]([^\s]+)(.*))-->#', $callback, $code); - } - - /** - * Fix DEFINE statements and {$VARNAME} variables - * - * @param string $code - * @return string - */ - protected function fix_define_tokens($code) - { - /** - * Changing $VARNAME to definition.varname because set is only local - * context (e.g. DEFINE $TEST will only make $TEST available in current - * template and any child templates, but not any parent templates). - * - * DEFINE handles setting it properly to definition in its node, but the - * variables reading FROM it need to be altered to definition.VARNAME - * - * Setting up definition as a class in the array passed to Twig - * ($context) makes set definition.TEST available in the global context - */ - - // Replace <!-- DEFINE $NAME with {% DEFINE definition.NAME - $code = preg_replace('#<!-- DEFINE \$(.*)-->#', '{% DEFINE $1 %}', $code); - - // Changing UNDEFINE NAME to DEFINE NAME = null to save from creating an extra token parser/node - $code = preg_replace('#<!-- UNDEFINE \$(.*)-->#', '{% DEFINE $1= null %}', $code); - - // Replace all of our variables, {$VARNAME}, with Twig style, {{ definition.VARNAME }} - $code = preg_replace('#{\$([a-zA-Z0-9_\.]+)}#', '{{ definition.$1 }}', $code); - - // Replace all of our variables, ~ $VARNAME ~, with Twig style, ~ definition.VARNAME ~ - $code = preg_replace('#~ \$([a-zA-Z0-9_\.]+) ~#', '~ definition.$1 ~', $code); - - return $code; - } - - /** - * Replace Twig tag masks with Twig tag calls - * - * E.g. <!-- BLOCK foo --> with {% block foo %} - * - * @param string $code - * @param array $twig_tags All tags we want to create a mask for - * @return string - */ - protected function replace_twig_tag_masks($code, $twig_tags) - { - $callback = function ($matches) - { - $matches[1] = strtolower($matches[1]); - - return "{% {$matches[1]}{$matches[2]}%}"; - }; - - foreach ($twig_tags as &$tag) - { - $tag = strtoupper($tag); - } - - // twig_tags is an array of the twig tags, which are all lowercase, but we use all uppercase tags - $code = preg_replace_callback('#<!-- (' . implode('|', $twig_tags) . ')(.*?)-->#',$callback, $code); - - return $code; - } -} diff --git a/phpBB/includes/template/twig/node/define.php b/phpBB/includes/template/twig/node/define.php deleted file mode 100644 index fcb19cc773..0000000000 --- a/phpBB/includes/template/twig/node/define.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group, sections (c) 2009 Fabien Potencier, Armin Ronacher -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_node_define extends Twig_Node -{ - public function __construct($capture, Twig_NodeInterface $name, Twig_NodeInterface $value, $lineno, $tag = null) - { - parent::__construct(array('name' => $name, 'value' => $value), array('capture' => $capture, 'safe' => false), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - - if ($this->getAttribute('capture')) { - $compiler - ->write("ob_start();\n") - ->subcompile($this->getNode('value')) - ; - - $compiler->write("\$value = ('' === \$value = ob_get_clean()) ? '' : new Twig_Markup(\$value, \$this->env->getCharset());\n"); - } - else - { - $compiler - ->write("\$value = ") - ->subcompile($this->getNode('value')) - ->raw(";\n") - ; - } - - $compiler - ->write("\$context['definition']->set('") - ->raw($this->getNode('name')->getAttribute('name')) - ->raw("', \$value);\n") - ; - } -} diff --git a/phpBB/includes/template/twig/node/event.php b/phpBB/includes/template/twig/node/event.php deleted file mode 100644 index 971dea14fa..0000000000 --- a/phpBB/includes/template/twig/node/event.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_node_event extends Twig_Node -{ - /** @var Twig_Environment */ - protected $environment; - - public function __construct(Twig_Node_Expression $expr, phpbb_template_twig_environment $environment, $lineno, $tag = null) - { - $this->environment = $environment; - - parent::__construct(array('expr' => $expr), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - - $location = $this->getNode('expr')->getAttribute('name'); - - foreach ($this->environment->get_phpbb_extensions() as $ext_namespace => $ext_path) - { - $ext_namespace = str_replace('/', '_', $ext_namespace); - - if (defined('DEBUG')) - { - // If debug mode is enabled, lets check for new/removed EVENT - // templates on page load rather than at compile. This is - // slower, but makes developing extensions easier (no need to - // purge the cache when a new event template file is added) - $compiler - ->write("if (\$this->env->getLoader()->exists('@{$ext_namespace}/{$location}.html')) {\n") - ->indent() - ; - } - - if (defined('DEBUG') || $this->environment->getLoader()->exists('@' . $ext_namespace . '/' . $location . '.html')) - { - $compiler - ->write("\$previous_look_up_order = \$this->env->getNamespaceLookUpOrder();\n") - - // We set the namespace lookup order to be this extension first, then the main path - ->write("\$this->env->setNamespaceLookUpOrder(array('{$ext_namespace}', '__main__'));\n") - ->write("\$this->env->loadTemplate('@{$ext_namespace}/{$location}.html')->display(\$context);\n") - ->write("\$this->env->setNamespaceLookUpOrder(\$previous_look_up_order);\n") - ; - } - - if (defined('DEBUG')) - { - $compiler - ->outdent() - ->write("}\n\n") - ; - } - } - } -} diff --git a/phpBB/includes/template/twig/node/expression/binary/equalequal.php b/phpBB/includes/template/twig/node/expression/binary/equalequal.php deleted file mode 100644 index 8ec2069114..0000000000 --- a/phpBB/includes/template/twig/node/expression/binary/equalequal.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_node_expression_binary_equalequal extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('==='); - } -} diff --git a/phpBB/includes/template/twig/node/expression/binary/notequalequal.php b/phpBB/includes/template/twig/node/expression/binary/notequalequal.php deleted file mode 100644 index 96f32c502e..0000000000 --- a/phpBB/includes/template/twig/node/expression/binary/notequalequal.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_node_expression_binary_notequalequal extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('!=='); - } -} diff --git a/phpBB/includes/template/twig/node/include.php b/phpBB/includes/template/twig/node/include.php deleted file mode 100644 index 5c6ae1bbcf..0000000000 --- a/phpBB/includes/template/twig/node/include.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_node_include extends Twig_Node_Include -{ - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - - $compiler - ->write("\$location = ") - ->subcompile($this->getNode('expr')) - ->raw(";\n") - ->write("\$namespace = false;\n") - ->write("if (strpos(\$location, '@') === 0) {\n") - ->indent() - ->write("\$namespace = substr(\$location, 1, strpos(\$location, '/') - 1);\n") - ->write("\$previous_look_up_order = \$this->env->getNamespaceLookUpOrder();\n") - - // We set the namespace lookup order to be this namespace first, then the main path - ->write("\$this->env->setNamespaceLookUpOrder(array(\$namespace, '__main__'));\n") - ->outdent() - ->write("}\n") - ; - - parent::compile($compiler); - - $compiler - ->write("if (\$namespace) {\n") - ->indent() - ->write("\$this->env->setNamespaceLookUpOrder(\$previous_look_up_order);\n") - ->outdent() - ->write("}\n") - ; - } -} diff --git a/phpBB/includes/template/twig/node/includeasset.php b/phpBB/includes/template/twig/node/includeasset.php deleted file mode 100644 index 990b1c984f..0000000000 --- a/phpBB/includes/template/twig/node/includeasset.php +++ /dev/null @@ -1,60 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -class phpbb_template_twig_node_includeasset extends Twig_Node -{ - /** @var Twig_Environment */ - protected $environment; - - public function __construct(Twig_Node_Expression $expr, phpbb_template_twig_environment $environment, $lineno, $tag = null) - { - $this->environment = $environment; - - parent::__construct(array('expr' => $expr), array(), $lineno, $tag); - } - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - - $config = $this->environment->get_phpbb_config(); - - $compiler - ->write("\$asset_file = ") - ->subcompile($this->getNode('expr')) - ->raw(";\n") - ->write("\$asset = new phpbb_template_asset(\$asset_file);\n") - ->write("if (substr(\$asset_file, 0, 2) !== './' && \$asset->is_relative()) {\n") - ->indent() - ->write("\$asset_path = \$asset->get_path();") - ->write("\$local_file = \$this->getEnvironment()->get_phpbb_root_path() . \$asset_path;\n") - ->write("if (!file_exists(\$local_file)) {\n") - ->indent() - ->write("\$local_file = \$this->getEnvironment()->getLoader()->getCacheKey(\$asset_path);\n") - ->write("\$asset->set_path(\$local_file, true);\n") - ->outdent() - ->write("\$asset->add_assets_version({$config['assets_version']});\n") - ->write("\$asset_file = \$asset->get_url();\n") - ->write("}\n") - ->outdent() - ->write("}\n") - ->write("\$context['definition']->append('{$this->get_definition_name()}', '") - ; - - $this->append_asset($compiler); - - $compiler - ->raw("\n');\n") - ; - } -} diff --git a/phpBB/includes/template/twig/node/includecss.php b/phpBB/includes/template/twig/node/includecss.php deleted file mode 100644 index 01fda44aad..0000000000 --- a/phpBB/includes/template/twig/node/includecss.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -class phpbb_template_twig_node_includecss extends phpbb_template_twig_node_includeasset -{ - public function get_definition_name() - { - return 'STYLESHEETS'; - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function append_asset(Twig_Compiler $compiler) - { - $compiler - ->raw("<link href=\"' . ") - ->raw("\$asset_file . '\"") - ->raw(' rel="stylesheet" type="text/css" media="screen, projection" />') - ; - } -} diff --git a/phpBB/includes/template/twig/node/includejs.php b/phpBB/includes/template/twig/node/includejs.php deleted file mode 100644 index fdf2bea3ed..0000000000 --- a/phpBB/includes/template/twig/node/includejs.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -class phpbb_template_twig_node_includejs extends phpbb_template_twig_node_includeasset -{ - public function get_definition_name() - { - return 'SCRIPTS'; - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - protected function append_asset(Twig_Compiler $compiler) - { - $config = $this->environment->get_phpbb_config(); - - $compiler - ->raw("<script type=\"text/javascript\" src=\"' . ") - ->raw("\$asset_file") - ->raw(". '\"></script>\n") - ; - } -} diff --git a/phpBB/includes/template/twig/node/includephp.php b/phpBB/includes/template/twig/node/includephp.php deleted file mode 100644 index dbe54f0e1a..0000000000 --- a/phpBB/includes/template/twig/node/includephp.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group, sections (c) 2009 Fabien Potencier, Armin Ronacher -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_node_includephp extends Twig_Node -{ - /** @var Twig_Environment */ - protected $environment; - - public function __construct(Twig_Node_Expression $expr, phpbb_template_twig_environment $environment, $ignoreMissing = false, $lineno, $tag = null) - { - $this->environment = $environment; - - parent::__construct(array('expr' => $expr), array('ignore_missing' => (Boolean) $ignoreMissing), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - - $config = $this->environment->get_phpbb_config(); - - if (!$config['tpl_allow_php']) - { - $compiler - ->write("// INCLUDEPHP Disabled\n") - ; - - return; - } - - if ($this->getAttribute('ignore_missing')) { - $compiler - ->write("try {\n") - ->indent() - ; - } - - $compiler - ->write("\$location = ") - ->subcompile($this->getNode('expr')) - ->raw(";\n") - ->write("if (phpbb_is_absolute(\$location)) {\n") - ->indent() - // Absolute path specified - ->write("require(\$location);\n") - ->outdent() - ->write("} else if (file_exists(\$this->getEnvironment()->get_phpbb_root_path() . \$location)) {\n") - ->indent() - // PHP file relative to phpbb_root_path - ->write("require(\$this->getEnvironment()->get_phpbb_root_path() . \$location);\n") - ->outdent() - ->write("} else {\n") - ->indent() - // Local path (behaves like INCLUDE) - ->write("require(\$this->getEnvironment()->getLoader()->getCacheKey(\$location));\n") - ->outdent() - ->write("}\n") - ; - - if ($this->getAttribute('ignore_missing')) { - $compiler - ->outdent() - ->write("} catch (Twig_Error_Loader \$e) {\n") - ->indent() - ->write("// ignore missing template\n") - ->outdent() - ->write("}\n\n") - ; - } - } -} diff --git a/phpBB/includes/template/twig/node/php.php b/phpBB/includes/template/twig/node/php.php deleted file mode 100644 index c11539ea7f..0000000000 --- a/phpBB/includes/template/twig/node/php.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_node_php extends Twig_Node -{ - /** @var Twig_Environment */ - protected $environment; - - public function __construct(Twig_Node_Text $text, phpbb_template_twig_environment $environment, $lineno, $tag = null) - { - $this->environment = $environment; - - parent::__construct(array('text' => $text), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - - $config = $this->environment->get_phpbb_config(); - - if (!$config['tpl_allow_php']) - { - $compiler - ->write("// PHP Disabled\n") - ; - - return; - } - - $compiler - ->raw($this->getNode('text')->getAttribute('data')) - ; - } -} diff --git a/phpBB/includes/template/twig/tokenparser/define.php b/phpBB/includes/template/twig/tokenparser/define.php deleted file mode 100644 index 4ea15388c4..0000000000 --- a/phpBB/includes/template/twig/tokenparser/define.php +++ /dev/null @@ -1,66 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group, sections (c) 2009 Fabien Potencier -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_tokenparser_define extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $lineno = $token->getLine(); - $stream = $this->parser->getStream(); - $name = $this->parser->getExpressionParser()->parseExpression(); - - $capture = false; - if ($stream->test(Twig_Token::OPERATOR_TYPE, '=')) { - $stream->next(); - $value = $this->parser->getExpressionParser()->parseExpression(); - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - } else { - $capture = true; - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - $value = $this->parser->subparse(array($this, 'decideBlockEnd'), true); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - } - - return new phpbb_template_twig_node_define($capture, $name, $value, $lineno, $this->getTag()); - } - - public function decideBlockEnd(Twig_Token $token) - { - return $token->test('ENDDEFINE'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'DEFINE'; - } -} diff --git a/phpBB/includes/template/twig/tokenparser/event.php b/phpBB/includes/template/twig/tokenparser/event.php deleted file mode 100644 index e4dddd6dcc..0000000000 --- a/phpBB/includes/template/twig/tokenparser/event.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_tokenparser_event extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $expr = $this->parser->getExpressionParser()->parseExpression(); - - $stream = $this->parser->getStream(); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return new phpbb_template_twig_node_event($expr, $this->parser->getEnvironment(), $token->getLine(), $this->getTag()); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'EVENT'; - } -} diff --git a/phpBB/includes/template/twig/tokenparser/include.php b/phpBB/includes/template/twig/tokenparser/include.php deleted file mode 100644 index 520f9fd1a0..0000000000 --- a/phpBB/includes/template/twig/tokenparser/include.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group, sections (c) 2009 Fabien Potencier -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_tokenparser_include extends Twig_TokenParser_Include -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $expr = $this->parser->getExpressionParser()->parseExpression(); - - list($variables, $only, $ignoreMissing) = $this->parseArguments(); - - return new phpbb_template_twig_node_include($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'INCLUDE'; - } -} diff --git a/phpBB/includes/template/twig/tokenparser/includecss.php b/phpBB/includes/template/twig/tokenparser/includecss.php deleted file mode 100644 index 6c24dda647..0000000000 --- a/phpBB/includes/template/twig/tokenparser/includecss.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -class phpbb_template_twig_tokenparser_includecss extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $expr = $this->parser->getExpressionParser()->parseExpression(); - - $stream = $this->parser->getStream(); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return new phpbb_template_twig_node_includecss($expr, $this->parser->getEnvironment(), $token->getLine(), $this->getTag()); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'INCLUDECSS'; - } -} diff --git a/phpBB/includes/template/twig/tokenparser/includejs.php b/phpBB/includes/template/twig/tokenparser/includejs.php deleted file mode 100644 index b02b2f89ba..0000000000 --- a/phpBB/includes/template/twig/tokenparser/includejs.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_tokenparser_includejs extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $expr = $this->parser->getExpressionParser()->parseExpression(); - - $stream = $this->parser->getStream(); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return new phpbb_template_twig_node_includejs($expr, $this->parser->getEnvironment(), $token->getLine(), $this->getTag()); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'INCLUDEJS'; - } -} diff --git a/phpBB/includes/template/twig/tokenparser/includephp.php b/phpBB/includes/template/twig/tokenparser/includephp.php deleted file mode 100644 index 13fe6de8a6..0000000000 --- a/phpBB/includes/template/twig/tokenparser/includephp.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group, sections (c) 2009 Fabien Potencier, Armin Ronacher -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_tokenparser_includephp extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $expr = $this->parser->getExpressionParser()->parseExpression(); - - $stream = $this->parser->getStream(); - - $ignoreMissing = false; - if ($stream->test(Twig_Token::NAME_TYPE, 'ignore')) { - $stream->next(); - $stream->expect(Twig_Token::NAME_TYPE, 'missing'); - - $ignoreMissing = true; - } - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return new phpbb_template_twig_node_includephp($expr, $this->parser->getEnvironment(), $ignoreMissing, $token->getLine(), $this->getTag()); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'INCLUDEPHP'; - } -} diff --git a/phpBB/includes/template/twig/tokenparser/php.php b/phpBB/includes/template/twig/tokenparser/php.php deleted file mode 100644 index 197980a59a..0000000000 --- a/phpBB/includes/template/twig/tokenparser/php.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - - -class phpbb_template_twig_tokenparser_php extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $stream = $this->parser->getStream(); - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - $body = $this->parser->subparse(array($this, 'decideEnd'), true); - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return new phpbb_template_twig_node_php($body, $this->parser->getEnvironment(), $token->getLine(), $this->getTag()); - } - - public function decideEnd(Twig_Token $token) - { - return $token->test('ENDPHP'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'PHP'; - } -} diff --git a/phpBB/includes/template/twig/twig.php b/phpBB/includes/template/twig/twig.php deleted file mode 100644 index 92a37d1634..0000000000 --- a/phpBB/includes/template/twig/twig.php +++ /dev/null @@ -1,465 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -/** -* Twig Template class. -* @package phpBB3 -*/ -class phpbb_template_twig implements phpbb_template -{ - /** - * Template context. - * Stores template data used during template rendering. - * @var phpbb_template_context - */ - protected $context; - - /** - * Path of the cache directory for the template - * - * Cannot be changed during runtime. - * - * @var string - */ - private $cachepath = ''; - - /** - * phpBB root path - * @var string - */ - protected $phpbb_root_path; - - /** - * adm relative path - * @var string - */ - protected $adm_relative_path; - - /** - * PHP file extension - * @var string - */ - protected $php_ext; - - /** - * phpBB config instance - * @var phpbb_config - */ - protected $config; - - /** - * Current user - * @var phpbb_user - */ - protected $user; - - /** - * Extension manager. - * - * @var phpbb_extension_manager - */ - protected $extension_manager; - - /** - * Name of the style that the template being compiled and/or rendered - * belongs to, and its parents, in inheritance tree order. - * - * Used to invoke style-specific template events. - * - * @var array - */ - protected $style_names; - - /** - * Twig Environment - * - * @var Twig_Environment - */ - protected $twig; - - /** - * Array of filenames assigned to set_filenames - * - * @var array - */ - protected $filenames = array(); - - /** - * Constructor. - * - * @param string $phpbb_root_path phpBB root path - * @param string $php_ext php extension (typically 'php') - * @param phpbb_config $config - * @param phpbb_user $user - * @param phpbb_template_context $context template context - * @param phpbb_extension_manager $extension_manager extension manager, if null then template events will not be invoked - * @param string $adm_relative_path relative path to adm directory - */ - public function __construct($phpbb_root_path, $php_ext, $config, $user, phpbb_template_context $context, phpbb_extension_manager $extension_manager = null, $adm_relative_path = null) - { - $this->phpbb_root_path = $phpbb_root_path; - $this->adm_relative_path = $adm_relative_path; - $this->php_ext = $php_ext; - $this->config = $config; - $this->user = $user; - $this->context = $context; - $this->extension_manager = $extension_manager; - - $this->cachepath = $phpbb_root_path . 'cache/twig/'; - - // Initiate the loader, __main__ namespace paths will be setup later in set_style_names() - $loader = new Twig_Loader_Filesystem(''); - - $this->twig = new phpbb_template_twig_environment( - $this->config, - ($this->extension_manager) ? $this->extension_manager->all_enabled() : array(), - $this->phpbb_root_path, - $loader, - array( - 'cache' => (defined('IN_INSTALL')) ? false : $this->cachepath, - 'debug' => defined('DEBUG'), - 'auto_reload' => (bool) $this->config['load_tplcompile'], - 'autoescape' => false, - ) - ); - - $this->twig->addExtension( - new phpbb_template_twig_extension( - $this->context, - $this->user - ) - ); - - $lexer = new phpbb_template_twig_lexer($this->twig); - - $this->twig->setLexer($lexer); - } - - /** - * Clear the cache - * - * @return phpbb_template - */ - public function clear_cache() - { - if (is_dir($this->cachepath)) - { - $this->twig->clearCacheFiles(); - } - - return $this; - } - - /** - * Sets the template filenames for handles. - * - * @param array $filename_array Should be a hash of handle => filename pairs. - * @return phpbb_template $this - */ - public function set_filenames(array $filename_array) - { - $this->filenames = array_merge($this->filenames, $filename_array); - - return $this; - } - - /** - * Sets the style names/paths corresponding to style hierarchy being compiled - * and/or rendered. - * - * @param array $style_names List of style names in inheritance tree order - * @param array $style_paths List of style paths in inheritance tree order - * @param bool $is_core True if the style names are the "core" styles for this page load - * Core means the main phpBB template files - * @return phpbb_template $this - */ - public function set_style_names(array $style_names, array $style_paths, $is_core = false) - { - $this->style_names = $style_names; - - // Set as __main__ namespace - $this->twig->getLoader()->setPaths($style_paths); - - // Core style namespace from phpbb_style::set_style() - if ($is_core) - { - $this->twig->getLoader()->setPaths($style_paths, 'core'); - } - - // Add admin namespace - if (is_dir($this->phpbb_root_path . $this->adm_relative_path . 'style/')) - { - $this->twig->getLoader()->setPaths($this->phpbb_root_path . $this->adm_relative_path . 'style/', 'admin'); - } - - // Add all namespaces for all extensions - if ($this->extension_manager instanceof phpbb_extension_manager) - { - $style_names[] = 'all'; - - foreach ($this->extension_manager->all_enabled() as $ext_namespace => $ext_path) - { - // namespaces cannot contain / - $namespace = str_replace('/', '_', $ext_namespace); - $paths = array(); - - foreach ($style_names as $style_name) - { - $ext_style_path = $ext_path . 'styles/' . $style_name . '/template'; - - if (is_dir($ext_style_path)) - { - $paths[] = $ext_style_path; - } - } - - $this->twig->getLoader()->setPaths($paths, $namespace); - } - } - - return $this; - } - - /** - * Clears all variables and blocks assigned to this template. - * - * @return phpbb_template $this - */ - public function destroy() - { - $this->context = array(); - - return $this; - } - - /** - * Reset/empty complete block - * - * @param string $blockname Name of block to destroy - * @return phpbb_template $this - */ - public function destroy_block_vars($blockname) - { - $this->context->destroy_block_vars($blockname); - - return $this; - } - - /** - * Display a template for provided handle. - * - * The template will be loaded and compiled, if necessary, first. - * - * This function calls hooks. - * - * @param string $handle Handle to display - * @return phpbb_template $this - */ - public function display($handle) - { - $result = $this->call_hook($handle, __FUNCTION__); - if ($result !== false) - { - return $result[0]; - } - - $this->twig->display($this->get_filename_from_handle($handle), $this->get_template_vars()); - - return $this; - } - - /** - * Calls hook if any is defined. - * - * @param string $handle Template handle being displayed. - * @param string $method Method name of the caller. - */ - protected function call_hook($handle, $method) - { - global $phpbb_hook; - - if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, $method), $handle, $this)) - { - if ($phpbb_hook->hook_return(array(__CLASS__, $method))) - { - $result = $phpbb_hook->hook_return_result(array(__CLASS__, $method)); - return array($result); - } - } - - return false; - } - - /** - * Display the handle and assign the output to a template variable - * or return the compiled result. - * - * @param string $handle Handle to operate on - * @param string $template_var Template variable to assign compiled handle to - * @param bool $return_content If true return compiled handle, otherwise assign to $template_var - * @return phpbb_template|string if $return_content is true return string of the compiled handle, otherwise return $this - */ - public function assign_display($handle, $template_var = '', $return_content = true) - { - if ($return_content) - { - return $this->twig->render($this->get_filename_from_handle($handle), $this->get_template_vars()); - } - - $this->assign_var($template_var, $this->twig->render($this->get_filename_from_handle($handle, $this->get_template_vars()))); - - return $this; - } - - /** - * Assign key variable pairs from an array - * - * @param array $vararray A hash of variable name => value pairs - * @return phpbb_template $this - */ - public function assign_vars(array $vararray) - { - foreach ($vararray as $key => $val) - { - $this->assign_var($key, $val); - } - - return $this; - } - - /** - * Assign a single scalar value to a single key. - * - * Value can be a string, an integer or a boolean. - * - * @param string $varname Variable name - * @param string $varval Value to assign to variable - * @return phpbb_template $this - */ - public function assign_var($varname, $varval) - { - $this->context->assign_var($varname, $varval); - - return $this; - } - - /** - * Append text to the string value stored in a key. - * - * Text is appended using the string concatenation operator (.). - * - * @param string $varname Variable name - * @param string $varval Value to append to variable - * @return phpbb_template $this - */ - public function append_var($varname, $varval) - { - $this->context->append_var($varname, $varval); - - return $this; - } - - /** - * Assign key variable pairs from an array to a specified block - * @param string $blockname Name of block to assign $vararray to - * @param array $vararray A hash of variable name => value pairs - * @return phpbb_template $this - */ - public function assign_block_vars($blockname, array $vararray) - { - $this->context->assign_block_vars($blockname, $vararray); - - return $this; - } - - /** - * Change already assigned key variable pair (one-dimensional - single loop entry) - * - * An example of how to use this function: - * {@example alter_block_array.php} - * - * @param string $blockname the blockname, for example 'loop' - * @param array $vararray the var array to insert/add or merge - * @param mixed $key Key to search for - * - * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] - * - * int: Position [the position to change or insert at directly given] - * - * If key is false the position is set to 0 - * If key is true the position is set to the last entry - * - * @param string $mode Mode to execute (valid modes are 'insert' and 'change') - * - * If insert, the vararray is inserted at the given position (position counting from zero). - * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). - * - * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) - * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) - * - * @return bool false on error, true on success - */ - public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') - { - return $this->context->alter_block_array($blockname, $vararray, $key, $mode); - } - - /** - * Get template vars in a format Twig will use (from the context) - * - * @return array - */ - public function get_template_vars() - { - $context_vars = $this->context->get_data_ref(); - - $vars = array_merge( - $context_vars['.'][0], // To get normal vars - $context_vars, // To get loops - array( - 'definition' => new phpbb_template_twig_definition(), - 'user' => $this->user, - ) - ); - - // cleanup - unset($vars['.']); - - return $vars; - } - - /** - * Get a filename from the handle - * - * @param string $handle - * @return string - */ - protected function get_filename_from_handle($handle) - { - return (isset($this->filenames[$handle])) ? $this->filenames[$handle] : $handle; - } - - /** - * Get path to template for handle (required for BBCode parser) - * - * @return string - */ - public function get_source_file_for_handle($handle) - { - return $this->twig->getLoader()->getCacheKey($this->get_filename_from_handle($handle)); - } -} |