getItems(); // new items $newItems = []; // check for linebreak-object foreach($items as $index => $item) { if (get_class($item) === 'PhpSchool\CliMenu\MenuItem\LineBreakItem') { $startIndex = $index + 1; break; } } /*** foreach($items as $index => $item) { if ($index <= $vhostIndex) { $newItems[] = $item; } else { break; } }*/ // add submenu for each vhost foreach($vhosts as $vhost) { $newItems[] = self::createVhostSubmenu($vhost, $mainmenu); } // fillup last items from mainmenu foreach($items as $index => $item) { if ($index >= $startIndex) { $newItems[] = $item; } } $mainmenu->setItems($newItems); return $mainmenu; } /** * * * @param [type] $vhost * @param [type] $mainmenu * @return [type] */ private function createVhostSubmenu($vhost, $mainmenu) { $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); // adding checkbox if ($vhost['enabled']) { $checkbox->setChecked(true); } $builder ->setTitle('Nginx > '.$vhost['domain']) ->setGoBackButtonText('Back') // 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) { // 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!'); // get $parent = $menu->getParent(); $menu->closeThis(); // 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('-'); $submenu = $builder->build(); $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']) { $item->showItemExtra(); } return $item; } /** * * @param [type] $vhost * @return [type] */ private function createVhostCheckbox($vhost) { // create checkbox for enabled / disabled $checkbox = new CheckboxItem('enabled', function(CliMenu $menu) use ($vhost) { // check status if ($menu->getSelectedItem()->getChecked()) { symlink('/etc/nginx/sites-available/'.$vhost['file'], '/etc/nginx/sites-enabled/'.$vhost['file']); $status = 'enabled'; } else { unlink('/etc/nginx/sites-enabled/'.$vhost['file']); $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!'); } else { $menu->confirm('Error! Something not working!')->display('OK!'); } }); return $checkbox; } }