setName('databox:create') ->addArgument('databox', InputArgument::REQUIRED, 'Database name for the databox', null) ->addArgument('owner', InputArgument::REQUIRED, 'Login of the databox admin user', null) ->addOption('connection', 'c', InputOption::VALUE_NONE, 'Flag to set new database settings') ->addOption('db-host', null, InputOption::VALUE_OPTIONAL, 'MySQL server host', 'localhost') ->addOption('db-port', null, InputOption::VALUE_OPTIONAL, 'MySQL server port', 3306) ->addOption('db-user', null, InputOption::VALUE_OPTIONAL, 'MySQL server user', 'phrasea') ->addOption('db-password', null, InputOption::VALUE_OPTIONAL, 'MySQL server password', null) ->addOption( 'db-template', null, InputOption::VALUE_OPTIONAL, 'Databox template', null ); } protected function doExecute(InputInterface $input, OutputInterface $output) { /** @var DialogHelper $dialog */ $dialog = $this->getHelperSet()->get('dialog'); $databoxName = $input->getArgument('databox'); $connectionSettings = $input->getOption('connection') == false ? null : new DataboxConnectionSettings( $input->getOption('db-host'), $input->getOption('db-port'), $input->getOption('db-user'), $input->getOption('db-password') ); /** @var UserRepository $userRepository */ $userRepository = $this->container['repo.users']; $owner = $userRepository->findByLogin($input->getArgument('owner')); if(!$owner) { $output->writeln(sprintf("Unknown user \"%s\"", $input->getArgument('owner'))); return 1; } /** @var DataboxService $databoxService */ $databoxService = $this->container['databox.service']; if($databoxService->exists($databoxName, $connectionSettings)) { $output->writeln(sprintf("Database \"%s\" already exists", $databoxName)); return 1; } /** @var StructureTemplate $templates */ $templates = $this->container['phraseanet.structure-template']; // if a template name is provided, check that this template exists $templateName = $input->getOption('db-template'); if($templateName && !$templates->getByName($templateName)) { throw new \Exception_InvalidArgument(sprintf("Databox template \"%s\" not found.", $templateName)); } if(!$templateName) { // propose a default template : the first available if "en-simple" does not exists. $defaultDBoxTemplate = $templates->getDefault(); do { $templateName = $dialog->ask($output, 'Choose a template from ('.$templates->toString().') for metadata structure [default: "'.$defaultDBoxTemplate.'"] : ', $defaultDBoxTemplate); if(!$templates->getByName($templateName)){ $output->writeln(" Data-Box template : Template not found, try again."); } } while (!$templates->getByName($templateName)); } try { $databoxService->createDatabox( $databoxName, $templateName, $owner, $connectionSettings ); } catch(\Exception $e) { $output->writeln(sprintf("Failed to create database \"%s\", error=\"%s\"" , $databoxName , $e->getMessage() )); return 1; } $output->writeln('Databox created'); return 0; } }