*/ class Create extends SyCommand { /** * Configure the command * * @author Phil Burton */ protected function configure() { $this->addArgument('name', InputArgument::REQUIRED, 'The name of the new site.'); $this->addArgument('domain', InputArgument::REQUIRED, 'The domain name of the new site.'); $this ->setName('site:create') ->setDescription('Create a new site.') ->setHelp('This command allows you to create a new site.'); } /** * Run the command * * @param InputInterface $input * @param OutputInterface $output * @author Phil Burton */ protected function execute(InputInterface $input, OutputInterface $output) { $taskCount = 6; $name = $input->getArgument('name'); $domain = $input->getArgument('domain'); $output->writeln( 'Creating new site with domain: ' . $input->getArgument('domain') . ' and name: ' . $input->getArgument('name') ); // Set-up progress bar $progressBar = new ProgressBar($output, $taskCount); $progressBar->setFormatDefinition('custom', ' %current%/%max% -- %message%'); $progressBar->setFormat('custom'); $progressBar->setMessage('Starting...'); $progressBar->start(); $progressBar->setMessage('Running pre-flight checks'); // Construct the file commands so we run checks first $progressBar->advance(); $tasks = []; try { $tasks['Creating site directory'] = new \App\Filesystem\CreateDirectory(SITES_ROOT . $name); $tasks['Creating logs directory'] = new \App\Filesystem\CreateDirectory(SITES_ROOT . $name . '/logs'); $tasks['Creating access log file'] = new \App\Filesystem\CreateFile(SITES_ROOT . $name . '/logs/' . $name . '.access_log'); $tasks['Creating error log file'] = new \App\Filesystem\CreateFile(SITES_ROOT . $name . '/logs/' . $name . '.errors_log'); $tasks['Creating web folder'] = new \App\Filesystem\CreateDirectory(SITES_ROOT . $name . '/web'); $tasks['Creating directory index.php'] = new \App\Filesystem\CreateFile(SITES_ROOT . $name . '/web/index.php'); $tasks['Creating nginx config file'] = new \App\Filesystem\CreateFile(CONFIG_ROOT . $name . '.conf'); } catch (\Exception $e) { $output->writeln('Error with pre-flight checks'); $output->writeln($e->getMessage()); exit; } foreach ($tasks as $message => $task) { // Create file in web root for execution $progressBar->advance(); $progressBar->setMessage($message); $task->execute(); sleep(1); } // Finish up $progressBar->advance(); $progressBar->finish(); $output->writeln(''); $output->writeln('Complete'); } }