db = Zend_Db_Table::getDefaultAdapter(); $db = $this->db; $debuglevel = 1; $userIDsNamespace = Zend_Session::namespaceGet('userIDs'); $membershipMapper = new Application_Model_MembershipMapper(); $this->membership = new Application_Model_Membership(); if(isset($userIDsNamespace['membershipID'])){ $membershipMapper->find($userIDsNamespace['membershipID'],$this->membership); } else{ $this->membership->setID(null); } // 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 = ($_POST['time']); $clientID = $_POST['clientID']; $weekday = $_POST['weekday']; $date = $_POST['date']; 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, 'hardwarehash' => $hardwarehash, 'weekday' => $weekday, 'date' => $date)); } try{ $set = array(); $session = new Application_Model_Session(); $sessionmapper = new Application_Model_SessionMapper(); $sessionarray = $sessionmapper->findBy(array('alphasessionID' => $_SESSION['alphasessionID']),true); $session->setOptions($sessionarray[0]); @$session->setID($sessionarray['sessionID']); $bootisoMapper = new Application_Model_BootisoMapper(); $bootiso = new Application_Model_BootIso(); $bootisoMapper->find($session->getBootisoID(),$bootiso); $groupID = $bootiso->getGroupID(); ######################################################### // 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)); $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND REPLACE(fe.filtervalue,'.','') <= '".$ipAdress."' AND '".$ipAdress."' <= REPLACE(fe.filtervalue2,'.','') AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } if($debuglevel >= 3 ) 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 = $this->fillMac($macAdress); $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue <= '".$macAdress."' AND '".$macAdress."' <= fe.filtervalue2 AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) 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(array('clientID' => $client->getID()),true); @$poolentry = $poolentry[0]; $poolID = $poolentry['poolID']; } try{ $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue = ".$poolID." AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); if(count($result)>0){ foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } } catch(Exception $e){} if($debuglevel >= 3) 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 fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue = ".$clientID." AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) 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 fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue = ".$bootisoID." AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) print_a('bootisoID',$result,$set[$filtertypID]); ######################################################### // MembershipID $filtertypID = 5; if($this->membership->getID() != null){ if(!$testFilter){ // get membership from the session //TODO: GET MEMBERSHIP from SESSION $membershipID = $this->membership->getID(); } try{ $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue = ".$membershipID." AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) print_a('membership',$result,$set[$filtertypID]); } ######################################################### // GroupID $filtertypID = 6; if($this->membership->getID() != null){ if(!$testFilter){ // get membership from the session $membergroupID = $this->membership->getGroupID(); } } if(isset($membergroupID)){ try{ $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue = ".$membergroupID." AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) print_a('membership',$result,$set[$filtertypID]); } ######################################################### // Time $filtertypID = 7; if(!$testFilter){ $nowShort = date("H:i"); } else{ $nowShort = date("H:i",$time); } $nowShort = str_replace(":","",$nowShort); try{ $stmt = $db->query('SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = '.$filtertypID.' AND REPLACE(fe.filtervalue,":","") <= '.$nowShort.' AND REPLACE(fe.filtervalue2,":","") >= '.$nowShort." AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) print_a('time',$result,$set[$filtertypID]); ######################################################### // Hardwarehash $filtertypID = 9; if(!$testFilter){ // get hardwarehash from session $client = new Application_Model_Client(); $clientmapper = new Application_Model_ClientMapper(); $clientmapper->find($session->getClientID(),$client); $hardwarehash = $client->getHardwarehash(); } try{ $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue = ".$hardwarehash." AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) print_a('hardwarehash',$result,$set[$filtertypID]); ######################################################### // weekday $filtertypID = 10; if(!$testFilter){ $weekday = date('N'); } try{ $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue <= ".$weekday." AND ".$weekday." <= fe.filtervalue2 AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) print_a('weekday',$result,$set[$filtertypID]); ######################################################### // date $filtertypID = 11; if(!$testFilter){ $date = date('d.m.Y'); } try{ $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND REPLACE(fe.filtervalue,'.','') <= ".$date." AND ".$date." <= REPLACE(fe.filtervalue2,'.','') <= AND fe.filterID = f.filterID AND f.groupID = '".$groupID."'"); $result = $stmt->fetchAll(); foreach($result as $r){ $set[$filtertypID][] = $r['filterID']; } } catch(Exception $e){} if($debuglevel >= 3) print_a('date',$result,$set[$filtertypID]); ######################################## $result = array(); // ErgebnisSet auswerten if($debuglevel >= 2) 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; } if($debuglevel >= 2) print_a('Übereinstimmungen pro Filter',$a); // Get the number of filtertypes every filter has $stmt = $db->query( "SELECT f.filterID,SUM(num) as num FROM ( SELECT *, '1' as num FROM pbs_filterentries GROUP BY filterID, filtertypeID ) d RIGHT OUTER JOIN pbs_filter f ON d.filterID = f.filterID WHERE groupID = '".$groupID."' GROUP BY d.filterID"); $resultset = $stmt->fetchAll(); foreach($resultset as $d){ if($d['num'] == NULL){ $d['num'] = 0; // write filter with empty filterrules in resultset $result[] = $d['filterID']; } $database[$d['filterID']] = $d['num']; } if($debuglevel >= 2) print_a('Anzahl Filterentries in Datenbank',$database); // 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; } } if($debuglevel >= 1) print_a('Valid 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); return $bootmenuID; } else{ return null; } }catch (Zend_Exception $e) { echo "class: ".get_class($e)."
\n"; 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); } } ?>