OSDN Git Service

Now creating reporting methods to reconstruct $progress structure...
[pukiwiki/pukiwiki_sandbox.git] / spam / spam.php
index fd2d3a7..27bab9b 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// $Id: spam.php,v 1.138 2007/04/30 03:23:33 henoheno Exp $
+// $Id: spam.php,v 1.141 2007/05/02 10:01:19 henoheno Exp $
 // Copyright (C) 2006-2007 PukiWiki Developers Team
 // License: GPL v2 or (at your option) any later version
 //
@@ -1016,19 +1016,16 @@ function blocklist_distiller(& $hosts, $keys = array('goodhost', 'badhost'), $as
        return $blocked;
 }
 
-function is_badhost($hosts = array(), $asap = TRUE, & $remains)
+// Simple example for badhost (not used now)
+function is_badhost($hosts = array(), $asap = TRUE, $bool = TRUE)
 {
        $list = get_blocklist('list');
-
        $blocked = blocklist_distiller($hosts, array_keys($list), $asap);
-       $remains = $hosts;
        foreach($list as $key=>$type){
-               if (! $type) {
-                       unset($blocked[$key]); // Ignore goodhost etc
-               }
+               if (! $type) unset($blocked[$key]); // Ignore goodhost etc
        }
 
-       return $blocked;
+       return $bool ? ! empty($blocked) : $blocked;
 }
 
 
@@ -1256,29 +1253,33 @@ function check_uri_spam($target = '', $method = array())
        // Return if ...
        if ($asap && $is_spam) return $progress;
 
-       // URI: Bad host
+       // URI: Bad host (Separate good/bad hosts from $hosts)
        if ((! $asap || ! $is_spam) && isset($method['badhost'])) {
-               $__remains = array();
-               $badhost = is_badhost($hosts, $asap, $__remains);
-               if (! $asap) {
-                       if ($__remains) {
-                               $remains['badhost'] = array();
-                               foreach ($__remains as $value) {
-                                       $remains['badhost'][$value] = TRUE;
-                               }
+
+               // is_badhost()
+               $list = get_blocklist('list');
+               $blocked = blocklist_distiller($hosts, array_keys($list), $asap);
+               foreach($list as $key=>$type){
+                       if (! $type) unset($blocked[$key]); // Ignore goodhost etc
+               }
+               unset($list);
+
+               if (! $asap && $hosts) {
+                       $remains['badhost'] = array();
+                       foreach ($hosts as $value) {
+                               $remains['badhost'][$value] = TRUE;
                        }
                }
-               unset($__remains);
-               if (! empty($badhost)) {
 
-                       //var_dump($badhost);   // BADHOST detail
+               if (! empty($blocked)) {
+
+                       //var_dump($blocked);   // BADHOST detail
 
-                       $sum['badhost'] += array_count_leaves($badhost);
-                       foreach(array_keys($badhost) as $keys) {
+                       $sum['badhost'] += array_count_leaves($blocked);
+                       foreach(array_keys($blocked) as $keys) {
                                $is_spam['badhost'][$keys] =
-                                       array_count_leaves($badhost[$keys]);
+                                       array_count_leaves($blocked[$keys]);
                        }
-                       unset($badhost);
                }
        }
 
@@ -1298,6 +1299,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 +1329,23 @@ function summarize_spam_progress($progress = array(), $blockedonly = FALSE)
        return implode(', ', $tmp);
 }
 
+function summarize_detail_badhost($is_spam_badhost = array())
+{
+       $badhost = array();
+       foreach($is_spam_badhost as $glob=>$number) {
+               $badhost[] = $glob . '(' . $number . ')';
+       }
+       return implode(', ', $badhost);
+
+}
+
+function summarize_detail_newtral($remains_badhost = array())
+{
+       return count($remains_badhost) .
+               ' (' . implode(', ', array_keys($remains_badhost)) . ')';
+}
+
+
 // ---------------------
 // Exit
 
@@ -1378,21 +1402,10 @@ function pkwk_spamnotify($action, $page, $target = array('title' => ''), $progre
                $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);
+               $summary['DETAIL_BADHOST'] = summarize_detail_badhost($progress['is_spam']['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']))
-                               ) .
-                       ')';
+               $summary['DETAIL_NEUTRAL_HOST'] = summarize_detail_newtral($progress['remains']['badhost']);
        }
        $summary['COMMENT'] = $action;
        $summary['PAGE']    = '[blocked] ' . (is_pagename($page) ? $page : '');