Line 24 | Line 24 |
---|
/** @var string phpBB Root Path */ protected $root_path;
|
/** @var string phpBB 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 */ protected $current_file;
| /** @var string */ protected $current_file;
|
Line 43 | Line 49 |
---|
/** * @param string $phpbb_root_path * @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
|
/** * @param string $phpbb_root_path * @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->path = $phpbb_root_path; $this->events = $this->file_lines = array(); $this->current_file = $this->current_event = ''; $this->current_event_line = 0;
|
{ $this->root_path = $phpbb_root_path; $this->path = $phpbb_root_path; $this->events = $this->file_lines = array(); $this->current_file = $this->current_event = ''; $this->current_event_line = 0;
|
| $this->min_version = $min_version; $this->max_version = $max_version;
|
$this->path = $this->root_path; if ($extension)
| $this->path = $this->root_path; if ($extension)
|
Line 148 | Line 158 |
---|
/** * 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 .= '! Identifier !! Placement !! Arguments !! Added in Release !! Explanation' . "\n"; foreach ($this->events as $event)
| $wiki_page .= '{| class="sortable zebra" cellspacing="0" cellpadding="5"' . "\n"; $wiki_page .= '! Identifier !! Placement !! Arguments !! Added in Release !! Explanation' . "\n"; foreach ($this->events as $event)
|
Line 214 | Line 233 |
---|
// Validate @since $since_line_num = $this->find_since(); $since = $this->validate_since($this->file_lines[$since_line_num]);
|
// Validate @since $since_line_num = $this->find_since(); $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 $description_line_num = $this->find_description();
| // Find event description line $description_line_num = $this->find_description();
|
Line 240 | Line 287 |
---|
}
return $num_events_found;
|
}
return $num_events_found;
|
| }
/** * The version to check * * @param string $version * @return bool */ 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, '>='));
|
}
/**
| }
/**
|
Line 446 | Line 505 |
---|
public function find_since() { return $this->find_tag('since', array('event', 'var'));
|
public function find_since() { return $this->find_tag('since', array('event', 'var'));
|
| }
/** * Find the "@changed" Information lines * * @param string $tag_name Should be 'change', not 'changed' * @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;
|
}
/**
| }
/**
|
Line 464 | Line 550 |
---|
* @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 * the tag and the actual event
|
* @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 * the tag and the actual event
|
| * @param int $skip_to_line Skip lines until this one
|
* @return int Absolute line number * @throws \LogicException */
|
* @return int Absolute line number * @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; $found_comment_end = false;
| $find_tag_line = $skip_to_line ? $this->current_event_line - $skip_to_line + 1 : 0; $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) { if ($found_comment_end && ltrim($this->file_lines[$this->current_event_line - $find_tag_line], "\t") === '/**')
| 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") === '/**')
|
Line 558 | Line 645 |
---|
}
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('#^\* @changed (\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];
|
}
/**
| }
/**
|