_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"])){ 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 "
";
print_r($deletefilterentry);
echo "";
$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 = $this->fillMac($macAdress);
$stmt = $db->query("SELECT * FROM pbs_filterentries WHERE
filtertypeID = ".$filtertypID." AND
filtervalue <= '".$macAdress."' AND
'".$macAdress."' <= filtervalue2");
$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 "