I have discovered an annoying bug in the edit part of this script. Here is an example of when the bug occurs:
1. A spammer first posts a message without any spam keywords so that a new thread and a new post is created
2. The spammer then returns and edits his message and adds spam keywords to the post
3. The filter then auto-moderates the post using the following code linked to the "editpost_update_process" hook:
$dataman->set('visible', 0);
$edit['visible'] = 0;
4. If the edit has been done within the time-limit when no "Edited by..." is displayed and the old version of the post is not saved then this will result in a visible thread that contains no posts visible for normal users. There is a post there, but the spam keyword filter has unapproved it so it is not visible for normal users.
I think that I have found a solution to this. I have disabled the "editpost_update_process" hook used in this mod and I have instead written my own routine for the "editpost_update_complete" hook. My code only works with moderation, since I only use moderation and the php code for this new hook looks like this:
Code:
if ($vbulletin->userinfo['posts'] < $vbulletin->options['kwas_antispam_posts']) {
$scan = strtolower($edit['message']);
$keywords = explode("\r\n", strtolower($vbulletin->options['kwas_keyword_weights']));
$total = 0;
foreach($keywords as $keyword) {
$keyword = explode("|", $keyword);
$total += substr_count($scan, $keyword[0]) * $keyword[1];
}
if (($total >= $vbulletin->options['kwas_moderate_threshold']) &&($total < $vbulletin->options['kwas_reject_threshold']) && $vbulletin->options['kwas_moderate_threshold']) {
require_once(DIR.'/includes/functions_databuild.php');
unapprove_post($postinfo['postid'],($foruminfo['countposts'] AND !$post['skippostcount']), true, $postinfo, $threadinfo, false);
}
}
This more "high-level" solution using the buildt-in unapprove routines in vBulletin also unapproves threads, re-calculates post counts etc. so it seems to be a better solution.