summaryrefslogblamecommitdiffstats
path: root/application/controllers/EventController.php
blob: 518e41accad2c2670c3e8cff4a9275a3234bc73f (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 EventController extends Zend_Controller_Action
{
	protected $eventMapper;
	protected $eventcategoryMapper;
	protected $config;
	protected $pbs2host;
	protected $userIDsNamespace;
	protected $acl;
	protected $gearmanClient;
	protected $gearmanServerHost;
	protected $gearmanServerPort;
	protected $gearmanWorkerUpdateRate;
	protected $gearmanWorkerWaitTime;
	protected $poolVal = 'default';

	public function init()
	{
		$bootstrap = $this->getInvokeArg('bootstrap');
		$this->config = $bootstrap->getOptions();
		$this->pbs2host = $this->config['pbs2']['host'];
		$this->gearmanServerHost = $this->config['gearman']['server']['host'];
		$this->gearmanServerPort = $this->config['gearman']['server']['port'];
		$this->gearmanWorkerWaitTime = $this->config['gearman']['worker']['waitTime'];
		$this->gearmanWorkerUpdateRate = $this->config['gearman']['worker']['updateRate'];
		$this->gearmanClient = new GearmanClient();
		$this->gearmanClient->addServer($this->gearmanServerHost);
		$this->eventMapper = new Application_Model_EventMapper();
		$this->eventcategoryMapper = new Application_Model_EventcategoryMapper();
		$actionName = $this->getRequest()->getActionName();
		if($actionName == "report" || $actionName == "run") {
			$this->userIDsNamespace = Zend_Session::namespaceGet('userIDs');
			if(isset($this->userIDsNamespace['apikey'])) {
				$apikey = $this->userIDsNamespace['apikey'];
			} else {
				$apikey = $this->_request->getParam('apikey');
			}
			if($apikey != ""){
				$this->acl = new Poolctrl_Acl($this->pbs2host, $this->config['pbs2']['checkright'] . $apikey, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
			} else {
				header('HTTP/1.0 401 No apikey is set');
				die();
			}
		} else if (Zend_Auth::getInstance()->hasIdentity()) {
			$this->userIDsNamespace = Zend_Session::namespaceGet('userIDs');
			if(isset($this->userIDsNamespace['apikey'])) {
				$this->acl = new Poolctrl_Acl($this->pbs2host, $this->config['pbs2']['checkright'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
			}
			if(!$this->userIDsNamespace['membershipID'] !='') {
				$this->_helper->redirector('selectmembership', 'person');
				return;
			}
		} else {
			$this->_helper->redirector('login', 'auth');
			return;
		}
	}

	public function indexAction()
	{
		if(!$this->acl->checkRight('eo')) {
			$this->_redirect('/');
		}
		if(isset($this->userIDsNamespace['poolID'])) {
			$this->view->poolID = $this->userIDsNamespace['poolID'];
		}
	}

	public function addAction()
	{
		if(!$this->acl->checkRight('ec')) {
			$this->_redirect('/');
		}
		$eventcategorylist = $this->eventcategoryMapper->fetchAll();
		$this->poolVal = $this->getRequest()->getParam('poolSelectBoxVal');
		$bootOsApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getbootoss'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', '');
		$bootOsXMLString = $bootOsApiResult['http-body'];
		if(strlen($bootOsXMLString) > 0) {
			$bootOsXML = new SimpleXMLElement($bootOsXMLString);
			foreach($bootOsXML->bootoslist->bootos as $bootos) {
				$bootosobj = new Application_Model_BootOs();
				$bootosobj->setID(sprintf("%s", $bootos->id));
				$bootosobj->setCreated(sprintf("%s", $bootos->created));
				$bootosobj->setDefaultkcl(sprintf("%s", $bootos->defaultkcl));
				$bootosobj->setDescription(sprintf("%s", $bootos->description));
				$bootosobj->setDistro(sprintf("%s", $bootos->distro));
				$bootosobj->setDistroversion(sprintf("%s", $bootos->distroversion));
				$bootosobj->setExpires(sprintf("%s", $bootos->expires));
				$bootosobj->setGroupID(sprintf("%s", $bootos->groupid));
				$bootosobj->setMembershipID(sprintf("%s", $bootos->membershipid));
				$bootosobj->setPublic(sprintf("%s", $bootos->public));
				$bootosobj->setShare(sprintf("%s", $bootos->share));
				$bootosobj->setShortname(sprintf("%s", $bootos->shortname));
				$bootosobj->setSource(sprintf("%s", $bootos->source));
				$bootosobj->setTitle(sprintf("%s", $bootos->title));
				$bootoslist[$bootosobj->getID()] = $bootosobj;
			}
		}
		if(!isset($this->userIDsNamespace['poolID'])) {
			$poolApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getpools'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', '');
			$poolXMLString = $poolApiResult['http-body'];
			if(strlen($poolXMLString) > 0) {
				$poolXML = new SimpleXMLElement($poolXMLString);
				foreach($poolXML->poollist->pool as $pool) {
					$poolobj = new Application_Model_Pool();
					$poolobj->setID(sprintf("%s", $pool->id));
					$poolobj->setDescription(sprintf("%s", $pool->description));
					$poolobj->setGroupID(sprintf("%s", $pool->groupid));
					$poolobj->setLocation(sprintf("%s", $pool->location));
					$poolobj->setTitle(sprintf("%s", $pool->title));
					$poollist[$poolobj->getID()] = $poolobj;
				}
			}
		}
		$repeatendMapper = new Application_Model_RepeatendMapper();
		$repeatendlist = $repeatendMapper->fetchAll();
		$repeattypeMapper = new Application_Model_RepeattypeMapper();
		$repeattypelist = $repeattypeMapper->fetchAll();
		$add = $this->getRequest()->getParam("add");
		if($this->getRequest()->getParam('start')) {
			$start = date ('m/d/Y H:i', strtotime($this->getRequest()->getParam('start')));
		} else if($this->getRequest()->getParam('evstart')) {
			$start = date ('m/d/Y H:i', strtotime(substr($this->getRequest()->getParam('evstart'), 0, 24)));
		} else {$start = 'mm/dd/yyyy H:min';}
		if($this->getRequest()->getParam('end')) {
			$end = date ('m/d/Y H:i', strtotime($this->getRequest()->getParam('end')));
		}	else if($this->getRequest()->getParam('evend')) {
			$end = date ('m/d/Y H:i', strtotime(substr($this->getRequest()->getParam('evend'), 0, 24)));
		} else {$end = 'mm/dd/yyyy H:min';}
		if (!isset($add)){
			$defaultEventCategory = $this->config['event']['category']['default'];
			foreach($eventcategorylist as $eventcategory) {
				if($eventcategory->getTitle() == $defaultEventCategory) {
					$defaultEventCategoryID = $eventcategory->getID();
					break;
				}
			}
			if(isset($this->userIDsNamespace['poolID'])) {
				$addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'start' => $start, 'end' => $end, 'defaultEventCategoryID' => $defaultEventCategoryID, 'poolID' => $this->userIDsNamespace['poolID']));
			} else {
				$addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'poollist' => $poollist, 'start' => $start, 'end' => $end, 'defaultEventCategoryID' => $defaultEventCategoryID));
			}
		} else {
			$addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'start' => $start, 'end' => $end, $this->getRequest()->getParams()));
			$params = $this->getRequest()->getParams();
			if(!isset($params['pbs_poolID'])) {
				$params['pbs_poolID'] = $this->userIDsNamespace['poolID'];
			}
			if ($addForm->isValid($params)) {
				if($params['immediate']) {
					$params['start'] = date ('Y-m-d H:i', strtotime($this->getRequest()->getParam('start')));
					unset($params['end']);
					unset($params['repeatEnd']);
					$params['repeat'] = 0;
				} else {
					$params['start'] = date ('Y-m-d H:i', strtotime($this->getRequest()->getParam('start')));
					if($params['end']) {
						$params['end'] = date ('Y-m-d H:i', strtotime($this->getRequest()->getParam('end')));
					} else {
						unset($params['end']);
					}
					if($params['repeatdate']) {
						$params['repeatdate'] = date ('Y-m-d H:i', strtotime($this->getRequest()->getParam('repeatdate')));
					} else {
						unset($params['repeatdate']);
						$params['repeat'] = 0;
					}
				}
				$event = new Application_Model_Event($params);
				$event->setPbs_membershipID($this->userIDsNamespace['membershipID']);
				$bootmenuquery = "bootosID=" . $event->getPbs_bootosID() . "&startcounter=0&title=" . $event->getTitle() . "&defaultbootmenu=1&order=0&kcl=0";
				$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addbootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $bootmenuquery);
				$bootmenuXMLString = $bootmenuApiResult['http-body'];
				$bootmenuXML = new SimpleXMLElement($bootmenuXMLString);
				$bootmenuID = sprintf("%s", $bootmenuXML->bootmenu->id);
				$event->setPbs_bootmenuID($bootmenuID);
				$filterquery = "bootmenuID=" . $event->getPbs_bootmenuID() . "&title=" . $event->getTitle() . "&description=Poolctrl Filter für " . $event->getTitle() . "&created= " . time() . "&priority=100";	
				$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addfilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterquery);
				$filterXMLString = $filterApiResult['http-body'];
				$filterXML = new SimpleXMLElement($filterXMLString);
				$filterID = sprintf("%s", $filterXML->filter->id);
				$event->setPbs_filterID($filterID);
				$startTime = date('H:i', strtotime($event->getStart()));
				if($event->getEnd()) {
					$endTime = date('H:i', strtotime($event->getEnd()));
				} else {
					$endTime = date('H:i', strtotime($event->getStart() + 900));
				}
				$filterentriesquery1 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=7&filtervalue=" . $startTime . "&filtervalue2=" . $endTime;
				$filterentriesApiResult1 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery1);
				$filterentriesXMLString1 = $filterentriesApiResult1['http-body'];
				$filterentriesXML1 = new SimpleXMLElement($filterentriesXMLString1);
				$filterentriesID1 = sprintf("%s", $filterentriesXML1->filterentry->id);
				$filterentriesquery2 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=3&filtervalue=" . $event->getPbs_poolID();
				$filterentriesApiResult2 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery2);
				$filterentriesXMLString2 = $filterentriesApiResult2['http-body'];
				$filterentriesXML2 = new SimpleXMLElement($filterentriesXMLString2);
				$filterentriesID2 = sprintf("%s", $filterentriesXML2->filterentry->id);
				if($event->getRepeat()) {
					$weekday = date('N', strtotime($event->getStart()));
					$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=10&filtervalue=" . $weekday . "&filtervalue2=" . $weekday;
					$filterentriesApiResult3 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery3);
					$filterentriesXMLString3 = $filterentriesApiResult3['http-body'];
					$filterentriesXML3 = new SimpleXMLElement($filterentriesXMLString3);
					$filterentriesID3 = sprintf("%s", $filterentriesXML3->filterentry->id);
				} else {
					$startDate = date('Y-m-d', strtotime($event->getStart()));
					if($event->getEnd()) {
						$endDate = date('Y-m-d', strtotime($event->getEnd()));
					} else {
						$endDate = date('Y-m-d', strtotime($event->getStart()));
					}
					$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . $startDate . "&filtervalue2=" . $endDate;
					$filterentriesApiResult3 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery3);
					$filterentriesXMLString3 = $filterentriesApiResult3['http-body'];
					$filterentriesXML3 = new SimpleXMLElement($filterentriesXMLString3);
					$filterentriesID3 = sprintf("%s", $filterentriesXML3->filterentry->id);
				}
				if($event->getImmediate()) {
					$eventcategoryMapper = new Application_Model_EventcategoryMapper();
					$result = $eventcategoryMapper->fetchAll();
					$eventcategories = array();
					foreach($result as $category) {
						$eventcategories[$category->getID()] = $category->getTitle();
					}
					$eventCategory = $eventcategories[$event->getCategory()];
					$runningtypeMapper = new Application_Model_RunningtypeMapper();
					$runningtype = $runningtypeMapper->findBy(array("title" => $eventCategory));
					$event->setRunning(true);
					$event->setRunningtype($runningtype[0]->getID());
				} else {
					$event->setRunning(false);
				}
				$event->setCreated(time());
				try {
					$eventID = $this->eventMapper->save($event);
				} catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					return;
				}
				$event->setID($eventID);
				if($event->getImmediate()) {
					$this->runEvent($event, $this->userIDsNamespace['apikey']);
				}
				if($event->repeat) {
					repeatEvent($event);
				}
				$this->_redirect('/event/');
			}
		}
		$params = $this->getRequest()->getParams();
		$this->view->params = $params;
		$this->view->addForm = $addForm;
	}

	public function deleteAction()
	{
		if(!$this->acl->checkRight('ed')) {
			$this->_redirect('/');
		}
		$this->_helper->viewRenderer->setNoRender();
		$eventID = $this->_request->getParam('eventID');
		if(isset($eventID)) {
			$event = new Application_Model_Event();
			if($event->getPbs_bootmenuID()) {
				$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletebootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $event->getPbs_bootmenuID());
			}
			if($event->getPbs_filterID()) {
				$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $event->getPbs_filterID());
			}
			$this->eventMapper->find($eventID, $event);
			if($event->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) {
				if(!$this->acl->checkRight('edo')) {
					$this->_redirect('/');
				}
			}
			try {
				$this->eventMapper->delete($event);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
			$this->_redirect('/event/');
		} else {
			$this->_redirect('/event/');
			return;
		}
	}

	public function editAction()
	{
		if(!$this->acl->checkRight('ee')) {
			$this->_redirect('/');
		}
		$eventID = $this->_request->getParam('eventID');
		if(!isset($eventID)) {
			$this->_helper->redirector('add', 'event');
			return;
		} else {
			$event = new Application_Model_Event();
			$this->eventMapper->find($eventID, $event);
			if($event->getImmediate()) {
				$this->_redirect('/event/');
				exit;
			}
			$eventcategorylist = $this->eventcategoryMapper->fetchAll();
			$bootOsApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getbootoss'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', '');
			$bootOsXMLString = $bootOsApiResult['http-body'];
			if(strlen($bootOsXMLString) > 0) {
				$bootOsXML = new SimpleXMLElement($bootOsXMLString);
				foreach($bootOsXML->bootoslist->bootos as $bootos) {
					$bootosobj = new Application_Model_BootOs();
					$bootosobj->setID(sprintf("%s", $bootos->id));
					$bootosobj->setCreated(sprintf("%s", $bootos->created));
					$bootosobj->setDefaultkcl(sprintf("%s", $bootos->defaultkcl));
					$bootosobj->setDescription(sprintf("%s", $bootos->description));
					$bootosobj->setDistro(sprintf("%s", $bootos->distro));
					$bootosobj->setDistroversion(sprintf("%s", $bootos->distroversion));
					$bootosobj->setExpires(sprintf("%s", $bootos->expires));
					$bootosobj->setGroupID(sprintf("%s", $bootos->groupid));
					$bootosobj->setMembershipID(sprintf("%s", $bootos->membershipid));
					$bootosobj->setPublic(sprintf("%s", $bootos->public));
					$bootosobj->setShare(sprintf("%s", $bootos->share));
					$bootosobj->setShortname(sprintf("%s", $bootos->shortname));
					$bootosobj->setSource(sprintf("%s", $bootos->source));
					$bootosobj->setTitle(sprintf("%s", $bootos->title));
					$bootoslist[$bootosobj->getID()] = $bootosobj;
				}
			}
			$poolApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getpools'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', '');
			$poolXMLString = $poolApiResult['http-body'];
			if(strlen($poolXMLString) > 0) {
				$poolXML = new SimpleXMLElement($poolXMLString);
				foreach($poolXML->poollist->pool as $pool) {
					$poolobj = new Application_Model_Pool();
					$poolobj->setID(sprintf("%s", $pool->id));
					$poolobj->setDescription(sprintf("%s", $pool->description));
					$poolobj->setGroupID(sprintf("%s", $pool->groupid));
					$poolobj->setLocation(sprintf("%s", $pool->location));
					$poolobj->setTitle(sprintf("%s", $pool->title));
					$poollist[$poolobj->getID()] = $poolobj;
				}
			}
			if($event->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) {
				if(!$this->acl->checkRight('eeo')) {
					$this->_redirect('/');
				}
			}
			$repeatendMapper = new Application_Model_RepeatendMapper();
			$repeatendlist = $repeatendMapper->fetchAll();
			$repeattypeMapper = new Application_Model_RepeattypeMapper();
			$repeattypelist = $repeattypeMapper->fetchAll();
			$save = $this->getRequest()->getParam("save");
			if (isset($save)){
				$params = $this->getRequest()->getParams();
				$editForm = new Application_Form_EventEdit(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'poollist' => $poollist, 'repeattypelist' => $repeattypelist, 'repeatendlist' => $repeatendlist, 'params' => $params));
				if ($editForm->isValid($params)) {
					$params['start'] = date ('Y-m-d H:i', strtotime($this->getRequest()->getParam('start')));
					if($params['end']) {
						$params['end'] = date ('Y-m-d H:i', strtotime($this->getRequest()->getParam('end')));
					} else {
						unset($params['end']);
					}
					if($params['repeatdate']) {
						$params['repeatdate'] = date ('Y-m-d H:i', strtotime($this->getRequest()->getParam('repeatdate')));
					} else {
						unset($params['repeatdate']);
						$params['repeat'] = 0;
					}
					if($event->getPbs_bootmenuID()) {
						$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletebootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $event->getPbs_bootmenuID());
						unset($bootmenuApiResult);
					}
					if($event->getPbs_filterID()) {
						$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $event->getPbs_filterID());
						unset($filterApiResult);
					}
					$params['immediate'] = 0;
					$event->setOptions($params);
					$event->setID($eventID);
					$bootmenuquery = "bootosID=" . $event->getPbs_bootosID() . "&startcounter=0&title=" . $event->getTitle() . "&defaultbootmenu=1&order=0&kcl=0";
					$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addbootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $bootmenuquery);
					$bootmenuXMLString = $bootmenuApiResult['http-body'];
					$bootmenuXML = new SimpleXMLElement($bootmenuXMLString);
					$bootmenuID = sprintf("%s", $bootmenuXML->bootmenu->id);
					$event->setPbs_bootmenuID($bootmenuID);
					$filterquery = "bootmenuID=" . $event->getPbs_bootmenuID() . "&title=" . $event->getTitle() . "&description=Poolctrl Filter für " . $event->getTitle() . "&created= " . time() . "&priority=100";	
					$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addfilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterquery);
					$filterXMLString = $filterApiResult['http-body'];
					$filterXML = new SimpleXMLElement($filterXMLString);
					$filterID = sprintf("%s", $filterXML->filter->id);
					$event->setPbs_filterID($filterID);
					$startTime = date('H:i', strtotime($event->getStart()));
					if($event->getEnd()) {
						$endTime = date('H:i', strtotime($event->getEnd()));
					} else {
						$endTime = date('H:i', strtotime($event->getStart() + 900));
					}
					$filterentriesquery1 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=7&filtervalue=" . $startTime . "&filtervalue2=" . $endTime;
					$filterentriesApiResult1 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery1);
					$filterentriesXMLString1 = $filterentriesApiResult1['http-body'];
					$filterentriesXML1 = new SimpleXMLElement($filterentriesXMLString1);
					$filterentriesID1 = sprintf("%s", $filterentriesXML1->filterentry->id);
					$filterentriesquery2 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=3&filtervalue=" . $event->getPbs_poolID();
					$filterentriesApiResult2 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery2);
					$filterentriesXMLString2 = $filterentriesApiResult2['http-body'];
					$filterentriesXML2 = new SimpleXMLElement($filterentriesXMLString2);
					$filterentriesID2 = sprintf("%s", $filterentriesXML2->filterentry->id);
					if($event->getRepeat()) {
						$weekday = date('N', strtotime($event->getStart()));
						$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=10&filtervalue=" . $weekday . "&filtervalue2=" . $weekday;
						$filterentriesApiResult3 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery3);
						$filterentriesXMLString3 = $filterentriesApiResult3['http-body'];
						$filterentriesXML3 = new SimpleXMLElement($filterentriesXMLString3);
						$filterentriesID3 = sprintf("%s", $filterentriesXML3->filterentry->id);
					} else {
						$startDate = date('Y-m-d', strtotime($event->getStart()));
						if($event->getEnd()) {
							$endDate = date('Y-m-d', strtotime($event->getEnd()));
						} else {
							$endDate = date('Y-m-d', strtotime($event->getStart()));
						}
						$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . $startDate . "&filtervalue2=" . $endDate;
						$filterentriesApiResult3 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery3);
						$filterentriesXMLString3 = $filterentriesApiResult3['http-body'];
						$filterentriesXML3 = new SimpleXMLElement($filterentriesXMLString3);
						$filterentriesID3 = sprintf("%s", $filterentriesXML3->filterentry->id);
					}
					try {
						$this->eventMapper->save($event);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
					$this->_redirect('/event/');
				}
			} else {
				$this->getRequest()->setParam('title', $event->getTitle());
				$this->getRequest()->setParam('immediate', $event->getImmediate());
				$this->getRequest()->setParam('start', $event->getStart());
				if($event->getEnd()) {
					$this->getRequest()->setParam('end', $event->getEnd());
				}
				$this->getRequest()->setParam('repeat', $event->getRepeat());
				if($event->getRepeattype()) {
					$this->getRequest()->setParam('repeattype', $event->getRepeattype());
				}
				if($event->getRepeatend()) {
					$this->getRequest()->setParam('repeatend', $event->getRepeatend());
				}
				if($event->getRepeatdate()) {
					$this->getRequest()->setParam('repeatdate', $event->getRepeatdate());
				}
				if($event->getRepeatings()) {
					$this->getRequest()->setParam('repeatings', $event->getRepeatings());
				}
				$this->getRequest()->setParam('participants', $event->getParticipants());
				$this->getRequest()->setParam('category', $event->getCategory());
				$this->getRequest()->setParam('note', $event->getNote());
				$this->getRequest()->setParam('pbs_poolID', $event->getPbs_poolID());
				$this->getRequest()->setParam('pbs_bootosID', $event->getPbs_bootosID());
				$this->getRequest()->setParam('pbs_membershipID', $event->getPbs_membershipID());
				$params = $this->getRequest()->getParams();
				$editForm = new Application_Form_EventEdit(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'poollist' => $poollist, 'repeattypelist' => $repeattypelist, 'repeatendlist' => $repeatendlist, 'params' => $params));
			}
			$this->view->editForm = $editForm;
			$this->view->params = $params;
		}
	}

	/*
	 * ------------------------
	 * START CALENDAR FUNCTIONS
	 * ------------------------
	 */

	public function deleteallAction() {
		if (!$this->acl->checkRight('ed')) {
			$this->_redirect('/');
		}
		$this->_helper->viewRenderer->setNoRender();
		$eventTitle = $this->_request->getParam('eventTitle');
		if (isset ($eventTitle)) {
			$event = new Application_Model_Event();
			if ($event->getPbs_bootmenuID()) {
				$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletebootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $event->getPbs_bootmenuID());
			}
			if ($event->getPbs_filterID()) {
				$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $event->getPbs_filterID());
			}
			$events = $this->eventMapper->findBy(array("title" => $eventTitle));
			if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) {
				if (!$this->acl->checkRight('edo')) {
					$this->_redirect('/');
				}
			}
			try {
				foreach($events as $event) {
					$this->eventMapper->delete($event);
				}

			} catch (Zend_Exception $e) {
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
			$this->_redirect('/event/');
		} else {
			$this->_redirect('/event/');
			return;
		}
	}

	public function getpoollistAction() {

		$this->_helper->layout->disableLayout();
		$poollist = array();
		$poolApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getpools'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', '');
		$poolXMLString = $poolApiResult['http-body'];
		if(strlen($poolXMLString) > 0) {
			$poolXML = new SimpleXMLElement($poolXMLString);
			foreach($poolXML->poollist->pool as $pool) {
				$poolobj = new Application_Model_Pool();
				$poolobj->setID(sprintf("%s", $pool->id));
				$poolobj->setDescription(sprintf("%s", $pool->description));
				$poolobj->setGroupID(sprintf("%s", $pool->groupid));
				$poolobj->setLocation(sprintf("%s", $pool->location));
				$poolobj->setTitle(sprintf("%s", $pool->title));
				$poollist[$poolobj->getID()] = $poolobj;
			}
		}
		if(isset($this->userIDsNamespace['poolID'])) {
			$this->view->poolID = $this->userIDsNamespace['poolID'];
		}
		$this->view->poollist = $poollist;
	}

	public function eventmoveAction() {
		if(!$this->acl->checkRight('eo')) {
			$this->_redirect('/');
		}
		$this->_helper->layout->disableLayout();
		$this->_helper->viewRenderer->setNoRender();


		$event = new Application_Model_Event();


		$evid = $this->getRequest()->getParam('evid');
		$evstart = $this->getRequest()->getParam('evstart');
		$evend = $this->getRequest()->getParam('evend');
		//var_dump($evend);

		if ($evid!="null") {
			$this->eventMapper->find($evid,$event);  //locate the event in the DB
			$event->setStart(date('Y-m-d H:i:s', strtotime(substr($evstart, 0, 24))));
			if($evend!="null"){
				$event->setEnd(date('Y-m-d H:i:s', strtotime(substr($evend, 0, 24))));
			}
			$this->eventMapper->save($event); //save the event with the new data
		}
	}

	public function eventresizeAction() {
		if(!$this->acl->checkRight('eo')) {
			$this->_redirect('/');
		}
		$this->_helper->layout->disableLayout();
		$this->_helper->viewRenderer->setNoRender();

		$event = new Application_Model_Event();

		$evid = $this->getRequest()->getParam('evid');
		$evend = $this->getRequest()->getParam('evend');
		$poolID = $this->getRequest()->getParam('poolID');
		if($poolID != null); {

		}

		var_dump(date('Y-m-d H:i:s', strtotime(substr($evend, 0, 24))));

		if ($evid!=null) {
			$this->eventMapper->find($evid,$event);  //locate the event in the DB
			$event->setEnd(date('Y-m-d H:i:s', strtotime(substr($evend, 0, 24))));
			$event->setPoolID($poolID);

			$this->eventMapper->save($event); //save the event with the new data
		}
	}

	public function eventlistAction() {
		if(!$this->acl->checkRight('eo')) {
			$this->_redirect('/');
		}
		$this->_helper->layout->disableLayout();
		$this->_helper->viewRenderer->setNoRender();
		$poolID = $this->getRequest()->getParam('poolID');
		$userIDsSession = new Zend_Session_Namespace('userIDs');
		$userIDsSession->poolID = $poolID;

		if($this->acl->checkRight('eoo')) {
			$eventList = $this->eventMapper->fetchAll();
		} else {
			$eventList = $this->eventMapper->findBy(array("pbs_membershipID", $this->userIDsNamespace['membershipID']));
		}

		foreach ($eventList as $event){

			if($event->getPbs_poolID() == $poolID) {
				if($event->getCategory() == 1){$color = 'green' AND $textColor = 'white' AND $category= 'Lecture';}
				else if ($event->getCategory() == 2){$color = 'yellow' AND $textColor = 'black' AND $category = 'Maintenance';}
				else if ($event->getCategory() == 3){$color = 'blue' AND $textColor = 'white' AND $category = 'Boot';}
				else if ($event->getCategory() == 4){$color = 'red' AND $textColor = 'white' AND $category = 'Shutdown';}
				$events[] =	array(

				$events[] =	array(
				'id' => $event->getID(),
				'title' => $event->getTitle(),
				'start' => $event->getStart(),
				'end' => $event->getEnd(),
				'category' => $category,
				'participants' => $event->getParticipants(),
				'note' => $event->getNote(),
				'poolID' => $event->getPbs_poolID(),
				'bootosID' => $event->getPbs_bootosID(),
				'allDay' => false,
				'color' => $color,
			  'textColor' => $textColor,
				'borderColor' => $color,
				'selected' => false,
				'repeat' => $event->getRepeat(),
				'opacity' => 1,
				'immediate' => $event->getImmediate(),
				)
				);
			}
		}
		echo json_encode($events);
	}

	public function checkrightAction() {
		$this->_helper->layout->disableLayout();
		$rightShortcut = $this->_request->getParam("rightShortcut");
		$this->view->right = $this->acl->checkRight($rightShortcut);
	}

	public function getrepeateventsAction() {
		$this->_helper->layout->disableLayout();
		$this->_helper->viewRenderer->setNoRender();
		$eventTitle = $this->_request->getParam("title");
		$eventlist = $this->eventMapper->findBy(array('title' => $eventTitle));
		if(count($eventlist)) {
			$events = array();
			foreach($eventlist as $event) {
				$events[] = $event->toArray();
			}
			echo json_encode($events);
		}
	}

	/*
	 * ----------------------
	 * END CALENDAR FUNCTIONS
	 * ----------------------
	 */


	public function runAction() {
		if(!$this->acl->checkRight('er')) {
			header('HTTP/1.0 403 No Right to run events');
			die();
		}
		$this->_helper->layout->disableLayout();
		$this->_helper->viewRenderer->setNoRender();
		$lookbacktime = $this->config['event']['lookbacktime'];
		$startTime = time() - $lookbacktime * 60;
		$updatePeriod = $this->config['event']['updatePeriod'];
		$endTime = $startTime + $lookbacktime * 60 + $updatePeriod * 60;
		$eventlist = $this->eventMapper->fetchAll();
		$eventcategoryMapper = new Application_Model_EventcategoryMapper();
		$result = $eventcategoryMapper->fetchAll();
		foreach($result as $category) {
			$eventcategories[$category->getTitle()] = $category->getID();
		}
		if(isset($this->userIDsNamespace['apikey'])) {
			$apikey = $this->userIDsNamespace['apikey'];
		} else {
			$apikey = $this->_request->getParam('apikey');
		}
		$runningtypeMapper = new Application_Model_RunningtypeMapper();
		$results = array();
		foreach($eventlist as $event) {
			$run = false;
			$boot = false;
			$shutdown = false;
			$eventStart = strtotime($event->getStart());
			$eventEnd = strtotime($event->getEnd());
			if($event->getRunning()) {
				continue;
			}
			switch($event->getCategory()) {
				case $eventcategories['Boot']:
					if($eventStart >= $startTime && $eventStart <= $endTime) {
						$run = true;
						$boot = true;
					}
					break;
				case $eventcategories['Shutdown']:
					if($eventStart >= $startTime && $eventStart <= $endTime) {
						$run = true;
						$shutdown = true;
					}
					break;
				case $eventcategories['Lecture']:
					if($eventStart >= $startTime && $eventStart <= $endTime) {
						$run = true;
						$boot = true;
					} else if($eventEnd >= $startTime && $eventEnd <= $endTime) {
						$run = true;
						$shutdown = true;
					}
					break;
				case $eventcategories['Maintenance']:
					if($eventStart >= $startTime && $eventStart <= $endTime) {
						$run = true;
						$boot = true;
					} else if($eventEnd >= $startTime && $eventEnd <= $endTime) {
						$run = true;
						$shutdown = true;
					}
					break;
			}
			if($run) {
				$data = array(
					'eventName' => $event->getTitle(),
				);
				$poolRequest = "poolid=" . $event->getPbs_poolID();
				$this->config['pbs2']['getpools'];
				$poolApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getpools'] . $apikey, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $poolRequest);
				$poolXMLString = $poolApiResult['http-body'];
				if(strlen($poolXMLString) > 0) {
					$poolXML = new SimpleXMLElement($poolXMLString);
					foreach($poolXML->poollist->pool as $pool) {
						$clientsXML = $pool->clients;
						$count = 1;
						foreach($clientsXML->client as $clientNew) {
							if($event->getParticipants() > 0 && $event->getParticipants() > $count) {
								$client = new Application_Model_Client();
								$client->setID(sprintf("%s", $clientNew->clientID));
								$client->setCreated(sprintf("%s", $clientNew->created));
								$client->setGroupID(sprintf("%s", $clientNew->groupid));
								$client->setHardwarehash(sprintf("%s", $clientNew->location));
								$client->setIp(sprintf("%s", $clientNew->ip));
								$client->setIp6(sprintf("%s", $clientNew->ip6));
								$client->setMacadress(sprintf("%s", $clientNew->macadress));
								$clientArray = array(
								'id' => $client->getID(),
								'ip' => $client->getIp(),
								'mac' => $client->getMacadress());
								$clients[] = $clientArray;
								$count++;
							} else {
								break;
							}
						}
					}
				}
				$data['clients'] = $clients;
				if($boot) {
					$bootOsRequest = "bootosid=" . $event->getPbs_bootosID();
					$bootOsApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getbootoss'] . $apikey, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $bootOsRequest);
					$bootOsXMLString = $bootOsApiResult['http-body'];
					if(strlen($bootOsXMLString) > 0) {
						$bootOsXML = new SimpleXMLElement($bootOsXMLString);
						foreach($bootOsXML->bootoslist->bootos as $bootosNew) {
							$bootos = new Application_Model_BootOs();
							$bootos->setID(sprintf("%s", $bootosNew->id));
							$bootos->setCreated(sprintf("%s", $bootosNew->created));
							$bootos->setDefaultkcl(sprintf("%s", $bootosNew->defaultkcl));
							$bootos->setDescription(sprintf("%s", $bootosNew->description));
							$bootos->setDistro(sprintf("%s", $bootosNew->distro));
							$bootos->setDistroversion(sprintf("%s", $bootosNew->distroversion));
							$bootos->setExpires(sprintf("%s", $bootosNew->expires));
							$bootos->setGroupID(sprintf("%s", $bootosNew->groupid));
							$bootos->setMembershipID(sprintf("%s", $bootosNew->membershipid));
							$bootos->setPublic(sprintf("%s", $bootosNew->public));
							$bootos->setShare(sprintf("%s", $bootosNew->share));
							$bootos->setShortname(sprintf("%s", $bootosNew->shortname));
							$bootos->setSource(sprintf("%s", $bootosNew->source));
							$bootos->setTitle(sprintf("%s", $bootosNew->title));
						}
						$data['eventOS'] = $bootos->getTitle();
					}
					$dataString = json_encode($data);
					$result = $this->gearmanClient->do("boot", $dataString, 'boot' . $event->getTitle());
					if (! $this->gearmanClient->runTasks())
					{
						echo "ERROR " . $gmc->error() . "\n";
						exit;
					}
					$results[$event->getTitle()] = $result;
					$result = $runningtypeMapper->findBy(array("title" => "boot"));
					$runningtypeBoot = $result[0];
					$event->setRunning(true);
					$event->setRunningtype($runningtypeBoot->getID());
					try {
						$this->eventMapper->save($event);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
				} else if($shutdown) {
					$dataString = json_encode($data);
					$result = $this->gearmanClient->do("shutdown", $dataString, 'shutdown' . $event->getTitle());
					if (! $this->gearmanClient->runTasks())
					{
						echo "ERROR " . $gmc->error() . "\n";
						exit;
					}
					$results[$event->getTitle()] = $result;
					$result = $runningtypeMapper->findBy(array("title" => "shutdown"));
					$runningtypeShutdown = $result[0];
					$event->setRunning(true);
					$event->setRunningtype($runningtypeShutdown->getID());
					try {
						$this->eventMapper->save($event);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
				}
			}
		}
		if(count($results) <= 0) {
			$results = array("No current events available");
		}
		$resultString = json_encode($results);
		header('Content-Type: application/json');
		header('Content-Disposition: inline; filename="result.json"');
		header('Pragma: no-cache');
		header('Expires: 0');
		echo $resultString;
	}

	public function reportAction() {
		if(!$this->acl->checkRight('er')) {
			header('HTTP/1.0 403 No Right to run events');
			die();
		}
		$this->_helper->layout->disableLayout();
		$this->_helper->viewRenderer->setNoRender();

		$eventreportMapper = new Application_Model_EventreportMapper();
		$runningtypeMapper = new Application_Model_RunningtypeMapper();
		$eventBootNames = array();
		$eventShutdownNames = array();
		$results = array();
		$result1 = $runningtypeMapper->findBy(array("title" => "boot"));
		$result2 = $runningtypeMapper->findBy(array("title" => "shutdown"));
		$runningtypeBoot = $result1[0];
		$runningtypeShutdown = $result2[0];
		$resultShortcutName = 'result shortcut';
		$errorsName = 'clients errors';
		$events = $this->eventMapper->findBy(array('running' => 1));

		foreach($events as $event) {
			if($event->getRunningtype() == $runningtypeBoot->getID()) {
				$eventBootNames[] = $event->getTitle();
			} else if($event->getRunningtype() == $runningtypeShutdown->getID()) {
				$eventShutdownNames[] = $event->getTitle();
			}
		}

		if(count($eventBootNames) > 0) {
			$data = array(
			'type' => 'getBootState',
			'events' => $eventBootNames,
			);

			$dataString = json_encode($data);
			$bootResult = $this->gearmanClient->do("status", $dataString, 'bootStatus');
			if (! $this->gearmanClient->runTasks())
			{
				echo "ERROR " . $gmc->error() . "\n";
				exit;
			}
			$bootResultDecode = json_decode($bootResult);
			$results['boot results'] = $bootResultDecode;
			if(count($bootResultDecode) > 0) {
				foreach($bootResultDecode as $k => $eventResult) {

					$eventResult->$resultShortcutName =  sprintf('%s', $eventResult->$resultShortcutName);
					if($eventResult->$resultShortcutName == "not finished") {
						continue;
					} else if($eventResult->$resultShortcutName == 'not founded') {
						$event->setRunning(false);
						$event->setRunningtype(null);
						try {
							$this->eventMapper->save($event);
						} catch(Zend_Exception $e)
						{
							echo "Caught exception: " . get_class($e) . "<br/>";
							echo "Message: " . $e->getMessage() . "<br/>";
							return;
						}
						continue;
					}
					$result = $this->eventMapper->findBy(array("title" => $k));
					$event = $result[0];
					$eventreport = new Application_Model_Eventreport();
					$eventreport->setEventID($event->getID());
					$eventreport->setResult($eventResult->$resultShortcutName);
					$eventreport->setCreated(time());
					if($eventResult->$resultShortcutName == "failed") {
						$eventreport->setErrors(json_encode($eventResult->$errorsName));
					}
					$eventreport->setType($runningtypeBoot->getID());
					try {
						$eventreportMapper->save($eventreport);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
					$event->setRunning(false);
					$event->setRunningtype(null);
					try {
						$this->eventMapper->save($event);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
				}
			}
		}

		if(count($eventShutdownNames) > 0) {
			$data = array(
			'type' => 'getShutdownState',
			'events' => $eventShutdownNames,
			);

			$dataString = json_encode($data);
			$shutdownResult = $this->gearmanClient->do("status", $dataString, 'shutdownStatus');
			if (! $this->gearmanClient->runTasks())
			{
				echo "ERROR " . $gmc->error() . "\n";
				exit;
			}
			$shutdownResultDecode = json_decode($shutdownResult);
			$results['shutdown results'] = $shutdownResultDecode;
			foreach($shutdownResultDecode as $k => $eventResult) {
				$eventResult->$resultShortcutName =  sprintf('%s', $eventResult->$resultShortcutName);
				if($eventResult->$resultShortcutName == "not finished") {
					continue;
				} else if($eventResult->$resultShortcutName == 'not founded') {
					$event->setRunning(false);
					$event->setRunningtype(null);
					try {
						$this->eventMapper->save($event);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
					continue;
				}
				$result = $this->eventMapper->findBy(array("title" => $k));
				$event = $result[0];
				$eventreport = new Application_Model_Eventreport();
				$eventreport->setEventID($event->getID());
				$eventreport->setResult($eventResult->$resultShortcutName);
				if($eventResult->$resultShortcutName == "failed") {
					$eventreport->setErrors(json_encode($eventResult->$errorsName));
				}
				$eventreport->setType($runningtypeShutdown->getID());
				try {
					$eventreportMapper->save($eventreport);
				} catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					return;
				}
				$event->setRunning(false);
				$event->setRunningtype(null);
				try {
					$this->eventMapper->save($event);
				} catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					return;
				}
			}
		}
		if(count($results) <= 0) {
			$results = array("No current events available");
		}
		$resultString = json_encode($results);
		header('Content-Type: application/json');
		header('Content-Disposition: inline; filename="result.json"');
		header('Pragma: no-cache');
		header('Expires: 0');
		echo $resultString;
	}

	public function showreportsAction() {
		if(!$this->acl->checkRight('er')) {
			header('HTTP/1.0 403 No Right to run events');
			die();
		}
		$eventID = $this->_request->getParam("eventID");
		if($eventID) {
			$event = new Application_Model_Event();
			$this->eventMapper->find($eventID, $event);
			$eventreportMapper = new Application_Model_EventreportMapper();
			$reportlist = $eventreportMapper->findBy(array("eventID" => $eventID), false, array('created' => 'DESC'));
			$runningtypeMapper = new Application_Model_RunningtypeMapper();
			$runningtypes = array();
			$result = $runningtypeMapper->fetchAll();
			if(count($result) > 0) {
				foreach($result as $type) {
					$runningtypes[$type->getID()] = $type->getTitle();
				}
			}
			for($i = 0; $i < count($reportlist); $i++) {
				$reportType = $runningtypes[$reportlist[$i]->getType()];
				$reportlist[$i]->setType($reportType);
			}

			$clientRequest = "poolid=" . $event->getPbs_poolID();
			$clientApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getclient'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $clientRequest);
			$clientXMLString = $clientApiResult['http-body'];
			if(strlen($clientXMLString) > 0) {
				$clientXML = new SimpleXMLElement($clientXMLString);
				foreach($clientXML->clientlist->client as $clientNew) {
					$client = new Application_Model_Client();
					$client->setID(sprintf("%s", $clientNew->clientID));
					$client->setCreated(sprintf("%s", $clientNew->created));
					$client->setGroupID(sprintf("%s", $clientNew->groupid));
					$client->setHardwarehash(sprintf("%s", $clientNew->location));
					$client->setIp(sprintf("%s", $clientNew->ip));
					$client->setIp6(sprintf("%s", $clientNew->ip6));
					$client->setMacadress(sprintf("%s", $clientNew->macadress));
					$clients[$client->getID()] = $client;
				}
			}

			$this->view->eventTitle = $event->getTitle();
			$this->view->clients = $clients;
			$this->view->reportlist = $reportlist;

			// Pagination
			$pagination = new Poolctrl_Pagination();
			$pagination->setPerPage(5);
			$pagination->setElement($this->view->reportlist);
			$pagination->setRequestPage($this->_request->getParam('page'));
			$pagination->setPageUrl('/event/showreports/eventID/' . $eventID);

			$this->view->reportlist = $pagination->getElements();
			$this->view->pagination = $pagination->pagination();
		} else {
			$this->_redirect('/event/');
			exit;
		}
	}

	public function deletereportAction() {
		if(!$this->acl->checkRight('er')) {
			$this->_redirect('/');
		}
		$this->_helper->viewRenderer->setNoRender();
		$reportID = $this->_request->getParam('reportID');
		if(isset($reportID)) {
			$eventreportMapper = new Application_Model_EventreportMapper();
			$report = new Application_Model_Eventreport();
			$eventreportMapper->find($reportID, $report);
			$eventID = $report->getEventID();
			try {
				$eventreportMapper->delete($report);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
			$this->_redirect('/event/showreports/eventID/' . $eventID);
		} else {
			$this->_redirect('/event/');
			exit;
		}
	}

	private function runEvent(Application_Model_Event $event, $apikey) {
		$data = array(
					'eventName' => $event->getTitle(),
		);
		$poolRequest = "poolid=" . $event->getPbs_poolID();
		$this->config['pbs2']['getpools'];
		$poolApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getpools'] . $apikey, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $poolRequest);
		$poolXMLString = $poolApiResult['http-body'];
		if(strlen($poolXMLString) > 0) {
			$poolXML = new SimpleXMLElement($poolXMLString);
			foreach($poolXML->poollist->pool as $pool) {
				$clientsXML = $pool->clients;
				$count = 1;
				foreach($clientsXML->client as $clientNew) {
					if($event->getParticipants() > 0 && $event->getParticipants() > $count) {
						$client = new Application_Model_Client();
						$client->setID(sprintf("%s", $clientNew->clientID));
						$client->setCreated(sprintf("%s", $clientNew->created));
						$client->setGroupID(sprintf("%s", $clientNew->groupid));
						$client->setHardwarehash(sprintf("%s", $clientNew->location));
						$client->setIp(sprintf("%s", $clientNew->ip));
						$client->setIp6(sprintf("%s", $clientNew->ip6));
						$client->setMacadress(sprintf("%s", $clientNew->macadress));
						$clientArray = array(
								'id' => $client->getID(),
								'ip' => $client->getIp(),
								'mac' => $client->getMacadress());
						$clients[] = $clientArray;
						$count++;
					} else {
						break;
					}
				}
			}
		}
		$data['clients'] = $clients;
		$eventcategoryMapper = new Application_Model_EventcategoryMapper();
		$result = $eventcategoryMapper->fetchAll();
		foreach($result as $category) {
			$eventcategories[$category->getTitle()] = $category->getID();
		}
		$boot = false;
		$shutdown = false;
		switch($event->getCategory()) {
			case $eventcategories['Boot']:
				$boot = true;

				break;

			case $eventcategories['Shutdown']:
				$shutdown = true;

				break;
		}
		$runningtypeMapper = new Application_Model_RunningtypeMapper();
		if($boot) {
			$bootOsRequest = "bootosid=" . $event->getPbs_bootosID();
			$bootOsApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['getbootoss'] . $apikey, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $bootOsRequest);
			$bootOsXMLString = $bootOsApiResult['http-body'];
			if(strlen($bootOsXMLString) > 0) {
				$bootOsXML = new SimpleXMLElement($bootOsXMLString);
				foreach($bootOsXML->bootoslist->bootos as $bootosNew) {
					$bootos = new Application_Model_BootOs();
					$bootos->setID(sprintf("%s", $bootosNew->id));
					$bootos->setCreated(sprintf("%s", $bootosNew->created));
					$bootos->setDefaultkcl(sprintf("%s", $bootosNew->defaultkcl));
					$bootos->setDescription(sprintf("%s", $bootosNew->description));
					$bootos->setDistro(sprintf("%s", $bootosNew->distro));
					$bootos->setDistroversion(sprintf("%s", $bootosNew->distroversion));
					$bootos->setExpires(sprintf("%s", $bootosNew->expires));
					$bootos->setGroupID(sprintf("%s", $bootosNew->groupid));
					$bootos->setMembershipID(sprintf("%s", $bootosNew->membershipid));
					$bootos->setPublic(sprintf("%s", $bootosNew->public));
					$bootos->setShare(sprintf("%s", $bootosNew->share));
					$bootos->setShortname(sprintf("%s", $bootosNew->shortname));
					$bootos->setSource(sprintf("%s", $bootosNew->source));
					$bootos->setTitle(sprintf("%s", $bootosNew->title));
				}
				$data['eventOS'] = $bootos->getTitle();
			}
			$dataString = json_encode($data);
			$result = $this->gearmanClient->do("boot", $dataString, 'boot' . $event->getTitle());
			if (! $this->gearmanClient->runTasks())
			{
				echo "ERROR " . $gmc->error() . "\n";
				exit;
			}
			$results[$event->getTitle()] = $result;
			$result = $runningtypeMapper->findBy(array("title" => "boot"));
			$runningtypeBoot = $result[0];
			$event->setRunning(true);
			$event->setRunningtype($runningtypeBoot->getID());
			try {
				$this->eventMapper->save($event);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
		} else if($shutdown) {
			$dataString = json_encode($data);
			$result = $this->gearmanClient->do("shutdown", $dataString, 'shutdown' . $event->getTitle());
			if (! $this->gearmanClient->runTasks())
			{
				echo "ERROR " . $gmc->error() . "\n";
				exit;
			}
			$results[$event->getTitle()] = $result;
			$result = $runningtypeMapper->findBy(array("title" => "shutdown"));
			$runningtypeShutdown = $result[0];
			$event->setRunning(true);
			$event->setRunningtype($runningtypeShutdown->getID());
			try {
				$this->eventMapper->save($event);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
		}
	}

	private function reportEvent(Application_Model_Event $event) {
		$boot = false;
		$shutdown = false;
		switch($event->getCategory()) {
			case $eventcategories['Boot']:
				$boot = true;

				break;

			case $eventcategories['Shutdown']:
				$shutdown = true;

				break;
		}
		$eventreportMapper = new Application_Model_EventreportMapper();
		$runningtypeMapper = new Application_Model_RunningtypeMapper();
		if($boot) {
			$data = array(
			'type' => 'getBootState',
			'events' => $event->getTitle(),
			);

			$dataString = json_encode($data);
			$bootResult = $this->gearmanClient->do("status", $dataString, 'bootStatus');
			if (! $this->gearmanClient->runTasks())
			{
				echo "ERROR " . $gmc->error() . "\n";
				exit;
			}
			$bootResultDecode = json_decode($bootResult);
			$eventResult = $bootResultDecode[$event->getTitle()];
			$results['boot results'] = $bootResultDecode;
			$eventResult->$resultShortcutName =  sprintf('%s', $eventResult->$resultShortcutName);
			if($eventResult->$resultShortcutName == "not finished") {
				continue;
			} else if($eventResult->$resultShortcutName == 'not founded') {
				$event->setRunning(false);
				$event->setRunningtype(null);
				try {
					$this->eventMapper->save($event);
				} catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					return;
				}
				continue;
			}
			$eventreport = new Application_Model_Eventreport();
			$eventreport->setEventID($event->getID());
			$eventreport->setResult($eventResult->$resultShortcutName);
			if($eventResult->$resultShortcutName == "failed") {
				$eventreport->setErrors(json_encode($eventResult->$errorsName));
			}
			$eventreport->setType($runningtypeBoot->getID());
			try {
				$eventreportMapper->save($eventreport);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
			$event->setRunning(false);
			$event->setRunningtype(null);
			try {
				$this->eventMapper->save($event);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
		} else if($shutdown) {
			$data = array(
			'type' => 'getShutdownState',
			'events' => $event->getTitle(),
			);

			$dataString = json_encode($data);
			$shutdownResult = $this->gearmanClient->do("status", $dataString, 'shutdownStatus');
			if (! $this->gearmanClient->runTasks())
			{
				echo "ERROR " . $gmc->error() . "\n";
				exit;
			}
			$shutdownResultDecode = json_decode($shutdownResult);
			$eventResult = $shutdownResultDecode[$event->getTitle()];
			$results['shutdown results'] = $shutdownResultDecode;
			$eventResult->$resultShortcutName =  sprintf('%s', $eventResult->$resultShortcutName);
			if($eventResult->$resultShortcutName == "not finished") {
				continue;
			} else if($eventResult->$resultShortcutName == 'not founded') {
				$event->setRunning(false);
				$event->setRunningtype(null);
				try {
					$this->eventMapper->save($event);
				} catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					return;
				}
				continue;
			}
			$eventreport = new Application_Model_Eventreport();
			$eventreport->setEventID($event->getID());
			$eventreport->setResult($eventResult->$resultShortcutName);
			if($eventResult->$resultShortcutName == "failed") {
				$eventreport->setErrors(json_encode($eventResult->$errorsName));
			}
			$eventreport->setType($runningtypeShutdown->getID());
			try {
				$eventreportMapper->save($eventreport);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
			$event->setRunning(false);
			$event->setRunningtype(null);
			try {
				$this->eventMapper->save($event);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
		}
	}

	private function repeatEvent(Application_Model_Event $event) {
		
	}
}