mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
Merge branch '3.1.x'
This commit is contained in:
commit
5f18cf4cfb
4 changed files with 203 additions and 21 deletions
|
@ -18,15 +18,19 @@ if (php_sapi_name() != 'cli')
|
||||||
|
|
||||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||||
$phpbb_root_path = __DIR__ . '/../';
|
$phpbb_root_path = __DIR__ . '/../';
|
||||||
|
define('IN_PHPBB', true);
|
||||||
|
|
||||||
function usage()
|
function usage()
|
||||||
{
|
{
|
||||||
echo "Usage: export_events_for_wiki.php COMMAND [EXTENSION]\n";
|
echo "Usage: export_events_for_wiki.php COMMAND [VERSION] [EXTENSION]\n";
|
||||||
echo "\n";
|
echo "\n";
|
||||||
echo "COMMAND:\n";
|
echo "COMMAND:\n";
|
||||||
echo " all:\n";
|
echo " all:\n";
|
||||||
echo " Generate the complete wikipage for https://wiki.phpbb.com/Event_List\n";
|
echo " Generate the complete wikipage for https://wiki.phpbb.com/Event_List\n";
|
||||||
echo "\n";
|
echo "\n";
|
||||||
|
echo " diff:\n";
|
||||||
|
echo " Generate the Event Diff for the release highlights\n";
|
||||||
|
echo "\n";
|
||||||
echo " php:\n";
|
echo " php:\n";
|
||||||
echo " Generate the PHP event section of Event_List\n";
|
echo " Generate the PHP event section of Event_List\n";
|
||||||
echo "\n";
|
echo "\n";
|
||||||
|
@ -36,6 +40,9 @@ function usage()
|
||||||
echo " styles:\n";
|
echo " styles:\n";
|
||||||
echo " Generate the Styles Template event section of Event_List\n";
|
echo " Generate the Styles Template event section of Event_List\n";
|
||||||
echo "\n";
|
echo "\n";
|
||||||
|
echo "VERSION (diff only):\n";
|
||||||
|
echo " Filter events (minimum version)\n";
|
||||||
|
echo "\n";
|
||||||
echo "EXTENSION (Optional):\n";
|
echo "EXTENSION (Optional):\n";
|
||||||
echo " If not given, only core events will be exported.\n";
|
echo " If not given, only core events will be exported.\n";
|
||||||
echo " Otherwise only events from the extension will be exported.\n";
|
echo " Otherwise only events from the extension will be exported.\n";
|
||||||
|
@ -55,20 +62,32 @@ validate_argument_count($argc, 1);
|
||||||
|
|
||||||
$action = $argv[1];
|
$action = $argv[1];
|
||||||
$extension = isset($argv[2]) ? $argv[2] : null;
|
$extension = isset($argv[2]) ? $argv[2] : null;
|
||||||
|
$min_version = null;
|
||||||
require __DIR__ . '/../phpbb/event/php_exporter.' . $phpEx;
|
require __DIR__ . '/../phpbb/event/php_exporter.' . $phpEx;
|
||||||
require __DIR__ . '/../phpbb/event/md_exporter.' . $phpEx;
|
require __DIR__ . '/../phpbb/event/md_exporter.' . $phpEx;
|
||||||
|
require __DIR__ . '/../includes/functions.' . $phpEx;
|
||||||
require __DIR__ . '/../phpbb/event/recursive_event_filter_iterator.' . $phpEx;
|
require __DIR__ . '/../phpbb/event/recursive_event_filter_iterator.' . $phpEx;
|
||||||
require __DIR__ . '/../phpbb/recursive_dot_prefix_filter_iterator.' . $phpEx;
|
require __DIR__ . '/../phpbb/recursive_dot_prefix_filter_iterator.' . $phpEx;
|
||||||
|
|
||||||
switch ($action)
|
switch ($action)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
case 'diff':
|
||||||
|
echo '== Event changes ==' . "\n";
|
||||||
|
$min_version = $extension;
|
||||||
|
$extension = isset($argv[3]) ? $argv[3] : null;
|
||||||
|
|
||||||
case 'all':
|
case 'all':
|
||||||
|
if ($action === 'all')
|
||||||
|
{
|
||||||
echo '__FORCETOC__' . "\n";
|
echo '__FORCETOC__' . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
case 'php':
|
case 'php':
|
||||||
$exporter = new \phpbb\event\php_exporter($phpbb_root_path, $extension);
|
$exporter = new \phpbb\event\php_exporter($phpbb_root_path, $extension, $min_version);
|
||||||
$exporter->crawl_phpbb_directory_php();
|
$exporter->crawl_phpbb_directory_php();
|
||||||
echo $exporter->export_events_for_wiki();
|
echo $exporter->export_events_for_wiki($action);
|
||||||
|
|
||||||
if ($action === 'php')
|
if ($action === 'php')
|
||||||
{
|
{
|
||||||
|
@ -78,9 +97,16 @@ switch ($action)
|
||||||
// no break;
|
// no break;
|
||||||
|
|
||||||
case 'styles':
|
case 'styles':
|
||||||
$exporter = new \phpbb\event\md_exporter($phpbb_root_path, $extension);
|
$exporter = new \phpbb\event\md_exporter($phpbb_root_path, $extension, $min_version);
|
||||||
|
if ($min_version && $action === 'diff')
|
||||||
|
{
|
||||||
|
$exporter->crawl_eventsmd('docs/events.md', 'styles');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$exporter->crawl_phpbb_directory_styles('docs/events.md');
|
$exporter->crawl_phpbb_directory_styles('docs/events.md');
|
||||||
echo $exporter->export_events_for_wiki();
|
}
|
||||||
|
echo $exporter->export_events_for_wiki($action);
|
||||||
|
|
||||||
if ($action === 'styles')
|
if ($action === 'styles')
|
||||||
{
|
{
|
||||||
|
@ -90,9 +116,16 @@ switch ($action)
|
||||||
// no break;
|
// no break;
|
||||||
|
|
||||||
case 'adm':
|
case 'adm':
|
||||||
$exporter = new \phpbb\event\md_exporter($phpbb_root_path, $extension);
|
$exporter = new \phpbb\event\md_exporter($phpbb_root_path, $extension, $min_version);
|
||||||
|
if ($min_version && $action === 'diff')
|
||||||
|
{
|
||||||
|
$exporter->crawl_eventsmd('docs/events.md', 'adm');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$exporter->crawl_phpbb_directory_adm('docs/events.md');
|
$exporter->crawl_phpbb_directory_adm('docs/events.md');
|
||||||
echo $exporter->export_events_for_wiki();
|
}
|
||||||
|
echo $exporter->export_events_for_wiki($action);
|
||||||
|
|
||||||
if ($action === 'all')
|
if ($action === 'all')
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,7 +69,7 @@ class ucp_prefs
|
||||||
* @var array data Array with current ucp options data
|
* @var array data Array with current ucp options data
|
||||||
* @var array error Array with list of errors
|
* @var array error Array with list of errors
|
||||||
* @since 3.1.0-a1
|
* @since 3.1.0-a1
|
||||||
* @changed 3.1.4-rc1 Added error variable to the event
|
* @changed 3.1.4-RC1 Added error variable to the event
|
||||||
*/
|
*/
|
||||||
$vars = array('submit', 'data', 'error');
|
$vars = array('submit', 'data', 'error');
|
||||||
extract($phpbb_dispatcher->trigger_event('core.ucp_prefs_personal_data', compact($vars)));
|
extract($phpbb_dispatcher->trigger_event('core.ucp_prefs_personal_data', compact($vars)));
|
||||||
|
|
|
@ -24,6 +24,12 @@ class md_exporter
|
||||||
/** @var string phpBB Root Path */
|
/** @var string phpBB Root Path */
|
||||||
protected $root_path;
|
protected $root_path;
|
||||||
|
|
||||||
|
/** @var string The minimum version for the events to return */
|
||||||
|
protected $min_version;
|
||||||
|
|
||||||
|
/** @var string The maximum version for the events to return */
|
||||||
|
protected $max_version;
|
||||||
|
|
||||||
/** @var string */
|
/** @var string */
|
||||||
protected $filter;
|
protected $filter;
|
||||||
|
|
||||||
|
@ -36,8 +42,10 @@ class md_exporter
|
||||||
/**
|
/**
|
||||||
* @param string $phpbb_root_path
|
* @param string $phpbb_root_path
|
||||||
* @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
|
* @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
|
||||||
|
* @param string $min_version
|
||||||
|
* @param string $max_version
|
||||||
*/
|
*/
|
||||||
public function __construct($phpbb_root_path, $extension = null)
|
public function __construct($phpbb_root_path, $extension = null, $min_version = null, $max_version = null)
|
||||||
{
|
{
|
||||||
$this->root_path = $phpbb_root_path;
|
$this->root_path = $phpbb_root_path;
|
||||||
$this->path = $this->root_path;
|
$this->path = $this->root_path;
|
||||||
|
@ -49,6 +57,8 @@ class md_exporter
|
||||||
$this->events = array();
|
$this->events = array();
|
||||||
$this->events_by_file = array();
|
$this->events_by_file = array();
|
||||||
$this->filter = $this->current_event = '';
|
$this->filter = $this->current_event = '';
|
||||||
|
$this->min_version = $min_version;
|
||||||
|
$this->max_version = $max_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -152,6 +162,11 @@ class md_exporter
|
||||||
$files = $this->validate_file_list($file_details);
|
$files = $this->validate_file_list($file_details);
|
||||||
$since = $this->validate_since($since);
|
$since = $this->validate_since($since);
|
||||||
|
|
||||||
|
if (!$this->version_is_filtered($since))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$this->events[$event_name] = array(
|
$this->events[$event_name] = array(
|
||||||
'event' => $this->current_event,
|
'event' => $this->current_event,
|
||||||
'files' => $files,
|
'files' => $files,
|
||||||
|
@ -163,21 +178,48 @@ class md_exporter
|
||||||
return sizeof($this->events);
|
return sizeof($this->events);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version to check
|
||||||
|
*
|
||||||
|
* @param string $version
|
||||||
|
*/
|
||||||
|
protected function version_is_filtered($version)
|
||||||
|
{
|
||||||
|
return (!$this->min_version || phpbb_version_compare($this->min_version, $version, '<='))
|
||||||
|
&& (!$this->max_version || phpbb_version_compare($this->max_version, $version, '>='));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format the php events as a wiki table
|
* Format the php events as a wiki table
|
||||||
|
*
|
||||||
|
* @param string $action
|
||||||
* @return string Number of events found
|
* @return string Number of events found
|
||||||
*/
|
*/
|
||||||
public function export_events_for_wiki()
|
public function export_events_for_wiki($action = '')
|
||||||
{
|
{
|
||||||
if ($this->filter === 'adm')
|
if ($this->filter === 'adm')
|
||||||
|
{
|
||||||
|
if ($action === 'diff')
|
||||||
|
{
|
||||||
|
$wiki_page = '=== ACP Template Events ===' . "\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
$wiki_page = '= ACP Template Events =' . "\n";
|
$wiki_page = '= ACP Template Events =' . "\n";
|
||||||
|
}
|
||||||
$wiki_page .= '{| class="zebra sortable" cellspacing="0" cellpadding="5"' . "\n";
|
$wiki_page .= '{| class="zebra sortable" cellspacing="0" cellpadding="5"' . "\n";
|
||||||
$wiki_page .= '! Identifier !! Placement !! Added in Release !! Explanation' . "\n";
|
$wiki_page .= '! Identifier !! Placement !! Added in Release !! Explanation' . "\n";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if ($action === 'diff')
|
||||||
|
{
|
||||||
|
$wiki_page = '=== Template Events ===' . "\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
$wiki_page = '= Template Events =' . "\n";
|
$wiki_page = '= Template Events =' . "\n";
|
||||||
|
}
|
||||||
$wiki_page .= '{| class="zebra sortable" cellspacing="0" cellpadding="5"' . "\n";
|
$wiki_page .= '{| class="zebra sortable" cellspacing="0" cellpadding="5"' . "\n";
|
||||||
$wiki_page .= '! Identifier !! Prosilver Placement (If applicable) !! Added in Release !! Explanation' . "\n";
|
$wiki_page .= '! Identifier !! Prosilver Placement (If applicable) !! Added in Release !! Explanation' . "\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,12 @@ class php_exporter
|
||||||
/** @var string phpBB Root Path */
|
/** @var string phpBB Root Path */
|
||||||
protected $root_path;
|
protected $root_path;
|
||||||
|
|
||||||
|
/** @var string The minimum version for the events to return */
|
||||||
|
protected $min_version;
|
||||||
|
|
||||||
|
/** @var string The maximum version for the events to return */
|
||||||
|
protected $max_version;
|
||||||
|
|
||||||
/** @var string */
|
/** @var string */
|
||||||
protected $current_file;
|
protected $current_file;
|
||||||
|
|
||||||
|
@ -43,14 +49,18 @@ class php_exporter
|
||||||
/**
|
/**
|
||||||
* @param string $phpbb_root_path
|
* @param string $phpbb_root_path
|
||||||
* @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
|
* @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
|
||||||
|
* @param string $min_version
|
||||||
|
* @param string $max_version
|
||||||
*/
|
*/
|
||||||
public function __construct($phpbb_root_path, $extension = null)
|
public function __construct($phpbb_root_path, $extension = null, $min_version = null, $max_version = null)
|
||||||
{
|
{
|
||||||
$this->root_path = $phpbb_root_path;
|
$this->root_path = $phpbb_root_path;
|
||||||
$this->path = $phpbb_root_path;
|
$this->path = $phpbb_root_path;
|
||||||
$this->events = $this->file_lines = array();
|
$this->events = $this->file_lines = array();
|
||||||
$this->current_file = $this->current_event = '';
|
$this->current_file = $this->current_event = '';
|
||||||
$this->current_event_line = 0;
|
$this->current_event_line = 0;
|
||||||
|
$this->min_version = $min_version;
|
||||||
|
$this->max_version = $max_version;
|
||||||
|
|
||||||
$this->path = $this->root_path;
|
$this->path = $this->root_path;
|
||||||
if ($extension)
|
if ($extension)
|
||||||
|
@ -148,11 +158,20 @@ class php_exporter
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format the php events as a wiki table
|
* Format the php events as a wiki table
|
||||||
|
*
|
||||||
|
* @param string $action
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function export_events_for_wiki()
|
public function export_events_for_wiki($action = '')
|
||||||
|
{
|
||||||
|
if ($action === 'diff')
|
||||||
|
{
|
||||||
|
$wiki_page = '=== PHP Events (Hook Locations) ===' . "\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
$wiki_page = '= PHP Events (Hook Locations) =' . "\n";
|
$wiki_page = '= PHP Events (Hook Locations) =' . "\n";
|
||||||
|
}
|
||||||
$wiki_page .= '{| class="sortable zebra" cellspacing="0" cellpadding="5"' . "\n";
|
$wiki_page .= '{| class="sortable zebra" cellspacing="0" cellpadding="5"' . "\n";
|
||||||
$wiki_page .= '! Identifier !! Placement !! Arguments !! Added in Release !! Explanation' . "\n";
|
$wiki_page .= '! Identifier !! Placement !! Arguments !! Added in Release !! Explanation' . "\n";
|
||||||
foreach ($this->events as $event)
|
foreach ($this->events as $event)
|
||||||
|
@ -215,6 +234,34 @@ class php_exporter
|
||||||
$since_line_num = $this->find_since();
|
$since_line_num = $this->find_since();
|
||||||
$since = $this->validate_since($this->file_lines[$since_line_num]);
|
$since = $this->validate_since($this->file_lines[$since_line_num]);
|
||||||
|
|
||||||
|
$changed_line_nums = $this->find_changed('changed');
|
||||||
|
if (empty($changed_line_nums))
|
||||||
|
{
|
||||||
|
$changed_line_nums = $this->find_changed('change');
|
||||||
|
}
|
||||||
|
$changed_versions = array();
|
||||||
|
if (!empty($changed_line_nums))
|
||||||
|
{
|
||||||
|
foreach ($changed_line_nums as $changed_line_num)
|
||||||
|
{
|
||||||
|
$changed_versions[] = $this->validate_changed($this->file_lines[$changed_line_num]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->version_is_filtered($since))
|
||||||
|
{
|
||||||
|
$valid_version = false;
|
||||||
|
foreach ($changed_versions as $changed)
|
||||||
|
{
|
||||||
|
$valid_version = $valid_version || $this->version_is_filtered($changed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$valid_version)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Find event description line
|
// Find event description line
|
||||||
$description_line_num = $this->find_description();
|
$description_line_num = $this->find_description();
|
||||||
$description = substr(trim($this->file_lines[$description_line_num]), strlen('* '));
|
$description = substr(trim($this->file_lines[$description_line_num]), strlen('* '));
|
||||||
|
@ -242,6 +289,17 @@ class php_exporter
|
||||||
return $num_events_found;
|
return $num_events_found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The version to check
|
||||||
|
*
|
||||||
|
* @param string $version
|
||||||
|
*/
|
||||||
|
protected function version_is_filtered($version)
|
||||||
|
{
|
||||||
|
return (!$this->min_version || phpbb_version_compare($this->min_version, $version, '<='))
|
||||||
|
&& (!$this->max_version || phpbb_version_compare($this->max_version, $version, '>='));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the name of the event inside the dispatch() line
|
* Find the name of the event inside the dispatch() line
|
||||||
*
|
*
|
||||||
|
@ -448,6 +506,33 @@ class php_exporter
|
||||||
return $this->find_tag('since', array('event', 'var'));
|
return $this->find_tag('since', array('event', 'var'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the "@changed" Information lines
|
||||||
|
*
|
||||||
|
* @param string $tag_name Should be 'changed' or 'change'
|
||||||
|
* @return array Absolute line numbers
|
||||||
|
* @throws \LogicException
|
||||||
|
*/
|
||||||
|
public function find_changed($tag_name)
|
||||||
|
{
|
||||||
|
$lines = array();
|
||||||
|
$last_line = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
while ($line = $this->find_tag($tag_name, array('since'), $last_line))
|
||||||
|
{
|
||||||
|
$lines[] = $line;
|
||||||
|
$last_line = $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (\LogicException $e)
|
||||||
|
{
|
||||||
|
// Not changed? No problem!
|
||||||
|
}
|
||||||
|
|
||||||
|
return $lines;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the "@event" Information line
|
* Find the "@event" Information line
|
||||||
*
|
*
|
||||||
|
@ -464,13 +549,14 @@ class php_exporter
|
||||||
* @param string $find_tag Name of the tag we are trying to find
|
* @param string $find_tag Name of the tag we are trying to find
|
||||||
* @param array $disallowed_tags List of tags that must not appear between
|
* @param array $disallowed_tags List of tags that must not appear between
|
||||||
* the tag and the actual event
|
* the tag and the actual event
|
||||||
|
* @param int $skip_to_line Skip lines until this one
|
||||||
* @return int Absolute line number
|
* @return int Absolute line number
|
||||||
* @throws \LogicException
|
* @throws \LogicException
|
||||||
*/
|
*/
|
||||||
public function find_tag($find_tag, $disallowed_tags)
|
public function find_tag($find_tag, $disallowed_tags, $skip_to_line = 0)
|
||||||
{
|
{
|
||||||
$find_tag_line = 0;
|
$find_tag_line = $skip_to_line ? $this->current_event_line - $skip_to_line + 1 : 0;
|
||||||
$found_comment_end = false;
|
$found_comment_end = ($skip_to_line) ? true : false;
|
||||||
while (strpos(ltrim($this->file_lines[$this->current_event_line - $find_tag_line], "\t "), '* @' . $find_tag . ' ') !== 0)
|
while (strpos(ltrim($this->file_lines[$this->current_event_line - $find_tag_line], "\t "), '* @' . $find_tag . ' ') !== 0)
|
||||||
{
|
{
|
||||||
if ($found_comment_end && ltrim($this->file_lines[$this->current_event_line - $find_tag_line], "\t") === '/**')
|
if ($found_comment_end && ltrim($this->file_lines[$this->current_event_line - $find_tag_line], "\t") === '/**')
|
||||||
|
@ -560,6 +646,27 @@ class php_exporter
|
||||||
return $match[1];
|
return $match[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate "@changed" Information
|
||||||
|
*
|
||||||
|
* @param string $line
|
||||||
|
* @return string
|
||||||
|
* @throws \LogicException
|
||||||
|
*/
|
||||||
|
public function validate_changed($line)
|
||||||
|
{
|
||||||
|
$match = array();
|
||||||
|
$line = str_replace("\t", ' ', ltrim($line, "\t "));
|
||||||
|
preg_match('#^\* @change(d)? (\d+\.\d+\.\d+(?:-(?:a|b|RC|pl)\d+)?)( (?:.*))?$#', $line, $match);
|
||||||
|
if (!isset($match[2]))
|
||||||
|
{
|
||||||
|
throw new \LogicException("Invalid '@changed' information for event "
|
||||||
|
. "'{$this->current_event}' in file '{$this->current_file}:{$this->current_event_line}'");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $match[2];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate "@event" Information
|
* Validate "@event" Information
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue