summaryrefslogblamecommitdiffstats
path: root/application/modules/dev/controllers/BootosController.php
blob: 1f31a693d14922ea022a08f310833b6ca5568e75 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12

     
                                                         








                                                         
        
                                                             





                                                                     
                                                            

                                      

                                                                     
                                                                                                            





                                                                                                                                                                                                        
        



                                        


                                                                        
                                            
                    
                                                                                                                                                       



                                      
                        
                                                                                                                                                              



                                                                       
                                                      


                                                                             
                                                    

                               







                                                                                                                                             



                                                                                       


                                                           
                            

                                                                                                        

                                
                            





                                                                                      
                        
                                                                        




                                                              













































                                                                                                                                          


                                      
                                                          

                                                             


                                                                  
                                                                 
                                                                


                                                                        
                                                            
                   
                                                                                                                                                      


                                                                  
                                                                                                                                                          


                                                       
                                                                         
                                                                       
                                                      


                                                                         
                                                









                                                                                
                                                                





                                                      



                                        

                                                          
                                                        





                                                                        
                                        
                










     
<?php

class dev_BootosController extends Zend_Controller_Action
{

    public function init()
    {
   		$db = Zend_Db_Table::getDefaultAdapter();
    }

    public function indexAction()
    {
    	
    	$bootosmapper = new Application_Model_BootOsMapper();
    	
        $groupmapper = new Application_Model_GroupMapper();
    	$membershipmapper = new Application_Model_MembershipMapper();
    	$personmapper = new Application_Model_PersonMapper();
    	$configmapper = new Application_Model_ConfigMapper();
    	
    	$this->view->bootoslist = $bootosmapper->fetchAll();
    	$this->view->update = array();
    	
    	if(count($this->view->bootoslist)>0){
			foreach ($this->view->bootoslist as $bootos){
				  $this->view->update[$bootos->getID()] = $this->checkupdateAction($bootos);
				  $bootos->setGroupID("[".$bootos->getGroupID()."] ".$groupmapper->find($bootos->getGroupID())->getTitle());
				  $bootos->setMembershipID("[".$bootos->getMembershipID()."] ".$personmapper->find($membershipmapper->find($bootos->getMembershipID())->getPersonID())->getFirstname());
				  $bootos->setConfigID("[".$bootos->getConfigID()."] ".$configmapper->find($bootos->getConfigID())->getTitle());
				  
			}
		}
    	
    }

    public function createbootosAction()
    {
    	$groupmapper = new Application_Model_GroupMapper();
    	$configmapper = new Application_Model_ConfigMapper();    	
    	
    	if (!isset($_POST["createbootos"])){
    		try{
    	        $createbootosForm = new dev_Form_BootosCreate(array('grouplist' => $groupmapper->fetchAll() ,'configlist'=>$configmapper->fetchAll()));
    	    }catch(Zend_Exception $e){
    	        print_a($e);
    	    }
    	} else {
    			
    	        $createbootosForm = new dev_Form_BootosCreate(array('grouplist' => $groupmapper->fetchAll() ,'configlist'=>$configmapper->fetchAll()),$_POST);
    			    			
    		    if ($createbootosForm->isValid($_POST)) {

    		    	$bootos = new Application_Model_BootOs($_POST);
    		    	$bootos->setMembershipID('1');
    		    	if($bootos->getConfigID() == '')
    		    		$bootos->setConfigID(NULL);
    		        $bootosmapper = new Application_Model_BootOsMapper();
    		        $bootos->setCreated(time());
    		        
    		    	try {  
    		    		exec("wget --spider ".$bootos->getPath_kernel()." 2>&1 | grep 'Remote file exists.'", $exists_kernel);
    					exec("wget --spider ".$bootos->getPath_init()." 2>&1 | grep 'Remote file exists.'" , $exists_init);  
    		      		
				    	if(!array_pop($exists_init) || !array_pop($exists_kernel)){
 							$this->view->createbootosForm = $createbootosForm;
 							return;		
				    	}		    	
    		    		
    		            $bootosID = $bootosmapper->save($bootos);
						
    		            $initpath = "../resources/bootos/".$bootosID."/initramfs/";
    		            $kernelpath = "../resources/bootos/".$bootosID."/kernel/";

    		            mkdir($initpath ,0777, true);
    		            mkdir($kernelpath ,0777, true);
    		            
    		      		exec("wget -O  '".$kernelpath."kernel' ".$bootos->getPath_kernel());
    		      		exec("wget -O  '".$initpath."initramfs' ".$bootos->getPath_init());    	

    		      		
    		            
    		        }catch(Zend_Exception $e)
    		        {
    		            echo "Caught exception: " . get_class($e) . "<br/>";
    					echo "Message: " . $e->getMessage() . "<br/>";
    					
    		        }
    		        
					$this->_redirect('/dev/bootos');
    		     }
    		}
    
            $this->view->createbootosForm = $createbootosForm;
    }
    
