setName('migrations/create')
->setDescription('Core/extension database migration create')
->addOption('--extension', '-x', InputOption::VALUE_OPTIONAL, 'Extension name: "plugin/name", "theme/name"')
->addOption('--target', '-t', InputOption::VALUE_REQUIRED, 'Migration version name, "1.0.0"');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return mixed
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$versionValidate = function (&$version) {
$version = trim(preg_replace('/[^0-9\.]/', '', $version), '.');
if (! bff::input()->isVersionNumber($version)) {
return false;
}
return true;
};
if ($input->hasParameterOption(array('--extension', '-x'))) {
$extension = $this->getExtensionByOption('extension', $input, $output);
if ($extension === false) {
return 1;
}
$version = $input->getOption('target');
if (! $versionValidate($version)) {
$output->writeln('' . _t('dev', 'Version name is incorrect') . '');
return 1;
}
$versionExists = Dev::migrationsExtension($extension, 'id', ['name' => $version]);
if (!empty($versionExists)) {
$output->writeln('' . _t('dev', 'Migration with the same version name ([version]) already exists', ['version' => $version]) . '');
return 1;
}
return Dev::migrationsExtension($extension, 'create', [
'version' => $version,
], true);
} else {
$version = $input->getOption('target');
if (! $versionValidate($version)) {
$output->writeln('' . _t('dev', 'Version name is incorrect') . '');
return 1;
}
$versionExists = Dev::migrationsCore('id', ['name' => $version]);
if (!empty($versionExists)) {
$output->writeln('' . _t('dev', 'Migration with the same version name ([version]) already exists', ['version' => $version]) . '');
return 1;
}
return Dev::migrationsCore('create', [
'version' => $version,
], true);
}
}
}