summaryrefslogblamecommitdiffstats
path: root/application/controllers/EventController.php
blob: 579dc282c613a7de4bbeb5f5264a07548fb803fe (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;
				foreach($bootos->configs->config as $config) {
					$configobj = new Application_Model_Config();
					$configobj->setID(sprintf("%s", $config->configid));
					$configobj->setBootosID(sprintf("%s", $bootosobj->getID()));
					$configobj->setCreated(sprintf("%s", $config->created));
					$configobj->setMembershipID(sprintf("%s", $config->membershipid));
					$configobj->setDescription(sprintf("%s", $config->description));
					$configobj->setGroupID(sprintf("%s", $config->groupid));
					$configobj->setTitle(sprintf("%s", $config->title));
					$configobj->setVisible(sprintf("%s", $config->visible));
					if($configobj->getVisible()) {
						if($configobj->getTitle() == 'Default') {
							$configlist[$bootosobj->getID()][0] = $configobj;
						} else {
							$configlist[$bootosobj->getID()][$configobj->getID()] = $configobj;
						}
					}
				}
			}
		}

		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 a', strtotime($this->getRequest()->getParam('start')));
		} else if($this->getRequest()->getParam('evstart')) {
			$start = date ('m/d/Y h:i a', 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 a', strtotime($this->getRequest()->getParam('end')));
		}	else if($this->getRequest()->getParam('evend')) {
			$end = date ('m/d/Y h:i a', 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, 'configlist' => $configlist, '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, 'configlist' => $configlist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'poollist' => $poollist, 'start' => $start, 'end' => $end, 'defaultEventCategoryID' => $defaultEventCategoryID));
			}
		} else {
			if(isset($this->userIDsNamespace['poolID'])) {
				$addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'start' => $start, 'end' => $end, 'poolID' => $this->userIDsNamespace['poolID'], $this->getRequest()->getParams()));
			} else {
				$addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'poollist' => $poollist, '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)) {
				$configName = 'pbs_configID_' . $params['pbs_bootosID'];
				if(isset($params[$configName]) && $params[$configName] != 'default') {
					$params['pbs_configID'] = $params[$configName];
					unset($params[$configName]);
				} else {
					unset($params[$configName]);
					unset($params['pbs_configID']);
				}
				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($params['start']));
					if(isset($params['end'])) {
						$params['end'] = date ('Y-m-d H:i', strtotime($params['end']));
					} else {
						unset($params['end']);
					}
					if(!isset($params['repeattype'])) {
						unset($params['repeattype']);
					}
					if(!isset($params['repeatend'])) {
						unset($params['repeatend']);
					}
					if(isset($params['repeatdate'])) {
						$params['repeatdate'] = date ('Y-m-d H:i', strtotime($params['repeatdate']));
					} else {
						unset($params['repeatdate']);
					}
					if(!isset($params['repeatings'])) {
						unset($params['repeatings']);
					}
					if($params['participants'] <= 0) {
						unset($params['participants']);
					}
				}
				$event = new Application_Model_Event($params);
				$event->setPbs_membershipID($this->userIDsNamespace['membershipID']);
				$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
				$shutdownCategory = $result[0];
				if($event->getCategory() != $shutdownCategory->getID()) {
					$bootmenuquery = "bootosID=" . $event->getPbs_bootosID() . "&startcounter=0&title=Poolctrl-Bootmenu for " . $event->getTitle() . "&defaultbootmenu=0&order=0&kcl=0";
					if($event->getPbs_configID()) {
						$bootmenuquery .= "&configID=" . $event->getPbs_configID();
					}
					$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=Poolctrl-Filter for " . $event->getTitle() . "&description=This Filter was automatically created by the Poolctrl for Event " . $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()) {
						$startDate = date('d.m.Y', strtotime($event->getStart()));
						if($event->getEnd()) {
							$endDate = date('d.m.Y', strtotime($event->getEnd()));
						} else {
							$endDate = date('d.m.Y', strtotime($event->getStart()));
						}
						$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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()) {
					$result = $this->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(1);
					$event->setRunningtype($runningtype[0]->getID());
				} else {
					$event->setRunning(0);
				}
				$event->setCreated(time());
				$overlapping = 0;
				if($event->repeat) {
					$overlapping = $this->repeatEvent($event);
				} else {
					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']);
				}
				$this->_redirect('/event/index/overlapping/' . $overlapping);
			}
		}
		$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();
			$this->eventMapper->find($eventID, $event);
			if($event->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) {
				if(!$this->acl->checkRight('edo')) {
					$this->_redirect('/');
				}
			}
			if($event->getPbs_bootmenuID() && $event->getRepeat() == 0) {
				$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() && $event->getRepeat() != 1) {
				$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "filterid=" . $event->getPbs_filterID());
			}
			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);
			$oldEvent = new Application_Model_Event();
			$this->eventMapper->find($eventID, $oldEvent);
			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;
					foreach($bootos->configs->config as $config) {
						$configobj = new Application_Model_Config();
						$configobj->setID(sprintf("%s", $config->configid));
						$configobj->setBootosID(sprintf("%s", $bootosobj->getID()));
						$configobj->setCreated(sprintf("%s", $config->created));
						$configobj->setDescription(sprintf("%s", $config->description));
						$configobj->setGroupID(sprintf("%s", $config->groupid));
						$configobj->setTitle(sprintf("%s", $config->title));
						$configobj->setVisible(sprintf("%s", $config->visible));
						if($configobj->getVisible()) {
							if($configobj->getTitle() == 'Default') {
								$configlist[$bootosobj->getID()][0] = $configobj;
							} else {
								$configlist[$bootosobj->getID()][$configobj->getID()] = $configobj;
							}
						}
					}
				}
			}
			$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, 'configlist' => $configlist, 'poollist' => $poollist, 'repeattypelist' => $repeattypelist, 'repeatendlist' => $repeatendlist, 'oldtitle' => $event->getTitle(), 'params' => $params));
				if ($editForm->isValid($params)) {
					$configName = 'pbs_configID_' . $params['pbs_bootosID'];
					if(isset($params[$configName]) && $params[$configName] != 'default') {
						$params['pbs_configID'] = $params[$configName];
						unset($params[$configName]);
					} else {
						unset($params[$configName]);
						$event->setPbs_configID(null);
					}
					$params['start'] = date ('Y-m-d H:i:s', strtotime($params['start']));
					if(isset($params['end'])) {
						$params['end'] = date ('Y-m-d H:i:s', strtotime($params['end']));
					} else {
						unset($params['end']);
					}
					if(!isset($params['repeattype'])) {
						unset($params['repeattype']);
					}
					if(!isset($params['repeatend'])) {
						unset($params['repeatend']);
					}
					if(isset($params['repeatdate'])) {
						$params['repeatdate'] = date ('Y-m-d H:i:s', strtotime($params['repeatdate']));
					} else {
						unset($params['repeatdate']);
					}
					if(!isset($params['repeatings'])) {
						unset($params['repeatings']);
					}
					$params['immediate'] = 0;
					$event->setOptions($params);
					$event->setID($eventID);
					$overlapping = 0;
					if($event->getRepeat() == 1 && !isset($params['wdh'])) {
						$event->setRepeat(2);
					} else {
						$overlappingEvents = $this->eventMapper->getOverlappingEvents(date('Y-m-d H:i:s', strtotime($event->getStart())), date('Y-m-d H:i:s', strtotime($event->getEnd())), $event->getPbs_PoolID(), $event);
						if(count($overlappingEvents) > 0 ) {
							$overlapping = 1;
						}
						if(!$overlapping) {
							$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
							$shutdownCategory = $result[0];
							if($event->getCategory() != $shutdownCategory->getID()) {
								$diff = $this->eventMapper->compare($oldEvent, $event);
								if(isset($diff['pbs_bootosID']) || isset($diff['title']) || isset($diff['pbs_configID'])) {
									$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletebootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $oldEvent->getPbs_bootmenuID());
									unset($bootmenuApiResult);
									$bootmenuquery = "bootosID=" . $event->getPbs_bootosID() . "&startcounter=0&title=Poolctrl-Bootmenu for " . $event->getTitle() . "&defaultbootmenu=0&order=0&kcl=0";
									if($event->getPbs_configID()) {
										$bootmenuquery .= "&configID=" . $event->getPbs_configID();
									}
									$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);
									$filterQuerie = "filterid=" . $event->getPbs_filterID() . "&bootmenuID = " . $bootmenuID;
									$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterQuerie);
									unset($filterApiResult);
								}
								if(isset($diff['start']) || isset($diff['end']) || isset($diff['pbs_poolID'])) {
									if(isset($params['wdh']) || !$oldEvent->getRepeat()) {
										$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "filterid=" . $oldEvent->getPbs_filterID());
										unset($filterApiResult);
									}
									$filterquery = "bootmenuID=" . $event->getPbs_bootmenuID() . "&title=Poolctrl-Filter for " . $event->getTitle() . "&description=This Filter was automatically created by the Poolctrl for Event " . $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);
									$filterentriesquery1 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=3&filtervalue=" . $event->getPbs_poolID();
									$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);
									$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);
									}
									$filterentriesquery2 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=7&filtervalue=" . $startTime . "&filtervalue2=" . $endTime;
									$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()) {
										$startDate = date('d.m.Y', strtotime($event->getStart()));
										if($event->getEnd()) {
											$endDate = date('d.m.Y', strtotime($event->getEnd()));
										} else {
											$endDate = date('d.m.Y', strtotime($event->getStart()));
										}
										$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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(!$overlapping) {
						if($event->getRepeat() == 1) {
							$overlapping = $this->editRepeatEvent($oldEvent, $event);
						} else {
							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/index/overlapping/' . $overlapping);
				}
			} 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());
				$eventCategory = new Application_Model_Eventcategory();
				$this->eventcategoryMapper->find($event->getCategory(), $eventCategory);
				$this->getRequest()->setParam('categoryLabel', $eventCategory->getTitle());
				$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_configID_' . $event->getPbs_bootosID(), $event->getPbs_configID());
				$this->getRequest()->setParam('pbs_membershipID', $event->getPbs_membershipID());
				$this->getRequest()->setParam('force', $event->getForce());
				$params = $this->getRequest()->getParams();
				$editForm = new Application_Form_EventEdit(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'poollist' => $poollist, 'repeattypelist' => $repeattypelist, 'repeatendlist' => $repeatendlist, 'oldtitle' => $event->getTitle(), 'params' => $params));
			}
			$this->view->editForm = $editForm;
			$this->view->params = $params;
		}
	}

	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();
			$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) {
					if ($event->getPbs_bootmenuID()) {
						$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletebootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $events[0]->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=" . $events[0]->getPbs_filterID());
					}
					if($event->getRunning() == 0) {
						$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;
		}
	}

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

	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 checkoverlapdropAction() {
		if(!$this->acl->checkRight('eo')) {
			$this->_redirect('/');
		}
		$this->_helper->layout->disableLayout();

		$eventID = $this->getRequest()->getParam('eventID');
		$date = intval(strtotime(substr($this->getRequest()->getParam('date'), 0, 24)));
		$poolID = $this->getRequest()->getParam('poolID');

		$events['withrepeat'] = $this->eventMapper->getDraggingEvents($eventID);
		$events['withoutrepeat'] = $this->eventMapper->getDraggingEvent($eventID);

		// Calculate time shift
		$diff=0;
		foreach($events['withrepeat'] as $e) {
			if($e['eventID'] == $eventID) {
				$diff = $date - strtotime($e['start']);
				break;
			}
		}

		// Check for overlap with repeat
		$overlapswithrepeat = array();
		$cfeventswithrepeat = array();

		foreach($events['withrepeat'] as $e) {
			$evstartTime = intval(strtotime($e['start'])) + $diff;
			if($e['running'] == 0 && $e['repeat'] == 1 && $evstartTime < time()) {
				$this->view->past = true;
				return;
			}

			$enewstart = date('Y-m-d H:i:s', strtotime($e['start']) + $diff);
			if(!isset($e['end'])) {
				$e['end'] = date('Y-m-d H:i:s', strtotime($e['start']) + 300);
				$e['endSet'] = true;
			} else {
				$e['endSet'] = false;
			}
			$enewend = date('Y-m-d H:i:s', strtotime($e['end']) + $diff);
			$cfv = true;
			$event = new Application_Model_Event($e);
			$event->setID($e['eventID']);

			// overlap events
			if($e['running'] == 0 ) {
				$results = $this->eventMapper->getOverlappingEvents($enewstart, $enewend, $poolID, $event, true);
				if(count($results) > 0) {
					foreach($results as $result) {
						if($result->getID() != $eventID) {
							$overlapswithrepeat[] = $result->toArray();
							$cfv = false;
						}
					}
				}
			}
			// conflict free events with repeat
			if($cfv) {
				if($e['endSet']) {
					unset($e['end']);
					unset($e['endSet']);
				} else {
					unset($e['endSet']);
				}
				$evt['eventID'] = $e['eventID'];
				$evt['title'] = $e['title'];
				$cfeventswithrepeat[] = $e;
			}
			//} $this->_redirect('/event/');
		}

		// Check for overlap without repeat
		$overlapswithoutrepeat = array();
		$cfeventswithoutrepeat = array();
		$cfv = true;

		if(isset($events['withoutrepeat'])) {
			$e = $events['withoutrepeat'];
			$event = new Application_Model_Event($e);
			$event->setID($e['eventID']);
			// Calculate time shift
			$diff=0;
			$diff = $date - strtotime($e['start']);

			$enewstart = date('Y-m-d H:i:s', strtotime($e['start']) + $diff);
			if(!isset($e['end'])) {
				$e['end'] = date('Y-m-d H:i:s', strtotime($e['start']) + 300);        $e['endSet'] = true;
			} else {
				$e['endSet'] = false;
			}
			$enewend = date('Y-m-d H:i:s', strtotime($e['end']) + $diff);

			// overlap events
			$results = $this->eventMapper->getOverlappingEvents($enewstart, $enewend, $poolID, $event);
			if(count($results) > 0) {
				foreach($results as $result) {
					if($result->getID() != $eventID) {
						$overlapswithoutrepeat[] = $result->toArray();
						$cfv = false;
					}
				}
			}
			// conflict free events without repeat
			if($cfv) {
				if($e['endSet']) {
					unset($e['end']);
					unset($e['endSet']);
				} else {
					unset($e['endSet']);
				}
				$cfeventswithoutrepeat[] = $e;
			}
		}
		$this->view->overlapswithrepeat = $overlapswithrepeat;
		$this->view->cfeventswithrepeat = $cfeventswithrepeat;
		$this->view->overlapswithoutrepeat = $overlapswithoutrepeat;
		$this->view->cfeventswithoutrepeat = $cfeventswithoutrepeat;

	}

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

		$poolID = $this->getRequest()->getParam('poolID');
		$startDate = date("Y-m-d H:i:s", intval(strtotime(substr($this->getRequest()->getParam('startDate'), 0, 24))));
		$endDate = date("Y-m-d H:i:s", intval(strtotime(substr($this->getRequest()->getParam('endDate'), 0, 24))));

		$overlaps = array();
		$results = $this->eventMapper->getOverlappingEvents($startDate, $endDate, $poolID);
		if(count($results) > 0) {
			foreach($results as $result) {
				$overlaps[] = $result->toArray();
			}
		}

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

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

		$poolID = $this->getRequest()->getParam('poolID');

		$eventID = $this->getRequest()->getParam('eventID');
		$minuteDelta = intval($this->getRequest()->getParam('minuteDelta')*60);
		$dayDelta = intval($this->getRequest()->getParam('dayDelta')*24*60*60);
		$diffDelta = intval($minuteDelta + $dayDelta);

		$events['withrepeat'] = $this->eventMapper->getDraggingEvents($eventID);
		$events['withoutrepeat'] = $this->eventMapper->getDraggingEvent($eventID);

		// Check for overlap with repeat
		$overlapswithrepeat = array();
		$cfeventswithrepeat = array();

		foreach($events['withrepeat'] as $e) {

			$enewstart = date("Y-m-d H:i:s", strtotime($e['start']));
			$enewend = date("Y-m-d H:i:s", strtotime($e['end']) + $diffDelta);
			$cfv = true;
			// overlap events
			if($e['running'] == 0 ) {
				$event = new Application_Model_Event($e);
				$event->setID($e['eventID']);
				$results = $this->eventMapper->getOverlappingEvents($enewstart, $enewend, $poolID, $event);
				if(count($results) > 0) {
					foreach($results as $result) {
						if($result->getID() != $eventID) {
							$overlapswithrepeat[] = $result->toArray();
							$cfv = false;
						}
					}
				}
			}
			// conflict free events with repeat
			if($cfv) {
				$cfeventswithrepeat[] = $e;
			}
		}

		// Check for overlap without repeat
		$overlapswithoutrepeat = array();
		$cfeventswithoutrepeat = array();

		$e = $events['withoutrepeat'];
		$event = new Application_Model_Event($e);
		$event->setID($e['eventID']);
		$enewstart = date('Y-m-d H:i:s', strtotime($e['start']));
		$enewend = date('Y-m-d H:i:s', strtotime($e['end']) + $diffDelta);
		$cfv = true;

		// overlap events
		$results = $this->eventMapper->getOverlappingEvents($enewstart, $enewend, $poolID, $event);
		if(count($results) > 0) {
			foreach($results as $result) {
				if($result->getID() != $eventID) {
					$overlapswithoutrepeat[] = $result->toArray();
					$cfv = false;
				}
			}
		}
		// conflict free events without repeat
		if($cfv) {
			$cfeventswithoutrepeat[] = $e;
		}

		//$this->view->events = $events;
		//$this->view->others = $others;
		$this->view->overlapswithrepeat = $overlapswithrepeat;
		$this->view->cfeventswithrepeat = $cfeventswithrepeat;
		$this->view->overlapswithoutrepeat = $overlapswithoutrepeat;
		$this->view->cfeventswithoutrepeat = $cfeventswithoutrepeat;

	}

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


		$event = new Application_Model_Event();
		$oldEvent = new Application_Model_Event();

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

		if ($evid!="null") {
			$this->eventMapper->find($evid,$event);  //locate the event in the DB
			$this->eventMapper->find($evid,$oldEvent);
			if($event->getRepeat() == 1) {
				$event->setRepeat(2);
			}
			$oldStartTime = date('H:i', strtotime($event->getStart()));
			$oldStartDate = date('d.m.Y', strtotime($event->getStart()));
			$evstartTime = intval(strtotime(substr($evstart, 0, 24)));
			$newStartTime = date('H:i', $evstartTime);
			$newStartDate = date('d.m.Y', $evstartTime);
			$event->setStart(date('Y-m-d H:i:s', $evstartTime));
			if($event->getEnd()){
				$oldEndTime = date('H:i', strtotime($event->getEnd()));
				$oldEndDate = date('d.m.Y', strtotime($event->getEnd()));
				$evendTime = intval(strtotime(substr($evend, 0, 24)));
				$newEndTime = date('H:i', $evendTime);
				$newEndDate = date('d.m.Y', $evendTime);
				$event->setEnd(date('Y-m-d H:i:s', $evendTime));
			}
			$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
			$shutdownCategory = $result[0];
			if($event->getCategory() != $shutdownCategory->getID()) {
				if($event->getPbs_filterID()) {
					if($oldEvent->getRepeat() == 0 || $oldEvent->getRepeat() == 2) {
						$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "filterid=" . $oldEvent->getPbs_filterID());
						unset($filterApiResult);
					}
					$filterquery = "bootmenuID=" . $event->getPbs_bootmenuID() . "&title=Poolctrl-Filter for " . $event->getTitle() . "&description=This Filter was automatically created by the Poolctrl for Event " . $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);
					$filterentriesquery1 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=3&filtervalue=" . $event->getPbs_poolID();
					$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);
					$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);
					}
					$filterentriesquery2 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=7&filtervalue=" . $startTime . "&filtervalue2=" . $endTime;
					$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);
					$startDate = date('d.m.Y', strtotime($event->getStart()));
					if($event->getEnd()) {
						$endDate = date('d.m.Y', strtotime($event->getEnd()));
					} else {
						$endDate = date('d.m.Y', strtotime($event->getStart()));
					}
					$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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); //save the event with the new data
			} catch (Zend_Exception $e) {
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
		}
	}

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

		$event = new Application_Model_Event();

		$eventTitle = $this->getRequest()->getParam('eventTitle');
		$evmindelta = $this->getRequest()->getParam('evmindelta');
		$evdaydelta = $this->getRequest()->getParam('evdaydelta');
		$poolID = $this->getRequest()->getParam('poolID');

		if ($eventTitle!=null) {

			$events = $this->eventMapper->findBy(array("title" => $eventTitle));
			if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) {
				if (!$this->acl->checkRight('edo')) {
					$this->_redirect('/');
				}
			}

			$count = 1;
			foreach($events as $event) {
				if($event->getRunning() == 0 && $event->getRepeat() == 1) {
					$summertimeStart = intval(date('I', strtotime($event->getStart())));
					//1min = 60sec, 1d = 86400sec
					$oldStartTime = date('H:i', strtotime($event->getStart()));
					$oldStartDate = date('d.m.Y', strtotime($event->getStart()));
					$evstartTime = intval(strtotime($event->getStart())) + intval($evmindelta*60) + intval($evdaydelta*86400);
					$newStartTime = date('H:i', $evstartTime);
					$newStartDate = date('d.m.Y', $evstartTime);
					if($summertimeStart) {
						if(!date('I', $evstartTime)) {
							$evstartTime = $evstartTime + 60 * 60;
							$summertimeStart = 0;
						}
					} else {
						if(date('I', $evstartTime)) {
							$evstartTime = $evstartTime - 60 * 60;
							$summertimeStart = 1;
						}
					}
					$eventStart = date('Y-m-d H:i:s', $evstartTime);
					$event->setStart($eventStart);
					if($event->getEnd()) {
						$summertimeEnd = intval(date('I', strtotime($event->getEnd())));
						$oldEndTime = date('H:i', strtotime($event->getEnd()));
						$oldEndDate = date('d.m.Y', strtotime($event->getEnd()));
						$evendTime = intval(strtotime($event->getEnd())) + intval($evmindelta*60) + intval($evdaydelta*86400);
						$newEndTime = date('H:i', $evendTime);
						$newEndDate = date('d.m.Y', $evendTime);
						if($summertimeEnd) {
							if(!date('I', $evendTime)) {
								$evendTime = $evendTime + 60 * 60;
								$summertimeEnd = 0;
							}
						} else {
							if(date('I', $evendTime)) {
								$evendTime = $evendTime - 60 * 60;
								$summertimeEnd = 1;
							}
						}
						$eventEnd = date('Y-m-d H:i:s', $evendTime);
						$event->setEnd($eventEnd);
					}
					$event->setPbs_poolID($poolID);
					$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
					$shutdownCategory = $result[0];
					if($event->getCategory() != $shutdownCategory->getID()) {
						if($event->getPbs_filterID()) {
							$repeattypeMapper = new Application_Model_RepeattypeMapper();
							$repeattype = new Application_Model_Repeattype();
							$repeattypeMapper->find($event->getRepeattype(), $repeattype);
							if($repeattype == "Once a week") {
								if($count == 1) {
									$oldStartDate = date("N", strototime($oldStartDate));
									$oldEndDate = '';
									$newStartDate = date("N", strototime($newStartDate));
									$newEndDate = '';
									$filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . strtotime($oldStartDate) . "&oldvalue2=" . strtotime($oldEndDate) . "&value1=" . strtotime($newStartDate) . "&value2=" . strtotime($newEndDate);
									$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesQuerie);
									unset($filterApiResult);
								}
							} else {
								$filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . strtotime($oldStartDate) . "&oldvalue2=" . strtotime($oldEndDate) . "&value1=" . strtotime($newStartDate) . "&value2=" . strtotime($newEndDate);
								$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesQuerie);
								unset($filterApiResult);
							}
							if($count == 1) {
								$filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . $oldStartTime . "&oldvalue2=" . $oldEndTime . "&value1=" . $newStartTime . "&value2=" . $newEndTime;
								$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesQuerie);
								unset($filterApiResult);
							}
						}
					}
					try {
						$this->eventMapper->save($event); //save the event with the new data
					} catch (Zend_Exception $e) {
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
				}
				$count++;
			}
			$this->_redirect('/event/');
		} else {
			$this->_redirect('/event/');
			return;
		}
	}

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

		$cfevents = $this->getRequest()->getParam('cfevents');
		$cfeventsJSON = Zend_Json::decode($cfevents);
		$evmindelta = $this->getRequest()->getParam('evmindelta');
		$evdaydelta = $this->getRequest()->getParam('evdaydelta');
		$poolID = $this->getRequest()->getParam('poolID');

		$events = null;

		if($cfeventsJSON!=null) {
			foreach($cfeventsJSON as $e) {
				$event = new Application_Model_Event();
				$this->eventMapper->find($e['eventID'], $event);
				$events[] = $event;
				$eventIDs[] = $event->getID();
			}
		}

		$otherEvents = $this->eventMapper->getOtherRepeatEvents($events[0]->getTitle(), $eventIDs);

		foreach($otherEvents as $event) {
			$event->setRepeat(2);
			$filterquery = "bootmenuID=" . $event->getPbs_bootmenuID() . "&title=Poolctrl-Filter for " . $event->getTitle() . "&description=This Filter was automatically created by the Poolctrl for Event " . $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);
			$startDate = date('d.m.Y', strtotime($event->getStart()));
			if($event->getEnd()) {
				$endDate = date('d.m.Y', strtotime($event->getEnd()));
			} else {
				$endDate = date('d.m.Y', strtotime($event->getStart()));
			}
			$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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); //save the event with the new data
			} catch (Zend_Exception $e) {
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
		}

		if ($events!=null) {

			if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) {
				if (!$this->acl->checkRight('edo')) {
					$this->_redirect('/');
				}
			}

			$count = 1;
			foreach($events as $event) {
				if($event->getRunning() == 0 && $event->getRepeat() == 1) {
					$summertimeStart = intval(date('I', strtotime($event->getStart())));
					//1min = 60sec, 1d = 86400sec
					$oldStartTime = date('H:i', strtotime($event->getStart()));
					$oldStartDate = date('d.m.Y', strtotime($event->getStart()));
					$evstartTime = intval(strtotime($event->getStart())) + intval($evmindelta*60) + intval($evdaydelta*86400);
					$newStartTime = date('H:i', $evstartTime);
					$newStartDate = date('d.m.Y', $evstartTime);
					if($summertimeStart) {
						if(!date('I', $evstartTime)) {
							$evstartTime = $evstartTime + 60 * 60;
							$summertimeStart = 0;
						}
					} else {
						if(date('I', $evstartTime)) {
							$evstartTime = $evstartTime - 60 * 60;
							$summertimeStart = 1;
						}
					}
					$eventStart = date('Y-m-d H:i:s', $evstartTime);
					$event->setStart($eventStart);
					if($event->getEnd()) {
						$summertimeEnd = intval(date('I', strtotime($event->getEnd())));
						$oldEndTime = date('H:i', strtotime($event->getEnd()));
						$oldEndDate = date('d.m.Y', strtotime($event->getEnd()));
						$evendTime = intval(strtotime($event->getEnd())) + intval($evmindelta*60) + intval($evdaydelta*86400);
						$newEndTime = date('H:i', $evendTime);
						$newEndDate = date('d.m.Y', $evendTime);
						if($summertimeEnd) {
							if(!date('I', $evendTime)) {
								$evendTime = $evendTime + 60 * 60;
								$summertimeEnd = 0;
							}
						} else {
							if(date('I', $evendTime)) {
								$evendTime = $evendTime - 60 * 60;
								$summertimeEnd = 1;
							}
						}
						$eventEnd = date('Y-m-d H:i:s', $evendTime);
						$event->setEnd($eventEnd);
					}
					$event->setPbs_poolID($poolID);
					$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
					$shutdownCategory = $result[0];
					if($event->getCategory() != $shutdownCategory->getID()) {
						if($event->getPbs_filterID()) {
							$repeattypeMapper = new Application_Model_RepeattypeMapper();
							$repeattype = new Application_Model_Repeattype();
							$repeattypeMapper->find($event->getRepeattype(), $repeattype);
							if($repeattype == "Once a week") {
								if($count == 1) {
									$oldStartDate = date("N", strototime($oldStartDate));
									$oldEndDate = '';
									$newStartDate = date("N", strototime($newStartDate));
									$newEndDate = '';
									$filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . strtotime($oldStartDate) . "&oldvalue2=" . strtotime($oldEndDate) . "&value1=" . strtotime($newStartDate) . "&value2=" . strtotime($newEndDate);
									$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesQuerie);
									unset($filterApiResult);
								}
							} else {
								$filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . strtotime($oldStartDate) . "&oldvalue2=" . strtotime($oldEndDate) . "&value1=" . strtotime($newStartDate) . "&value2=" . strtotime($newEndDate);
								$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesQuerie);
								unset($filterApiResult);
							}
							if($count == 1) {
								$filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . $oldStartTime . "&oldvalue2=" . $oldEndTime . "&value1=" . $newStartTime . "&value2=" . $newEndTime;
								$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesQuerie);
								unset($filterApiResult);
							}
						}
					}
					try {
						$this->eventMapper->save($event); //save the event with the new data
					} catch (Zend_Exception $e) {
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
				}
				$count++;
			}
			$this->_redirect('/event/');
		} else {
			$this->_redirect('/event/');
			return;
		}
	}

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

		$event = new Application_Model_Event();
		$oldEvent = new Application_Model_Event();

		$evid = $this->getRequest()->getParam('evid');
		$evend = $this->getRequest()->getParam('evend');
		$poolID = $this->getRequest()->getParam('poolID');

		if ($evid!=null) {
			$this->eventMapper->find($evid,$event);  //locate the event in the DB
			$this->eventMapper->find($evid,$oldEvent);
			if($event->getRepeat() == 1) {
				$event->setRepeat(2);
			}
			$oldStartTime = date('H:i', strtotime($event->getStart()));
			$newStartTime = $oldStartTime;
			$oldEndTime = date('H:i', strtotime($event->getEnd()));
			$newEndTime = date('H:i', strtotime(substr($evend, 0, 24)));
			$event->setEnd(date('Y-m-d H:i:s', strtotime(substr($evend, 0, 24))));
			$event->setPbs_poolID($poolID);
			$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
			$shutdownCategory = $result[0];
			if($event->getCategory() != $shutdownCategory->getID()) {
				if($event->getPbs_filterID()) {
					if($oldEvent->getRepeat() == 0 || $oldEvent->getRepeat() == 2) {
						$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "filterid=" . $oldEvent->getPbs_filterID());
						unset($filterApiResult);
					}
					$filterquery = "bootmenuID=" . $event->getPbs_bootmenuID() . "&title=Poolctrl-Filter for " . $event->getTitle() . "&description=This Filter was automatically created by the Poolctrl for Event " . $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);
					$filterentriesquery1 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=3&filtervalue=" . $event->getPbs_poolID();
					$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);
					$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);
					}
					$filterentriesquery2 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=7&filtervalue=" . $startTime . "&filtervalue2=" . $endTime;
					$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);
					$startDate = date('d.m.Y', strtotime($event->getStart()));
					if($event->getEnd()) {
						$endDate = date('d.m.Y', strtotime($event->getEnd()));
					} else {
						$endDate = date('d.m.Y', strtotime($event->getStart()));
					}
					$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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);
				}
			}
			$this->eventMapper->save($event); //save the event with the new data
		}
	}

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

		$event = new Application_Model_Event();

		$eventTitle = $this->getRequest()->getParam('eventTitle');
		$evmindelta = $this->getRequest()->getParam('evmindelta');
		$poolID = $this->getRequest()->getParam('poolID');

		if ($eventTitle!=null) {

			$events = $this->eventMapper->findBy(array("title" => $eventTitle));
			if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) {
				if (!$this->acl->checkRight('edo')) {
					$this->_redirect('/');
				}
			}
			$count = 1;
			foreach($events as $event) {
				if($event->getRunning() == 0 && $event->getRepeat() == 1) {
					$summertimeEnd = intval(date('I', strtotime($event->getEnd())));
					$evendTime = intval(strtotime($event->getEnd())) + intval($evmindelta*60);
					if($summertimeEnd) {
						if(!date('I', $evendTime)) {
							$evendTime = $evendTime + 60 * 60;
							$summertimeEnd = 0;
						}
					} else {
						if(date('I', $evendTime)) {
							$evendTime = $evendTime - 60 * 60;
							$summertimeEnd = 1;
						}
					}
					$eventEnd = date('Y-m-d H:i:s', $evendTime);
					$event->setPbs_poolID($poolID);
					if($count == 1) {
						$oldStartTime = date('H:i', strtotime($event->getStart()));
						$newStartTime = $oldStartTime;
						$oldEndTime = date('H:i', strtotime($event->getEnd()));
						$newEndTime = date('H:i', $evendTime);
						$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
						$shutdownCategory = $result[0];
						if($event->getCategory() != $shutdownCategory->getID()) {
							if($event->getPbs_filterID()) {
								$filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . $oldStartTime . "&oldvalue2=" . $oldEndTime . "&value1=" . $newStartTime . "&value2=" . $newEndTime;
								$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesQuerie);
								unset($filterApiResult);
							}
						}
					}
					$event->setEnd($eventEnd);
					try {
						$this->eventMapper->save($event); //save the event with the new data
					} catch (Zend_Exception $e) {
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
				}
				$count++;
			}
			$this->_redirect('/event/');
		} else {
			$this->_redirect('/event/');
			return;
		}
	}

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

		$cfevents = $this->getRequest()->getParam('cfevents');
		$cfeventsJSON = Zend_Json::decode($cfevents);
		$evmindelta = $this->getRequest()->getParam('evmindelta');
		$poolID = $this->getRequest()->getParam('poolID');

		$events = null;

		if($cfeventsJSON!=null) {
			foreach($cfeventsJSON as $e) {
				$event = new Application_Model_Event($e);
				$event->setID($e['eventID']);
				$events[] = $event;
			}
		}

		$otherEvents = $this->eventMapper->getOtherRepeatEvents($events[0]->getTitle(), $eventIDs);

		foreach($otherEvents as $event) {
			$event->setRepeat(2);
			$filterquery = "bootmenuID=" . $event->getPbs_bootmenuID() . "&title=Poolctrl-Filter for " . $event->getTitle() . "&description=This Filter was automatically created by the Poolctrl for Event " . $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);
			$startDate = date('d.m.Y', strtotime($event->getStart()));
			if($event->getEnd()) {
				$endDate = date('d.m.Y', strtotime($event->getEnd()));
			} else {
				$endDate = date('d.m.Y', strtotime($event->getStart()));
			}
			$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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); //save the event with the new data
			} catch (Zend_Exception $e) {
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
		}

		if ($events!=null) {

			if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) {
				if (!$this->acl->checkRight('edo')) {
					$this->_redirect('/');
				}
			}

			// event resize to the past - check
			$count = 1;
			foreach($events as $event) {
				if($event->getRunning() == 0) {
					$summertimeEnd = intval(date('I', strtotime($event->getEnd())));
					$evendTime = intval(strtotime($event->getEnd())) + intval($evmindelta*60);
					if($summertimeEnd) {
						if(!date('I', $evendTime)) {
							$evendTime = $evendTime + 60 * 60;
							$summertimeEnd = 0;
						}
					} else {
						if(date('I', $evendTime)) {
							$evendTime = $evendTime - 60 * 60;
							$summertimeEnd = 1;
						}
					}
					$eventEnd = date('Y-m-d H:i:s', $evendTime);
					$event->setPbs_poolID($poolID);
					if($count == 1) {
						$oldStartTime = date('H:i', strtotime($event->getStart()));
						$newStartTime = $oldStartTime;
						$oldEndTime = date('H:i', strtotime($event->getEnd()));
						$newEndTime = date('H:i', strtotime($event->getEnd())) + intval($evmindelta*60);
						$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
						$shutdownCategory = $result[0];
						if($event->getCategory() != $shutdownCategory->getID()) {
							if($event->getPbs_filterID()) {
								$filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . $oldStartTime . "&oldvalue2=" . $oldEndTime . "&value1=" . $newStartTime . "&value2=" . $newEndTime;
								$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesQuerie);
								unset($filterApiResult);
							}
						}
					}
					$event->setEnd($eventEnd);
					try {
						$this->eventMapper->save($event); //save the event with the new data
					} catch (Zend_Exception $e) {
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
				}
				$count++;
			}
			$this->_redirect('/event/');
		} else {
			$this->_redirect('/event/');
			return;
		}
	}

	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(),
				'running' => $event->getRunning(),
				)
				);
			}
		}
		echo json_encode($events);
	}

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

	/*
	 * ----------------------
	 * 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();
		$result = $this->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) {
				$runningEvents = $this->eventMapper->findBy(array('pbs_poolID' => $event->getPbs_PoolID(), 'running' => 1));
				if(count($runningEvents) > 0) {
					if($boot) {
						$newStart = date('Y-m-d H:i:s', $eventStart + $updatePeriod * 60);
						$event->setStart($newStart);
					}
					if($shutdown) {
						$newEnd = date('Y-m-d H:i:s', $eventEnd + $updatePeriod * 60);
						$event->setEnd($newEnd);
					}
					try {
						$this->eventMapper->save($event);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
					continue;
				}
				$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'];
				$clients = array();
				if(strlen($poolXMLString) > 0) {
					$poolXML = new SimpleXMLElement($poolXMLString);
					foreach($poolXML->poollist->pool as $pool) {
						$clientsXML = $pool->clients;
						$count = 1;
						foreach($clientsXML->client as $clientNew) {
							$participants = $event->getParticipants();
							if(!isset($participants) || ($participants > 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->getDistro() . " " . $bootos->getDistroversion();
					}
					$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(1);
					$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(1);
					$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 to run 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(0);
						$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));
						$event->setRunning(3);
					} else {
						$event->setRunning(2);
					}
					$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;
					}
					if($event->getEnd()) {
						$event->setRunning(0);
					}
					$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(0);
					$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));
					$event->setRunning(3);
				} else {
					$event->setRunning(2);
				}
				$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->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 to report 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(),
		);
		if($event->getForce()) {
			$data['force'] = true;
		} else {
			$data['force'] = false;
		}
		$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->getImmediate() || ($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;
		$result = $this->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;
		}
		$runningEvents = $this->eventMapper->findBy(array('pbs_poolID' => $event->getPbs_PoolID(), 'running' => 1));
		if(count($runningEvents) > 1) {
			$updatePeriod = $this->config['event']['updatePeriod'];
			if($boot) {
				$newStart = date('Y-m-d H:i:s', strtotime($event->getStart()) + $updatePeriod * 60);
				$event->setStart($newStart);
			}
			if($shutdown) {
				$newEnd = date('Y-m-d H:i:s', strtotime($event->getEnd()) + $updatePeriod * 60);
				$event->setEnd($newEnd);
			}
			try {
				$this->eventMapper->save($event);
			} catch(Zend_Exception $e)
			{
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";
				return;
			}
			return;
		}
		$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->getDistro() . " " . $bootos->getDistroversion();
			}
			$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(1);
			$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(1);
			$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 repeatEvent(Application_Model_Event $event) {
		$events[0] = $event;
		$repeattypeMapper = new Application_Model_RepeattypeMapper();
		$repeattype = new Application_Model_Repeattype();
		$repeattypeMapper->find($event->getRepeattype(), $repeattype);
		$repeatendMapper = new Application_Model_RepeatendMapper();
		$repeatend = new Application_Model_Repeatend();
		$repeatendMapper->find($event->getRepeatend(), $repeatend);
		$summertimeStart = intval(date('I', strtotime($event->getStart())));
		if($event->getEnd()) {
			$summertimeEnd = intval(date('I', strtotime($event->getEnd())));
		}
		$newEvent = clone $event;
		$startDate = date('d.m.Y', strtotime($event->getStart()));
		if($event->getEnd()) {
			$endDate = date('d.m.Y', strtotime($event->getEnd()));
		} else {
			$endDate = date('d.m.Y', strtotime($event->getStart()));
		}
		$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
		$shutdownCategory = $result[0];
		switch($repeattype->getTitle()) {
			case 'Daily':
				if($newEvent->getCategory() != $shutdownCategory->getID()) {
					$filterentriesquery3 = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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);
				}
				$onedaytime = 24 * 60 * 60;
				$newStartTime = strtotime($newEvent->getStart()) + $onedaytime;
				if($newEvent->getEnd()) {
					$newEndTime = strtotime($newEvent->getEnd()) + $onedaytime;
				}
				if($repeatend->getTitle() == 'After') {
					$repeatings = intval($newEvent->getRepeatings());
					for($i = 0; $i < $repeatings; $i++) {
						if($summertimeStart) {
							if(!date('I', $newStartTime)) {
								$newStartTime = $newStartTime + 60 * 60;
								$summertimeStart = 0;
							}
						} else {
							if(date('I', $newStartTime)) {
								$newStartTime = $newStartTime - 60 * 60;
								$summertimeStart = 1;
							}
						}
						$newEvent->setStart(date('Y-m-d H:i', $newStartTime));
						$newStartTime = $newStartTime + $onedaytime;
						if(isset($newEndTime)) {
							if($summertimeEnd) {
								if(!date('I', $newEndTime)) {
									$newEndTime = $newEndTime + 60 * 60;
									$summertimeEnd = 0;
								}
							} else {
								if(date('I', $newEndTime)) {
									$newEndTime = $newEndTime - 60 * 60;
									$summertimeEnd = 1;
								}
							}
							$newEvent->setEnd(date('Y-m-d H:i', $newEndTime));
							$newEndTime = $newEndTime + $onedaytime;
						}
						$events[$i + 1] = $newEvent;
						if($newEvent->getCategory() != $shutdownCategory->getID()) {
							$startDate = date('d.m.Y', strtotime($newEvent->getStart()));
							if($newEvent->getEnd()) {
								$endDate = date('d.m.Y', strtotime($newEvent->getEnd()));
							} else {
								$endDate = date('d.m.Y', strtotime($newEvent->getStart()));
							}
							$filterentriesquery = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($endDate);
							$filterentriesApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery);
							$filterentriesXMLString = $filterentriesApiResult['http-body'];
							$filterentriesXML = new SimpleXMLElement($filterentriesXMLString);
							$filterentriesID = sprintf("%s", $filterentriesXML->filterentry->id);
						}
						$newEvent = clone $newEvent;
					}
				} else if($repeatend->getTitle() == 'Date') {
					$repeatendtime = strtotime($newEvent->getRepeatdate());
					$i = 1;
					while($newStartTime <= $repeatendtime) {
						if($summertimeStart) {
							if(!date('I', $newStartTime)) {
								$newStartTime = $newStartTime + 60 * 60;
								$summertimeStart = 0;
							}
						} else {
							if(date('I', $newStartTime)) {
								$newStartTime = $newStartTime - 60 * 60;
								$summertimeStart = 1;
							}
						}
						$newEvent->setStart(date('Y-m-d H:i', $newStartTime));
						$newStartTime = $newStartTime + $onedaytime;
						if(isset($newEndTime)) {
							if($summertimeEnd) {
								if(!date('I', $newEndTime)) {
									$newEndTime = $newEndTime + 60 * 60;
									$summertimeEnd = 0;
								}
							} else {
								if(date('I', $newEndTime)) {
									$newEndTime = $newEndTime - 60 * 60;
									$summertimeEnd = 1;
								}
							}
							$newEvent->setEnd(date('Y-m-d H:i', $newEndTime));
							$newEndTime = $newEndTime + $onedaytime;
						}
						$events[$i] = $newEvent;
						if($newEvent->getCategory() != $shutdownCategory->getID()) {
							$startDate = date('d.m.Y', strtotime($newEvent->getStart()));
							if($newEvent->getEnd()) {
								$endDate = date('d.m.Y', strtotime($newEvent->getEnd()));
							} else {
								$endDate = date('d.m.Y', strtotime($newEvent->getStart()));
							}
							$filterentriesquery = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($endDate);
							$filterentriesApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery);
							$filterentriesXMLString = $filterentriesApiResult['http-body'];
							$filterentriesXML = new SimpleXMLElement($filterentriesXMLString);
							$filterentriesID = sprintf("%s", $filterentriesXML->filterentry->id);
						}
						$newEvent = clone $newEvent;
						$i++;
					}
				}

				break;

			case 'Once a week':
				if($newEvent->getCategory() != $shutdownCategory->getID()) {
					$weekday = date('N', strtotime($newEvent->getStart()));
					$filterentriesquery3 = "filterID=" . $newEvent->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);
				}
				$oneweektime = 7 * 24 * 60 * 60;
				$newStartTime = strtotime($newEvent->getStart()) + $oneweektime;
				if($newEvent->getEnd()) {
					$newEndTime = strtotime($newEvent->getEnd()) + $oneweektime;
				}
				if($repeatend->getTitle() == 'After') {
					$repeatings = intval($newEvent->getRepeatings());
					for($i = 0; $i < $repeatings; $i++) {
						if($summertimeStart) {
							if(!date('I', $newStartTime)) {
								$newStartTime = $newStartTime + 60 * 60;
								$summertimeStart = 0;
							}
						} else {
							if(date('I', $newStartTime)) {
								$newStartTime = $newStartTime - 60 * 60;
								$summertimeStart = 1;
							}
						}
						$newEvent->setStart(date('Y-m-d H:i', $newStartTime));
						$newStartTime = $newStartTime + $oneweektime;
						if(isset($newEndTime)) {
							if($summertimeEnd) {
								if(!date('I', $newEndTime)) {
									$newEndTime = $newEndTime + 60 * 60;
									$summertimeEnd = 0;
								}
							} else {
								if(date('I', $newEndTime)) {
									$newEndTime = $newEndTime - 60 * 60;
									$summertimeEnd = 1;
								}
							}
							$newEvent->setEnd(date('Y-m-d H:i', $newEndTime));
							$newEndTime = $newEndTime + $oneweektime;
						}
						$events[$i + 1] = $newEvent;
						$newEvent = clone $newEvent;
					}
				} else if($repeatend->getTitle() == 'Date') {
					$repeatendtime = strtotime($newEvent->getRepeatdate());
					$i = 1;
					while($newStartTime <= $repeatendtime) {
						if($summertimeStart) {
							if(!date('I', $newStartTime)) {
								$newStartTime = $newStartTime + 60 * 60;
								$summertimeStart = 0;
							}
						} else {
							if(date('I', $newStartTime)) {
								$newStartTime = $newStartTime - 60 * 60;
								$summertimeStart = 1;
							}
						}
						$newEvent->setStart(date('Y-m-d H:i', $newStartTime));
						$newStartTime = $newStartTime + $oneweektime;
						if(isset($newEndTime)) {
							if($summertimeEnd) {
								if(!date('I', $newEndTime)) {
									$newEndTime = $newEndTime + 60 * 60;
									$summertimeEnd = 0;
								}
							} else {
								if(date('I', $newEndTime)) {
									$newEndTime = $newEndTime - 60 * 60;
									$summertimeEnd = 1;
								}
							}
							$newEvent->setEnd(date('Y-m-d H:i', $newEndTime));
							$newEndTime = $newEndTime + $oneweektime;
						}
						$events[$i] = $newEvent;
						$newEvent = clone $newEvent;
						$i++;
					}
				}

				break;

			case 'Every couple of weeks':
				if($newEvent->getCategory() != $shutdownCategory->getID()) {
					$filterentriesquery3 = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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);
				}
				$twoweekstime = 14 * 24 * 60 * 60;
				$newStartTime = strtotime($newEvent->getStart()) + $twoweekstime;
				if($newEvent->getEnd()) {
					$newEndTime = strtotime($newEvent->getEnd()) + $twoweekstime;
				}
				if($repeatend->getTitle() == 'After') {
					$repeatings = intval($newEvent->getRepeatings());
					for($i = 0; $i < $repeatings; $i++) {
						if($summertimeStart) {
							if(!date('I', $newStartTime)) {
								$newStartTime = $newStartTime + 60 * 60;
								$summertimeStart = 0;
							}
						} else {
							if(date('I', $newStartTime)) {
								$newStartTime = $newStartTime - 60 * 60;
								$summertimeStart = 1;
							}
						}
						$newEvent->setStart(date('Y-m-d H:i', $newStartTime));
						$newStartTime = $newStartTime + $twoweekstime;
						if(isset($newEndTime)) {
							if($summertimeEnd) {
								if(!date('I', $newEndTime)) {
									$newEndTime = $newEndTime + 60 * 60;
									$summertimeEnd = 0;
								}
							} else {
								if(date('I', $newEndTime)) {
									$newEndTime = $newEndTime - 60 * 60;
									$summertimeEnd = 1;
								}
							}
							$newEvent->setEnd(date('Y-m-d H:i', $newEndTime));
							$newEndTime = $newEndTime + $twoweekstime;
						}
						$events[$i + 1] = $newEvent;
						if($newEvent->getCategory() != $shutdownCategory->getID()) {
							$startDate = date('d.m.Y', strtotime($newEvent->getStart()));
							if($newEvent->getEnd()) {
								$endDate = date('d.m.Y', strtotime($newEvent->getEnd()));
							} else {
								$endDate = date('d.m.Y', strtotime($newEvent->getStart()));
							}
							$filterentriesquery = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($endDate);
							$filterentriesApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery);
							$filterentriesXMLString = $filterentriesApiResult['http-body'];
							$filterentriesXML = new SimpleXMLElement($filterentriesXMLString);
							$filterentriesID = sprintf("%s", $filterentriesXML->filterentry->id);
						}
						$newEvent = clone $newEvent;
					}
				} else if($repeatend->getTitle() == 'Date') {
					$repeatendtime = strtotime($newEvent->getRepeatdate());
					$i = 1;
					while($newStartTime <= $repeatendtime) {
						if($summertimeStart) {
							if(!date('I', $newStartTime)) {
								$newStartTime = $newStartTime + 60 * 60;
								$summertimeStart = 0;
							}
						} else {
							if(date('I', $newStartTime)) {
								$newStartTime = $newStartTime - 60 * 60;
								$summertimeStart = 1;
							}
						}
						$newEvent->setStart(date('Y-m-d H:i', $newStartTime));
						$newStartTime = $newStartTime + $twoweekstime;
						if(isset($newEndTime)) {
							if($summertimeEnd) {
								if(!date('I', $newEndTime)) {
									$newEndTime = $newEndTime + 60 * 60;
									$summertimeEnd = 0;
								}
							} else {
								if(date('I', $newEndTime)) {
									$newEndTime = $newEndTime - 60 * 60;
									$summertimeEnd = 1;
								}
							}
							$newEvent->setEnd(date('Y-m-d H:i', $newEndTime));
							$newEndTime = $newEndTime + $twoweekstime;
						}
						$events[$i] = $newEvent;
						if($newEvent->getCategory() != $shutdownCategory->getID()) {
							$startDate = date('d.m.Y', strtotime($newEvent->getStart()));
							if($newEvent->getEnd()) {
								$endDate = date('d.m.Y', strtotime($newEvent->getEnd()));
							} else {
								$endDate = date('d.m.Y', strtotime($newEvent->getStart()));
							}
							$filterentriesquery = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($endDate);
							$filterentriesApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery);
							$filterentriesXMLString = $filterentriesApiResult['http-body'];
							$filterentriesXML = new SimpleXMLElement($filterentriesXMLString);
							$filterentriesID = sprintf("%s", $filterentriesXML->filterentry->id);
						}
						$newEvent = clone $newEvent;
						$i++;
					}
				}

				break;

			case 'Every month':
				if($newEvent->getCategory() != $shutdownCategory->getID()) {
					$filterentriesquery3 = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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);
				}
				$startMonth = date('m', strtotime($newEvent->getStart())) + 1;
				$startDay = date('d', strtotime($newEvent->getStart()));
				$startYear = date('Y', strtotime($newEvent->getStart()));
				if($startMonth == 13) {
					$startMonth = 1;
					$startYear++;
				}
				while(!checkdate($startMonth, $startDay, $startYear)) {
					$startMonth++;
					if($repeatend->getTitle() == 'After') {
						$newEvent->setRepeatings($newEvent->getRepeatings() - 1);
					}
					if($startMonth == 13) {
						$startMonth = 1;
						$startYear++;
					}
				}
				$newStartDate = $startYear . "-" . $startMonth . "-" . $startDay . " " . date('H:i', strtotime($newEvent->getStart()));
				$newStartTime = strtotime($newStartDate);
				if($newEvent->getEnd()) {
					$endMonth = date('m', strtotime($newEvent->getEnd())) + 1;
					$endDay = date('d', strtotime($newEvent->getEnd()));
					$endYear = date('Y', strtotime($newEvent->getEnd()));
					if($endMonth == 13) {
						$endMonth = 1;
						$endYear++;
					}
					while(!checkdate($endMonth, $endDay, $endYear)) {
						$endMonth++;
						if($endMonth == 13) {
							$endMonth = 1;
							$endYear++;
						}
					}
					$newEndDate = $endYear . "-" . $endMonth . "-" . $endDay . " " . date('H:i', strtotime($newEvent->getEnd()));
					$newEndTime = strtotime($newEndDate);
				}
				if($repeatend->getTitle() == 'After') {
					$repeatings = intval($newEvent->getRepeatings());
					for($i = 0; $i < $repeatings; $i++) {
						$newEvent->setStart($newStartDate);
						$startMonth = date('m', $newStartTime) + 1;
						$startDay = date('d', $newStartTime);
						$startYear = date('Y', $newStartTime);
						if($startMonth == 13) {
							$startMonth = 1;
							$startYear++;
						}
						while(!checkdate($startMonth, $startDay, $startYear)) {
							$startMonth++;
							$i++;
							if($startMonth == 13) {
								$startMonth = 1;
								$startYear++;
							}
						}
						$newStartDate = $startYear . "-" . $startMonth . "-" . $startDay . " " . date('H:i', $newStartTime);
						$newStartTime = strtotime($newStartDate);
						if($newEvent->getEnd()) {
							$newEvent->setEnd($newEndDate);
							$endMonth = date('m', $newEndTime) + 1;
							$endDay = date('d', $newEndTime);
							$endYear = date('Y', $newEndTime);
							if($endMonth == 13) {
								$endMonth = 1;
								$endYear++;
							}
							while(!checkdate($endMonth, $endDay, $endYear)) {
								$endMonth++;
								if($endMonth == 13) {
									$endMonth = 1;
									$endYear++;
								}
							}
							$newEndDate = $endYear . "-" . $endMonth . "-" . $endDay . " " . date('H:i', $newEndTime);
							$newEndTime = strtotime($newEndDate);
						}
						$events[$i + 1] = $newEvent;
						if($newEvent->getCategory() != $shutdownCategory->getID()) {
							$startDate = date('d.m.Y', strtotime($newEvent->getStart()));
							if($newEvent->getEnd()) {
								$endDate = date('d.m.Y', strtotime($newEvent->getEnd()));
							} else {
								$endDate = date('d.m.Y', strtotime($newEvent->getStart()));
							}
							$filterentriesquery = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($endDate);
							$filterentriesApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery);
							$filterentriesXMLString = $filterentriesApiResult['http-body'];
							$filterentriesXML = new SimpleXMLElement($filterentriesXMLString);
							$filterentriesID = sprintf("%s", $filterentriesXML->filterentry->id);
						}
						$newEvent = clone $newEvent;
					}
				} else if($repeatend->getTitle() == 'Date') {
					$i = 1;
					$repeatendtime = strtotime($newEvent->getRepeatdate());
					while($newStartTime <= $repeatendtime) {
						$newEvent->setStart($newStartDate);
						$startMonth = date('m', $newStartTime) + 1;
						$startDay = date('d', $newStartTime);
						$startYear = date('Y', $newStartTime);
						if($startMonth == 13) {
							$startMonth = 1;
							$startYear++;
						}
						while(!checkdate($startMonth, $startDay, $startYear)) {
							$startMonth++;
							if($startMonth == 13) {
								$startMonth = 1;
								$startYear++;
							}
						}
						$newStartDate = $startYear . "-" . $startMonth . "-" . $startDay . " " . date('H:i', $newStartTime);
						$newStartTime = strtotime($newStartDate);
						if($newEvent->getEnd()) {
							$newEvent->setEnd($newEndDate);
							$endMonth = date('m', $newEndTime) + 1;
							$endDay = date('d', $newEndTime);
							$endYear = date('Y', $newEndTime);
							if($endMonth == 13) {
								$endMonth = 1;
								$endYear++;
							}
							while(!checkdate($endMonth, $endDay, $endYear)) {
								$endMonth++;
								if($endMonth == 13) {
									$endMonth = 1;
									$endYear++;
								}
							}
							$newEndDate = $endYear . "-" . $endMonth . "-" . $endDay . " " . date('H:i', $newEndTime);
							$newEndTime = strtotime($newEndDate);
						}
						$events[$i] = $newEvent;
						if($newEvent->getCategory() != $shutdownCategory->getID()) {
							$startDate = date('d.m.Y', strtotime($newEvent->getStart()));
							if($newEvent->getEnd()) {
								$endDate = date('d.m.Y', strtotime($newEvent->getEnd()));
							} else {
								$endDate = date('d.m.Y', strtotime($newEvent->getStart()));
							}
							$filterentriesquery = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($endDate);
							$filterentriesApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery);
							$filterentriesXMLString = $filterentriesApiResult['http-body'];
							$filterentriesXML = new SimpleXMLElement($filterentriesXMLString);
							$filterentriesID = sprintf("%s", $filterentriesXML->filterentry->id);
						}
						$newEvent = clone $newEvent;
						$i++;
					}
				}

				break;
		}

		$overlapping = 0;
		$overlappingEvents = array();
		foreach($events as $evt) {
			$overlappingEvents = $this->eventMapper->getOverlappingEvents(date('Y-m-d H:i:s', strtotime($evt->getStart())), date('Y-m-d H:i:s', strtotime($evt->getEnd())), $evt->getPbs_PoolID(), $event, true);
			if(count($overlappingEvents) > 0 ) {
				$overlapping = 1;
				break;
			}
		}



		if(!$overlapping) {
			$evt = null;
			foreach($events as $evt) {
				try {
					$eventID = $this->eventMapper->save($evt);
					$evt->setID($eventID);
				} catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					return;
				}
			}
		} else {
			if($events[0]->getPbs_bootmenuID()) {
				$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletebootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $events[0]->getPbs_bootmenuID());
			}
			if($events[0]->getPbs_filterID()) {
				$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "filterid=" . $events[0]->getPbs_filterID());
			}
		}

		return $overlapping;
	}

	private function editRepeatEvent(Application_Model_Event $oldEvent, Application_Model_Event $newEvent) {
		$overlapping = false;
		$result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown'));
		$shutdownCategory = $result[0];
		$repeattypeMapper = new Application_Model_RepeattypeMapper();
		$repeattype = new Application_Model_Repeattype();
		$repeattypeMapper->find($newEvent->getRepeattype(), $repeattype);
		$diff = $this->eventMapper->compare($newEvent, $oldEvent);
		if(isset($diff['start']) || isset($diff['end'])) {
			if(isset($diff['start'])) {
				$diffStart = intval(strtotime($newEvent->getStart())) - intval(strtotime($oldEvent->getStart()));
				unset($diff['start']);
			}
			if(isset($diff['end'])) {
				$diffEnd = intval(strtotime($newEvent->getEnd())) - intval(strtotime($oldEvent->getEnd()));
				unset($diff['end']);
			}
			$events = $this->eventMapper->findBy(array('poolctrl_event.repeat' => 1, 'title' => $oldEvent->getTitle()));
			if(count($events) > 0) {
				foreach($events as $event) {
					if($event->getRunning() == 0 && $event->getRepeat() == 1) {
						$event->setOptions($diff);
						if(isset($diffStart)) {
							$summertimeStart = intval(date('I', strtotime($event->getStart())));
							$newSummertimeStart = intval(date('I', strtotime($event->getStart()) + $diffStart));
							if($summertimeStart) {
								if(!$newSummertimeStart) {
									$newStart = date('Y-m-d H:i:s', strtotime($event->getStart()) + $diffStart + 3600);
								} else {
									$newStart = date('Y-m-d H:i:s', strtotime($event->getStart()) + $diffStart);
								}
							} else {
								if($newSummertimeStart) {
									$newStart = date('Y-m-d H:i:s', strtotime($event->getStart()) + $diffStart - 3600);
								} else {
									$newStart = date('Y-m-d H:i:s', strtotime($event->getStart()) + $diffStart);
								}
							}
							$event->setStart($newStart);
						}
						if(isset($diffEnd)) {
							$summertimeEnd = intval(date('I', strtotime($event->getEnd())));
							$newSummertimeEnd = intval(date('I', strtotime($event->getEnd()) + $diffEnd));
							if($summertimeEnd) {
								if(!$newSummertimeEnd) {
									$newEnd = date('Y-m-d H:i:s', strtotime($event->getEnd()) + $diffEnd + 3600);
								} else {
									$newEnd = date('Y-m-d H:i:s', strtotime($event->getEnd()) + $diffEnd);
								}
							} else {
								if($newSummertimeEnd) {
									$newEnd = date('Y-m-d H:i:s', strtotime($event->getEnd()) + $diffEnd - 3600);
								} else {
									$newEnd = date('Y-m-d H:i:s', strtotime($event->getEnd()) + $diffEnd);
								}
							}
							$event->setEnd($newEnd);
						}
						if($newEvent->getCategory() != $shutdownCategory->getID()) {
							if($repeattype != "Once a week") {
								$startDate = date('d.m.Y', strtotime($event->getStart()));
								if($event->getEnd()) {
									$endDate = date('d.m.Y', strtotime($event->getEnd()));
								} else {
									$endDate = date('d.m.Y', strtotime($event->getStart()) + 900);
								}
								$filterentriesquery2 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($endDate);
								$filterentriesApiResult2 = PostToHost($this->pbs2host, $this->config['pbs2']['addfilterentry'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterentriesquery2);
							}
						}
					}
				}

				foreach($events as $event) {
					$overlappingEvents = $this->eventMapper->getOverlappingEvents(date('Y-m-d H:i:s', strtotime($event->getStart())), date('Y-m-d H:i:s', strtotime($event->getEnd())), $event->getPbs_PoolID());
					if(count($overlappingEvents) > 0 ) {
						$overlapping = true;
						break;
					}
				}

				if(!$overlapping) {
					if($newEvent->getCategory() != $shutdownCategory->getID()) {
						if(isset($diff['pbs_bootosID']) || isset($diff['title']) || isset($diff['pbs_configID'])) {
							$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletebootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $oldEvent->getPbs_bootmenuID());
							unset($bootmenuApiResult);
							$bootmenuquery = "bootosID=" . $newEvent->getPbs_bootosID() . "&startcounter=0&title=Poolctrl-Bootmenu for " . $newEvent->getTitle() . "&defaultbootmenu=0&order=0&kcl=0";
							if($newEvent->getPbs_configID()) {
								$bootmenuquery .= "&configID=" . $newEvent->getPbs_configID();
							}
							$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);
							$newEvent->setPbs_bootmenuID($bootmenuID);
							$filterQuerie = "filterid=" . $newEvent->getPbs_filterID() . "&bootmenuID = " . $bootmenuID;
							$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterQuerie);
							unset($filterApiResult);
						}
						$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "filterid=" . $oldEvent->getPbs_filterID());
						unset($filterApiResult);
						$filterquery = "bootmenuID=" . $newEvent->getPbs_bootmenuID() . "&title=Poolctrl-Filter for " . $newEvent->getTitle() . "&description=This Filter was automatically created by the Poolctrl for Event " . $newEvent->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);
						$newEvent->setPbs_filterID($filterID);
						$filterentriesquery1 = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=3&filtervalue=" . $newEvent->getPbs_poolID();
						$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);
						$startTime = date('H:i', strtotime($newEvent->getStart()));
						if($newEvent->getEnd()) {
							$endTime = date('H:i', strtotime($newEvent->getEnd()));
						} else {
							$endTime = date('H:i', strtotime($newEvent->getStart()) + 900);
						}
						$filterentriesquery2 = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=7&filtervalue=" . $startTime . "&filtervalue2=" . $endTime;
						$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($repeattype == "Once a week") {
							$weekday = date('N', strtotime($diff['start']));
							$filterentriesquery3 = "filterID=" . $newEvent->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);
							$filterentriesID = sprintf("%s", $filterentriesXML1->filterentry->id);
						}
					}
					foreach($events as $event) {
						try {
							if($repeattype != "Once a week" && $event->getCategory() != $shutdownCategory->getID()) {
								$startDate = date('d.m.Y', strtotime($event->getStart()));
								if($newEvent->getEnd()) {
									$endDate = date('d.m.Y', strtotime($event->getEnd()));
								} else {
									$endDate = date('d.m.Y', strtotime($event->getStart()));
								}
								$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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);
							}
							$this->eventMapper->save($event);
						} catch(Zend_Exception $e)
						{
							echo "Caught exception: " . get_class($e) . "<br/>";
							echo "Message: " . $e->getMessage() . "<br/>";
							return;
						}
					}
				}
			}
		} else {
			if($newEvent->getCategory() != $shutdownCategory->getID()) {
				if(isset($diff['pbs_bootosID']) || isset($diff['title']) || isset($diff['pbs_configID'])) {
					$bootmenuApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletebootmenu'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "bootmenuid=" . $oldEvent->getPbs_bootmenuID());
					unset($bootmenuApiResult);
					$bootmenuquery = "bootosID=" . $newEvent->getPbs_bootosID() . "&startcounter=0&title=Poolctrl-Bootmenu for " . $newEvent->getTitle() . "&defaultbootmenu=0&order=0&kcl=0";
					if($newEvent->getPbs_configID()) {
						$bootmenuquery .= "&configID=" . $newEvent->getPbs_configID();
					}
					$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);
					$newEvent->setPbs_bootmenuID($bootmenuID);
					$filterQuerie = "filterid=" . $newEvent->getPbs_filterID() . "&bootmenuID = " . $bootmenuID;
					$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['changefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', $filterQuerie);
					unset($filterApiResult);
				}
				if(isset($diff['pbs_poolID'])) {
					if(isset($params['wdh']) || !$oldEvent->getRepeat()) {
						$filterApiResult = PostToHost($this->pbs2host, $this->config['pbs2']['deletefilter'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 'poolctrl', "filterid=" . $oldEvent->getPbs_filterID());
						unset($filterApiResult);
					}
					$filterquery = "bootmenuID=" . $newEvent->getPbs_bootmenuID() . "&title=Poolctrl-Filter for " . $newEvent->getTitle() . "&description=This Filter was automatically created by the Poolctrl for Event " . $newEvent->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);
					$newEvent->setPbs_filterID($filterID);
					$filterentriesquery1 = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=3&filtervalue=" . $newEvent->getPbs_poolID();
					$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);
					$startTime = date('H:i', strtotime($newEvent->getStart()));
					if($newEvent->getEnd()) {
						$endTime = date('H:i', strtotime($newEvent->getEnd()));
					} else {
						$endTime = date('H:i', strtotime($newEvent->getStart()) + 900);
					}
					$filterentriesquery2 = "filterID=" . $newEvent->getPbs_filterID() . "&filtertypeID=7&filtervalue=" . $startTime . "&filtervalue2=" . $endTime;
					$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);
				}
			}
			$events = $this->eventMapper->findBy(array('poolctrl_event.repeat' => $oldEvent->getRepeat(), 'title' => $oldEvent->getTitle()));
			try {
				foreach($events as $event) {
					$event->setOptions($diff);
					if($event->getCategory() != $shutdownCategory->getID() && isset($diff['pbs_poolID'])) {
						$startDate = date('d.m.Y', strtotime($event->getStart()));
						if($newEvent->getEnd()) {
							$endDate = date('d.m.Y', strtotime($event->getEnd()));
						} else {
							$endDate = date('d.m.Y', strtotime($event->getStart()));
						}
						$filterentriesquery3 = "filterID=" . $event->getPbs_filterID() . "&filtertypeID=11&filtervalue=" . strtotime($startDate) . "&filtervalue2=" . strtotime($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);
					}
					$this->eventMapper->save($event);
				}
			} catch (Zend_Exception $e) {
				echo "Caught exception: " . get_class($e) . "<br/>";
				echo "Message: " . $e->getMessage() . "<br/>";

			}
		}
		return $overlapping;
	}
}