|
|
@ -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']) { |
|
|
|