spamfilters)) { return; } self::$filters = new dcSpamFilters($core); self::$filters->init($core->spamfilters); } public static function isSpam($cur) { self::initFilters(); self::$filters->isSpam($cur); } public static function trainFilters($blog,$cur,$rs) { $status = null; # From ham to spam if ($rs->comment_status != -2 && $cur->comment_status == -2) { $status = 'spam'; } # From spam to ham if ($rs->comment_status == -2 && $cur->comment_status == 1) { $status = 'ham'; } # the status of this comment has changed if ($status) { $filter_name = $rs->exists('comment_spam_filter') ? $rs->comment_spam_filter : null; self::initFilters(); self::$filters->trainFilters($rs,$status,$filter_name); } } public static function statusMessage($rs) { if ($rs->exists('comment_status') && $rs->comment_status == -2) { $filter_name = $rs->exists('comment_spam_filter') ? $rs->comment_spam_filter : null; self::initFilters(); return '

'.__('This comment is a spam:').' '. self::$filters->statusMessage($rs,$filter_name).'

'; } } public static function dashboardIcon($core, $icons) { if (($count = self::countSpam($core)) > 0) { $str = ($count > 1) ? __('(including %d spam comments)') : __('(including %d spam comment)'); $icons['comments'][0] .= '
'.sprintf($str,$count).''; } } public static function dashboardIconTitle($core) { if (($count = self::countSpam($core)) > 0) { $str = ($count > 1) ? __('(including %d spam comments)') : __('(including %d spam comment)'); return '
'.sprintf($str,$count).''; } else { return ''; } } public static function countSpam($core) { return $core->blog->getComments(array('comment_status'=>-2),true)->f(0); } public static function countPublishedComments($core) { return $core->blog->getComments(array('comment_status'=>1),true)->f(0); } public static function delAllSpam($core, $beforeDate = null) { $strReq = 'SELECT comment_id '. 'FROM '.$core->prefix.'comment C '. 'JOIN '.$core->prefix.'post P ON P.post_id = C.post_id '. "WHERE blog_id = '".$core->con->escape($core->blog->id)."' ". 'AND comment_status = -2 '; if ($beforeDate) { $strReq .= 'AND comment_dt < \''.$beforeDate.'\' '; } $rs = $core->con->select($strReq); $r = array(); while ($rs->fetch()) { $r[] = (integer) $rs->comment_id; } if (empty($r)) { return; } $strReq = 'DELETE FROM '.$core->prefix.'comment '. 'WHERE comment_id '.$core->con->in($r).' '; $core->con->execute($strReq); } public static function getUserCode($core) { $code = pack('a32',$core->auth->userID()). pack('H*',crypt::hmac(DC_MASTER_KEY,$core->auth->getInfo('user_pwd'))); return bin2hex($code); } public static function checkUserCode($core,$code) { $code = pack('H*',$code); $user_id = trim(@pack('a32',substr($code,0,32))); $pwd = @unpack('H40hex',substr($code,32,40)); if ($user_id === false || $pwd === false) { return false; } $pwd = $pwd['hex']; $strReq = 'SELECT user_id, user_pwd '. 'FROM '.$core->prefix.'user '. "WHERE user_id = '".$core->con->escape($user_id)."' "; $rs = $core->con->select($strReq); if ($rs->isEmpty()) { return false; } if (crypt::hmac(DC_MASTER_KEY,$rs->user_pwd) != $pwd) { return false; } $permissions = $core->getBlogPermissions($core->blog->id); if ( empty($permissions[$rs->user_id]) ) { return false; } return $rs->user_id; } public static function purgeOldSpam($core) { $defaultDateLastPurge = time(); $defaultModerationTTL = '7'; $init = false; // settings $core->blog->settings->addNamespace('antispam'); $dateLastPurge = $core->blog->settings->antispam->antispam_date_last_purge; if ($dateLastPurge === null) { $init = true; $core->blog->settings->antispam->put('antispam_date_last_purge',$defaultDateLastPurge,'integer','Antispam Date Last Purge (unix timestamp)',true,false); $dateLastPurge = $defaultDateLastPurge; } $moderationTTL = $core->blog->settings->antispam->antispam_moderation_ttl; if ($moderationTTL === null) { $core->blog->settings->antispam->put('antispam_moderation_ttl',$defaultModerationTTL,'integer','Antispam Moderation TTL (days)',true,false); $moderationTTL = $defaultModerationTTL; } if ($moderationTTL < 0) { // disabled return; } // we call the purge every day if ((time()-$dateLastPurge) > (86400)) { // update dateLastPurge if (!$init) { $core->blog->settings->antispam->put('antispam_date_last_purge',time(),null,null,true,false); } $date = date('Y-m-d H:i:s', time() - $moderationTTL*86400); dcAntispam::delAllSpam($core, $date); } } } ?>