summaryrefslogblamecommitdiffstats
path: root/application/controllers/FilterController.php
blob: 9141e10a443ffd88a7e23a745ecee83f72fcba25 (plain) (tree)
1
2
3
4
5
6
7
8
9



                                                     

                                  


                       

                          
                         





                                                                                    



                                 
                                





                                                                                            

                                     
     
                                                           




                                                                                                                
                       
                                                                                                               

                                                                                
                                                                                          
                                                                       


                                                                    
                                                                                                









                                                                                           
                                                                    
                 


                                        
     








                                                                                     



                                      







































                                                                                                                                




                                                           
                                           
                            

                                                                                                                                                    



                                                                                     

                                                                                                                

                                                                                       
                                                                                        








                                                                                                               

                                                                                          
                                                                                                        
                                                            
                         
                                                                      
                 
     

                                           
     


                                     
                                                                                                




                                                                                                   

                                                                                                        

                                                                                          


                                                                                   




                                                                                     


                                                                                                        
                                                                                









                                                                                                                                        

                                                                                                                                
                                                                    
                                                                
                                 
                                                                              

                                                                                     
                                                        
                 
     
 



















                                                                                                             
                         
     















































                                                                                      
                 

                
                                        
                                         
                                       




                                                                               


                                                                                 
                                                                                     


                                                              
                                                                                 
 
                                               
                                                              



                                                                                       
        




                                                                        
 
                                            
                                                                                
 


                                                                                 
                                                                                     





                                                                                     









                                                                                                                                       
                         
                                             

                                                                                
 


                                                                                 
                                                                                             








                                                                                                   








                                                                                                                
                                 
                         
                                             
 

                                                                             
                                                                                 


                                                                         



                                                                    







                                                                                                    
                         
                                             
 

                                                                               
                                                                                 
                                    
                                         



                                                                                                        







                                                                                                    
                         
                                             
 

                                                                                
                                                                                 
                                       
                                         

                                                        
                                                                  


                                                                   







                                                                                                    
                         
                                             
 

                                                                                 
                                                                                 
                                  
                                         

                                                        
                                                                  


                                                              







                                                                                                    
                         
                                             
 

                                                                                 


                                                                                 





                                                           


                                                                  






                                                                                                                                     
        




                                                                                
                         
                                             
 




                                                                                                
                






                                                                               
                                     


                                                 
                                                                    





                                                                                                                                                         

                                                                               
                                                                                                
                                          







                                                           

                                                        







                                                                             







                                                                          








                                                                                                                                          
                        

                                                                      
                                                                                   
                 























                                                                                  

                                                                                 



                                                      


 

 



 

 

 
<?php

class FilterController extends Zend_Controller_Action
{

    private $_filtermapper = null;

    private $db = null;

    public function init()
    {
        try{		 
                	 
                	$this->_filtermapper = new Application_Model_FilterMapper();
                		}catch (Zend_Exception $e) {  
                	echo "Error message 1: " . $e->getMessage() . "\n";
        		}
        		$this->db = Zend_Db_Table::getDefaultAdapter();
    }

    public function indexAction()
    {
        try{			
        			$this->_filtermapper = new Application_Model_FilterMapper();
               		$this->view->filters = $this->_filtermapper->fetchAll();
            	}catch (Zend_Exception $e) {  
        			echo "Error message 2: " . $e->getMessage() . "\n";
    		}
	}

    public function addfilterAction()
    {
        $bmmapper = new Application_Model_BootMenuMapper();
		//TODO get bootmenu by group
		$bootmenus = $bmmapper->fetchAll();
        if (!isset($_POST["add"])){		
    		$addfilterform = new Application_Form_FilterAdd(array('bootmenus'=>$bootmenus));    		
			$this->view->addfilterform = $addfilterform;			
		}else {
			$addfilterform = new Application_Form_FilterAdd(array('bootmenus'=>$bootmenus),$_POST);
			if ($addfilterform->isValid($_POST)) {			
				try{
					$newfilter = new Application_Model_Filter($_POST);
					$newfilter->setCreated(time());

					// TODO: Ändere mit ACL
					$newfilter->setGroupID('1');
					$newfilter->setMembershipID('1');			

					$newfilter2 = new Application_Model_FilterMapper();
					$newfilter2->save($newfilter);

					$this->_redirect('/filter');
			    	return;
				}catch (Zend_Exception $e) {  
        			echo "Error message 2: " . $e->getMessage() . "\n";  
        		}
			}
			$this->view->addfilterform = $addfilterform;
		}
    }

