Throws SPAM Away - Version 2.2

Version Description

URL'http'

OFF

Download this release

Release Info

Developer tsato
Plugin Icon wp plugin Throws SPAM Away
Version 2.2
Comparing to
See all releases

Code changes from version 2.1.1 to 2.2

Files changed (3) hide show
  1. readme.txt +20 -1
  2. throws_spam_away.php +147 -38
  3. uninstall.php +4 -0
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://gti.jp/
4
  Tags: comments, spam
5
  Requires at least: 3.1
6
  Tested up to: 3.5.1
7
- Stable tag: 2.1.1
8
 
9
  コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
10
 
@@ -22,11 +22,18 @@ Stable tag: 2.1.1
22
 
23
  日本語が一切入っていないコメントでも「NGキーワード」だけ設定したい場合を想定し
24
  日本語が入っていないと許可しない設定を「オン・オフ」出来るようになっています。
 
 
25
  以前にスパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
26
  IPアドレスの指定は「,(半角カンマ)」区切りで複数入力できますが、「192.168.1.0/24」のようにIPアドレスの範囲指定も可能です。
27
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
28
   [192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否対象とします。
29
 
 
 
 
 
 
30
  ・バージョン2.1.1 一部レンタルサーバー等の設定によってコメント投稿後エラーまたは白画面になってしまう不具合を修正
31
   ※確認したレンタルサーバー(さくらレンタルサーバー)※コメント欄に独自修正を行うような特殊な条件により発生する模様
32
 
@@ -69,6 +76,18 @@ e.g.
69
  == Screenshots ==
70
 
71
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
72
  = 2.1 =
73
  IPアドレスの指定に「192.168.1.0/24」のようにIPアドレス範囲指定出来るようにしました。
74
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
4
  Tags: comments, spam
5
  Requires at least: 3.1
6
  Tested up to: 3.5.1
7
+ Stable tag: 2.2
8
 
9
  コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
10
 
22
 
23
  日本語が一切入っていないコメントでも「NGキーワード」だけ設定したい場合を想定し
24
  日本語が入っていないと許可しない設定を「オン・オフ」出来るようになっています。
25
+ リンクと思わしき'http'を含んだ文字列が許容数(初期設定は3つ)を超えて包含される場合にエラーとします。
26
+
27
  以前にスパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
28
  IPアドレスの指定は「,(半角カンマ)」区切りで複数入力できますが、「192.168.1.0/24」のようにIPアドレスの範囲指定も可能です。
29
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
30
   [192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否対象とします。
31
 
32
+ ・バージョン2.2 'http'を許容数(初期設定 3)を超えて包含する場合にエラーとする機能を付けました。
33
+  導入後すぐに機能しはじめます。制限数の増減も行えます。
34
+  <strong>(注意!)不要な方は設定の変更でこの機能をOFFにしてください</strong>
35
+  ※インストールしただけで最大限活用できるように初期設定値を設定いたしました。日本語スパム投稿(おもにリンクを多数掲載するもの)に対抗するための追加機能です。ご理解のほど、よろしくお願いします。
36
+
37
  ・バージョン2.1.1 一部レンタルサーバー等の設定によってコメント投稿後エラーまたは白画面になってしまう不具合を修正
38
   ※確認したレンタルサーバー(さくらレンタルサーバー)※コメント欄に独自修正を行うような特殊な条件により発生する模様
39
 
76
  == Screenshots ==
77
 
78
  == Changelog ==
79
+ = 2.2 =
80
+ URL文字列(単純に'http'文字列)が許容数(初期設定3つまで)を超えて包含される場合エラーとする機能を追加
81
+ 制限するかどうかと許容数の設定及びエラー文言を設定可能。
82
+
83
+ <strong>(注意!)導入後すぐに機能しはじめます。不要な方は設定の変更でこの機能をOFFにしてください</strong>
84
+  ※インストールしただけで最大限活用できるように初期設定値を設定いたしました。日本語スパム投稿(おもにリンクを多数掲載するもの)に対抗するための追加機能です。ご理解のほど、よろしくお願いします。
85
+
86
+ = 2.1.1 =
87
+ 一部レンタルサーバー等の設定によってコメント投稿後エラーまたは白画面になってしまう不具合を修正
88
+  ※確認したレンタルサーバー(さくらレンタルサーバー)※コメント欄に独自修正を行うような特殊な条件により発生する模様
89
+  これまで「comment_form」にて処理していた動作を「comment_form_after」にて処理するよう変更しました。
90
+
91
  = 2.1 =
92
  IPアドレスの指定に「192.168.1.0/24」のようにIPアドレス範囲指定出来るようにしました。
93
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
throws_spam_away.php CHANGED
@@ -4,23 +4,33 @@
4
  Plugin URI: http://gti.jp/tsa/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
- Version: 2.1.1
8
  Author URI: http://gti.jp/
9
  */
10
 
11
  /** 初期設定 */
12
  // エラー種別
13
  $error_type = "";
 
 
14
  // コメント欄下に表示される注意文言(初期設定)
15
  $default_caution_msg = '日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)';
16
  // エラー時に表示されるエラー文言(初期設定)
17
  $default_error_msg = '日本語を規定文字数以上含まない記事は投稿できませんよ。';
 
 
18
  // キーワードNGエラー時に表示されるエラー文言(初期設定)
19
  $default_ng_key_error_msg = 'NGキーワードが含まれているため投稿できません。';
20
  // 必須キーワードが含まれないエラー文言(初期設定)
21
  $default_must_key_error_msg = "必須キーワードが含まれていないため投稿できません。";
22
  // ブロックIPアドレスからの投稿の場合に表示されるエラー文言(初期設定)
23
  $default_block_ip_address_error_msg = "";
 
 
 
 
 
 
24
  /** オプションキー */
25
  // 日本語が存在しない時エラーとするかフラグ [tsa_on_flg] 1:する 2:しない
26
  // 日本語文字列含有数 (入力値以下ならエラー) [tsa_japanese_string_min_count] 数値型
@@ -45,6 +55,10 @@ $default_block_ip_address_error_msg = "";
45
  // [tsa_block_ip_addresses] 文字列型
46
  // ブロック対象IPアドレスからの投稿時に表示される文言(元の記事に戻ってくる時間の間のみ表示)
47
  // [tsa_block_ip_address_error_message] 文字列型
 
 
 
 
48
 
49
  /** プロセス */
50
  $newThrowsSpamAway = new ThrowsSpamAway;
@@ -63,7 +77,7 @@ add_action('pre_comment_on_post', array(&$newThrowsSpamAway, "comment_post"), 1)
63
  */
64
  class ThrowsSpamAway {
65
  // version
66
- var $version = '2.1.1';
67
 
68
  public function __construct() {
69
  add_action( 'admin_menu', array( $this, 'admin_menu' ) );
@@ -82,9 +96,12 @@ class ThrowsSpamAway {
82
  function comment_post($id) {
83
  global $newThrowsSpamAway;
84
  global $user_ID;
 
85
  global $default_error_msg;
86
  global $default_ng_key_error_msg;
87
  global $default_must_key_error_msg;
 
 
88
  global $error_type;
89
 
90
  if( $user_ID ) {
@@ -104,23 +121,22 @@ class ThrowsSpamAway {
104
  $error_msg = "";
105
  switch ($error_type) {
106
  case "must_word" :
107
- $error_msg = (get_option('tsa_must_key_error_message') != NULL ?
108
- get_option('tsa_must_key_error_message') : $default_must_key_error_msg);
109
  break;
110
  case "ng_word" :
111
- $error_msg = (get_option('tsa_ng_key_error_message') != NULL ?
112
- get_option('tsa_ng_key_error_message') : $default_ng_key_error_msg);
113
  break;
114
  case "block_ip" :
115
- $error_msg = (get_option('tsa_block_ip_address_error_message') != NULL ?
116
- get_option('tsa_block_ip_address_error_message') : $default_block_ip_address_error_msg);
 
 
117
  break;
118
  default :
119
- $error_msg = (get_option('tsa_error_message') != NULL ?
120
- get_option('tsa_error_message') : $default_error_msg);
121
  }
122
  // 元画面へ戻るタイム計算
123
- $back_time = get_option('tsa_back_second')!=NULL?(((int)get_option('tsa_back_second')) * 1000):0;
124
  // タイム値が0なら元画面へそのままリダイレクト
125
  if ($back_time == 0) {
126
  header("Location:".$_SERVER['HTTP_REFERER']);
@@ -153,7 +169,7 @@ class ThrowsSpamAway {
153
  }
154
  }
155
  // IP制御 任意のIPアドレスをあればブロックする
156
- $block_ip_addresses = get_option('tsa_block_ip_addresses');
157
  if ($block_ip_addresses != NULL && $block_ip_addresses != "") {
158
  $ip_list = mb_split(",", $block_ip_addresses);
159
  foreach ($ip_list as $ip) {
@@ -202,6 +218,9 @@ class ThrowsSpamAway {
202
  function validation($comment) {
203
  global $newThrowsSpamAway;
204
  global $error_type;
 
 
 
205
  // まずはシングルバイトだけならエラー
206
  if (get_option('tsa_on_flg') != "2" && strlen(bin2hex($comment)) / 2 == mb_strlen($comment)) {
207
  return FALSE;
@@ -218,8 +237,7 @@ class ThrowsSpamAway {
218
  if (preg_match('/[ァ-ヶー]+/u', $it)){ $count_flg += 1; }
219
  if (preg_match('/[ぁ-ん]+/u', $it)){ $count_flg += 1; }
220
  }
221
- $flg = ((get_option('tsa_japanese_string_min_count')!= NULL?
222
- intval(get_option('tsa_japanese_string_min_count')):0) < $count_flg);
223
  if ($flg == FALSE) {
224
  return FALSE;
225
  }
@@ -238,7 +256,7 @@ class ThrowsSpamAway {
238
  }
239
  // キーワードチェック(ブラックリスト)を抜けたら必須キーワードチェックを行う
240
  // キーワード文字列群 ※ブラックリストと重複するものはブラックリストのほうが優先です。
241
- $must_keywords = get_option('tsa_must_keywords');
242
  if ($must_keywords != NULL && $must_keywords != "") {
243
  $keyword_list = mb_split(",", $must_keywords);
244
  foreach ($keyword_list as $key) {
@@ -251,6 +269,17 @@ class ThrowsSpamAway {
251
  }
252
  }
253
  }
 
 
 
 
 
 
 
 
 
 
 
254
 
255
  return TRUE;
256
  }
@@ -276,14 +305,53 @@ class ThrowsSpamAway {
276
  */
277
  function options_page() {
278
  global $wpdb; // WordPress DBアクセス
 
279
  global $default_caution_msg;
 
280
  global $default_error_msg;
281
  global $default_ng_key_error_msg;
282
  global $default_must_key_error_msg;
 
 
 
283
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
  <div class="wrap">
285
  <h2>Throws SPAM Away. Setting</h2>
286
  <form method="post" action="options.php">
 
287
  <?php wp_nonce_field('update-options'); ?>
288
  <table class="form-table">
289
  <tr valign="top">
@@ -291,7 +359,7 @@ class ThrowsSpamAway {
291
  <td><?php
292
  $chk_1 = "";
293
  $chk_2 = "";
294
- if (get_option('tsa_on_flg') == "2") {
295
  $chk_2 = " checked=\"checked\"";
296
  } else {
297
  $chk_1 = " checked=\"checked\"";
@@ -304,44 +372,76 @@ class ThrowsSpamAway {
304
  <tr valign="top">
305
  <th scope="row">日本語文字列含有数<br />(この文字列に達していない場合無視対象となります。)</th>
306
  <td><input type="text" name="tsa_japanese_string_min_count"
307
- value="<?php echo get_option('tsa_japanese_string_min_count'); ?>" />
308
  </td>
309
  </tr>
310
  <tr valign="top">
311
  <th scope="row">元の記事に戻ってくる時間<br />(秒)※0の場合エラー画面表示しません。</th>
312
  <td><input type="text" name="tsa_back_second"
313
- value="<?php echo get_option('tsa_back_second');?>" /></td>
314
  </tr>
315
  <tr valign="top">
316
  <th scope="row">コメント欄の下に表示される注意文言</th>
317
- <td><input type="text" name="tsa_caution_message" size="100"
318
- value="<?php echo get_option('tsa_caution_message');?>" /><br />(初期設定:<?php echo $default_caution_msg;?>)</td>
319
  </tr>
320
  <tr valign="top">
321
  <th scope="row">日本語文字列規定値未満エラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
322
- <td><input type="text" name="tsa_error_message" size="100"
323
- value="<?php echo get_option('tsa_error_message');?>" /><br />(初期設定:<?php echo $default_error_msg;?>)</td>
324
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
325
  <tr valign="top">
326
  <th scope="row">その他NGキーワード<br />(日本語でも英語(その他)でもNGとしたいキーワードを半角カンマ区切りで複数設定できます。<br />挙動は同じです。NGキーワードだけでも使用できます。)</th>
327
- <td><input type="text" name="tsa_ng_keywords" size="100"
328
- value="<?php echo get_option('tsa_ng_keywords');?>" /></td>
329
  </tr>
330
  <tr valign="top">
331
  <th scope="row">NGキーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
332
- <td><input type="text" name="tsa_ng_key_error_message" size="100"
333
- value="<?php echo get_option('tsa_ng_key_error_message');?>" /><br />(初期設定:<?php echo $default_ng_key_error_msg;?>)</td>
334
  </tr>
335
  <tr valign="top">
336
  <th scope="row">その上での必須キーワード<br />(日本語でも英語(その他)でも必須としたいキーワードを半角カンマ区切りで複数設定できます。<br />指定文字列を含まない場合はエラーとなります。※複数の方が厳しくなります。<br />必須キーワードだけでも使用できます。)</th>
337
- <td><input type="text" name="tsa_must_keywords" size="100"
338
- value="<?php echo get_option('tsa_must_keywords');?>" /></td>
339
  </tr>
340
  <tr valign="top">
341
  <th scope="row">必須キーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
342
- <td><input type="text" name="tsa_must_key_error_message" size="100"
343
- value="<?php echo get_option('tsa_must_key_error_message');?>" /><br />(初期設定:<?php echo $default_must_key_error_msg;?>)</td>
344
  </tr>
 
 
 
345
  <tr valign="top">
346
  <th scope="row">上記設定をトラックバック記事にも採用する</th>
347
  <td><?php
@@ -372,11 +472,14 @@ class ThrowsSpamAway {
372
  <label><input type="radio" name="tsa_tb_url_flg" value="2"<?php echo $chk_2;?>/>&nbsp;しない</label>
373
  </td>
374
  </tr>
 
 
 
375
  <tr valign="top">
376
  <th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
377
  <td><?php
378
  $chk = "";
379
- if (get_option('tsa_ip_block_from_spam_chk_flg') == "1") {
380
  $chk = "checked=\"checked\"";
381
  } else {
382
  $chk = "";
@@ -387,26 +490,32 @@ class ThrowsSpamAway {
387
  // wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
388
  $results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
389
  ?>現在「spam」フラグが付いているIPアドレス:<?php
 
390
  foreach ($results as $item) {
 
391
  // ブロックしたいIP
392
- ?><b><?php echo $item->comment_author_IP; ?></b>&nbsp;<?php
 
 
 
 
393
  }
394
- ?>
395
  </td>
396
  </tr>
397
  <tr valign="top">
398
  <th scope="row">任意のIPアドレスからの投稿も無視したい場合、対象となるIPアドレスを記述してください。<br />カンマ区切りで複数設定できます。(半角数字とドットのみ)</th>
399
- <td><input type="text" name="tsa_block_ip_addresses" size="100"
400
- value="<?php echo get_option('tsa_block_ip_addresses');?>" /></td>
401
  </tr>
402
  <tr valign="top">
403
  <th scope="row">ブロック対象のIPアドレスからの投稿時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
404
- <td><input type="text" name="tsa_block_ip_address_error_message" size="100"
405
- value="<?php echo get_option('tsa_block_ip_address_error_message');?>" /><br />(初期設定:<?php echo $default_block_ip_address_error_msg; ?>)</td>
406
  </table>
407
  <input type="hidden" name="action" value="update" /> <input
408
  type="hidden" name="page_options"
409
- value="tsa_on_flg,tsa_japanese_string_min_count,tsa_back_second,tsa_caution_message,tsa_error_message,tsa_ng_keywords,tsa_ng_key_error_message,tsa_must_keywords,tsa_must_key_error_message,tsa_tb_on_flg,tsa_tb_url_flg,tsa_block_ip_addresses,tsa_ip_block_from_spam_chk_flg,tsa_block_ip_address_error_message" />
410
  <p class="submit">
411
  <input type="submit" class="button-primary"
412
  value="<?php _e('Save Changes') ?>" />
4
  Plugin URI: http://gti.jp/tsa/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
+ Version: 2.2
8
  Author URI: http://gti.jp/
9
  */
10
 
11
  /** 初期設定 */
12
  // エラー種別
13
  $error_type = "";
14
+ // 日本語文字最小含有数
15
+ $default_japanese_string_min_count = 3;
16
  // コメント欄下に表示される注意文言(初期設定)
17
  $default_caution_msg = '日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)';
18
  // エラー時に表示されるエラー文言(初期設定)
19
  $default_error_msg = '日本語を規定文字数以上含まない記事は投稿できませんよ。';
20
+ // 元画面に戻る時間
21
+ $default_back_second = 0;
22
  // キーワードNGエラー時に表示されるエラー文言(初期設定)
23
  $default_ng_key_error_msg = 'NGキーワードが含まれているため投稿できません。';
24
  // 必須キーワードが含まれないエラー文言(初期設定)
25
  $default_must_key_error_msg = "必須キーワードが含まれていないため投稿できません。";
26
  // ブロックIPアドレスからの投稿の場合に表示されるエラー文言(初期設定)
27
  $default_block_ip_address_error_msg = "";
28
+ // URL数制限値オーバーのエラー文言(初期設定)
29
+ $default_url_count_over_error_msg = "";
30
+ // URL数の制限をするか
31
+ $default_url_count_check_flg = "1"; // 1:する
32
+ // URL数の制限数
33
+ $default_ok_url_count = 3; // 3つまで許容
34
  /** オプションキー */
35
  // 日本語が存在しない時エラーとするかフラグ [tsa_on_flg] 1:する 2:しない
36
  // 日本語文字列含有数 (入力値以下ならエラー) [tsa_japanese_string_min_count] 数値型
55
  // [tsa_block_ip_addresses] 文字列型
56
  // ブロック対象IPアドレスからの投稿時に表示される文言(元の記事に戻ってくる時間の間のみ表示)
57
  // [tsa_block_ip_address_error_message] 文字列型
58
+ // URL(単純に'http'文字列のチェックのみ)文字列数を制限するか [tsa_url_count_on_flg] 1:する その他:しない
59
+ // URL(単純に'http'文字列のチェックのみ)文字列の許容数 [tsa_ok_url_count] 数値型
60
+ // URL(単純に'http'文字列のチェックのみ)文字列許容数オーバー時に表示される文言(元の記事に戻ってくる時間の間のみ表示)
61
+ // [tsa_url_count_over_error_message] 文字列型
62
 
63
  /** プロセス */
64
  $newThrowsSpamAway = new ThrowsSpamAway;
77
  */
78
  class ThrowsSpamAway {
79
  // version
80
+ var $version = '2.2';
81
 
82
  public function __construct() {
83
  add_action( 'admin_menu', array( $this, 'admin_menu' ) );
96
  function comment_post($id) {
97
  global $newThrowsSpamAway;
98
  global $user_ID;
99
+ global $default_back_second;
100
  global $default_error_msg;
101
  global $default_ng_key_error_msg;
102
  global $default_must_key_error_msg;
103
+ global $default_block_ip_address_error_msg;
104
+ global $default_url_count_over_error_msg;
105
  global $error_type;
106
 
107
  if( $user_ID ) {
121
  $error_msg = "";
122
  switch ($error_type) {
123
  case "must_word" :
124
+ $error_msg = get_option('tsa_must_key_error_message', $default_must_key_error_msg);
 
125
  break;
126
  case "ng_word" :
127
+ $error_msg = get_option('tsa_ng_key_error_message', $default_ng_key_error_msg);
 
128
  break;
129
  case "block_ip" :
130
+ $error_msg = get_option('tsa_block_ip_address_error_message', $default_block_ip_address_error_msg);
131
+ break;
132
+ case "url_count_over" :
133
+ $error_msg = get_option('tsa_url_count_over_error_message', $default_url_count_over_error_msg);
134
  break;
135
  default :
136
+ $error_msg = get_option('tsa_error_message', $default_error_msg);
 
137
  }
138
  // 元画面へ戻るタイム計算
139
+ $back_time = ((int)get_option('tsa_back_second', $default_back_second)) * 1000;
140
  // タイム値が0なら元画面へそのままリダイレクト
141
  if ($back_time == 0) {
142
  header("Location:".$_SERVER['HTTP_REFERER']);
169
  }
170
  }
171
  // IP制御 任意のIPアドレスをあればブロックする
172
+ $block_ip_addresses = get_option('tsa_block_ip_addresses', "");
173
  if ($block_ip_addresses != NULL && $block_ip_addresses != "") {
174
  $ip_list = mb_split(",", $block_ip_addresses);
175
  foreach ($ip_list as $ip) {
218
  function validation($comment) {
219
  global $newThrowsSpamAway;
220
  global $error_type;
221
+ global $default_url_count_check_flg; // URL数を制御するか初期設定値
222
+ global $default_ok_url_count; // 制限する場合のURL数初期設定値
223
+ global $default_japanese_string_min_count; // 日本語文字最小含有数
224
  // まずはシングルバイトだけならエラー
225
  if (get_option('tsa_on_flg') != "2" && strlen(bin2hex($comment)) / 2 == mb_strlen($comment)) {
226
  return FALSE;
237
  if (preg_match('/[ァ-ヶー]+/u', $it)){ $count_flg += 1; }
238
  if (preg_match('/[ぁ-ん]+/u', $it)){ $count_flg += 1; }
239
  }
240
+ $flg = (intval(get_option('tsa_japanese_string_min_count', $default_japanese_string_min_count)) < $count_flg);
 
241
  if ($flg == FALSE) {
242
  return FALSE;
243
  }
256
  }
257
  // キーワードチェック(ブラックリスト)を抜けたら必須キーワードチェックを行う
258
  // キーワード文字列群 ※ブラックリストと重複するものはブラックリストのほうが優先です。
259
+ $must_keywords = get_option('tsa_must_keywords', "");
260
  if ($must_keywords != NULL && $must_keywords != "") {
261
  $keyword_list = mb_split(",", $must_keywords);
262
  foreach ($keyword_list as $key) {
269
  }
270
  }
271
  }
272
+ // URL数チェック
273
+ $url_count_check = get_option('tsa_url_count_on_flg', $default_url_count_check_flg);
274
+ // 許容URL数設定値
275
+ $ok_url_count = intval(get_option('tsa_ok_url_count', $default_ok_url_count)); // デフォルト値3(3つまで許容)
276
+ if ( $url_count_check != "2" ) {
277
+ if ( substr_count( strtolower( $comment ), 'http') > $ok_url_count) {
278
+ // URL文字列(httpの数)が多いエラー
279
+ $error_type = "url_count_over";
280
+ return FALSE;
281
+ }
282
+ }
283
 
284
  return TRUE;
285
  }
305
  */
306
  function options_page() {
307
  global $wpdb; // WordPress DBアクセス
308
+ global $default_japanese_string_min_count;
309
  global $default_caution_msg;
310
+ global $default_back_second;
311
  global $default_error_msg;
312
  global $default_ng_key_error_msg;
313
  global $default_must_key_error_msg;
314
+ global $default_block_ip_address_error_msg;
315
+ global $default_url_count_over_error_msg;
316
+ global $default_ok_url_count;
317
  ?>
318
+ <style>
319
+ table.form-table { }
320
+ table.form-table th {
321
+ width : 200px;
322
+ }
323
+ </style>
324
+ <script type="text/Javascript">
325
+ // 配列重複チェック
326
+ var isDuplicate = function(ary, str) {
327
+ for (i = 0; i < ary.length; i++) {
328
+ if(str == ary[i]) {
329
+ return true;
330
+ }
331
+ }
332
+ return false;
333
+ };
334
+ function addIpAddresses(newAddressStr) {
335
+ var str = document.getElementById('tsa_block_ip_addresses').value;
336
+ if (str.length > 0) { str += ","; }
337
+ str += newAddressStr;
338
+ var ary = str.split(",");
339
+ var newAry = new Array;
340
+ var ret = "";
341
+
342
+ for( var i=0 ; i < ary.length ; i++ ) {
343
+ if( !isDuplicate(newAry, ary[i]) ){
344
+ newAry.push(ary[i]);
345
+ }
346
+ }
347
+ document.getElementById('tsa_block_ip_addresses').value = newAry.join(',');
348
+ return false;
349
+ }
350
+ </script>
351
  <div class="wrap">
352
  <h2>Throws SPAM Away. Setting</h2>
353
  <form method="post" action="options.php">
354
+ <h3>スパム対策機能 設定</h3>
355
  <?php wp_nonce_field('update-options'); ?>
356
  <table class="form-table">
357
  <tr valign="top">
359
  <td><?php
360
  $chk_1 = "";
361
  $chk_2 = "";
362
+ if (get_option('tsa_on_flg', "1") == "2") {
363
  $chk_2 = " checked=\"checked\"";
364
  } else {
365
  $chk_1 = " checked=\"checked\"";
372
  <tr valign="top">
373
  <th scope="row">日本語文字列含有数<br />(この文字列に達していない場合無視対象となります。)</th>
374
  <td><input type="text" name="tsa_japanese_string_min_count"
375
+ value="<?php echo get_option('tsa_japanese_string_min_count', $default_japanese_string_min_count); ?>" />
376
  </td>
377
  </tr>
378
  <tr valign="top">
379
  <th scope="row">元の記事に戻ってくる時間<br />(秒)※0の場合エラー画面表示しません。</th>
380
  <td><input type="text" name="tsa_back_second"
381
+ value="<?php echo get_option('tsa_back_second', $default_back_second);?>" /></td>
382
  </tr>
383
  <tr valign="top">
384
  <th scope="row">コメント欄の下に表示される注意文言</th>
385
+ <td><input type="text" name="tsa_caution_message" size="80"
386
+ value="<?php echo get_option('tsa_caution_message', $default_caution_msg);?>" /><br />(初期設定:<?php echo $default_caution_msg;?>)</td>
387
  </tr>
388
  <tr valign="top">
389
  <th scope="row">日本語文字列規定値未満エラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
390
+ <td><input type="text" name="tsa_error_message" size="80"
391
+ value="<?php echo get_option('tsa_error_message', $default_error_msg);?>" /><br />(初期設定:<?php echo $default_error_msg;?>)</td>
392
  </tr>
393
+ </table>
394
+ <h3>URL文字列除外 設定</h3>
395
+ <table class="form-table">
396
+ <tr valign="top">
397
+ <th scope="row">URLらしき文字列が混入している場合エラーとするか</th>
398
+ <td><?php
399
+ $chk_1 = "";
400
+ $chk_2 = "";
401
+ if (get_option('tsa_url_count_on_flg', "1") == "2") {
402
+ $chk_2 = " checked=\"checked\"";
403
+ } else {
404
+ $chk_1 = " checked=\"checked\"";
405
+ }
406
+ ?>
407
+ <label><input type="radio" name="tsa_url_count_on_flg" value="1"<?php echo $chk_1;?>/>&nbsp;する</label>&nbsp;
408
+ <label><input type="radio" name="tsa_url_count_on_flg" value="2"<?php echo $chk_2;?>/>&nbsp;しない</label><br />
409
+ する場合の制限数(入力数値まで許容):<input type="text" name="tsa_ok_url_count" size="2"
410
+ value="<?php echo get_option('tsa_ok_url_count', $default_ok_url_count);?>" />
411
+ </td>
412
+ </tr>
413
+ <tr valign="top">
414
+ <th scope="row">URLらしき文字列混入数オーバーエラー時に表示される文言
415
+ (元の記事に戻ってくる時間の間のみ表示)</th>
416
+ <td><input type="text" name="tsa_url_count_over_error_message" size="80"
417
+ value="<?php echo get_option('tsa_url_count_over_error_message', $default_url_count_over_error_msg);?>" /><br />(初期設定:<?php echo $default_url_count_over_error_msg;?>)</td>
418
+ </tr>
419
+ </table>
420
+ <h3>NGキーワード / 必須キーワード 制御設定</h3>
421
+ <table class="form-table">
422
  <tr valign="top">
423
  <th scope="row">その他NGキーワード<br />(日本語でも英語(その他)でもNGとしたいキーワードを半角カンマ区切りで複数設定できます。<br />挙動は同じです。NGキーワードだけでも使用できます。)</th>
424
+ <td><input type="text" name="tsa_ng_keywords" size="80"
425
+ value="<?php echo get_option('tsa_ng_keywords', "");?>" /></td>
426
  </tr>
427
  <tr valign="top">
428
  <th scope="row">NGキーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
429
+ <td><input type="text" name="tsa_ng_key_error_message" size="80"
430
+ value="<?php echo get_option('tsa_ng_key_error_message', $default_ng_key_error_msg);?>" /><br />(初期設定:<?php echo $default_ng_key_error_msg;?>)</td>
431
  </tr>
432
  <tr valign="top">
433
  <th scope="row">その上での必須キーワード<br />(日本語でも英語(その他)でも必須としたいキーワードを半角カンマ区切りで複数設定できます。<br />指定文字列を含まない場合はエラーとなります。※複数の方が厳しくなります。<br />必須キーワードだけでも使用できます。)</th>
434
+ <td><input type="text" name="tsa_must_keywords" size="80"
435
+ value="<?php echo get_option('tsa_must_keywords', "");?>" /></td>
436
  </tr>
437
  <tr valign="top">
438
  <th scope="row">必須キーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
439
+ <td><input type="text" name="tsa_must_key_error_message" size="80"
440
+ value="<?php echo get_option('tsa_must_key_error_message', $default_must_key_error_msg);?>" /><br />(初期設定:<?php echo $default_must_key_error_msg;?>)</td>
441
  </tr>
442
+ </table>
443
+ <h3>トラックバックへの対応設定</h3>
444
+ <table class="form-table">
445
  <tr valign="top">
446
  <th scope="row">上記設定をトラックバック記事にも採用する</th>
447
  <td><?php
472
  <label><input type="radio" name="tsa_tb_url_flg" value="2"<?php echo $chk_2;?>/>&nbsp;しない</label>
473
  </td>
474
  </tr>
475
+ </table>
476
+ <h3>投稿IPアドレスによる制御設定</h3>
477
+ <table class="form-table">
478
  <tr valign="top">
479
  <th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
480
  <td><?php
481
  $chk = "";
482
+ if (get_option('tsa_ip_block_from_spam_chk_flg', "") == "1") {
483
  $chk = "checked=\"checked\"";
484
  } else {
485
  $chk = "";
490
  // wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
491
  $results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
492
  ?>現在「spam」フラグが付いているIPアドレス:<?php
493
+ $add_ip_addresses = "";
494
  foreach ($results as $item) {
495
+ $spam_ip = $item->comment_author_IP;
496
  // ブロックしたいIP
497
+ if ( strlen( $add_ip_addresses ) > 0 ) {
498
+ $add_ip_addresses .= ",";
499
+ }
500
+ $add_ip_addresses .= $spam_ip;
501
+ ?><b><?php echo $spam_ip; ?></b><br /><?php
502
  }
503
+ ?>&nbsp;<input type="button" onclick="javascript:addIpAddresses('<?php echo $add_ip_addresses; ?>');" value="これらのIPアドレスを任意のブロック対象IPアドレスにコピーする" />
504
  </td>
505
  </tr>
506
  <tr valign="top">
507
  <th scope="row">任意のIPアドレスからの投稿も無視したい場合、対象となるIPアドレスを記述してください。<br />カンマ区切りで複数設定できます。(半角数字とドットのみ)</th>
508
+ <td><input type="text" name="tsa_block_ip_addresses" id="tsa_block_ip_addresses" size="80"
509
+ value="<?php echo get_option('tsa_block_ip_addresses', "");?>" /></td>
510
  </tr>
511
  <tr valign="top">
512
  <th scope="row">ブロック対象のIPアドレスからの投稿時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
513
+ <td><input type="text" name="tsa_block_ip_address_error_message" size="80"
514
+ value="<?php echo get_option('tsa_block_ip_address_error_message', $default_block_ip_address_error_msg);?>" /><br />(初期設定:<?php echo $default_block_ip_address_error_msg; ?>)</td>
515
  </table>
516
  <input type="hidden" name="action" value="update" /> <input
517
  type="hidden" name="page_options"
518
+ value="tsa_on_flg,tsa_japanese_string_min_count,tsa_back_second,tsa_caution_message,tsa_error_message,tsa_ng_keywords,tsa_ng_key_error_message,tsa_must_keywords,tsa_must_key_error_message,tsa_tb_on_flg,tsa_tb_url_flg,tsa_block_ip_addresses,tsa_ip_block_from_spam_chk_flg,tsa_block_ip_address_error_message,tsa_url_count_on_flg,tsa_ok_url_count,tsa_url_count_over_error_message" />
519
  <p class="submit">
520
  <input type="submit" class="button-primary"
521
  value="<?php _e('Save Changes') ?>" />
uninstall.php CHANGED
@@ -21,4 +21,8 @@ delete_option('tsa_tb_url_flg');
21
  delete_option('tsa_ip_block_from_spam_chk_flg');
22
  delete_option('tsa_block_ip_addresses');
23
  delete_option('tsa_block_ip_address_error_message');
 
 
 
 
24
  ?>
21
  delete_option('tsa_ip_block_from_spam_chk_flg');
22
  delete_option('tsa_block_ip_addresses');
23
  delete_option('tsa_block_ip_address_error_message');
24
+ // ver.2.2
25
+ delete_option('tsa_url_count_on_flg');
26
+ delete_option('tsa_ok_url_count');
27
+ delete_option('tsa_url_count_over_error_message');
28
  ?>