db = Zend_Db_Table::getDefaultAdapter(); $db = $this->db; $debuglevel = 0; $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]); if (isset($sessionarray['sessionID'])) { $session->setID($sessionarray['sessionID']); } if(!isset($userIDsNamespace['membershipID'])) { $bootisoMapper = new Application_Model_BootIsoMapper(); $bootiso = new Application_Model_BootIso(); $bootisoMapper->find($session->getBootisoID(), $bootiso); $groupID = $bootiso->getGroupID(); } else { $groupID = $userIDsNamespace['groupID']; } ######################################################### // 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('groupID', $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 = strtotime(date('d.m.Y')); } try { $stmt = $db->query("SELECT * FROM pbs_filterentries fe, pbs_filter f WHERE fe.filtertypeID = ".$filtertypID." AND fe.filtervalue <= ".$date." AND ".$date." <= 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], $date); } ######################################## $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'"; } if (!empty($queryTmp)) { $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); } } ?>