diff options
-rw-r--r-- | scripts/test.php | 4 | ||||
-rw-r--r-- | src/Filesystem/Create.php | 45 | ||||
-rw-r--r-- | src/Filesystem/CreateDirectory.php | 16 | ||||
-rw-r--r-- | src/Filesystem/CreateFile.php | 17 | ||||
-rw-r--r-- | src/Script/Command/Site/Create.php | 119 | ||||
-rw-r--r-- | src/Script/Console.php | 12 |
6 files changed, 126 insertions, 87 deletions
diff --git a/scripts/test.php b/scripts/test.php index d14076a..f1203ce 100644 --- a/scripts/test.php +++ b/scripts/test.php @@ -9,7 +9,7 @@ require(realpath(dirname(__FILE__) . "/../bootstrap.php")); // Set up siteroot define('DIPPER_ROOT', realpath(dirname(__FILE__) . "/../")); -define('SITES_ROOT', '/web/sites/'); -define('CONFIG_ROOT', '/web/etc/nginx/'); +define('SITES_ROOT', '/home/phil/sites/'); +define('CONFIG_ROOT', '/home/phil/sites/'); new App\Script\Console; diff --git a/src/Filesystem/Create.php b/src/Filesystem/Create.php deleted file mode 100644 index 45b09fd..0000000 --- a/src/Filesystem/Create.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php - -namespace App\Filesystem; - - -/** - * Base class for creating filesystem things - * - * @author Phil Burton <phil@d3r.com> - */ -abstract class Create -{ - /** - * Filename to create - * - * @var string - * @author Phil Burton <phil@d3r.com> - */ - protected $filename; - - /** - * Thing we're creating, used for messages - * - * @var string - * @author Phil Burton <phil@d3r.com> - */ - protected $thing; - - /** - * Set filename on object and check we can wirte to the Directory - * - * @param string $filename - * @author Phil Burton <phil@d3r.com> - */ - public function __construct(string $filename) - { - $this->filename = $filename; - - if (!is_writable(dirname($filename))) { - throw new \Exception('Cannot create ' . $this->thing . ' at: ' . $filename); - } - } - - abstract public function excecute(); -} diff --git a/src/Filesystem/CreateDirectory.php b/src/Filesystem/CreateDirectory.php index 2af53d7..c74cba4 100644 --- a/src/Filesystem/CreateDirectory.php +++ b/src/Filesystem/CreateDirectory.php @@ -2,14 +2,12 @@ namespace App\Filesystem; -use App\Filesystem\Create; - /** * Class to create a new directory * * @author Phil Burton <phil@d3r.com> */ -class CreateDirectory extends Create +class CreateDirectory { /** * Thing we're creating @@ -18,6 +16,8 @@ class CreateDirectory extends Create */ protected $thing = "directory"; + protected $filename; + /** * Check if the directory already exists * @@ -26,7 +26,11 @@ class CreateDirectory extends Create */ public function __construct(string $filename) { - parent::__construct($filename); + $this->filename = $filename; + + if (!is_writable(dirname($filename))) { + throw new \Exception('Cannot create ' . $this->thing . ' at: ' . $filename); + } if (file_exists($filename)) { throw new \Exception('Directory already exists at: ' . $filename); @@ -38,8 +42,8 @@ class CreateDirectory extends Create * * @author Phil Burton <phil@d3r.com> */ - public function excecute() + public function execute() { - echo "execute"; + mkdir($this->filename); } } diff --git a/src/Filesystem/CreateFile.php b/src/Filesystem/CreateFile.php index 7fed65c..08ba0db 100644 --- a/src/Filesystem/CreateFile.php +++ b/src/Filesystem/CreateFile.php @@ -2,15 +2,12 @@ namespace App\Filesystem; -use App\Filesystem\Create; - /** * Class to create a new file * - * @param string $filename [description] * @author Phil Burton <phil@d3r.com> */ -class CreateFile extends Create +class CreateFile { /** * Thing we're creating @@ -19,6 +16,8 @@ class CreateFile extends Create */ protected $thing = "file"; + protected $filename; + /** * Check if the file already exists * @@ -27,7 +26,11 @@ class CreateFile extends Create */ public function __construct(string $filename) { - parent::__construct($filename); + $this->filename = $filename; + + if (!is_writable(dirname($filename))) { + throw new \Exception('Cannot create ' . $this->thing . ' at: ' . $filename); + } if (file_exists($filename)) { throw new \Exception('File already exists at: ' . $filename); @@ -39,8 +42,8 @@ class CreateFile extends Create * * @author Phil Burton <phil@d3r.com> */ - public function excecute() + public function execute() { - echo "execute"; + touch($this->filename); } } diff --git a/src/Script/Command/Site/Create.php b/src/Script/Command/Site/Create.php index 2526d2e..c7936fd 100644 --- a/src/Script/Command/Site/Create.php +++ b/src/Script/Command/Site/Create.php @@ -1,11 +1,12 @@ <?php -namespace App\Script\Command; +namespace App\Script\Command\Site; 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\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Helper\ProgressBar; use App\Filesystem\CreateFile; use App\Filesystem\CreateDirectory; @@ -17,6 +18,8 @@ use App\Filesystem\CreateDirectory; */ class Create extends SyCommand { + protected $progressBar; + /** * Configure the command * @@ -31,6 +34,13 @@ class Create extends SyCommand ->setName('site:create') ->setDescription('Create a new site.') ->setHelp('This command allows you to create a new site.'); + + $this->addOption( + 'test', + 't', + InputOption::VALUE_NONE, + 'Run in test mode without any file or directory created?' + ); } /** @@ -55,45 +65,104 @@ class Create extends SyCommand ); // 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'); + $this->progressBar = new ProgressBar($output, $taskCount); + $this->progressBar->setFormatDefinition('custom', ' %current%/%max% -- %message%'); + $this->progressBar->setFormat('custom'); + $this->progressBar->setMessage('Starting...'); + $this->progressBar->start(); + $this->progressBar->setMessage('Running pre-flight checks'); // Construct the file commands so we run checks first - $progressBar->advance(); + $this->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'); + $tasks['Creating site directory'] = new \App\Filesystem\CreateDirectory( + SITES_ROOT . $name + ); + + $tasks['Creating nginx config file'] = new \App\Filesystem\CreateFile( + CONFIG_ROOT . $name . '.conf' + ); } catch (\Exception $e) { + $output->writeln(''); $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); - } + if (!$input->getOption("test")) { + foreach ($tasks as $message => $task) { + // Create file in web root for execution + $this->runTask($task, $message); + } + + try { + $tasks = []; + + $this->runTask( + new \App\Filesystem\CreateDirectory( + SITES_ROOT . $name . '/logs' + ), + 'Creating logs directory' + ); + $this->runTask( + new \App\Filesystem\CreateFile( + SITES_ROOT . $name . '/logs/' . $name . '.access_log' + ), + 'Creating access log file' + ); + + $this->runTask( + new \App\Filesystem\CreateFile( + SITES_ROOT . $name . '/logs/' . $name . '.errors_log' + ), + 'Creating error log file' + ); + + $this->runTask( + new \App\Filesystem\CreateDirectory( + SITES_ROOT . $name . '/web' + ), + 'Creating web folder' + ); + + $this->runTask( + new \App\Filesystem\CreateFile( + SITES_ROOT . $name . '/web/index.php' + ), + 'Creating directory index.php' + ); + + + foreach ($tasks as $task) { + // Create file in web root for execution + $this->progressBar->advance(); + $this->progressBar->setMessage($task[0]); + $task[1]->execute(); + sleep(1); + } + } catch (\Exception $e) { + $output->writeln('Unexpected Error creating files and directories'); + $output->writeln($e->getMessage()); + exit; + } + } // Finish up - $progressBar->advance(); - $progressBar->finish(); + $this->progressBar->advance(); + $this->progressBar->finish(); $output->writeln(''); $output->writeln('Complete'); } + + public function runTask($task, $message) + { + $this->progressBar->advance(); + $this->progressBar->setMessage($message); + $task->execute(); + sleep(1); + } } diff --git a/src/Script/Console.php b/src/Script/Console.php index 926f41f..5f5d90d 100644 --- a/src/Script/Console.php +++ b/src/Script/Console.php @@ -3,14 +3,22 @@ namespace App\Script; use Symfony\Component\Console\Application; -use App\Script\Command\Site; +use App\Script\Command\Site\Create; +/** + * Main application class + */ class Console { + /** + * Create symfony application and add commands + * + * @author Phil Burton <phil@pgburton.com> + */ public function __construct() { $application = new Application(); - $application->add(new Site()); + $application->add(new Create()); $application->run(); } } |