    public function removefilterAction()
    {
        $filterID = $this->_request->getParam('filterID');
        		// TODO: ACL implementieren ob er den filter löschen darf
        		if(is_numeric($filterID)){
        			$deletefilter = new Application_Model_Filter();
        			$deletefilter->setID($filterID);
        			$filtermapper = new Application_Model_FilterMapper();
        			$filtermapper->delete($deletefilter);
        		}
        		$this->_redirect('/filter');
    }

    public function editfilterAction()
    {
        $bmmapper = new Application_Model_BootMenuMapper();
        		//TODO get bootmenu by group
        		$bootmenus = $bmmapper->fetchAll();
        		if (!isset($_POST["add"])){
        		    // TODO: ACL implementieren ob er editieren darf
        			$filterID = $this->_request->getParam('filterID');
        			$filter = new Application_Model_Filter();
        			
        
        			$filtermapper = new Application_Model_FilterMapper();
        			$filtermapper->find($filterID,$filter);		
        			$filter2 = $filter->toArray();
        
        			$editfilterform = new Application_Form_FilterAdd(array('bootmenus'=>$bootmenus));  
        			$editfilterform->populate($filter2);
        			$this->view->editfilterform = $editfilterform;
        		
        		} else{
        			try{
        				$filterID = $this->_request->getParam('filterID');	
        				
        				$editfilterform = new Application_Form_FilterAdd(array('bootmenus'=>$bootmenus),$_POST);
        				//TODO: ACL integrieren				
        				$_POST['groupID'] = 1;
        				$_POST['membershipID'] = 1;
        				$_POST['created'] = time();
        
        				if ($editfilterform->isValid($_POST)) {	
        					$newfilterenty = new Application_Model_Filter($_POST);
        					$newfilterenty->setID($this->_request->getParam('filterID'));
        					$newfilter2 = new Application_Model_FilterMapper();				
        					$newfilter2->save($newfilterenty);
        					echo 'valid';	
        					$this->_redirect('/filter');				
        				}		
        				$this->view->editfilterform = $editfilterform;
        			}catch (Zend_Exception $e) {  
            			echo "Error message 2: " . $e->getMessage() . "\n";  
            		}
        		}
    }

    public function addfilterentryAction()
    {
        // TODO: ACL implementieren ob er editieren darf   
		if (!isset($_POST["add"])){
			try{
				$editfilterform = new Application_Form_FilterEntriesAdd(array('filterID' => $this->_request->getParam('filterID')));
				$this->view->editfilterform = $editfilterform;
			}catch (Zend_Exception $e) {  
				echo "Error message 2: " . $e->getMessage() . "\n";  
			}
		} else{
			$editfilterform = new Application_Form_FilterEntriesAdd($_POST);			
			if ($editfilterform->isValid($_POST)) {							
				$newfilterenty = new Application_Model_FilterEntries();
				$newfilterenty->setFilterID($_POST['filterID']);
				$newfilterenty->setFiltertypeID($_POST['filtertypeID']);

				if($_POST['filtertypeID'] == 1){
					$newfilterenty->setFiltervalue($this->fillIP($_POST['filtervalue']));
					$newfilterenty->setFiltervalue2($this->fillIP($_POST['filtervalue2']));
				}
				else{				
					$newfilterenty->setFiltervalue($_POST['filtervalue']);
					$newfilterenty->setFiltervalue2($_POST['filtervalue2']);	
				}
				
				$newfilter2 = new Application_Model_FilterEntriesMapper();
				$newfilter2->save($newfilterenty);					
				$this->_redirect('/filter');
			}
			$this->view->editfilterform = $editfilterform;
		}
    }

