diff --git a/app/Commands/NginxVhostsCommand.php b/app/Commands/NginxVhostsCommand.php index 2359d8f..e43954f 100644 --- a/app/Commands/NginxVhostsCommand.php +++ b/app/Commands/NginxVhostsCommand.php @@ -21,7 +21,9 @@ use Log; use Closure; /** + * Add and Edit Configurations of Vhosts from Nginx * + * Using php-school/cli-menu * * * @@ -32,7 +34,7 @@ class NginxVhostsCommand extends Command const TEMPLATES_DIR = '/resources/nginx/templates'; // index for vhosts - const VHOST_INDEX = 2; + const VHOST_INDEX = 1; /** * The signature of the command. @@ -50,8 +52,8 @@ class NginxVhostsCommand extends Command /** * - * - * + * @param string $prefix [description] + * @return [type] [description] */ private function getTemplates($prefix = '') { @@ -154,6 +156,8 @@ class NginxVhostsCommand extends Command $builder ->setTitle('Nginx Vhosts > add > '.$template['name']) + + // input domain ->addItem('domain', function(CliMenu $menu) use (&$configuration) { $result = $menu->askText()->ask(); $configuration['domain'] = $result->fetch(); @@ -161,6 +165,8 @@ class NginxVhostsCommand extends Command $menu->getSelectedItem()->setText('domain -> '.$result->fetch()); $menu->redraw(); }) + + // input root ->addItem('root', function(CliMenu $menu) use (&$configuration) { $result = $menu->askText()->ask(); $configuration['root'] = $result->fetch(); @@ -168,6 +174,8 @@ class NginxVhostsCommand extends Command $menu->getSelectedItem()->setText('root -> '.$result->fetch()); $menu->redraw(); }) + + // input index ->addItem($configuration['index'], function(CliMenu $menu) use (&$configuration) { $result = $menu->askText()->ask(); $configuration['index'] = $result->fetch(); @@ -176,10 +184,14 @@ class NginxVhostsCommand extends Command $menu->redraw(); }) ->addLineBreak('-') + + // options ->addMenuItem($checkboxSSL) ->addMenuItem($checkboxRedirect) ->addLineBreak('-') - ->addItem('save', function(CliMenu $menu) use (&$configuration, $template, $blade, $self) { + + // create + ->addItem('create', function(CliMenu $menu) use (&$configuration, $template, $blade, $self) { // render configuration $content = $blade->render($template['name'], $configuration); @@ -217,12 +229,15 @@ class NginxVhostsCommand extends Command // create menu $mainmenu = $this->menu('Nginx') + // change style of menu + ->modifySelectableStyle(function(SelectableStyle $style) { + $style->setSelectedMarker("\xE2\x96\xB6 ") + ->setUnselectedMarker(' '); + }) + // add Submenu for select templates - ->addSubMenu('add', $submenuSelectTemplate) ->addLineBreak('-') - ->modifySelectableStyle(function (SelectableStyle $style) { - $style->setItemExtra('[ enabled ]'); - }); + ->addSubMenu('add', $submenuSelectTemplate); $mainmenu->addLineBreak('-'); diff --git a/app/Factories/NginxVhostFactory.php b/app/Factories/NginxVhostFactory.php index 0fecec4..3edfb31 100644 --- a/app/Factories/NginxVhostFactory.php +++ b/app/Factories/NginxVhostFactory.php @@ -6,6 +6,7 @@ use PhpSchool\CliMenu\Builder\CliMenuBuilder; use PhpSchool\CliMenu\CliMenu; use PhpSchool\CliMenu\MenuItem\CheckboxItem; use PhpSchool\CliMenu\MenuItem\MenuMenuItem; +use PhpSchool\CliMenu\Style\SelectableStyle; class NginxVhostFactory { @@ -24,21 +25,22 @@ class NginxVhostFactory // new items $newItems = []; + // check for linebreak-object foreach($items as $index => $item) { - if ($index <= $vhostIndex) { - $newItems[] = $item; - } else { + if (get_class($item) === 'PhpSchool\CliMenu\MenuItem\LineBreakItem') { + $startIndex = $index + 1; break; } } - // check for linebreak-object + /*** foreach($items as $index => $item) { - if ($index > $vhostIndex && get_class($item) === 'PhpSchool\CliMenu\MenuItem\LineBreakItem') { - $startIndex = $index; + if ($index <= $vhostIndex) { + $newItems[] = $item; + } else { break; } - } + }*/ // add submenu for each vhost foreach($vhosts as $vhost) { @@ -68,6 +70,12 @@ class NginxVhostFactory { $builder = CliMenuBuilder::newSubMenu($mainmenu->getTerminal()); + // style selected and unselected + $builder->modifySelectableStyle(function(SelectableStyle $style) { + $style->setSelectedMarker('> ') + ->setUnselectedMarker(' '); + }); + // create checkbox for disable / enabled $checkbox = self::createVhostCheckbox($vhost); @@ -79,14 +87,22 @@ class NginxVhostFactory $builder ->setTitle('Nginx > '.$vhost['domain']) ->setGoBackButtonText('Back') - ->addLineBreak('') + + // edit configuration ->addItem('edit', function(CliMenu $menu) use ($vhost) { system('nano /etc/nginx/sites-available/'.$vhost['file'].' > `tty`'); }) + + // delete configuration ->addItem('delete', function(CliMenu $menu) use ($vhost) { - if (file_exists('/etc/nginx/sites-enabled/'.$vhost['file'])) { - $menu->confirm('Error! Please disable '.$vhost['domain'].' first!')->display('OK!'); - } else { + + // input domain for confirmation + $result = $menu->askText() + ->setPromptText('Enter the domain name as confirmation: '.$vhost['domain'].' / [ESC] for Cancel') + ->ask(); + + // if result matching delete vhost an close menu + if ($result->fetch() === $vhost['domain']) { unlink('/etc/nginx/sites-available/'.$vhost['file']); $menu->confirm($vhost['domain'].' is deleted!')->display('OK!'); @@ -97,8 +113,17 @@ class NginxVhostFactory // remove current vhost from mainmenu $parent->removeItem($parent->getSelectedItem()); $parent->open(); + + // cancel input + } else if (empty($result->fetch())) { + $menu->flash('Cancel')->display(); + + // if domain not matching + } else { + $menu->flash('Not matching! Domain not deleted!')->display(); } - }) + + }, false, $vhost['enabled']) ->addLineBreak('-') ->addMenuItem($checkbox) ->addLineBreak('-'); @@ -108,12 +133,15 @@ class NginxVhostFactory $submenu->setParent($mainmenu); $submenu->setStyle($mainmenu->getStyle()); + // create MenuMenuItem $item = new MenuMenuItem( $vhost['domain'], $submenu, $builder->isMenuDisabled() ); + $item->getStyle()->setSelectedMarker("\xF0\x9D\x8C\xA1 ")->setUnselectedMarker(' '); + // show item extra if domain is enabled $item->getStyle()->setItemExtra('[ enabled ]'); if ($vhost['enabled']) {