summaryrefslogblamecommitdiffstats
path: root/application/modules/user/controllers/BootosController.php
blob: a7b83ee043663c75678fb33c77c971d18284d36f (plain) (tree)
1
2
3
4
5
6
7
8
9

     
                                                          

 



                                    

                          















                                                                                                           



                                 



















                                                                                           
        

                                                                        
        






                                                             
        
                                                                                   

                                      

                                                           

                                                                     



                                                                                                                                                                                                              







                                        


                                              
                                                                           
        






                                                                           

                                            
                                                                                                                                                                  

                        
                                                                                                                                                                         
                                                
                                                       


                                                                       

                                                                             


                                                    












                                                                                                                                                            


                                                                        
                                                                           






                                                                                       

                                                                                                




                                                                                      

                                                                                               


                                        
                                                                                            


                      
                                                  



                                              






                                                                               
                                                                                                                                   


                                                                                                  
             
         
                            
                
        






                                                                                                                                          
        




































                                                                        

                                                                                                                                               

                 
                                                                                                                                                   
                                                
                                                   






















                                                                                
                                              















                                                                        




     





 
<?php

class user_BootosController extends Zend_Controller_Action
{

	protected $bootosMapper;
	protected $membershipMapper;
	protected $membership;
	
    public function init()
    {
        if (Zend_Auth::getInstance()->hasIdentity()) {
			$userIDsNamespace = Zend_Session::namespaceGet('userIDs');
			if($userIDsNamespace['membershipID'] ==''){
				$this->_redirect('/user/index');
			}
			
			$this->bootosMapper = new Application_Model_BootOsMapper();
			
			$this->membershipMapper = new Application_Model_MembershipMapper();
			$this->membership = new Application_Model_Membership();
			$this->membershipMapper->find($userIDsNamespace['membershipID'],$this->membership);

			$this->db = Zend_Db_Table::getDefaultAdapter();
		} else {
			$this->_helper->redirector('login', 'auth');
		}
    }

    public function indexAction()
    {
        $result = $this->_request->getParam('addresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('create',$result);
		}
		$result = $this->_request->getParam('deleteresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('delete',$result);
		}
		$result = $this->_request->getParam('modifyresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('modify',$result);
		}
    	$result = $this->_request->getParam('updateresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('update',$result);
		}
    	
		$groupMapper = new Application_Model_GroupMapper();    	
    	$personMapper = new Application_Model_PersonMapper();
    	
    	$groupID = $this->membership->getGroupID();  
		
		//TODO ACL Darf er BootOsMenu sehen?
    	if(false)
    		$this->_redirect('/user/index');
    		
       	$configMapper = new Application_Model_ConfigMapper();
    	
    	$this->view->bootoslist = $this->bootosMapper->findBy("groupID", $groupID);
    	$this->view->update = array();
    	
    	$update = $this->_request->getParam('checkupdate');
    	
    	if(count($this->view->bootoslist)>0){
			foreach ($this->view->bootoslist as $bootos){
				  $this->view->update[$bootos->getID()] = $update && $this->checkupdateAction($bootos);
				  $bootos->setGroupID("[".$bootos->getGroupID()."] ".$groupMapper->find($bootos->getGroupID())->getTitle());
				  $bootos->setMembershipID("[".$bootos->getMembershipID()."] ".$personMapper->find($this->membershipMapper->find($bootos->getMembershipID())->getPersonID())->getFirstname());
				  $bootos->setConfigID("[".$bootos->getConfigID()."] ".$configMapper->find($bootos->getConfigID())->getTitle());
				  
			}
		}
    	
    }

