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









                                                                           
 
                                                          

 


                                    
                        



                                                              



                                                                                  
 
                                                                                   







                                                                                                           

                                                                
 


                                                                 













                                                                                           
                                                                    



                                                                                           
 

                                                           
                                           


















                                                                                                      
 
                                                                                 
 

                                                                   
 
                                                     
                                                                     
                                                                    
                                                                                                


                                                                                                                                          

                         
 
                         



                                                              
                                  

                                                                                             
                 
                                                                  
 


                                                   
                                                                 
                                                                               
                                                                                                                               

                                                                     
                                                                    
                                                                                
 

                                       

                                                                                 
 

                                            
 

                                                 
                                                                                                        




                                                                                   
 

                                                                 

                                                                                                      
                                                                                                


                                                                 

                                                                                                      
                                                                                                       






                                                                                     
                                                                            


                                     

                                                                                       





                                                                                                                            







                                                                                                   








                                                                                                                             
 
 















                                                                                                                    


                                          
                                                   

                                                                                                   
 







                                                                                                   




                                                                                                   
 


                                                                 

                                                                                                      
                                                                                        
 



                                                                  

                                                                                                      
                                                                                               






                                                                                     
                                                                            


                                                            











                                                                                                                                   
                                         












                                                                                                                                                

                                                                                                   
                                                                                                  
        


                                                                       













                                                                                                                             
                                        









                                                                                                                       
                                                                                                            












                                                                                                   
 








                                                                                                           

                                                                                                                   











                                                                                                       

 





 
<?php
/*
 * Copyright (c) 2011 - OpenSLX GmbH, RZ Uni Freiburg
 * This program is free software distributed under the GPL version 2.
 * See http://gpl.openslx.org/
 *
 * If you have any feedback please consult http://feedback.openslx.org/ and
 * send your suggestions, praise, or complaints to feedback@openslx.org
 *
 * General information about OpenSLX can be found at http://openslx.org/
 */

class user_BootosController extends Zend_Controller_Action
{