    public function checkupdateAction($bootos)
    {
    	exec("wget --server-response --spider '".escapeshellcmd($bootos->getPath_kernel())."' 2>&1 | grep 'Last-Modified:'", $kerneldate);
    	exec("wget --server-response --spider '".escapeshellcmd($bootos->getPath_init())."' 2>&1 | grep 'Last-Modified:'", $initdate);
	 	
    	$kerneldate = strtotime(trim(str_replace('Last-Modified:', '', array_pop($kerneldate))));
    	$kernelname = array_pop(scandir("../resources/bootos/".$bootos->getID()."/kernel/"));
    	
    	if($kernelname != "." && $kernelname != "..")
    		$kernelolddate = filemtime("../resources/bootos/".$bootos->getID()."/kernel/".$kernelname);
    	else 
    		$kernelolddate = false;
    	
    	$initdate = strtotime(trim(str_replace('Last-Modified:', '', array_pop($initdate))));
    	$initname = array_pop(scandir("../resources/bootos/".$bootos->getID()."/initramfs/"));
    	
    	if($initname != "." && $initname != "..")
    		$initolddate = filemtime("../resources/bootos/".$bootos->getID()."/initramfs/".$initname);
    	else 
    		$initolddate = false;    	
    	
    	//print_a($kernelname,$kerneldate,$kernelolddate,$initname,$initdate,$initolddate);
    	
    		
    	if($kerneldate > $kernelolddate || $initdate > $initolddate)
    		return true;
    	else 
    		return false;
    	   	
    }
    
    public function updatebootosAction()
    {
    	$bootosID = $this->_request->getParam('bootosID');
    	$bootosmapper = new Application_Model_BootOsMapper();
    	$bootos = $bootosmapper->find($bootosID);
    	
    	$initpath = "../resources/bootos/".$bootosID."/initramfs/";
    	$kernelpath = "../resources/bootos/".$bootosID."/kernel/";
    		            
    	exec("wget -P  ".$kernelpath." -N ".$bootos->getPath_kernel());
    	exec("wget -P  ".$initpath." -N ".$bootos->getPath_init());  
    	
    	$this->_redirect('/dev/bootos');
    }

    public function editbootosAction()
    {
    	$bootosID = $this->_request->getParam('bootosID');
    	$groupmapper = new Application_Model_GroupMapper();
    	$configmapper = new Application_Model_ConfigMapper();
    	
    	if (!isset($_POST["editbootos"])){
    		$bootosID = $this->_request->getParam('bootosID');
     		if (!isset($bootosID) || !is_numeric($bootosID)){
   				$this->_redirect('/dev/bootos');
    		} else {
    		   $bootos = new Application_Model_BootOs();
    		   $bootosmapper = new Application_Model_BootOsMapper();
    		   $bootos = $bootosmapper->find($bootosID);
    		   
    		   $editbootosForm = new dev_Form_BootosEdit(array('grouplist' => $groupmapper->fetchAll() ,'configlist'=>$configmapper->fetchAll()));
    		   $editbootosForm->populate($bootos->toArray()); 
    		}
    	}else{
    		$editbootosForm = new dev_Form_BootosEdit(array('grouplist' => $groupmapper->fetchAll() ,'configlist'=>$configmapper->fetchAll()),$_POST);
    			    			
    		if ($editbootosForm->isValid($_POST)) {

    			//TODO: Check for new URL and download new files.
    			$bootos = new Application_Model_BootOs($_POST);
    			$bootos->setMembershipID('1');
    		   	if($bootos->getConfigID() == '')
    		    	$bootos->setConfigID(NULL);
    		    $bootosmapper = new Application_Model_BootOsMapper();
    		    $bootos->setCreated(time());
    		    $bootos->setID($bootosID);
    		        
    		   	try {  
    		       	$bootosmapper->save($bootos);
    		    }catch(Zend_Exception $e)
    		    {
    		    	echo "Caught exception: " . get_class($e) . "<br/>";
    				echo "Message: " . $e->getMessage() . "<br/>";	
    		    }
    		    
				$this->_redirect('/dev/bootos');
    		}
    			
    	}
    	
    	$this->view->editbootosForm = $editbootosForm;
    	
    }

    public function deletebootosAction()
    {
    	$bootosID = $this->_request->getParam('bootosID');
     	if (!isset($bootosID)){
   			$this->_redirect('/dev/bootos');
    	} else {
    		   $bootos = new Application_Model_BootOs();
    		   $bootos->setID($bootosID);
    		   $bootosmapper = new Application_Model_BootOsMapper();
    		   $bootosmapper->delete($bootos);
    	}
    	$this->_redirect('/dev/bootos');
    		
    }


}