OSDN Git Service

Simplify
[pukiwiki/pukiwiki_sandbox.git] / spam / spam.php
index 4ac9fa7..0b2d91a 100644 (file)
@@ -1,5 +1,5 @@
 <?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
 //
@@ -1069,59 +1069,84 @@ function check_uri_spam_method($times = 1, $t_area = 0, $rule = TRUE)
 // 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;
@@ -1130,8 +1155,6 @@ function check_uri_spam($target = '', $method = array())
                                        }
                                }
                        }
-                       if (! empty($_error)) $error += $_error;
-                       if ($asap && $is_spam) break;
                }
                return $progress;
        }
@@ -1167,7 +1190,6 @@ function check_uri_spam($target = '', $method = array())
 
        // URI: Pickup
        $pickups = uri_pickup_normalize(spam_uri_pickup($target, $method));
-       //$remains['uri_pickup'] = & $pickups;
 
        // Return if ...
        if (empty($pickups)) return $progress;
@@ -1241,7 +1263,6 @@ function check_uri_spam($target = '', $method = array())
        $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'];
@@ -1262,6 +1283,7 @@ function check_uri_spam($target = '', $method = array())
                foreach($list as $key=>$type){
                        if (! $type) unset($blocked[$key]); // Ignore goodhost etc
                }
+               unset($list);
 
                if (! $asap && $hosts) {
                        $remains['badhost'] = array();
@@ -1298,6 +1320,12 @@ function array_count_leaves($array = array(), $count_empty = FALSE)
        return $count;
 }
 
+// Merge two leaves
+function array_merge_leaves($array1 = array(), $array2 = array())
+{
+       return array_merge_recursive($array1, $array2);
+}
+
 // ---------------------
 // Reporting
 
@@ -1322,6 +1350,26 @@ function summarize_spam_progress($progress = array(), $blockedonly = FALSE)
        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
 
@@ -1377,23 +1425,13 @@ function pkwk_spamnotify($action, $page, $target = array('title' => ''), $progre
        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);