    public function editfilterentryAction()
    {
        if (!isset($_POST["add"])){
			echo "case1";
			try{
				$filterentriesID = $this->_request->getParam('filterentriesID');
				
				
				$filterentry = new Application_Model_FilterEntries();

				$filterentriesmapper = new Application_Model_FilterEntriesMapper();
				$filterentriesmapper->find($filterentriesID,$filterentry);		
			

				$editfilterform = new Application_Form_FilterEntriesAdd();
				$editfilterform->populate($filterentry->toArray());
				$editfilterform->setFilterID($filterID);
				$this->view->editfilterform = $editfilterform;

			}catch (Zend_Exception $e) {  
				echo "Error message 2: " . $e->getMessage() . "\n";  
			}
		} else{
			try{
				$filterentriesID = $this->_request->getParam('filterentriesID');	
				$editfilterform = new Application_Form_FilterEntriesAdd($_POST);	
				if ($editfilterform->isValid($_POST)) {		
					$newfilterenty = new Application_Model_FilterEntries($_POST);					
					$newfilterenty->setID($filterentriesID);				
					if($_POST['filtertypeID'] == 1){
						$newfilterenty->setFiltervalue($this->fillIP($_POST['filtervalue']));
						$newfilterenty->setFiltervalue2($this->fillIP($_POST['filtervalue2']));
					}
					else{				
						$newfilterenty->setFiltervalue($_POST['filtervalue']);
						$newfilterenty->setFiltervalue2($_POST['filtervalue2']);	
					}
					$newfilter2 = new Application_Model_FilterEntriesMapper();				
					$newfilter2->save($newfilterenty);
					$this->_redirect('/filter');
								
				}
				$this->view->editfilterform = $editfilterform;
			}catch (Zend_Exception $e) {  
				echo "Error message 2: " . $e->getMessage() . "\n";  
			}				
		}
    }

    public function removefilterentryAction()
    {
        try{    		
        			$filterentriesID = $this->_request->getParam('filterentriesID');
        
        			// TODO: ACL implementieren ob er den filter löschen darf
        			if(is_numeric($filterentriesID)){
        				$deletefilterentry = new Application_Model_FilterEntries();
        				$deletefilterentry->setID($filterentriesID);
        				echo "<pre style='border:1px solid black;background-color:#F5B800'>";
        				print_r($deletefilterentry);
        				echo "</pre>";
        
        				$filterentriesmapper = new Application_Model_FilterEntriesMapper();
        				$filterentriesmapper->delete($deletefilterentry);
        				echo "ok";
        			}
        			$this->_redirect('/filter');
        		}catch (Zend_Exception $e) {  
        			echo "Error message 2: " . $e->getMessage() . "\n";
			}
    }

    private function fillIP($ip)
    {
        $ar = explode(".",$ip);
        		$representation = array();
        		foreach($ar as $part){
        			$representation[] = sprintf("%03s",$part);
        		}
        		return implode(".",$representation);
    }

    private function fillMac($ip)
    {
        $ar = explode(":",$ip);
        		$representation = array();
        		foreach($ar as $part){
        			$representation[] = sprintf("%02s",$part);
        		}
        		return implode(":",$representation);
    }

