aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/db
diff options
context:
space:
mode:
authorTristan Darricau <tristan.darricau@sensiolabs.com>2016-02-02 13:12:25 +0100
committerTristan Darricau <tristan.darricau@sensiolabs.com>2016-02-02 13:12:25 +0100
commit8e100f000ed5f67f329e597851d81652b4055a53 (patch)
treed49b061d43a0549904d75027a85a9e85faaa394d /phpBB/phpbb/db
parent15e9367b5b9add3197ea13658499d60de14baa54 (diff)
parent27027deb9ce2076f64dbfdecba494efe1aa523dc (diff)
downloadforums-8e100f000ed5f67f329e597851d81652b4055a53.tar
forums-8e100f000ed5f67f329e597851d81652b4055a53.tar.gz
forums-8e100f000ed5f67f329e597851d81652b4055a53.tar.bz2
forums-8e100f000ed5f67f329e597851d81652b4055a53.tar.xz
forums-8e100f000ed5f67f329e597851d81652b4055a53.zip
Merge pull request #4144 from VSEphpbb/ticket/14434
[ticket/14434] Allow non-migration files inside migrations folder (continued) * VSEphpbb/ticket/14434: [ticket/14434] Refactored to check migrations when setting them [ticket/14434] Check migrations in the database updater task [ticket/14434] Do not include non-migrations in CLI list [ticket/14434] Remove redundant conditional [ticket/14434] Fix whitespace mistakes [ticket/14434] Remove recursion to simplify is_migration method [ticket/14434] Extract migration check to a reusable method [ticket/14434] Schema generator should ignore migration helpers
Diffstat (limited to 'phpBB/phpbb/db')
-rw-r--r--phpBB/phpbb/db/migration/schema_generator.php9
-rw-r--r--phpBB/phpbb/db/migrator.php41
2 files changed, 49 insertions, 1 deletions
diff --git a/phpBB/phpbb/db/migration/schema_generator.php b/phpBB/phpbb/db/migration/schema_generator.php
index 7003844bc4..c579e25824 100644
--- a/phpBB/phpbb/db/migration/schema_generator.php
+++ b/phpBB/phpbb/db/migration/schema_generator.php
@@ -77,8 +77,15 @@ class schema_generator
$check_dependencies = true;
while (!empty($migrations))
{
- foreach ($migrations as $migration_class)
+ foreach ($migrations as $key => $migration_class)
{
+ // Unset classes that are not a valid migration
+ if (\phpbb\db\migrator::is_migration($migration_class) === false)
+ {
+ unset($migrations[$key]);
+ continue;
+ }
+
$open_dependencies = array_diff($migration_class::depends_on(), $tree);
if (empty($open_dependencies))
diff --git a/phpBB/phpbb/db/migrator.php b/phpBB/phpbb/db/migrator.php
index d91860949a..a1e93942cd 100644
--- a/phpBB/phpbb/db/migrator.php
+++ b/phpBB/phpbb/db/migrator.php
@@ -170,10 +170,28 @@ class migrator
*/
public function set_migrations($class_names)
{
+ foreach ($class_names as $key => $class)
+ {
+ if (!self::is_migration($class))
+ {
+ unset($class_names[$key]);
+ }
+ }
+
$this->migrations = $class_names;
}
/**
+ * Get the list of available migration class names
+ *
+ * @return array Array of all migrations available to be run
+ */
+ public function get_migrations()
+ {
+ return $this->migrations;
+ }
+
+ /**
* Runs a single update step from the next migration to be applied.
*
* The update step can either be a schema or a (partial) data update. To
@@ -857,4 +875,27 @@ class migrator
));
}
}
+
+ /**
+ * Check if a class is a migration.
+ *
+ * @param string $migration A migration class name
+ * @return bool Return true if class is a migration, false otherwise
+ */
+ static public function is_migration($migration)
+ {
+ if (class_exists($migration))
+ {
+ // Migration classes should extend the abstract class
+ // phpbb\db\migration\migration (which implements the
+ // migration_interface) and be instantiable.
+ $reflector = new \ReflectionClass($migration);
+ if ($reflector->implementsInterface('\phpbb\db\migration\migration_interface') && $reflector->isInstantiable())
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
}