<?php
-// $Id: spam.php,v 1.139 2007/05/01 05:04:39 henoheno Exp $
+// $Id: spam.php,v 1.144 2007/05/03 15:30:46 henoheno Exp $
// Copyright (C) 2006-2007 PukiWiki Developers Team
// License: GPL v2 or (at your option) any later version
//
// Simple/fast spam check
function check_uri_spam($target = '', $method = array())
{
- if (! is_array($method) || empty($method)) {
- $method = check_uri_spam_method();
- }
+ // Return value
$progress = array(
+ 'method' => array(
+ // Theme to do => Dummy, optional value, or optional array()
+ //'quantity' => 8,
+ //'uniqhost' => TRUE,
+ //'non_uniqhost'=> 3,
+ //'non_uniquri' => 3,
+ //'badhost' => TRUE,
+ //'area_anchor' => 0,
+ //'area_bbcode' => 0,
+ //'uri_anchor' => 0,
+ //'uri_bbcode' => 0,
+ ),
'sum' => array(
- 'quantity' => 0,
- 'uniqhost' => 0,
- 'non_uniqhost'=> 0,
- 'non_uniquri' => 0,
- 'badhost' => 0,
- 'area_anchor' => 0,
- 'area_bbcode' => 0,
- 'uri_anchor' => 0,
- 'uri_bbcode' => 0,
+ // Theme => Volume found (int)
+ ),
+ 'is_spam' => array(
+ // Flag. If someting defined here,
+ // one or more spam will be included
+ // in this report
+ ),
+ 'remains' => array(
),
- 'is_spam' => array(),
- 'method' => & $method,
- 'remains' => array(),
- 'error' => array(),
);
+
+ // Aliases
$sum = & $progress['sum'];
$is_spam = & $progress['is_spam'];
+ $progress['method'] = & $method; // Argument
$remains = & $progress['remains'];
- $error = & $progress['error'];
$asap = isset($method['asap']);
- // Recurse
+ // Init
+ if (! is_array($method) || empty($method)) {
+ $method = check_uri_spam_method();
+ }
+ foreach(array_keys($method) as $key) {
+ if (! isset($sum[$key])) $sum[$key] = 0;
+ }
+
if (is_array($target)) {
foreach($target as $str) {
- // Recurse
- $_progress = check_uri_spam($str, $method);
- $_sum = & $_progress['sum'];
- $_is_spam = & $_progress['is_spam'];
- $_remains = & $_progress['remains'];
- $_error = & $_progress['error'];
+ if (! is_string($str)) continue;
+
+ $_progress = check_uri_spam($str, $method); // Recurse
+
+ // Merge $sum
+ $_sum = & $_progress['sum'];
foreach (array_keys($_sum) as $key) {
- $sum[$key] += $_sum[$key];
+ if (! isset($sum[$key])) {
+ $sum[$key] = & $_sum[$key];
+ } else {
+ $sum[$key] += $_sum[$key];
+ }
}
+
+ // Merge $is_spam
+ $_is_spam = & $_progress['is_spam'];
foreach (array_keys($_is_spam) as $key) {
if (is_array($_is_spam[$key])) {
// Marge keys (badhost)
foreach(array_keys($_is_spam[$key]) as $_key) {
if (! isset($is_spam[$key][$_key])) {
- $is_spam[$key][$_key] = $_is_spam[$key][$_key];
+ $is_spam[$key][$_key] = & $_is_spam[$key][$_key];
} else {
$is_spam[$key][$_key] += $_is_spam[$key][$_key];
}
}
} else {
$is_spam[$key] = TRUE;
+ if ($asap) break;
}
}
- foreach ($_remains as $key=>$value) {
+ if ($asap && $is_spam) break;
+
+ // Merge $remains
+ foreach ($_progress['remains'] as $key=>$value) {
foreach ($value as $_key=>$_value) {
if (is_int($_key)) {
$remains[$key][] = $_value;
}
}
}
- if (! empty($_error)) $error += $_error;
- if ($asap && $is_spam) break;
}
return $progress;
}
// URI: Pickup
$pickups = uri_pickup_normalize(spam_uri_pickup($target, $method));
- //$remains['uri_pickup'] = & $pickups;
// Return if ...
if (empty($pickups)) return $progress;
$hosts = array();
foreach ($pickups as $pickup) $hosts[] = & $pickup['host'];
$hosts = array_unique($hosts);
- //$remains['uniqhost'] = & $hosts;
$sum['uniqhost'] += count($hosts);
if ((! $asap || ! $is_spam) && isset($method['non_uniqhost'])) {
$sum['non_uniqhost'] = $sum['quantity'] - $sum['uniqhost'];
foreach($list as $key=>$type){
if (! $type) unset($blocked[$key]); // Ignore goodhost etc
}
+ unset($list);
if (! $asap && $hosts) {
$remains['badhost'] = array();
return $count;
}
+// Merge two leaves
+function array_merge_leaves($array1 = array(), $array2 = array())
+{
+ return array_merge_recursive($array1, $array2);
+}
+
// ---------------------
// Reporting
return implode(', ', $tmp);
}
+function summarize_detail_badhost($progress = array())
+{
+ if (! isset($progress['is_spam']['badhost'])) return '';
+
+ $badhost = array();
+ foreach($progress['is_spam']['badhost'] as $glob=>$number) {
+ $badhost[] = $glob . '(' . $number . ')';
+ }
+ return implode(', ', $badhost);
+}
+
+function summarize_detail_newtral($progress = array())
+{
+ if (! isset($progress['remains']['badhost'])) return '';
+
+ return count($progress['remains']['badhost']) .
+ ' (' . implode(', ', array_keys($progress['remains']['badhost'])) . ')';
+}
+
+
// ---------------------
// Exit
if (! $asap) {
$summary['METRICS'] = summarize_spam_progress($progress);
}
- if (isset($progress['is_spam']['badhost'])) {
- $badhost = array();
- foreach($progress['is_spam']['badhost'] as $glob=>$number) {
- $badhost[] = $glob . '(' . $number . ')';
- }
- $summary['DETAIL_BADHOST'] = implode(', ', $badhost);
- }
- if (! $asap && $progress['remains']['badhost']) {
- $count = count($progress['remains']['badhost']);
- $summary['DETAIL_NEUTRAL_HOST'] = $count .
- ' (' .
- preg_replace(
- '/[^, a-z0-9.-]/i', '',
- implode(', ', array_keys($progress['remains']['badhost']))
- ) .
- ')';
- }
+
+ $tmp = summarize_detail_badhost($progress);
+ if ($tmp != '') $summary['DETAIL_BADHOST'] = $tmp;
+
+ $tmp = summarize_detail_newtral($progress);
+ if (! $asap && $tmp != '') $summary['DETAIL_NEUTRAL_HOST'] = $tmp;
+
$summary['COMMENT'] = $action;
$summary['PAGE'] = '[blocked] ' . (is_pagename($page) ? $page : '');
$summary['URI'] = get_script_uri() . '?' . rawurlencode($page);