mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-10 05:18:52 +00:00
[ticket/12273] Allow multiple $vars lines
PHPBB3-12273
This commit is contained in:
parent
1a913d6e0f
commit
8ddc9ff185
5 changed files with 106 additions and 26 deletions
|
@ -302,25 +302,43 @@ class php_exporter
|
||||||
*/
|
*/
|
||||||
public function get_vars_from_array()
|
public function get_vars_from_array()
|
||||||
{
|
{
|
||||||
$vars_line = ltrim($this->file_lines[$this->current_event_line - 1], "\t");
|
$vars_array_line = 1;
|
||||||
if (strpos($vars_line, "\$vars = array('") !== 0 || substr($vars_line, -3) !== '\');')
|
$found_vars_array = false;
|
||||||
|
$vars_array = array();
|
||||||
|
while (ltrim($this->file_lines[$this->current_event_line - $vars_array_line], "\t") !== '*/')
|
||||||
{
|
{
|
||||||
throw new \LogicException('Can not find "$vars = array();"-line for event "' . $this->current_event . '" in file "' . $this->current_file . '"', 1);
|
$line = ltrim($this->file_lines[$this->current_event_line - $vars_array_line], "\t");
|
||||||
|
$match = array();
|
||||||
|
preg_match('#^\$vars (?:\+)?= array\(\'([a-zA-Z0-9_\' ,]+)\'\);$#', $line, $match);
|
||||||
|
|
||||||
|
if (isset($match[1]))
|
||||||
|
{
|
||||||
|
$found_vars_array = true;
|
||||||
|
if (strlen($match[1]) > 90)
|
||||||
|
{
|
||||||
|
throw new \LogicException('Should use multiple lines for $vars definition'
|
||||||
|
. ' for event "' . $this->current_event . '" in file "' . $this->current_file . '"', 1);
|
||||||
|
}
|
||||||
|
$vars_array = array_merge($vars_array, explode("', '", $match[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
$vars_array_line++;
|
||||||
|
if ($this->current_event_line - $vars_array_line === 0)
|
||||||
|
{
|
||||||
|
throw new \LogicException('Can not find "$vars = array();"-line for event "' . $this->current_event . '" in file "' . $this->current_file . '"', 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$vars_array = substr($vars_line, strlen("\$vars = array('"), 0 - strlen('\');'));
|
if (!$found_vars_array)
|
||||||
if ($vars_array === '')
|
|
||||||
{
|
{
|
||||||
throw new \LogicException('Found empty $vars array for event "' . $this->current_event . '" in file "' . $this->current_file . '"', 2);
|
throw new \LogicException('Can not find "$vars = array();"-line for event "' . $this->current_event . '" in file "' . $this->current_file . '"', 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
$vars_array = explode("', '", $vars_array);
|
|
||||||
|
|
||||||
foreach ($vars_array as $var)
|
foreach ($vars_array as $var)
|
||||||
{
|
{
|
||||||
if (!preg_match('#^([a-zA-Z_][a-zA-Z0-9_]*)$#', $var))
|
if (!preg_match('#^([a-zA-Z_][a-zA-Z0-9_]*)$#', $var))
|
||||||
{
|
{
|
||||||
throw new \LogicException('Found invalid var "' . $var . '" in array for event "' . $this->current_event . '" in file "' . $this->current_file . '"', 3);
|
throw new \LogicException('Found invalid var "' . $var . '" in array for event "' . $this->current_event . '" in file "' . $this->current_file . '"', 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,16 +5,9 @@
|
||||||
*
|
*
|
||||||
* @event duplicate.trigger
|
* @event duplicate.trigger
|
||||||
* @var int start Start item of this page
|
* @var int start Start item of this page
|
||||||
* @var int current_row_number Number of the post on this page
|
|
||||||
* @var int end Number of posts on this page
|
|
||||||
* @var array row Array with original post and user data
|
|
||||||
* @var array cp_row Custom profile field data of the poster
|
|
||||||
* @var array attachments List of attachments
|
|
||||||
* @var array user_poster_data Poster's data from user cache
|
|
||||||
* @var array post_row Template block array of the post
|
|
||||||
* @since 3.1.0-a3
|
* @since 3.1.0-a3
|
||||||
*/
|
*/
|
||||||
$vars = array('start', 'current_row_number', 'end', 'row', 'cp_row', 'attachments', 'user_poster_data', 'post_row');
|
$vars = array('start');
|
||||||
extract($phpbb_dispatcher->trigger_event('duplicate.trigger', compact($vars)));
|
extract($phpbb_dispatcher->trigger_event('duplicate.trigger', compact($vars)));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,10 +9,7 @@
|
||||||
* @var int end Number of posts on this page
|
* @var int end Number of posts on this page
|
||||||
* @var array row Array with original post and user data
|
* @var array row Array with original post and user data
|
||||||
* @var array cp_row Custom profile field data of the poster
|
* @var array cp_row Custom profile field data of the poster
|
||||||
* @var array attachments List of attachments
|
|
||||||
* @var array user_poster_data Poster's data from user cache
|
|
||||||
* @var array post_row Template block array of the post
|
|
||||||
* @since 3.1.0-a3
|
* @since 3.1.0-a3
|
||||||
*/
|
*/
|
||||||
$vars = array('start', 'current_row_number', 'end', 'row', 'cp_row', 'attachments', 'user_poster_data', 'post_row');
|
$vars = array('start', 'current_row_number', 'end', 'row', 'cp_row');
|
||||||
extract($phpbb_dispatcher->trigger_event('core.trigger', compact($vars)));
|
extract($phpbb_dispatcher->trigger_event('core.trigger', compact($vars)));
|
||||||
|
|
45
tests/event/fixtures/trigger_many_vars.test
Normal file
45
tests/event/fixtures/trigger_many_vars.test
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This event allows you to modify template variables for the posting screen
|
||||||
|
*
|
||||||
|
* @event core.posting_modify_template_vars
|
||||||
|
* @var array post_data Array with post data
|
||||||
|
* @var array moderators Array with forum moderators
|
||||||
|
* @var string mode What action to take if the form is submitted
|
||||||
|
* post|reply|quote|edit|delete|bump|smilies|popup
|
||||||
|
* @var string page_title Title of the mode page
|
||||||
|
* @var bool s_topic_icons Whether or not to show the topic icons
|
||||||
|
* @var string form_enctype If attachments are allowed for this form
|
||||||
|
* "multipart/form-data" or empty string
|
||||||
|
* @var string s_action The URL to submit the POST data to
|
||||||
|
* @var string s_hidden_fields Concatenated hidden input tags of posting form
|
||||||
|
* @var int post_id ID of the post
|
||||||
|
* @var int topic_id ID of the topic
|
||||||
|
* @var int forum_id ID of the forum
|
||||||
|
* @var bool submit Whether or not the form has been submitted
|
||||||
|
* @var bool preview Whether or not the post is being previewed
|
||||||
|
* @var bool save Whether or not a draft is being saved
|
||||||
|
* @var bool load Whether or not a draft is being loaded
|
||||||
|
* @var bool delete Whether or not the post is being deleted
|
||||||
|
* @var bool cancel Whether or not to cancel the form (returns to
|
||||||
|
* viewtopic or viewforum depending on if the user
|
||||||
|
* is posting a new topic or editing a post)
|
||||||
|
* @var array error Any error strings; a non-empty array aborts
|
||||||
|
* form submission.
|
||||||
|
* NOTE: Should be actual language strings, NOT
|
||||||
|
* language keys.
|
||||||
|
* @var bool refresh Whether or not to retain previously submitted data
|
||||||
|
* @var array page_data Posting page data that should be passed to the
|
||||||
|
* posting page via $template->assign_vars()
|
||||||
|
* @var object message_parser The message parser object
|
||||||
|
* @since 3.1-A1
|
||||||
|
* @change 3.1.0-b3 Added vars post_data, moderators, mode, page_title,
|
||||||
|
* s_topic_icons, form_enctype, s_action, s_hidden_fields,
|
||||||
|
* post_id, topic_id, forum_id, submit, preview, save, load,
|
||||||
|
* delete, cancel, refresh, error, page_data, message_parser
|
||||||
|
*/
|
||||||
|
$vars = array('post_data', 'moderators', 'mode', 'page_title', 's_topic_icons', 'form_enctype');
|
||||||
|
$vars += array('s_action', 's_hidden_fields', 'post_id', 'topic_id', 'forum_id', 'submit', 'preview');
|
||||||
|
$vars += array('save', 'load', 'delete', 'cancel', 'refresh', 'error', 'page_data', 'message_parser');
|
||||||
|
extract($phpbb_dispatcher->trigger_event('core.posting_modify_template_vars', compact($vars)));
|
|
@ -51,12 +51,30 @@ class phpbb_event_php_exporter_test extends phpbb_test_case
|
||||||
'core.trigger' => array(
|
'core.trigger' => array(
|
||||||
'event' => 'core.trigger',
|
'event' => 'core.trigger',
|
||||||
'file' => 'trigger.test',
|
'file' => 'trigger.test',
|
||||||
'arguments' => array('attachments', 'cp_row', 'current_row_number', 'end', 'post_row', 'row', 'start', 'user_poster_data'),
|
'arguments' => array('cp_row', 'current_row_number', 'end', 'row', 'start'),
|
||||||
'since' => '3.1.0-a3',
|
'since' => '3.1.0-a3',
|
||||||
'description' => 'Event after the post data has been assigned to the template',
|
'description' => 'Event after the post data has been assigned to the template',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'trigger_many_vars.test',
|
||||||
|
array(
|
||||||
|
'core.posting_modify_template_vars' => array(
|
||||||
|
'event' => 'core.posting_modify_template_vars',
|
||||||
|
'file' => 'trigger_many_vars.test',
|
||||||
|
'arguments' => array(
|
||||||
|
'cancel', 'delete', 'error', 'form_enctype', 'forum_id',
|
||||||
|
'load', 'message_parser', 'mode', 'moderators', 'page_data',
|
||||||
|
'page_title', 'post_data', 'post_id', 'preview', 'refresh',
|
||||||
|
's_action', 's_hidden_fields', 's_topic_icons', 'save',
|
||||||
|
'submit', 'topic_id',
|
||||||
|
),
|
||||||
|
'since' => '3.1.0-a1',
|
||||||
|
'description' => 'This event allows you to modify template variables for the posting screen',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
array(
|
array(
|
||||||
'none.test',
|
'none.test',
|
||||||
array(),
|
array(),
|
||||||
|
@ -317,6 +335,15 @@ class phpbb_event_php_exporter_test extends phpbb_test_case
|
||||||
static public function get_vars_from_array_throws_data()
|
static public function get_vars_from_array_throws_data()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
'/**',
|
||||||
|
'*/',
|
||||||
|
'$phpbb_dispatcher->dispatch(\'test\');',
|
||||||
|
),
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
),
|
||||||
array(
|
array(
|
||||||
array(
|
array(
|
||||||
'/**',
|
'/**',
|
||||||
|
@ -325,7 +352,7 @@ class phpbb_event_php_exporter_test extends phpbb_test_case
|
||||||
'$phpbb_dispatcher->dispatch(\'test\');',
|
'$phpbb_dispatcher->dispatch(\'test\');',
|
||||||
),
|
),
|
||||||
3,
|
3,
|
||||||
1,
|
3,
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array(
|
array(
|
||||||
|
@ -335,17 +362,17 @@ class phpbb_event_php_exporter_test extends phpbb_test_case
|
||||||
'$phpbb_dispatcher->dispatch(\'test\');',
|
'$phpbb_dispatcher->dispatch(\'test\');',
|
||||||
),
|
),
|
||||||
3,
|
3,
|
||||||
1,
|
3,
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array(
|
array(
|
||||||
'/**',
|
'/**',
|
||||||
'*/',
|
'*/',
|
||||||
'$vars = array(\'\');',
|
'$vars = array(\'test2\', \'\');',
|
||||||
'$phpbb_dispatcher->dispatch(\'test\');',
|
'$phpbb_dispatcher->dispatch(\'test\');',
|
||||||
),
|
),
|
||||||
3,
|
3,
|
||||||
2,
|
4,
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
array(
|
array(
|
||||||
|
|
Loading…
Add table
Reference in a new issue