sql_query($sql))) { message_die(CRITICAL_ERROR, 'Could not query spam words config information', '', __LINE__, __FILE__, $sql); } while($row = $db->sql_fetchrow($result)) { $spam_config[$row['config_name']] = $row['config_value']; } /** * Auto update spam config table */ if(is_null($spam_config['pm_sender'])) { $sql = "INSERT INTO " . SPAM_WORDS_CONFIG_TABLE . " (config_name, config_value) VALUES ('pm_sender', 2)"; if(!$db->sql_query($sql)) { message_die(GENERAL_ERROR, 'Could not update spamwords config table', '', __LINE__, __FILE__, $sql); } } // // Declare functions // function insert_pm($to_id, $pm_message, $subject, $from_id, $html_on = 0, $bbcode_on = 1, $smilies_on = 1) { global $db, $lang, $user_ip, $board_config, $userdata, $phpbb_root_path, $spam_config, $phpEx; if ($spam_config['warn_user_pm'] && $userdata['session_logged_in']) { if (!$from_id) { $from_id = $userdata['user_id']; } //get variables ready $to_id = intval($to_id); $from_id = intval($from_id); $msg_time = time(); $attach_sig = $userdata['user_attachsig']; //get to users info $sql = "SELECT user_id, user_notify_pm, user_email, user_lang, user_active FROM " . USERS_TABLE . " WHERE user_id = '$to_id' AND user_id <> " . ANONYMOUS; if (!($result = $db->sql_query($sql))) { $error = TRUE; $error_msg = $lang['No_such_user']; } $to_userdata = $db->sql_fetchrow($result); $privmsg_subject = trim(strip_tags($subject)); if (empty($privmsg_subject)) { $error = TRUE; $error_msg .= ((!empty($error_msg)) ? '
' : '') . $lang['Empty_subject']; } if (!empty($pm_message)) { if (!$error) { if ($bbcode_on) { $bbcode_uid = make_bbcode_uid(); } $privmsg_message = prepare_message($pm_message, $html_on, $bbcode_on, $smilies_on, $bbcode_uid); $privmsg_message = str_replace('\\\n', '\n', $privmsg_message); } } else { $error = TRUE; $error_msg .= ((!empty($error_msg)) ? '
' : '') . $lang['Empty_message']; } $sql_info = "INSERT INTO " . PRIVMSGS_TABLE . " (privmsgs_type, privmsgs_subject, privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip, privmsgs_enable_html, privmsgs_enable_bbcode, privmsgs_enable_smilies, privmsgs_attach_sig) VALUES (" . PRIVMSGS_NEW_MAIL . ", '" . str_replace("\'", "''", $privmsg_subject) . "', " . $from_id . ", " . $to_userdata['user_id'] . ", $msg_time, '$user_ip', $html_on, $bbcode_on, $smilies_on, $attach_sig)"; if (!($result = $db->sql_query($sql_info, BEGIN_TRANSACTION))) { message_die(GENERAL_ERROR, "Could not insert/update private message sent info.", "", __LINE__, __FILE__, $sql_info); } $privmsg_sent_id = $db->sql_nextid(); $sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text) VALUES ($privmsg_sent_id, '" . $bbcode_uid . "', '" . str_replace("\'", "''", $privmsg_message) . "')"; if (!$db->sql_query($sql, END_TRANSACTION)) { message_die(GENERAL_ERROR, "Could not insert/update private message sent text.", "", __LINE__, __FILE__, $sql); } // // Add to the users new pm counter // $sql = "UPDATE " . USERS_TABLE . " SET user_new_privmsg = user_new_privmsg + 1, user_last_privmsg = " . time() . " WHERE user_id = " . $to_userdata['user_id']; if (!$status = $db->sql_query($sql)) { message_die(GENERAL_ERROR, 'Could not update private message new/read status for user', '', __LINE__, __FILE__, $sql); } if ($to_userdata['user_notify_pm'] && !empty($to_userdata['user_email']) && $to_userdata['user_active']) { $script_name = preg_replace('/^\/?(.*?)\/?$/', "\\1", trim($board_config['script_path'])); $script_name = ($script_name != '') ? $script_name . '/privmsg.' . $phpEx : 'privmsg.' . $phpEx; $server_name = trim($board_config['server_name']); $server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://'; $server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/'; include($phpbb_root_path . 'includes/emailer.' . $phpEx); $emailer = new emailer($board_config['smtp_delivery']); $emailer->from($board_config['board_email']); $emailer->replyto($board_config['board_email']); $emailer->use_template('privmsg_notify', $to_userdata['user_lang']); $emailer->email_address($to_userdata['user_email']); $emailer->set_subject($lang['Notification_subject']); $emailer->assign_vars(array ( 'USERNAME' => $to_username, 'SITENAME' => $board_config['sitename'], 'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('
', "\n", "-- \n" . $board_config['board_email_sig']) : '', 'U_INBOX' => $server_protocol . $server_name . $server_port . $script_name . '?folder=inbox' )); $emailer->send(); $emailer->reset(); } return; $msg = $lang['Message_sent'] . '

