[ticket/12273] Allow to filter events for extensions

PHPBB3-12273
This commit is contained in:
Joas Schilling 2014-04-28 21:03:59 +02:00
parent bf8b9f0143
commit ed669982c2
2 changed files with 51 additions and 23 deletions

View file

@ -17,7 +17,10 @@ namespace phpbb\event;
*/ */
class md_exporter class md_exporter
{ {
/** @var string */ /** @var string Path where we look for files*/
protected $path;
/** @var string phpBB Root Path */
protected $root_path; protected $root_path;
/** @var string */ /** @var string */
@ -51,15 +54,22 @@ class md_exporter
} }
/** /**
* @param string $md_file * @param string $md_file Relative from phpBB root
* @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
* @return int Number of events found * @return int Number of events found
* @throws \LogicException * @throws \LogicException
*/ */
public function crawl_phpbb_directory_adm($md_file) public function crawl_phpbb_directory_adm($md_file, $extension = null)
{ {
$this->crawl_eventsmd($md_file, 'adm'); $this->path = $this->root_path;
if ($extension)
{
$this->path .= 'ext/' . $extension . '/';
}
$file_list = $this->get_recursive_file_list($this->root_path . 'adm/style/'); $this->crawl_eventsmd($md_file, 'adm', $extension);
$file_list = $this->get_recursive_file_list($this->path . 'adm/style/');
foreach ($file_list as $file) foreach ($file_list as $file)
{ {
$file_name = 'adm/style/' . $file; $file_name = 'adm/style/' . $file;
@ -70,19 +80,26 @@ class md_exporter
} }
/** /**
* @param string $md_file * @param string $md_file Relative from phpBB root
* @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
* @return int Number of events found * @return int Number of events found
* @throws \LogicException * @throws \LogicException
*/ */
public function crawl_phpbb_directory_styles($md_file) public function crawl_phpbb_directory_styles($md_file, $extension = null)
{ {
$this->crawl_eventsmd($md_file, 'styles'); $this->path = $this->root_path;
if ($extension)
{
$this->path .= 'ext/' . $extension . '/';
}
$this->crawl_eventsmd($md_file, 'styles', $extension);
$styles = array('prosilver', 'subsilver2'); $styles = array('prosilver', 'subsilver2');
foreach ($styles as $style) foreach ($styles as $style)
{ {
$file_list = $this->get_recursive_file_list( $file_list = $this->get_recursive_file_list(
$this->root_path . 'styles/' . $style . '/template/' $this->path . 'styles/' . $style . '/template/'
); );
foreach ($file_list as $file) foreach ($file_list as $file)
@ -96,12 +113,13 @@ class md_exporter
} }
/** /**
* @param string $md_file * @param string $md_file Relative from phpBB root
* @param string $filter * @param string $filter Should be 'styles' or 'adm'
* @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
* @return int Number of events found * @return int Number of events found
* @throws \LogicException * @throws \LogicException
*/ */
public function crawl_eventsmd($md_file, $filter) public function crawl_eventsmd($md_file, $filter, $extension = null)
{ {
$file_content = file_get_contents($this->root_path . $md_file); $file_content = file_get_contents($this->root_path . $md_file);
$this->filter = $filter; $this->filter = $filter;
@ -241,7 +259,7 @@ class md_exporter
$files = explode("\n + ", $file_details); $files = explode("\n + ", $file_details);
foreach ($files as $file) foreach ($files as $file)
{ {
if (!file_exists($this->root_path . $file)) if (!file_exists($this->path . $file))
{ {
throw new \LogicException("Invalid file '{$file}' not found for event '{$this->current_event}'", 1); throw new \LogicException("Invalid file '{$file}' not found for event '{$this->current_event}'", 1);
} }
@ -290,13 +308,13 @@ class md_exporter
*/ */
public function crawl_file_for_events($file) public function crawl_file_for_events($file)
{ {
if (!file_exists($this->root_path . $file)) if (!file_exists($this->path . $file))
{ {
throw new \LogicException("File '{$file}' does not exist", 1); throw new \LogicException("File '{$file}' does not exist", 1);
} }
$event_list = array(); $event_list = array();
$file_content = file_get_contents($this->root_path . $file); $file_content = file_get_contents($this->path . $file);
$events = explode('<!-- EVENT ', $file_content); $events = explode('<!-- EVENT ', $file_content);
// Remove the code before the first event // Remove the code before the first event

View file

@ -17,7 +17,10 @@ namespace phpbb\event;
*/ */
class php_exporter class php_exporter
{ {
/** @var string */ /** @var string Path where we look for files*/
protected $path;
/** @var string phpBB Root Path */
protected $root_path; protected $root_path;
/** @var string */ /** @var string */
@ -41,6 +44,7 @@ class php_exporter
public function __construct($phpbb_root_path) public function __construct($phpbb_root_path)
{ {
$this->root_path = $phpbb_root_path; $this->root_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;
@ -82,11 +86,18 @@ class php_exporter
/** /**
* Crawl the phpBB/ directory for php events * Crawl the phpBB/ directory for php events
* @param mixed $extension String 'vendor/ext' to filter, null for phpBB core
* @return int The number of events found * @return int The number of events found
*/ */
public function crawl_phpbb_directory_php() public function crawl_phpbb_directory_php($extension = null)
{ {
$files = $this->get_recursive_file_list($this->root_path); $this->path = $this->root_path;
if ($extension)
{
$this->path .= 'ext/' . $extension . '/';
}
$files = $this->get_recursive_file_list();
$this->events = array(); $this->events = array();
foreach ($files as $file) foreach ($files as $file)
{ {
@ -100,20 +111,19 @@ class php_exporter
/** /**
* Returns a list of files in $dir * Returns a list of files in $dir
* *
* @param string $dir Directory to go through
* @return array List of files (including the path) * @return array List of files (including the path)
*/ */
public function get_recursive_file_list($dir) public function get_recursive_file_list()
{ {
try try
{ {
$iterator = new \RecursiveIteratorIterator( $iterator = new \RecursiveIteratorIterator(
new \phpbb\event\recursive_event_filter_iterator( new \phpbb\event\recursive_event_filter_iterator(
new \RecursiveDirectoryIterator( new \RecursiveDirectoryIterator(
$dir, $this->path,
\FilesystemIterator::SKIP_DOTS \FilesystemIterator::SKIP_DOTS
), ),
$dir $this->path
), ),
\RecursiveIteratorIterator::LEAVES_ONLY \RecursiveIteratorIterator::LEAVES_ONLY
); );
@ -162,7 +172,7 @@ class php_exporter
{ {
$this->current_file = $file; $this->current_file = $file;
$this->file_lines = array(); $this->file_lines = array();
$content = file_get_contents($this->root_path . $this->current_file); $content = file_get_contents($this->path . $this->current_file);
$num_events_found = 0; $num_events_found = 0;
if (strpos($content, "dispatcher->trigger_event('") || strpos($content, "dispatcher->dispatch('")) if (strpos($content, "dispatcher->trigger_event('") || strpos($content, "dispatcher->dispatch('"))