	protected $bootosMapper;
	protected $membershipMapper;
	protected $membership;
	protected $page;

	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');
		}
		$this->page = $this->_request->getParam('page');
	}

	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);
		}

		$groupID = $this->membership->getGroupID();

		//ACL Darf er BootOs sehen?
		if(!Pbs_Acl::checkRight('boai') && !Pbs_Acl::checkRight('boui'))
		$this->_redirect('/user/index');

		$groupgroupsMapper = new Application_Model_GroupGroupsMapper();
			
		$parents = array();
		$this->view->bootoslist = array();
		$parents = $groupgroupsMapper->getParentGroups($groupID);
			
		foreach($parents as $k => $parent){
			foreach($parent as  $p){
				$bootos = $this->bootosMapper->findBy(array("groupID" => $p));
				foreach ($bootos as $b)
				if($b->getPublic() - $k >= 0 )
				$this->view->bootoslist[] = $b;
				elseif($k == 0 && $b->getPublic() == -1 && Pbs_Acl::checkRight('boc'))
				$this->view->bootoslist[] = $b;
			}
		}

		$this->view->bootoslist = array_reverse($this->view->bootoslist);

		$update = $this->_request->getParam('checkupdate');
		$groupMapper = new Application_Model_GroupMapper();

		if(count($this->view->bootoslist)>0){
			foreach ($this->view->bootoslist as $bootos){
				if($bootos->getDefaultkcl() == null)
					$bootos->setDefaultkcl("none (edit Bootos to set KCL)");
				$bootos->setGroupID("[".$bootos->getGroupID()."] ".$groupMapper->find($bootos->getGroupID())->getTitle());
				$bootos->setCreated(date(Zend_Registry::get('dateformat'),$bootos->getCreated()));
				$bootos->setExpires(date(Zend_Registry::get('dateformat'),$bootos->getExpires()));
			}
		}

		// Search
		$search = $this->_request->getParam('search');
		$mySearch = new Pbs_Search();
		$mySearch->setSearchTerm($search);
		$mySearch->setModule('bootos');
		if($search != ''){
			$this->view->search = $mySearch->getSearchTerm();
			$this->view->bootoslist = $mySearch->search($this->view->bootoslist);
		}
		$this->view->searchform = $mySearch->searchForm();

		// Pagination
		$pagination = new Pbs_Pagination();
		$pagination->setPerPage(10);
		$pagination->setElement($this->view->bootoslist);
		$pagination->setRequestPage($this->_request->getParam('page'));
		$pagination->setPageUrl('/user/bootos/index'.((isset($this->view->search))?'/search/'.$this->view->search:''));
		$this->view->bootoslist = $pagination->getElements();

		$this->view->pagination = $pagination->pagination();
		$this->view->page 		= $pagination->getRequestPage();

	}
	public function searchAction(){
		$this->_redirect('/user/bootos/index/search/'.($_GET['search']));
	}

	public function createbootosAction()
	{

		//ACL Darf er BootISOs erstellen?
		if(!Pbs_Acl::checkRight('boc'))
			$this->_redirect('/user/bootos/index/page/'.$this->page.'/addresult/forbidden');
			
		$groupID = $this->membership->getGroupID();

		$groupgroupsMapper = new Application_Model_GroupGroupsMapper();
		$childgroups = count($groupgroupsMapper->getChildGroups($groupID));

		if (!isset($_POST["createbootos"])){
			$bootosForm = new user_Form_Bootos(array(
    	        							'action' => 'createbootos', 
    	        							'groupdepth' => $childgroups, 
    	        							'page' => $this->page));
		} else {

			$bootosForm = new user_Form_Bootos(array(
    	        							'action' => 'createbootos', 
    	        							'groupdepth' => $childgroups, 
    	        							'page' => $this->page),$_POST);

			if ($bootosForm->isValid($_POST)) {

				$bootos = new Application_Model_BootOs($_POST);
					
				$bootos->setGroupID($this->membership->getGroupID());
				$bootos->setCreated(time());
				$bootos->setSource($_SERVER['REMOTE_ADDR']);

				try {

					$bootosID = $this->bootosMapper->save($bootos);

					if(	$_FILES['kernel']['size'] == 0 && $_FILES['kernel']['name'] != '' || 
						$_FILES['init']['size'] == 0 && $_FILES['init']['name'] != '' ||
						$_FILES['config']['size'] == 0 && $_FILES['config']['name'] != '' ){
						$this->_redirect('/user/preboot/index/page/'.$this->page.'/addresult/file');
					}	
					
					$initpath = "../resources/bootos/".$bootosID."/initramfs/";
					$kernelpath = "../resources/bootos/".$bootosID."/kernel/";
					$configpath = "../resources/bootos/".$bootosID."/config/";

					mkdir($initpath ,0777, true);
					mkdir($kernelpath ,0777, true);
					mkdir($configpath ,0777, true);

					if($_FILES['kernel']['name'] != ''){
						move_uploaded_file($_FILES['kernel']['tmp_name'], $kernelpath."kernel");
					}
					if($_FILES['init']['name'] != ''){
						move_uploaded_file($_FILES['init']['tmp_name'], $initpath."initramfs");
					}
					if($_FILES['config']['name'] != ''){
						move_uploaded_file($_FILES['config']['tmp_name'], $configpath."default.tgz");
					}


				}catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					$this->_redirect('/user/bootos/index/page/'.$this->page.'/addresult/error');
					//TODO Delete File & delete bootiso from DB

				}

				$this->_redirect('/user/bootos/index/page/'.$this->page.'/addresult/ok');
			}
		}

		$this->view->bootosForm = $bootosForm;
	}

	public function editbootosAction()
	{

		//ACL Is he allowed to edit Bootos?
		if(!Pbs_Acl::checkRight('boe') && !Pbs_Acl::checkRight('boem'))
		$this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden');

		$bootosID = $this->_request->getParam('bootosID');
		if (!is_numeric($bootosID))
		$this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden');

		$groupID = $this->membership->getGroupID();

		$groupgroupsMapper = new Application_Model_GroupGroupsMapper();
		$childgroups = count($groupgroupsMapper->getChildGroups($groupID));
		$bootos = new Application_Model_BootOs();
		$bootos = $this->bootosMapper->find($bootosID);

		if($this->membership->getGroupID() != $bootos->getGroupID())
		$this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden');

		if (!isset($_POST["editbootos"])){

			$bootosForm = new user_Form_Bootos(array(
    									'action' => 'editbootos', 
    									'groupdepth' => $childgroups, 
    	        						'page' => $this->page));

			$bootosForm->populate($bootos->toArray());

		}else{
			$bootosForm = new user_Form_Bootos(array(
    									'action' => 'editbootos', 
    									'groupdepth' => $childgroups, 
    	        						'page' => $this->page),$_POST);

			if ($bootosForm->isValid($_POST)) {

				$bootosold = $bootos;

				$bootos = new Application_Model_BootOs($_POST);
				$bootos->setGroupID($this->membership->getGroupID());
				$bootos->setSource($bootosold->getSource());
				$bootos->setCreated(time());
				$bootos->setID($bootosID);
					
				try {
				
					if(	$bootos->getDistro() != $bootosold->getDistro() ||
						$bootos->getDistroversion() != $bootosold->getDistroversion() ||
						$bootos->getShare() != $bootosold->getShare() ||
						$bootos->getShortname() != $bootosold->getShortname() ||
						$bootos->getDefaultkcl() != $bootosold->getDefaultkcl() ||
						$bootos->getExpires() != $bootosold->getExpires() ||
						$bootos->getPublic() != $bootosold->getPublic() ){
						//ACL Is he allowed to edit this?
						if(!Pbs_Acl::checkRight('boe'))
						$this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden');
					}
	
					if($_FILES['kernel']['name'] != '' || $_FILES['init']['name'] != '' || $_FILES['config']['name'] != ''){
						//ACL Is he allowed to edit the Kernel/Init Path?
						if(!Pbs_Acl::checkRight('boe'))
							$this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/forbidden');
					}
				
					if(	$_FILES['kernel']['size'] == 0 && $_FILES['kernel']['name'] != '' || 
						$_FILES['init']['size'] == 0 && $_FILES['init']['name'] != '' ||
						$_FILES['config']['size'] == 0 && $_FILES['config']['name'] != '' ){
						$this->_redirect('/user/bootos/index/page/'.$this->page.'/addresult/file');
					}	
					
					$initpath = "../resources/bootos/".$bootosID."/initramfs/";
					$kernelpath = "../resources/bootos/".$bootosID."/kernel/";
					$configpath = "../resources/bootos/".$bootosID."/config/";
	
					mkdir($initpath ,0777, true);
					mkdir($kernelpath ,0777, true);
					mkdir($configpath ,0777, true);
		
					
					if($_FILES['kernel']['name'] != ''){
						$bootos->setSource($_SERVER['REMOTE_ADDR']);
						move_uploaded_file($_FILES['kernel']['tmp_name'], $kernelpath."kernel");
					}
					if($_FILES['init']['name'] != ''){
						$bootos->setSource($_SERVER['REMOTE_ADDR']);
						move_uploaded_file($_FILES['init']['tmp_name'], $initpath."initramfs");
					}
					if($_FILES['config']['name'] != ''){
						$bootos->setSource($_SERVER['REMOTE_ADDR']);
						move_uploaded_file($_FILES['config']['tmp_name'], $configpath."default.tgz");
					}
					
					$this->bootosMapper->save($bootos);

				}catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					$this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/error');
					//TODO Delete Folder + Preboot
				}

				$this->_redirect('/user/bootos/index/page/'.$this->page.'/modifyresult/ok');
			}

		}
			
		$this->view->bootosForm = $bootosForm;
			
	}

	public function deletebootosAction()
	{
		//ACL Is he allowed to delete Bootos?
		if(!Pbs_Acl::checkRight('bod'))
		$this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/forbidden');

		try{
			$bootosID = $this->_request->getParam('bootosID');
			if (!is_numeric($bootosID))
			$this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/forbidden');

			$bootos = new Application_Model_BootOs();
			$this->bootosMapper->find($bootosID, $bootos);

			if($this->membership->getGroupID() != $bootos->getGroupID())
				$this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/forbidden');
				
			$this->bootosMapper->delete($bootos);
			exec("rm -r ../resources/bootos/".$bootosID);

		}catch(Zend_Exception $e){
			echo "Caught exception: " . get_class($e) . "<br/>";
			echo "Message: " . $e->getMessage() . "<br/>";
			$this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/error');
		}
		$this->_redirect('/user/bootos/index/page/'.$this->page.'/deleteresult/ok');
	}


}