' . sprintf($lang['Click_return_inbox'], '', ' ') . '

' . sprintf($lang['Click_return_index'], '', ''); message_die(GENERAL_MESSAGE, $msg); } } function warn_user() { global $db, $userdata; if ($userdata['session_logged_in']) { $sql = "UPDATE " . USERS_TABLE . " SET user_spam_warnings = user_spam_warnings + 1 WHERE user_id = " . $userdata['user_id']; if (!($result = $db->sql_query($sql))) { message_die(GENERAL_ERROR, 'Could not get user warnings from database', '', __LINE__, __FILE__, $sql); } } } function update_log(&$subject, &$message) { global $db, $userdata, $spam_config, $post_data; $flagged = ($spam_config['flag_posts']) ? 1 : 0; $current_time = time(); $user_ip = (isset($HTTP_SERVER_VARS['REMOTE_ADDR'])) ? $HTTP_SERVER_VARS['REMOTE_ADDR'] : getenv('REMOTE_ADDR'); $sql = "INSERT INTO " . SPAM_WORDS_LOG_TABLE . " (log_user_id, log_username, log_ip, log_timestamp, log_flagged, log_message, log_subject, log_post_id) VALUES ('" . $userdata['user_id'] . "', '" . str_replace("\'", "''", $userdata['username']) . "', '" . $user_ip . "', '" . $current_time . "', '" . $flagged . "', '" . str_replace("\'", "''", $message) . "', '" . str_replace("\'", "''", $subject) . "', '" . $post_data['post_id'] . "')"; if (!$db->sql_query($sql)) { message_die(GENERAL_ERROR, 'Could not update log', '', __LINE__, __FILE__, $sql); } } function ban_user() { global $db, $userdata, $spam_config; $user_ip = (isset($HTTP_SERVER_VARS['REMOTE_ADDR'])) ? $HTTP_SERVER_VARS['REMOTE_ADDR'] : getenv('REMOTE_ADDR'); $user_ip = encode_ip($user_ip); if ($userdata['user_spam_warnings'] > $spam_config['user_warnings'] && $spam_config['user_warnings'] != 0 && $userdata['user_level'] != ADMIN) { if ($spam_config['ban_ip']) { $sql = "INSERT INTO " . BANLIST_TABLE . "(ban_userid, ban_ip) VALUES (" . $userdata['user_id'] . ", '$user_ip')"; if (!($result = $db->sql_query($sql))) { message_die(GENERAL_ERROR, 'Could not update banlist', '', __LINE__, __FILE__, $sql); } } else { $sql = "INSERT INTO " . BANLIST_TABLE . "(ban_userid) VALUES (" . $userdata['user_id'] . ")"; if (!($result = $db->sql_query($sql))) { message_die(GENERAL_ERROR, 'Could not update banlist', '', __LINE__, __FILE__, $sql); } } // // Log out the offender // $sql = "DELETE FROM " . SESSIONS_TABLE . " WHERE session_user_id = " . $userdata['user_id']; if (!($result = $db->sql_query($sql))) { message_die(GENERAL_ERROR, 'Could not update sessions table', '', __LINE__, __FILE__, $sql); } } } //AKISMET MOD function check_spam($message, &$subject, &$signature) { // find and replace : global $db, $spam_config, $userdata, $post_flagged; global $db, $spam_config, $userdata, $post_flagged, $board_config; // if akismet enabled $api_key = AKISMET_API_KEY; // $server_port = ($board_config['server_port'] === '80') ? '' : ':' . $board_config['server_port']; $server_prefix = ($board_config['cookie_secure']) ? 'https://' : 'http://'; $board_url = $server_prefix . $board_config['server_name'] . $server_port . $script_path; $akismet = new Akismet($board_url, $api_key); if (!$akismet->check_api_key()) { // We mark this as GENERAL_ERROR because the ACP should have already checked to make sure that this API key was good, so something's weird message_die(GENERAL_ERROR, 'Invalid API key'); } $akismet->setCommentAuthor($userdata['username']); $akismet->setCommentAuthorEmail($userdata['user_email']); $akismet->setCommentType("forum_post"); $akismet->setCommentAuthorUrl($userdata['user_website']); $akismet->setCommentContent($message); $akismet->setUserIP(decode_ip($userdata['session_ip'])); // Send the post to Akismet and see if it's spam or not if ($akismet->isCommentSpam()) { if ($spam_config['flag_posts']) { update_log($subject, $message); warn_user(); ban_user(); insert_pm($userdata['user_id'], $spam_config['warn_user_pm_message'], $spam_config['warn_user_pm_subject'], $spam_config['pm_sender']); $post_flagged = 1; } else { update_log($subject, $message); warn_user($user); ban_user($user); insert_pm($userdata['user_id'], $spam_config['warn_user_pm_message'], $spam_config['warn_user_pm_subject'], $spam_config['pm_sender']); $message = sprintf($spam_config['error_message'], '(N/A)'); message_die(GENERAL_MESSAGE, $message); } } else { // check against spam words database $sql = "SELECT spam_word FROM " . SPAM_WORDS_TABLE; if (!($result = $db->sql_query($sql))) { message_die(GENERAL_ERROR, 'Could not get spam words from database', '', __LINE__, __FILE__, $sql); } $message = preg_replace("#\[.{12,16}\]#i", '', $message); $message = preg_replace('/\[url\]|\[\/url\]/si', '', $message); $message = preg_replace('#\[url=|\]|\[/url\]#si', '', $message); if ($row = $db->sql_fetchrow($result)) { do { if (preg_match('#\b(' . str_replace('\*', '\w*?', phpbb_preg_quote($row['spam_word'], '#')) . ')\b#i', $message) || preg_match('#\b(' . str_replace('\*', '\w*?', phpbb_preg_quote($row['spam_word'], '#')) . ')\b#i', $subject)) { if ($spam_config['flag_posts']) { update_log($subject, $message); warn_user(); ban_user(); insert_pm($userdata['user_id'], $spam_config['warn_user_pm_message'], $spam_config['warn_user_pm_subject'], $spam_config['pm_sender']); $post_flagged = 1; break; } else { update_log($subject, $message); warn_user($user); ban_user($user); insert_pm($userdata['user_id'], $spam_config['warn_user_pm_message'], $spam_config['warn_user_pm_subject'], $spam_config['pm_sender']); $message = sprintf($spam_config['error_message'], $row['spam_word']); message_die(GENERAL_MESSAGE, $message); } } if (preg_match('#\b(' . str_replace('\*', '\w*?', phpbb_preg_quote($row['spam_word'], '#')) . ')\b#i', $userdata['user_sig'])) { $message = sprintf($spam_config['error_message_sig'], $row['spam_word']); message_die(GENERAL_MESSAGE, $message); } } while ($row = $db->sql_fetchrow($result)); } } } // // Let's define who gets to do what. // if ($spam_config['enable_spam_words']) { if ($spam_config['allow_admin'] && $userdata['user_level'] == ADMIN) { return; } else if($spam_config['allow_moderator'] && $userdata['user_level'] == MOD) { return; } else if($spam_config['allow_reg'] && $userdata['session_logged_in']) { return; } else if($userdata['session_logged_in'] && $spam_config['allow_user_posts'] < $userdata['user_posts'] && $spam_config['allow_user_posts'] != 0) { return; } else { check_spam($message, $subject, $signature); } } ?>