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); } } }