mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-08 16:45:19 +02:00
[ticket/11435] Create new template filter option (cleanup)
This allows us to only run cleanup on the last run of template compilation and not cleanup during event parsing PHPBB3-11435
This commit is contained in:
parent
f26257dc51
commit
c84fc97e90
@ -32,6 +32,13 @@ class phpbb_template_compile
|
||||
*/
|
||||
private $filter_params;
|
||||
|
||||
/**
|
||||
* Array of default parameters
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $default_filter_params;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
@ -44,17 +51,39 @@ class phpbb_template_compile
|
||||
*/
|
||||
public function __construct($allow_php, $style_names, $locator, $phpbb_root_path, $extension_manager = null, $user = null)
|
||||
{
|
||||
$this->filter_params = array(
|
||||
'allow_php' => $allow_php,
|
||||
'style_names' => $style_names,
|
||||
'locator' => $locator,
|
||||
$this->filter_params = $this->default_filter_params = array(
|
||||
'allow_php' => $allow_php,
|
||||
'style_names' => $style_names,
|
||||
'locator' => $locator,
|
||||
'phpbb_root_path' => $phpbb_root_path,
|
||||
'extension_manager' => $extension_manager,
|
||||
'user' => $user,
|
||||
'user' => $user,
|
||||
'template_compile' => $this,
|
||||
'cleanup' => true,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set filter parameters
|
||||
*
|
||||
* @param array $params Array of parameters (will be merged onto $this->filter_params)
|
||||
*/
|
||||
public function set_filter_params($params)
|
||||
{
|
||||
$this->filter_params = array_merge(
|
||||
$this->filter_params,
|
||||
$params
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset filter parameters to their default settings
|
||||
*/
|
||||
public function reset_filter_params()
|
||||
{
|
||||
$this->filter_params = $this->default_filter_params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compiles template in $source_file and writes compiled template to
|
||||
* cache directory
|
||||
|
@ -75,6 +75,14 @@ class phpbb_template_filter extends php_user_filter
|
||||
*/
|
||||
private $allow_php;
|
||||
|
||||
/**
|
||||
* Whether cleanup will be performed on resulting code, see compile()
|
||||
* (Preserve whitespace)
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
private $cleanup = true;
|
||||
|
||||
/**
|
||||
* Resource locator.
|
||||
*
|
||||
@ -183,6 +191,7 @@ class phpbb_template_filter extends php_user_filter
|
||||
$this->phpbb_root_path = $this->params['phpbb_root_path'];
|
||||
$this->style_names = $this->params['style_names'];
|
||||
$this->extension_manager = $this->params['extension_manager'];
|
||||
$this->cleanup = $this->params['cleanup'];
|
||||
if (isset($this->params['user']))
|
||||
{
|
||||
$this->user = $this->params['user'];
|
||||
@ -223,41 +232,45 @@ class phpbb_template_filter extends php_user_filter
|
||||
$data = preg_replace('~<!-- ENDPHP -->.*?$~', '', $data);
|
||||
}
|
||||
|
||||
/*
|
||||
if ($this->cleanup)
|
||||
{
|
||||
/*
|
||||
|
||||
Preserve whitespace.
|
||||
PHP removes a newline after the closing tag (if it's there).
|
||||
This is by design:
|
||||
Preserve whitespace.
|
||||
PHP removes a newline after the closing tag (if it's there).
|
||||
This is by design:
|
||||
|
||||
http://www.php.net/manual/en/language.basic-syntax.phpmode.php
|
||||
http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php
|
||||
http://www.php.net/manual/en/language.basic-syntax.phpmode.php
|
||||
http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php
|
||||
|
||||
|
||||
Consider the following template:
|
||||
Consider the following template:
|
||||
|
||||
<!-- IF condition -->
|
||||
some content
|
||||
<!-- ENDIF -->
|
||||
<!-- IF condition -->
|
||||
some content
|
||||
<!-- ENDIF -->
|
||||
|
||||
If we were to simply preserve all whitespace, we could simply
|
||||
replace all "?>" tags with "?>\n".
|
||||
Doing that, would add additional newlines to the compiled
|
||||
template in place of the IF and ENDIF statements. These
|
||||
newlines are unwanted (and one is conditional). The IF and
|
||||
ENDIF are usually on their own line for ease of reading.
|
||||
If we were to simply preserve all whitespace, we could simply
|
||||
replace all "?>" tags with "?>\n".
|
||||
Doing that, would add additional newlines to the compiled
|
||||
template in place of the IF and ENDIF statements. These
|
||||
newlines are unwanted (and one is conditional). The IF and
|
||||
ENDIF are usually on their own line for ease of reading.
|
||||
|
||||
This replacement preserves newlines only for statements that
|
||||
are not the only statement on a line. It will NOT preserve
|
||||
newlines at the end of statements in the above example.
|
||||
It will preserve newlines in situations like:
|
||||
This replacement preserves newlines only for statements that
|
||||
are not the only statement on a line. It will NOT preserve
|
||||
newlines at the end of statements in the above example.
|
||||
It will preserve newlines in situations like:
|
||||
|
||||
<!-- IF condition -->inline content<!-- ENDIF -->
|
||||
<!-- IF condition -->inline content<!-- ENDIF -->
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
$data = preg_replace('~(?<!^)(<\?php.+(?<!/\*\*/)\?>)$~m', "$1\n", $data);
|
||||
$data = str_replace('/**/?>', "?>\n", $data);
|
||||
$data = str_replace('?><?php', '', $data);
|
||||
}
|
||||
|
||||
$data = preg_replace('~(?<!^)(<\?php.+(?<!/\*\*/)\?>)$~m', "$1\n", $data);
|
||||
$data = str_replace('/**/?>', "?>\n", $data);
|
||||
$data = str_replace('?><?php', '', $data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
@ -995,8 +1008,14 @@ class phpbb_template_filter extends php_user_filter
|
||||
$all_compiled = '';
|
||||
foreach ($files as $file)
|
||||
{
|
||||
$this->template_compile->set_filter_params(array(
|
||||
'cleanup' => false,
|
||||
));
|
||||
|
||||
$compiled = $this->template_compile->compile_file($file);
|
||||
|
||||
$this->template_compile->reset_filter_params();
|
||||
|
||||
if ($compiled === false)
|
||||
{
|
||||
if ($this->user)
|
||||
|
Loading…
x
Reference in New Issue
Block a user