≪ ie8/sleipnirでtextareaの勝手にスクロールバグ | TOP | XML宣言でParse error: syntax error, unexpected T_STRINGがでる ≫
2010年02月18日
phpbb3での英文スパム、英語スパムの投稿が増えてきましたので排除するモジュールを実装してみました。
mFactoryさんで紹介されていましたので早速取り掛かりました!
1.Lithium Studiosから『Anti-Spam ACP』のリンクよりAnti-Spam ACP 1.0.2.zipをダウンロードして解凍します。
2.解凍したらphpbb3のルートフォルダ以下にffftpを使ってアップロードします。
解凍したAnti-Spam ACP 1.0.2フォルダに『root』フォルダがありますのでphpbb3のルートフォルダ以下同じフォルダにアップロードします。
3.phpbb3ルートフォルダ/includes/ucp/ucp_pm_compose.php に追記
// Store message, sync counters
を探しその前の行に
// START Anti-Spam ACP
を追記して上書きアップロード
if ($config['asacp_spam_words_pm_action'] && antispam::spam_words(array($subject, $message_parser->message)))
{
$user->add_lang('mods/asacp');
antispam::add_log('LOG_SPAM_PM_DENIED', array($subject, $message_parser->message));
$error[] = $user->lang['SPAM_DENIED'];
}
if (!sizeof($error) && $submit && $user->data['user_flagged'])
{
antispam::add_log('LOG_SENT_PM', array('pm' => $address_list), 'flag');
}
// END Anti-Spam ACP
4.phpbb3ルートフォルダ/includes/ucp/ucp_profile.php に追記
if (!check_form_key('ucp_profile_info'))
を探しその後ろの行に
{
$error[] = 'FORM_INVALID';
}
// START Anti-Spam ACP
を追記
antispam::ucp_profile($data, $error);
// END Anti-Spam ACP
同じく
// Get additional profile fields and assign them to the template block var 'profile_fields'
を探しその前の行に
// START Anti-Spam ACP
を追記
antispam::ucp_profile_display();
// END Anti-Spam ACP
同じく
add_form_key('ucp_sig');
を探しその後ろの行に
// START Anti-Spam ACP
を追記し上書きアップロード
antispam::ucp_signature($signature, $error);
// END Anti-Spam ACP
5.phpbb3ルートフォルダ/includes/ucp/ucp_register.php に追記
include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
を探しその後ろの行に
// START Anti-Spam ACP
を追記
antispam::ucp_preregister();
// END Anti-Spam ACP
同じく
if (!sizeof($error))
を探しその前の行に
{
$server_url = generate_board_url();
// START Anti-Spam ACP
を追記
antispam::ucp_register($data, $error);
// END Anti-Spam ACP
同じく
// Register user...
を探しその後ろの行に
$user_id = user_add($user_row, $cp_data); // START Anti-Spam ACP
を追記し上書きアップロード
antispam::ucp_postregister($user_id, $user_row);
// END Anti-Spam ACP
6.phpbb3ルートフォルダ/includes/functions.php に追記
// application/xhtml+xml not used because of IE
を探しその前の行に
// START Anti-Spam ACP
を追記し上書きアップロード
antispam::page_header();
// END Anti-Spam ACP
※この状態ではフォーラムはエラーが出てるかもしれませんが気にせず続けます。
7.phpbb3ルートフォルダ/common.php に追記
最終行の
?>
の前の行に
// START Anti-Spam ACP
を追記し上書きアップロード
require($phpbb_root_path . 'antispam/asacp.' . $phpEx);
// END Anti-Spam ACP
8.phpbb3ルートフォルダ/posting.php に追記
// Store message, sync counters
を探しその前の行に
// START Anti-Spam ACP
$sc_title = (empty($post_data['topic_title'])) ? $post_data['post_subject'] : $post_data['topic_title'];
$asacp_is_spam = false;
if ($config['asacp_spam_words_posting_action'] && antispam::spam_words(array($sc_title, $message_parser->message)))
{
switch ($config['asacp_spam_words_posting_action'])
{
case 1 :
$user->add_lang('mods/asacp');
antispam::add_log('LOG_SPAM_POST_DENIED', array($sc_title, $message_parser->message));
$error[] = $user->lang['SPAM_DENIED'];
break;
case 2 :
$asacp_is_spam = true;
break;
}
}
// END Anti-Spam ACPを追記
同じく
$redirect_url = submit_post($mode, $post_data['post_subject'], $post_data['username'], $post_data['topic_type'], $poll, $data, $update_message, ($update_message || $update_subject) ? true : false);
を探し前後に追記するのですが、まず前の行に
// START Anti-Spam ACP
を追記、そして後ろの行に
if ($asacp_is_spam)
{
$data['force_approved_state'] = false;
}
// END Anti-Spam ACP
// START Anti-Spam ACP
を追記し上書きアップロード
antispam::submit_post($mode, $data['post_id']);
// END Anti-Spam ACP
9.phpbb3ルートフォルダ/viewtopic.php に追記
'search' => ($auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx",
を探しその後ろの行に
// START Anti-Spam ACP
を追記
'user_flagged' => $row['user_flagged'] ? true : false,
// END Anti-Spam ACP
同じく
$template->assign_block_vars('postrow', $postrow);
を探しその後ろの行に
// START Anti-Spam ACP
を追記し上書きアップロード
antispam::flagged_output($poster_id, $user_cache[$poster_id], 'postrow.custom_fields', $row['post_id']);
// END Anti-Spam ACP
10.日本語ファイルに改造
phpbb3ルートフォルダ/language/en/mods/asacp.phpをいったんダウンロードし、
'SPAM_DENIED' => 'This message was flagged as spam and has been denied.',
を探し
'SPAM_DENIED' => 'このメッセージは、スパムとして判断された為に拒否されました。',
に書き換えてphpbb3ルートフォルダ/language/ja/mods/asacp.phpにアップロードします。
11.phpbb3ルートフォルダ/antispam/asacp.php の666行目
//public static function spam_words($data, $post_count = false)
を探しその下に以下を追記
// Japanese word check
public static function spam_words_jpn($data, $post_count = false, $flag_limit = false)
{
global $cache, $config, $db, $user;
if (!$config['asacp_enable'] || !$config['asacp_spam_words_enable'])
{
return false;
}
// Jpanese word chek
$messages = (!is_array($data)) ? array($data) : $data;
$ret = false;
foreach ($messages as $text)
{
if (mb_convert_kana($text, "C") == $text)
{
if (mb_convert_kana($text, "c") == $text)
{
$ret = true;
}
}
}
return $ret;
}
12.phpbb3ルートフォルダ/posting.php から
// START Anti-Spam ACP
$sc_title = (empty($post_data['topic_title'])) ? $post_data['post_subject'] : $post_data['topic_title'];
$asacp_is_spam = false;
if ($config['asacp_spam_words_posting_action'] && antispam::spam_words(array($sc_title, $message_parser->message)))
{
switch ($config['asacp_spam_words_posting_action'])
{
case 1 :
$user->add_lang('mods/asacp');
antispam::add_log('LOG_SPAM_POST_DENIED', array($sc_title, $message_parser->message));
$error[] = $user->lang['SPAM_DENIED'];
break;
case 2 :
$asacp_is_spam = true;
break;
}
}
// END Anti-Spam ACPを探し下に以下を追記
// START Anti-Spam ACP
$sc_title = (empty($post_data['topic_title'])) ? $post_data['post_subject'] : $post_data['topic_title'];
$asacp_is_spam = false;
if ($config['asacp_spam_words_posting_action'] && antispam::spam_words_jpn(array($message_parser->message)))
{
switch ($config['asacp_spam_words_posting_action'])
{
case 1 :
$user->add_lang('mods/asacp');
antispam::add_log('LOG_SPAM_POST_DENIED', array($sc_title, $message_parser->message));
$error[] = $user->lang['SPAM_DENIED'];
break;
case 2 :
$asacp_is_spam = true;
break;
}
}
// END Anti-Spam ACP
13.スタイルの編集(クレジット部分)
管理画面のスタイルの使用しているテンプレートセットからoverall_footer.htmlを選択しまずテキストファイルなどでバックアップを取っておきます。
<!-- IF U_ACP --><br /><strong><a href="{U_ACP}">{L_ACP}</a></strong><!-- ENDIF -->
を探しその前の行に
<br />{L_ASACP_CREDITS}
を追記し編集。
同じくoverall_header.htmlもバックアップをとった後
を探しその後ろの行に
<!-- IF U_RESTORE_PERMISSIONS --> •
<a href="{U_RESTORE_PERMISSIONS}">{L_RESTORE_PERMISSIONS}</a>
<!-- ENDIF -->
<!-- IF U_USER_FLAG_NEW --> •
<a href="{U_USER_FLAG_NEW}" style="color: red; font-weight: bold;">{L_USER_FLAG_NEW}</a>
<!-- ENDIF -->
を追記し編集。
※管理画面から触らない場合は、
phpbb3ルートフォルダ/styles/prosilver/template/overall_footer.html
phpbb3ルートフォルダ/styles/prosilver/template/overall_header.html
での上書きアップロードでも可能ですが、スタイルを独自に触っていると上書きされてしまうのでどちらにせよバックアップを取ってからしましょう。
14.スパムの単語の登録は管理画面の『.MOD』タブからメニュー[ASACP_SETTINGS] の [ASACP_SPAM_WORDS] にある項目 "Enable Spam Words"を"はい"にし[ASACP_SPAM_WORDS] メニューの "Add Word"から可能です。
単語のテストはしていませんが英文のみの投稿は反映されなかったのでスパム対策は成功ですね♪
トラックバック
このエントリーのトラックバックURL:
http://open.free-creator.com/mt-tb.cgi/199