mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-30 21:40:43 +02:00
[ticket/15214] Add event & functionality for assigning template event priority
Event added to allow template events to be assigned priority per extension, event location chosen so that it only fires once. Twig node event class refactored to allow template event priority assignment, compile calls are deferred until all locations are processed per extension namespace. Priority precedence mirrors Symfony priority, with higher numbers being placed at the beginning of the array. Duplicate priority assignment will currently have the later events compiled before the others. PHPBB3-15214
This commit is contained in:
@@ -18,14 +18,38 @@ class event extends \Twig\TokenParser\AbstractTokenParser
|
||||
/** @var \phpbb\template\twig\environment */
|
||||
protected $environment;
|
||||
|
||||
/** @var \phpbb\event\dispatcher_interface */
|
||||
protected $phpbb_dispatcher;
|
||||
|
||||
/** @var array */
|
||||
protected $template_event_priority_array;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \phpbb\template\twig\environment $environment
|
||||
*/
|
||||
public function __construct(\phpbb\template\twig\environment $environment)
|
||||
public function __construct(\phpbb\template\twig\environment $environment, \phpbb\event\dispatcher_interface $phpbb_dispatcher = null)
|
||||
{
|
||||
$this->environment = $environment;
|
||||
$this->phpbb_dispatcher = $phpbb_dispatcher;
|
||||
|
||||
$template_event_priority_array = [];
|
||||
|
||||
/**
|
||||
* Allow assigning priority to template events
|
||||
*
|
||||
* @event core.twig_tokenparser_constructor
|
||||
* @var array template_event_priority_array Array with template event priority assignments per extension namespace
|
||||
* @since 3.3.12-RC1
|
||||
*/
|
||||
if ($this->phpbb_dispatcher)
|
||||
{
|
||||
$vars = array('template_event_priority_array');
|
||||
extract($this->phpbb_dispatcher->trigger_event('core.twig_tokenparser_constructor', compact($vars)));
|
||||
}
|
||||
|
||||
$this->template_event_priority_array = $template_event_priority_array;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -42,7 +66,7 @@ class event extends \Twig\TokenParser\AbstractTokenParser
|
||||
$stream = $this->parser->getStream();
|
||||
$stream->expect(\Twig\Token::BLOCK_END_TYPE);
|
||||
|
||||
return new \phpbb\template\twig\node\event($expr, $this->environment, $token->getLine(), $this->getTag());
|
||||
return new \phpbb\template\twig\node\event($expr, $this->environment, $token->getLine(), $this->getTag(), $this->template_event_priority_array);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user