diff options
Diffstat (limited to 'phpBB/phpbb/template/twig/node')
| -rw-r--r-- | phpBB/phpbb/template/twig/node/definenode.php | 57 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/event.php | 83 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/expression/binary/equalequal.php | 23 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php | 23 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includeasset.php | 81 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includecss.php | 37 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includejs.php | 39 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includenode.php | 54 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/includephp.php | 90 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/node/php.php | 53 | 
10 files changed, 540 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..695ec4281f --- /dev/null +++ b/phpBB/phpbb/template/twig/node/definenode.php @@ -0,0 +1,57 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @copyright Portions (c) 2009 Fabien Potencier, Armin Ronacher +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..8fc4ba4775 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/event.php @@ -0,0 +1,83 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..8c7f7b378d --- /dev/null +++ b/phpBB/phpbb/template/twig/node/expression/binary/equalequal.php @@ -0,0 +1,23 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..2e95c68090 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php @@ -0,0 +1,23 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..15195a226b --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includeasset.php @@ -0,0 +1,81 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..2ce63402aa --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includecss.php @@ -0,0 +1,37 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..0f67f9ff60 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includejs.php @@ -0,0 +1,39 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..42428b6106 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includenode.php @@ -0,0 +1,54 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..826617e8e8 --- /dev/null +++ b/phpBB/phpbb/template/twig/node/includephp.php @@ -0,0 +1,90 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* Sections (c) 2009 Fabien Potencier, Armin Ronacher +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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..3a24513dca --- /dev/null +++ b/phpBB/phpbb/template/twig/node/php.php @@ -0,0 +1,53 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +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')) +		; +	} +} | 
