mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-12 22:38:52 +00: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
2 changed files with 78 additions and 30 deletions
|
@ -32,6 +32,13 @@ class phpbb_template_compile
|
||||||
*/
|
*/
|
||||||
private $filter_params;
|
private $filter_params;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of default parameters
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $default_filter_params;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* 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)
|
public function __construct($allow_php, $style_names, $locator, $phpbb_root_path, $extension_manager = null, $user = null)
|
||||||
{
|
{
|
||||||
$this->filter_params = array(
|
$this->filter_params = $this->default_filter_params = array(
|
||||||
'allow_php' => $allow_php,
|
'allow_php' => $allow_php,
|
||||||
'style_names' => $style_names,
|
'style_names' => $style_names,
|
||||||
'locator' => $locator,
|
'locator' => $locator,
|
||||||
'phpbb_root_path' => $phpbb_root_path,
|
'phpbb_root_path' => $phpbb_root_path,
|
||||||
'extension_manager' => $extension_manager,
|
'extension_manager' => $extension_manager,
|
||||||
'user' => $user,
|
'user' => $user,
|
||||||
'template_compile' => $this,
|
'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
|
* Compiles template in $source_file and writes compiled template to
|
||||||
* cache directory
|
* cache directory
|
||||||
|
|
|
@ -75,6 +75,14 @@ class phpbb_template_filter extends php_user_filter
|
||||||
*/
|
*/
|
||||||
private $allow_php;
|
private $allow_php;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether cleanup will be performed on resulting code, see compile()
|
||||||
|
* (Preserve whitespace)
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
private $cleanup = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resource locator.
|
* Resource locator.
|
||||||
*
|
*
|
||||||
|
@ -183,6 +191,7 @@ class phpbb_template_filter extends php_user_filter
|
||||||
$this->phpbb_root_path = $this->params['phpbb_root_path'];
|
$this->phpbb_root_path = $this->params['phpbb_root_path'];
|
||||||
$this->style_names = $this->params['style_names'];
|
$this->style_names = $this->params['style_names'];
|
||||||
$this->extension_manager = $this->params['extension_manager'];
|
$this->extension_manager = $this->params['extension_manager'];
|
||||||
|
$this->cleanup = $this->params['cleanup'];
|
||||||
if (isset($this->params['user']))
|
if (isset($this->params['user']))
|
||||||
{
|
{
|
||||||
$this->user = $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);
|
$data = preg_replace('~<!-- ENDPHP -->.*?$~', '', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if ($this->cleanup)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
|
||||||
Preserve whitespace.
|
Preserve whitespace.
|
||||||
PHP removes a newline after the closing tag (if it's there).
|
PHP removes a newline after the closing tag (if it's there).
|
||||||
This is by design:
|
This is by design:
|
||||||
|
|
||||||
http://www.php.net/manual/en/language.basic-syntax.phpmode.php
|
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.instruction-separation.php
|
||||||
|
|
||||||
|
|
||||||
Consider the following template:
|
Consider the following template:
|
||||||
|
|
||||||
<!-- IF condition -->
|
<!-- IF condition -->
|
||||||
some content
|
some content
|
||||||
<!-- ENDIF -->
|
<!-- ENDIF -->
|
||||||
|
|
||||||
If we were to simply preserve all whitespace, we could simply
|
If we were to simply preserve all whitespace, we could simply
|
||||||
replace all "?>" tags with "?>\n".
|
replace all "?>" tags with "?>\n".
|
||||||
Doing that, would add additional newlines to the compiled
|
Doing that, would add additional newlines to the compiled
|
||||||
template in place of the IF and ENDIF statements. These
|
template in place of the IF and ENDIF statements. These
|
||||||
newlines are unwanted (and one is conditional). The IF and
|
newlines are unwanted (and one is conditional). The IF and
|
||||||
ENDIF are usually on their own line for ease of reading.
|
ENDIF are usually on their own line for ease of reading.
|
||||||
|
|
||||||
This replacement preserves newlines only for statements that
|
This replacement preserves newlines only for statements that
|
||||||
are not the only statement on a line. It will NOT preserve
|
are not the only statement on a line. It will NOT preserve
|
||||||
newlines at the end of statements in the above example.
|
newlines at the end of statements in the above example.
|
||||||
It will preserve newlines in situations like:
|
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;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -995,8 +1008,14 @@ class phpbb_template_filter extends php_user_filter
|
||||||
$all_compiled = '';
|
$all_compiled = '';
|
||||||
foreach ($files as $file)
|
foreach ($files as $file)
|
||||||
{
|
{
|
||||||
|
$this->template_compile->set_filter_params(array(
|
||||||
|
'cleanup' => false,
|
||||||
|
));
|
||||||
|
|
||||||
$compiled = $this->template_compile->compile_file($file);
|
$compiled = $this->template_compile->compile_file($file);
|
||||||
|
|
||||||
|
$this->template_compile->reset_filter_params();
|
||||||
|
|
||||||
if ($compiled === false)
|
if ($compiled === false)
|
||||||
{
|
{
|
||||||
if ($this->user)
|
if ($this->user)
|
||||||
|
|
Loading…
Add table
Reference in a new issue