From 31ac8bccdae86eeb150cb396c44ee88427120e3e Mon Sep 17 00:00:00 2001 From: Phil Burton Date: Mon, 21 Aug 2017 18:58:05 +0100 Subject: wip --- src/Script/Command/Site/Create.php | 99 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/Script/Command/Site/Create.php (limited to 'src/Script/Command/Site/Create.php') diff --git a/src/Script/Command/Site/Create.php b/src/Script/Command/Site/Create.php new file mode 100644 index 0000000..2526d2e --- /dev/null +++ b/src/Script/Command/Site/Create.php @@ -0,0 +1,99 @@ + + */ +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'); + } +} -- cgit v1.2.3