diff options
author | Nils Adermann <naderman@naderman.de> | 2011-08-13 23:59:15 -0400 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2011-08-13 23:59:15 -0400 |
commit | 6fa83ba876c6ec780e51554a09b7937928e7ce0c (patch) | |
tree | 497054fca07bc6fb74613862fe7895c087fb9765 /phpBB/includes/template/compile.php | |
parent | 4754e11d67da22f2c4674a5f8d8c39af6a8e7ca1 (diff) | |
parent | 41de09e408bc314c3020084fb7c5ec4a4c7262b5 (diff) | |
download | forums-6fa83ba876c6ec780e51554a09b7937928e7ce0c.tar forums-6fa83ba876c6ec780e51554a09b7937928e7ce0c.tar.gz forums-6fa83ba876c6ec780e51554a09b7937928e7ce0c.tar.bz2 forums-6fa83ba876c6ec780e51554a09b7937928e7ce0c.tar.xz forums-6fa83ba876c6ec780e51554a09b7937928e7ce0c.zip |
Merge remote-tracking branch 'github-p/feature/template-engine' into develop
* github-p/feature/template-engine: (87 commits)
[feature/template-engine] Delete _get_locator function.
[feature/template-engine] Clean up template locator usage in bbcode.
[feature/template-engine] Need to call set_template on template.
[feature/template-engine] Update installer for template engine changes.
[feature/template-engine] Dependency inject locator into template.
[feature/template-engine] Delete useless code from set_template.
[feature/template-engine] Delete no longer used $template_filename property.
[feature/template-engine] Delete useless $template globalization.
[feature/template-engine] Use template engine class in bbcode class.
[feature/template-engine] Corrected an error message in template locator.
[feature/template-engine] Remaining documentation.
[feature/template-engine] More documentation for template class.
[feature/template-engine] Create load_and_render to reduce code duplication.
[feature/template-engine] Get rid of orig_tpl_* in template engine.
[feature/template-engine] Delete $style_name param from locator's set_custom_template.
[feature/template-engine] Add constructor to template locator.
[feature/template-engine] Factor template locator out of template class.
[feature/template-engine] Delete $files_template property.
[feature/template-engine] Rename is_absolute to phpbb_is_absolute.
[feature/template-engine] Test template DEFINE statements across files
...
Conflicts:
.gitignore
phpBB/includes/template.php
Diffstat (limited to 'phpBB/includes/template/compile.php')
-rw-r--r-- | phpBB/includes/template/compile.php | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php new file mode 100644 index 0000000000..8d8560ded5 --- /dev/null +++ b/phpBB/includes/template/compile.php @@ -0,0 +1,122 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2005 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +/** +* @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 +{ + /** + * Whether <!-- PHP --> tags are allowed + * + * @var bool + */ + private $allow_php; + + /** + * Constructor. + * + * @param bool @allow_php Whether PHP code will be allowed in templates (inline PHP code, PHP tag and INCLUDEPHP tag) + */ + public function __construct($allow_php) + { + $this->allow_php = $allow_php; + } + + /** + * 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, array('allow_php' => $this->allow_php)); + stream_copy_to_stream($source_stream, $dest_stream); + } +} |