1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-04-21 16:22:22 +02:00

Merge pull request #3633 from nickvergessen/ticket/13872

[ticket/13872] Allow template events to have a changed version
This commit is contained in:
Marc Alexander 2015-05-28 14:16:08 +02:00
commit ef39f3a9ab
5 changed files with 200 additions and 7 deletions

View File

@ -157,20 +157,64 @@ class md_exporter
}
list($file_details, $details) = explode("\n* Since: ", $details, 2);
list($since, $description) = explode("\n* Purpose: ", $details, 2);
$changed_versions = array();
if (strpos($details, "\n* Changed: ") !== false)
{
list($since, $details) = explode("\n* Changed: ", $details, 2);
while (strpos($details, "\n* Changed: ") !== false)
{
list($changed, $details) = explode("\n* Changed: ", $details, 2);
$changed_versions[] = $changed;
}
list($changed, $description) = explode("\n* Purpose: ", $details, 2);
$changed_versions[] = $changed;
}
else
{
list($since, $description) = explode("\n* Purpose: ", $details, 2);
$changed_versions = array();
}
$files = $this->validate_file_list($file_details);
$since = $this->validate_since($since);
$changes = array();
foreach ($changed_versions as $changed)
{
list($changed_version, $changed_description) = $this->validate_changed($changed);
if (isset($changes[$changed_version]))
{
throw new \LogicException("Duplicate change information found for event '{$this->current_event}'");
}
$changes[$changed_version] = $changed_description;
}
$description = trim($description, "\n") . "\n";
if (!$this->version_is_filtered($since))
{
continue;
$is_filtered = false;
foreach ($changes as $version => $null)
{
if ($this->version_is_filtered($version))
{
$is_filtered = true;
break;
}
}
if (!$is_filtered)
{
continue;
}
}
$this->events[$event_name] = array(
'event' => $this->current_event,
'files' => $files,
'since' => $since,
'changed' => $changes,
'description' => $description,
);
}
@ -182,6 +226,7 @@ class md_exporter
* The version to check
*
* @param string $version
* @return bool
*/
protected function version_is_filtered($version)
{
@ -269,7 +314,7 @@ class md_exporter
*/
public function validate_since($since)
{
if (!preg_match('#^\d+\.\d+\.\d+(?:-(?:a|b|RC|pl)\d+)?$#', $since))
if (!$this->validate_version($since))
{
throw new \LogicException("Invalid since information found for event '{$this->current_event}'");
}
@ -277,6 +322,44 @@ class md_exporter
return $since;
}
/**
* Validate "Changed" Information
*
* @param string $changed
* @return string
* @throws \LogicException
*/
public function validate_changed($changed)
{
if (strpos($changed, ' ') !== false)
{
list($version, $description) = explode(' ', $changed, 2);
}
else
{
$version = $changed;
$description = '';
}
if (!$this->validate_version($version))
{
throw new \LogicException("Invalid changed information found for event '{$this->current_event}'");
}
return array($version, $description);
}
/**
* Validate "version" Information
*
* @param string $version
* @return bool True if valid, false otherwise
*/
public function validate_version($version)
{
return preg_match('#^\d+\.\d+\.\d+(?:-(?:a|b|RC|pl)\d+)?$#', $version);
}
/**
* Validate the files list
*

View File

@ -293,6 +293,7 @@ class php_exporter
* The version to check
*
* @param string $version
* @return bool
*/
protected function version_is_filtered($version)
{

View File

@ -0,0 +1,20 @@
acp_bbcodes_actions_append
===
* Location: adm/style/acp_bbcodes.html
* Since: 3.1.0-a3
* Changed: 3.1.0-a4
* Purpose: desc1
acp_bbcodes_actions_prepend
===
* Location: adm/style/acp_bbcodes.html
* Since: 3.1.0-a5
* Purpose: desc2
acp_bbcodes_actions_prepend2
===
* Location: adm/style/acp_bbcodes.html
* Since: 3.1.0-a4
* Changed: 3.1.0-a5 Moved up
* Changed: 3.1.0-a6 Moved down
* Purpose: desc2

View File

@ -11,10 +11,99 @@
*
*/
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
class phpbb_event_md_exporter_test extends phpbb_test_case
{
static public function crawl_eventsmd_data()
{
return array(
array('normal_events.md.test', null, null, array(
'acp_bbcodes_actions_append' => array(
'event' => 'acp_bbcodes_actions_append',
'files' => array(
'prosilver' => array(),
'subsilver2' => array(),
'adm' => array('acp_bbcodes.html'),
),
'since' => '3.1.0-a3',
'changed' => array(
'3.1.0-a4' => '',
),
'description' => 'desc1' . "\n",
),
'acp_bbcodes_actions_prepend' => array(
'event' => 'acp_bbcodes_actions_prepend',
'files' => array(
'prosilver' => array(),
'subsilver2' => array(),
'adm' => array('acp_bbcodes.html'),
),
'since' => '3.1.0-a5',
'changed' => array(),
'description' => 'desc2' . "\n",
),
'acp_bbcodes_actions_prepend2' => array(
'event' => 'acp_bbcodes_actions_prepend2',
'files' => array(
'prosilver' => array(),
'subsilver2' => array(),
'adm' => array('acp_bbcodes.html'),
),
'since' => '3.1.0-a4',
'changed' => array(
'3.1.0-a5' => 'Moved up',
'3.1.0-a6' => 'Moved down',
),
'description' => 'desc2' . "\n",
),
)),
array('normal_events.md.test', '3.1.0-a5', '3.1.0-a5', array(
'acp_bbcodes_actions_prepend' => array(
'event' => 'acp_bbcodes_actions_prepend',
'files' => array(
'prosilver' => array(),
'subsilver2' => array(),
'adm' => array('acp_bbcodes.html'),
),
'since' => '3.1.0-a5',
'changed' => array(),
'description' => 'desc2' . "\n",
),
'acp_bbcodes_actions_prepend2' => array(
'event' => 'acp_bbcodes_actions_prepend2',
'files' => array(
'prosilver' => array(),
'subsilver2' => array(),
'adm' => array('acp_bbcodes.html'),
),
'since' => '3.1.0-a4',
'changed' => array(
'3.1.0-a5' => 'Moved up',
'3.1.0-a6' => 'Moved down',
),
'description' => 'desc2' . "\n",
),
)),
);
}
/**
* @dataProvider crawl_eventsmd_data
*
* @param string $file
* @param string $min_version
* @param string $max_version
* @param array $events
*/
public function test_crawl_eventsmd($file, $min_version, $max_version, $events)
{
$exporter = new \phpbb\event\md_exporter(dirname(__FILE__) . '/fixtures/', null, $min_version, $max_version);
$this->assertSame(sizeof($events), $exporter->crawl_eventsmd($file, 'adm'));
$this->assertEquals($events, $exporter->get_events());
}
static public function crawl_phpbb_eventsmd_data()
{
return array(
array('styles'),
@ -23,9 +112,9 @@ class phpbb_event_md_exporter_test extends phpbb_test_case
}
/**
* @dataProvider crawl_eventsmd_data
*/
public function test_crawl_eventsmd($filter)
* @dataProvider crawl_phpbb_eventsmd_data
*/
public function test_crawl_phpbb_eventsmd($filter)
{
global $phpbb_root_path;
$exporter = new \phpbb\event\md_exporter($phpbb_root_path);