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



                                                     

                                  
                    

                          
                        


                                                                                            
                 
                                                               



                                 
                                

                                                                                            
                                      
                                                                                   
                 


                                     
     
                                   













                                                                                          
                                                                                                









                                                                                           
                 


                                        
     









                                                                             



                                      



                                                                          
                        










                                                                             


                                                                                         


                                                                                





                                                                                                                        






                                                                                        




                                                                             



                                          
                
                                                           


                                           

                                                                                                                                                    


                                                                                                              




                                                                                     
                                                                                        
                                                                                                                   

                                                                                
                                                                                                                              

                                                                                       
                                                                                        








                                                                                                               

                                                                                          


                                                                                                     



                                                                                                        
     

                                               


                                     
                                                                                                




                                                                                                   

                                                                                                        













                                                                                                     



















                                                                                                                                        
                                                                





                                                                                     


                                                    


                                                 

                                        

                                                                                        
                                                                                  
                                                         
                                                                                           



                                                                                                     


                                                                                                   
                                          
                         
                                     


                                                                             
                 
     







                                                                  











                                                                  






                                                                               


                                                                                 
                                                                                     
                                                      













                                                                                       
                                                                                


                                                                                 
                                                                                     




                                                                             













                                                                                                                               
                                                                                             






                                                                                           

                                                                                            
                                                                                     





                                                                             
                                                                                 











                                                                                                     
                                                                                 
                                    
                                         










                                                                                                                        
                                                                                 
                                       
                                         
                                                                  











                                                                                            
                                                                                 
                                  
                                         
                                                                  











                                                                                            


                                                                                 

                                                            



































































                                                                                                                                                         
         


 

 



 

 
<?php

class FilterController extends Zend_Controller_Action
{

    private $_filtermapper = null;
	private $db;
    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()
    {
        if (!isset($_POST["add"])){
    		$addfilterform = new Application_Form_FilterAdd();    		
			$this->view->addfilterform = $addfilterform;		
		}else {
			$addfilterform = new Application_Form_FilterAdd($_POST);
			if ($addfilterform->isValid($_POST)) {			
				try{
					$newfilter = new Application_Model_Filter();
					$newfilter->setTitle($_POST['title']);
					$newfilter->setCreated(time());
					$newfilter->setDescription($_POST['description']);
					$newfilter->setPriority($_POST['priority']);

					// 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";  
        		}
			}
		}
    }

    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()
    {
		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();  
			$editfilterform->populate($filter2);
			$this->view->editfilterform = $editfilterform;
		
		} else{
			try{
				$filterID = $this->_request->getParam('filterID');	
				
				$editfilterform = new Application_Form_FilterAdd($_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';					
				}
				else
				{
					echo 'not valid';
				}
			}catch (Zend_Exception $e) {  
    			echo "Error message 2: " . $e->getMessage() . "\n";  
    		}
			$this->_redirect('/filter');
		}		
    }

    public function addfilterentryAction()
    {
		
        // TODO: ACL implementieren ob er editieren darf   
		if (!isset($_POST["add"])){
			echo "case1";
			try{
				$editfilterform = new Application_Form_FilterEntriesAdd(array('filterID' => $this->_request->getParam('filterID')));
				$this->view->editfilterform = $editfilterform;
				echo "<pre style='padding:5px;border:1px solid black;background-color:#3CF'>";
				print_r(array('debug','case1'));
				echo "</pre>";

			}catch (Zend_Exception $e) {  
				echo "Error message 2: " . $e->getMessage() . "\n";  
			}
		} else{
			$editfilterform = new Application_Form_FilterEntriesAdd($_POST);
			echo "<pre style='padding:5px;border:1px solid black; background-color:#3CF;'>case2</pre>";
			
			if ($editfilterform->isValid($_POST)) {			
				echo "<pre style='padding:5px;border:1px solid black; background-color:#3CF;'>case 2.2</pre>";
				$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();
				echo "<pre style='border:1px solid black;background-color:#F5B800'>";
				print_r($newfilterenty);
				echo "</pre>";
				$newfilter2->save($newfilterenty);					
			}
			$this->_redirect('/filter');
		}
    }
	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();
				echo "<pre style='border:1px solid black;background-color:#F5B800'>";
				print_r($filterentry->toArray());
				echo "</pre>";
				$editfilterform->populate($filterentry->toArray());
				$editfilterform->setFilterID($filterID);
				$this->view->editfilterform = $editfilterform;
				echo "case 1.1";

			}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)) {			
					echo "valid\n";				
					$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']);	
					}
					echo "<pre style='border:1px solid black;background-color:#F5B800'>";
					print_r($newfilterenty);
					echo "</pre>";
					$newfilter2 = new Application_Model_FilterEntriesMapper();				
					$newfilter2->save($newfilterenty);
								
				}
				else{
					echo 'nö';
				}
			}catch (Zend_Exception $e) {  
				echo "Error message 2: " . $e->getMessage() . "\n";  
			}
			$this->_redirect('/filter');
		}
    }
	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";
			}
