diff options
Diffstat (limited to 'phpBB/phpbb/template/twig/node')
| -rw-r--r-- | phpBB/phpbb/template/twig/node/definenode.php | 52 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/event.php | 79 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/expression/binary/equalequal.php | 19 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php | 19 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includeasset.php | 77 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includecss.php | 33 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includejs.php | 35 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includenode.php | 50 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includephp.php | 85 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/php.php | 49 | 
10 files changed, 498 insertions, 0 deletions
| diff --git a/phpBB/phpbb/template/twig/node/definenode.php b/phpBB/phpbb/template/twig/node/definenode.php new file mode 100644 index 0000000000..6a9969f8c6 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/definenode.php @@ -0,0 +1,52 @@ +<?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 +* +*/ + +namespace phpbb\template\twig\node; + + +class definenode 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/phpbb/template/twig/node/event.php b/phpBB/phpbb/template/twig/node/event.php new file mode 100644 index 0000000000..7a1181a866 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/event.php @@ -0,0 +1,79 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\template\twig\node; + + +class event extends \Twig_Node +{ +	/** +	 * The subdirectory in which all template listener files must be placed +	 * @var string +	 */ +	protected $listener_directory = 'event/'; + +	/** @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->listener_directory . $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/phpbb/template/twig/node/expression/binary/equalequal.php b/phpBB/phpbb/template/twig/node/expression/binary/equalequal.php new file mode 100644 index 0000000000..f3bbfa6691 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/expression/binary/equalequal.php @@ -0,0 +1,19 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\template\twig\node\expression\binary; + + +class equalequal extends \Twig_Node_Expression_Binary +{ +	public function operator(\Twig_Compiler $compiler) +	{ +		return $compiler->raw('==='); +	} +} diff --git a/phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php b/phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php new file mode 100644 index 0000000000..c9c2687e08 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php @@ -0,0 +1,19 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\template\twig\node\expression\binary; + + +class notequalequal extends \Twig_Node_Expression_Binary +{ +	public function operator(\Twig_Compiler $compiler) +	{ +		return $compiler->raw('!=='); +	} +} diff --git a/phpBB/phpbb/template/twig/node/includeasset.php b/phpBB/phpbb/template/twig/node/includeasset.php new file mode 100644 index 0000000000..f6c9dc9c58 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includeasset.php @@ -0,0 +1,77 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\template\twig\node; + +abstract class 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, \$this->getEnvironment()->get_path_helper());\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()->findTemplate(\$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") +		; +	} + +	/** +	* Get the definition name +	* +	* @return string (e.g. 'SCRIPTS') +	*/ +	abstract public function get_definition_name(); + +	/** +	* Append the output code for the asset +	* +	* @param Twig_Compiler A Twig_Compiler instance +	* @return null +	*/ +	abstract protected function append_asset(\Twig_Compiler $compiler); +} diff --git a/phpBB/phpbb/template/twig/node/includecss.php b/phpBB/phpbb/template/twig/node/includecss.php new file mode 100644 index 0000000000..deb279fa4a --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includecss.php @@ -0,0 +1,33 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\template\twig\node; + +class includecss extends \phpbb\template\twig\node\includeasset +{ +	/** +	* {@inheritdoc} +	*/ +	public function get_definition_name() +	{ +		return 'STYLESHEETS'; +	} + +	/** +	* {@inheritdoc} +	*/ +	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/phpbb/template/twig/node/includejs.php b/phpBB/phpbb/template/twig/node/includejs.php new file mode 100644 index 0000000000..696b640eac --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includejs.php @@ -0,0 +1,35 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\template\twig\node; + +class includejs extends \phpbb\template\twig\node\includeasset +{ +	/** +	* {@inheritdoc} +	*/ +	public function get_definition_name() +	{ +		return 'SCRIPTS'; +	} + +	/** +	* {@inheritdoc} +	*/ +	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/phpbb/template/twig/node/includenode.php b/phpBB/phpbb/template/twig/node/includenode.php new file mode 100644 index 0000000000..d9b45d6407 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includenode.php @@ -0,0 +1,50 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\template\twig\node; + + +class includenode 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/phpbb/template/twig/node/includephp.php b/phpBB/phpbb/template/twig/node/includephp.php new file mode 100644 index 0000000000..3f4621c0a9 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includephp.php @@ -0,0 +1,85 @@ +<?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 +* +*/ + +namespace phpbb\template\twig\node; + + +class includephp extends \Twig_Node +{ +	/** @var Twig_Environment */ +	protected $environment; + +	public function __construct(\Twig_Node_Expression $expr, \phpbb\template\twig\environment $environment, $lineno, $ignoreMissing = false, $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/phpbb/template/twig/node/php.php b/phpBB/phpbb/template/twig/node/php.php new file mode 100644 index 0000000000..2b18551266 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/php.php @@ -0,0 +1,49 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\template\twig\node; + + +class 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')) +		; +	} +} | 
