aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/phpbb/extension/base.php28
-rw-r--r--tests/extension/extension_base_test.php2
2 files changed, 28 insertions, 2 deletions
diff --git a/phpBB/phpbb/extension/base.php b/phpBB/phpbb/extension/base.php
index 5bb530bad4..40bd349c4d 100644
--- a/phpBB/phpbb/extension/base.php
+++ b/phpBB/phpbb/extension/base.php
@@ -121,9 +121,11 @@ class base implements \phpbb\extension\extension_interface
/**
* Get the list of migration files from this extension
*
+ * @var bool $validate_classes Whether or not to check that the migration
+ * class exists and extends the base migration class.
* @return array
*/
- protected function get_migration_file_list()
+ protected function get_migration_file_list($validate_classes = true)
{
if ($this->migrations !== false)
{
@@ -137,6 +139,30 @@ class base implements \phpbb\extension\extension_interface
$migrations = $this->extension_finder->get_classes_from_files($migrations);
+ if ($validate_classes)
+ {
+ foreach ($migrations as $key => $migration)
+ {
+ // If the class exists and is a subclass of the
+ // \phpbb\db\migration\migration abstract class
+ // we skip it.
+
+ // Otherwise, i.e. if it doesn't exist or it is
+ // not an extend the abstract class, we unset it
+ if (class_exists($migration))
+ {
+ $reflector = new \ReflectionClass($migration);
+ if ($reflector->isSubclassOf('\phpbb\db\migration\migration') && $reflector->isInstantiable())
+ {
+ continue;
+ }
+
+ }
+
+ unset($migrations[$key]);
+ }
+ }
+
return $migrations;
}
}
diff --git a/tests/extension/extension_base_test.php b/tests/extension/extension_base_test.php
index eee38186db..898c11d902 100644
--- a/tests/extension/extension_base_test.php
+++ b/tests/extension/extension_base_test.php
@@ -74,6 +74,6 @@ class phpbb_extension_extension_base_test extends phpbb_test_case
public function test_suffix_get_classes($extension_name, $expected)
{
$extension = $this->extension_manager->get_extension($extension_name);
- $this->assertEquals($expected, self::$reflection_method_get_migration_file_list->invoke($extension));
+ $this->assertEquals($expected, self::$reflection_method_get_migration_file_list->invoke($extension, false));
}
}