diff options
Diffstat (limited to 'phpBB/includes/template/compile.php')
| -rw-r--r-- | phpBB/includes/template/compile.php | 128 | 
1 files changed, 128 insertions, 0 deletions
| diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php new file mode 100644 index 0000000000..82b301c1a2 --- /dev/null +++ b/phpBB/includes/template/compile.php @@ -0,0 +1,128 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2005 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +/** +* @ignore +*/ +if (!defined('IN_PHPBB')) +{ +	exit; +} + +stream_filter_register('phpbb_template', 'phpbb_template_filter'); + +/** +* Extension of template class - Functions needed for compiling templates only. +* +* @package phpBB3 +* @uses template_filter As a PHP stream filter to perform compilation of templates +*/ +class phpbb_template_compile +{ +	/** +	* Array of parameters to forward to template filter +	* +	* @var array +	*/ +	private $filter_params; + +	/** +	* Constructor. +	* +	* @param bool @allow_php Whether PHP code will be allowed in templates (inline PHP code, PHP tag and INCLUDEPHP tag) +	* @param phpbb_style_resource_locator $locator Resource locator +	* @param string $phpbb_root_path Path to phpBB root directory +	*/ +	public function __construct($allow_php, $locator, $phpbb_root_path) +	{ +		$this->filter_params = array( +			'allow_php'	=> $allow_php, +			'locator'	=> $locator, +			'phpbb_root_path'	=> $phpbb_root_path +		); +	} + +	/** +	* Compiles template in $source_file and writes compiled template to +	* cache directory +	* +	* @param string $handle Template handle to compile +	* @param string $source_file Source template file +	* @return bool Return true on success otherwise false +	*/ +	public function compile_file_to_file($source_file, $compiled_file) +	{ +		$source_handle = @fopen($source_file, 'rb'); +		$destination_handle = @fopen($compiled_file, 'wb'); + +		if (!$source_handle || !$destination_handle) +		{ +			return false; +		} + +		@flock($destination_handle, LOCK_EX); + +		$this->compile_stream_to_stream($source_handle, $destination_handle); + +		@fclose($source_handle); +		@flock($destination_handle, LOCK_UN); +		@fclose($destination_handle); + +		phpbb_chmod($compiled_file, CHMOD_READ | CHMOD_WRITE); + +		clearstatcache(); + +		return true; +	} + +	/** +	* Compiles a template located at $source_file. +	* +	* Returns PHP source suitable for eval(). +	* +	* @param string $source_file Source template file +	* @return string|bool Return compiled code on successful compilation otherwise false +	*/ +	public function compile_file($source_file) +	{ +		$source_handle = @fopen($source_file, 'rb'); +		$destination_handle = @fopen('php://temp' ,'r+b'); + +		if (!$source_handle || !$destination_handle) +		{ +			return false; +		} + +		$this->compile_stream_to_stream($source_handle, $destination_handle); + +		@fclose($source_handle); + +		rewind($destination_handle); +		$contents = stream_get_contents($destination_handle); +		@fclose($dest_handle); + +		return $contents; +	} + +	/** +	* Compiles contents of $source_stream into $dest_stream. +	* +	* A stream filter is appended to $source_stream as part of the +	* process. +	* +	* @param resource $source_stream Source stream +	* @param resource $dest_stream Destination stream +	* @return void +	*/ +	private function compile_stream_to_stream($source_stream, $dest_stream) +	{ +		stream_filter_append($source_stream, 'phpbb_template', null, $this->filter_params); +		stream_copy_to_stream($source_stream, $dest_stream); +	} +} | 
