aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/style/template_compile.php
diff options
context:
space:
mode:
authorIgor Wiedler <igor@wiedler.ch>2012-03-31 17:22:54 +0200
committerIgor Wiedler <igor@wiedler.ch>2012-03-31 17:22:54 +0200
commit0ae491c5fa9228304e17431ea7aa8ba9303cc193 (patch)
tree9d3fcccb13d8bda12ae7f0dec3321c7375d8e621 /phpBB/includes/style/template_compile.php
parente7a4437c1bccace4a0637241a8f386e686d9c3fb (diff)
parent5d07b16ec647f51d51504cf9d6a0861a975ceb8e (diff)
downloadforums-0ae491c5fa9228304e17431ea7aa8ba9303cc193.tar
forums-0ae491c5fa9228304e17431ea7aa8ba9303cc193.tar.gz
forums-0ae491c5fa9228304e17431ea7aa8ba9303cc193.tar.bz2
forums-0ae491c5fa9228304e17431ea7aa8ba9303cc193.tar.xz
forums-0ae491c5fa9228304e17431ea7aa8ba9303cc193.zip
Merge remote-tracking branch 'cyberalien/feature/merging-style-components' into develop
* cyberalien/feature/merging-style-components: (31 commits) [feature/merging-style-components] Fix back link on install page [feature/merging-style-components] Fix for unit tests [feature/merging-style-components] Moving template initialization out of style [feature/merging-style-components] Renaming "delete" to "uninstall" for styles [feature/merging-style-components] Initializing locator and provider separately [feature/merging-style-components] Fixing few errors in acp_styles [feature/merging-style-components] Fix notices in acp_styles [feature/merging-style-components] Updating styles in coding guidelines [feature/merging-style-components] Changing acp_styles text [feature/merging-style-components] Updating test cases [feature/merging-style-components] Updating style initialization [feature/merging-style-components] Changing style class [feature/merging-style-components] Changing template class [feature/merging-style-components] Changing resource locator [feature/merging-style-components] Changing path provider [feature/merging-style-components] Renaming style locator [feature/merging-style-components] Changing $style to $style_id [feature/merging-style-components] Creating style class [feature/merging-style-components] New acp_styles template [feature/merging-style-components] New acp_styles ...
Diffstat (limited to 'phpBB/includes/style/template_compile.php')
-rw-r--r--phpBB/includes/style/template_compile.php122
1 files changed, 122 insertions, 0 deletions
diff --git a/phpBB/includes/style/template_compile.php b/phpBB/includes/style/template_compile.php
new file mode 100644
index 0000000000..3ef3fffc00
--- /dev/null
+++ b/phpBB/includes/style/template_compile.php
@@ -0,0 +1,122 @@
+<?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_style_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_style_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);
+ }
+}