public function getMigrationStatus($showMigrations = false, $showDescriptions = false)
{
$configuration = $this->getMigrationConfiguration();
$executedMigrations = $configuration->getMigratedVersions();
$availableMigrations = $configuration->getAvailableVersions();
$executedUnavailableMigrations = array_diff($executedMigrations, $availableMigrations);
$numExecutedUnavailableMigrations = count($executedUnavailableMigrations);
$numNewMigrations = count(array_diff($availableMigrations, $executedMigrations));
$statusInformation = ['Name' => $configuration->getName() ? $configuration->getName() : 'Doctrine Database Migrations', 'Database Driver' => $configuration->getConnection()->getDriver()->getName(), 'Database Name' => $configuration->getConnection()->getDatabase(), 'Configuration Source' => 'manually configured', 'Version Table Name' => $configuration->getMigrationsTableName(), 'Version Column Name' => $configuration->getMigrationsColumnName(), 'Migrations Namespace' => $configuration->getMigrationsNamespace(), 'Migrations Target Directory' => $configuration->getMigrationsDirectory(), 'Previous Version' => $this->getFormattedVersionAlias('prev', $configuration), 'Current Version' => $this->getFormattedVersionAlias('current', $configuration), 'Next Version' => $this->getFormattedVersionAlias('next', $configuration), 'Latest Version' => $this->getFormattedVersionAlias('latest', $configuration), 'Executed Migrations' => count($executedMigrations), 'Executed Unavailable Migrations' => $numExecutedUnavailableMigrations, 'Available Migrations' => count($availableMigrations), 'New Migrations' => $numNewMigrations];
$output = PHP_EOL . '<info>==</info> Configuration' . PHP_EOL;
foreach ($statusInformation as $name => $value) {
if ($name == 'New Migrations') {
$value = $value > 0 ? '<question>' . $value . '</question>' : 0;
}
if ($name == 'Executed Unavailable Migrations') {
$value = $value > 0 ? '<error>' . $value . '</error>' : 0;
}
$output .= ' <comment>></comment> ' . $name . ': ' . str_repeat(' ', 35 - strlen($name)) . $value . PHP_EOL;
}
if ($showMigrations) {
if ($migrations = $configuration->getMigrations()) {
$docCommentParser = new DocCommentParser();
$output .= PHP_EOL . ' <info>==</info> Available Migration Versions' . PHP_EOL;
/** @var Version $version */
foreach ($migrations as $version) {
$packageKey = $this->getPackageKeyFromMigrationVersion($version);
$croppedPackageKey = strlen($packageKey) < 30 ? $packageKey : substr($packageKey, 0, 29) . '~';
$packageKeyColumn = ' ' . str_pad($croppedPackageKey, 30, ' ');
$isMigrated = in_array($version->getVersion(), $executedMigrations);
$status = $isMigrated ? '<info>migrated</info>' : '<error>not migrated</error>';
$migrationDescription = '';
if ($showDescriptions) {
$migrationDescription = str_repeat(' ', 2) . $this->getMigrationDescription($version, $docCommentParser);
}
$formattedVersion = $configuration->getDateTime($version->getVersion());
$output .= ' <comment>></comment> ' . $formattedVersion . ' (<comment>' . $version->getVersion() . '</comment>)' . $packageKeyColumn . str_repeat(' ', 2) . $status . $migrationDescription . PHP_EOL;
}
}
if (count($executedUnavailableMigrations)) {
$output .= PHP_EOL . ' <info>==</info> Previously Executed Unavailable Migration Versions' . PHP_EOL;
foreach ($executedUnavailableMigrations as $executedUnavailableMigration) {
$output .= ' <comment>></comment> ' . $configuration->getDateTime($executedUnavailableMigration) . ' (<comment>' . $executedUnavailableMigration . '</comment>)' . PHP_EOL;
}
}
}
return $output;
}