    public function evaluateAction()
    {
        $db = $this->db;	
		$showPartResults = false;
		// For Testing Filters
		

		$testFilter = (isset($_POST['submit']))?true:false;
		
		if($testFilter){
			$ipAdress = $_POST['ip'];
			$macAdress = $_POST['mac'];
			$poolID = $_POST['poolID'];
			$bootisoID = $_POST['bootisoID'];
			$membershipID = $_POST['membershipID'];
			$groupID = $_POST['groupID'];
			$time = strtotime($_POST['time']);
			$clientID = $_POST['clientID'];
			print_a('Input',
				array('ipAdress'=>$ipAdress,
					'macAdress'=>$macAdress,
					'poolID' => $poolID,
					'bootisoID' => $bootisoID,
					'membershipID'=>$membershipID,
					'groupID'=>$groupID,
					'time'=>$time." - ".date('d.m.Y H:i:s',$time),
					'clientID' => $clientID));
		}
		
		
		try{ 			
			$mysession = '1';
			$set = array();

			$filtertypID = 8;
			$session = new Application_Model_Session();
			$sessionmapper = new Application_Model_SessionMapper();
			$sessionmapper->find($mysession,$session);
			#########################################################
			// IP Adress
			$filtertypID = 1;
			// get it from session_table with session_id from the session
			if(!$testFilter){
				$ipAdress = $session->getIp();
			}
			$ipAdress = str_replace(".","",$this->fillIP($ipAdress));

			$select = $db->select()
			     ->from(array('pbs_filterentries')
					)
				->where('filtertypeID  = ?',$filtertypID)
				->where('REPLACE(filtervalue,".","") <= ?',$ipAdress)
				->where('? <= REPLACE(filtervalue2,".","")',$ipAdress);
	
			$stmt = $select->query();
			$result = $stmt->fetchAll();
			foreach($result as $r){
				$set[$filtertypID][] = $r['filterID'];	
			}

			if($showPartResults)
				print_a('ipAdress',$result,$set[$filtertypID]);	

			#########################################################
			// Mac range
			$filtertypID = 2;
			// get it from session_table with session_id from the session
			if(!$testFilter){
				$client = new Application_Model_Client();
				$clientmapper = new Application_Model_ClientMapper();
				$clientmapper->find($session->getClientID(),$client);
				$macAdress = $client->getMacadress();
			}
			try{
				$macAdress = str_replace(":","",$this->fillMac($ipAdress));			
				$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
								filtertypeID  = ".$filtertypID." AND
								CONV(HEX('filtervalue'),16,10) <= CONV(HEX('".$macAdress."'),16,10) AND
								CONV(HEX('".$macAdress."'),16,10) <= CONV(HEX('filtervalue2'),16,10)");
				$result = $stmt->fetchAll();
				foreach($result as $r){
					$set[$filtertypID][] = $r['filterID'];	
				}
			}
			catch(Exception $e){}
			if($showPartResults)
				print_a('macAdress',$result,$set[$filtertypID]);

			#########################################################
			// PoolID
			$filtertypID = 3;
				// get PoolID from client_ID from session_id from the session
			if(!$testFilter){			
				$poolentry = new Application_Model_PoolEntries();
				$poolentrymapper = new Application_Model_PoolEntriesMapper();
				$poolentry = $poolentrymapper->findby('clientID',$client->getID());
				$poolentry = $poolentry[0];		
			
				$poolID = $poolentry['poolID'];
			}			
			
			try{
				$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
								filtertypeID  = ".$filtertypID." AND
								filtervalue = ".$poolID." ");			
				$result = $stmt->fetchAll();
				if(count($result)>0){
					foreach($result as $r){
						$set[$filtertypID][] = $r['filterID'];	
					}
				}
			}
			catch(Exception $e){}

			if($showPartResults)
				print_a('poolID',$result,$set[$filtertypID]);
			#########################################################
			// ClientID		
			$filtertypID = 8;	
			// get client_ID from session_id from the session
			
			if(!$testFilter){
				$clientID = $session->getClientID();
			}
			try{
				$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
								filtertypeID  = ".$filtertypID." AND
								filtervalue = ".$clientID." ");
				$result = $stmt->fetchAll();
				foreach($result as $r){
					$set[$filtertypID][] = $r['filterID'];	
				}
			}
			catch(Exception $e){}

			if($showPartResults)
				print_a('clientID',$result,$set[$filtertypID]);
			#########################################################
			// BootIsoID
			$filtertypID = 4;
				// get BootIsoID from client_ID from session_id from the session	
			if(!$testFilter){		
				$bootisoID = $session->getBootisoID();
			}
			try{
				$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
								filtertypeID  = ".$filtertypID." AND
								filtervalue = ".$bootisoID." ");
				$result = $stmt->fetchAll();
				foreach($result as $r){
					$set[$filtertypID][] = $r['filterID'];	
				}
			}
			catch(Exception $e){}

			if($showPartResults)
				print_a('bootisoID',$result,$set[$filtertypID]);
			#########################################################
			// MembershipID
			$filtertypID = 5;

			if(!$testFilter){		
				// get membership from the session
				//TODO: GET MEMBERSHIP from SESSION
				$membershipID = 1;
			}
			try{
				$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
								filtertypeID  = ".$filtertypID." AND
								filtervalue = ".$membershipID." ");
				$result = $stmt->fetchAll();
				foreach($result as $r){
					$set[$filtertypID][] = $r['filterID'];	
				}
			}
			catch(Exception $e){}

			if($showPartResults)
				print_a('membership',$result,$set[$filtertypID]);
			#########################################################
			// GroupID
			$filtertypID = 6;

			if(!$testFilter){		
				// get membership from the session
				//TODO: GET GROUP from SESSION
				$groupID = 1;	
			}
			try{
				$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
								filtertypeID  = ".$filtertypID." AND
								filtervalue = ".$groupID." ");
				$result = $stmt->fetchAll();
				foreach($result as $r){
					$set[$filtertypID][] = $r['filterID'];	
				}
			}
			catch(Exception $e){}

			if($showPartResults)
				print_a('membership',$result,$set[$filtertypID]);
			#########################################################
			// Time
			$filtertypID = 7;
			if(!$testFilter){
				$time = time();
			}

			$nowShort = date('H-i',$time);
			$nowLong = date('Y-m-d-H-i',$time);

			$nowShort = str_replace("-","",$nowShort);
			$nowLong = str_replace("-","",$nowLong);
			try{
				$select = $db->select()
					 ->from(array('pbs_filterentries')
						)
					->where('filtertypeID  = ?',$filtertypID)
					->where('REPLACE(filtervalue,"-","") <= ? AND ? <= REPLACE(filtervalue2,"-","")',$nowShort)
					->orWhere('REPLACE(filtervalue,"-","") <= ? AND ? <= REPLACE(filtervalue2,"-","")',$nowLong);
	
				$stmt = $select->query();
				$result = $stmt->fetchAll();
				foreach($result as $r){
					$set[$filtertypID][] = $r['filterID'];	
				}
			}
			catch(Exception $e){}

			if($showPartResults)
				print_a('time',$result,$set[$filtertypID]);	
			########################################
			// ErgebnisSet auswerten
			print_a('the result sets of the filtertypes',$set);			
		
			// Merging of the resultsets of the filter
			$kk = array();
			foreach($set as $myset){
				$kk = array_merge($kk,$myset);
			}
			$set = $kk;
			// counting how often a filter is evaluated at database
			$a = array();
			foreach($set as $k=> $s){
				$a[$s] += 1;
			}	
			print_a('Übereinstimmungen pro Filter',$a);
			// Get the number of filtertypes every filter has
			$stmt = $db->query('SELECT filterID, COUNT(filtertypeID) as num FROM pbs_filterentries GROUP BY filterID');			 
			$resultset = $stmt->fetchAll();
			foreach($resultset as $d){
				$database[$d['filterID']] = $d['num'];
			}
			print_a('Anzahl Filterentries in Datenbank',$database);
		
			// remove all filters from resultset, which to few filtertypes satisfied
			$result = array();
			foreach($a as $i=>$b){
				if($a[$i] < $database[$i]){
					unset($a[$i]);
				}
				else{
					$result[] = $i;
				}
			}
		
			print_a('True Filters',$result);
			// now selecting the filter with the highest priority
			$query = 'SELECT filterID, bootmenuID, priority 
				FROM pbs_filter WHERE ';
			foreach($result as $e){
				$queryTmp[] = "filterID = '$e'";
			}
			$query .= implode(" OR ", $queryTmp);
			$query .= 'ORDER BY priority DESC LIMIT 0,1';
			$bootmenuID = 'null';
			try{
				$stmt = $db->query($query);
				$resultset = $stmt->fetchAll();
				$bootmenuID = $resultset[0]['bootmenuID'];
			}
			catch(Exception $e){				
			}
			if($bootmenuID != 'null'){
				$bm = new Application_Model_BootMenu();
				$bmmapper = new Application_Model_BootMenuMapper();
				$bmmapper->find($bootmenuID,$bm);
				echo "<h1><a href='/bootmenu/index/bootmenuID/".$bootmenuID."'>Goto BootmenuID: ".$bootmenuID."</a></h1>";
			}
			else{
			echo "<h1>No Result :-(</h1>";
			}
			
		}catch (Zend_Exception $e) {  
				echo "class: ".get_class($e)."<br>\n";
				echo "Error message 2: " . $e->getMessage() . "\n";
		}
    }

    public function testevaluateAction()
    {		
		$pm = new Application_Model_PoolMapper();
		$pools = $pm->fetchAll();

		$bim = new Application_Model_BootIsoMapper();
		$bootisos = $bim->fetchAll();

		$mm = new Application_Model_MembershipMapper();
		$memberships = $mm->fetchAll();

		$gm = new Application_Model_GroupMapper();
		$groups = $gm->fetchAll();

		$cm = new Application_Model_ClientMapper();
		$clients = $cm->fetchAll();

		$filterevaluate = new Application_Form_FilterEvaluate(
			array(	'pools' 		=>	$pools,
					'bootisos' 		=>	$bootisos,
					'memberships'	=>	$memberships,
					'groups'		=>	$groups,
					'clients'		=>	$clients,
					
			));
        $this->view->filterevaluate = $filterevaluate;
    }


}