Browse Source

adding #8

release/0.1
Björn 4 years ago
parent
commit
b10d046a17
2 changed files with 70 additions and 40 deletions
  1. +9
    -7
      app/Commands/NginxVhostsCommand.php
  2. +61
    -33
      app/Factories/NginxVhostFactory.php

+ 9
- 7
app/Commands/NginxVhostsCommand.php View File

@ -103,7 +103,7 @@ class NginxVhostsCommand extends Command
$blade = new Blade(base_path().self::TEMPLATES_DIR, base_path().'/storage/cache'); $blade = new Blade(base_path().self::TEMPLATES_DIR, base_path().'/storage/cache');
$builder $builder
->setTitle('Nginx > add')
->setTitle('Nginx > Add')
->setGoBackButtonText('Back'); ->setGoBackButtonText('Back');
foreach($templates as $template) { foreach($templates as $template) {
@ -155,14 +155,14 @@ class NginxVhostsCommand extends Command
$checkboxRedirect->setChecked($configuration['redirect_www']); $checkboxRedirect->setChecked($configuration['redirect_www']);
$builder $builder
->setTitle('Nginx Vhosts > add > '.$template['name'])
->setTitle('Nginx Vhosts > Add > '.$template['name'])
// input domain // input domain
->addItem('domain', function(CliMenu $menu) use (&$configuration) { ->addItem('domain', function(CliMenu $menu) use (&$configuration) {
$result = $menu->askText()->ask(); $result = $menu->askText()->ask();
$configuration['domain'] = $result->fetch(); $configuration['domain'] = $result->fetch();
$menu->getSelectedItem()->setText('domain -> '.$result->fetch());
$menu->getSelectedItem()->setText('domain: '.$result->fetch());
$menu->redraw(); $menu->redraw();
}) })
@ -171,7 +171,7 @@ class NginxVhostsCommand extends Command
$result = $menu->askText()->ask(); $result = $menu->askText()->ask();
$configuration['root'] = $result->fetch(); $configuration['root'] = $result->fetch();
$menu->getSelectedItem()->setText('root -> '.$result->fetch());
$menu->getSelectedItem()->setText('root: '.$result->fetch());
$menu->redraw(); $menu->redraw();
}) })
@ -190,8 +190,8 @@ class NginxVhostsCommand extends Command
->addMenuItem($checkboxRedirect) ->addMenuItem($checkboxRedirect)
->addLineBreak('-') ->addLineBreak('-')
// create
->addItem('create', function(CliMenu $menu) use (&$configuration, $template, $blade, $self) {
// create
->addItem('Create', function(CliMenu $menu) use (&$configuration, $template, $blade, $self) {
// render configuration // render configuration
$content = $blade->render($template['name'], $configuration); $content = $blade->render($template['name'], $configuration);
@ -237,12 +237,14 @@ class NginxVhostsCommand extends Command
// add Submenu for select templates // add Submenu for select templates
->addLineBreak('-') ->addLineBreak('-')
->addSubMenu('add', $submenuSelectTemplate);
->addSubMenu('Add', $submenuSelectTemplate);
$mainmenu->addLineBreak('-'); $mainmenu->addLineBreak('-');
// apperance // apperance
$mainmenu->setWidth($mainmenu->getTerminal()->getWidth()); $mainmenu->setWidth($mainmenu->getTerminal()->getWidth());
$mainmenu->setBorderLeftWidth(4);
$mainmenu->setBorderColour('magenta');
$mainmenu->setMargin(2); $mainmenu->setMargin(2);
$mainmenu = $mainmenu->build(); $mainmenu = $mainmenu->build();


+ 61
- 33
app/Factories/NginxVhostFactory.php View File

@ -76,12 +76,14 @@ class NginxVhostFactory
->setUnselectedMarker(' '); ->setUnselectedMarker(' ');
}); });
$log = '';
// create checkbox for disable / enabled // create checkbox for disable / enabled
$checkbox = self::createVhostCheckbox($vhost);
$checkbox = self::createVhostCheckbox($vhost, $log);
// adding checkbox
// if vhost is enabled
if ($vhost['enabled']) { if ($vhost['enabled']) {
$checkbox->setChecked(true);
$checkbox->setChecked();
} }
$builder $builder
@ -96,34 +98,40 @@ class NginxVhostFactory
// delete configuration // delete configuration
->addItem('delete', function(CliMenu $menu) use ($vhost) { ->addItem('delete', function(CliMenu $menu) use ($vhost) {
// input domain for confirmation
$result = $menu->askText()
->setPromptText('Enter the domain name as confirmation: '.$vhost['domain'].' / [ESC] for Cancel')
->ask();
if ($vhost['enabled'] === true) {
$menu->flash('Please disable first!')->display();
} else {
// 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!');
// input domain for confirmation
$result = $menu->askText()
->setPromptText('Enter the domain name as confirmation: '.$vhost['domain'].' / [ESC] for Cancel')
->ask();
// get
$parent = $menu->getParent();
$menu->closeThis();
// 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!');
// remove current vhost from mainmenu
$parent->removeItem($parent->getSelectedItem());
$parent->open();
// get
$parent = $menu->getParent();
$menu->closeThis();
// cancel input
} else if (empty($result->fetch())) {
$menu->flash('Cancel')->display();
// 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();
}
// if domain not matching
} else {
$menu->flash('Not matching! Domain not deleted!')->display();
} }
}, false, $vhost['enabled'])
})
->addLineBreak('-') ->addLineBreak('-')
->addMenuItem($checkbox) ->addMenuItem($checkbox)
->addLineBreak('-'); ->addLineBreak('-');
@ -159,27 +167,47 @@ class NginxVhostFactory
private function createVhostCheckbox($vhost) private function createVhostCheckbox($vhost)
{ {
// create checkbox for enabled / disabled // create checkbox for enabled / disabled
$checkbox = new CheckboxItem('enabled', function(CliMenu $menu) use ($vhost) {
$checkbox = new CheckboxItem('enabled', function(CliMenu $menu) use (&$vhost, &$log) {
// check status // check status
if ($menu->getSelectedItem()->getChecked()) { if ($menu->getSelectedItem()->getChecked()) {
symlink('/etc/nginx/sites-available/'.$vhost['file'], '/etc/nginx/sites-enabled/'.$vhost['file']); symlink('/etc/nginx/sites-available/'.$vhost['file'], '/etc/nginx/sites-enabled/'.$vhost['file']);
$status = 'enabled';
exec('nginx -c /etc/nginx/nginx.conf -t 2>&1', $output);
if ($output) {
unlink('/etc/nginx/sites-enabled/'.$vhost['file']);
$menu->confirm('Error! Configuration not Working!')->display('OK!');
// @TODO: find a way to show logs, https://gitea.tentakelfabrik.de/Tentakelfabrik/mcp/issues/15
// implode(PHP_EOL, $output);
$vhost['enabled'] = false;
$status = 'disabled';
} else {
// restart
exec('service nginx restart');
$menu->confirm('Success! ')->display('OK!');
$vhost['enabled'] = true;
$status = 'enabled';
}
} else { } else {
unlink('/etc/nginx/sites-enabled/'.$vhost['file']); unlink('/etc/nginx/sites-enabled/'.$vhost['file']);
$vhost['enabled'] = false;
$status = 'disabled'; $status = 'disabled';
} }
// restart
exec('service nginx restart');
exec('service nginx status', $output);
if (strpos(implode(' ', $output), 'active') !== false) {
$menu->confirm($vhost['domain'].' is '.$status.'!')->display('OK!');
if ($vhost['enabled']) {
$menu->getSelectedItem()->setChecked();
} else { } else {
$menu->confirm('Error! Something not working!')->display('OK!');
$menu->getSelectedItem()->setUnchecked();
} }
$menu->redraw();
}); });
return $checkbox; return $checkbox;


Loading…
Cancel
Save