diff --git a/mailpoet/lib/Migrator/Migrator.php b/mailpoet/lib/Migrator/Migrator.php index 092bbea62b..02ca00a531 100644 --- a/mailpoet/lib/Migrator/Migrator.php +++ b/mailpoet/lib/Migrator/Migrator.php @@ -36,7 +36,7 @@ class Migrator { } foreach ($migrations as $migration) { - if ($migration['unknown'] || $migration['status'] === self::MIGRATION_STATUS_COMPLETED) { + if (!$migration['level'] || $migration['unknown'] || $migration['status'] === self::MIGRATION_STATUS_COMPLETED) { continue; } diff --git a/mailpoet/lib/Migrator/Repository.php b/mailpoet/lib/Migrator/Repository.php index 91d17920e2..30a56e01fe 100644 --- a/mailpoet/lib/Migrator/Repository.php +++ b/mailpoet/lib/Migrator/Repository.php @@ -50,7 +50,7 @@ class Repository { } /** - * Array of filenames. + * Array of migration filenames and types. * Db migrations are loaded first, then app migrations. This ensures that Db migrator is run before app migrations * @return array */ @@ -59,13 +59,17 @@ class Repository { $this->loadForLevel(self::MIGRATIONS_LEVEL_DB), $this->loadForLevel(self::MIGRATIONS_LEVEL_APP) ); - $duplicateNames = array_diff_assoc(array_column($migrations, 'name'), array_unique(array_column($migrations, 'name'))); + $migrationNames = array_column($migrations, 'name'); + $duplicateNames = array_diff_assoc($migrationNames, array_unique($migrationNames)); if (!empty($duplicateNames)) { throw MigratorException::duplicateMigrationNames($duplicateNames); } return $migrations; } + /** + * @return array + */ private function loadForLevel(string $level): array { $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($this->migrationsDir . '/' . $level, RecursiveDirectoryIterator::SKIP_DOTS) diff --git a/mailpoet/lib/Migrator/Runner.php b/mailpoet/lib/Migrator/Runner.php index 1d34e366f7..d34a10cb0f 100644 --- a/mailpoet/lib/Migrator/Runner.php +++ b/mailpoet/lib/Migrator/Runner.php @@ -25,7 +25,7 @@ class Runner { $this->namespace = $this->getMigrationsNamespace(); } - public function runMigration(string $name, ?string $level): void { + public function runMigration(string $name, string $level): void { $className = $this->getClassName($name, $level); try { @@ -40,7 +40,7 @@ class Runner { } } - private function getClassName(string $name, ?string $level): string { + private function getClassName(string $name, string $level): string { $className = $this->namespace . '\\' . $level . '\\' . $name; if (!class_exists($className)) { throw MigratorException::migrationClassNotFound($className);