mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-01 03:54:56 +02:00
Merge remote-tracking branch 'cyberalien/ticket/10665' into develop
* cyberalien/ticket/10665: [ticket/10665] Adding includejs to acp templates [ticket/10665] Solution for T_SUPER_TEMPLATE_PATH [ticket/10665] New test class for templates with tree [ticket/10665] Changing template->_js_include to public [ticket/10665] Moving filter parameters to one array [ticket/10665] INCLUDEJS unit test [ticket/10665] Changing template compiler test [ticket/10665] INCLUDEJS template changes [ticket/10665] INCLUDEJS template tag
This commit is contained in:
commit
9a075e905d
@ -39,7 +39,8 @@
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_JQUERY_FALLBACK --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
<script type="text/javascript" src="{T_ASSETS_PATH}/javascript/core.js"></script>
|
||||
<script type="text/javascript" src="style/ajax.js"></script>
|
||||
<!-- INCLUDEJS ajax.js -->
|
||||
{SCRIPTS}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4770,7 +4770,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0
|
||||
'T_ASSETS_PATH' => "{$web_path}assets",
|
||||
'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/theme',
|
||||
'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template',
|
||||
'T_SUPER_TEMPLATE_PATH' => ($user->theme['style_parent_id']) ? "{$web_path}styles/" . rawurlencode($user->theme['style_parent_tree']) . '/template' : "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template',
|
||||
'T_SUPER_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template',
|
||||
'T_IMAGES_PATH' => "{$web_path}images/",
|
||||
'T_SMILIES_PATH' => "{$web_path}{$config['smilies_path']}/",
|
||||
'T_AVATAR_PATH' => "{$web_path}{$config['avatar_path']}/",
|
||||
|
@ -288,7 +288,7 @@ class phpbb_style_template
|
||||
return new phpbb_style_template_renderer_include($output_file, $this);
|
||||
}
|
||||
|
||||
$compile = new phpbb_style_template_compile($this->config['tpl_allow_php']);
|
||||
$compile = new phpbb_style_template_compile($this->config['tpl_allow_php'], $this->locator, $this->phpbb_root_path);
|
||||
|
||||
if ($compile->compile_file_to_file($source_file, $output_file) !== false)
|
||||
{
|
||||
@ -492,4 +492,23 @@ class phpbb_style_template
|
||||
// use resource locator to find files
|
||||
return $this->locator->get_first_file_location($templates, $return_default, $return_full_path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Include JS file
|
||||
*
|
||||
* @param string $file file name
|
||||
* @param bool $locate True if file needs to be located
|
||||
*/
|
||||
public function _js_include($file, $locate = false)
|
||||
{
|
||||
// Locate file
|
||||
if ($locate)
|
||||
{
|
||||
$file = $this->locator->get_first_file_location(array($file), true, true);
|
||||
}
|
||||
|
||||
// Add HTML code
|
||||
$code = '<script src="' . htmlspecialchars($file) . '"></script>';
|
||||
$this->context->append_var('SCRIPTS', $code);
|
||||
}
|
||||
}
|
||||
|
@ -26,20 +26,26 @@ stream_filter_register('phpbb_template', 'phpbb_style_template_filter');
|
||||
class phpbb_style_template_compile
|
||||
{
|
||||
/**
|
||||
* Whether <!-- PHP --> tags are allowed
|
||||
* Array of parameters to forward to template filter
|
||||
*
|
||||
* @var bool
|
||||
* @var array
|
||||
*/
|
||||
private $allow_php;
|
||||
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)
|
||||
public function __construct($allow_php, $locator, $phpbb_root_path)
|
||||
{
|
||||
$this->allow_php = $allow_php;
|
||||
$this->filter_params = array(
|
||||
'allow_php' => $allow_php,
|
||||
'locator' => $locator,
|
||||
'phpbb_root_path' => $phpbb_root_path
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -116,7 +122,7 @@ class phpbb_style_template_compile
|
||||
*/
|
||||
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_filter_append($source_stream, 'phpbb_template', null, $this->filter_params);
|
||||
stream_copy_to_stream($source_stream, $dest_stream);
|
||||
}
|
||||
}
|
||||
|
@ -75,6 +75,18 @@ class phpbb_style_template_filter extends php_user_filter
|
||||
*/
|
||||
private $allow_php;
|
||||
|
||||
/**
|
||||
* Resource locator.
|
||||
*
|
||||
* @var phpbb_template_locator
|
||||
*/
|
||||
private $locator;
|
||||
|
||||
/**
|
||||
* @var string phpBB root path
|
||||
*/
|
||||
private $phpbb_root_path;
|
||||
|
||||
/**
|
||||
* Stream filter
|
||||
*
|
||||
@ -126,14 +138,16 @@ class phpbb_style_template_filter extends php_user_filter
|
||||
/**
|
||||
* Initializer, called on creation.
|
||||
*
|
||||
* Get the allow_php option from params, which is passed
|
||||
* to stream_filter_append.
|
||||
* Get the allow_php option, root directory and locator from params,
|
||||
* which are passed to stream_filter_append.
|
||||
*/
|
||||
public function onCreate()
|
||||
{
|
||||
$this->chunk = '';
|
||||
$this->in_php = false;
|
||||
$this->allow_php = $this->params['allow_php'];
|
||||
$this->locator = $this->params['locator'];
|
||||
$this->phpbb_root_path = $this->params['phpbb_root_path'];
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -281,6 +295,10 @@ class phpbb_style_template_filter extends php_user_filter
|
||||
return ($this->allow_php) ? '<?php ' . $this->compile_tag_include_php($matches[2]) . ' ?>' : '';
|
||||
break;
|
||||
|
||||
case 'INCLUDEJS':
|
||||
return '<?php ' . $this->compile_tag_include_js($matches[2]) . ' ?>';
|
||||
break;
|
||||
|
||||
case 'PHP':
|
||||
if ($this->allow_php)
|
||||
{
|
||||
@ -856,6 +874,45 @@ class phpbb_style_template_filter extends php_user_filter
|
||||
return $tokens;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile INCLUDEJS tag
|
||||
*
|
||||
* @param string $tag_args Expression given with INCLUDEJS in source template
|
||||
* @return string compiled template code
|
||||
*/
|
||||
private function compile_tag_include_js($tag_args)
|
||||
{
|
||||
// Process dynamic includes
|
||||
if ($tag_args[0] == '{')
|
||||
{
|
||||
$var = $this->get_varref($tag_args, $is_expr);
|
||||
if (!$is_expr)
|
||||
{
|
||||
return " \$_template->_js_include($var, true);";
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
// Locate file
|
||||
$filename = $this->locator->get_first_file_location(array($tag_args), false, true);
|
||||
|
||||
if ($filename === false)
|
||||
{
|
||||
// File does not exist, find it during run time
|
||||
return ' $_template->_js_include(\'' . addslashes($tag_args) . '\', true); ';
|
||||
}
|
||||
|
||||
if (substr($filename, 0, strlen($this->phpbb_root_path)) != $this->phpbb_root_path)
|
||||
{
|
||||
// Absolute path, include as is
|
||||
return ' $_template->_js_include(\'' . addslashes($filename) . '\', false); ';
|
||||
}
|
||||
|
||||
// Relative path, remove root path from it
|
||||
$filename = substr($filename, strlen($this->phpbb_root_path));
|
||||
return ' global $phpbb_root_path; $_template->_js_include($phpbb_root_path . \'' . addslashes($filename) . '\', false); ';
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a reference to the given variable inside the given (possibly nested)
|
||||
* block namespace. This is a string of the form:
|
||||
|
@ -52,7 +52,8 @@
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_JQUERY_FALLBACK --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
<script type="text/javascript" src="{T_ASSETS_PATH}/javascript/core.js"></script>
|
||||
<script type="text/javascript" src="{T_TEMPLATE_PATH}/ajax.js"></script>
|
||||
<!-- INCLUDEJS template/ajax.js -->
|
||||
{SCRIPTS}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_JQUERY_FALLBACK --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
{SCRIPTS}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_JQUERY_FALLBACK --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
{SCRIPTS}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_JQUERY_FALLBACK --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
{SCRIPTS}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -16,7 +16,7 @@ class phpbb_template_template_compile_test extends phpbb_test_case
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->template_compile = new phpbb_style_template_compile(false);
|
||||
$this->template_compile = new phpbb_style_template_compile(false, null, '');
|
||||
$this->template_path = dirname(__FILE__) . '/templates';
|
||||
}
|
||||
|
||||
|
31
tests/template/template_includejs_test.php
Normal file
31
tests/template/template_includejs_test.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2011 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/template_test_case_with_tree.php';
|
||||
|
||||
class phpbb_template_template_includejs_test extends phpbb_template_template_test_case_with_tree
|
||||
{
|
||||
public function test_includejs_compilation()
|
||||
{
|
||||
// Reset the engine state
|
||||
$this->setup_engine();
|
||||
|
||||
// Prepare correct result
|
||||
$dir = dirname(__FILE__);
|
||||
$scripts = array(
|
||||
'<script src="' . $dir . '/templates/parent_and_child.html"></script>',
|
||||
'<script src="' . $dir . '/parent_templates/parent_only.html"></script>',
|
||||
'<script src="' . $dir . '/templates/child_only.html"></script>'
|
||||
);
|
||||
|
||||
// Run test
|
||||
$cache_file = $this->template->cachepath . 'includejs.html.php';
|
||||
$this->run_template('includejs.html', array('PARENT' => 'parent_only.html'), array(), array(), implode('', $scripts), $cache_file);
|
||||
}
|
||||
}
|
@ -7,9 +7,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/template_test_case.php';
|
||||
require_once dirname(__FILE__) . '/template_test_case_with_tree.php';
|
||||
|
||||
class phpbb_template_template_inheritance_test extends phpbb_template_template_test_case
|
||||
class phpbb_template_template_inheritance_test extends phpbb_template_template_test_case_with_tree
|
||||
{
|
||||
/**
|
||||
* @todo put test data into templates/xyz.test
|
||||
@ -61,20 +61,4 @@ class phpbb_template_template_inheritance_test extends phpbb_template_template_t
|
||||
|
||||
$this->run_template($file, $vars, $block_vars, $destroy, $expected, $cache_file);
|
||||
}
|
||||
|
||||
protected function setup_engine(array $new_config = array())
|
||||
{
|
||||
global $phpbb_root_path, $phpEx, $user;
|
||||
|
||||
$defaults = $this->config_defaults();
|
||||
$config = new phpbb_config(array_merge($defaults, $new_config));
|
||||
|
||||
$this->template_path = dirname(__FILE__) . '/templates';
|
||||
$this->parent_template_path = dirname(__FILE__) . '/parent_templates';
|
||||
$this->style_resource_locator = new phpbb_style_resource_locator();
|
||||
$this->style_provider = new phpbb_style_path_provider();
|
||||
$this->template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, $this->style_provider);
|
||||
$this->style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, $this->style_provider, $this->template);
|
||||
$this->style->set_custom_style('tests', array($this->template_path, $this->parent_template_path), '');
|
||||
}
|
||||
}
|
||||
|
@ -7,9 +7,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/template_test_case.php';
|
||||
require_once dirname(__FILE__) . '/template_test_case_with_tree.php';
|
||||
|
||||
class phpbb_template_template_locate_test extends phpbb_template_template_test_case
|
||||
class phpbb_template_template_locate_test extends phpbb_template_template_test_case_with_tree
|
||||
{
|
||||
public function template_data()
|
||||
{
|
||||
@ -65,20 +65,4 @@ class phpbb_template_template_locate_test extends phpbb_template_template_test_c
|
||||
$result = $this->template->locate($files, $return_default, $return_full_path);
|
||||
$this->assertSame($expected, $result);
|
||||
}
|
||||
|
||||
protected function setup_engine(array $new_config = array())
|
||||
{
|
||||
global $phpbb_root_path, $phpEx, $user;
|
||||
|
||||
$defaults = $this->config_defaults();
|
||||
$config = new phpbb_config(array_merge($defaults, $new_config));
|
||||
|
||||
$this->template_path = dirname(__FILE__) . '/templates';
|
||||
$this->parent_template_path = dirname(__FILE__) . '/parent_templates';
|
||||
$this->style_resource_locator = new phpbb_style_resource_locator();
|
||||
$this->style_provider = new phpbb_style_path_provider();
|
||||
$this->template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, $this->style_provider);
|
||||
$this->style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, $this->style_provider, $this->template);
|
||||
$this->style->set_custom_style('tests', array($this->template_path, $this->parent_template_path), '');
|
||||
}
|
||||
}
|
||||
|
29
tests/template/template_test_case_with_tree.php
Normal file
29
tests/template/template_test_case_with_tree.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2011 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/template_test_case.php';
|
||||
|
||||
class phpbb_template_template_test_case_with_tree extends phpbb_template_template_test_case
|
||||
{
|
||||
protected function setup_engine(array $new_config = array())
|
||||
{
|
||||
global $phpbb_root_path, $phpEx, $user;
|
||||
|
||||
$defaults = $this->config_defaults();
|
||||
$config = new phpbb_config(array_merge($defaults, $new_config));
|
||||
|
||||
$this->template_path = dirname(__FILE__) . '/templates';
|
||||
$this->parent_template_path = dirname(__FILE__) . '/parent_templates';
|
||||
$this->style_resource_locator = new phpbb_style_resource_locator();
|
||||
$this->style_provider = new phpbb_style_path_provider();
|
||||
$this->template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, $this->style_provider);
|
||||
$this->style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $this->style_resource_locator, $this->style_provider, $this->template);
|
||||
$this->style->set_custom_style('tests', array($this->template_path, $this->parent_template_path), '');
|
||||
}
|
||||
}
|
5
tests/template/templates/includejs.html
Normal file
5
tests/template/templates/includejs.html
Normal file
@ -0,0 +1,5 @@
|
||||
<!-- INCLUDEJS parent_and_child.html -->
|
||||
<!-- INCLUDEJS {PARENT} -->
|
||||
<!-- DEFINE $TEST = 'child_only.html' -->
|
||||
<!-- INCLUDEJS {$TEST} -->
|
||||
{SCRIPTS}
|
Loading…
x
Reference in New Issue
Block a user