<?php
error_reporting(E_ALL);
ini_set('display_errors',1); # for debug
require_once('SpamChecker.class.php');
/* demo class, only for showing result, not to be used in prod */
class MyAnalyzer extends VowConAnalyzer {
function HTMLReport() {
if(!isset($this->TextStats))
$this->CalcTextStats();
if(!$this->TextStats)
return ''; # No data to show, evaluates as "false"
$Cols = array('Word'=>'word','Groups'=>'groupCount','Max'=>'groupMaxSize',
'Sum'=>'groupSum','SumSq'=>'groupSumSq',
'Distinct'=>'distinct','Score'=>'scoreStr');
$trBG = '<tr style="background-color:'; # Note that < and " are both open
$tdR = '<td style="text-align:right">';
$res = '<table border="1"'.
' style="border-collapse:collapse;border:solid 1px black;">';
$res.= $trBG.'#99f"><th>'.
implode('</th><th>',array_keys($Cols)).
'</th></tr>';
foreach($this->words as $word) {
if(is_numeric($word)) continue;
if(!trim($word)) continue;
$w = $this->Stats($word);
$w->scoreStr = sprintf('%.2f',$w->score);
$res.= $trBG.
($w->score > $this->MaxWordScore ? '#f66':
($w->score > $this->BadWordLimit ? '#f96' :
($w->score > $this->MaxAvgScore ? '#ff9' : ''))).';">';
foreach($Cols as $name=>$prop)
$res.= (($name=='Word') ? '<td>' : $tdR).$w->$prop.'</td>';
$res.= '</tr>';
}
$dash = $tdR.'-</td>';
$res.= $trBG.'#99f"><td>Max Score</td>'.$dash.$dash.$dash.$dash.$dash.
$tdR.sprintf('%.2f',$this->TextStats->MaxScore).'</td></tr>';
$res.= $trBG.'#99f"><td>Avg Score</td>'.$dash.$dash.$dash.$dash.$dash.
$tdR.sprintf('%.2f',$this->TextStats->AvgScore).'</td></tr>';
$res.= $trBG.'#99f"><td>Bad word %</td>'.$dash.$dash.$dash.$dash.$dash.
$tdR.'<span style="color:'.
($this->TextStats->BadPercent > $this->MaxBadPercent ? 'red' : 'green').'">'.
sprintf('%d',$this->TextStats->BadPercent).'%</span></td></tr>';
$res.= $trBG.'white">'.
'<th>Legend</th>'.
'<td colspan="6">'.
'<table style="font-size:70%;font-family:Verdana,sans-serif;"><tr>'.
'<td style="background-color:#f66"> </td>'.
'<td>Above max word score ('.sprintf('%.2f',$this->MaxWordScore).')</td></tr>'.
'<td style="background-color:#f96"> </td>'.
'<td>Above bad word limit ('.sprintf('%.2f',$this->BadWordLimit).')</td></tr>'.
'<td style="background-color:#ff9"> </td>'.
'<td>Above max average score ('.sprintf('%.2f',$this->MaxAvgScore).')</td></tr>'.
'</table>'.
'</td>'.
'</tr>';
$res.= '</table>';
return $res;
}
}
if(count($_REQUEST)) {
$SpamChk = new SpamChecker(new MyAnalyzer());
$SpamChk->Ignore('sessionkey'); # example, see SpamChecker_test_1.php
if(!$SpamChk->Accepted())
# !! Report displayed for demo/debugging purpouses
# In a real app, log & redirect to either:
# a) error page (user friendly but also spammer friendly)
# b) same page as successfull submit (stealthy, but possibly misleading for users)
# c) reload page, displaying error (perhaps too spammer friendly?)
# d) site homepage (might be the best alternative in some cases)
die('<h1>Spam detected:</h1>'.
$SpamChk->VowCon->GetTextStatus().
$SpamChk->VowCon->HTMLReport());
}
?>
|