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