1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-06-10 08:25:42 +02:00

[ticket/14457] Uses a random placeholder to inject css and js

PHPBB3-14457
This commit is contained in:
Tristan Darricau 2016-02-05 20:30:02 +01:00
parent d0ce6a18df
commit d34ffda9c1
2 changed files with 17 additions and 26 deletions

View File

@ -19,10 +19,7 @@ namespace phpbb\template\twig;
class definition
{
/** @var array **/
protected $definitions = array(
'SCRIPTS' => '__SCRIPTS_PLACEHOLDER__',
'STYLESHEETS' => '__STYLESHEETS_PLACEHOLDER__'
);
protected $definitions = array();
/**
* Get a DEFINE'd variable

View File

@ -195,9 +195,7 @@ class environment extends \Twig_Environment
*/
public function render($name, array $context = [])
{
$output = parent::render($name, $context);
return $this->inject_assets($output);
return $this->display_with_assets($name, $context);
}
/**
@ -205,26 +203,22 @@ class environment extends \Twig_Environment
*/
public function display($name, array $context = [])
{
$level = ob_get_level();
ob_start();
try
{
parent::display($name, $context);
}
catch (\Exception $e)
{
while (ob_get_level() > $level)
{
ob_end_clean();
echo $this->display_with_assets($name, $context);
}
throw $e;
}
/**
* {@inheritdoc}
*/
private function display_with_assets($name, array $context = [])
{
$placeholder_salt = unique_id();
$output = ob_get_clean();
$context['definition']->set('SCRIPTS', '__SCRIPTS_'.$placeholder_salt.'__');
$context['definition']->set('STYLESHEETS', '__STYLESHEETS_'.$placeholder_salt.'__');
echo $this->inject_assets($output);
$output = parent::render($name, $context);
return $this->inject_assets($output, $placeholder_salt);
}
/**
@ -234,10 +228,10 @@ class environment extends \Twig_Environment
*
* @return string
*/
private function inject_assets($output)
private function inject_assets($output, $placeholder_salt)
{
$output = str_replace('__STYLESHEETS_PLACEHOLDER__', $this->assets_bag->get_stylesheets_content(), $output);
$output = str_replace('__SCRIPTS_PLACEHOLDER__', $this->assets_bag->get_scripts_content(), $output);
$output = str_replace('__SCRIPTS_'.$placeholder_salt.'__', $this->assets_bag->get_stylesheets_content(), $output);
$output = str_replace('__STYLESHEETS_'.$placeholder_salt.'__', $this->assets_bag->get_scripts_content(), $output);
return $output;
}