aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/includes/style/style.php2
-rw-r--r--phpBB/includes/template/template.php7
-rw-r--r--phpBB/includes/template/twig/node/begin.php34
-rw-r--r--phpBB/includes/template/twig/twig.php57
-rw-r--r--tests/template/template_test_case.php35
5 files changed, 72 insertions, 63 deletions
diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php
index 5aeeac40e4..493c4512a6 100644
--- a/phpBB/includes/style/style.php
+++ b/phpBB/includes/style/style.php
@@ -160,7 +160,7 @@ class phpbb_style
$this->template->set_style_names($names, $appended_paths);
}
- $this->template->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $name) . '_';
+ //$this->template->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $name) . '_';
return true;
}
diff --git a/phpBB/includes/template/template.php b/phpBB/includes/template/template.php
index 5dadd34084..15f0b6ee60 100644
--- a/phpBB/includes/template/template.php
+++ b/phpBB/includes/template/template.php
@@ -130,4 +130,11 @@ interface phpbb_template
* @return bool false on error, true on success
*/
public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert');
+
+ /**
+ * Clear the cache
+ *
+ * @return phpbb_template
+ */
+ public function clear_cache();
}
diff --git a/phpBB/includes/template/twig/node/begin.php b/phpBB/includes/template/twig/node/begin.php
index 4222295d26..3c1ce1b89b 100644
--- a/phpBB/includes/template/twig/node/begin.php
+++ b/phpBB/includes/template/twig/node/begin.php
@@ -32,20 +32,36 @@ class phpbb_template_twig_node_begin extends Twig_Node
;
$compiler
- ->write("foreach (\$parent['" . $this->getAttribute('beginName') . "'] as \$" . $this->getAttribute('beginName') . ") {\n")
- ->indent()
- // Set up $context correctly so that Twig can get the correct data with $this->getAttribute
- ->write("\$this->getEnvironment()->context_recursive_loop_builder(\$" . $this->getAttribute('beginName') . ", \$phpbb_blocks, \$context);\n")
+ ->write("if (!empty(\$parent['" . $this->getAttribute('beginName') . "'])) {\n")
+ ->indent()
+ ->write("foreach (\$parent['" . $this->getAttribute('beginName') . "'] as \$" . $this->getAttribute('beginName') . ") {\n")
+ ->indent()
+ // Set up $context correctly so that Twig can get the correct data with $this->getAttribute
+ ->write("\$this->getEnvironment()->context_recursive_loop_builder(\$" . $this->getAttribute('beginName') . ", \$phpbb_blocks, \$context);\n")
- // We store the parent so that we can do this recursively
- ->write("\$parent = \$" . $this->getAttribute('beginName') . ";\n")
+ // We store the parent so that we can do this recursively
+ ->write("\$parent = \$" . $this->getAttribute('beginName') . ";\n")
;
$compiler->subcompile($this->getNode('body'));
- $compiler
- ->outdent()
- ->write("}\n")
+ $compiler
+ ->outdent()
+ ->write("}\n")
+ ;
+
+ if (null !== $this->getNode('else')) {
+ $compiler
+ ->write("} else {\n")
+ ->indent()
+ ->subcompile($this->getNode('else'))
+ ->outdent()
+ ;
+ }
+
+ $compiler
+ ->outdent()
+ ->write("}\n")
// Remove the last item from the blocks storage as we've completed iterating over them all
->write("array_pop(\$phpbb_blocks);\n")
diff --git a/phpBB/includes/template/twig/twig.php b/phpBB/includes/template/twig/twig.php
index c894fb5567..e2c9afbc78 100644
--- a/phpBB/includes/template/twig/twig.php
+++ b/phpBB/includes/template/twig/twig.php
@@ -114,10 +114,6 @@ class phpbb_template_twig implements phpbb_template
// Initiate the loader, __main__ namespace paths will be setup later in set_style_names()
$loader = new Twig_Loader_Filesystem('');
- // Add admin namespace
- // @todo use phpbb_admin path
- $loader->addPath($this->phpbb_root_path . 'adm/style/', 'admin');
-
$this->twig = new phpbb_template_twig_environment($loader, array(
'cache' => $this->cachepath,
'debug' => true, // @todo
@@ -133,10 +129,7 @@ class phpbb_template_twig implements phpbb_template
// Clear previous cache files (while WIP)
// @todo remove
- if (is_dir($this->cachepath))
- {
- $this->twig->clearCacheFiles();
- }
+ $this->clear_cache();
$this->twig->addExtension(new phpbb_template_twig_extension);
@@ -146,6 +139,21 @@ class phpbb_template_twig implements phpbb_template
}
/**
+ * Clear the cache
+ *
+ * @return phpbb_template
+ */
+ public function clear_cache()
+ {
+ if (is_dir($this->cachepath))
+ {
+ $this->twig->clearCacheFiles();
+ }
+
+ return $this;
+ }
+
+ /**
* Sets the template filenames for handles.
*
* @param array $filename_array Should be a hash of handle => filename pairs.
@@ -177,6 +185,10 @@ class phpbb_template_twig implements phpbb_template
{
$this->twig->getLoader()->setPaths($style_paths, 'core');
+ // Add admin namespace
+ // @todo use phpbb_admin path
+ $loader->addPath($this->phpbb_root_path . 'adm/style/', 'admin');
+
// Add all namespaces for all extensions
if ($this->extension_manager instanceof phpbb_extension_manager)
{
@@ -415,25 +427,28 @@ class phpbb_template_twig implements phpbb_template
$vars = array();
// Work-around for now
- foreach ($this->user->lang as $key => $value)
+ if (!empty($this->user->lang))
{
- if (!is_string($value))
+ foreach ($this->user->lang as $key => $value)
{
- continue;
+ if (!is_string($value))
+ {
+ continue;
+ }
+
+ $vars['L_' . strtoupper($key)] = $value;
+ $vars['LA_' . strtoupper($key)] = addslashes($value);
}
- $vars['L_' . strtoupper($key)] = $value;
- $vars['LA_' . strtoupper($key)] = addslashes($value);
+ $vars = array_merge(
+ $vars,
+ $this->context->get_rootref(),
+ array(
+ '_phpbb_blocks' => $this->context->get_tpldata(),
+ )
+ );
}
- $vars = array_merge(
- $vars,
- $this->context->get_rootref(),
- array(
- '_phpbb_blocks' => $this->context->get_tpldata(),
- )
- );
-
// Must do this so that <!-- IF .blah --> works correctly
// (only for the base loops, the rest are properly handled by the begin node)
foreach ($this->context->get_tpldata() as $block_name => $block_values)
diff --git a/tests/template/template_test_case.php b/tests/template/template_test_case.php
index e39896b970..5ff15fff53 100644
--- a/tests/template/template_test_case.php
+++ b/tests/template/template_test_case.php
@@ -77,32 +77,15 @@ class phpbb_template_template_test_case extends phpbb_test_case
// Test the engine can be used
$this->setup_engine();
- $template_cache_dir = dirname($this->template->cachepath);
- if (!is_writable($template_cache_dir))
- {
- $this->markTestSkipped("Template cache directory ({$template_cache_dir}) is not writable.");
- }
-
- foreach (glob($this->template->cachepath . '*') as $file)
- {
- unlink($file);
- }
-
- $this->setup_engine();
+ $this->template->clear_cache();
}
protected function tearDown()
{
- if (is_object($this->template))
- {
- foreach (glob($this->template->cachepath . '*') as $file)
- {
- unlink($file);
- }
- }
+ $this->template->clear_cache();
}
- protected function run_template($file, array $vars, array $block_vars, array $destroy, $expected, $cache_file)
+ protected function run_template($file, array $vars, array $block_vars, array $destroy, $expected)
{
$this->template->set_filenames(array('test' => $file));
$this->template->assign_vars($vars);
@@ -123,22 +106,10 @@ class phpbb_template_template_test_case extends phpbb_test_case
try
{
$this->assertEquals($expected, $this->display('test'), "Testing $file");
- $this->assertFileExists($cache_file);
}
catch (ErrorException $e)
{
- if (file_exists($cache_file))
- {
- copy($cache_file, str_replace('ctpl_', 'tests_ctpl_', $cache_file));
- }
throw $e;
}
-
- // For debugging.
- // When testing eval path the cache file may not exist.
- if (self::PRESERVE_CACHE && file_exists($cache_file))
- {
- copy($cache_file, str_replace('ctpl_', 'tests_ctpl_', $cache_file));
- }
}
}