    public function createbootosAction()
    {
    	
    	//TODO ACL Darf er BootISOs erstellen?
    	if(false)
    		$this->_redirect('/user/bootos/index/addresult/forbidden');
    	
       	$groupID = $this->membership->getGroupID();
    		
    	$groupgroupsMapper = new Application_Model_GroupGroupsMapper();
    	$childgroups = count($groupgroupsMapper->getChildGroups($groupID));
    	
    	$configMapper = new Application_Model_ConfigMapper();   
    	$configlist = $configMapper->findBy("groupID", $groupID); 	
    	
    	if (!isset($_POST["createbootos"])){
    	        $bootosForm = new user_Form_Bootos(array('action' => 'createbootos', 'groupdepth' => $childgroups, 'configlist'=>$configlist, 'rights' => 'all'));
    	} else {
    			
    	        $bootosForm = new user_Form_Bootos(array('action' => 'createbootos', 'groupdepth' => $childgroups, 'configlist'=>$configlist, 'rights' => 'all'),$_POST);
    			    			
    		    if ($bootosForm->isValid($_POST)) {

    		    	$bootos = new Application_Model_BootOs($_POST);
    		    	
    		    	$bootos->setMembershipID($this->membership->getID());
    		    	$bootos->setGroupID($this->membership->getGroupID());
    		        $bootos->setCreated(time());
    		        
    		    	try {  
    		    		
    		    		$path_tmp = "../resources/bootos/";
    		            mkdir($path_tmp ,0777, true);
    		    		
						$hash = md5(microtime(1));
    		    		exec("wget -O '".$path_tmp."kernel".$hash."' ".escapeshellcmd($bootos->getPath_kernel())." 2>&1 | grep 'saved'", $status);
    		      		exec("wget -O '".$path_tmp."initramfs".$hash."' ".escapeshellcmd($bootos->getPath_init())." 2>&1 | grep 'saved'", $status2);
    		    		
				    	if(!array_pop($status) || !array_pop($status2)){
 							$this->view->bootosForm = $bootosForm;
 							$pbsNotifier = new Pbs_Notifier();
							echo $pbsNotifier->notify('The Resource was not found on the specified path','error');
							
 							return;		
				    	}		    	
    		    		
    		            $bootosID = $this->bootosMapper->save($bootos);
						
    		            $initpath = "../resources/bootos/".$bootosID."/initramfs/";
    		            $kernelpath = "../resources/bootos/".$bootosID."/kernel/";

    		            mkdir($initpath ,0777, true);
    		            mkdir($kernelpath ,0777, true);
    		            
    		            exec("mv ../resources/bootos/kernel$hash $kernelpath"."kernel");
    		            exec("mv ../resources/bootos/initramfs$hash $initpath"."initramfs");
    		            
    		        }catch(Zend_Exception $e)
    		        {
    		            echo "Caught exception: " . get_class($e) . "<br/>";
    					echo "Message: " . $e->getMessage() . "<br/>";
    					$this->_redirect('/user/bootos/index/addresult/error');
    					//TODO Delete File & delete bootiso from DB
    					
    		        }
    		        
					$this->_redirect('/user/bootos/index/addresult/ok');
    		     }
    		}
    
            $this->view->bootosForm = $bootosForm;
    }
    
    public function checkupdateAction($bootos)
    {
    	
    	//TODO ACL Is he allowed to update Preboots?
    	if(false)
    		$this->_redirect('/user/preboot/index/updateresult/forbidden');
    	
    	$bootosID = $bootos->getID();	
    		
    	if(is_file("../resources/bootos/$bootosID/kernel/kernel") && is_file("../resources/bootos/$bootosID/initramfs/initramfs")){
    		$kernelolddate = filemtime("../resources/bootos/".$bootosID."/kernel/kernel");
    		$initolddate = filemtime("../resources/bootos/".$bootosID."/initramfs/initramfs");
    	}
    	else 
    	{
    		return true;
    	}  	
    	
    	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))));
    	$initdate = strtotime(trim(str_replace('Last-Modified:', '', array_pop($initdate))));

    	print_a($bootos->getPath_kernel(),$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('/user/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('/user/bootos');
    		} else {
    		   $bootos = new Application_Model_BootOs();
    		   $bootosmapper = new Application_Model_BootOsMapper();
    		   $bootos = $bootosmapper->find($bootosID);
    		   
    		   $bootosForm = new user_Form_Bootos(array('grouplist' => $groupmapper->fetchAll() ,'configlist'=>$configmapper->fetchAll()));
    		   $bootosForm->populate($bootos->toArray()); 
    		}
    	}else{
    		$bootosForm = new user_Form_Bootos(array('grouplist' => $groupmapper->fetchAll() ,'configlist'=>$configmapper->fetchAll()),$_POST);
    			    			
    		if ($bootosForm->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('/user/bootos');
    		}
    			
    	}
    	
    	$this->view->bootosForm = $bootosForm;
    	
    }

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


}