summaryrefslogtreecommitdiff
path: root/src/Script/Command/Site/Create.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Script/Command/Site/Create.php')
-rw-r--r--src/Script/Command/Site/Create.php99
1 files changed, 99 insertions, 0 deletions
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 @@
+<?php
+
+namespace App\Script\Command;
+
+use Symfony\Component\Console\Command\Command as SyCommand;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Helper\ProgressBar;
+use App\Filesystem\CreateFile;
+use App\Filesystem\CreateDirectory;
+
+/**
+ * A new Symfony command for creating a new site deployment
+ *
+ * @author Phil Burton <phil@d3r.com>
+ */
+class Create extends SyCommand
+{
+ /**
+ * Configure the command
+ *
+ * @author Phil Burton <phil@d3r.com>
+ */
+ 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 <phil@d3r.com>
+ */
+ 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');
+ }
+}