#			echo "ready";
			$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;	
		try{ 
			
			$mysession = '1';

			$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
			$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
			$client = new Application_Model_Client();
			$clientmapper = new Application_Model_ClientMapper();
			$clientmapper->find($session->getClientID(),$client);

			$macAdress = $client->getMacadress();
			$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'];	
			}
			if($showPartResults)
				print_a('macAdress',$result,$set[$filtertypID]);
			#########################################################
			// PoolID
			$filtertypID = 3;
				// get PoolID from client_ID from session_id from the session
			$poolentry = new Application_Model_PoolEntries();
			$poolentrymapper = new Application_Model_PoolEntriesMapper();
			$poolentry = $poolentrymapper->findby('clientID',$client->getID());
			$poolentry = $poolentry[0];

			$poolID = $poolentry['poolID'];
			print_a($poolentry);
			$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
							filtertypeID  = ".$filtertypID." AND
							filtervalue = ".$poolID." ");
			$result = $stmt->fetchAll();
			foreach($result as $r){
				$set[$filtertypID][] = $r['filterID'];	
			}
			if($showPartResults)
				print_a('poolID',$result,$set[$filtertypID]);
			#########################################################
			// ClientID		
			$filtertypID = 8;	
			// get client_ID from session_id from the session
			$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
							filtertypeID  = ".$filtertypID." AND
							filtervalue = ".$session->getClientID()." ");
			$result = $stmt->fetchAll();
			foreach($result as $r){
				$set[$filtertypID][] = $r['filterID'];	
			}
			if($showPartResults)
				print_a('clientID',$result,$set[$filtertypID]);
			#########################################################
			// BootIsoID
			$filtertypID = 4;
				// get BootIsoID from client_ID from session_id from the session			
			$bootisoID = $session->getBootisoID();
			$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
							filtertypeID  = ".$filtertypID." AND
							filtervalue = ".$bootisoID." ");
			$result = $stmt->fetchAll();
			foreach($result as $r){
				$set[$filtertypID][] = $r['filterID'];	
			}
			if($showPartResults)
				print_a('bootisoID',$result,$set[$filtertypID]);
			#########################################################
			// MembershipID
			$filtertypID = 5;
				// get membership from the session
			//TODO: GET MEMBERSHIP from SESSION
			$membershipID = 1;

			$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
							filtertypeID  = ".$filtertypID." AND
							filtervalue = ".$membershipID." ");
			$result = $stmt->fetchAll();
			foreach($result as $r){
				$set[$filtertypID][] = $r['filterID'];	
			}
			if($showPartResults)
				print_a('membership',$result,$set[$filtertypID]);
			#########################################################
			// GroupID
			$filtertypID = 6;
				// get membership from the session
			//TODO: GET GROUP from SESSION
			$groupID = 1;

			$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE 
							filtertypeID  = ".$filtertypID." AND
							filtervalue = ".$groupID." ");
			$result = $stmt->fetchAll();
			foreach($result as $r){
				$set[$filtertypID][] = $r['filterID'];	
			}
			if($showPartResults)
				print_a('membership',$result,$set[$filtertypID]);
			#########################################################
			// Time
			$filtertypID = 7;
			$nowShort = date('H-i',time());
			$nowLong = date('Y-m-d-H-i',time());

			$nowShort = str_replace("-","",$nowShort);
			$nowLong = str_replace("-","",$nowLong);

			$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'];	
			}
			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
			foreach($set as $k=> $s){
				$a[$s] += 1;
			}	
				
			// 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'];
			}
			
			// remove all filters from resultset, which to few filtertypes satisfied
			foreach($a as $i=>$b){
				if($a[$i] < $database[$i]){
					unset($a[$i]);
				}
				else{
					$result[] = $i;
				}
			}
			
			print_a('result set of filterIDs',$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';
			$stmt = $db->query($query);
			$resultset = $stmt->fetchAll();
			print_a($resultset);
			echo "<h1>".$resultset[0]['bootmenuID']."</h1>";
		
		}catch (Zend_Exception $e) {  
				echo "class: ".get_class($e)."<br>\n";
				echo "Error message 2: " . $e->getMessage() . "\n";  
		}
	}

}