Throws SPAM Away - Version 3.3.1

Version Description

CSRF

Download this release

Release Info

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

Code changes from version 2.8.2.1 to 3.3.1

css/tsa_data_styles.css CHANGED
@@ -96,7 +96,7 @@
96
  /** スクロール対象テーブルCSS */
97
  #spam_list {
98
  background-color: #ffffff;
99
- border-collapse:;
100
  font-size: 1em !important;
101
  }
102
  /** 全体container */
96
  /** スクロール対象テーブルCSS */
97
  #spam_list {
98
  background-color: #ffffff;
99
+ border-collapse: initial;
100
  font-size: 1em !important;
101
  }
102
  /** 全体container */
hostbyip.php CHANGED
@@ -2,88 +2,95 @@
2
  /**
3
  * <p>ThrowsSpamAway</p> hostbyipページ
4
  * WordPress's Plugin
5
- * @author Takeshi Satoh@GTI Inc. 2016
6
- * @version 2.8
7
  */
8
  require_once 'throws_spam_away.class.php';
9
- require_once dirname( __FILE__ ).'/../../../wp-load.php';
10
  /**
11
  * ホスト検索
12
  */
13
- $spam_ip = htmlspecialchars($_GET['ip']);
14
- $newThrowsSpamAway = new ThrowsSpamAway(TRUE);
15
- $last_spam_comment_result = $newThrowsSpamAway->get_last_spam_comment($spam_ip);
16
  // 最終投稿日
17
- $last_comment_date = $last_spam_comment_result->post_date;
18
- $last_comment_post = get_permalink($last_spam_comment_result->post_id);
19
- $last_comment_post_title = get_the_title(get_post($last_spam_comment_result->post_id));
20
- $is_spam_champuru = ( $newThrowsSpamAway->reject_spam_ip( $spam_ip ) ? FALSE : TRUE );
21
- $spam_author = $last_spam_comment_result->spam_author;
22
- $spam_comment = esc_attr($last_spam_comment_result->spam_comment);
23
  ?><!DOCTYPE html>
24
  <html <?php language_attributes(); ?>>
25
  <head>
26
- <meta charset="<?php bloginfo( 'charset' ); ?>">
27
- <meta name="viewport" content="width=device-width">
28
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
29
 
30
- <title>Throws SPAM Away | Hostbyip[<?php echo htmlspecialchars($_GET['ip']); ?>]</title>
31
- <script type="text/javascript">
32
- window.onblur=function(){
33
- window.close();
34
- }
35
- </script>
36
- <style>
37
- h2 {
38
- background:#333;
39
- color:#fff;
40
- }
41
- h3 {
42
- background: #666;
43
- color: #fff;
44
- }
45
- .tsa_hostbyip_text {
46
- background: #999;
47
- color: #fff;
48
- margin:3px 0 0 0;
49
- }
50
- </style>
 
 
51
  </head>
52
  <body>
53
  <div style="textalign: center;">
54
- <h2><?php echo $spam_ip; ?></h2>
55
- <?php
56
- $spam_host = gethostbyaddr(htmlspecialchars($spam_ip));
57
- if ($spam_host != $spam_ip) {
58
- ?>
59
- <h3>特定のホスト情報が見つかりました。</h3>
60
- ↓↓↓<br />
61
 
62
- <h4><?php echo $spam_host; ?></h4>
63
- Whois: <a href="http://whois.arin.net/rest/ip/<?php echo $spam_ip; ?>" target="_blank"><?php echo $spam_ip; ?></a>
64
- <?php
65
- } else {
66
- ?>
67
- <h3>このIPアドレスから特定のホスト情報は見つかりませんでした。</h3>
68
- <?php
69
- }
70
- ?>
71
- <?php if ( $last_spam_comment_result != NULL ) { ?>
72
- <div class="tsa_hostbyip_text">このIPからの最終投稿日時</div><?php echo $last_comment_date; ?><br />
73
- <div class="tsa_hostbyip_text">このIPからスパム投稿対象となったページ</div><a href="<?php echo $last_comment_post; ?>" target="_blank"><?php echo $last_comment_post_title; ?></a><br />
74
- <?php } ?>
75
- <h4>スパムフィルター:<?php echo ($is_spam_champuru ? "スパムブラックリスト存在IPアドレス" : "未検出" ); ?></h4>
 
 
 
 
76
 
77
- <div class="tsa_hostbyip_text">最新コメント内容</div>
78
- <div ><?php if ( $spam_author != NULL && $spam_comment != NULL ) {
79
- ?>
80
- IP: <?php esc_attr_e( $spam_ip ); ?><br />
81
- 名前:<?php echo esc_attr( $spam_author ); ?><br />
82
- 内容:<?php esc_attr_e( $spam_comment ); ?><?php
83
- } ?>
84
- </div>
85
 
86
- <div style="text-align:right;"><a href="javascript:void(0);" onclick="window.close();">閉じる</a></div>
 
87
  </div>
88
  </body>
89
  </html>
2
  /**
3
  * <p>ThrowsSpamAway</p> hostbyipページ
4
  * WordPress's Plugin
5
+ * @author Takeshi Satoh@GTI Inc. 2017
6
+ * @version 3.0
7
  */
8
  require_once 'throws_spam_away.class.php';
9
+ require_once dirname( __FILE__ ) . '/../../../wp-load.php';
10
  /**
11
  * ホスト検索
12
  */
13
+ $spam_ip = htmlspecialchars( $_GET['ip'] );
14
+ $newThrowsSpamAway = new ThrowsSpamAway();
15
+ $last_spam_comment_result = $newThrowsSpamAway->get_last_spam_comment( $spam_ip );
16
  // 最終投稿日
17
+ $last_comment_date = $last_spam_comment_result->post_date;
18
+ $last_comment_post = get_permalink( $last_spam_comment_result->post_id );
19
+ $last_comment_post_title = get_the_title( get_post( $last_spam_comment_result->post_id ) );
20
+ $is_spam_champuru = ( $newThrowsSpamAway->reject_spam_ip( $spam_ip ) ? false : true );
21
+ $spam_author = $last_spam_comment_result->spam_author;
22
+ $spam_comment = esc_attr( $last_spam_comment_result->spam_comment );
23
  ?><!DOCTYPE html>
24
  <html <?php language_attributes(); ?>>
25
  <head>
26
+ <meta charset="<?php bloginfo( 'charset' ); ?>">
27
+ <meta name="viewport" content="width=device-width">
28
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
29
 
30
+ <title>Throws SPAM Away | Hostbyip[<?php echo htmlspecialchars( $_GET['ip'] ); ?>]</title>
31
+ <script type="text/javascript">
32
+ window.onblur = function () {
33
+ window.close();
34
+ }
35
+ </script>
36
+ <style>
37
+ h2 {
38
+ background: #333;
39
+ color: #fff;
40
+ }
41
+
42
+ h3 {
43
+ background: #666;
44
+ color: #fff;
45
+ }
46
+
47
+ .tsa_hostbyip_text {
48
+ background: #999;
49
+ color: #fff;
50
+ margin: 3px 0 0 0;
51
+ }
52
+ </style>
53
  </head>
54
  <body>
55
  <div style="textalign: center;">
56
+ <h2><?php echo $spam_ip; ?></h2>
57
+ <?php
58
+ $spam_host = gethostbyaddr( htmlspecialchars( $spam_ip ) );
59
+ if ( $spam_host != $spam_ip ) {
60
+ ?>
61
+ <h3><?php _e( "特定のホスト情報が見つかりました。", 'throws-spam-away' ); ?></h3>
62
+ ↓↓↓<br/>
63
 
64
+ <h4><?php echo $spam_host; ?></h4>
65
+ Whois: <a href="http://whois.arin.net/rest/ip/<?php echo $spam_ip; ?>"
66
+ target="_blank"><?php echo $spam_ip; ?></a>
67
+ <?php
68
+ } else {
69
+ ?>
70
+ <h3><?php _e( "このIPアドレスから特定のホスト情報は見つかりませんでした。", 'throws-spam-away' ); ?></h3>
71
+ <?php
72
+ }
73
+ ?>
74
+ <?php if ( $last_spam_comment_result != null ) { ?>
75
+ <div class="tsa_hostbyip_text"><?php _e( "このIPからの最終投稿日時", 'throws-spam-away' ); ?></div><?php echo $last_comment_date; ?>
76
+ <br/>
77
+ <div class="tsa_hostbyip_text"><?php _e( "このIPからスパム投稿対象となったページ", 'throws-spam-away' ); ?></div><a
78
+ href="<?php echo $last_comment_post; ?>" target="_blank"><?php echo $last_comment_post_title; ?></a>
79
+ <br/>
80
+ <?php } ?>
81
+ <h4><?php _e( "スパムフィルター:", 'throws-spam-away' ); ?><?php echo( $is_spam_champuru ? __( "スパム拒否リスト存在IPアドレス", 'throws-spam-away' ) : __( "未検出", 'throws-spam-away' ) ); ?></h4>
82
 
83
+ <div class="tsa_hostbyip_text"><?php _e( "最新コメント内容", 'throws-spam-away' ); ?></div>
84
+ <div><?php if ( $spam_author != null && $spam_comment != null ) {
85
+ ?>
86
+ IP: <?php esc_attr_e( $spam_ip ); ?><br/>
87
+ 名前:<?php echo esc_attr( $spam_author ); ?><br/>
88
+ 内容:<?php esc_attr_e( $spam_comment ); ?><?php
89
+ } ?>
90
+ </div>
91
 
92
+ <div style="text-align:right;"><a href="javascript:void(0);"
93
+ onclick="window.close();"><?php _e( "閉じる", 'throws-spam-away' ); ?></a></div>
94
  </div>
95
  </body>
96
  </html>
js/tsa_params.js CHANGED
@@ -1,32 +1,60 @@
1
  /**
2
  * <p>ThrowsSpamAway</p> JavaScript
3
  * WordPress's Plugin
4
- * @author Takeshi Satoh@GTI Inc. 2015
 
5
  * @since version2.6
6
  *
7
  * -- updated --
 
8
  * 2014/05/10 debug for IE8
9
- * 2015/07/25 �C�����C���X�^�C����display:none�w�肵������ hide�폜
10
- */
11
-
12
- jQuery(function(){
13
- jQuery('.tsa_param_field_tsa_2 input#tsa_param_field_tsa_3').val( jQuery('.tsa_param_field_tsa_ input').val() ); // copy
14
-
15
- var date = new Date();
16
- var iso = null;
17
- if ( typeof date.toISOString != 'undefined' ) {
18
- iso = date.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/);
19
- current_date = iso[1] + ' ' + iso[2];
20
- if ( jQuery('#comments form input#tsa_param_field_tsa_3').length == 0 ) {
21
- jQuery('#comments form').append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />'); // add to comment form
22
- }
23
 
24
- if ( jQuery('#respond form input#tsa_param_field_tsa_3').length == 0 ) {
25
- jQuery('#respond form').append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />'); // add to comment form
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- if ( jQuery('form#commentform input#tsa_param_field_tsa_3').length == 0 ) {
29
- jQuery('form#commentform').append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />'); // add to comment form
30
  }
31
  }
32
 
1
  /**
2
  * <p>ThrowsSpamAway</p> JavaScript
3
  * WordPress's Plugin
4
+ * @version 3.2.3
5
+ * @author Takeshi Satoh@GTI Inc. 2020
6
  * @since version2.6
7
  *
8
  * -- updated --
9
+ * 2020/09/03 テーマによってJavaScriptエラーが発生するため修正
10
  * 2014/05/10 debug for IE8
11
+ * 2015/07/25 インラインスタイルでdisplay:none指定したため hide削除
12
+ * 2020/07/16 jQuery 排除し JavaScript へ
13
+ * 2020/10/13 JavaScript修正
14
+ */
 
 
 
 
 
 
 
 
 
 
15
 
16
+ document.addEventListener('DOMContentLoaded', function() {
17
+
18
+ if (
19
+ document.querySelector('.tsa_param_field_tsa_2 input#tsa_param_field_tsa_3') &&
20
+ document.querySelector('.tsa_param_field_tsa_ input')
21
+ ) {
22
+ document.querySelector('.tsa_param_field_tsa_2 input#tsa_param_field_tsa_3').value =
23
+ document.querySelector('.tsa_param_field_tsa_ input').value
24
+
25
+ var date = new Date();
26
+ var iso = null;
27
+ if (typeof date.toISOString != 'undefined') {
28
+ iso = date.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/);
29
+ current_date = iso[1] + ' ' + iso[2];
30
+
31
+ if (document.querySelector('#comments form') && !document.querySelector('#comments form input#tsa_param_field_tsa_3')) {
32
+ const tsa_field = document.createElement("input");
33
+ tsa_field.setAttribute("type", "hidden");
34
+ tsa_field.setAttribute("name", "tsa_param_field_tsa_3");
35
+ tsa_field.setAttribute("id", "tsa_param_field_tsa_3");
36
+ tsa_field.setAttribute("value", current_date);
37
+ document.querySelector('#comments form').appendChild(tsa_field);
38
+ }
39
+
40
+ if (document.querySelector('#respond form') && !document.querySelector('#respond form input#tsa_param_field_tsa_3')) {
41
+ const tsa_field2 = document.createElement("input");
42
+ tsa_field2.setAttribute("type", "hidden");
43
+ tsa_field2.setAttribute("name", "tsa_param_field_tsa_3");
44
+ tsa_field2.setAttribute("id", "tsa_param_field_tsa_3");
45
+ tsa_field2.setAttribute("value", current_date);
46
+ document.querySelector('#respond form').appendChild(tsa_field2);
47
+ }
48
+
49
+ if (document.querySelector('form#commentform') && !document.querySelector('form#commentform input#tsa_param_field_tsa_3')) {
50
+ const tsa_field3 = document.createElement("input");
51
+ tsa_field3.setAttribute("type", "hidden");
52
+ tsa_field3.setAttribute("name", "tsa_param_field_tsa_3");
53
+ tsa_field3.setAttribute("id", "tsa_param_field_tsa_3");
54
+ tsa_field3.setAttribute("value", current_date);
55
+ document.querySelector('form#commentform').appendChild(tsa_field3);
56
+ }
57
 
 
 
58
  }
59
  }
60
 
js/tsa_params.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(function(){jQuery(".tsa_param_field_tsa_2 input#tsa_param_field_tsa_3").val(jQuery(".tsa_param_field_tsa_ input").val());var a=new Date();var b=null;if(typeof a.toISOString!="undefined"){b=a.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/);current_date=b[1]+" "+b[2];if(jQuery("#comments form input#tsa_param_field_tsa_3").length==0){jQuery("#comments form").append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />')}if(jQuery("#respond form input#tsa_param_field_tsa_3").length==0){jQuery("#respond form").append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />')}if(jQuery("form#commentform input#tsa_param_field_tsa_3").length==0){jQuery("form#commentform").append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />')}}});
1
+ document.addEventListener("DOMContentLoaded",function(){if(document.querySelector(".tsa_param_field_tsa_2 input#tsa_param_field_tsa_3")&&document.querySelector(".tsa_param_field_tsa_ input")){document.querySelector(".tsa_param_field_tsa_2 input#tsa_param_field_tsa_3").value=document.querySelector(".tsa_param_field_tsa_ input").value;var t=new Date,e=null;if(void 0!==t.toISOString){if(e=t.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/),current_date=e[1]+" "+e[2],document.querySelector("#comments form")&&!document.querySelector("#comments form input#tsa_param_field_tsa_3")){const t=document.createElement("input");t.setAttribute("type","hidden"),t.setAttribute("name","tsa_param_field_tsa_3"),t.setAttribute("id","tsa_param_field_tsa_3"),t.setAttribute("value",current_date),document.querySelector("#comments form").appendChild(t)}if(document.querySelector("#respond form")&&!document.querySelector("#respond form input#tsa_param_field_tsa_3")){const t=document.createElement("input");t.setAttribute("type","hidden"),t.setAttribute("name","tsa_param_field_tsa_3"),t.setAttribute("id","tsa_param_field_tsa_3"),t.setAttribute("value",current_date),document.querySelector("#respond form").appendChild(t)}if(document.querySelector("form#commentform")&&!document.querySelector("form#commentform input#tsa_param_field_tsa_3")){const t=document.createElement("input");t.setAttribute("type","hidden"),t.setAttribute("name","tsa_param_field_tsa_3"),t.setAttribute("id","tsa_param_field_tsa_3"),t.setAttribute("value",current_date),document.querySelector("form#commentform").appendChild(t)}}}});
languages/throws-spam-away-ja.mo ADDED
Binary file
languages/throws-spam-away-ja.po ADDED
@@ -0,0 +1,526 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Throws SPAM Away\n"
4
+ "POT-Creation-Date: 2020-07-08 16:15+0900\n"
5
+ "PO-Revision-Date: 2020-07-08 16:27+0900\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: \n"
8
+ "Language: ja_JP\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.3.1\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "Plural-Forms: nplurals=1; plural=0;\n"
15
+ "X-Poedit-Flags-xgettext: --add-comments=translators:\n"
16
+ "X-Poedit-WPHeader: throws_spam_away.php\n"
17
+ "X-Poedit-SourceCharset: UTF-8\n"
18
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
19
+ "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;"
20
+ "_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
21
+ "X-Poedit-SearchPath-0: .\n"
22
+ "X-Poedit-SearchPathExcluded-0: *.min.js\n"
23
+
24
+ #: hostbyip.php:61
25
+ msgid "特定のホスト情報が見つかりました。"
26
+ msgstr "特定のホスト情報が見つかりました。"
27
+
28
+ #: hostbyip.php:70
29
+ msgid "このIPアドレスから特定のホスト情報は見つかりませんでした。"
30
+ msgstr "このIPアドレスから特定のホスト情報は見つかりませんでした。"
31
+
32
+ #: hostbyip.php:75
33
+ msgid "このIPからの最終投稿日時"
34
+ msgstr "このIPからの最終投稿日時"
35
+
36
+ #: hostbyip.php:77
37
+ msgid "このIPからスパム投稿対象となったページ"
38
+ msgstr "このIPからスパム投稿対象となったページ"
39
+
40
+ #: hostbyip.php:81
41
+ msgid "スパムフィルター:"
42
+ msgstr "スパムフィルター:"
43
+
44
+ #: hostbyip.php:81
45
+ msgid "スパム拒否リスト存在IPアドレス"
46
+ msgstr "スパム拒否リスト存在IPアドレス"
47
+
48
+ #: hostbyip.php:81
49
+ msgid "未検出"
50
+ msgstr "未検出"
51
+
52
+ #: hostbyip.php:83
53
+ msgid "最新コメント内容"
54
+ msgstr "最新コメント内容"
55
+
56
+ #: hostbyip.php:93
57
+ msgid "閉じる"
58
+ msgstr "閉じる"
59
+
60
+ #: throws_spam_away.class.php:787
61
+ msgid "Throws SPAM Away 設定"
62
+ msgstr "Throws SPAM Away 設定"
63
+
64
+ #. Plugin Name of the plugin/theme
65
+ #: throws_spam_away.class.php:787
66
+ msgid "Throws SPAM Away"
67
+ msgstr "Throws SPAM Away"
68
+
69
+ #: throws_spam_away.class.php:795
70
+ msgid "スパムデータ"
71
+ msgstr "スパムデータ"
72
+
73
+ #: throws_spam_away.class.php:800
74
+ msgid "スパムコメント一括削除"
75
+ msgstr "スパムコメント一括削除"
76
+
77
+ #: throws_spam_away.class.php:1088 throws_spam_away.class.php:1119
78
+ #: throws_spam_away.class.php:1192 throws_spam_away.class.php:1300
79
+ #: throws_spam_away.class.php:1313 throws_spam_away.class.php:1388
80
+ msgid "▲ 上へ"
81
+ msgstr "▲ 上へ"
82
+
83
+ #: throws_spam_away.class.php:1280
84
+ msgid ""
85
+ "※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br>※日"
86
+ "本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用くだ"
87
+ "さい。<br>改行区切りで複数設定できます。範囲指定も可能です。(半角数字とス"
88
+ "ラッシュ、ドットのみ)"
89
+ msgstr ""
90
+ "※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br>※日"
91
+ "本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用くだ"
92
+ "さい。<br>改行区切りで複数設定できます。範囲指定も可能です。(半角数字とス"
93
+ "ラッシュ、ドットのみ)"
94
+
95
+ #: throws_spam_away.class.php:1291
96
+ msgid ""
97
+ "許可リストに登録したIPアドレス以外からの投稿を無視する(許可リストへの登録"
98
+ "がない場合は有効になりません)"
99
+ msgstr ""
100
+ "許可リストに登録したIPアドレス以外からの投稿を無視する(許可リストへの登録"
101
+ "がない場合は有効になりません)"
102
+
103
+ #: throws_spam_away.class.php:1293
104
+ msgid "(初期設定:"
105
+ msgstr "(初期設定:"
106
+
107
+ #: throws_spam_away.class.php:1293 throws_spam_away.class.php:1330
108
+ #: throws_spam_away.class.php:1364
109
+ msgid "しない"
110
+ msgstr "しない"
111
+
112
+ #: throws_spam_away.class.php:1293 throws_spam_away.class.php:1330
113
+ #: throws_spam_away.class.php:1364
114
+ msgid "する"
115
+ msgstr "する"
116
+
117
+ #: throws_spam_away.class.php:1293
118
+ msgid ")"
119
+ msgstr ")"
120
+
121
+ #: throws_spam_away.class.php:1295
122
+ msgid ""
123
+ "※許可リストで登録したIP以外の投稿は無視されますのでこの設定は慎重に行ってく"
124
+ "ださい。(すべての設定より優先します)<br>※エラーメッセージは「ブロック対象"
125
+ "のIPアドレスからの投稿時に表示される文言」が使われます。(エラー表示時の"
126
+ "み)"
127
+ msgstr ""
128
+ "※許可リストで登録したIP以外の投稿は無視されますのでこの設定は慎重に行ってく"
129
+ "ださい。(すべての設定より優先します)<br>※エラーメッセージは「ブロック対象"
130
+ "のIPアドレスからの投稿時に表示される文言」が使われます。(エラー表示時の"
131
+ "み)"
132
+
133
+ #: throws_spam_away.class.php:1302
134
+ msgid ""
135
+ "メモ(スパム対策情報や IPアドレス・NGワードその他メモ備忘録としてご自由にお"
136
+ "使い下さい)"
137
+ msgstr ""
138
+ "メモ(スパム対策情報や IPアドレス・NGワードその他メモ備忘録としてご自由にお"
139
+ "使い下さい)"
140
+
141
+ #: throws_spam_away.class.php:1303
142
+ msgid "この欄の内容が表示されることはありません。"
143
+ msgstr "この欄の内容が表示されることはありません。"
144
+
145
+ #: throws_spam_away.class.php:1315
146
+ msgid "スパムデータベース"
147
+ msgstr "スパムデータベース"
148
+
149
+ #: throws_spam_away.class.php:1318
150
+ msgid "スパムコメント投稿情報を保存しますか?"
151
+ msgstr "スパムコメント投稿情報を保存しますか?"
152
+
153
+ #: throws_spam_away.class.php:1326
154
+ msgid "スパムコメント情報を保存する"
155
+ msgstr "スパムコメント情報を保存する"
156
+
157
+ #: throws_spam_away.class.php:1328
158
+ #, php-format
159
+ msgid ""
160
+ "※Throws SPAM Away設定画面表示時に時間がかかることがあります。<br>※「保存す"
161
+ "る」を解除した場合でもテーブルは残りますので%d日以内の取得データは表示され"
162
+ "ます。"
163
+ msgstr ""
164
+ "※Throws SPAM Away設定画面表示時に時間がかかることがあります。<br>※「保存す"
165
+ "る」を解除した場合でもテーブルは残りますので%d日以内の取得データは表示され"
166
+ "ます。"
167
+
168
+ #: throws_spam_away.class.php:1330 throws_spam_away.class.php:1384
169
+ #, php-format
170
+ msgid "(初期設定:%s)"
171
+ msgstr "(初期設定:%s)"
172
+
173
+ #: throws_spam_away.class.php:1334
174
+ msgid "スパムデータを表示する期間"
175
+ msgstr "スパムデータを表示する期間"
176
+
177
+ #: throws_spam_away.class.php:1338
178
+ #, php-format
179
+ msgid "日分(最低%d日)"
180
+ msgstr "日分(最低%d日)"
181
+
182
+ #: throws_spam_away.class.php:1338
183
+ #, php-format
184
+ msgid "(初期設定: %d)"
185
+ msgstr "(初期設定: %d)"
186
+
187
+ #: throws_spam_away.class.php:1347
188
+ msgid "期間が過ぎたデータを削除する"
189
+ msgstr "期間が過ぎたデータを削除する"
190
+
191
+ #: throws_spam_away.class.php:1349
192
+ #, php-format
193
+ msgid ""
194
+ "※一度消したデータは復活出来ませんのでご注意ください。また最低%d日分は保存さ"
195
+ "れます。"
196
+ msgstr ""
197
+ "※一度消したデータは復活出来ませんのでご注意ください。また最低%d日分は保存さ"
198
+ "れます。"
199
+
200
+ #: throws_spam_away.class.php:1353
201
+ msgid ""
202
+ "一定時間内スパム認定機能<br>○分以内に○回スパムとなったら○分間、当該IPからの"
203
+ "コメントはスパム扱いする設定<br><b>※一定時間以内にスパム投稿された回数を測"
204
+ "定していますので「スパムコメント情報を保存する」機能がオフの場合は機能しま"
205
+ "せん。</b>"
206
+ msgstr ""
207
+ "一定時間内スパム認定機能<br>○分以内に○回スパムとなったら○分間、当該IPからの"
208
+ "コメントはスパム扱いする設定<br><b>※一定時間以内にスパム投稿された回数を測"
209
+ "定していますので「スパムコメント情報を保存する」機能がオフの場合は機能しま"
210
+ "せん。</b>"
211
+
212
+ #: throws_spam_away.class.php:1356
213
+ msgid "機能設定"
214
+ msgstr "機能設定"
215
+
216
+ #: throws_spam_away.class.php:1363
217
+ msgid "機能させる"
218
+ msgstr "機能させる"
219
+
220
+ #: throws_spam_away.class.php:1364
221
+ #, php-format
222
+ msgid "(初期設定: %s)"
223
+ msgstr "(初期設定: %s)"
224
+
225
+ #: throws_spam_away.class.php:1366 throws_spam_away.class.php:1372
226
+ msgid "一定時間:"
227
+ msgstr "一定時間:"
228
+
229
+ #: throws_spam_away.class.php:1368
230
+ msgid "分以内に"
231
+ msgstr "分以内に"
232
+
233
+ #: throws_spam_away.class.php:1369
234
+ msgid "一定回数:"
235
+ msgstr "一定回数:"
236
+
237
+ #: throws_spam_away.class.php:1370
238
+ msgid "回スパムとなったら"
239
+ msgstr "回スパムとなったら"
240
+
241
+ #: throws_spam_away.class.php:1371
242
+ msgid "<b>次から</b>"
243
+ msgstr "<b>次から</b>"
244
+
245
+ #: throws_spam_away.class.php:1374
246
+ msgid "分間"
247
+ msgstr "分間"
248
+
249
+ #: throws_spam_away.class.php:1377
250
+ #, php-format
251
+ msgid ""
252
+ "(初期設定:一定時間「%d」分以内に一定回数「%d」回スパムとなったら次から"
253
+ "「%d」分間)<br>当該IPアドレスからのコメントを強制スパム扱いします。"
254
+ msgstr ""
255
+ "(初期設定:一定時間「%d」分以内に一定回数「%d」回スパムとなったら次から"
256
+ "「%d」分間)<br>当該IPアドレスからのコメントを強制スパム扱いします。"
257
+
258
+ #: throws_spam_away.class.php:1380
259
+ msgid "エラーメッセージは:"
260
+ msgstr "エラーメッセージは:"
261
+
262
+ #: throws_spam_away.class.php:1398
263
+ msgid "Save Changes"
264
+ msgstr "変更を保存"
265
+
266
+ #: throws_spam_away.class.php:1523
267
+ #, php-format
268
+ msgid "スパムデータから %s のデータを削除しました。"
269
+ msgstr "スパムデータから %s のデータを削除しました。"
270
+
271
+ #: throws_spam_away.class.php:1535
272
+ #, php-format
273
+ msgid "%s はすでに設定されています。"
274
+ msgstr "%s はすでに設定されています。"
275
+
276
+ #: throws_spam_away.class.php:1544
277
+ #, php-format
278
+ msgid "%s を追加設定しました。"
279
+ msgstr "%s を追加設定しました。"
280
+
281
+ #: throws_spam_away.class.php:1553
282
+ msgid "スパムデータをすべて削除しました。"
283
+ msgstr "スパムデータをすべて削除しました。"
284
+
285
+ #: throws_spam_away.class.php:1556
286
+ msgid ""
287
+ "スパムデータテーブルへ削除処理を実行しましたが、エラーが発生し処理が完了し"
288
+ "ませんでした。"
289
+ msgstr ""
290
+ "スパムデータテーブルへ削除処理を実行しましたが、エラーが発生し処理が完了し"
291
+ "ませんでした。"
292
+
293
+ #: throws_spam_away.class.php:1573
294
+ msgid "Throws SPAM Away スパムデータ"
295
+ msgstr "Throws SPAM Away スパムデータ"
296
+
297
+ #: throws_spam_away.class.php:1574
298
+ #, php-format
299
+ msgid "スパム投稿%d日間の推移"
300
+ msgstr "スパム投稿%d日間の推移"
301
+
302
+ #: throws_spam_away.class.php:1647
303
+ msgid ""
304
+ "&nbsp;※&nbsp;数値は&lt;上段&gt;がSPAM投稿したユニークIPアドレス数、&nbsp;"
305
+ "&lt;下段&gt;が破棄したスパム投稿数"
306
+ msgstr ""
307
+ "&nbsp;※&nbsp;数値は&lt;上段&gt;がSPAM投稿したユニークIPアドレス数、&nbsp;"
308
+ "&lt;下段&gt;が破棄したスパム投稿数"
309
+
310
+ #: throws_spam_away.class.php:1661
311
+ #, php-format
312
+ msgid "過去%d日間に無視投稿されたIPアドレス"
313
+ msgstr "過去%d日間に無視投稿されたIPアドレス"
314
+
315
+ #: throws_spam_away.class.php:1686
316
+ msgid ""
317
+ "をスパムデータベースから削除します。よろしいですか?この操作は取り消せませ"
318
+ "ん"
319
+ msgstr ""
320
+ "をスパムデータベースから削除します。よろしいですか?この操作は取り消せませ"
321
+ "ん"
322
+
323
+ #: throws_spam_away.class.php:1695
324
+ msgid "を無視対象に追加します。よろしいですか?削除は設定から行ってください"
325
+ msgstr "を無視対象に追加します。よろしいですか?削除は設定から行ってください"
326
+
327
+ #: throws_spam_away.class.php:1705
328
+ msgid "投稿内容の判定"
329
+ msgstr "投稿内容の判定"
330
+
331
+ #: throws_spam_away.class.php:1706
332
+ msgid ""
333
+ "※最新1件のコメント内容はIPアドレスまたはエラー判定のリンク先を参照してくだ"
334
+ "さい。"
335
+ msgstr ""
336
+ "※最新1件のコメント内容はIPアドレスまたはエラー判定のリンク先を参照してくだ"
337
+ "さい。"
338
+
339
+ #: throws_spam_away.class.php:1717
340
+ msgid "IPアドレス"
341
+ msgstr "IPアドレス"
342
+
343
+ #: throws_spam_away.class.php:1718
344
+ msgid "投稿数"
345
+ msgstr "投稿数"
346
+
347
+ #: throws_spam_away.class.php:1719
348
+ msgid "最終投稿日時"
349
+ msgstr "最終投稿日時"
350
+
351
+ #: throws_spam_away.class.php:1720
352
+ msgid "スパムIP登録"
353
+ msgstr "スパムIP登録"
354
+
355
+ #: throws_spam_away.class.php:1721
356
+ msgid "エラー判定(最新)"
357
+ msgstr "エラー判定(最新)"
358
+
359
+ #: throws_spam_away.class.php:1738
360
+ msgid "日本語以外"
361
+ msgstr "日本語以外"
362
+
363
+ #: throws_spam_away.class.php:1741
364
+ msgid "必須キーワード無し"
365
+ msgstr "必須キーワード無し"
366
+
367
+ #: throws_spam_away.class.php:1744
368
+ msgid "NGキーワード混入"
369
+ msgstr "NGキーワード混入"
370
+
371
+ #: throws_spam_away.class.php:1747
372
+ msgid "ブロック対象IPアドレス"
373
+ msgstr "ブロック対象IPアドレス"
374
+
375
+ #: throws_spam_away.class.php:1750
376
+ msgid "スパム拒否リスト"
377
+ msgstr "スパム拒否リスト"
378
+
379
+ #: throws_spam_away.class.php:1753
380
+ msgid "トラックバックスパム"
381
+ msgstr "トラックバックスパム"
382
+
383
+ #: throws_spam_away.class.php:1756
384
+ msgid "URL文字列混入数オーバー"
385
+ msgstr "URL文字列混入数オーバー"
386
+
387
+ #: throws_spam_away.class.php:1759
388
+ msgid "一定時間スパム判定エラー"
389
+ msgstr "一定時間スパム判定エラー"
390
+
391
+ #: throws_spam_away.class.php:1762
392
+ msgid "ダミー項目エラー"
393
+ msgstr "ダミー項目エラー"
394
+
395
+ #: throws_spam_away.class.php:1765
396
+ msgid "許可リスト許可IP以外"
397
+ msgstr "許可リスト許可IP以外"
398
+
399
+ #: throws_spam_away.class.php:1776
400
+ msgid "スパムデータから削除する"
401
+ msgstr "スパムデータから削除する"
402
+
403
+ #: throws_spam_away.class.php:1784
404
+ msgid "ブロック対象IPアドレス追加"
405
+ msgstr "ブロック対象IPアドレス追加"
406
+
407
+ #: throws_spam_away.class.php:1804
408
+ msgid ""
409
+ "スパムデータベースを使用するにはThrows SPAM Awayのメニュー「設定」から"
410
+ "<br>「スパムコメント投稿情報を保存しますか?」項目を<strong>「スパムコメン"
411
+ "ト情報を保存する」</strong>に設定してください"
412
+ msgstr ""
413
+ "スパムデータベースを使用するにはThrows SPAM Awayのメニュー「設定」から"
414
+ "<br>「スパムコメント投稿情報を保存しますか?」項目を<strong>「スパムコメン"
415
+ "ト情報を保存する」</strong>に設定してください"
416
+
417
+ #: throws_spam_away.class.php:1820
418
+ msgid "すべてのスパムデータが削除されます。よろしいですか?"
419
+ msgstr "すべてのスパムデータが削除されます。よろしいですか?"
420
+
421
+ #: throws_spam_away.class.php:1821
422
+ msgid "すべてのデータを削除する"
423
+ msgstr "すべてのデータを削除する"
424
+
425
+ #: throws_spam_away.php:67
426
+ msgid ""
427
+ "日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)"
428
+ msgstr ""
429
+ "日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)"
430
+
431
+ #: throws_spam_away.php:73
432
+ msgid "日本語を規定文字数以上含まない記事は投稿できませんよ。"
433
+ msgstr "日本語を規定文字数以上含まない記事は投稿できませんよ。"
434
+
435
+ #: throws_spam_away.php:88
436
+ msgid "NGキーワードが含まれているため投稿できません。"
437
+ msgstr "NGキーワードが含まれているため投稿できません。"
438
+
439
+ #: throws_spam_away.php:91
440
+ msgid "必須キーワードが含まれていないため投稿できません。"
441
+ msgstr "必須キーワードが含まれていないため投稿できません。"
442
+
443
+ #: throws_spam_away_comments.php:24
444
+ msgid "You have no comment spam."
445
+ msgstr "スパムコメントはありません。"
446
+
447
+ #: throws_spam_away_comments.php:28
448
+ msgid "Spam comments have been deleted."
449
+ msgstr "スパムコメントが削除されました。"
450
+
451
+ #: throws_spam_away_comments.php:30 throws_spam_away_comments.php:38
452
+ #: throws_spam_away_comments.php:70
453
+ msgid "Something Went Wrong,Please Try Again!"
454
+ msgstr "不具合が発生しました。もう一度操作してください。"
455
+
456
+ #: throws_spam_away_comments.php:36 throws_spam_away_comments.php:62
457
+ msgid "All comments have been deleted."
458
+ msgstr "すべてのコメントが削除されました。"
459
+
460
+ #: throws_spam_away_comments.php:43
461
+ msgid "Number of all Comments"
462
+ msgstr "すべてのコメント数"
463
+
464
+ #: throws_spam_away_comments.php:44
465
+ msgid "Number of Spam Comments"
466
+ msgstr "スパムコメント数"
467
+
468
+ #: throws_spam_away_comments.php:51
469
+ msgid "Delete all spam comments"
470
+ msgstr "スパムコメントをすべて削除"
471
+
472
+ #: throws_spam_away_comments.php:52
473
+ msgid "Delete all comments"
474
+ msgstr "コメントをすべて削除"
475
+
476
+ #: throws_spam_away_comments.php:56
477
+ msgid "Delete all Comments"
478
+ msgstr "すべてのコメントを削除"
479
+
480
+ #: throws_spam_away_comments.php:57
481
+ msgid "I will send. Is it OK?"
482
+ msgstr "送信します。よろしいですか?"
483
+
484
+ #: throws_spam_away_comments.php:68
485
+ msgid "All Pending comments have been deleted."
486
+ msgstr "保留中のコメントはすべて削除されました。"
487
+
488
+ #: throws_spam_away_comments.php:74
489
+ msgid "Number of Pending Comments"
490
+ msgstr "保留中のコメント数"
491
+
492
+ #: throws_spam_away_comments.php:81
493
+ msgid "Delete all pending comments"
494
+ msgstr "保留中のコメントをすべて削除する"
495
+
496
+ #: throws_spam_away_comments.php:84
497
+ msgid "Delete all pending Comments"
498
+ msgstr "保留中のコメントをすべて削除する"
499
+
500
+ #: throws_spam_away_comments.php:89
501
+ msgid "All pending comments have been deleted."
502
+ msgstr "保留中のコメントはすべて削除されました。"
503
+
504
+ #: throws_spam_away_comments.php:93
505
+ msgid "Warning : Once Comment Deleted can't be restored!"
506
+ msgstr "注意: 削除されたコメントは戻せません。"
507
+
508
+ #. Plugin URI of the plugin/theme
509
+ msgid "https://gti.co.jp/throws-spam-away/"
510
+ msgstr "https://gti.co.jp/throws-spam-away/"
511
+
512
+ #. Description of the plugin/theme
513
+ msgid ""
514
+ "コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞い"
515
+ "ながらも捨ててしまうプラグイン"
516
+ msgstr ""
517
+ "コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞い"
518
+ "ながらも捨ててしまうプラグイン"
519
+
520
+ #. Author of the plugin/theme
521
+ msgid "株式会社ジーティーアイ さとう たけし"
522
+ msgstr "株式会社ジーティーアイ さとう たけし"
523
+
524
+ #. Author URI of the plugin/theme
525
+ msgid "https://gti.co.jp/"
526
+ msgstr "https://gti.co.jp/"
languages/throws-spam-away-ja_JP.mo ADDED
Binary file
languages/throws-spam-away.pot ADDED
@@ -0,0 +1,487 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #, fuzzy
2
+ msgid ""
3
+ msgstr ""
4
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
+ "Project-Id-Version: Throws SPAM Away\n"
6
+ "POT-Creation-Date: 2019-03-14 00:58+0900\n"
7
+ "PO-Revision-Date: 2019-03-14 00:57+0900\n"
8
+ "Last-Translator: \n"
9
+ "Language-Team: \n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 2.2.1\n"
14
+ "X-Poedit-Basepath: ..\n"
15
+ "X-Poedit-Flags-xgettext: --add-comments=translators:\n"
16
+ "X-Poedit-WPHeader: throws_spam_away.php\n"
17
+ "X-Poedit-SourceCharset: UTF-8\n"
18
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
19
+ "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
20
+ "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
21
+ "X-Poedit-SearchPath-0: .\n"
22
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
23
+
24
+ #: hostbyip.php:61
25
+ msgid "特定のホスト情報が見つかりました。"
26
+ msgstr ""
27
+
28
+ #: hostbyip.php:70
29
+ msgid "このIPアドレスから特定のホスト情報は見つかりませんでした。"
30
+ msgstr ""
31
+
32
+ #: hostbyip.php:75
33
+ msgid "このIPからの最終投稿日時"
34
+ msgstr ""
35
+
36
+ #: hostbyip.php:77
37
+ msgid "このIPからスパム投稿対象となったページ"
38
+ msgstr ""
39
+
40
+ #: hostbyip.php:81
41
+ msgid "スパムフィルター:"
42
+ msgstr ""
43
+
44
+ #: hostbyip.php:81
45
+ msgid "スパム拒否リスト存在IPアドレス"
46
+ msgstr ""
47
+
48
+ #: hostbyip.php:81
49
+ msgid "未検出"
50
+ msgstr ""
51
+
52
+ #: hostbyip.php:83
53
+ msgid "最新コメント内容"
54
+ msgstr ""
55
+
56
+ #: hostbyip.php:93
57
+ msgid "閉じる"
58
+ msgstr ""
59
+
60
+ #: throws_spam_away.class.php:787
61
+ msgid "Throws SPAM Away 設定"
62
+ msgstr ""
63
+
64
+ #. Plugin Name of the plugin/theme
65
+ #: throws_spam_away.class.php:787
66
+ msgid "Throws SPAM Away"
67
+ msgstr ""
68
+
69
+ #: throws_spam_away.class.php:795
70
+ msgid "スパムデータ"
71
+ msgstr ""
72
+
73
+ #: throws_spam_away.class.php:800
74
+ msgid "スパムコメント一括削除"
75
+ msgstr ""
76
+
77
+ #: throws_spam_away.class.php:1091 throws_spam_away.class.php:1122
78
+ #: throws_spam_away.class.php:1195 throws_spam_away.class.php:1303
79
+ #: throws_spam_away.class.php:1316 throws_spam_away.class.php:1391
80
+ msgid "▲ 上へ"
81
+ msgstr ""
82
+
83
+ #: throws_spam_away.class.php:1283
84
+ msgid ""
85
+ "※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br/>※日本"
86
+ "語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用くださ"
87
+ "い。<br/>改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッ"
88
+ "シュ、ドットのみ)"
89
+ msgstr ""
90
+
91
+ #: throws_spam_away.class.php:1294
92
+ msgid ""
93
+ "許可リストに登録したIPアドレス以外からの投稿を無視する(許可リストへ"
94
+ "の登録がない場合は有効になりません)"
95
+ msgstr ""
96
+
97
+ #: throws_spam_away.class.php:1296
98
+ msgid "(初期設定:"
99
+ msgstr ""
100
+
101
+ #: throws_spam_away.class.php:1296 throws_spam_away.class.php:1333
102
+ #: throws_spam_away.class.php:1367
103
+ msgid "しない"
104
+ msgstr ""
105
+
106
+ #: throws_spam_away.class.php:1296 throws_spam_away.class.php:1333
107
+ #: throws_spam_away.class.php:1367
108
+ msgid "する"
109
+ msgstr ""
110
+
111
+ #: throws_spam_away.class.php:1296
112
+ msgid ")"
113
+ msgstr ""
114
+
115
+ #: throws_spam_away.class.php:1298
116
+ msgid ""
117
+ "※許可リストで登録したIP以外の投稿は無視されますのでこの設定は慎重に行って"
118
+ "ください。(すべての設定より優先します)<br/>※エラーメッセージは「ブロック対"
119
+ "象のIPアドレスからの投稿時に表示される文言」が使われます。(エラー表示時の"
120
+ "み)"
121
+ msgstr ""
122
+
123
+ #: throws_spam_away.class.php:1305
124
+ msgid ""
125
+ "メモ(スパム対策情報や IPアドレス・NGワードその他メモ備忘録としてご自由にお使"
126
+ "い下さい)"
127
+ msgstr ""
128
+
129
+ #: throws_spam_away.class.php:1306
130
+ msgid "この欄の内容が表示されることはありません。"
131
+ msgstr ""
132
+
133
+ #: throws_spam_away.class.php:1318
134
+ msgid "スパムデータベース"
135
+ msgstr ""
136
+
137
+ #: throws_spam_away.class.php:1321
138
+ msgid "スパムコメント投稿情報を保存しますか?"
139
+ msgstr ""
140
+
141
+ #: throws_spam_away.class.php:1329
142
+ msgid "スパムコメント情報を保存する"
143
+ msgstr ""
144
+
145
+ #: throws_spam_away.class.php:1331
146
+ #, php-format
147
+ msgid ""
148
+ "※Throws SPAM Away設定画面表示時に時間がかかることがあります。<br/>※「保存す"
149
+ "る」を解除した場合でもテーブルは残りますので%d日以内の取得データは表示されま"
150
+ "す。"
151
+ msgstr ""
152
+
153
+ #: throws_spam_away.class.php:1333 throws_spam_away.class.php:1387
154
+ #, php-format
155
+ msgid "(初期設定:%s)"
156
+ msgstr ""
157
+
158
+ #: throws_spam_away.class.php:1337
159
+ msgid "スパムデータを表示する期間"
160
+ msgstr ""
161
+
162
+ #: throws_spam_away.class.php:1341
163
+ #, php-format
164
+ msgid "日分(最低%d日)"
165
+ msgstr ""
166
+
167
+ #: throws_spam_away.class.php:1341
168
+ #, php-format
169
+ msgid "(初期設定: %d)"
170
+ msgstr ""
171
+
172
+ #: throws_spam_away.class.php:1350
173
+ msgid "期間が過ぎたデータを削除する"
174
+ msgstr ""
175
+
176
+ #: throws_spam_away.class.php:1352
177
+ #, php-format
178
+ msgid ""
179
+ "※一度消したデータは復活出来ませんのでご注意ください。また最低%d日分は保存され"
180
+ "ます。"
181
+ msgstr ""
182
+
183
+ #: throws_spam_away.class.php:1356
184
+ msgid ""
185
+ "一定時間内スパム認定機能<br/>○分以内に○回スパムとなったら○分間、当該IPからの"
186
+ "コメントはスパム扱いする設定<br/><b>※一定時間以内にスパム投稿された回数を測定"
187
+ "していますので「スパムコメント情報を保存する」機能がオフの場合は機能しませ"
188
+ "ん。</b>"
189
+ msgstr ""
190
+
191
+ #: throws_spam_away.class.php:1359
192
+ msgid "機能設定"
193
+ msgstr ""
194
+
195
+ #: throws_spam_away.class.php:1366
196
+ msgid "機能させる"
197
+ msgstr ""
198
+
199
+ #: throws_spam_away.class.php:1367
200
+ #, php-format
201
+ msgid "(初期設定: %s)"
202
+ msgstr ""
203
+
204
+ #: throws_spam_away.class.php:1369 throws_spam_away.class.php:1375
205
+ msgid "一定時間:"
206
+ msgstr ""
207
+
208
+ #: throws_spam_away.class.php:1371
209
+ msgid "分以内に"
210
+ msgstr ""
211
+
212
+ #: throws_spam_away.class.php:1372
213
+ msgid "一定回数:"
214
+ msgstr ""
215
+
216
+ #: throws_spam_away.class.php:1373
217
+ msgid "回スパムとなったら"
218
+ msgstr ""
219
+
220
+ #: throws_spam_away.class.php:1374
221
+ msgid "<b>次から</b>"
222
+ msgstr ""
223
+
224
+ #: throws_spam_away.class.php:1377
225
+ msgid "分間"
226
+ msgstr ""
227
+
228
+ #: throws_spam_away.class.php:1380
229
+ #, php-format
230
+ msgid ""
231
+ "(初期設定:一定時間「%d」分以内に一定回数「%d」回スパムとなったら次から"
232
+ "「%d」分間)<br/>当該IPアドレスからのコメントを強制スパム扱いします。"
233
+ msgstr ""
234
+
235
+ #: throws_spam_away.class.php:1383
236
+ msgid "エラーメッセージは:"
237
+ msgstr ""
238
+
239
+ #: throws_spam_away.class.php:1401
240
+ msgid "Save Changes"
241
+ msgstr ""
242
+
243
+ #: throws_spam_away.class.php:1528
244
+ #, php-format
245
+ msgid "スパムデータから %s のデータを削除しました。"
246
+ msgstr ""
247
+
248
+ #: throws_spam_away.class.php:1540
249
+ #, php-format
250
+ msgid "%s はすでに設定されています。"
251
+ msgstr ""
252
+
253
+ #: throws_spam_away.class.php:1549
254
+ #, php-format
255
+ msgid "%s を追加設定しました。"
256
+ msgstr ""
257
+
258
+ #: throws_spam_away.class.php:1558
259
+ msgid "スパムデータをすべて削除しました。"
260
+ msgstr ""
261
+
262
+ #: throws_spam_away.class.php:1561
263
+ msgid ""
264
+ "スパムデータテーブルへ削除処理を実行しましたが、エラーが発生し処理が完了しま"
265
+ "せんでした。"
266
+ msgstr ""
267
+
268
+ #: throws_spam_away.class.php:1578
269
+ msgid "Throws SPAM Away スパムデータ"
270
+ msgstr ""
271
+
272
+ #: throws_spam_away.class.php:1579
273
+ #, php-format
274
+ msgid "スパム投稿%d日間の推移"
275
+ msgstr ""
276
+
277
+ #: throws_spam_away.class.php:1652
278
+ msgid ""
279
+ "&nbsp;※&nbsp;数値は&lt;上段&gt;がSPAM投稿したユニークIPアドレス数、&nbsp;&lt;"
280
+ "下段&gt;が破棄したスパム投稿数"
281
+ msgstr ""
282
+
283
+ #: throws_spam_away.class.php:1666
284
+ #, php-format
285
+ msgid "過去%d日間に無視投稿されたIPアドレス"
286
+ msgstr ""
287
+
288
+ #: throws_spam_away.class.php:1691
289
+ msgid ""
290
+ "をスパムデータベースから削除します。よろしいですか?この操作は取り消せません"
291
+ msgstr ""
292
+
293
+ #: throws_spam_away.class.php:1700
294
+ msgid "を無視対象に追加します。よろしいですか?削除は設定から行ってください"
295
+ msgstr ""
296
+
297
+ #: throws_spam_away.class.php:1710
298
+ msgid "投稿内容の判定"
299
+ msgstr ""
300
+
301
+ #: throws_spam_away.class.php:1711
302
+ msgid ""
303
+ "※最新1件のコメント内容はIPアドレスまたはエラー判定のリンク先を参照してくださ"
304
+ "い。"
305
+ msgstr ""
306
+
307
+ #: throws_spam_away.class.php:1722
308
+ msgid "IPアドレス"
309
+ msgstr ""
310
+
311
+ #: throws_spam_away.class.php:1723
312
+ msgid "投稿数"
313
+ msgstr ""
314
+
315
+ #: throws_spam_away.class.php:1724
316
+ msgid "最終投稿日時"
317
+ msgstr ""
318
+
319
+ #: throws_spam_away.class.php:1725
320
+ msgid "スパムIP登録"
321
+ msgstr ""
322
+
323
+ #: throws_spam_away.class.php:1726
324
+ msgid "エラー判定(最新)"
325
+ msgstr ""
326
+
327
+ #: throws_spam_away.class.php:1743
328
+ msgid "日本語以外"
329
+ msgstr ""
330
+
331
+ #: throws_spam_away.class.php:1746
332
+ msgid "必須キーワード無し"
333
+ msgstr ""
334
+
335
+ #: throws_spam_away.class.php:1749
336
+ msgid "NGキーワード混入"
337
+ msgstr ""
338
+
339
+ #: throws_spam_away.class.php:1752
340
+ msgid "ブロック対象IPアドレス"
341
+ msgstr ""
342
+
343
+ #: throws_spam_away.class.php:1755
344
+ msgid "スパム拒否リスト"
345
+ msgstr ""
346
+
347
+ #: throws_spam_away.class.php:1758
348
+ msgid "トラックバックスパム"
349
+ msgstr ""
350
+
351
+ #: throws_spam_away.class.php:1761
352
+ msgid "URL文字列混入数オーバー"
353
+ msgstr ""
354
+
355
+ #: throws_spam_away.class.php:1764
356
+ msgid "一定時間スパム判定エラー"
357
+ msgstr ""
358
+
359
+ #: throws_spam_away.class.php:1767
360
+ msgid "ダミー項目エラー"
361
+ msgstr ""
362
+
363
+ #: throws_spam_away.class.php:1770
364
+ msgid "許可リスト許可IP以外"
365
+ msgstr ""
366
+
367
+ #: throws_spam_away.class.php:1781
368
+ msgid "スパムデータから削除する"
369
+ msgstr ""
370
+
371
+ #: throws_spam_away.class.php:1789
372
+ msgid "ブロック対象IPアドレス追加"
373
+ msgstr ""
374
+
375
+ #: throws_spam_away.class.php:1809
376
+ msgid ""
377
+ "スパムデータベースを使用するにはThrows SPAM Awayのメニュー「設定」から<br/"
378
+ ">「スパムコメント投稿情報を保存しますか?」項目を<strong>「スパムコメント情報"
379
+ "を保存する」</strong>に設定してください"
380
+ msgstr ""
381
+
382
+ #: throws_spam_away.class.php:1825
383
+ msgid "すべてのスパムデータが削除されます。よろしいですか?"
384
+ msgstr ""
385
+
386
+ #: throws_spam_away.class.php:1826
387
+ msgid "すべてのデータを削除する"
388
+ msgstr ""
389
+
390
+ #: throws_spam_away.php:64
391
+ msgid "日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)"
392
+ msgstr ""
393
+
394
+ #: throws_spam_away.php:70
395
+ msgid "日本語を規定文字数以上含まない記事は投稿できませんよ。"
396
+ msgstr ""
397
+
398
+ #: throws_spam_away.php:85
399
+ msgid "NGキーワードが含まれているため投稿できません。"
400
+ msgstr ""
401
+
402
+ #: throws_spam_away.php:88
403
+ msgid "必須キーワードが含まれていないため投稿できません。"
404
+ msgstr ""
405
+
406
+ #: throws_spam_away_comments.php:24
407
+ msgid "You have no comment spam."
408
+ msgstr ""
409
+
410
+ #: throws_spam_away_comments.php:28
411
+ msgid "Spam comments have been deleted."
412
+ msgstr ""
413
+
414
+ #: throws_spam_away_comments.php:30 throws_spam_away_comments.php:38
415
+ #: throws_spam_away_comments.php:67
416
+ msgid "Something Went Wrong,Please Try Again!"
417
+ msgstr ""
418
+
419
+ #: throws_spam_away_comments.php:36 throws_spam_away_comments.php:59
420
+ msgid "All comments have been deleted."
421
+ msgstr ""
422
+
423
+ #: throws_spam_away_comments.php:43
424
+ msgid "Number of all Comments"
425
+ msgstr ""
426
+
427
+ #: throws_spam_away_comments.php:44
428
+ msgid "Number of Spam Comments"
429
+ msgstr ""
430
+
431
+ #: throws_spam_away_comments.php:50
432
+ msgid "Delete all spam comments"
433
+ msgstr ""
434
+
435
+ #: throws_spam_away_comments.php:51
436
+ msgid "Delete all comments"
437
+ msgstr ""
438
+
439
+ #: throws_spam_away_comments.php:54
440
+ msgid "Delete all Comments"
441
+ msgstr ""
442
+
443
+ #: throws_spam_away_comments.php:54
444
+ msgid "I will send. Is it OK?"
445
+ msgstr ""
446
+
447
+ #: throws_spam_away_comments.php:65
448
+ msgid "All Pending comments have been deleted."
449
+ msgstr ""
450
+
451
+ #: throws_spam_away_comments.php:71
452
+ msgid "Number of Pending Comments"
453
+ msgstr ""
454
+
455
+ #: throws_spam_away_comments.php:77
456
+ msgid "Delete all pending comments"
457
+ msgstr ""
458
+
459
+ #: throws_spam_away_comments.php:79
460
+ msgid "Delete all pending Comments"
461
+ msgstr ""
462
+
463
+ #: throws_spam_away_comments.php:84
464
+ msgid "All pending comments have been deleted."
465
+ msgstr ""
466
+
467
+ #: throws_spam_away_comments.php:88
468
+ msgid "Warning : Once Comment Deleted can't be restored!"
469
+ msgstr ""
470
+
471
+ #. Plugin URI of the plugin/theme
472
+ msgid "https://gti.co.jp/throws-spam-away/"
473
+ msgstr ""
474
+
475
+ #. Description of the plugin/theme
476
+ msgid ""
477
+ "コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いな"
478
+ "がらも捨ててしまうプラグイン"
479
+ msgstr ""
480
+
481
+ #. Author of the plugin/theme
482
+ msgid "株式会社ジーティーアイ さとう たけし"
483
+ msgstr ""
484
+
485
+ #. Author URI of the plugin/theme
486
+ msgid "https://gti.co.jp/"
487
+ msgstr ""
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Plugin Name ===
2
  Contributors: tsato
3
- Donate link: http://gti.jp/throws-spam-away
4
  Tags: comments, spam
5
- Requires at least: 3.1
6
- Tested up to: 4.7-RC1
7
- Stable tag: 2.8.2.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -45,18 +45,18 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
45
   指定IPアドレスからの投稿をスパムとして処理します。
46
   以前スパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
47
 
48
-  【ブラックリスト】
49
-   ブラックリストに登録したIPアドレスからの投稿をスパム処理します。
50
 
51
-  【ホワイトリスト】
52
-   ホワイトリストに登録したIPアドレスからの投稿はすべてのフィルタを通しませんので優先的に通常コメントとしてノーチェックで投稿処理がなされます。
53
- ※ホワイトリストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもブロック対象だったとしても優先で通過させます。
54
 
55
-  【ホワイトリストのみ許可するフラグ】
56
-   ホワイトリストに登録したIPアドレスのみ許可するフラグをチェックするとホワイトリスト登録IP以外は無視されるようになります。
57
-   このフラグが付いている場合は本来ノーチェックだったホワイトリストへIPアドレスチェック以外が行われるようになります。
58
 
59
- IPアドレスの指定「ブロックリスト」「ホワイトリスト」共に「改行」区切りで複数入力できますが、「192.168.1.0/24」のようにIPアドレスの範囲指定も可能です。
60
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
61
   [192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否(または優先通過)対象とします。
62
 
@@ -86,138 +86,204 @@ IPアドレスの指定「ブロックリスト」「ホワイトリスト」共
86
  ※コメント投稿時のスパムコメント対応の煩わしさが原因で作ったものですのでスパム判定されたコメントを保持しておりません。
87
 
88
  -- これまでの変更点について
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
  ・バージョン 2.8.2
91
-  2016/12/1
92
-  ロードバランサ経由のクライアントIP取得ができるように HTTP_X_FORWARDED_FOR を取得するようにしました。
93
-  JavaScriptの不具合修正
94
 
95
  ・バージョン 2.8.1
96
- 2016/5/14
97
- ホワイトリストIPアドレスのチェックメソッドの不具合を修正しました。
98
 
99
  ・バージョン 2.8
100
-   2016/5/2
101
-  ホワイトリスト登録IPアドレスだけを許可するフラグを追加
102
-  このフラグが「する」になっている場合は・・・
103
-   ホワイトリストに登録したIPアドレスのみ許可するフラグをチェックするとホワイトリスト登録IP以外は無視されるようになります。
104
-   このフラグが付いている場合は本来ノーチェックだったホワイトリストへIPアドレスチェック以外が行われるようになります。
105
-   このバージョンではホワイトリストをトラックバックには適用しておりません。
106
 
107
  ・バージョン 2.7.1
108
-  2015/11/16
109
  スパム判定の初期値設定を判定メソッド内部に移動。
110
  外部からの利用時にThrows SPAM Away 側の設定が活用できるようにした。
111
  mb_split 関数を explode に変更
112
 
113
  ・バージョン 2.7
114
-  2015/10/24
115
-  スパム判定メソッドを整理し外部から利用できるようにした。
116
 
117
  ・バージョン 2.6.10
118
-  管理画面レイアウト崩れ修正
119
 
120
  ・バージョン2.6.9
121
-  2015/7/25
122
-  すぱむちゃんぷるーの代替スパムフィルタが判定の不具合となる危険性がありましたので一度機能削除しました。
123
-  テキストでリストを記述されている場合はそのまま稼働します。
124
-  ダミー項目機能において一部テーマで隠しフィールドが表示されてしまう不具合報告がありましたので修正しました。
125
 
126
  ・バージョン2.6.8
127
-  2015/5/12
128
-  スパム排除が目的なのにスパムが溜まる矛盾を解決すべく「スパムデータベースへの保存」を デフォルト OFF にしました。
129
 
130
-  スパムデータベースの最小保存期間を 3日から 1日に変更しました。
131
-  スパムデータベースからすべてのデータを削除出来るようになりました。
132
 
133
-  アンインストール時にスパムデータテーブルの削除を行うようにしました。
134
-  またアンインストール時に一部optionsに格納されるパラメータが削除されていなかった不具合を修正しました。
135
   
136
-  WordPress非推奨の部分を一掃しデバッグモードにてエラー(Warning)が表示されていた部分を修正しました。
137
 
138
  ・バージョン2.6.7
139
-  2015/4/3
140
-  コメント欄の無いページではスクリプトの読込みを行わないように制御を追加
141
 
142
  ・バージョン2.6.5
143
-  2014/12/22
144
-  スパムフィルタを自身で設定できるように変更しました。
145
-  選択肢「bsb.spamlookup.net, bsb.empty.us, list.dsbl.org, all.rbl.jp」
146
-  及び自由記入欄にてカンマ区切りでサービスのURLを入力できます。
147
-  ※記述に誤りがありますと通信が返ってこないためコメント出来ない可能性がありますのでご注意ください。
148
 
149
-  スパムデータベースの最小保存期間を 7日から 3日に変更しました。
150
 
151
-  プラグイン作成者のwordpress.orgネームが間違えていた(IDにしていた)ためプラグインページにプロフィールリンクが
152
-  表示されていない大変寂しい結果になっておりました。今バージョンより修正いたします。
153
 
154
  ・バージョン2.6.4
155
-  2014/06/23
156
-  タイトルの文字列をそのまま流用し「日本語」を使うことでフィルタを回避しようとする方法を排除するため
157
-  タイトル文字列を排除してカウントする機能を追加。(デフォルトで効くようになっています。)
158
-  「日本語文字列含有数」については、この「タイトル」に使用されている文字列を除いた数をカウントするようになります。
159
 
160
-  例)タイトルに使用された文字は「えーびーしー」という文字列の場合、「え」「び」「し」「ー」が何度出現してもカウントされません。
161
-    「びしえー」というように文字列を入れ替えても「えー びー しー」とスペースを入れても関係なくカウントされなくなります。
162
 
163
-  JSファイルの $ を jQuery に変更。
164
 
165
  ・バージョン2.6.3
166
-  2014/06/06
167
-  スパムデータベースの表示速度を向上するため
168
-  スパムコメントの表示を個別画面へ移動(エラーをクリック)
169
 
170
-  スパムの区別が「すぱむちゃんぷるー」でも「指定IP」でも同一「ブロックIPアドレス」であったが
171
-  「すぱむちゃんぷるー」を分けて表示するようにした。これによりブラックリストから外せる場合が増えるはずです。
172
 
173
-  管理画面の見栄えを変更しました。
174
 
175
  ・バージョン2.6.2
176
-  スパム対策設定の初期値を長年の研究の末の「最適」であろう設定値にしました。
177
-  デフォルト値として項目の下に記載しています。長年ご利用の方は、参考に調整してください。
178
-  IE8にてJavaScriptエラーとなっていた箇所があり、「tsa_param.js」を修正いたしました。大変ご迷惑をお掛けいたしました。
179
 
180
  ・バージョン2.6.1
181
-  スパムデータベースの表示に時間がかかるため「設定」部分と「スパムデータ」表示画面の2メニュー構成に変更しました。
182
-  すぱむチャンプルーによる捕捉の場合にエラータイプが正しく表示されていない不具合を修正しました。
183
-  スパム投稿内容によって画面が崩れる不具合を修正しました。
184
 
185
  ・バージョン2.6
186
-  コメント欄に隠しフィールドを生成しその項目に入力があればスパム判定する機能を追加。
187
-  スパムデータベースに[error_type]を追加。なにが原因でスパム判定されたかとスパム投稿の内容をスパムデータベースで保存(255バイトのみ)
188
-  スパム一覧に少し表示するようにしました。
189
-  ※データベースを直接参照すれば最新以外のスパム内容もわかります。(wp_)tsa_spamテーブルです。authorとcommentのみ格納しています。
190
 
191
-  個人的にThrows SPAM Awayの設定内容をどこかに保存しておきたい場合がありましたので、そのためのメモ欄を追加しました。
192
-  これは便利機能なだけで本体機能自体とはなんら関係ありませんのでご自由にお使い下さい。
193
 
194
  ・バージョン2.5.2.1
195
-  管理画面の微妙な調整を行いました。
196
 
197
  ・バージョン2.5.2
198
-  バージョン2.5.1でホワイトリスト等機能ブロックが無くなってしまったミステイクがあったため精査し機能を戻しました。
199
-  大変失礼いたしました。設定されていたデータはそのまま残っていると思いますが、保証はいたしかねますのでご確認のほどよろしくお願いいたします。
200
 
201
  ・バージョン2.5.1
202
-  「日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)」の文言表示する際の表示位置をフォーム内部の「送信」ボタン上かフォームの下に設置出来るように変更。
203
-  この文言は前のバージョンまでは
204
-  「 &lt;div id="throwsSpamAway"&gt;日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)&lt;/div&gt;」
205
-  と表示されるようにしておりましたが、この「div」タグを「p」タグに変更。
206
-  また、「コメント欄の下に表示される注意文言」を空白にした場合はタグ自体が挿入されないようにしました。
207
-  どうしても崩れてしまう方は注意文言を空白にして更新するようお願いいたします。
208
-  ※WordPress3.6以降のWordPressテーマ「Twenty Thirteen」で表示が崩れる事象が起きているための対策です。ご迷惑をお掛けしました。大変申し訳ありません。
209
 
210
  ・バージョン2.5
211
-  「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用出来ます!スパムちゃんぷるーでスパム判定する機能です。
212
-  「IPアドレス ホワイトリスト」を導入しました。ホワイトリストに登録されたIPアドレスからの投稿はノーチェックで投稿完了されます。
213
-  ※ホワイトリストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもスパムちゃんぷるーでスパム扱いになったとしても優先で通過させます。
214
-  スパムデータベースの表示期間を指定するようにしました。また表示期間を過ぎたデータを削除することも出来るようにしました。
215
-  テストでスパム投稿したIPアドレスなどをスパムデータベースから削除する機能を付けました。
216
-  スパム投稿データに「スパムちゃんぷるー」の結果も付加しました。
217
 
218
  ・バージョン2.4
219
-  スパム情報収集機能を「スパムコメント情報を保存する」にした場合に限り、「一定時間内スパム認定機能」が作動するように出来ます。
220
- この「○」を設定します→《○分以内に○回スパムとなったら○分間、当該IPからのコメントはスパム扱いする設定》
221
  例えば、「10分以内に2回スパムとなったら10分間、当該IPからのコメントはスパム扱いする」とした場合は
222
  過去(今から)10分前から今まで2回スパム扱いとなったIPからの投稿は3回目以降スパム扱いとなります。
223
  そのため、10分以内に3回目のスパムを作ってしまったためそこから10分以上経過しないとずっとスパム扱いになってしまいます。
@@ -228,25 +294,25 @@ IPアドレスの指定「ブロックリスト」「ホワイトリスト」共
228
  あまり長い時間を指定しますとコメント欄への反映が遅くなりますので気をつけてください。
229
  5~10分程度を推奨します。
230
 
231
-  スパム投稿の一覧を見やすくしました。
232
-   これまでスパム投稿情報の表示が日付が一覧で縦表示していたため見づらいものとなっておりました。
233
-   今回、横軸にその情報を追加しました。
234
-   また、スパム投稿リストの表示も改良し、IPアドレス・スパム投稿数・最終投稿日でソートを掛けられるようにしました。
235
 
236
-  IPアドレス指定を「カンマ区切り」から「改行区切り」へ変更。スパム投稿IPアドレス情報に下記データ追加
237
  ○IPアドレス
238
  ○ホスト名が特定出来た場合はホスト名
239
  ○このIPアドレスからの最終投稿日時
240
  ○このIPアドレスからスパム投稿を受けた記事(リンク)
241
 
242
-  このバージョンよりファイル構成が変更になり、今まで「throws_spam_away.php」にプログラムのすべてが存在しましたが、プロセスの部分を
243
-  「throws_spam_away.php」に残し、クラスの部分を「throws_spam_away.class.php」に移しました。
244
-  これにより、throws_spam_away.class.php」を外部から読込みメソッドを使用することを目論んでいます。
245
-  ※まだ実験段階です。
246
 
247
  ・バージョン2.3.1, 2.3.2 不具合修正 仕様は2.3のままです。
248
  ・バージョン2.3スパムコメント数を保持出来るようにしました。設定を変更しないと機能しませんのでご注意ください。
249
-  保持データは下記の通り
250
  ○投稿日時
251
  ○投稿された記事ID
252
  ○投稿元IPアドレス
@@ -258,30 +324,30 @@ IPアドレスの指定「ブロックリスト」「ホワイトリスト」共
258
  (トラックバックでも同様に名前もNGワード対象に追加しています。)
259
 
260
  ・バージョン2.2 'http'を許容数(初期設定 3)を超えて包含する場合にエラーとする機能を付けました。
261
-  導入後すぐに機能しはじめます。制限数の増減も行えます。
262
-  <strong>(注意!)不要な方は設定の変更でこの機能をOFFにしてください</strong>
263
-  ※インストールしただけで最大限活用できるように初期設定値を設定いたしました。日本語スパム投稿(おもにリンクを多数掲載するもの)に対抗するための追加機能です。ご理解のほど、よろしくお願いします。
264
 
265
  ・バージョン2.1.1 一部レンタルサーバー等の設定によってコメント投稿後エラーまたは白画面になってしまう不具合を修正
266
-  ※確認したレンタルサーバー(さくらレンタルサーバー)※コメント欄に独自修正を行うような特殊な条件により発生する模様
267
 
268
  ・バージョン2.1でIPアドレスの範囲指定を可能にしました。
269
 
270
  ・バージョン2.0で、WordPressのcommentsテーブルを検索し「spam」扱いとなったコメントのIPを収集しそのIPからの投稿を無視出来る機能と任意のIPアドレスからの投稿を無視出来る機能をつけました。
271
 
272
  ・バージョン1.7で、元の画面に戻ってくる際の挙動を修正しました。
273
-  エラー画面表示の時間を「0」に設定していた場合はエラー画面を一切介さずリダイレクトするようにしました。
274
-  0以上の場合の挙動は以前と変わらずJavaScriptで時間になったら戻ってきます。
275
 
276
  ・バージョン1.6にてNGキーワードとは逆にコレが入っていないとダメという「必須キーワード」の設定が出来るようにしました。
277
-  日本語を入れれば良いため通ってしまいやすい「中国語」への配慮です。「が」や「の」や「は」など、日本語文章が成り立つ上で必ず使用するであろう「ひらがな」を入れることで効力が発揮されると思います。
278
 
279
  ・バージョン1.5では「トラックバック」に対しても同様の規制を入れられるようになりました。
280
-  トラックバック記事の内容に日本語を含まないものを無視します。
281
-  加えて、トラックバック記事内にこちらのサイトのURLが含まれない場合、日本語が含まれていても無視するかどうかの設定も出来るようにしました。
282
 
283
 
284
- 制作:佐藤 毅(さとう たけし) <a href="http://gti.jp/" target="_blank">福岡のシステム開発 ホームページ制作</a> 株式会社ジーティーアイ代表
285
 
286
  == Installation ==
287
 
@@ -301,23 +367,100 @@ e.g.
301
  2. Activate the plugin through the 'Plugins' menu in WordPress
302
 
303
  == Frequently Asked Questions ==
304
- 質問やご要望はSupportまたは弊社お問い合わせ(http://gti.jp/)へお願いします!
305
 
306
  == Screenshots ==
307
 
308
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309
  = 2.8.2 =
310
   ロードバランサ経由のクライアントIP取得ができるように HTTP_X_FORWARDED_FOR を取得するようにしました。
311
   JavaScriptの不具合修正
312
 
313
  = 2.8.1 =
314
-  ホワイトリスト判定に不具合がありロジックを修正しました。
315
 
316
  = 2.8 =
317
-  ホワイトリスト登録IPアドレスだけを許可するフラグを追加
318
   このフラグが「する」担っている場合は・・・
319
-   ホワイトリストに登録したIPアドレスのみ許可するフラグをチェックするとホワイトリスト登録IP以外は無視されるようになります。
320
-   このフラグが付いている場合は本来ノーチェックだったホワイトリストへIPアドレスチェック以外が行われるようになります。
321
 
322
  = 2.7 =
323
   スパム判定メソッドの整理を実施。
@@ -355,7 +498,7 @@ e.g.
355
   選択肢「bsb.spamlookup.net, bsb.empty.us, list.dsbl.org, all.rbl.jp」
356
   及び自由記入欄にてカンマ区切りでサービスのURLを入力できます。
357
   ※記述に誤りがありますと通信が返ってこないためコメント出来ない可能性がありますのでご注意ください。
358
-  ※スパムフィルタが変更できることによって現在まで「スパムブラックリスト」でエラーとなっていた投稿に対し
359
    その時点では有効だったフィルタが閲覧時に入れ替えがあると「スパムフィルター:未検出」となる場合があります。
360
    ご了承ください。
361
 
@@ -381,7 +524,7 @@ e.g.
381
   スパムコメントの表示を個別画面へ移動(エラーをクリック)
382
 
383
   スパムの区別が「すぱむちゃんぷるー」でも「指定IP」でも同一「ブロックIPアドレス」であったが
384
-  「すぱむちゃんぷるー」を分けて表示するようにした。これによりブラックリストから外せる場合が増えるはずです。
385
 
386
   管理画面の見栄えを変更しました。
387
 
@@ -400,9 +543,9 @@ e.g.
400
  = 2.5 =
401
  ・「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用出来ます。
402
    スパムちゃんぷるーでスパム判定する機能です。
403
- ・「IPアドレス ホワイトリスト」を導入しました。
404
-   ホワイトリストに登録されたIPアドレスからの投稿はノーチェックで投稿完了されます。
405
-   ※ホワイトリストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもスパムちゃんぷるーでスパム扱いになったとしても優先で通過させます。
406
  ・スパムデータベースの表示期間を指定するようにしました。また表示期間を過ぎたデータを削除することも出来るようにしました。
407
  ・テストでスパム投稿したIPアドレスなどをスパムデータベースから削除する機能を付けました。
408
  ・スパム投稿データに「スパムちゃんぷるー」の結果も付加しました。
1
  === Plugin Name ===
2
  Contributors: tsato
3
+ Donate link: https://www.gti.co.jp/throws-spam-away
4
  Tags: comments, spam
5
+ Requires at least: 5.1
6
+ Tested up to: 5.9.3
7
+ Stable tag: 3.3.2
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
45
   指定IPアドレスからの投稿をスパムとして処理します。
46
   以前スパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
47
 
48
+  【拒否リスト】
49
+   拒否リストに登録したIPアドレスからの投稿をスパム処理します。
50
 
51
+  【許可リスト】
52
+   許可リストに登録したIPアドレスからの投稿はすべてのフィルタを通しませんので優先的に通常コメントとしてノーチェックで投稿処理がなされます。
53
+ ※許可リストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもブロック対象だったとしても優先で通過させます。
54
 
55
+  【許可リストのみ許可するフラグ】
56
+   許可リストに登録したIPアドレスのみ許可するフラグをチェックすると許可リスト登録IP以外は無視されるようになります。
57
+   このフラグが付いている場合は本来ノーチェックだった許可リストへIPアドレスチェック以外が行われるようになります。
58
 
59
+ IPアドレスの指定「ブロックリスト」「許可リスト」共に「改行」区切りで複数入力できますが、「192.168.1.0/24」のようにIPアドレスの範囲指定も可能です。
60
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
61
   [192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否(または優先通過)対象とします。
62
 
86
  ※コメント投稿時のスパムコメント対応の煩わしさが原因で作ったものですのでスパム判定されたコメントを保持しておりません。
87
 
88
  -- これまでの変更点について
89
+ ・バージョン 3.3.2
90
+ 変数の初期化漏れを修正。
91
+
92
+ ・バージョン 3.3.1
93
+ スパムコメント削除フォーム CSRF対策
94
+ 「コメントをすべて削除」機能削除
95
+
96
+ ・バージョン 3.3
97
+ スパム防止メッセージを 送信ボタン上にも置けるように選択肢追加
98
+
99
+ ・バージョン 3.2.6
100
+ WordPress5.9 対応確認
101
+ コード見直し
102
+
103
+ ・バージョン 3.2.5
104
+ スパムデータ削除時のDELETE発行処理を修正
105
+ テーブル存在確認方法を変更
106
+
107
+ ・バージョン 3.2.4
108
+ スパムデータ削除時のDELETE発行処理を改修
109
+
110
+ ・バージョン 3.2.2, 3.2.3
111
+ テンプレートの作りによって JavaScript エラーがあったため修正
112
+
113
+ ・バージョン 3.2.1
114
+ テーマによって JavaScript エラーがあったため修正
115
+
116
+ ・バージョン 3.2
117
+ jQuery で処理していた部分を JavaScript に書き換え。
118
+ pre_comment_on_post から preprocess_comment にて処理を行うように変更
119
+ IP拒否リスト、許可リスト の不具合を修正
120
+
121
+ ・バージョン 3.1.4
122
+ 表記の変更を行いました。
123
+
124
+ ・バージョン 3.1.3
125
+ WordPress5.4 動作確認
126
+ PHP7.4 対応確認
127
+
128
+ ・バージョン 3.1.2
129
+ throws_spam_away.class.php を単体利用した際に出力される Warningを修正
130
+
131
+ ・バージョン 3.1.1
132
+ PHP7.3までの対応
133
+
134
+ ・バージョン 3.0
135
+ スパムコメントの一括削除機能
136
+
137
+ ・バージョン 2.9
138
+ 国際化対応
139
+ コメントバリデーション部分にapply_filters 2つ追加
140
+
141
+ $result_valid = apply_filters( 'tsa_validate_comment',
142
+ $this->validate_comment(
143
+ $author,
144
+ $comment,
145
+ array(
146
+ 'post_id' => $post_id,
147
+ 'tsa_on_flg' => $tsa_on_flg
148
+ )
149
+ ), $author, $comment, $post_id, $tsa_on_flg );
150
+
151
+ return apply_filters( 'tsa_validate_comment_result', $result_valid );
152
+
153
+ バリデーション方法追加または変更可能にし
154
+ バリデーション結果自体も変更可能にしました。
155
 
156
  ・バージョン 2.8.2
157
+ 2016/12/1
158
+ ロードバランサ経由のクライアントIP取得ができるように HTTP_X_FORWARDED_FOR を取得するようにしました。
159
+ JavaScriptの不具合修正
160
 
161
  ・バージョン 2.8.1
162
+ 2016/5/14
163
+ 許可リストIPアドレスのチェックメソッドの不具合を修正しました。
164
 
165
  ・バージョン 2.8
166
+ 2016/5/2
167
+ 許可リスト登録IPアドレスだけを許可するフラグを追加
168
+ このフラグが「する」になっている場合は・・・
169
+   許可リストに登録したIPアドレスのみ許可するフラグをチェックすると許可リスト登録IP以外は無視されるようになります。
170
+   このフラグが付いている場合は本来ノーチェックだった許可リストへIPアドレスチェック以外が行われるようになります。
171
+   このバージョンでは許可リストをトラックバックには適用しておりません。
172
 
173
  ・バージョン 2.7.1
174
+ 2015/11/16
175
  スパム判定の初期値設定を判定メソッド内部に移動。
176
  外部からの利用時にThrows SPAM Away 側の設定が活用できるようにした。
177
  mb_split 関数を explode に変更
178
 
179
  ・バージョン 2.7
180
+ 2015/10/24
181
+ スパム判定メソッドを整理し外部から利用できるようにした。
182
 
183
  ・バージョン 2.6.10
184
+ 管理画面レイアウト崩れ修正
185
 
186
  ・バージョン2.6.9
187
+ 2015/7/25
188
+ すぱむちゃんぷるーの代替スパムフィルタが判定の不具合となる危険性がありましたので一度機能削除しました。
189
+ テキストでリストを記述されている場合はそのまま稼働します。
190
+ ダミー項目機能において一部テーマで隠しフィールドが表示されてしまう不具合報告がありましたので修正しました。
191
 
192
  ・バージョン2.6.8
193
+ 2015/5/12
194
+ スパム排除が目的なのにスパムが溜まる矛盾を解決すべく「スパムデータベースへの保存」を デフォルト OFF にしました。
195
 
196
+ スパムデータベースの最小保存期間を 3日から 1日に変更しました。
197
+ スパムデータベースからすべてのデータを削除出来るようになりました。
198
 
199
+ アンインストール時にスパムデータテーブルの削除を行うようにしました。
200
+ またアンインストール時に一部optionsに格納されるパラメータが削除されていなかった不具合を修正しました。
201
   
202
+ WordPress非推奨の部分を一掃しデバッグモードにてエラー(Warning)が表示されていた部分を修正しました。
203
 
204
  ・バージョン2.6.7
205
+ 2015/4/3
206
+ コメント欄の無いページではスクリプトの読込みを行わないように制御を追加
207
 
208
  ・バージョン2.6.5
209
+ 2014/12/22
210
+ スパムフィルタを自身で設定できるように変更しました。
211
+ 選択肢「bsb.spamlookup.net, bsb.empty.us, list.dsbl.org, all.rbl.jp」
212
+ 及び自由記入欄にてカンマ区切りでサービスのURLを入力できます。
213
+ ※記述に誤りがありますと通信が返ってこないためコメント出来ない可能性がありますのでご注意ください。
214
 
215
+ スパムデータベースの最小保存期間を 7日から 3日に変更しました。
216
 
217
+ プラグイン作成者のwordpress.orgネームが間違えていた(IDにしていた)ためプラグインページにプロフィールリンクが
218
+ 表示されていない大変寂しい結果になっておりました。今バージョンより修正いたします。
219
 
220
  ・バージョン2.6.4
221
+ 2014/06/23
222
+ タイトルの文字列をそのまま流用し「日本語」を使うことでフィルタを回避しようとする方法を排除するため
223
+ タイトル文字列を排除してカウントする機能を追加。(デフォルトで効くようになっています。)
224
+ 「日本語文字列含有数」については、この「タイトル」に使用されている文字列を除いた数をカウントするようになります。
225
 
226
+ 例)タイトルに使用された文字は「えーびーしー」という文字列の場合、「え」「び」「し」「ー」が何度出現してもカウントされません。
227
+   「びしえー」というように文字列を入れ替えても「えー びー しー」とスペースを入れても関係なくカウントされなくなります。
228
 
229
+ JSファイルの $ を jQuery に変更。
230
 
231
  ・バージョン2.6.3
232
+ 2014/06/06
233
+ スパムデータベースの表示速度を向上するため
234
+ スパムコメントの表示を個別画面へ移動(エラーをクリック)
235
 
236
+ スパムの区別が「すぱむちゃんぷるー」でも「指定IP」でも同一「ブロックIPアドレス」であったが
237
+ 「すぱむちゃんぷるー」を分けて表示するようにした。これにより拒否リストから外せる場合が増えるはずです。
238
 
239
+ 管理画面の見栄えを変更しました。
240
 
241
  ・バージョン2.6.2
242
+ スパム対策設定の初期値を長年の研究の末の「最適」であろう設定値にしました。
243
+ デフォルト値として項目の下に記載しています。長年ご利用の方は、参考に調整してください。
244
+ IE8にてJavaScriptエラーとなっていた箇所があり、「tsa_param.js」を修正いたしました。大変ご迷惑をお掛けいたしました。
245
 
246
  ・バージョン2.6.1
247
+ スパムデータベースの表示に時間がかかるため「設定」部分と「スパムデータ」表示画面の2メニュー構成に変更しました。
248
+ すぱむチャンプルーによる捕捉の場合にエラータイプが正しく表示されていない不具合を修正しました。
249
+ スパム投稿内容によって画面が崩れる不具合を修正しました。
250
 
251
  ・バージョン2.6
252
+ コメント欄に隠しフィールドを生成しその項目に入力があればスパム判定する機能を追加。
253
+ スパムデータベースに[error_type]を追加。なにが原因でスパム判定されたかとスパム投稿の内容をスパムデータベースで保存(255バイトのみ)
254
+ スパム一覧に少し表示するようにしました。
255
+ ※データベースを直接参照すれば最新以外のスパム内容もわかります。(wp_)tsa_spamテーブルです。authorとcommentのみ格納しています。
256
 
257
+ 個人的にThrows SPAM Awayの設定内容をどこかに保存しておきたい場合がありましたので、そのためのメモ欄を追加しました。
258
+ これは便利機能なだけで本体機能自体とはなんら関係ありませんのでご自由にお使い下さい。
259
 
260
  ・バージョン2.5.2.1
261
+ 管理画面の微妙な調整を行いました。
262
 
263
  ・バージョン2.5.2
264
+ バージョン2.5.1で許可リスト等機能ブロックが無くなってしまったミステイクがあったため精査し機能を戻しました。
265
+ 大変失礼いたしました。設定されていたデータはそのまま残っていると思いますが、保証はいたしかねますのでご確認のほどよろしくお願いいたします。
266
 
267
  ・バージョン2.5.1
268
+ 「日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)」の文言表示する際の表示位置をフォーム内部の「送信」ボタン上かフォームの下に設置出来るように変更。
269
+ この文言は前のバージョンまでは
270
+ 「 &lt;div id="throwsSpamAway"&gt;日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)&lt;/div&gt;」
271
+ と表示されるようにしておりましたが、この「div」タグを「p」タグに変更。
272
+ また、「コメント欄の下に表示される注意文言」を空白にした場合はタグ自体が挿入されないようにしました。
273
+ どうしても崩れてしまう方は注意文言を空白にして更新するようお願いいたします。
274
+ ※WordPress3.6以降のWordPressテーマ「Twenty Thirteen」で表示が崩れる事象が起きているための対策です。ご迷惑をお掛けしました。大変申し訳ありません。
275
 
276
  ・バージョン2.5
277
+ 「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用出来ます!スパムちゃんぷるーでスパム判定する機能です。
278
+ 「IPアドレス 許可リスト」を導入しました。許可リストに登録されたIPアドレスからの投稿はノーチェックで投稿完了されます。
279
+ ※許可リストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもスパムちゃんぷるーでスパム扱いになったとしても優先で通過させます。
280
+ スパムデータベースの表示期間を指定するようにしました。また表示期間を過ぎたデータを削除することも出来るようにしました。
281
+ テストでスパム投稿したIPアドレスなどをスパムデータベースから削除する機能を付けました。
282
+ スパム投稿データに「スパムちゃんぷるー」の結果も付加しました。
283
 
284
  ・バージョン2.4
285
+ スパム情報収集機能を「スパムコメント情報を保存する」にした場合に限り、「一定時間内スパム認定機能」が作動するように出来ます。
286
+ この「○」を設定します→《○分以内に○回スパムとなったら○分間、当該IPからのコメントはスパム扱いする設定》
287
  例えば、「10分以内に2回スパムとなったら10分間、当該IPからのコメントはスパム扱いする」とした場合は
288
  過去(今から)10分前から今まで2回スパム扱いとなったIPからの投稿は3回目以降スパム扱いとなります。
289
  そのため、10分以内に3回目のスパムを作ってしまったためそこから10分以上経過しないとずっとスパム扱いになってしまいます。
294
  あまり長い時間を指定しますとコメント欄への反映が遅くなりますので気をつけてください。
295
  5~10分程度を推奨します。
296
 
297
+ スパム投稿の一覧を見やすくしました。
298
+  これまでスパム投稿情報の表示が日付が一覧で縦表示していたため見づらいものとなっておりました。
299
+  今回、横軸にその情報を追加しました。
300
+  また、スパム投稿リストの表示も改良し、IPアドレス・スパム投稿数・最終投稿日でソートを掛けられるようにしました。
301
 
302
+ IPアドレス指定を「カンマ区切り」から「改行区切り」へ変更。スパム投稿IPアドレス情報に下記データ追加
303
  ○IPアドレス
304
  ○ホスト名が特定出来た場合はホスト名
305
  ○このIPアドレスからの最終投稿日時
306
  ○このIPアドレスからスパム投稿を受けた記事(リンク)
307
 
308
+ このバージョンよりファイル構成が変更になり、今まで「throws_spam_away.php」にプログラムのすべてが存在しましたが、プロセスの部分を
309
+ 「throws_spam_away.php」に残し、クラスの部分を「throws_spam_away.class.php」に移しました。
310
+ これにより、throws_spam_away.class.php」を外部から読込みメソッドを使用することを目論んでいます。
311
+ ※まだ実験段階です。
312
 
313
  ・バージョン2.3.1, 2.3.2 不具合修正 仕様は2.3のままです。
314
  ・バージョン2.3スパムコメント数を保持出来るようにしました。設定を変更しないと機能しませんのでご注意ください。
315
+ 保持データは下記の通り
316
  ○投稿日時
317
  ○投稿された記事ID
318
  ○投稿元IPアドレス
324
  (トラックバックでも同様に名前もNGワード対象に追加しています。)
325
 
326
  ・バージョン2.2 'http'を許容数(初期設定 3)を超えて包含する場合にエラーとする機能を付けました。
327
+ 導入後すぐに機能しはじめます。制限数の増減も行えます。
328
+ <strong>(注意!)不要な方は設定の変更でこの機能をOFFにしてください</strong>
329
+ ※インストールしただけで最大限活用できるように初期設定値を設定いたしました。日本語スパム投稿(おもにリンクを多数掲載するもの)に対抗するための追加機能です。ご理解のほど、よろしくお願いします。
330
 
331
  ・バージョン2.1.1 一部レンタルサーバー等の設定によってコメント投稿後エラーまたは白画面になってしまう不具合を修正
332
+ ※確認したレンタルサーバー(さくらレンタルサーバー)※コメント欄に独自修正を行うような特殊な条件により発生する模様
333
 
334
  ・バージョン2.1でIPアドレスの範囲指定を可能にしました。
335
 
336
  ・バージョン2.0で、WordPressのcommentsテーブルを検索し「spam」扱いとなったコメントのIPを収集しそのIPからの投稿を無視出来る機能と任意のIPアドレスからの投稿を無視出来る機能をつけました。
337
 
338
  ・バージョン1.7で、元の画面に戻ってくる際の挙動を修正しました。
339
+ エラー画面表示の時間を「0」に設定していた場合はエラー画面を一切介さずリダイレクトするようにしました。
340
+ 0以上の場合の挙動は以前と変わらずJavaScriptで時間になったら戻ってきます。
341
 
342
  ・バージョン1.6にてNGキーワードとは逆にコレが入っていないとダメという「必須キーワード」の設定が出来るようにしました。
343
+ 日本語を入れれば良いため通ってしまいやすい「中国語」への配慮です。「が」や「の」や「は」など、日本語文章が成り立つ上で必ず使用するであろう「ひらがな」を入れることで効力が発揮されると思います。
344
 
345
  ・バージョン1.5では「トラックバック」に対しても同様の規制を入れられるようになりました。
346
+ トラックバック記事の内容に日本語を含まないものを無視します。
347
+ 加えて、トラックバック記事内にこちらのサイトのURLが含まれない場合、日本語が含まれていても無視するかどうかの設定も出来るようにしました。
348
 
349
 
350
+ 制作:佐藤 毅(さとう たけし) <a href="https://gti.co.jp/" target="_blank">福岡のシステム開発 ホームページ制作</a> 株式会社ジーティーアイ代表
351
 
352
  == Installation ==
353
 
367
  2. Activate the plugin through the 'Plugins' menu in WordPress
368
 
369
  == Frequently Asked Questions ==
370
+ 質問やご要望はSupportまたは弊社お問い合わせ(https://gti.co.jp/)へお願いします!
371
 
372
  == Screenshots ==
373
 
374
  == Changelog ==
375
+ = 3.3.2 =
376
+ 変数の初期化漏れを修正。
377
+
378
+ = 3.3.1 =
379
+ スパムコメント削除フォーム CSRF対策
380
+ 「コメントをすべて削除」機能削除
381
+
382
+ = 3.3 =
383
+ スパム防止メッセージを 送信ボタン上にも置けるように選択肢追加
384
+
385
+ = 3.2.6 =
386
+ WordPress 5.9 動作確認
387
+ 最低限バージョンを 3.1 から 5.2 に変更
388
+ コードの見直し
389
+
390
+ = 3.2.5.1 =
391
+ WordPress5.8.2 動作確認
392
+ PHP8.0.13での動作確認
393
+
394
+ = 3.2.5 =
395
+ スパムデータ削除時のDELETE発行処理を修正
396
+ テーブル存在確認方法を変更
397
+
398
+ = 3.2.4 =
399
+ スパムデータ削除時のDELETE発行処理を改修
400
+
401
+ = 3.2.2, 3.2.3 =
402
+ テンプレートの作りによって JavaScript エラーがあったため修正
403
+
404
+ = 3.2.1 =
405
+ テーマによって JavaScript エラーがあったため修正
406
+
407
+ = 3.2 =
408
+ jQuery で処理していた部分を JavaScript に書き換え。
409
+ pre_comment_on_post から preprocess_comment にて処理を行うように変更
410
+ IP拒否リスト、許可リスト の不具合を修正
411
+
412
+ = 3.1.4 =
413
+ 表記の変更を行いました。
414
+
415
+ = 3.1.3 =
416
+ WordPress 5.4 動作確認
417
+ PHP7.4 対応確認
418
+
419
+ = 3.1.2 =
420
+ throws_spam_away.class.php を単体利用した際に出力される Warningを修正
421
+
422
+ = 3.1.1 =
423
+ PHP7.3までの対応
424
+
425
+ = 3.0.2 =
426
+ comments_open() を $post->comment_status の判定に置き換え
427
+
428
+ = 3.0 =
429
+ ・バージョン 3.0
430
+ "spam" が付加されているコメントの一括削除機能追加
431
+
432
+ = 2.9 =
433
+ ・バージョン 2.9
434
+  国際化対応
435
+  コメントバリデーション部分にapply_filters 2つ追加
436
+
437
+ $result_valid = apply_filters( 'tsa_validate_comment',
438
+ $this->validate_comment(
439
+ $author,
440
+ $comment,
441
+ array(
442
+ 'post_id' => $post_id,
443
+ 'tsa_on_flg' => $tsa_on_flg
444
+ )
445
+ ), $author, $comment, $post_id, $tsa_on_flg );
446
+
447
+ return apply_filters( 'tsa_validate_comment_result', $result_valid );
448
+
449
+  バリデーション方法追加または変更可能にし
450
+  バリデーション結果自体も変更可能にしました。
451
+
452
  = 2.8.2 =
453
   ロードバランサ経由のクライアントIP取得ができるように HTTP_X_FORWARDED_FOR を取得するようにしました。
454
   JavaScriptの不具合修正
455
 
456
  = 2.8.1 =
457
+  許可リスト判定に不具合がありロジックを修正しました。
458
 
459
  = 2.8 =
460
+  許可リスト登録IPアドレスだけを許可するフラグを追加
461
   このフラグが「する」担っている場合は・・・
462
+   許可リストに登録したIPアドレスのみ許可するフラグをチェックすると許可リスト登録IP以外は無視されるようになります。
463
+   このフラグが付いている場合は本来ノーチェックだった許可リストへIPアドレスチェック以外が行われるようになります。
464
 
465
  = 2.7 =
466
   スパム判定メソッドの整理を実施。
498
   選択肢「bsb.spamlookup.net, bsb.empty.us, list.dsbl.org, all.rbl.jp」
499
   及び自由記入欄にてカンマ区切りでサービスのURLを入力できます。
500
   ※記述に誤りがありますと通信が返ってこないためコメント出来ない可能性がありますのでご注意ください。
501
+  ※スパムフィルタが変更できることによって現在まで「スパム拒否リスト」でエラーとなっていた投稿に対し
502
    その時点では有効だったフィルタが閲覧時に入れ替えがあると「スパムフィルター:未検出」となる場合があります。
503
    ご了承ください。
504
 
524
   スパムコメントの表示を個別画面へ移動(エラーをクリック)
525
 
526
   スパムの区別が「すぱむちゃんぷるー」でも「指定IP」でも同一「ブロックIPアドレス」であったが
527
+  「すぱむちゃんぷるー」を分けて表示するようにした。これにより拒否リストから外せる場合が増えるはずです。
528
 
529
   管理画面の見栄えを変更しました。
530
 
543
  = 2.5 =
544
  ・「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用出来ます。
545
    スパムちゃんぷるーでスパム判定する機能です。
546
+ ・「IPアドレス 許可リスト」を導入しました。
547
+   許可リストに登録されたIPアドレスからの投稿はノーチェックで投稿完了されます。
548
+   ※許可リストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもスパムちゃんぷるーでスパム扱いになったとしても優先で通過させます。
549
  ・スパムデータベースの表示期間を指定するようにしました。また表示期間を過ぎたデータを削除することも出来るようにしました。
550
  ・テストでスパム投稿したIPアドレスなどをスパムデータベースから削除する機能を付けました。
551
  ・スパム投稿データに「スパムちゃんぷるー」の結果も付加しました。
throws_spam_away.class.php CHANGED
@@ -1,28 +1,35 @@
1
  <?php
 
2
  /**
3
  *
4
  * <p>ThrowsSpamAway</p> Class
5
  * WordPress's Plugin
6
- * @author Takeshi Satoh@GTI Inc. 2016
7
- * @version 2.8.2
8
  */
9
  class ThrowsSpamAway {
10
 
11
- // データベースのversion
12
- var $table_name = NULL;
13
 
14
- var $error_type = NULL;
 
 
 
15
 
 
 
 
16
  public function __construct() {
17
- global $default_spam_data_save;
18
  global $tsa_spam_tbl_name;
19
  global $wpdb;
 
 
20
  // Activate
21
  register_activation_hook( __FILE__, array( $this, 'activate' ) );
22
 
23
  // エラー記号
24
- if ( !defined('MUST_WORD') ) {
25
- define( 'MUST_WORD' ,'must_word' );
26
  define( 'NG_WORD', 'ng_word' );
27
  define( 'BLOCK_IP', 'block_ip' );
28
  define( 'SPAM_BLACKLIST', 'spam_champuru' );
@@ -31,9 +38,9 @@ class ThrowsSpamAway {
31
  define( 'DUMMY_FIELD', 'dummy_param_field' );
32
 
33
  define( 'SPAM_TRACKBACK', 'spam_trackback' );
34
- define( 'NOT_JAPANESE', 'not_japanese');
35
 
36
- define( 'NOT_IN_WHITELIST_IP', 'not_in_whitelist_ip');
37
  }
38
 
39
  // 接頭辞(wp_)を付けてテーブル名を設定
@@ -42,17 +49,21 @@ class ThrowsSpamAway {
42
  // 管理画面メニュー追加
43
  add_action( 'admin_menu', array( $this, 'admin_menu' ) );
44
 
45
- global $default_spam_keep_day_count;
46
- global $lower_spam_keep_day_count;
47
 
48
  // 保存期間終了したデータ削除
49
- $skdc = intval( get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count ) );
50
- if ( $skdc < $lower_spam_keep_day_count ) { $skdc = $lower_spam_keep_day_count; }
 
 
51
  if ( get_option( 'tsa_spam_data_delete_flg', '' ) == '1' ) {
52
  // 期間 get_option( 'tsa_spam_keep_day_count' ) 日
53
- $wpdb->query(
54
- 'DELETE FROM '.$this->table_name." WHERE post_date < '".gmdate( 'Y-m-d 23:59:59', current_time( 'timestamp' ) - 86400 * $skdc )."'"
55
- );
 
 
56
  }
57
  }
58
 
@@ -60,49 +71,49 @@ class ThrowsSpamAway {
60
  * プラグインインストール後 有効化時処理
61
  */
62
  function activate() {
63
- global $default_dummy_param_field_flg, $default_on_flg, $default_without_title_str;
64
- global $default_without_title_str, $default_back_second, $default_caution_msg;
65
- global $default_caution_msg_point, $default_error_msg, $default_url_count_check_flg;
66
- global $default_ok_url_count, $default_url_count_over_error_msg, $default_ng_key_error_msg;
67
- global $default_must_key_error_msg, $default_tb_on_flg, $default_tb_url_flg;
68
  //global $default_spam_champuru_hosts,
69
- global $default_spam_champuru_by_text, $default_spam_champuru_flg;
70
- global $default_ip_block_from_spam_chk_flg, $default_block_ip_address_error_msg, $default_spam_data_save;
71
- global $default_spam_data_delete_flg, $default_spam_keep_day_count, $lower_spam_keep_day_count;
72
- global $default_spam_limit_flg, $default_spam_limit_minutes, $default_spam_limit_count;
73
- global $default_spam_limit_over_interval, $default_spam_limit_over_interval_error_msg;
74
- global $default_only_whitelist_ip_flg;
75
 
76
  // 初期設定値
77
- update_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
78
- update_option( 'tsa_on_flg', $default_on_flg);
79
- update_option( 'tsa_without_title_str', $default_without_title_str );
80
- update_option( 'tsa_japanese_string_min_count', $default_japanese_string_min_count );
81
- update_option( 'tsa_back_second', $default_back_second );
82
- update_option( 'tsa_caution_msg', $default_caution_msg );
83
- update_option( 'tsa_caution_msg_point', $default_caution_msg_point );
84
- update_option( 'tsa_error_msg', $default_error_msg );
85
- update_option( 'tsa_url_count_check_flg', $default_url_count_check_flg );
86
- update_option( 'tsa_ok_url_count', $default_ok_url_count );
87
- update_option( 'tsa_url_count_over_error_msg', $default_url_count_over_error_msg );
88
- update_option( 'tsa_ng_key_error_message', $default_ng_key_error_msg );
89
- update_option( 'tsa_must_key_error_message', $default_must_key_error_msg );
90
- update_option( 'tsa_tb_on_flg', $default_tb_on_flg );
91
- update_option( 'tsa_tb_url_flg', $default_tb_url_flg );
92
- delete_option( 'tsa_spam_champuru_hosts');
93
- update_option( 'tsa_spam_champuru_by_text', $default_spam_champuru_by_text );
94
- update_option( 'tsa_spam_champuru_flg', $default_spam_champuru_flg );
95
- update_option( 'tsa_ip_block_from_spam_chk_flg', $default_ip_block_from_spam_chk_flg );
96
- update_option( 'tsa_block_ip_address_error_message', $default_block_ip_address_error_msg );
97
- update_option( 'tsa_spam_data_save', $default_spam_data_save );
98
- update_option( 'tsa_spam_data_delete_flg', $default_spam_data_delete_flg );
99
- update_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count );
100
- update_option( 'tsa_spam_limit_flg', $default_spam_limit_flg );
101
- update_option( 'tsa_spam_limit_minutes', $default_spam_limit_minutes );
102
- update_option( 'tsa_spam_limit_count', $default_spam_limit_count );
103
- update_option( 'tsa_spam_limit_over_interval', $default_spam_limit_over_interval );
104
- update_option( 'tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg );
105
- update_option( 'tsa_only_whitelist_ip_flg', $default_only_whitelist_ip_flg );
106
 
107
  // スパムデータベース作成
108
  $this->tsa_create_tbl();
@@ -126,10 +137,10 @@ class ThrowsSpamAway {
126
 
127
  $table_name = $wpdb->prefix . $tsa_spam_tbl_name;
128
  // テーブル作成要フラグ
129
- $flg = FALSE;
130
- if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) != $table_name ) {
131
  // テーブルが存在しないため作成する
132
- $flg = TRUE;
133
  }
134
 
135
  //DBのバージョン
@@ -137,7 +148,7 @@ class ThrowsSpamAway {
137
  //現在のDBバージョン取得
138
  $installed_ver = get_option( 'tsa_meta_version', 0 );
139
  // DBバージョンが低い または テーブルが存在しない場合は作成
140
- if ( $flg == TRUE || $installed_ver < $tsa_db_version ) {
141
  // dbDeltaのおかげ様でCREATE文のみ
142
  $sql = "CREATE TABLE $table_name (
143
  meta_id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
@@ -159,168 +170,192 @@ class ThrowsSpamAway {
159
 
160
  /**
161
  * スパム投稿の記録
 
162
  * @param string $post_id
163
  * @param string $ip_address
164
  */
165
  function save_post_meta( $post_id, $ip_address, $spam_contents ) {
166
- global $default_spam_data_save;
167
 
168
- if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) != '1' ) return;
 
 
169
 
170
  global $wpdb;
171
 
172
  $error_type = $spam_contents['error_type'];
173
- $author = strip_tags( $spam_contents['author'] );
174
- $comment = strip_tags( $spam_contents['comment'] );
175
 
176
  //保存するために配列にする
177
  $set_arr = array(
178
- 'post_id' => $post_id,
179
- 'ip_address' => $ip_address,
180
- 'error_type' => $error_type,
181
- 'author' => $author,
182
- 'comment' => $comment,
183
  );
184
 
185
  //レコード新規追加
186
  $wpdb->insert( $this->table_name, $set_arr );
187
- $wpdb->show_errors();
188
  return;
189
  }
190
 
191
  // JS読み込み部
192
  function tsa_scripts_init() {
 
193
  global $tsa_version;
194
 
195
- $comments_open = comments_open();
196
 
197
  // anti-spam の方法を参考に作成しました
198
  if (
199
- !is_admin() &&
200
- !is_home() &&
201
- !is_front_page() &&
202
- !is_archive() &&
203
- !is_search() &&
204
- $comments_open
205
  ) {
206
  wp_enqueue_script( 'throws-spam-away-script', plugins_url( '/js/tsa_params.min.js', __FILE__ ), array( 'jquery' ), $tsa_version );
207
  }
208
  }
209
 
210
- function comment_form() {
211
- global $default_caution_msg;
212
- // 注意文言表示
213
- $caution_msg = get_option( 'tsa_caution_message', $default_caution_msg );
 
214
  // 注意文言が設定されている場合のみ表示する
215
  if ( strlen( trim( $caution_msg ) ) > 0 ) {
216
- echo '<p id="throwsSpamAway">'.$caution_msg.'</p>'; // div から p タグへ変更
217
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  }
219
 
220
  function comment_form_dummy_param_field() {
221
- global $default_dummy_param_field_flg;
222
  // 空パラメータフィールド作成
223
- $dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
224
  if ( $dummy_param_field_flg == '1' ) {
225
  echo '<p class="tsa_param_field_tsa_" style="display:none;">email confirm<span class="required">*</span><input type="text" name="tsa_email_param_field___" id="tsa_email_param_field___" size="30" value="" />
226
  </p>';
227
- echo '<p class="tsa_param_field_tsa_2" style="display:none;">post date<span class="required">*</span><input type="text" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" size="30" value="'.date( 'Y-m-d H:i:s' ).'" />
228
  </p>';
229
  }
230
  }
231
 
232
- function comment_post( $id ) {
233
  global $newThrowsSpamAway;
234
  global $user_ID;
235
- global $default_back_second;
236
- global $default_error_msg;
237
- global $default_ng_key_error_msg;
238
- global $default_must_key_error_msg;
239
- global $default_block_ip_address_error_msg;
240
- global $default_url_count_over_error_msg;
241
- global $default_spam_limit_over_interval_error_msg;
242
- global $default_only_whitelist_ip_flg;
 
243
 
244
  // ログインしている場合は通過させます。
245
  if ( $user_ID ) {
246
- return $id;
247
  }
248
 
249
  // コメント(comment)及び名前(author)の中も検査
250
- $author = esc_attr( $_POST['author'] );
251
- $comment = esc_attr( $_POST['comment'] );
 
252
 
253
  // チェック対象IPアドレス
254
  $remote_ip = $_SERVER['REMOTE_ADDR'];
255
- if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
256
  $remote_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
257
- $ip_array = explode(",", $remote_ip);
258
  $remote_ip = $ip_array[0];
259
  }
260
 
261
- // ホワイトリスト優先通過
262
  // IP制御 任意のIPアドレスをあればブロックする
263
- $white_ip_addresses = get_option( 'tsa_white_ip_addresses', '' );
264
- $only_whitelist_ip_flg = get_option( 'tsa_only_whitelist_ip_flg', $default_only_whitelist_ip_flg );
265
- $white_ip = !$newThrowsSpamAway->white_ip_check( $remote_ip );
266
- // IP制御 ホワイトリストIPのみ許可する場合(ホワイトリストに記入がある場合のみ有効)
267
- if ( ( $white_ip_addresses != NULL && $white_ip_addresses != '' ) &&
268
- $only_whitelist_ip_flg === '1' && $white_ip == FALSE) {
269
- // ホワイトリスト以外通さない
270
  $newThrowsSpamAway->error_type = NOT_IN_WHITELIST_IP;
271
  } else {
272
  // IP系の検査
273
- if ( ! $newThrowsSpamAway->ip_check( $remote_ip ) && $white_ip == FALSE ) {
274
  // アウト!
275
- } else
276
- // コメント検査
277
- if ( $newThrowsSpamAway->validation( $comment, $author, $id ) ) {
278
- return $id;
279
  }
280
  }
281
  $error_type = $newThrowsSpamAway->error_type;
282
- $error_msg = '';
283
  switch ( $error_type ) {
284
  case MUST_WORD :
285
- $error_msg = get_option( 'tsa_must_key_error_message', $default_must_key_error_msg );
286
  break;
287
  case NG_WORD :
288
- $error_msg = get_option( 'tsa_ng_key_error_message', $default_ng_key_error_msg );
289
  break;
290
  case BLOCK_IP :
291
  case NOT_IN_WHITELIST_IP :
292
  case SPAM_BLACKLIST :
293
- $error_msg = get_option( 'tsa_block_ip_address_error_message', $default_block_ip_address_error_msg );
294
  break;
295
  case URL_COUNT_OVER :
296
- $error_msg = get_option( 'tsa_url_count_over_error_message', $default_url_count_over_error_msg );
297
  break;
298
  case SPAM_LIMIT_OVER :
299
- $error_msg = get_option( 'tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg );
300
  break;
301
- case DUMMY_FIELD : // ダミーフィールドの場合は通常メッセージ
302
  default :
303
- $error_msg = get_option( 'tsa_error_message', $default_error_msg );
304
  }
305
  // 記録する場合はDB記録
306
- if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) == '1' ) {
307
- $spam_contents = array();
308
  $spam_contents['error_type'] = $error_type;
309
- $spam_contents['author'] = mb_strcut( $author, 0, 255 );
310
- $spam_contents['comment'] = mb_strcut( $comment, 0, 255 );
311
 
312
  $this->save_post_meta( $id, $remote_ip, $spam_contents );
313
  }
314
  // 元画面へ戻るタイム計算
315
- $back_time = ( (int) get_option( 'tsa_back_second', $default_back_second ) ) * 1000;
316
  // タイム値が0なら元画面へそのままリダイレクト
317
  if ( $back_time == 0 ) {
318
- header( 'Location:'.$_SERVER['HTTP_REFERER'] );
319
  die;
320
  } else {
321
- wp_die( __( $error_msg.'<script type="text/javascript">
322
- var closing = function() {location.href=\''.$_SERVER['HTTP_REFERER'].'\';}
323
- window.setTimeout( closing, '.$back_time.');</script>', 'throws-spam-away' ) );
324
  }
325
  }
326
 
@@ -329,69 +364,72 @@ class ThrowsSpamAway {
329
  $author,
330
  $comment,
331
  $validate_array
332
- ) {
333
- global $default_on_flg; // 日本語以外を弾くかどうか初期値
334
- global $default_url_count_check_flg; // URL数を制御するか初期設定値
335
- global $default_ok_url_count; // 制限する場合のURL数初期設定値
336
- global $default_japanese_string_min_count; // 日本語文字最小含有数
 
 
337
  //
338
- $_japanese_string_min_count = get_option( 'tsa_japanese_string_min_count', $default_japanese_string_min_count );
339
  // NGキーワード文字列群
340
  $_ng_keywords = get_option( 'tsa_ng_keywords', '' );
341
- // キーワード文字列群 ※ブラックリストと重複するものはブラックリストのほうが優先です。
342
  $_must_keywords = get_option( 'tsa_must_keywords', '' );
343
  // URL数チェック
344
- $_url_count_check = get_option( 'tsa_url_count_on_flg', $default_url_count_check_flg );
345
  // 許容URL数設定値
346
- $_ok_url_count = intval( get_option( 'tsa_ok_url_count', $default_ok_url_count ) ); // デフォルト値3(3つまで許容)
347
-
348
- $validate_array = array_merge(array(
349
- 'post_id' => NULL,
350
- 'tsa_on_flg' => $default_on_flg,
351
- 'tsa_japanese_string_min_count' => $_japanese_string_min_count,
352
- 'tsa_ng_keywords' => $_ng_keywords,
353
- 'tsa_must_keywords' => $_must_keywords,
354
- 'tsa_url_count_check' => $_url_count_check,
355
- 'tsa_ok_url_count' => $_ok_url_count
 
 
356
  ), $validate_array );
357
 
358
- $post_id = @$validate_array['post_id'];
359
- $tsa_on_flg = @$validate_array['tsa_on_flg'];
360
- $tsa_japanese_string_min_count = @$validate_array['tsa_japanese_string_min_count'];
361
- $tsa_ng_keywords = @$validate_array['tsa_ng_keywords'];
362
- $tsa_must_keywords = @$validate_array['tsa_must_keywords'];
363
- $tsa_url_count_check = @$validate_array['tsa_url_count_check'];
364
- $tsa_ok_url_count = @$validate_array['tsa_ok_url_count'];
365
-
366
- // シングルバイトだけならエラー
367
- if ( $tsa_on_flg == 1 && $this->is_only_in_singlebyte( $comment ) ) {
368
- $this->error_type = NOT_JAPANESE;
369
- return FALSE;
370
- }
371
-
372
  // 日本語文字列必須含有数
 
373
  $tsa_japanese_string_min_count = intval( $tsa_japanese_string_min_count );
374
  // NGキーワード文字列群
375
- // キーワード文字列群 ※ブラックリストと重複するものはブラックリストのほうが優先です。
 
 
376
  // URL数チェック
377
- $tsa_url_count_check = $tsa_url_count_on_flg;
378
  // 許容URL数設定値
 
379
  $tsa_ok_url_count = intval( $tsa_ok_url_count ); // デフォルト値3(3つまで許容)
380
 
381
- // OKフラグ
382
- $flg = FALSE;
 
 
 
 
 
383
  // マルチバイト文字が含まれている場合は日本語が含まれていればOK
384
  if ( $tsa_on_flg == 1 ) {
385
  $count_flg = 0;
386
- mb_regex_encoding('UTF-8');
387
  $com_split = $this->mb_str_split( $comment );
388
 
389
- $tit_split = NULL;
390
 
391
  // タイトル文字列が含まれている場合はそれを除く機能のためタイトル文字列リスト化
392
- if ( $tsa_without_title_str == 1 && $post_id != NULL ) {
393
  global $wpdb;
394
- $target_post = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE ID = '".htmlspecialchars($post_id)."'");
395
 
396
  $title = $target_post[0]->post_title;
397
 
@@ -409,13 +447,13 @@ class ThrowsSpamAway {
409
 
410
  } else {
411
 
412
- if ( preg_match('/[一-龠]+/u', $it ) ){
413
  $count_flg += 1;
414
  }
415
- if ( preg_match('/[ァ-ヶー]+/u', $it ) ){
416
  $count_flg += 1;
417
  }
418
- if ( preg_match('/[ぁ-ん]+/u', $it ) ){
419
  $count_flg += 1;
420
  }
421
 
@@ -423,44 +461,48 @@ class ThrowsSpamAway {
423
  }
424
 
425
  $flg = ( $tsa_japanese_string_min_count < $count_flg );
426
- if ($flg == FALSE) {
427
  $this->error_type = NOT_JAPANESE;
428
- return FALSE;
 
429
  }
430
  }
431
  // 日本語文字列チェック抜けたらキーワードチェックを行う
432
  if ( $tsa_ng_keywords != '' ) {
433
  $keyword_list = explode( ',', $tsa_ng_keywords );
434
  foreach ( $keyword_list as $key ) {
435
- if ( preg_match('/'.trim( $key ).'/u', $author.$comment) ) {
436
  $this->error_type = NG_WORD;
437
- return FALSE;
 
438
  }
439
  }
440
  }
441
- // キーワードチェック(ブラックリスト)を抜けたら必須キーワードチェックを行う
442
  if ( $tsa_must_keywords != '' ) {
443
  $keyword_list = explode( ',', $tsa_must_keywords );
444
  foreach ( $keyword_list as $key ) {
445
- if ( preg_match( '/'.trim( $key ).'/u', $author.$comment ) ) {
446
  // OK
447
  } else {
448
  // 必須ワードがなかったためエラー
449
  $this->error_type = MUST_WORD;
450
- return FALSE;
 
451
  }
452
  }
453
  }
454
  // 含有URL数チェック
455
  if ( $tsa_url_count_check != '2' ) {
456
- if ( substr_count( strtolower( $author.$comment ), 'http') > $tsa_ok_url_count) {
457
  // URL文字列(httpの数)が多いエラー
458
  $this->error_type = URL_COUNT_OVER;
459
- return FALSE;
 
460
  }
461
  }
462
 
463
- return TRUE;
464
  }
465
 
466
 
@@ -470,51 +512,53 @@ class ThrowsSpamAway {
470
  }
471
 
472
  /**
473
- * IP制御ホワイトリストチェックメソッド
 
474
  * @param string $target_ip
475
  */
476
  function white_ip_check( $target_ip ) {
477
- global $default_only_whitelist_ip_flg;
478
- $white_ip_addresses = get_option( 'tsa_white_ip_addresses', '' );
479
- $only_whitelist_ip_flg = get_option( 'tsa_only_whitelist_ip_flg', $default_only_whitelist_ip_flg );
480
 
481
- if ( $white_ip_addresses != NULL && $white_ip_addresses != '' ) {
482
  // 改行区切りの場合はカンマ区切りに文字列置換後リスト化
483
  $white_ip_addresses = str_replace( "\n", ',', $white_ip_addresses );
484
- $ip_list = explode( ',', $white_ip_addresses );
485
  foreach ( $ip_list as $_ip ) {
486
  // 指定IPが範囲指定の場合 例:192.168.1.0/24
487
- if ( strpos( $_ip, '/' ) != FALSE ) {
488
  if ( $this->in_cidr( $target_ip, $_ip ) ) {
489
  // 通過対象
490
  if ( $only_whitelist_ip_flg === '1' ) {
491
- return FALSE;
492
  }
493
  }
494
  } elseif ( trim( $_ip ) == trim( $target_ip ) ) {
495
  // 通過対象
496
  if ( $only_whitelist_ip_flg === '1' ) {
497
- return FALSE;
498
  }
499
  }
500
  }
501
  }
502
- return TRUE;
 
503
  }
504
 
505
  /**
506
  * IPアドレスのチェックメソッド
 
507
  * @param string $target_ip
508
  */
509
  function ip_check( $target_ip ) {
510
  global $wpdb; // WordPress DBアクセス
511
- global $default_spam_champuru_flg; // すぱむちゃんぷるー利用初期値
512
- global $newThrowsSpamAway;
513
 
514
  // スパムフィルター利用あれば始めに通す
515
  // 1.スパムちゃんぷるー
516
- $spam_filter_spam_champuru_flg = get_option( 'tsa_spam_champuru_flg', $default_spam_champuru_flg );
517
- if ( get_option( 'tsa_spam_champuru_flg', '' ) == '1' ) {
518
  return $this->reject_spam_ip( $target_ip );
519
  }
520
  // 2.以降あれば追加
@@ -524,53 +568,57 @@ class ThrowsSpamAway {
524
 
525
  if ( $ip_block_from_spam_chk_flg === '1' ) {
526
  // wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
527
- $results = $wpdb->get_results( "SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC " );
 
528
  foreach ( $results as $item ) {
529
  if ( trim( $item->comment_author_IP ) == trim( $target_ip ) ) {
530
  // ブロックしたいIP
531
  $this->error_type = BLOCK_IP;
532
- return FALSE;
 
533
  }
534
  }
535
  }
536
  // IP制御 任意のIPアドレスをあればブロックする
537
- $block_ip_addresses = get_option( 'tsa_block_ip_addresses', '' );
538
- if ( $block_ip_addresses != NULL && $block_ip_addresses != '' ) {
539
  // 改行区切りの場合はカンマ区切りに文字列置換後リスト化
540
  $block_ip_addresses = str_replace( "\n", ',', $block_ip_addresses );
541
- $ip_list = explode( ',', $block_ip_addresses );
542
  foreach ( $ip_list as $ip ) {
543
  // 指定IPが範囲指定の場合 例:192.168.1.0/24
544
- if ( strpos( $ip, '/' ) != FALSE ) {
545
  if ( $this->in_cidr( $target_ip, $ip ) ) {
546
  // ブロックしたいIP
547
  $this->error_type = BLOCK_IP;
548
- return FALSE;
 
549
  }
550
  } elseif ( trim( $ip ) == trim( $target_ip ) ) {
551
  // ブロックしたいIP
552
  $this->error_type = BLOCK_IP;
553
- return FALSE;
554
- } else {
555
- // セーフIP
556
  }
 
557
  }
558
  }
559
- return TRUE;
 
560
  }
561
 
562
  /**
563
- * スパムちゃんぷるー代替スパムブラックリスト利用ブロック
564
  */
565
  function reject_spam_ip( $ip ) {
566
 
567
- // スパムブラックリスト [tsa_spam_champuru_hosts] 配列型
568
  // global $default_spam_champuru_hosts;
569
- // スパムブラックリスト by テキスト [tsa_spam_chmapuru_by_text] 文字列型(カンマ区切り)
570
- global $default_spam_champuru_by_text;
571
 
572
  // $spam_blacklist_hosts = get_option( 'tsa_spam_champuru_hosts', $default_spam_champuru_hosts );
573
- $spam_blacklist_by_text = get_option( 'tsa_spam_champuru_by_text', $default_spam_champuru_by_text);
574
 
575
  $spam_blacklist_by_text_lists = explode( ',', $spam_blacklist_by_text );
576
  if ( count( $spam_blacklist_by_text_lists ) > 0 ) {
@@ -580,82 +628,83 @@ class ThrowsSpamAway {
580
  }
581
 
582
  if ( strlen( trim( $spam_blacklist_by_text ) ) == 0 || count( $spam_blacklist_by_text_lists ) == 0 ) {
583
- return TRUE;
584
  }
585
 
586
- global $default_spam_champuru_by_text;
587
-
588
  $check_list = $spam_blacklist_by_text_lists;
589
 
590
- $spam_def_ip = '127.0.0.2';
591
- $pattern = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';
592
- $remote_ip = $_SERVER['REMOTE_ADDR'];
593
- if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
594
  $remote_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
595
- $ip_array = explode(",", $remote_ip);
596
  $remote_ip = $ip_array[0];
597
  }
598
  $check_IP = trim( preg_match( $pattern, $ip ) ? $ip : $remote_ip );
599
- $spam = FALSE;
600
  if ( preg_match( $pattern, $check_IP ) ) {
601
 
602
  // check
603
  $i = 0;
604
- while($i < count($check_list)){
605
- $check = $ip . $check_list[$i];
606
- $check = implode( '.',array_reverse( @split( '\.',$check_IP ) ) ) . '.' . $check_list[$i];
607
 
608
  $i ++;
609
 
610
- $result = gethostbyname($check);
611
 
612
- if ($result != $check) {
613
- $spam = TRUE;
614
  break;
615
  }
616
  }
617
  }
618
  if ( $spam ) {
619
  $this->error_type = SPAM_BLACKLIST;
620
- return FALSE;
 
621
  }
622
- return TRUE;
 
623
  }
624
 
625
  /**
626
  * CIDRチェック
 
627
  * @param string $ip
628
  * @param string $cidr
 
629
  * @return boolean
630
  */
631
  function in_cidr( $ip, $cidr ) {
632
  list( $network, $mask_bit_len ) = explode( '/', $cidr );
633
  if ( ! is_nan( $mask_bit_len ) && $mask_bit_len <= 32 ) {
634
- $host = 32 - $mask_bit_len;
635
- $net = ip2long($network) >> $host << $host; // 11000000101010000000000000000000
636
- $ip_net = ip2long($ip) >> $host << $host; // 11000000101010000000000000000000
 
637
  return $net === $ip_net;
638
  } else {
639
  // 形式が不正ならば無視するためFALSE
640
- return FALSE;
641
  }
642
  }
643
 
644
  /**
645
  * 日本語が含まれているかチェックメソッド
 
646
  * @param string $comment
647
  * @param string $author
648
  */
649
- function validation( $comment, $author, $post_id = NULL ) {
650
- global $newThrowsSpamAway;
651
- global $default_on_flg; // 日本語以外を弾くかどうか初期値
652
- global $default_dummy_param_field_flg; // ダミー項目によるスパム判定初期値
653
- global $default_url_count_check_flg; // URL数を制御するか初期設定値
654
- global $default_ok_url_count; // 制限する場合のURL数初期設定値
655
- global $default_japanese_string_min_count; // 日本語文字最小含有数
656
 
657
  // Throws SPAM Away 起動フラグ 1:起動 2 or Other:オフ
658
- $tsa_on_flg = get_option( 'tsa_on_flg', $default_on_flg );
659
 
660
  // 一定時間制限チェック
661
  // 一定時間内スパム認定機能<br />○分以内に○回スパムとなったら○分間、当該IPからのコメントはスパム扱いする設定+スパム情報保存
@@ -669,68 +718,73 @@ class ThrowsSpamAway {
669
  // tsa_spam_limit_flg,tsa_spam_limit_minutes,tsa_spam_limit_count,tsa_spam_limit_over_interval,tsa_spam_limit_over_interval_error_message
670
 
671
  // タイトル文字列は文字列カウントから排除するか 1:する
672
- global $default_without_title_str;
673
- $tsa_without_title_str = intval( get_option( 'tsa_without_title_str', $default_without_title_str) );
674
 
675
  // スパム情報保存フラグ
676
  $tsa_spam_data_save = get_option( 'tsa_spam_data_save' );
677
  // 一定時間制限チェック
678
  $tsa_spam_limit_flg = get_option( 'tsa_spam_limit_flg', '' );
679
  if ( $tsa_spam_data_save == '1' && $tsa_spam_limit_flg == '1' ) {
680
- global $default_spam_limit_minutes;
681
- global $default_spam_limit_over_interval;
682
- global $default_spam_limit_count;
683
  global $wpdb;
684
- $tsa_spam_limit_minutes = intval(get_option( 'tsa_spam_limit_minutes', $default_spam_limit_minutes ) );
685
- $tsa_spam_limit_over_interval = intval(get_option( 'tsa_spam_limit_over_interval', $default_spam_limit_over_interval ) );
686
  // ○分以内(インターバルの方が長い場合はインターバル値を利用する)の同一IPからのスパム投稿回数を調べる
687
  $interval_minutes = ( $tsa_spam_limit_minutes >= $tsa_spam_limit_over_interval ? $tsa_spam_limit_minutes : $tsa_spam_limit_over_interval );
688
 
689
  // 上記が○回を超えているかチェック
690
  $remote_ip = $_SERVER['REMOTE_ADDR'];
691
- if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
692
  $remote_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
693
- $ip_array = explode(",", $remote_ip);
694
  $remote_ip = $ip_array[0];
695
  }
696
 
697
- $ip = htmlspecialchars( $remote_ip );
698
  $this_ip_spam_cnt = "
699
  SELECT ip_address, count(ppd) as spam_count, max(post_date)
700
  FROM (select ip_address, post_date as ppd, post_date from $this->table_name) as A
701
- WHERE A.ip_address = '".$remote_ip."' AND
702
- ppd >= '".gmdate( 'Y-m-d H:i:s', current_time( 'timestamp' ) - 60 * $interval_minutes )."'
703
  GROUP BY ip_address LIMIT 1";
704
- $query = $wpdb->get_row( $this_ip_spam_cnt );
705
- $spam_count = intval( $query->spam_count );
706
 
707
 
708
- // 最後のスパム投稿から○分超えていなければ アウト!!
709
- $tsa_spam_limit_count = intval( get_option( 'tsa_spam_limit_count', $default_spam_limit_count ) );
710
  if ( $spam_count > $tsa_spam_limit_count ) {
711
  // アウト!
712
  $this->error_type = SPAM_LIMIT_OVER;
713
- return FALSE;
 
714
  }
715
  }
716
  // ダミーフィールド使用する場合、ダミーフィールドに入力値があればエラー
717
- $tsa_dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
718
- if ( $tsa_dummy_param_field_flg == '1') {
719
  if ( ! empty( $_POST['tsa_param_field_tsa_3'] ) ) { // このフィールドにリクエストパラメータが入る場合はスパム判定
720
  $this->error_type = DUMMY_FIELD;
721
- return FALSE;
 
722
  }
723
  }
724
 
725
  // コメントの内容に関するバリデーション
726
- return $this->validate_comment(
727
- $author,
728
- $comment,
729
- array(
730
- 'post_id' => $post_id,
731
- 'tsa_on_flg' => $tsa_on_flg
732
- )
733
- );
 
 
 
734
  }
735
 
736
  function mb_str_split( $string ) {
@@ -741,17 +795,23 @@ class ThrowsSpamAway {
741
  * Callback admin_menu
742
  */
743
  function admin_menu() {
744
- $mincap = 'level_8';
745
  $spam_mincap = 'level_7';
746
- if (function_exists('add_menu_page')) {
747
- add_menu_page(__('Throws SPAM Away 設定', 'throws-spam-away'), __('Throws SPAM Away', 'throws-spam-away'), $mincap, 'throws-spam-away', array( $this, 'options_page'));
 
 
 
748
  }
749
 
750
- if (function_exists('add_submenu_page')) {
751
  if ( get_option( 'tsa_spam_data_save' ) == '1' ) {
752
- add_submenu_page( 'throws-spam-away', __( 'スパムデータ', 'throws-spam-away' ), __( 'スパムデータ', 'throws-spam-away' ), $spam_mincap, 'throws-spam-away/throws_spam_away.class.php', array( $this, 'spams_list' ) );
 
 
 
753
  }
754
- // add_submenu_page( 'throws-spam-away', __( 'おすすめ設定', 'throws-spam-away' ), __( 'おすすめ設定', 'throws-spam_away' ), $mincap, 'throws-spam-away/throws_spam_away.class.php', array( $this, 'recommend_setting' ) );
755
  }
756
  // 従来通りスパムデータ保存しない場合はスルーする
757
  if ( get_option( 'tsa_spam_data_save' ) != 1 ) {
@@ -770,50 +830,48 @@ class ThrowsSpamAway {
770
  global $wpdb; // WordPress DBアクセス
771
  global $tsa_version;
772
 
773
- global $default_on_flg;
774
- global $default_without_title_str;
775
- global $default_dummy_param_field_flg;
776
- global $default_japanese_string_min_count;
777
- global $default_caution_msg;
778
- global $default_caution_msg_point;
779
- global $default_back_second;
780
- global $default_error_msg;
781
- global $default_ng_key_error_msg;
782
- global $default_must_key_error_msg;
783
- global $default_tb_on_flg;
784
- global $default_tb_url_flg;
785
- global $default_block_ip_address_error_msg;
786
- global $default_ip_block_from_spam_chk_flg;
787
- global $default_spam_data_save;
788
- global $default_url_count_over_error_msg;
789
- global $default_ok_url_count;
790
- global $default_spam_champuru_flg;
791
 
792
  //global $default_spam_champuru_hosts;
793
- global $default_spam_champuru_by_text;
794
 
795
- global $default_spam_limit_flg;
796
- global $default_spam_limit_minutes;
797
- global $default_spam_limit_count;
798
- global $default_spam_limit_over_interval;
799
- global $default_spam_limit_over_interval_error_msg;
800
 
801
- global $default_spam_data_delete_flg;
802
- global $default_spam_display_day_count;
803
- global $default_spam_keep_day_count;
804
 
805
- global $lower_spam_keep_day_count;
806
 
807
  global $spam_champuru_hosts;
808
 
809
- global $default_only_whitelist_ip_flg;
810
 
811
  // 設定完了の場合はメッセージ表示
812
- $_saved = FALSE;
813
 
814
  if ( isset( $_POST['tsa_nonce'] ) ) {
815
  check_admin_referer( 'tsa_action', 'tsa_nonce' );
816
-
817
  update_option( 'tsa_on_flg', intval( $_POST['tsa_on_flg'] ) );
818
  update_option( 'tsa_japanese_string_min_count', $_POST['tsa_japanese_string_min_count'] );
819
  update_option( 'tsa_back_second', $_POST['tsa_back_second'] );
@@ -845,527 +903,578 @@ class ThrowsSpamAway {
845
  update_option( 'tsa_dummy_param_field_flg', $_POST['tsa_dummy_param_field_flg'] );
846
  update_option( 'tsa_memo', $_POST['tsa_memo'] );
847
  update_option( 'tsa_spam_champuru_by_text', $_POST['tsa_spam_champuru_by_text'] );
848
- //update_option( 'tsa_spam_champuru_hosts', ( isset( $_POST['tsa_spam_champuru_hosts'] ) ? $_POST['tsa_spam_champuru_hosts'] : NULL ) );
849
- update_option( 'tsa_only_whitelist_ip_flg', $_POST['tsa_only_whitelist_ip_flg'] );
850
 
851
  // スパムデータベース作成
852
  $this->tsa_create_tbl();
853
 
854
- $_saved = TRUE;
855
  }
856
  wp_enqueue_style( 'thorows-spam-away-styles', plugins_url( '/css/tsa_styles.css', __FILE__ ) );
857
  ?>
858
- <style>
859
- table.form-table {
860
-
861
- }
862
-
863
- table.form-table th {
864
- width: 200px;
865
- }
866
- </style>
867
- <script type="text/Javascript">
868
- // 配列重複チェック
869
- var isDuplicate = function( ary, str ) {
870
- for ( i = 0; i < ary.length; i++ ) {
871
- if ( str == ary[i] ) {
872
- return true;
873
- }
874
- }
875
- return false;
876
- };
877
- function addIpAddresses(newAddressStr) {
878
- // チェック用配列
879
- var test_newAddress_list = newAddressStr.split(",");
880
- var str = document.getElementById('tsa_block_ip_addresses').value;
881
- // 現在の配列(テスト用)
882
- str = str.replace(/\,/g, "\n");
883
- var test_oldAddress_list = str.split("\n");
884
-
885
- if (str.length > 0) { str += "\n"; }
886
- if (newAddressStr.length > 0) {
887
- newAddressStr = newAddressStr.replace(/\,/g, "\n");
888
- }
889
- str += newAddressStr;
890
- str = str.replace(/\,/g, "\n");
891
-
892
- var ary = str.split("\n");
893
- var newAry = new Array;
894
- var ret = "";
895
-
896
- upd_flg = false;
897
- upd_ip_str = "";
898
- for ( var i=0; i < test_newAddress_list.length; i++) {
899
- if (!isDuplicate(test_oldAddress_list, test_newAddress_list[i]) && test_newAddress_list[i] != "") {
900
- upd_flg = true;
901
- upd_ip_str = upd_ip_str + "・"+test_newAddress_list[i]+"\n";
902
- }
903
- }
904
- if ( upd_flg == true ) {
905
-
906
- for ( var i=0 ; i < ary.length ; i++ ) {
907
- if ( ! isDuplicate( newAry, ary[i] ) && ary[i] != "" ){
908
- newAry.push(ary[i]);
909
- }
910
- }
911
- document.getElementById( 'tsa_block_ip_addresses' ).value = newAry.join( '\n' );
912
- alert('新たにIPアドレスを追加しました。\n'+upd_ip_str);
913
- } else {
914
- alert('指定されたIPアドレスは\nすでに追加されています。');
915
- }
916
- return false;
917
- }
918
- </script>
919
- <div class="wrap">
920
- <h2 id="option_setting">Throws SPAM Away設定</h2>
921
- <?php if ( $_saved ) { ?>
922
- <div class="updated" style="padding: 10px; width: 50%;" id="message">設定の更新が完了しました。</div>
923
- <?php } ?>
924
- <form method="post" action="">
925
- <?php wp_nonce_field( 'tsa_action', 'tsa_nonce' )?>
926
- <p>
927
- <a href="spam_opt">スパム対策機能設定</a> | <a href="#url_opt">URL文字列除外 設定</a> | <a href="#keyword_opt">NGキーワード / 必須キーワード 制御設定</a> | <a href="#tb_opt">トラックバックへの対応設定</a> | <a href="#ip_opt">投稿IPアドレスによる制御設定</a> | <a href="#memo_opt">メモ</a> | <a href="#spam_data_opt">スパムデータベース</a>
928
- </p>
929
- <h3 id="spam_opt">スパム対策機能 設定</h3>
930
- <?php wp_nonce_field( 'update-options' ); ?>
931
- <table class="form-table">
932
- <tr valign="top">
933
- <th scope="row">人の目には見えないダミーの入力項目を作成し、そこに入力があれば無視対象とする<br />(スパムプログラム投稿に有効です)</th>
934
- <td><?php
935
- $chk_1 = '';
936
- $chk_2 = '';
937
- if ( get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg ) == '2' ) {
938
- $chk_2 = ' checked="checked"';
939
- } else {
940
- $chk_1 = ' checked="checked"';
941
- }
942
- ?>
943
- <label><input type="radio" name="tsa_dummy_param_field_flg" value="1"<?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
944
- <label><input type="radio" name="tsa_dummy_param_field_flg" value="2"<?php esc_attr_e( $chk_2 ); ?> />&nbsp;しない</label><br />
945
- ※ダミー項目の制御にJavaScriptを使用しますのでJavaScriptが動作しない環境からの投稿はスパム判定されてしまいます。ご注意の上、ご利用ください。<br />
946
- (初期設定:<?php echo ( $default_dummy_param_field_flg == '2' ? "しない" : "する" ); ?>)
947
- </td>
948
- </tr>
949
- </table>
950
- <table class="form-table">
951
- <tr valign="top">
952
- <th scope="row">日本語が存在しない場合、無視対象とする<br />(日本語文字列が存在しない場合無視対象となります。)</th>
953
- <td><?php
954
- $chk_1 = '';
955
- $chk_2 = '';
956
- if ( get_option( 'tsa_on_flg', $default_on_flg ) == 2 ) {
957
- $chk_2 = ' checked="checked"';
958
- } else {
959
- $chk_1 = ' checked="checked"';
960
- }
961
- ?> <label><input type="radio" name="tsa_on_flg" value="1" <?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
962
- <label><input type="radio" name="tsa_on_flg" value="2" <?php esc_attr_e( $chk_2 );?> />&nbsp;しない</label><br />
963
- (初期設定:<?php echo ( $default_on_flg == '2' ? "しない" : "する" ); ?>)
964
- </td>
965
- </tr>
966
- <tr valign="top">
967
- <th scope="row">タイトルの文字列が含まれる場合、日本語としてカウントしない<br />(日本語を無理やり入れるためにタイトルを利用する方法を排除する)</th>
968
- <td><?php
969
- $chk_1 = '';
970
- $chk_2 = '';
971
- if ( get_option( 'tsa_without_title_str', $default_without_title_str ) != '1' ) {
972
- $chk_2 = ' checked="checked"';
973
- } else {
974
- $chk_1 = ' checked="checked"';
975
- } ?>
976
- <label><input type="radio" name="tsa_without_title_str" value="1"<?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
977
- <label><input type="radio" name="tsa_without_title_str" value="2"<?php esc_attr_e( $chk_2 ); ?> />&nbsp;しない</label><br />
978
- (初期設定:<?php echo ( $default_without_title_str == '2' ? "しない" : "する" ); ?>)
979
- </td>
980
- </tr>
981
- <tr valign="top">
982
- <th scope="row">
983
- 日本語文字列含有数<br />
984
- (この文字列に達していない場合無視対象となります。)
985
- </th>
986
- <td>
987
- <input type="text" name="tsa_japanese_string_min_count"
988
- value="<?php echo get_option( 'tsa_japanese_string_min_count', $default_japanese_string_min_count ); ?>" /><br />
989
- (初期設定:<?php echo $default_japanese_string_min_count; ?>)
990
- </td>
991
- </tr>
992
- <tr valign="top">
993
- <th scope="row">元の記事に戻ってくる時間<br />(秒)※0の場合エラー画面表示しません。
994
- </th>
995
- <td><input type="text" name="tsa_back_second"
996
- value="<?php echo get_option( 'tsa_back_second', $default_back_second );?>" /><br />
997
- (初期設定:<?php echo $default_back_second; ?>)
998
- </td>
999
- </tr>
1000
- <tr valign="top">
1001
- <th scope="row" id="tsa_caution_message">コメント欄の下に表示される注意文言</th>
1002
- <td><input type="text" name="tsa_caution_message" size="80"
1003
- value="<?php echo get_option( 'tsa_caution_message', $default_caution_msg );?>" /><br />
1004
- (初期設定:<?php echo $default_caution_msg;?>)</td>
1005
- </tr>
1006
- <tr valign="top">
1007
- <th scope="row" id="tsa_caution_msg_point">コメント注意文言の表示位置</th>
1008
- <td><?php
1009
- $chk_1 = '';
1010
- $chk_2 = '';
1011
- if ( get_option( 'tsa_caution_msg_point', $default_caution_msg_point ) == '2' ) {
1012
- $chk_2 = ' checked="checked"';
1013
- } else {
1014
- $chk_1 = ' checked="checked"';
1015
- }
1016
- ?> <label><input type="radio"
1017
- name="tsa_caution_msg_point" value='1' <?php esc_attr_e( $chk_1 ); ?> />&nbsp;コメント送信ボタンの上</label>&nbsp;
1018
- <label><input type="radio" name="tsa_caution_msg_point" value="2"
1019
- <?php esc_attr_e( $chk_2 );?> />&nbsp;コメント送信フォームの下</label><br />
1020
- (初期設定:<?php echo ( $default_caution_msg_point == '2' ? "コメント送信フォームの下" : "コメント送信ボタンの上" ); ?>)
1021
- </td>
1022
- </tr>
1023
- </table>
1024
- <p>※表示が崩れる場合、<a href="#tsa_caution_msg_point">「コメント注意文言の表示位置」</a>の変更 や <a href="#tsa_caution_message">「コメント欄の下に表示される注意文言」</a>を空白にすること を試してみて下さい。<br />
1025
- 「コメント欄の下に表示される注意文言」が空白の場合は文言表示のタグ自体が挿入されないようになります。</p>
1026
- <table class="form-table">
1027
- <tr valign="top">
1028
- <th scope="row">日本語文字列規定値未満エラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
1029
- <td><input type="text" name="tsa_error_message" size="80"
1030
- value="<?php echo get_option( 'tsa_error_message', $default_error_msg );?>" /><br />(初期設定:<?php echo $default_error_msg; ?>)</td>
1031
- </tr>
1032
- </table>
1033
- <a href="#option_setting" class="alignright">▲ 上へ</a>
1034
- <h3 id="url_opt">URL文字列除外 設定</h3>
1035
- <table class="form-table">
1036
- <tr valign="top">
1037
- <th scope="row">URLらしき文字列が混入している場合エラーとするか</th>
1038
- <td><?php
1039
- $chk_1 = '';
1040
- $chk_2 = '';
1041
- if (get_option( 'tsa_url_count_on_flg', '1') == '2') {
1042
- $chk_2 = ' checked="checked"';
1043
- } else {
1044
- $chk_1 = ' checked="checked"';
1045
- }
1046
- ?> <label><input type="radio"
1047
- name="tsa_url_count_on_flg" value='1' <?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
1048
- <label><input type="radio" name="tsa_url_count_on_flg" value="2"
1049
- <?php esc_attr_e( $chk_2 );?> />&nbsp;しない</label><br /> する場合の制限数(入力数値まで許容):<input
1050
- type="text" name="tsa_ok_url_count" size="2"
1051
- value="<?php echo get_option( 'tsa_ok_url_count', $default_ok_url_count);?>" /><br />
1052
- (初期設定: <?php echo $default_ok_url_count; ?>)
1053
- </td>
1054
- </tr>
1055
- <tr valign="top">
1056
- <th scope="row">URLらしき文字列混入数オーバーエラー時に表示される文言 (元の記事に戻ってくる時間の間のみ表示)</th>
1057
- <td><input type="text" name="tsa_url_count_over_error_message"
1058
- size="80"
1059
- value="<?php echo get_option( 'tsa_url_count_over_error_message', $default_url_count_over_error_msg);?>" /><br />
1060
- (初期設定:<?php echo $default_url_count_over_error_msg;?>)</td>
1061
- </tr>
1062
- </table>
1063
- <a href="#option_setting" class="alignright">▲ 上へ</a>
1064
-
1065
- <h3 id="keyword_opt">NGキーワード / 必須キーワード 制御設定</h3>
1066
- <table class="form-table">
1067
- <tr valign="top">
1068
- <th scope="row">その他NGキーワード<br />(日本語でも英語(その他)でもNGとしたいキーワードを半角カンマ区切りで複数設定できます。<br />挙動は同じです。NGキーワードだけでも使用できます。)
1069
- </th>
1070
- <td><input type="text" name="tsa_ng_keywords" size="80"
1071
- value="<?php echo get_option( 'tsa_ng_keywords', '');?>" /></td>
1072
- </tr>
1073
- <tr valign="top">
1074
- <th scope="row">NGキーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
1075
- </th>
1076
- <td><input type="text" name="tsa_ng_key_error_message" size="80"
1077
- value="<?php echo get_option( 'tsa_ng_key_error_message', $default_ng_key_error_msg);?>" /><br />
1078
- (初期設定:<?php echo $default_ng_key_error_msg;?>)</td>
1079
- </tr>
1080
- <tr valign="top">
1081
- <th scope="row">その上での必須キーワード<br />(日本語でも英語(その他)でも必須としたいキーワードを半角カンマ区切りで複数設定できます。<br />指定文字列を含まない場合はエラーとなります。※複数の方が厳しくなります。<br />必須キーワードだけでも使用できます。)
1082
- </th>
1083
- <td><input type="text" name="tsa_must_keywords" size="80"
1084
- value="<?php echo get_option( 'tsa_must_keywords', '');?>" /></td>
1085
- </tr>
1086
- <tr valign="top">
1087
- <th scope="row">必須キーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
1088
- </th>
1089
- <td><input type="text" name="tsa_must_key_error_message" size="80"
1090
- value="<?php echo get_option( 'tsa_must_key_error_message', $default_must_key_error_msg);?>" /><br />
1091
- (初期設定:<?php echo $default_must_key_error_msg;?>)</td>
1092
- </tr>
1093
- </table>
1094
- <a href="#option_setting" class="alignright">▲ 上へ</a>
1095
-
1096
- <h3 id="tb_opt">トラックバックへの対応設定</h3>
1097
- <table class="form-table">
1098
- <tr valign="top">
1099
- <th scope="row">上記設定をトラックバック記事にも採用する</th>
1100
- <td><?php
1101
- $chk_1 = '';
1102
- $chk_2 = '';
1103
- if (get_option( 'tsa_tb_on_flg', $default_tb_on_flg) == "2") {
1104
- $chk_2 = ' checked="checked"';
1105
- } else {
1106
- $chk_1 = ' checked="checked"';
1107
- }
1108
- ?> <label><input type="radio" name="tsa_tb_on_flg"
1109
- value='1' <?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp; <label><input
1110
- type="radio" name="tsa_tb_on_flg" value="2" <?php esc_attr_e( $chk_2 );?> />&nbsp;しない</label><br />
1111
- (初期設定:<?php echo ( $default_tb_on_flg == '2' ? "しない" : "する" ); ?>)
1112
- </td>
1113
- </tr>
1114
- <tr valign="top">
1115
- <th scope="row">トラックバック記事にも採用する場合、ついでにこちらのURLが含まれているか判断する
1116
- </th>
1117
- <td><?php
1118
- $chk_1 = '';
1119
- $chk_2 = '';
1120
- if ( get_option( 'tsa_tb_url_flg', $default_tb_url_flg) == '2' ) {
1121
- $chk_2 = ' checked="checked"';
1122
- } else {
1123
- $chk_1 = ' checked="checked"';
1124
- }
1125
- ?> <label><input type="radio" name="tsa_tb_url_flg"
1126
- value='1' <?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp; <label><input
1127
- type="radio" name="tsa_tb_url_flg" value="2" <?php esc_attr_e( $chk_2 );?> />&nbsp;しない</label><br />
1128
- (初期設定:<?php echo ( $default_tb_url_flg == '2' ? "しない" : "する" ); ?>)
1129
- </td>
1130
- </tr>
1131
- </table>
1132
- <a href="#option_setting" class="alignright">▲ 上へ</a>
1133
-
1134
- <h3 id="ip_opt">投稿IPアドレスによる制御設定</h3>
1135
- <table class="form-table">
1136
- <tr valign="top">
1137
- <th scope="row" rowspan="2">SPAMブラックリスト利用</th>
1138
- <td><?php
1139
- $chk = '';
1140
- if ( get_option( 'tsa_spam_champuru_flg', $default_spam_champuru_flg) == '1' ) {
1141
- $chk = ' checked="checked"';
1142
- }
1143
- ?>
1144
- <label><input type="checkbox" name="tsa_spam_champuru_flg" value='1' <?php esc_attr_e( $chk ); ?> />スパムブラックリストサービスに登録されているIPアドレスからのコメントを拒否する</label><br />
1145
- (初期設定:<?php echo ( $default_spam_champuru_flg == '2' ? "しない" : "する" ); ?>)
1146
- </td>
1147
- </tr>
1148
- <tr>
1149
- <td>
1150
- <h4>※多ければ多いほどトラッフィク量が上がりますので注意してください。</h4>
1151
-
1152
- <strong>【利用するスパムブラックリストサービスをテキスト入力(カンマ区切り)】</strong><br />
1153
- <input type="text" name="tsa_spam_champuru_by_text"
1154
- size="80"
1155
- value="<?php echo get_option( 'tsa_spam_champuru_by_text', $default_spam_champuru_by_text );?>" /><br />(初期設定:<?php echo $default_spam_champuru_by_text; ?>)
1156
-
1157
- </td>
1158
- </tr>
1159
- <tr valign="top">
1160
- <th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
1161
- <td><?php
1162
- $chk = '';
1163
- if ( get_option( 'tsa_ip_block_from_spam_chk_flg', $default_ip_block_from_spam_chk_flg) == '1' ) {
1164
- $chk = ' checked="checked"';
1165
- }
1166
- ?> <label><input type="checkbox"
1167
- name="tsa_ip_block_from_spam_chk_flg" value='1'
1168
- <?php esc_attr_e( $chk ); ?> />&nbsp;スパム投稿設定したIPアドレスからの投稿も無視する</label>&nbsp;※Akismet等で自動的にスパムマークされたものも含む<br />
1169
- (初期設定:<?php echo ( $default_ip_block_from_spam_chk_flg != '1' ? "しない" : "する" ); ?>)<br />
1170
- <?php
1171
- // wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
1172
- $results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
1173
- ?>現在「spam」フラグが付いているIPアドレス:<br />
1174
- <blockquote>
1175
- <?php
1176
- $add_ip_addresses = '';
1177
- foreach ( $results as $item ) {
1178
- $spam_ip = esc_attr($item->comment_author_IP);
1179
- // ブロックしたいIP
1180
- if ( strlen( $add_ip_addresses ) > 0 ) {
1181
- $add_ip_addresses .= ',';
1182
- }
1183
- $add_ip_addresses .= $spam_ip;
1184
- ?>
1185
- <b><?php esc_attr_e( $spam_ip ); ?> </b><br />
1186
- <?php
1187
- }
1188
- ?>
1189
- &nbsp;<input type="button"
1190
- onclick="javascript:addIpAddresses('<?php echo $add_ip_addresses; ?>');"
1191
- value="これらのIPアドレスを任意のブロック対象IPアドレスにコピーする" /><br />
1192
- </blockquote>
1193
- </td>
1194
- </tr>
1195
- <tr valign="top">
1196
- <th scope="row">任意のIPアドレスからの投稿も無視したい場合、対象となるIPアドレスを記述してください。<br />改行区切りで複数設定できます。(半角数字とスラッシュ、ドットのみ)<br />※カンマは自動的に改行に変換されます
1197
- </th>
1198
- <td><textarea name="tsa_block_ip_addresses"
1199
- id="tsa_block_ip_addresses" cols="80" rows="10"><?php echo get_option( 'tsa_block_ip_addresses', '' );?></textarea></td>
1200
- </tr>
1201
- <tr valign="top">
1202
- <th scope="row">ブロック対象のIPアドレスからの投稿時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
1203
- </th>
1204
- <td><input type="text" name="tsa_block_ip_address_error_message"
1205
- size="80"
1206
- 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>
1207
- </tr>
1208
- </table>
1209
- <p>※上記のスパムチェックから除外するIPアドレスがあれば下記に設定してください。優先的に通過させます。<br />※トラックバックは優先通過ではありません。</p>
1210
- <table class="form-table">
1211
- <tr style="background-color: #fefefe;" valign="top">
1212
- <th scope="row"><strong>IP制御免除<br />ホワイトリスト</strong></th>
1213
- <td>
1214
- ※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br />※日本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用ください。<br />改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッシュ、ドットのみ)
1215
- <textarea name="tsa_white_ip_addresses"
1216
- id="tsa_white_ip_addresses" cols="80" rows="10"><?php echo get_option( 'tsa_white_ip_addresses', '' );?></textarea><br />
1217
- <?php
1218
- $chk = '';
1219
- if ( get_option( 'tsa_only_whitelist_ip_flg', $default_only_whitelist_ip_flg) == '1' ) {
1220
- $chk = ' checked="checked"';
1221
- }
1222
- ?> <label><input type="checkbox"
1223
- name="tsa_only_whitelist_ip_flg" value='1'
1224
- <?php esc_attr_e( $chk ); ?> />&nbsp;ホワイトリストに登録したIPアドレス以外からの投稿を無視する(ホワイトリストへの登録がない場合は有効になりません)</label><br />
1225
- (初期設定:<?php echo ( $default_only_whitelist_ip_flg != '1' ? "しない" : "する" ); ?>)<br />
1226
- ※ホワイトリストで登録したIP以外の投稿は無視されますのでこの設定は慎重に行ってください。(すべての設定より優先します)<br />
1227
- ※エラーメッセージは「ブロック対象のIPアドレスからの投稿時に表示される文言」が使われます。(エラー表示時のみ)
1228
- </td>
1229
- </tr>
1230
-
1231
- </table>
1232
- <a href="#option_setting" class="alignright">▲ 上へ</a>
1233
-
1234
- <h3 id="memo_opt">メモ(スパム対策情報や IPアドレス・NGワードその他メモ備忘録としてご自由にお使い下さい)</h3>
1235
- <p>この欄の内容が表示されることはありません。</p>
1236
- <table class="form-table">
1237
- <tr valign="top">
1238
- <td>
1239
- <textarea name="tsa_memo" style="width: 80%;" rows="10"><?php echo get_option( 'tsa_memo', '' ); ?></textarea>
1240
-
1241
- </td>
1242
- </tr>
1243
- </table>
1244
- <a href="#option_setting" class="alignright">▲ 上へ</a>
1245
-
1246
- <h3 id="spam_data_opt">スパムデータベース</h3>
1247
- <table class="form-table">
1248
- <tr valign="top">
1249
- <th scope="row">スパムコメント投稿情報を保存しますか?</th>
1250
- <td><?php
1251
- $chk = '';
1252
- if ( get_option( 'tsa_spam_data_save', $default_spam_data_save) == '1' ) {
1253
- $chk = ' checked="checked"';
1254
- }
1255
- ?> <label><input type="checkbox"
1256
- name="tsa_spam_data_save" value='1' <?php esc_attr_e( $chk ); ?> />&nbsp;スパムコメント情報を保存する</label><br />※Throws
1257
- SPAM Away設定画面表示時に時間がかかることがあります。<br />※「保存する」を解除した場合でもテーブルは残りますので<?php echo get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>日以内の取得データは表示されます。<br />
1258
- (初期設定:<?php echo ( $default_spam_data_save != '1' ? "しない" : "する" ); ?>)
1259
- </td>
1260
- </tr>
1261
- <tr>
1262
- <th scope="row">スパムデータを表示する期間</th>
1263
- <td>
1264
- <input
1265
- type="text" name="tsa_spam_keep_day_count" size="3"
1266
- value="<?php echo get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>" />日分(最低<?php echo $lower_spam_keep_day_count; ?>日)(初期設定: <?php echo $default_spam_keep_day_count; ?>)<br />&nbsp;
1267
- <?php
1268
- $chk = '';
1269
- if ( get_option( 'tsa_spam_data_delete_flg', $default_spam_data_delete_flg) == '1' ) {
1270
- $chk = ' checked="checked"';
1271
- }
1272
- ?>
1273
- <label><input type="checkbox" name="tsa_spam_data_delete_flg" value='1'
1274
- <?php esc_attr_e( $chk ); ?> />&nbsp;期間が過ぎたデータを削除する</label><br />
1275
- ※一度消したデータは復活出来ませんのでご注意ください。また最低<?php echo $lower_spam_keep_day_count; ?>日分は保存されます。
1276
- </td>
1277
- </tr>
1278
- </table>
1279
- <p>一定時間内スパム認定機能<br />○分以内に○回スパムとなったら○分間、当該IPからのコメントはスパム扱いする設定<br />
1280
- <b>※一定時間以内にスパム投稿された回数を測定していますので「スパムコメント情報を保存する」機能がオフの場合は機能しません。</b></p>
1281
- <table class="form-table">
1282
- <tr>
1283
- <th scope="row">機能設定</th>
1284
- <td><?php
1285
- $chk = '';
1286
- if ( get_option( 'tsa_spam_limit_flg', $default_spam_limit_flg) == '1' ) {
1287
- $chk = ' checked="checked"';
1288
- }
1289
- ?> <label><input type="checkbox" name="tsa_spam_limit_flg" value='1'
1290
- <?php esc_attr_e( $chk ); ?> />&nbsp;機能させる</label> (初期設定: <?php echo ( $default_spam_limit_flg != '1' ? "しない" : "する" ); ?>)<br /> 一定時間:<input
1291
- type="text" name="tsa_spam_limit_minutes" size="3"
1292
- value="<?php echo get_option( 'tsa_spam_limit_minutes', $default_spam_limit_minutes); ?>" />分以内に
1293
- 一定回数:<input type="text" name="tsa_spam_limit_count" size="3"
1294
- value="<?php echo get_option( 'tsa_spam_limit_count', $default_spam_limit_count); ?>" />回スパムとなったら<b>次から</b>
1295
- 一定時間:<input type="text" name="tsa_spam_limit_over_interval" size="3"
1296
- value="<?php echo get_option( 'tsa_spam_limit_over_interval', $default_spam_limit_over_interval); ?>" />分間<br />
1297
- (初期設定:一定時間「<?php echo $default_spam_limit_minutes; ?>」分以内に一定回数「<?php echo $default_spam_limit_count; ?>」回スパムとなったら次から「<?php echo $default_spam_limit_over_interval; ?>」分間)<br />
1298
- 当該IPアドレスからのコメントを強制スパム扱いします。<br /> エラーメッセージは:<input type="text"
1299
- name="tsa_spam_limit_over_interval_error_message" size="80"
1300
- value="<?php echo get_option( 'tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg); ?>" /><br />
1301
- (初期設定:<?php echo $default_spam_limit_over_interval_error_msg; ?>)
1302
- </td>
1303
- </tr>
1304
- </table>
1305
- <a href="#option_setting" class="alignright">▲ 上へ</a>
1306
-
1307
- <input type="hidden" name="action" value="update" />
1308
- <?php /**
1309
- <input
1310
- type="hidden" name="page_options"
1311
- value="tsa_on_flg,tsa_japanese_string_min_count,tsa_back_second,tsa_caution_message,tsa_caution_msg_point,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,tsa_spam_data_save,tsa_spam_limit_flg,tsa_spam_limit_minutes,tsa_spam_limit_count,tsa_spam_limit_over_interval,tsa_spam_limit_over_interval_error_message,tsa_spam_champuru_flg,tsa_spam_keep_day_count,tsa_spam_data_delete_flg,tsa_white_ip_addresses,tsa_dummy_param_field_flg,tsa_memo,tsa_spam_champuru_by_text,tsa_only_whitelist_ip_flg" />
1312
- */ ?>
1313
- <p class="submit" id="tsa_submit_button">
1314
- <input type="submit" class="button-primary"
1315
- value="<?php _e('Save Changes') ?>" />
1316
- </p>
1317
- <p>Throws SPAM Away version <?php echo $tsa_version;?></p>
1318
-
1319
- </form>
1320
- </div>
1321
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1322
  }
1323
 
 
 
 
 
 
 
 
1324
  function trackback_spam_away( $tb ) {
1325
  global $newThrowsSpamAway;
 
1326
 
1327
- $tsa_tb_on_flg = get_option( 'tsa_tb_on_flg' );
1328
  $tsa_tb_url_flg = get_option( 'tsa_tb_url_flg' );
1329
- $siteurl = get_option( 'siteurl');
1330
  // トラックバック OR ピンバック時にフィルタ発動
1331
- if ( $tsa_tb_on_flg == "2" || ( $tb['comment_type'] != 'trackback' && $tb['comment_type'] != 'pingback' ) ) return $tb;
 
 
1332
 
1333
  // SPAMかどうかフラグ
1334
- $tb_val['is_spam'] = FALSE;
1335
 
1336
  // コメント判定
1337
- $author = $tb["comment_author"];
1338
  $comment = $tb["comment_content"];
1339
  $post_id = $tb["comment_post_ID"];
1340
  // IP系の検査
1341
  $remote_ip = $_SERVER['REMOTE_ADDR'];
1342
- if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
1343
  $remote_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
1344
- $ip_array = explode(",", $remote_ip);
1345
  $remote_ip = $ip_array[0];
1346
  }
1347
 
1348
  if ( ! $newThrowsSpamAway->ip_check( $remote_ip ) ) {
1349
- $tb_val['is_spam'] = TRUE;
1350
- } else
1351
- // 検査します!
1352
- if ( ! $newThrowsSpamAway->validation( $comment, $author, $post_id ) ) {
1353
- $tb_val['is_spam'] = TRUE;
1354
- } else
1355
- // URL検索する場合、URL包含検査 (このブログのURLを含んでない場合エラー
1356
- if ( $tsa_tb_url_flg == '1' && stripos( $comment, $siteurl ) == FALSE ) {
1357
- $tb_val['is_spam'] = TRUE; // スパム扱い
1358
  }
1359
  // トラックバックスパムがなければ返却・あったら捨てちゃう
1360
  if ( ! $tb_val['is_spam'] ) {
1361
  // トラックバック内に日本語存在(または禁止語句混入なし)
1362
  return $tb;
1363
  } else {
1364
- if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) == '1' ) {
1365
- $spam_contents = array();
1366
  $spam_contents['error_type'] = SPAM_TRACKBACK;
1367
- $spam_contents['author'] = mb_strcut( strip_tags( $author ), 0, 255 );
1368
- $spam_contents['comment'] = mb_strcut( strip_tags( $comment ), 0, 255 );
1369
 
1370
  $this->save_post_meta( $post_id, $remote_ip, $spam_contents );
1371
  }
@@ -1375,42 +1484,45 @@ function addIpAddresses(newAddressStr) {
1375
 
1376
  /**
1377
  * 当該IPアドレスからの最終投稿日時取得
 
1378
  * @param string ip_address
 
1379
  * @return 最終投稿日時 Y-m-d H:i:s
1380
  */
1381
- function get_last_spam_comment( $ip_address = NULL ) {
1382
  global $wpdb;
1383
  // IPアドレスがなければNULL返却
1384
- if ( $ip_address == NULL ) {
1385
- return NULL;
1386
  }
1387
  // 最終コメント情報取得
1388
  $qry_str = "SELECT A.post_date, A.post_id, B.error_type, B.author as spam_author, B.comment as spam_comment FROM $this->table_name as A
1389
  INNER JOIN $this->table_name as B ON A.ip_address = B.ip_address AND A.post_date = B.post_date
1390
- WHERE A.ip_address = '".htmlspecialchars( $ip_address )."' ORDER BY A.post_date DESC LIMIT 1 ";
1391
  $results = $wpdb->get_results( $qry_str );
1392
  if ( count( $results ) > 0 ) {
1393
  return $results[0];
1394
  }
1395
- return NULL;
 
1396
  }
1397
 
1398
  /**
1399
  * スパムデータベース表示
 
1400
  * @param
1401
- * @return HTML
1402
  */
1403
- function spams_list() {
1404
  global $wpdb;
1405
- global $lower_spam_keep_day_count, $default_spam_keep_day_count;
1406
- $_saved = FALSE;
1407
 
1408
  // ブラックIPリスト
1409
- $block_ip_addresses_str = get_option( 'tsa_block_ip_addresses', '');
1410
- $block_ip_addresses = str_replace("\n", ",", $block_ip_addresses_str);
1411
- $ip_list = explode( ",", $block_ip_addresses );
1412
 
1413
- $act = ( isset( $_POST['act'] ) ? esc_attr( $_POST['act'] ) : NULL );
1414
 
1415
  if ( isset( $_POST['tsa_nonce'] ) ) {
1416
  check_admin_referer( 'tsa_action', 'tsa_nonce' );
@@ -1418,15 +1530,15 @@ function addIpAddresses(newAddressStr) {
1418
  // スパム情報から 特定IPアドレス削除
1419
  if ( $act == "remove_ip" ) {
1420
  $remove_ip_address = @htmlspecialchars( $_POST['ip_address'] );
1421
- if ( !isset( $remove_ip_address ) || strlen( $remove_ip_address ) == 0 ) {
1422
  // N/A
1423
  } else {
1424
  // スパムデータベースから特定IP情報削除
1425
  $wpdb->query(
1426
- "DELETE FROM ".$this->table_name." WHERE ip_address = '".$remove_ip_address."' "
1427
  );
1428
- $_saved = TRUE;
1429
- $message = "スパムデータから $remove_ip_address のデータを削除しました。";
1430
  }
1431
  } elseif ( $act == "add_ip" ) {
1432
  $add_ip_address = @htmlspecialchars( $_POST['ip_address'] );
@@ -1434,312 +1546,310 @@ function addIpAddresses(newAddressStr) {
1434
  // N/A
1435
  } else {
1436
  // 対象IPアドレスに一つ追加
1437
- $dup_flg = FALSE;
1438
  foreach ( $ip_list as $ip ) {
1439
- if ( $ip == trim($add_ip_address) ) {
1440
- $_saved = TRUE;
1441
- $message = "$add_ip_address はすでに設定されています。";
1442
- $dup_flg = TRUE;
1443
  break;
1444
  }
1445
  }
1446
- if ( $dup_flg == FALSE ) {
1447
- $added_block_ip_addresses_str = $block_ip_addresses_str . "\n" .$add_ip_address;
1448
- update_option("tsa_block_ip_addresses", $added_block_ip_addresses_str);
1449
- $_saved = TRUE;
1450
- $message = "$add_ip_address を追加設定しました。";
1451
  }
1452
  }
1453
  } elseif ( $act == "truncate" ) {
1454
  // スパムデータテーブルのtruncateを行う
1455
  $result = $wpdb->query(
1456
- "TRUNCATE TABLE ".$this->table_name );
1457
- if ( $result == TRUE ) {
1458
- $_saved = TRUE;
1459
- $message = "スパムデータをすべて削除しました。";
1460
  } else {
1461
- $_saved = TRUE;
1462
- $message = "スパムデータテーブルへ削除処理を実行しましたが、エラーが発生し処理が完了しませんでした。";
1463
  }
1464
  }
1465
  }
 
 
 
 
 
 
 
 
 
 
1466
  ?>
1467
- <div class="wrap">
1468
- <?php
1469
- if ( get_option( 'tsa_spam_data_save' ) == '1' ) {
1470
- // 日数
1471
- $gdays = get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count);
1472
- if ( $gdays < $lower_spam_keep_day_count ) { $gdays = $lower_spam_keep_day_count; }
1473
- // 表カラー
1474
- $unique_color="#114477";
1475
- $web_color="#3377B6";
1476
- ?>
1477
- <h2>Throws SPAM Away スパムデータ</h2>
1478
- <h3>スパム投稿<?php echo $gdays; ?>日間の推移</h3>
1479
- <?php if ( $_saved ) { ?>
1480
- <div class="updated" style="padding: 10px; width: 50%;" id="message"><?php esc_attr_e( $message ); ?></div>
1481
- <?php } ?>
1482
- <div style="background-color: #efefef;">
1483
- <table style="width: 100%; border: none;">
1484
- <tr>
1485
- <?php
1486
- $total_qry = "
 
1487
  SELECT count(ppd) as pageview, ppd
1488
  FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as A
1489
- GROUP BY ppd HAVING ppd >= '".gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
1490
  ORDER BY pageview DESC
1491
  LIMIT 1
1492
  ";
1493
- $qry = $wpdb->get_row( $total_qry );
1494
- $maxxday = 0;
1495
- if ( $qry ) {
1496
- $maxxday = $qry->pageview;
1497
 
1498
- $total_vis = "
1499
  SELECT count(distinct ip_address) as vis, ppd
1500
  FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
1501
  GROUP BY ppd HAVING ppd >= '" . gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays ) . "'
1502
  ORDER BY vis DESC
1503
  LIMIT 1
1504
  ";
1505
- $qry_vis = $wpdb->get_row( $total_vis );
1506
- $maxxday += $qry_vis->vis;
1507
- }
1508
-
1509
- if ( $maxxday == 0 ) {
1510
- $maxxday = 1;
1511
- }
1512
-
1513
- // Y
1514
- $gd = ( 100 / $gdays ).'%';
1515
- for ( $gg = $gdays - 1; $gg >= 0; $gg-- ) {
1516
- // TOTAL SPAM COUNT
1517
- $visitor_qry = "
1518
  SELECT count(DISTINCT ip_address) AS total
1519
  FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
1520
- WHERE ppd = '".gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gg )."'
1521
  ";
1522
- $qry_visitors = $wpdb->get_row( $visitor_qry );
1523
- $px_visitors = round( $qry_visitors->total * 100 / $maxxday );
1524
- // TOTAL
1525
- $pageview_qry = "
1526
  SELECT count(ppd) as total
1527
  FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as C
1528
- WHERE ppd = '".gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gg )."'
1529
  ";
1530
- $qry_pageviews = $wpdb->get_row( $pageview_qry );
1531
- $px_pageviews = round( $qry_pageviews->total * 100 / $maxxday );
1532
- $px_white = 100 - $px_pageviews - $px_visitors;
1533
- if ( $px_white < 0 ) {
1534
- $px_white = 0;
1535
- }
1536
-
1537
- print "<td width='$gd' valign='bottom'><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;text-align:center;border-right:1px solid white;color:black;'>
1538
- <div style='background:#ffffff;width:100%;height:".$px_white."px;'></div>
1539
- <div style='background:$unique_color;width:100%;height:".$px_visitors."px;' title='".$qry_visitors->total." ip_addresses'></div>
1540
- <div style='background:$web_color;width:100%;height:".$px_pageviews."px;' title='".$qry_pageviews->total." spam comments'></div>
1541
  <div style='background:gray;width:100%;height:1px;'></div>
1542
- <br />".gmdate( 'd', current_time( 'timestamp' ) - 86400 * $gg ) . '<br />' . gmdate( 'M', current_time( 'timestamp' ) - 86400 * $gg ) ."
1543
- <div style='background:;width:100%;height:2.2em;'>".$qry_visitors->total."<br />".$qry_pageviews->total."</div>
1544
  <br clear=\"all\" /></div>
1545
  </td>\n";
1546
- } ?>
1547
- </tr>
1548
- </table>
1549
- </div>
1550
- &nbsp;※&nbsp;数値は
1551
- &lt;上段&gt;がSPAM投稿したユニークIPアドレス数、&nbsp;&lt;下段&gt;が破棄したスパム投稿数<br />
1552
-
1553
- <?php
1554
- // wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
1555
- $results = $wpdb->get_results(
1556
- "SELECT D.cnt as cnt,E.ip_address as ip_address, D.ppd as post_date, E.error_type as error_type, E.author as author, E.comment as comment FROM
1557
- ((select count(ip_address) as cnt, ip_address, max(post_date) as ppd, error_type, author, comment from $this->table_name
1558
- WHERE post_date >= '". gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
1559
- GROUP BY ip_address) as D INNER JOIN $this->table_name as E ON D.ip_address = E.ip_address AND D.ppd = E.post_date)
1560
- ORDER BY post_date DESC"
1561
- );
1562
- ?>
1563
  <h4>
1564
- 過去
1565
- <?php echo $gdays; ?>
1566
- 日間に無視投稿されたIPアドレス
1567
- </h4>
1568
- <p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
1569
- <p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
1570
- <?php if ( count( $results ) > 0 ) {
1571
- $p_url = WP_PLUGIN_URL.'/'.str_replace( basename( __FILE__ ), '', plugin_basename( __FILE__ ) );
1572
- wp_enqueue_script( 'jquery.tablesorter', $p_url.'js/jquery.tablesorter.min.js', array( 'jquery' ), FALSE );
1573
- wp_enqueue_style( 'jquery.tablesorter', $p_url.'images/style.css' );
1574
- wp_enqueue_style( 'thorows-spam-away-styles', $p_url.'css/tsa_data_styles.css' );
1575
- ?>
1576
- <script type="text/JavaScript">
1577
- <!--
1578
- jQuery(function() {
1579
- jQuery('#spam_list').tablesorter({
1580
- widgets: ['zebra'],
1581
- headers: {
1582
- 0: { id: "ipAddress" },
1583
- 1: { sorter: "digit" },
1584
- 2: { sorter: "shortDate" },
1585
- 3: { sorter: false }
1586
- }
1587
- });
1588
- });
1589
-
1590
- function removeIpAddressOnData(ipAddressStr) {
1591
- if (confirm('['+ipAddressStr+'] をスパムデータベースから削除します。よろしいですか?この操作は取り消せません')) {
1592
- jQuery('#remove_ip_address').val(ipAddressStr);
1593
- jQuery('#remove').submit();
1594
- } else {
1595
- return false;
1596
- }
1597
- }
1598
-
1599
- function addIpAddressOnData(ipAddressStr) {
1600
- if (confirm('['+ipAddressStr+'] を無視対象に追加します。よろしいですか?削除は設定から行ってください')) {
1601
- jQuery('#add_ip_address').val(ipAddressStr);
1602
- jQuery('#adding').submit();
1603
- } else {
1604
- return false;
1605
- }
1606
- }
1607
- -->
1608
- </script>
1609
- <p><strong>投稿内容の判定</strong></p>
1610
- ※最新1件のコメント内容はIPアドレスまたはエラー判定のリンク先を参照してください。
1611
- <div id="spam_list_container">
1612
- <div id="spam_list_div">
1613
- <table id="spam_list" class="tablesorter">
1614
- <colgroup class="cols0"></colgroup>
1615
- <colgroup class="cols1"></colgroup>
1616
- <colgroup class="cols2"></colgroup>
1617
- <colgroup class="cols3"></colgroup>
1618
- <colgroup class="cols4"></colgroup>
1619
- <thead>
1620
- <tr>
1621
- <th class="cols0">IPアドレス</th>
1622
- <th class="cols1">投稿数</th>
1623
- <th class="cols2">最終投稿日時</th>
1624
- <th class="cols3">スパムIP登録</th>
1625
- <th class="cols4">エラー判定(最新)</th>
1626
- </tr>
1627
- </thead>
1628
- <tbody>
1629
- <?php
1630
- foreach ( $results as $item ) {
1631
- $spam_ip = $item->ip_address;
1632
- $spam_cnt = $item->cnt;
1633
- $last_post_date = $item->post_date;
1634
- $spam_error_type = $item->error_type;
1635
- $spam_author = strip_tags( $item->author );
1636
- $spam_comment = strip_tags( $item->comment );
1637
-
1638
- // エラー変換
1639
- $spam_error_type_str = $spam_error_type;
1640
- switch ( $spam_error_type ) {
1641
- case NOT_JAPANESE:
1642
- $spam_error_type_str = '日本語以外';
1643
- break;
1644
- case MUST_WORD:
1645
- $spam_error_type_str = '必須キーワード無し';
1646
- break;
1647
- case NG_WORD:
1648
- $spam_error_type_str = 'NGキーワード混入';
1649
- break;
1650
- case BLOCK_IP:
1651
- $spam_error_type_str = 'ブロック対象IPアドレス';
1652
- break;
1653
- case SPAM_BLACKLIST:
1654
- $spam_error_type_str = 'スパムブラックリスト';
1655
- break;
1656
- case SPAM_TRACKBACK:
1657
- $spam_error_type_str = 'トラックバックスパム';
1658
- break;
1659
- case URL_COUNT_OVER:
1660
- $spam_error_type_str = 'URL文字列混入数オーバー';
1661
- break;
1662
- case SPAM_LIMIT_OVER:
1663
- $spam_error_type_str = '一定時間スパム判定エラー';
1664
- break;
1665
- case DUMMY_FIELD:
1666
- $spam_error_type_str = 'ダミー項目エラー';
1667
- break;
1668
- case NOT_IN_WHITELIST_IP:
1669
- $spam_error_type_str = 'ホワイトリスト許可IP以外';
1670
- break;
1671
- }
1672
- ?>
1673
- <tr>
1674
- <td>
1675
- <b><a href="javascript:void(0);"
1676
- onclick="window.open('<?php echo esc_attr( $p_url ); ?>hostbyip.php?ip=<?php esc_attr_e( $spam_ip ); ?>', 'hostbyip', 'width=350,height=500,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php esc_attr_e( $spam_ip ); ?>
1677
- </a></b><br clear="all" />
1678
- <input type="button"
1679
- onclick="javascript:removeIpAddressOnData('<?php esc_attr_e( $spam_ip ); ?>');"
1680
- value="スパムデータから削除する" />
1681
- </td>
1682
- <td><?php esc_attr_e( $spam_cnt ); ?>回</td>
1683
- <td><?php esc_attr_e( $last_post_date ); ?></td>
1684
- <td>
1685
- <?php // if ( ! in_array( $spam_ip, $ip_list ) ) { ?>
1686
- <input type="button"
1687
- onclick="javascript:addIpAddressOnData('<?php esc_attr_e( $spam_ip ); ?>');"
1688
- value="ブロック対象IPアドレス追加[<?php esc_attr_e( $spam_ip ); ?>]" />
1689
- <?php /*} else { ?>
1690
  ブロック対象IP
1691
  <?php } */ ?>
1692
- </td>
1693
- <td>
1694
- <a href="javascript:void(0);"
1695
- onclick="window.open('<?php echo esc_attr( $p_url ); ?>hostbyip.php?ip=<?php esc_attr_e( $spam_ip ); ?>', 'hostbyip', 'width=350,height=500,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php esc_attr_e( $spam_error_type_str ); ?>
1696
- </a>
1697
- </td>
1698
- </tr>
1699
- <?php
1700
- }
1701
- ?>
1702
- </tbody>
1703
- </table>
1704
- </div>
1705
- </div>
1706
- <?php } ?>
1707
- <?php } else { ?>
1708
- <p>スパムデータベースを使用するにはThrows SPAM Awayのメニュー「設定」から<br />
1709
- 「スパムコメント投稿情報を保存しますか?」項目を<strong>「スパムコメント情報を保存する」</strong>に設定してください</p>
1710
- <?php } ?>
1711
- <form method="post" id="remove">
1712
- <input type="hidden" name="ip_address" id="remove_ip_address" value="" />
1713
- <input type="hidden" name="act" value="remove_ip" />
1714
- <?php wp_nonce_field( 'tsa_action', 'tsa_nonce' )?>
1715
- </form>
1716
- <form method="post" id="adding">
1717
- <input type="hidden" name="ip_address" id="add_ip_address" value="" />
1718
- <input type="hidden" name="act" value="add_ip" />
1719
- <?php wp_nonce_field( 'tsa_action', 'tsa_nonce' )?>
1720
- </form>
1721
- <p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
1722
- <form method="post" id="adding">
1723
- <input type="hidden" name="act" value="truncate" />
1724
- <?php
1725
- $other_attributes = array( 'onclick' => "return confirm('すべてのスパムデータが削除されます。よろしいですか?');" );
1726
- submit_button( 'すべてのデータを削除する', 'delete', 'wpdocs-save-settings', true, $other_attributes );
1727
- ?>
1728
- <?php wp_nonce_field( 'tsa_action', 'tsa_nonce' )?>
1729
- </form>
1730
- </div>
1731
- <br clear="all" />
1732
- <?php
1733
  }
1734
 
1735
  /**
1736
- * おすすめ設定ページ
1737
  */
1738
  function recommend_setting() {
1739
- global $wpdb;
1740
  ?>
1741
- 制作中
1742
- <?php
1743
  }
1744
 
1745
  }
1
  <?php
2
+
3
  /**
4
  *
5
  * <p>ThrowsSpamAway</p> Class
6
  * WordPress's Plugin
7
+ * @author Takeshi Satoh@GTI Inc. 2021
8
+ * @version 3.3.1
9
  */
10
  class ThrowsSpamAway {
11
 
12
+ const DOMAIN = 'throws-spam-away';
 
13
 
14
+ // データベースのversion
15
+ var $table_name = null;
16
+ // エラータイプ
17
+ var $error_type = null;
18
 
19
+ /**
20
+ * ThrowsSpamAway constructor.
21
+ */
22
  public function __construct() {
 
23
  global $tsa_spam_tbl_name;
24
  global $wpdb;
25
+ // language
26
+ load_plugin_textdomain( self::DOMAIN, false, basename( dirname( __FILE__ ) ) . '/languages' );
27
  // Activate
28
  register_activation_hook( __FILE__, array( $this, 'activate' ) );
29
 
30
  // エラー記号
31
+ if ( ! defined( 'MUST_WORD' ) ) {
32
+ define( 'MUST_WORD', 'must_word' );
33
  define( 'NG_WORD', 'ng_word' );
34
  define( 'BLOCK_IP', 'block_ip' );
35
  define( 'SPAM_BLACKLIST', 'spam_champuru' );
38
  define( 'DUMMY_FIELD', 'dummy_param_field' );
39
 
40
  define( 'SPAM_TRACKBACK', 'spam_trackback' );
41
+ define( 'NOT_JAPANESE', 'not_japanese' );
42
 
43
+ define( 'NOT_IN_WHITELIST_IP', 'not_in_whitelist_ip' );
44
  }
45
 
46
  // 接頭辞(wp_)を付けてテーブル名を設定
49
  // 管理画面メニュー追加
50
  add_action( 'admin_menu', array( $this, 'admin_menu' ) );
51
 
52
+ global $df_spam_keep_day_cnt;
53
+ global $lower_spam_keep_day_cnt;
54
 
55
  // 保存期間終了したデータ削除
56
+ $skdc = intval( get_option( 'tsa_spam_keep_day_count', $df_spam_keep_day_cnt ) );
57
+ if ( $skdc < $lower_spam_keep_day_cnt ) {
58
+ $skdc = $lower_spam_keep_day_cnt;
59
+ }
60
  if ( get_option( 'tsa_spam_data_delete_flg', '' ) == '1' ) {
61
  // 期間 get_option( 'tsa_spam_keep_day_count' ) 日
62
+ $tsearch = $wpdb->get_var( "SELECT 1 FROM " .$this->table_name . " LIMIT 1" );
63
+ if ( $tsearch == 1 ) {
64
+ $del_query = "DELETE FROM " . $this->table_name . " WHERE post_date < %s ";
65
+ $wpdb->query( $wpdb->prepare( $del_query, gmdate( 'Y-m-d 23:59:59', current_time( 'timestamp' ) - ( 86400 * $skdc ) ) ) );
66
+ }
67
  }
68
  }
69
 
71
  * プラグインインストール後 有効化時処理
72
  */
73
  function activate() {
74
+ global $df_dummy_param_field_flg, $df_on_flg, $df_without_title_str, $df_japanese_string_min_cnt;
75
+ global $df_back_second, $df_caution_msg;
76
+ global $df_caution_msg_pnt, $df_err_msg, $df_url_cnt_chk_flg;
77
+ global $df_ok_url_cnt, $df_url_cnt_over_err_msg, $df_ng_key_err_msg;
78
+ global $df_must_key_err_msg, $df_tb_on_flg, $df_tb_url_flg;
79
  //global $default_spam_champuru_hosts,
80
+ global $df_spam_champuru_by_text, $df_spam_champuru_flg;
81
+ global $df_ip_block_from_spam_chk_flg, $df_block_ip_address_err_msg, $df_spam_data_save;
82
+ global $df_spam_data_delete_flg, $df_spam_keep_day_cnt;
83
+ global $df_spam_limit_flg, $df_spam_limit_minutes, $df_spam_limit_cnt;
84
+ global $df_spam_limit_over_interval, $df_spam_limit_over_interval_err_msg;
85
+ global $df_only_whitelist_ip_flg;
86
 
87
  // 初期設定値
88
+ update_option( 'tsa_dummy_param_field_flg', $df_dummy_param_field_flg );
89
+ update_option( 'tsa_on_flg', $df_on_flg );
90
+ update_option( 'tsa_without_title_str', $df_without_title_str );
91
+ update_option( 'tsa_japanese_string_min_count', $df_japanese_string_min_cnt );
92
+ update_option( 'tsa_back_second', $df_back_second );
93
+ update_option( 'tsa_caution_msg', $df_caution_msg );
94
+ update_option( 'tsa_caution_msg_point', $df_caution_msg_pnt );
95
+ update_option( 'tsa_error_msg', $df_err_msg );
96
+ update_option( 'tsa_url_count_check_flg', $df_url_cnt_chk_flg );
97
+ update_option( 'tsa_ok_url_count', $df_ok_url_cnt );
98
+ update_option( 'tsa_url_count_over_error_msg', $df_url_cnt_over_err_msg );
99
+ update_option( 'tsa_ng_key_error_message', $df_ng_key_err_msg );
100
+ update_option( 'tsa_must_key_error_message', $df_must_key_err_msg );
101
+ update_option( 'tsa_tb_on_flg', $df_tb_on_flg );
102
+ update_option( 'tsa_tb_url_flg', $df_tb_url_flg );
103
+ delete_option( 'tsa_spam_champuru_hosts' );
104
+ update_option( 'tsa_spam_champuru_by_text', $df_spam_champuru_by_text );
105
+ update_option( 'tsa_spam_champuru_flg', $df_spam_champuru_flg );
106
+ update_option( 'tsa_ip_block_from_spam_chk_flg', $df_ip_block_from_spam_chk_flg );
107
+ update_option( 'tsa_block_ip_address_error_message', $df_block_ip_address_err_msg );
108
+ update_option( 'tsa_spam_data_save', $df_spam_data_save );
109
+ update_option( 'tsa_spam_data_delete_flg', $df_spam_data_delete_flg );
110
+ update_option( 'tsa_spam_keep_day_count', $df_spam_keep_day_cnt );
111
+ update_option( 'tsa_spam_limit_flg', $df_spam_limit_flg );
112
+ update_option( 'tsa_spam_limit_minutes', $df_spam_limit_minutes );
113
+ update_option( 'tsa_spam_limit_count', $df_spam_limit_cnt );
114
+ update_option( 'tsa_spam_limit_over_interval', $df_spam_limit_over_interval );
115
+ update_option( 'tsa_spam_limit_over_interval_error_message', $df_spam_limit_over_interval_err_msg );
116
+ update_option( 'tsa_only_whitelist_ip_flg', $df_only_whitelist_ip_flg );
117
 
118
  // スパムデータベース作成
119
  $this->tsa_create_tbl();
137
 
138
  $table_name = $wpdb->prefix . $tsa_spam_tbl_name;
139
  // テーブル作成要フラグ
140
+ $flg = false;
141
+ if ( $wpdb->get_var( "SELECT 1 FROM " .$table_name . " LIMIT 1" ) != 1 ) {
142
  // テーブルが存在しないため作成する
143
+ $flg = true;
144
  }
145
 
146
  //DBのバージョン
148
  //現在のDBバージョン取得
149
  $installed_ver = get_option( 'tsa_meta_version', 0 );
150
  // DBバージョンが低い または テーブルが存在しない場合は作成
151
+ if ( $flg == true || $installed_ver < $tsa_db_version ) {
152
  // dbDeltaのおかげ様でCREATE文のみ
153
  $sql = "CREATE TABLE $table_name (
154
  meta_id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
170
 
171
  /**
172
  * スパム投稿の記録
173
+ *
174
  * @param string $post_id
175
  * @param string $ip_address
176
  */
177
  function save_post_meta( $post_id, $ip_address, $spam_contents ) {
178
+ global $df_spam_data_save;
179
 
180
+ if ( get_option( 'tsa_spam_data_save', $df_spam_data_save ) != '1' ) {
181
+ return;
182
+ }
183
 
184
  global $wpdb;
185
 
186
  $error_type = $spam_contents['error_type'];
187
+ $author = strip_tags( $spam_contents['author'] );
188
+ $comment = strip_tags( $spam_contents['comment'] );
189
 
190
  //保存するために配列にする
191
  $set_arr = array(
192
+ 'post_id' => $post_id,
193
+ 'ip_address' => $ip_address,
194
+ 'error_type' => $error_type,
195
+ 'author' => $author,
196
+ 'comment' => $comment,
197
  );
198
 
199
  //レコード新規追加
200
  $wpdb->insert( $this->table_name, $set_arr );
201
+
202
  return;
203
  }
204
 
205
  // JS読み込み部
206
  function tsa_scripts_init() {
207
+ global $post;
208
  global $tsa_version;
209
 
210
+ $comments_open = ( isset( $post->comment_status ) && $post->comment_status != 'closed' );
211
 
212
  // anti-spam の方法を参考に作成しました
213
  if (
214
+ ! is_admin() &&
215
+ ! is_home() &&
216
+ ! is_front_page() &&
217
+ ! is_archive() &&
218
+ ! is_search() &&
219
+ $comments_open
220
  ) {
221
  wp_enqueue_script( 'throws-spam-away-script', plugins_url( '/js/tsa_params.min.js', __FILE__ ), array( 'jquery' ), $tsa_version );
222
  }
223
  }
224
 
225
+ function comment_form_message_html() {
226
+ global $df_caution_msg;
227
+ $ret = "";
228
+ // 注意文言表示 Filter Hook: tsa_caution_message since Ver.3.3
229
+ $caution_msg = apply_filters( 'tsa_caution_message', get_option( 'tsa_caution_message', $df_caution_msg ) );
230
  // 注意文言が設定されている場合のみ表示する
231
  if ( strlen( trim( $caution_msg ) ) > 0 ) {
232
+ $ret = '<p id="throwsSpamAway">' . $caution_msg . '</p>';
233
  }
234
+ return $ret;
235
+ }
236
+
237
+ function comment_form() {
238
+ echo $this->comment_form_message_html();
239
+ }
240
+
241
+ /**
242
+ * コメントフォーム 送信ボタン前
243
+ *
244
+ * Filter Hook: tsa_comment_form_submit_field since Ver.3.3
245
+ *
246
+ * @param $submit_field
247
+ * @param $args
248
+ *
249
+ * @return mixed|void
250
+ */
251
+ function comment_form_submit_field( $submit_field, $args ) {
252
+ $ret = $this->comment_form_message_html();
253
+ return apply_filters( 'tsa_comment_form_submit_field', $ret . $submit_field, $submit_field, $ret );
254
  }
255
 
256
  function comment_form_dummy_param_field() {
257
+ global $df_dummy_param_field_flg;
258
  // 空パラメータフィールド作成
259
+ $dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $df_dummy_param_field_flg );
260
  if ( $dummy_param_field_flg == '1' ) {
261
  echo '<p class="tsa_param_field_tsa_" style="display:none;">email confirm<span class="required">*</span><input type="text" name="tsa_email_param_field___" id="tsa_email_param_field___" size="30" value="" />
262
  </p>';
263
+ echo '<p class="tsa_param_field_tsa_2" style="display:none;">post date<span class="required">*</span><input type="text" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" size="30" value="' . date( 'Y-m-d H:i:s' ) . '" />
264
  </p>';
265
  }
266
  }
267
 
268
+ function comment_post( $commentdata ) {
269
  global $newThrowsSpamAway;
270
  global $user_ID;
271
+ global $df_back_second;
272
+ global $df_err_msg;
273
+ global $df_ng_key_err_msg;
274
+ global $df_must_key_err_msg;
275
+ global $df_block_ip_address_err_msg;
276
+ global $df_url_cnt_over_err_msg;
277
+ global $df_spam_limit_over_interval_err_msg;
278
+ global $df_only_whitelist_ip_flg;
279
+ global $df_spam_data_save;
280
 
281
  // ログインしている場合は通過させます。
282
  if ( $user_ID ) {
283
+ return $commentdata;
284
  }
285
 
286
  // コメント(comment)及び名前(author)の中も検査
287
+ $id = @$commentdata['comment_post_ID'];
288
+ $author = @$commentdata['comment_author'];
289
+ $comment = @$commentdata['comment_content'];
290
 
291
  // チェック対象IPアドレス
292
  $remote_ip = $_SERVER['REMOTE_ADDR'];
293
+ if ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
294
  $remote_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
295
+ $ip_array = explode( ",", $remote_ip );
296
  $remote_ip = $ip_array[0];
297
  }
298
 
299
+ // 許可リスト優先通過
300
  // IP制御 任意のIPアドレスをあればブロックする
301
+ $white_ip_addresses = trim( get_option( 'tsa_white_ip_addresses', '' ) );
302
+ $only_whitelist_ip_flg = get_option( 'tsa_only_whitelist_ip_flg', $df_only_whitelist_ip_flg );
303
+ $white_ip = ! $newThrowsSpamAway->white_ip_check( $remote_ip );
304
+ // IP制御 許可リストIPのみ許可する場合(許可リストに記入がある場合のみ有効)
305
+ if ( ! empty( $white_ip_addresses ) &&
306
+ $only_whitelist_ip_flg === '1' && $white_ip == false ) {
307
+ // 許可リスト以外通さない
308
  $newThrowsSpamAway->error_type = NOT_IN_WHITELIST_IP;
309
  } else {
310
  // IP系の検査
311
+ if ( ! $newThrowsSpamAway->ip_check( $remote_ip ) && $white_ip == false ) {
312
  // アウト!
313
+
314
+ } elseif ( $newThrowsSpamAway->validation( $comment, $author, $id ) ) { // コメント検査
315
+ return $commentdata;
 
316
  }
317
  }
318
  $error_type = $newThrowsSpamAway->error_type;
319
+ $error_msg = get_option( 'tsa_error_message', $df_err_msg );
320
  switch ( $error_type ) {
321
  case MUST_WORD :
322
+ $error_msg = get_option( 'tsa_must_key_error_message', $df_must_key_err_msg );
323
  break;
324
  case NG_WORD :
325
+ $error_msg = get_option( 'tsa_ng_key_error_message', $df_ng_key_err_msg );
326
  break;
327
  case BLOCK_IP :
328
  case NOT_IN_WHITELIST_IP :
329
  case SPAM_BLACKLIST :
330
+ $error_msg = get_option( 'tsa_block_ip_address_error_message', $df_block_ip_address_err_msg );
331
  break;
332
  case URL_COUNT_OVER :
333
+ $error_msg = get_option( 'tsa_url_count_over_error_message', $df_url_cnt_over_err_msg );
334
  break;
335
  case SPAM_LIMIT_OVER :
336
+ $error_msg = get_option( 'tsa_spam_limit_over_interval_error_message', $df_spam_limit_over_interval_err_msg );
337
  break;
338
+ case DUMMY_FIELD : // ダミーフィールドの場合は通常メッセージ
339
  default :
 
340
  }
341
  // 記録する場合はDB記録
342
+ if ( get_option( 'tsa_spam_data_save', $df_spam_data_save ) == '1' ) {
343
+ $spam_contents = array();
344
  $spam_contents['error_type'] = $error_type;
345
+ $spam_contents['author'] = mb_strcut( $author, 0, 255 );
346
+ $spam_contents['comment'] = mb_strcut( $comment, 0, 255 );
347
 
348
  $this->save_post_meta( $id, $remote_ip, $spam_contents );
349
  }
350
  // 元画面へ戻るタイム計算
351
+ $back_time = ( (int) get_option( 'tsa_back_second', $df_back_second ) ) * 1000;
352
  // タイム値が0なら元画面へそのままリダイレクト
353
  if ( $back_time == 0 ) {
354
+ header( 'Location:' . $_SERVER['HTTP_REFERER'] );
355
  die;
356
  } else {
357
+ wp_die( $error_msg . '<script type="text/javascript">var closing = function() {location.href="' . $_SERVER['HTTP_REFERER'] . '";}
358
+ window.setTimeout( closing, ' . $back_time . ');</script>' );
 
359
  }
360
  }
361
 
364
  $author,
365
  $comment,
366
  $validate_array
367
+ ) {
368
+ global $df_on_flg; // 日本語以外を弾くかどうか初期値
369
+ global $df_url_cnt_chk_flg; // URL数を制御するか初期設定値
370
+ global $df_ok_url_cnt; // 制限する場合のURL数初期設定値
371
+ global $df_japanese_string_min_cnt; // 日本語文字最小含有数
372
+ global $df_without_title_str; // タイトル文字列は文字列カウントから排除するか 1:する
373
+
374
  //
375
+ $_japanese_string_min_count = get_option( 'tsa_japanese_string_min_count', $df_japanese_string_min_cnt );
376
  // NGキーワード文字列群
377
  $_ng_keywords = get_option( 'tsa_ng_keywords', '' );
378
+ // キーワード文字列群 ※拒否リストと重複するものは拒否リストのほうが優先です。
379
  $_must_keywords = get_option( 'tsa_must_keywords', '' );
380
  // URL数チェック
381
+ $_url_count_check = get_option( 'tsa_url_count_on_flg', $df_url_cnt_chk_flg );
382
  // 許容URL数設定値
383
+ $_ok_url_count = intval( get_option( 'tsa_ok_url_count', $df_ok_url_cnt ) ); // デフォルト値3(3つまで許容)
384
+ // タイトル文字列を文字列カウントから排除するか デフォルト 1:する
385
+ $tsa_without_title_str = intval( get_option( 'tsa_without_title_str', $df_without_title_str ) );
386
+
387
+ $validate_array = array_merge( array(
388
+ 'post_id' => null,
389
+ 'tsa_on_flg' => $df_on_flg,
390
+ 'tsa_japanese_string_min_count' => $_japanese_string_min_count,
391
+ 'tsa_ng_keywords' => $_ng_keywords,
392
+ 'tsa_must_keywords' => $_must_keywords,
393
+ 'tsa_url_count_check' => $_url_count_check,
394
+ 'tsa_ok_url_count' => $_ok_url_count
395
  ), $validate_array );
396
 
397
+ // post->ID
398
+ $post_id = @$validate_array['post_id'];
399
+ // スパムフィルター ON フラグ
400
+ $tsa_on_flg = @$validate_array['tsa_on_flg'];
 
 
 
 
 
 
 
 
 
 
401
  // 日本語文字列必須含有数
402
+ $tsa_japanese_string_min_count = @$validate_array['tsa_japanese_string_min_count'];
403
  $tsa_japanese_string_min_count = intval( $tsa_japanese_string_min_count );
404
  // NGキーワード文字列群
405
+ $tsa_ng_keywords = @$validate_array['tsa_ng_keywords'];
406
+ // キーワード文字列群 ※拒否リストと重複するものは拒否リストのほうが優先です。
407
+ $tsa_must_keywords = @$validate_array['tsa_must_keywords'];
408
  // URL数チェック
409
+ $tsa_url_count_check = @$validate_array['tsa_url_count_check'];
410
  // 許容URL数設定値
411
+ $tsa_ok_url_count = @$validate_array['tsa_ok_url_count'];
412
  $tsa_ok_url_count = intval( $tsa_ok_url_count ); // デフォルト値3(3つまで許容)
413
 
414
+ // シングルバイトだけならエラー
415
+ if ( $tsa_on_flg == 1 && $this->is_only_in_singlebyte( $comment ) ) {
416
+ $this->error_type = NOT_JAPANESE;
417
+
418
+ return false;
419
+ }
420
+
421
  // マルチバイト文字が含まれている場合は日本語が含まれていればOK
422
  if ( $tsa_on_flg == 1 ) {
423
  $count_flg = 0;
424
+ mb_regex_encoding( 'UTF-8' );
425
  $com_split = $this->mb_str_split( $comment );
426
 
427
+ $tit_split = array();
428
 
429
  // タイトル文字列が含まれている場合はそれを除く機能のためタイトル文字列リスト化
430
+ if ( $tsa_without_title_str == 1 && $post_id != null ) {
431
  global $wpdb;
432
+ $target_post = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM " . $wpdb->posts . " WHERE ID = %d ", htmlspecialchars( $post_id ) ) );
433
 
434
  $title = $target_post[0]->post_title;
435
 
447
 
448
  } else {
449
 
450
+ if ( preg_match( '/[一-龠]+/u', $it ) ) {
451
  $count_flg += 1;
452
  }
453
+ if ( preg_match( '/[ァ-ヶー]+/u', $it ) ) {
454
  $count_flg += 1;
455
  }
456
+ if ( preg_match( '/[ぁ-ん]+/u', $it ) ) {
457
  $count_flg += 1;
458
  }
459
 
461
  }
462
 
463
  $flg = ( $tsa_japanese_string_min_count < $count_flg );
464
+ if ( $flg == false ) {
465
  $this->error_type = NOT_JAPANESE;
466
+
467
+ return false;
468
  }
469
  }
470
  // 日本語文字列チェック抜けたらキーワードチェックを行う
471
  if ( $tsa_ng_keywords != '' ) {
472
  $keyword_list = explode( ',', $tsa_ng_keywords );
473
  foreach ( $keyword_list as $key ) {
474
+ if ( preg_match( '/' . trim( $key ) . '/u', $author . $comment ) ) {
475
  $this->error_type = NG_WORD;
476
+
477
+ return false;
478
  }
479
  }
480
  }
481
+ // キーワードチェック(拒否リスト)を抜けたら必須キーワードチェックを行う
482
  if ( $tsa_must_keywords != '' ) {
483
  $keyword_list = explode( ',', $tsa_must_keywords );
484
  foreach ( $keyword_list as $key ) {
485
+ if ( preg_match( '/' . trim( $key ) . '/u', $author . $comment ) ) {
486
  // OK
487
  } else {
488
  // 必須ワードがなかったためエラー
489
  $this->error_type = MUST_WORD;
490
+
491
+ return false;
492
  }
493
  }
494
  }
495
  // 含有URL数チェック
496
  if ( $tsa_url_count_check != '2' ) {
497
+ if ( substr_count( strtolower( $author . $comment ), 'http' ) > $tsa_ok_url_count ) {
498
  // URL文字列(httpの数)が多いエラー
499
  $this->error_type = URL_COUNT_OVER;
500
+
501
+ return false;
502
  }
503
  }
504
 
505
+ return true;
506
  }
507
 
508
 
512
  }
513
 
514
  /**
515
+ * IP制御許可リストチェックメソッド
516
+ *
517
  * @param string $target_ip
518
  */
519
  function white_ip_check( $target_ip ) {
520
+ global $df_only_whitelist_ip_flg;
521
+ $white_ip_addresses = trim( get_option( 'tsa_white_ip_addresses', '' ) );
522
+ $only_whitelist_ip_flg = get_option( 'tsa_only_whitelist_ip_flg', $df_only_whitelist_ip_flg );
523
 
524
+ if ( ! empty( $white_ip_addresses ) ) {
525
  // 改行区切りの場合はカンマ区切りに文字列置換後リスト化
526
  $white_ip_addresses = str_replace( "\n", ',', $white_ip_addresses );
527
+ $ip_list = explode( ',', $white_ip_addresses );
528
  foreach ( $ip_list as $_ip ) {
529
  // 指定IPが範囲指定の場合 例:192.168.1.0/24
530
+ if ( strpos( $_ip, '/' ) != false ) {
531
  if ( $this->in_cidr( $target_ip, $_ip ) ) {
532
  // 通過対象
533
  if ( $only_whitelist_ip_flg === '1' ) {
534
+ return false;
535
  }
536
  }
537
  } elseif ( trim( $_ip ) == trim( $target_ip ) ) {
538
  // 通過対象
539
  if ( $only_whitelist_ip_flg === '1' ) {
540
+ return false;
541
  }
542
  }
543
  }
544
  }
545
+
546
+ return true;
547
  }
548
 
549
  /**
550
  * IPアドレスのチェックメソッド
551
+ *
552
  * @param string $target_ip
553
  */
554
  function ip_check( $target_ip ) {
555
  global $wpdb; // WordPress DBアクセス
556
+ global $df_spam_champuru_flg; // すぱむちゃんぷるー利用初期値
 
557
 
558
  // スパムフィルター利用あれば始めに通す
559
  // 1.スパムちゃんぷるー
560
+ $spam_filter_spam_champuru_flg = get_option( 'tsa_spam_champuru_flg', $df_spam_champuru_flg );
561
+ if ( $spam_filter_spam_champuru_flg == '1' ) {
562
  return $this->reject_spam_ip( $target_ip );
563
  }
564
  // 2.以降あれば追加
568
 
569
  if ( $ip_block_from_spam_chk_flg === '1' ) {
570
  // wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
571
+ $comment_spam_select_query = "SELECT DISTINCT comment_author_IP FROM " . $wpdb->comments . " WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ";
572
+ $results = $wpdb->get_results( $comment_spam_select_query );
573
  foreach ( $results as $item ) {
574
  if ( trim( $item->comment_author_IP ) == trim( $target_ip ) ) {
575
  // ブロックしたいIP
576
  $this->error_type = BLOCK_IP;
577
+
578
+ return false;
579
  }
580
  }
581
  }
582
  // IP制御 任意のIPアドレスをあればブロックする
583
+ $block_ip_addresses = trim( get_option( 'tsa_block_ip_addresses', '' ) );
584
+ if ( ! empty( $block_ip_addresses ) ) {
585
  // 改行区切りの場合はカンマ区切りに文字列置換後リスト化
586
  $block_ip_addresses = str_replace( "\n", ',', $block_ip_addresses );
587
+ $ip_list = explode( ',', $block_ip_addresses );
588
  foreach ( $ip_list as $ip ) {
589
  // 指定IPが範囲指定の場合 例:192.168.1.0/24
590
+ if ( strpos( $ip, '/' ) != false ) {
591
  if ( $this->in_cidr( $target_ip, $ip ) ) {
592
  // ブロックしたいIP
593
  $this->error_type = BLOCK_IP;
594
+
595
+ return false;
596
  }
597
  } elseif ( trim( $ip ) == trim( $target_ip ) ) {
598
  // ブロックしたいIP
599
  $this->error_type = BLOCK_IP;
600
+
601
+ return false;
 
602
  }
603
+ // セーフIP
604
  }
605
  }
606
+
607
+ return true;
608
  }
609
 
610
  /**
611
+ * スパムちゃんぷるー代替スパム拒否リスト利用ブロック
612
  */
613
  function reject_spam_ip( $ip ) {
614
 
615
+ // スパム拒否リスト [tsa_spam_champuru_hosts] 配列型
616
  // global $default_spam_champuru_hosts;
617
+ // スパム拒否リスト by テキスト [tsa_spam_chmapuru_by_text] 文字列型(カンマ区切り)
618
+ global $df_spam_champuru_by_text;
619
 
620
  // $spam_blacklist_hosts = get_option( 'tsa_spam_champuru_hosts', $default_spam_champuru_hosts );
621
+ $spam_blacklist_by_text = get_option( 'tsa_spam_champuru_by_text', $df_spam_champuru_by_text );
622
 
623
  $spam_blacklist_by_text_lists = explode( ',', $spam_blacklist_by_text );
624
  if ( count( $spam_blacklist_by_text_lists ) > 0 ) {
628
  }
629
 
630
  if ( strlen( trim( $spam_blacklist_by_text ) ) == 0 || count( $spam_blacklist_by_text_lists ) == 0 ) {
631
+ return true;
632
  }
633
 
 
 
634
  $check_list = $spam_blacklist_by_text_lists;
635
 
636
+ $pattern = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';
637
+ $remote_ip = $_SERVER['REMOTE_ADDR'];
638
+ if ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
 
639
  $remote_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
640
+ $ip_array = explode( ",", $remote_ip );
641
  $remote_ip = $ip_array[0];
642
  }
643
  $check_IP = trim( preg_match( $pattern, $ip ) ? $ip : $remote_ip );
644
+ $spam = false;
645
  if ( preg_match( $pattern, $check_IP ) ) {
646
 
647
  // check
648
  $i = 0;
649
+ while ( $i < count( $check_list ) ) {
650
+ $check = implode( '.', array_reverse( preg_split( '\.', $check_IP ) ) ) . '.' . $check_list[ $i ];
 
651
 
652
  $i ++;
653
 
654
+ $result = gethostbyname( $check );
655
 
656
+ if ( $result != $check ) {
657
+ $spam = true;
658
  break;
659
  }
660
  }
661
  }
662
  if ( $spam ) {
663
  $this->error_type = SPAM_BLACKLIST;
664
+
665
+ return false;
666
  }
667
+
668
+ return true;
669
  }
670
 
671
  /**
672
  * CIDRチェック
673
+ *
674
  * @param string $ip
675
  * @param string $cidr
676
+ *
677
  * @return boolean
678
  */
679
  function in_cidr( $ip, $cidr ) {
680
  list( $network, $mask_bit_len ) = explode( '/', $cidr );
681
  if ( ! is_nan( $mask_bit_len ) && $mask_bit_len <= 32 ) {
682
+ $host = 32 - $mask_bit_len;
683
+ $net = ip2long( $network ) >> $host << $host; // 11000000101010000000000000000000
684
+ $ip_net = ip2long( $ip ) >> $host << $host; // 11000000101010000000000000000000
685
+
686
  return $net === $ip_net;
687
  } else {
688
  // 形式が不正ならば無視するためFALSE
689
+ return false;
690
  }
691
  }
692
 
693
  /**
694
  * 日本語が含まれているかチェックメソッド
695
+ *
696
  * @param string $comment
697
  * @param string $author
698
  */
699
+ function validation( $comment, $author, $post_id = null ) {
700
+ global $df_on_flg; // 日本語以外を弾くかどうか初期値
701
+ global $df_dummy_param_field_flg; // ダミー項目によるスパム判定初期値
702
+ // global $df_url_cnt_chk_flg; // URL数を制御するか初期設定値
703
+ // global $df_ok_url_cnt; // 制限する場合のURL数初期設定値
704
+ // global $df_japanese_string_min_cnt; // 日本語文字最小含有数
 
705
 
706
  // Throws SPAM Away 起動フラグ 1:起動 2 or Other:オフ
707
+ $tsa_on_flg = get_option( 'tsa_on_flg', $df_on_flg );
708
 
709
  // 一定時間制限チェック
710
  // 一定時間内スパム認定機能<br />○分以内に○回スパムとなったら○分間、当該IPからのコメントはスパム扱いする設定+スパム情報保存
718
  // tsa_spam_limit_flg,tsa_spam_limit_minutes,tsa_spam_limit_count,tsa_spam_limit_over_interval,tsa_spam_limit_over_interval_error_message
719
 
720
  // タイトル文字列は文字列カウントから排除するか 1:する
721
+ global $df_without_title_str;
722
+ $tsa_without_title_str = intval( get_option( 'tsa_without_title_str', $df_without_title_str ) );
723
 
724
  // スパム情報保存フラグ
725
  $tsa_spam_data_save = get_option( 'tsa_spam_data_save' );
726
  // 一定時間制限チェック
727
  $tsa_spam_limit_flg = get_option( 'tsa_spam_limit_flg', '' );
728
  if ( $tsa_spam_data_save == '1' && $tsa_spam_limit_flg == '1' ) {
729
+ global $df_spam_limit_minutes;
730
+ global $df_spam_limit_over_interval;
731
+ global $df_spam_limit_cnt;
732
  global $wpdb;
733
+ $tsa_spam_limit_minutes = intval( get_option( 'tsa_spam_limit_minutes', $df_spam_limit_minutes ) );
734
+ $tsa_spam_limit_over_interval = intval( get_option( 'tsa_spam_limit_over_interval', $df_spam_limit_over_interval ) );
735
  // ○分以内(インターバルの方が長い場合はインターバル値を利用する)の同一IPからのスパム投稿回数を調べる
736
  $interval_minutes = ( $tsa_spam_limit_minutes >= $tsa_spam_limit_over_interval ? $tsa_spam_limit_minutes : $tsa_spam_limit_over_interval );
737
 
738
  // 上記が○回を超えているかチェック
739
  $remote_ip = $_SERVER['REMOTE_ADDR'];
740
+ if ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
741
  $remote_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
742
+ $ip_array = explode( ",", $remote_ip );
743
  $remote_ip = $ip_array[0];
744
  }
745
 
746
+ $ip = htmlspecialchars( $remote_ip );
747
  $this_ip_spam_cnt = "
748
  SELECT ip_address, count(ppd) as spam_count, max(post_date)
749
  FROM (select ip_address, post_date as ppd, post_date from $this->table_name) as A
750
+ WHERE A.ip_address = '" . $remote_ip . "' AND
751
+ ppd >= '" . gmdate( 'Y-m-d H:i:s', current_time( 'timestamp' ) - 60 * $interval_minutes ) . "'
752
  GROUP BY ip_address LIMIT 1";
753
+ $query = $wpdb->get_row( $this_ip_spam_cnt );
754
+ $spam_count = intval( $query->spam_count );
755
 
756
 
757
+ // 最後のスパム投稿から○分超えていなければアウト!!
758
+ $tsa_spam_limit_count = intval( get_option( 'tsa_spam_limit_count', $df_spam_limit_cnt ) );
759
  if ( $spam_count > $tsa_spam_limit_count ) {
760
  // アウト!
761
  $this->error_type = SPAM_LIMIT_OVER;
762
+
763
+ return false;
764
  }
765
  }
766
  // ダミーフィールド使用する場合、ダミーフィールドに入力値があればエラー
767
+ $tsa_dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $df_dummy_param_field_flg );
768
+ if ( $tsa_dummy_param_field_flg == '1' ) {
769
  if ( ! empty( $_POST['tsa_param_field_tsa_3'] ) ) { // このフィールドにリクエストパラメータが入る場合はスパム判定
770
  $this->error_type = DUMMY_FIELD;
771
+
772
+ return false;
773
  }
774
  }
775
 
776
  // コメントの内容に関するバリデーション
777
+ $result_valid = apply_filters( 'tsa_validate_comment',
778
+ $this->validate_comment(
779
+ $author,
780
+ $comment,
781
+ array(
782
+ 'post_id' => $post_id,
783
+ 'tsa_on_flg' => $tsa_on_flg
784
+ )
785
+ ), $author, $comment, $post_id, $tsa_on_flg );
786
+
787
+ return apply_filters( 'tsa_validate_comment_result', $result_valid );
788
  }
789
 
790
  function mb_str_split( $string ) {
795
  * Callback admin_menu
796
  */
797
  function admin_menu() {
798
+ $mincap = 'level_8';
799
  $spam_mincap = 'level_7';
800
+ if ( function_exists( 'add_menu_page' ) ) {
801
+ add_menu_page( __( 'Throws SPAM Away 設定', self::DOMAIN ), __( 'Throws SPAM Away', self::DOMAIN ), $mincap, 'throws-spam-away', array(
802
+ $this,
803
+ 'options_page'
804
+ ) );
805
  }
806
 
807
+ if ( function_exists( 'add_submenu_page' ) ) {
808
  if ( get_option( 'tsa_spam_data_save' ) == '1' ) {
809
+ add_submenu_page( 'throws-spam-away', __( 'スパムデータ', self::DOMAIN ), __( 'スパムデータ', self::DOMAIN ), $spam_mincap, 'throws-spam-away/throws_spam_away.class.php', array(
810
+ $this,
811
+ 'spams_list'
812
+ ) );
813
  }
814
+ add_submenu_page( 'throws-spam-away', __( 'スパムコメント一括削除', self::DOMAIN ), __( 'スパムコメント一括削除', 'throws-spam_away' ), $mincap, 'throws-spam-away/throws_spam_away_comments.php' );
815
  }
816
  // 従来通りスパムデータ保存しない場合はスルーする
817
  if ( get_option( 'tsa_spam_data_save' ) != 1 ) {
830
  global $wpdb; // WordPress DBアクセス
831
  global $tsa_version;
832
 
833
+ global $df_on_flg;
834
+ global $df_without_title_str;
835
+ global $df_dummy_param_field_flg;
836
+ global $df_japanese_string_min_cnt;
837
+ global $df_caution_msg;
838
+ global $df_caution_msg_pnt;
839
+ global $df_back_second;
840
+ global $df_err_msg;
841
+ global $df_ng_key_err_msg;
842
+ global $df_must_key_err_msg;
843
+ global $df_tb_on_flg;
844
+ global $df_tb_url_flg;
845
+ global $df_block_ip_address_err_msg;
846
+ global $df_ip_block_from_spam_chk_flg;
847
+ global $df_spam_data_save;
848
+ global $df_url_cnt_over_err_msg;
849
+ global $df_ok_url_cnt;
850
+ global $df_spam_champuru_flg;
851
 
852
  //global $default_spam_champuru_hosts;
853
+ global $df_spam_champuru_by_text;
854
 
855
+ global $df_spam_limit_flg;
856
+ global $df_spam_limit_minutes;
857
+ global $df_spam_limit_cnt;
858
+ global $df_spam_limit_over_interval;
859
+ global $df_spam_limit_over_interval_err_msg;
860
 
861
+ global $df_spam_data_delete_flg;
862
+ global $df_spam_keep_day_cnt;
 
863
 
864
+ global $lower_spam_keep_day_cnt;
865
 
866
  global $spam_champuru_hosts;
867
 
868
+ global $df_only_whitelist_ip_flg;
869
 
870
  // 設定完了の場合はメッセージ表示
871
+ $_saved = false;
872
 
873
  if ( isset( $_POST['tsa_nonce'] ) ) {
874
  check_admin_referer( 'tsa_action', 'tsa_nonce' );
 
875
  update_option( 'tsa_on_flg', intval( $_POST['tsa_on_flg'] ) );
876
  update_option( 'tsa_japanese_string_min_count', $_POST['tsa_japanese_string_min_count'] );
877
  update_option( 'tsa_back_second', $_POST['tsa_back_second'] );
903
  update_option( 'tsa_dummy_param_field_flg', $_POST['tsa_dummy_param_field_flg'] );
904
  update_option( 'tsa_memo', $_POST['tsa_memo'] );
905
  update_option( 'tsa_spam_champuru_by_text', $_POST['tsa_spam_champuru_by_text'] );
906
+ update_option( 'tsa_only_whitelist_ip_flg', ( isset( $_POST['tsa_only_whitelist_ip_flg'] ) ? $_POST['tsa_only_whitelist_ip_flg'] : '0' ) );
 
907
 
908
  // スパムデータベース作成
909
  $this->tsa_create_tbl();
910
 
911
+ $_saved = true;
912
  }
913
  wp_enqueue_style( 'thorows-spam-away-styles', plugins_url( '/css/tsa_styles.css', __FILE__ ) );
914
  ?>
915
+ <style>
916
+ table.form-table {
917
+
918
+ }
919
+
920
+ table.form-table th {
921
+ width: 200px;
922
+ }
923
+ </style>
924
+ <script type="text/Javascript">
925
+ // 配列重複チェック
926
+ var isDuplicate = function (ary, str) {
927
+ for (var i = 0; i < ary.length; i++) {
928
+ if (str == ary[i]) {
929
+ return true;
930
+ }
931
+ }
932
+ return false;
933
+ };
934
+
935
+ function addIpAddresses(newAddressStr) {
936
+ // チェック用配列
937
+ var test_newAddress_list = newAddressStr.split(",");
938
+ var str = document.getElementById('tsa_block_ip_addresses').value;
939
+ // 現在の配列(テスト用)
940
+ str = str.replace(/\,/g, "\n");
941
+ var test_oldAddress_list = str.split("\n");
942
+
943
+ if (str.length > 0) {
944
+ str += "\n";
945
+ }
946
+ if (newAddressStr.length > 0) {
947
+ newAddressStr = newAddressStr.replace(/\,/g, "\n");
948
+ }
949
+ str += newAddressStr;
950
+ str = str.replace(/\,/g, "\n");
951
+
952
+ var ary = str.split("\n");
953
+ var newAry = new Array;
954
+
955
+ var upd_flg = false;
956
+ var upd_ip_str = "";
957
+ for ( i = 0; i < test_newAddress_list.length; i++) {
958
+ if (!isDuplicate(test_oldAddress_list, test_newAddress_list[i]) && test_newAddress_list[i] != "") {
959
+ upd_flg = true;
960
+ upd_ip_str = upd_ip_str + "・" + test_newAddress_list[i] + "\n";
961
+ }
962
+ }
963
+ if (upd_flg == true) {
964
+
965
+ for (var i = 0; i < ary.length; i++) {
966
+ if (!isDuplicate(newAry, ary[i]) && ary[i] != "") {
967
+ newAry.push(ary[i]);
968
+ }
969
+ }
970
+ document.getElementById('tsa_block_ip_addresses').value = newAry.join('\n');
971
+ alert('新たにIPアドレスを追加しました。\n' + upd_ip_str);
972
+ } else {
973
+ alert('指定されたIPアドレスは\nすでに追加されています。');
974
+ }
975
+ return false;
976
+ }
977
+ </script>
978
+ <div class="wrap">
979
+ <h2 id="option_setting">Throws SPAM Away設定</h2>
980
+ <?php if ( $_saved ) { ?>
981
+ <div class="updated" style="padding: 10px; width: 50%;" id="message">設定の更新が完了しました。</div>
982
+ <?php } ?>
983
+ <form method="post" action="">
984
+ <?php wp_nonce_field( 'tsa_action', 'tsa_nonce' ) ?>
985
+ <p>
986
+ <a href="#spam_opt">スパム対策機能設定</a> | <a href="#url_opt">URL文字列除外 設定</a> | <a href="#keyword_opt">NGキーワード
987
+ / 必須キーワード 制御設定</a> | <a href="#tb_opt">トラックバックへの対応設定</a> | <a href="#ip_opt">投稿IPアドレスによる制御設定</a>
988
+ | <a href="#memo_opt">メモ</a> | <a href="#spam_data_opt">スパムデータベース</a>
989
+ </p>
990
+ <h3 id="spam_opt">スパム対策機能 設定</h3>
991
+ <?php wp_nonce_field( 'update-options' ); ?>
992
+ <table class="form-table">
993
+ <tr>
994
+ <th scope="row">人の目には見えないダミーの入力項目を作成し、そこに入力があれば無視対象とする<br>(スパムプログラム投稿に有効です)</th>
995
+ <td><?php
996
+ $chk_1 = '';
997
+ $chk_2 = '';
998
+ if ( get_option( 'tsa_dummy_param_field_flg', $df_dummy_param_field_flg ) == '2' ) {
999
+ $chk_2 = ' checked="checked"';
1000
+ } else {
1001
+ $chk_1 = ' checked="checked"';
1002
+ }
1003
+ ?>
1004
+ <label><input type="radio" name="tsa_dummy_param_field_flg"
1005
+ value="1"<?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
1006
+ <label><input type="radio" name="tsa_dummy_param_field_flg"
1007
+ value="2"<?php esc_attr_e( $chk_2 ); ?> />&nbsp;しない</label><br>
1008
+ ※ダミー項目の制御にJavaScriptを使用しますのでJavaScriptが動作しない環境からの投稿はスパム判定されてしまいます。ご注意の上、ご利用ください。<br>
1009
+ (初期設定:<?php echo( $df_dummy_param_field_flg == '2' ? "しない" : "する" ); ?>)
1010
+ </td>
1011
+ </tr>
1012
+ </table>
1013
+ <table class="form-table">
1014
+ <tr>
1015
+ <th scope="row">日本語が存在しない場合、無視対象とする<br>(日本語文字列が存在しない場合無視対象となります。)</th>
1016
+ <td><?php
1017
+ $chk_1 = '';
1018
+ $chk_2 = '';
1019
+ if ( get_option( 'tsa_on_flg', $df_on_flg ) == 2 ) {
1020
+ $chk_2 = ' checked="checked"';
1021
+ } else {
1022
+ $chk_1 = ' checked="checked"';
1023
+ }
1024
+ ?> <label><input type="radio" name="tsa_on_flg" value="1" <?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
1025
+ <label><input type="radio" name="tsa_on_flg" value="2" <?php esc_attr_e( $chk_2 ); ?> />&nbsp;しない</label><br>
1026
+ (初期設定:<?php echo( $df_on_flg == '2' ? "しない" : "する" ); ?>)
1027
+ </td>
1028
+ </tr>
1029
+ <tr>
1030
+ <th scope="row">タイトルの文字列が含まれる場合、日本語としてカウントしない<br>(日本語を無理やり入れるためにタイトルを利用する方法を排除する)</th>
1031
+ <td><?php
1032
+ $chk_1 = '';
1033
+ $chk_2 = '';
1034
+ if ( get_option( 'tsa_without_title_str', $df_without_title_str ) != '1' ) {
1035
+ $chk_2 = ' checked="checked"';
1036
+ } else {
1037
+ $chk_1 = ' checked="checked"';
1038
+ } ?>
1039
+ <label><input type="radio" name="tsa_without_title_str"
1040
+ value="1"<?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
1041
+ <label><input type="radio" name="tsa_without_title_str"
1042
+ value="2"<?php esc_attr_e( $chk_2 ); ?> />&nbsp;しない</label><br>
1043
+ (初期設定:<?php echo( $df_without_title_str == '2' ? "しない" : "する" ); ?>)
1044
+ </td>
1045
+ </tr>
1046
+ <tr>
1047
+ <th scope="row">
1048
+ <label for="tsa_japanese_string_min_count">日本語文字列含有数<br>
1049
+ (この文字列に達していない場合無視対象となります。)</label>
1050
+ </th>
1051
+ <td>
1052
+ <input id="tsa_japanese_string_min_count" type="text" name="tsa_japanese_string_min_count"
1053
+ value="<?php echo get_option( 'tsa_japanese_string_min_count', $df_japanese_string_min_cnt ); ?>"><br>
1054
+ (初期設定:<?php echo $df_japanese_string_min_cnt; ?>)
1055
+ </td>
1056
+ </tr>
1057
+ <tr>
1058
+ <th scope="row"><label for="tsa_back_second">元の記事に戻ってくる時間<br>(秒)※0の場合エラー画面表示しません。</label>
1059
+ </th>
1060
+ <td><input type="text" id="tsa_back_second" name="tsa_back_second"
1061
+ value="<?php echo get_option( 'tsa_back_second', $df_back_second ); ?>"><br>
1062
+ (初期設定:<?php echo $df_back_second; ?>)
1063
+ </td>
1064
+ </tr>
1065
+ <tr>
1066
+ <th scope="row" id="tsa_caution_message"><label for="tsa_caution_message">コメント欄の下に表示される注意文言</label></th>
1067
+ <td><input type="text" id="tsa_caution_message" name="tsa_caution_message" size="80"
1068
+ value="<?php echo get_option( 'tsa_caution_message', $df_caution_msg ); ?>"><br>
1069
+ (初期設定:<?php echo $df_caution_msg; ?>)
1070
+ </td>
1071
+ </tr>
1072
+ <tr>
1073
+ <th scope="row" id="tsa_caution_msg_point">コメント注意文言の表示位置</th>
1074
+ <td><?php
1075
+ $chk_1 = '';
1076
+ $chk_2 = '';
1077
+ $chk_3 = '';
1078
+ $opt_tsa_caution_msg_point = get_option( 'tsa_caution_msg_point', $df_caution_msg_pnt );
1079
+ if ( $opt_tsa_caution_msg_point == '3' ) {
1080
+ $chk_3 = ' checked="checked"';
1081
+ } elseif ( $opt_tsa_caution_msg_point == '2' ) {
1082
+ $chk_2 = ' checked="checked"';
1083
+ } else {
1084
+ $chk_1 = ' checked="checked"';
1085
+ }
1086
+ ?>
1087
+ <label><input type="radio"
1088
+ name="tsa_caution_msg_point" value='1' <?php esc_attr_e( $chk_1 ); ?> />&nbsp;コメント送信ボタンの下</label>&nbsp;
1089
+ <label><input type="radio"
1090
+ name="tsa_caution_msg_point" value='3' <?php esc_attr_e( $chk_3 ); ?> />&nbsp;コメント送信ボタンの上</label>&nbsp;
1091
+ <label><input type="radio" name="tsa_caution_msg_point" value="2"
1092
+ <?php esc_attr_e( $chk_2 ); ?> />&nbsp;コメント送信フォームの下</label><br>
1093
+ (初期設定:<?php echo( $df_caution_msg_pnt == '2' ? "コメント送信フォームの下" : "コメント送信ボタンの下" ); ?>)
1094
+ </td>
1095
+ </tr>
1096
+ </table>
1097
+ <p>※表示が崩れる場合、<a href="#tsa_caution_msg_point">「コメント注意文言の表示位置」</a>の変更 や <a href="#tsa_caution_message">「コメント欄の下に表示される注意文言」</a>を空白にすること を試してみて下さい。<br>
1098
+ 「コメント欄の下に表示される注意文言」が空白の場合は文言表示のタグ自体が挿入されないようになります。</p>
1099
+ <table class="form-table">
1100
+ <tr>
1101
+ <th scope="row"><label for="tsa_error_message"> 日本語文字列規定値未満エラー時に表示される文言<br>(元の記事に戻ってくる時間の間のみ表示)</label></th>
1102
+ <td><input type="text" id="tsa_error_message" name="tsa_error_message" size="80"
1103
+ value="<?php echo get_option( 'tsa_error_message', $df_err_msg ); ?>"><br>(初期設定:<?php echo $df_err_msg; ?>
1104
+
1105
+ </td>
1106
+ </tr>
1107
+ </table>
1108
+ <a href="#option_setting" class="alignright"><?php _e( '▲ 上へ', self::DOMAIN ); ?></a>
1109
+ <h3 id="url_opt">URL文字列除外 設定</h3>
1110
+ <table class="form-table">
1111
+ <tr>
1112
+ <th scope="row">URLらしき文字列が混入している場合エラーとするか</th>
1113
+ <td><?php
1114
+ $chk_1 = '';
1115
+ $chk_2 = '';
1116
+ if ( get_option( 'tsa_url_count_on_flg', '1' ) == '2' ) {
1117
+ $chk_2 = ' checked="checked"';
1118
+ } else {
1119
+ $chk_1 = ' checked="checked"';
1120
+ }
1121
+ ?> <label><input type="radio"
1122
+ name="tsa_url_count_on_flg" value='1' <?php esc_attr_e( $chk_1 ); ?>>&nbsp;する</label>&nbsp;
1123
+ <label><input type="radio" name="tsa_url_count_on_flg" value="2"
1124
+ <?php esc_attr_e( $chk_2 ); ?>>&nbsp;しない</label><br> する場合の制限数(入力数値まで許容):<input
1125
+ type="text" name="tsa_ok_url_count" size="2"
1126
+ value="<?php echo get_option( 'tsa_ok_url_count', $df_ok_url_cnt ); ?>"><br>
1127
+ (初期設定: <?php echo $df_ok_url_cnt; ?>)
1128
+ </td>
1129
+ </tr>
1130
+ <tr>
1131
+ <th scope="row"><label for="tsa_url_count_over_error_message">URLらしき文字列混入数オーバーエラー時に表示される文言 (元の記事に戻ってくる時間の間のみ表示)</label></th>
1132
+ <td><input type="text" id="tsa_url_count_over_error_message" name="tsa_url_count_over_error_message"
1133
+ size="80"
1134
+ value="<?php echo get_option( 'tsa_url_count_over_error_message', $df_url_cnt_over_err_msg ); ?>"><br>
1135
+ (初期設定:<?php echo $df_url_cnt_over_err_msg; ?>)
1136
+ </td>
1137
+ </tr>
1138
+ </table>
1139
+ <a href="#option_setting" class="alignright"><?php _e( '▲ 上へ', self::DOMAIN ); ?></a>
1140
+
1141
+ <h3 id="keyword_opt">NGキーワード / 必須キーワード 制御設定</h3>
1142
+ <table class="form-table">
1143
+ <tr>
1144
+ <th scope="row"><label for="tsa_ng_keywords">その他NGキーワード<br>(日本語でも英語(その他)でもNGとしたいキーワードを半角カンマ区切りで複数設定できます。<br>挙動は同じです。NGキーワードだけでも使用できます。)</label>
1145
+ </th>
1146
+ <td><input type="text" id="tsa_ng_keywords" name="tsa_ng_keywords" size="80"
1147
+ value="<?php echo get_option( 'tsa_ng_keywords', '' ); ?>"></td>
1148
+ </tr>
1149
+ <tr>
1150
+ <th scope="row"><label for="tsa_ng_key_error_message">NGキーワードエラー時に表示される文言<br>(元の記事に戻ってくる時間の間のみ表示)</label>
1151
+ </th>
1152
+ <td><input type="text" id="tsa_ng_key_error_message" name="tsa_ng_key_error_message" size="80"
1153
+ value="<?php echo get_option( 'tsa_ng_key_error_message', $df_ng_key_err_msg ); ?>"><br>
1154
+ (初期設定:<?php echo $df_ng_key_err_msg; ?>)
1155
+ </td>
1156
+ </tr>
1157
+ <tr>
1158
+ <th scope="row"><label for="tsa_must_keywords">その上での必須キーワード<br>(日本語でも英語(その他)でも必須としたいキーワードを半角カンマ区切りで複数設定できます。<br>指定文字列を含まない場合はエラーとなります。※複数の方が厳しくなります。<br>必須キーワードだけでも使用できます。)</label>
1159
+ </th>
1160
+ <td><input type="text" id="tsa_must_keywords" name="tsa_must_keywords" size="80"
1161
+ value="<?php echo get_option( 'tsa_must_keywords', '' ); ?>"></td>
1162
+ </tr>
1163
+ <tr>
1164
+ <th scope="row"><label for="tsa_must_key_error_message">必須キーワードエラー時に表示される文言<br>(元の記事に戻ってくる時間の間のみ表示)</label>
1165
+ </th>
1166
+ <td><input type="text" id="tsa_must_key_error_message" name="tsa_must_key_error_message" size="80"
1167
+ value="<?php echo get_option( 'tsa_must_key_error_message', $df_must_key_err_msg ); ?>"><br>
1168
+ (初期設定:<?php echo $df_must_key_err_msg; ?>)
1169
+ </td>
1170
+ </tr>
1171
+ </table>
1172
+ <a href="#option_setting" class="alignright"></a>
1173
+
1174
+ <h3 id="tb_opt">トラックバックへの対応設定</h3>
1175
+ <table class="form-table">
1176
+ <tr>
1177
+ <th scope="row">上記設定をトラックバック記事にも採用する</th>
1178
+ <td><?php
1179
+ $chk_1 = '';
1180
+ $chk_2 = '';
1181
+ if ( get_option( 'tsa_tb_on_flg', $df_tb_on_flg ) == "2" ) {
1182
+ $chk_2 = ' checked="checked"';
1183
+ } else {
1184
+ $chk_1 = ' checked="checked"';
1185
+ }
1186
+ ?> <label><input type="radio" name="tsa_tb_on_flg"
1187
+ value='1' <?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
1188
+ <label><input
1189
+ type="radio" name="tsa_tb_on_flg" value="2" <?php esc_attr_e( $chk_2 ); ?> />&nbsp;しない</label><br>
1190
+ (初期設定:<?php echo( $df_tb_on_flg == '2' ? "しない" : "する" ); ?>)
1191
+ </td>
1192
+ </tr>
1193
+ <tr>
1194
+ <th scope="row">トラックバック記事にも採用する場合、ついでにこちらのURLが含まれているか判断する
1195
+ </th>
1196
+ <td><?php
1197
+ $chk_1 = '';
1198
+ $chk_2 = '';
1199
+ if ( get_option( 'tsa_tb_url_flg', $df_tb_url_flg ) == '2' ) {
1200
+ $chk_2 = ' checked="checked"';
1201
+ } else {
1202
+ $chk_1 = ' checked="checked"';
1203
+ }
1204
+ ?> <label><input type="radio" name="tsa_tb_url_flg"
1205
+ value='1' <?php esc_attr_e( $chk_1 ); ?> />&nbsp;する</label>&nbsp;
1206
+ <label><input
1207
+ type="radio" name="tsa_tb_url_flg" value="2" <?php esc_attr_e( $chk_2 ); ?> />&nbsp;しない</label><br>
1208
+ (初期設定:<?php echo( $df_tb_url_flg == '2' ? "しない" : "する" ); ?>)
1209
+ </td>
1210
+ </tr>
1211
+ </table>
1212
+ <a href="#option_setting" class="alignright"><?php _e( '▲ 上へ', self::DOMAIN ); ?></a>
1213
+
1214
+ <h3 id="ip_opt">投稿IPアドレスによる制御設定</h3>
1215
+ <table class="form-table">
1216
+ <tr>
1217
+ <th scope="row" rowspan="2">SPAM拒否リスト利用</th>
1218
+ <td><?php
1219
+ $chk = '';
1220
+ if ( get_option( 'tsa_spam_champuru_flg', $df_spam_champuru_flg ) == '1' ) {
1221
+ $chk = ' checked="checked"';
1222
+ }
1223
+ ?>
1224
+ <label><input type="checkbox" name="tsa_spam_champuru_flg"
1225
+ value='1' <?php esc_attr_e( $chk ); ?> />スパム拒否リストサービスに登録されているIPアドレスからのコメントを拒否する</label><br>
1226
+ (初期設定:<?php echo( $df_spam_champuru_flg == '2' ? "しない" : "する" ); ?>)
1227
+ </td>
1228
+ </tr>
1229
+ <tr>
1230
+ <td>
1231
+ <h4>※多ければ多いほどトラッフィク量が上がりますので注意してください。</h4>
1232
+
1233
+ <label><strong>【利用するスパム拒否リストサービスをテキスト入力(カンマ区切り)】</strong><br>
1234
+ <input type="text" name="tsa_spam_champuru_by_text"
1235
+ size="80"
1236
+ value="<?php echo get_option( 'tsa_spam_champuru_by_text', $df_spam_champuru_by_text ); ?>"><br>(初期設定:<?php echo $df_spam_champuru_by_text; ?>
1237
+ )</label>
1238
+
1239
+ </td>
1240
+ </tr>
1241
+ <tr>
1242
+ <th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
1243
+ <td><?php
1244
+ $chk = '';
1245
+ if ( get_option( 'tsa_ip_block_from_spam_chk_flg', $df_ip_block_from_spam_chk_flg ) == '1' ) {
1246
+ $chk = ' checked="checked"';
1247
+ }
1248
+ ?> <label><input type="checkbox"
1249
+ name="tsa_ip_block_from_spam_chk_flg" value='1'
1250
+ <?php esc_attr_e( $chk ); ?> />&nbsp;スパム投稿設定したIPアドレスからの投稿も無視する</label>&nbsp;※Akismet等で自動的にスパムマークされたものも含む<br>
1251
+ (初期設定:<?php echo( $df_ip_block_from_spam_chk_flg != '1' ? "しない" : "する" ); ?>)<br>
1252
+ <?php
1253
+ // wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
1254
+ $results = $wpdb->get_results( "SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC " );
1255
+ ?>現在「spam」フラグが付いているIPアドレス:<br>
1256
+ <blockquote>
1257
+ <?php
1258
+ $add_ip_addresses = '';
1259
+ foreach ( $results as $item ) {
1260
+ $spam_ip = esc_attr( $item->comment_author_IP );
1261
+ // ブロックしたいIP
1262
+ if ( strlen( $add_ip_addresses ) > 0 ) {
1263
+ $add_ip_addresses .= ',';
1264
+ }
1265
+ $add_ip_addresses .= $spam_ip;
1266
+ ?>
1267
+ <b><?php esc_attr_e( $spam_ip ); ?> </b><br>
1268
+ <?php
1269
+ }
1270
+ ?>
1271
+ &nbsp;<input type="button"
1272
+ onclick="javascript:addIpAddresses('<?php echo $add_ip_addresses; ?>');"
1273
+ value="これらのIPアドレスを任意のブロック対象IPアドレスにコピーする"><br>
1274
+ </blockquote>
1275
+ </td>
1276
+ </tr>
1277
+ <tr>
1278
+ <th scope="row">任意のIPアドレスからの投稿も無視したい場合、対象となるIPアドレスを記述してください。<br>改行区切りで複数設定できます。(半角数字とスラッシュ、ドットのみ)<br>※カンマは自動的に改行に変換されます
1279
+ </th>
1280
+ <td><textarea name="tsa_block_ip_addresses"
1281
+ id="tsa_block_ip_addresses" cols="80"
1282
+ rows="10"><?php echo get_option( 'tsa_block_ip_addresses', '' ); ?></textarea>
1283
+ </td>
1284
+ </tr>
1285
+ <tr>
1286
+ <th scope="row">ブロック対象のIPアドレスからの投稿時に表示される文言<br>(元の記事に戻ってくる時間の間のみ表示)
1287
+ </th>
1288
+ <td><input type="text" name="tsa_block_ip_address_error_message"
1289
+ size="80"
1290
+ value="<?php echo get_option( 'tsa_block_ip_address_error_message', $df_block_ip_address_err_msg ); ?>"><br>(初期設定:<?php echo $df_block_ip_address_err_msg; ?>
1291
+
1292
+ </td>
1293
+ </tr>
1294
+ </table>
1295
+ <p>※上記のスパムチェックから除外するIPアドレスがあれば下記に設定してください。優先的に通過させます。<br>※トラックバックは優先通過ではありません。</p>
1296
+ <table class="form-table">
1297
+ <tr style="background-color: #fefefe;">
1298
+ <th scope="row"><strong>IP制御免除<br>許可リスト</strong></th>
1299
+ <td>
1300
+ <?php _e( '※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br>※日本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用ください。<br>改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッシュ、ドットのみ)', self::DOMAIN ); ?>
1301
+ <textarea name="tsa_white_ip_addresses"
1302
+ id="tsa_white_ip_addresses" cols="80"
1303
+ rows="10"><?php echo get_option( 'tsa_white_ip_addresses', '' ); ?></textarea><br>
1304
+ <?php
1305
+ $chk = '';
1306
+ if ( get_option( 'tsa_only_whitelist_ip_flg', $df_only_whitelist_ip_flg ) == '1' ) {
1307
+ $chk = ' checked="checked"';
1308
+ }
1309
+ ?> <label><input type="checkbox"
1310
+ name="tsa_only_whitelist_ip_flg" value='1'
1311
+ <?php esc_attr_e( $chk ); ?> />&nbsp;<?php _e( '許可リストに登録したIPアドレス以外からの投稿を無視する(許可リストへの登録がない場合は有効になりません)', self::DOMAIN ); ?>
1312
+ </label><br>
1313
+ <?php _e( '(初期設定:', self::DOMAIN ); ?><?php echo( $df_only_whitelist_ip_flg != '1' ? __( "しない", self::DOMAIN ) : __( "する", self::DOMAIN ) ); ?><?php _e( ')', self::DOMAIN ); ?>
1314
+ <br>
1315
+ <?php _e( '※許可リストで登録したIP以外の投稿は無視されますのでこの設定は慎重に行ってください。(すべての設定より優先します)<br>※エラーメッセージは「ブロック対象のIPアドレスからの投稿時に表示される文言」が使われます。(エラー表示時のみ)', self::DOMAIN ); ?>
1316
+ </td>
1317
+ </tr>
1318
+
1319
+ </table>
1320
+ <a href="#option_setting" class="alignright"><?php _e( '▲ 上へ', self::DOMAIN ); ?></a>
1321
+
1322
+ <h3 id="memo_opt"><?php _e( 'メモ(スパム対策情報や IPアドレス・NGワードその他メモ備忘録としてご自由にお使い下さい)', self::DOMAIN ); ?></h3>
1323
+ <p><?php _e( 'この欄の内容が表示されることはありません。', self::DOMAIN ); ?></p>
1324
+ <table class="form-table">
1325
+ <tr>
1326
+ <td>
1327
+ <textarea name="tsa_memo" style="width: 80%;"
1328
+ rows="10"><?php echo get_option( 'tsa_memo', '' ); ?></textarea>
1329
+
1330
+ </td>
1331
+ </tr>
1332
+ </table>
1333
+ <a href="#option_setting" class="alignright"><?php _e( '▲ 上へ', self::DOMAIN ); ?></a>
1334
+
1335
+ <h3 id="spam_data_opt"><?php _e( 'スパムデータベース', self::DOMAIN ); ?></h3>
1336
+ <table class="form-table">
1337
+ <tr>
1338
+ <th scope="row"><?php _e( 'スパムコメント投稿情報を保存しますか?', self::DOMAIN ); ?></th>
1339
+ <td><?php
1340
+ $chk = '';
1341
+ if ( get_option( 'tsa_spam_data_save', $df_spam_data_save ) == '1' ) {
1342
+ $chk = ' checked="checked"';
1343
+ }
1344
+ ?> <label><input type="checkbox"
1345
+ name="tsa_spam_data_save"
1346
+ value='1' <?php esc_attr_e( $chk ); ?> />&nbsp;<?php _e( 'スパムコメント情報を保存する', self::DOMAIN ); ?>
1347
+ </label><br>
1348
+ <?php echo sprintf( __( "※Throws SPAM Away設定画面表示時に時間がかかることがあります。<br>※「保存する」を解除した場合でもテーブルは残りますので%d日以内の取得データは表示されます。", self::DOMAIN ), get_option( 'tsa_spam_keep_day_count', $df_spam_keep_day_cnt ) ); ?>
1349
+ <br>
1350
+ <?php echo sprintf( __( "(初期設定:%s)", self::DOMAIN ), ( $df_spam_data_save != '1' ? __( "しない", self::DOMAIN ) : __( "する", self::DOMAIN ) ) ); ?>
1351
+ </td>
1352
+ </tr>
1353
+ <tr>
1354
+ <th scope="row"><?php _e( 'スパムデータを表示する期間', self::DOMAIN ); ?></th>
1355
+ <td>
1356
+ <input
1357
+ type="text" name="tsa_spam_keep_day_count" size="3"
1358
+ value="<?php echo get_option( 'tsa_spam_keep_day_count', $df_spam_keep_day_cnt ); ?>"><?php echo sprintf( __( "日分(最低%d日)", self::DOMAIN ), $lower_spam_keep_day_cnt ); ?><?php echo sprintf( __( "(初期設定: %d)", self::DOMAIN ), $df_spam_keep_day_cnt ); ?>
1359
+ <br>&nbsp;
1360
+ <?php
1361
+ $chk = '';
1362
+ if ( get_option( 'tsa_spam_data_delete_flg', $df_spam_data_delete_flg ) == '1' ) {
1363
+ $chk = ' checked="checked"';
1364
+ }
1365
+ ?>
1366
+ <label><input type="checkbox" name="tsa_spam_data_delete_flg" value='1'
1367
+ <?php esc_attr_e( $chk ); ?> >&nbsp;<?php _e( "期間が過ぎたデータを削除する", self::DOMAIN ); ?>
1368
+ </label><br>
1369
+ <?php echo sprintf( __( "※一度消したデータは復活出来ませんのでご注意ください。また最低%d日分は保存されます。", self::DOMAIN ), $lower_spam_keep_day_cnt ); ?>
1370
+ </td>
1371
+ </tr>
1372
+ </table>
1373
+ <p><?php _e( "一定時間内スパム認定機能<br>○分以内に○回スパムとなったら○分間、当該IPからのコメントはスパム扱いする設定<br><b>※一定時間以内にスパム投稿された回数を測定していますので「スパムコメント情報を保存する」機能がオフの場合は機能しません。</b>", self::DOMAIN ); ?></p>
1374
+ <table class="form-table">
1375
+ <tr>
1376
+ <th scope="row"><?php _e( "機能設定", self::DOMAIN ); ?></th>
1377
+ <td><?php
1378
+ $chk = '';
1379
+ if ( get_option( 'tsa_spam_limit_flg', $df_spam_limit_flg ) == '1' ) {
1380
+ $chk = ' checked="checked"';
1381
+ }
1382
+ ?> <label><input type="checkbox" name="tsa_spam_limit_flg" value='1'
1383
+ <?php esc_attr_e( $chk ); ?> />&nbsp;<?php _e( "機能させる", self::DOMAIN ); ?></label>
1384
+ <?php echo sprintf( __( "(初期設定: %s)", self::DOMAIN ), ( $df_spam_limit_flg != '1' ? __( "しない", self::DOMAIN ) : __( "する", self::DOMAIN ) ) ); ?>
1385
+ <br>
1386
+ <?php _e( "一定時間:", self::DOMAIN ); ?><input
1387
+ type="text" name="tsa_spam_limit_minutes" size="3"
1388
+ value="<?php echo get_option( 'tsa_spam_limit_minutes', $df_spam_limit_minutes ); ?>"><?php _e( "分以内に", self:: DOMAIN ); ?>
1389
+ <?php _e( "一定回数:", self::DOMAIN ); ?><input type="text" name="tsa_spam_limit_count" size="3"
1390
+ value="<?php echo get_option( 'tsa_spam_limit_count', $df_spam_limit_cnt ); ?>"><?php _e( "回スパムとなったら", self::DOMAIN ); ?>
1391
+ <?php _e( "<b>次から</b>", self::DOMAIN ); ?>
1392
+ <?php _e( "一定時間:", self::DOMAIN ); ?><input type="text" name="tsa_spam_limit_over_interval"
1393
+ size="3"
1394
+ value="<?php echo get_option( 'tsa_spam_limit_over_interval', $df_spam_limit_over_interval ); ?>"><?php _e( "分間", self::DOMAIN ); ?>
1395
+ <br>
1396
+ <?php echo sprintf(
1397
+ __( "(初期設定:一定時間「%d」分以内に一定回数「%d」回スパムとなったら次から「%d」分間)<br>当該IPアドレスからのコメントを強制スパム扱いします。", self::DOMAIN ),
1398
+ $df_spam_limit_minutes, $df_spam_limit_cnt, $df_spam_limit_over_interval ); ?>
1399
+ <br>
1400
+ <?php _e( "エラーメッセージは:", self::DOMAIN ); ?><input type="text"
1401
+ name="tsa_spam_limit_over_interval_error_message"
1402
+ size="80"
1403
+ value="<?php echo get_option( 'tsa_spam_limit_over_interval_error_message', $df_spam_limit_over_interval_err_msg ); ?>"><br>
1404
+ <?php echo sprintf( __( "(初期設定:%s)", self::DOMAIN ), $df_spam_limit_over_interval_err_msg ); ?>
1405
+ </td>
1406
+ </tr>
1407
+ </table>
1408
+ <a href="#option_setting" class="alignright"><?php _e( '▲ 上へ', self::DOMAIN ); ?></a>
1409
+
1410
+ <input type="hidden" name="action" value="update">
1411
+ <?php /**
1412
+ * <input
1413
+ * type="hidden" name="page_options"
1414
+ * value="tsa_on_flg,tsa_japanese_string_min_count,tsa_back_second,tsa_caution_message,tsa_caution_msg_point,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,tsa_spam_data_save,tsa_spam_limit_flg,tsa_spam_limit_minutes,tsa_spam_limit_count,tsa_spam_limit_over_interval,tsa_spam_limit_over_interval_error_message,tsa_spam_champuru_flg,tsa_spam_keep_day_count,tsa_spam_data_delete_flg,tsa_white_ip_addresses,tsa_dummy_param_field_flg,tsa_memo,tsa_spam_champuru_by_text,tsa_only_whitelist_ip_flg" />
1415
+ */ ?>
1416
+ <p class="submit" id="tsa_submit_button">
1417
+ <input type="submit" class="button-primary"
1418
+ value="<?php _e( 'Save Changes' ) ?>">
1419
+ </p>
1420
+ <p>Throws SPAM Away version <?php echo $tsa_version; ?></p>
1421
+
1422
+ </form>
1423
+ </div>
1424
+ <?php
1425
  }
1426
 
1427
+ /**
1428
+ * トラックバック用メソッド
1429
+ *
1430
+ * @param $tb
1431
+ *
1432
+ * @return mixed
1433
+ */
1434
  function trackback_spam_away( $tb ) {
1435
  global $newThrowsSpamAway;
1436
+ global $df_spam_data_save;
1437
 
1438
+ $tsa_tb_on_flg = get_option( 'tsa_tb_on_flg' );
1439
  $tsa_tb_url_flg = get_option( 'tsa_tb_url_flg' );
1440
+ $siteurl = get_option( 'siteurl' );
1441
  // トラックバック OR ピンバック時にフィルタ発動
1442
+ if ( $tsa_tb_on_flg == "2" || ( $tb['comment_type'] != 'trackback' && $tb['comment_type'] != 'pingback' ) ) {
1443
+ return $tb;
1444
+ }
1445
 
1446
  // SPAMかどうかフラグ
1447
+ $tb_val['is_spam'] = false;
1448
 
1449
  // コメント判定
1450
+ $author = $tb["comment_author"];
1451
  $comment = $tb["comment_content"];
1452
  $post_id = $tb["comment_post_ID"];
1453
  // IP系の検査
1454
  $remote_ip = $_SERVER['REMOTE_ADDR'];
1455
+ if ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
1456
  $remote_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
1457
+ $ip_array = explode( ",", $remote_ip );
1458
  $remote_ip = $ip_array[0];
1459
  }
1460
 
1461
  if ( ! $newThrowsSpamAway->ip_check( $remote_ip ) ) {
1462
+ $tb_val['is_spam'] = true;
1463
+ } elseif ( ! $newThrowsSpamAway->validation( $comment, $author, $post_id ) ) { // 検査します!
1464
+ $tb_val['is_spam'] = true;
1465
+ } elseif ( $tsa_tb_url_flg == '1' && stripos( $comment, $siteurl ) == false ) { // URL検索する場合、URL包含検査 (このブログのURLを含んでない場合エラー
1466
+ $tb_val['is_spam'] = true; // スパム扱い
 
 
 
 
1467
  }
1468
  // トラックバックスパムがなければ返却・あったら捨てちゃう
1469
  if ( ! $tb_val['is_spam'] ) {
1470
  // トラックバック内に日本語存在(または禁止語句混入なし)
1471
  return $tb;
1472
  } else {
1473
+ if ( get_option( 'tsa_spam_data_save', $df_spam_data_save ) == '1' ) {
1474
+ $spam_contents = array();
1475
  $spam_contents['error_type'] = SPAM_TRACKBACK;
1476
+ $spam_contents['author'] = mb_strcut( strip_tags( $author ), 0, 255 );
1477
+ $spam_contents['comment'] = mb_strcut( strip_tags( $comment ), 0, 255 );
1478
 
1479
  $this->save_post_meta( $post_id, $remote_ip, $spam_contents );
1480
  }
1484
 
1485
  /**
1486
  * 当該IPアドレスからの最終投稿日時取得
1487
+ *
1488
  * @param string ip_address
1489
+ *
1490
  * @return 最終投稿日時 Y-m-d H:i:s
1491
  */
1492
+ function get_last_spam_comment( $ip_address = null ) {
1493
  global $wpdb;
1494
  // IPアドレスがなければNULL返却
1495
+ if ( $ip_address == null ) {
1496
+ return null;
1497
  }
1498
  // 最終コメント情報取得
1499
  $qry_str = "SELECT A.post_date, A.post_id, B.error_type, B.author as spam_author, B.comment as spam_comment FROM $this->table_name as A
1500
  INNER JOIN $this->table_name as B ON A.ip_address = B.ip_address AND A.post_date = B.post_date
1501
+ WHERE A.ip_address = '" . htmlspecialchars( $ip_address ) . "' ORDER BY A.post_date DESC LIMIT 1 ";
1502
  $results = $wpdb->get_results( $qry_str );
1503
  if ( count( $results ) > 0 ) {
1504
  return $results[0];
1505
  }
1506
+
1507
+ return null;
1508
  }
1509
 
1510
  /**
1511
  * スパムデータベース表示
1512
+ *
1513
  * @param
 
1514
  */
1515
+ function spams_list() {
1516
  global $wpdb;
1517
+ global $lower_spam_keep_day_cnt, $df_spam_keep_day_cnt;
1518
+ $_saved = false;
1519
 
1520
  // ブラックIPリスト
1521
+ $block_ip_addresses_str = get_option( 'tsa_block_ip_addresses', '' );
1522
+ $block_ip_addresses = str_replace( "\n", ",", $block_ip_addresses_str );
1523
+ $ip_list = explode( ",", $block_ip_addresses );
1524
 
1525
+ $act = ( isset( $_POST['act'] ) ? esc_attr( $_POST['act'] ) : null );
1526
 
1527
  if ( isset( $_POST['tsa_nonce'] ) ) {
1528
  check_admin_referer( 'tsa_action', 'tsa_nonce' );
1530
  // スパム情報から 特定IPアドレス削除
1531
  if ( $act == "remove_ip" ) {
1532
  $remove_ip_address = @htmlspecialchars( $_POST['ip_address'] );
1533
+ if ( ! isset( $remove_ip_address ) || strlen( $remove_ip_address ) == 0 ) {
1534
  // N/A
1535
  } else {
1536
  // スパムデータベースから特定IP情報削除
1537
  $wpdb->query(
1538
+ "DELETE FROM " . $this->table_name . " WHERE ip_address = '" . $remove_ip_address . "' "
1539
  );
1540
+ $_saved = true;
1541
+ $message = sprintf( __( "スパムデータから %s のデータを削除しました。", self::DOMAIN ), $remove_ip_address );
1542
  }
1543
  } elseif ( $act == "add_ip" ) {
1544
  $add_ip_address = @htmlspecialchars( $_POST['ip_address'] );
1546
  // N/A
1547
  } else {
1548
  // 対象IPアドレスに一つ追加
1549
+ $dup_flg = false;
1550
  foreach ( $ip_list as $ip ) {
1551
+ if ( $ip == trim( $add_ip_address ) ) {
1552
+ $_saved = true;
1553
+ $message = sprintf( __( "%s はすでに設定されています。", self::DOMAIN ), $add_ip_address );
1554
+ $dup_flg = true;
1555
  break;
1556
  }
1557
  }
1558
+ if ( $dup_flg == false ) {
1559
+ $added_block_ip_addresses_str = $block_ip_addresses_str . "\n" . $add_ip_address;
1560
+ update_option( "tsa_block_ip_addresses", $added_block_ip_addresses_str );
1561
+ $_saved = true;
1562
+ $message = sprintf( __( "%s を追加設定しました。", self::DOMAIN ), $add_ip_address );
1563
  }
1564
  }
1565
  } elseif ( $act == "truncate" ) {
1566
  // スパムデータテーブルのtruncateを行う
1567
  $result = $wpdb->query(
1568
+ "TRUNCATE TABLE " . $this->table_name );
1569
+ if ( $result == true ) {
1570
+ $_saved = true;
1571
+ $message = __( "スパムデータをすべて削除しました。", self::DOMAIN );
1572
  } else {
1573
+ $_saved = true;
1574
+ $message = __( "スパムデータテーブルへ削除処理を実行しましたが、エラーが発生し処理が完了しませんでした。", self::DOMAIN );
1575
  }
1576
  }
1577
  }
1578
+ // 日数
1579
+ $gdays = get_option( 'tsa_spam_keep_day_count', $df_spam_keep_day_cnt );
1580
+ // wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
1581
+ $results = $wpdb->get_results(
1582
+ "SELECT D.cnt as cnt,E.ip_address as ip_address, D.ppd as post_date, E.error_type as error_type, E.author as author, E.comment as comment FROM
1583
+ ((select count(ip_address) as cnt, ip_address, max(post_date) as ppd, error_type, author, comment from $this->table_name
1584
+ WHERE post_date >= '" . gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays ) . "'
1585
+ GROUP BY ip_address) as D INNER JOIN $this->table_name as E ON D.ip_address = E.ip_address AND D.ppd = E.post_date)
1586
+ ORDER BY post_date DESC"
1587
+ );
1588
  ?>
1589
+ <div class="wrap">
1590
+ <?php
1591
+ if ( get_option( 'tsa_spam_data_save' ) == '1' ) {
1592
+ if ( $gdays < $lower_spam_keep_day_cnt ) {
1593
+ $gdays = $lower_spam_keep_day_cnt;
1594
+ }
1595
+ // 表カラー
1596
+ $unique_color = "#114477";
1597
+ $web_color = "#3377B6";
1598
+ ?>
1599
+ <h2><?php _e( "Throws SPAM Away スパムデータ", self::DOMAIN ); ?></h2>
1600
+ <h3><?php echo sprintf( __( "スパム投稿%d日間の推移", self::DOMAIN ), $gdays ); ?></h3>
1601
+ <?php if ( $_saved ) { ?>
1602
+ <div class="updated" style="padding: 10px; width: 50%;"
1603
+ id="message"><?php esc_attr_e( $message ); ?></div>
1604
+ <?php } ?>
1605
+ <div style="background-color: #efefef;">
1606
+ <table style="width: 100%; border: none;">
1607
+ <tr>
1608
+ <?php
1609
+ $total_qry = "
1610
  SELECT count(ppd) as pageview, ppd
1611
  FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as A
1612
+ GROUP BY ppd HAVING ppd >= '" . gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays ) . "'
1613
  ORDER BY pageview DESC
1614
  LIMIT 1
1615
  ";
1616
+ $qry = $wpdb->get_row( $total_qry );
1617
+ $maxxday = 0;
1618
+ if ( $qry ) {
1619
+ $maxxday = $qry->pageview;
1620
 
1621
+ $total_vis = "
1622
  SELECT count(distinct ip_address) as vis, ppd
1623
  FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
1624
  GROUP BY ppd HAVING ppd >= '" . gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays ) . "'
1625
  ORDER BY vis DESC
1626
  LIMIT 1
1627
  ";
1628
+ $qry_vis = $wpdb->get_row( $total_vis );
1629
+ $maxxday += $qry_vis->vis;
1630
+ }
1631
+
1632
+ if ( $maxxday == 0 ) {
1633
+ $maxxday = 1;
1634
+ }
1635
+
1636
+ // Y
1637
+ $gd = ( 100 / $gdays ) . '%';
1638
+ for ( $gg = $gdays - 1; $gg >= 0; $gg -- ) {
1639
+ // TOTAL SPAM COUNT
1640
+ $visitor_qry = "
1641
  SELECT count(DISTINCT ip_address) AS total
1642
  FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
1643
+ WHERE ppd = '" . gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gg ) . "'
1644
  ";
1645
+ $qry_visitors = $wpdb->get_row( $visitor_qry );
1646
+ $px_visitors = round( $qry_visitors->total * 100 / $maxxday );
1647
+ // TOTAL
1648
+ $pageview_qry = "
1649
  SELECT count(ppd) as total
1650
  FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as C
1651
+ WHERE ppd = '" . gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gg ) . "'
1652
  ";
1653
+ $qry_pageviews = $wpdb->get_row( $pageview_qry );
1654
+ $px_pageviews = round( $qry_pageviews->total * 100 / $maxxday );
1655
+ $px_white = 100 - $px_pageviews - $px_visitors;
1656
+ if ( $px_white < 0 ) {
1657
+ $px_white = 0;
1658
+ }
1659
+
1660
+ print "<td width='".$gd."'><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;text-align:center;border-right:1px solid white;color:black;'>
1661
+ <div style='background:#ffffff;width:100%;height:" . $px_white . "px;'></div>
1662
+ <div style='background:$unique_color;width:100%;height:" . $px_visitors . "px;' title='" . $qry_visitors->total . " ip_addresses'></div>
1663
+ <div style='background:$web_color;width:100%;height:" . $px_pageviews . "px;' title='" . $qry_pageviews->total . " spam comments'></div>
1664
  <div style='background:gray;width:100%;height:1px;'></div>
1665
+ <br />" . gmdate( 'd', current_time( 'timestamp' ) - 86400 * $gg ) . '<br />' . gmdate( 'M', current_time( 'timestamp' ) - 86400 * $gg ) . "
1666
+ <div style='background:;width:100%;height:2.2em;'>" . $qry_visitors->total . "<br />" . $qry_pageviews->total . "</div>
1667
  <br clear=\"all\" /></div>
1668
  </td>\n";
1669
+ } ?>
1670
+ </tr>
1671
+ </table>
1672
+ </div>
1673
+ <?php _e( "&nbsp;※&nbsp;数値は&lt;上段&gt;がSPAM投稿したユニークIPアドレス数、&nbsp;&lt;下段&gt;が破棄したスパム投稿数", self::DOMAIN ); ?>
1674
+ <br>
 
 
 
 
 
 
 
 
 
 
 
1675
  <h4>
1676
+ <?php echo sprintf( __( "過去%d日間に無視投稿されたIPアドレス", self::DOMAIN ), $gdays ); ?>
1677
+ </h4>
1678
+ <p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
1679
+ <p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
1680
+ <?php if ( count( $results ) > 0 ) {
1681
+ $p_url = WP_PLUGIN_URL . '/' . str_replace( basename( __FILE__ ), '', plugin_basename( __FILE__ ) );
1682
+ wp_enqueue_script( 'jquery.tablesorter', $p_url . 'js/jquery.tablesorter.min.js', array( 'jquery' ), false );
1683
+ wp_enqueue_style( 'jquery.tablesorter', $p_url . 'images/style.css' );
1684
+ wp_enqueue_style( 'thorows-spam-away-styles', $p_url . 'css/tsa_data_styles.css' );
1685
+ ?>
1686
+ <script type="text/JavaScript">
1687
+ <!--
1688
+ jQuery(function () {
1689
+ jQuery('#spam_list').tablesorter({
1690
+ widgets: ['zebra'],
1691
+ headers: {
1692
+ 0: {id: "ipAddress"},
1693
+ 1: {sorter: "digit"},
1694
+ 2: {sorter: "shortDate"},
1695
+ 3: {sorter: false}
1696
+ }
1697
+ });
1698
+ });
1699
+
1700
+ function removeIpAddressOnData(ipAddressStr) {
1701
+ if (confirm('[' + ipAddressStr + '] <?php _e( "をスパムデータベースから削除します。よろしいですか?この操作は取り消せません", self::DOMAIN ); ?>')) {
1702
+ jQuery('#remove_ip_address').val(ipAddressStr);
1703
+ jQuery('#remove').submit();
1704
+ } else {
1705
+ return false;
1706
+ }
1707
+ }
1708
+
1709
+ function addIpAddressOnData(ipAddressStr) {
1710
+ if (confirm('[' + ipAddressStr + '] <?php _e( "を無視対象に追加します。よろしいですか?削除は設定から行ってください", self::DOMAIN ); ?>')) {
1711
+ jQuery('#add_ip_address').val(ipAddressStr);
1712
+ jQuery('#adding').submit();
1713
+ } else {
1714
+ return false;
1715
+ }
1716
+ }
1717
+
1718
+ -->
1719
+ </script>
1720
+ <p><strong><?php _e( "投稿内容の判定", self::DOMAIN ); ?></strong></p>
1721
+ <?php _e( "※最新1件のコメント内容はIPアドレスまたはエラー判定のリンク先を参照してください。", self::DOMAIN ); ?>
1722
+ <div id="spam_list_container">
1723
+ <div id="spam_list_div">
1724
+ <table id="spam_list" class="tablesorter">
1725
+ <colgroup class="cols0"></colgroup>
1726
+ <colgroup class="cols1"></colgroup>
1727
+ <colgroup class="cols2"></colgroup>
1728
+ <colgroup class="cols3"></colgroup>
1729
+ <colgroup class="cols4"></colgroup>
1730
+ <thead>
1731
+ <tr>
1732
+ <th class="cols0"><?php _e( "IPアドレス", self::DOMAIN ); ?></th>
1733
+ <th class="cols1"><?php _e( "投稿数", self::DOMAIN ); ?></th>
1734
+ <th class="cols2"><?php _e( "最終投稿日時", self::DOMAIN ); ?></th>
1735
+ <th class="cols3"><?php _e( "スパムIP登録", self::DOMAIN ); ?></th>
1736
+ <th class="cols4"><?php _e( "エラー判定(最新)", self::DOMAIN ); ?></th>
1737
+ </tr>
1738
+ </thead>
1739
+ <tbody>
1740
+ <?php
1741
+ foreach ( $results as $item ) {
1742
+ $spam_ip = $item->ip_address;
1743
+ $spam_cnt = $item->cnt;
1744
+ $last_post_date = $item->post_date;
1745
+ $spam_error_type = $item->error_type;
1746
+ $spam_author = strip_tags( $item->author );
1747
+ $spam_comment = strip_tags( $item->comment );
1748
+
1749
+ // エラー変換
1750
+ $spam_error_type_str = $spam_error_type;
1751
+ switch ( $spam_error_type ) {
1752
+ case NOT_JAPANESE:
1753
+ $spam_error_type_str = __( "日本語以外", self::DOMAIN );
1754
+ break;
1755
+ case MUST_WORD:
1756
+ $spam_error_type_str = __( "必須キーワード無し", self::DOMAIN );
1757
+ break;
1758
+ case NG_WORD:
1759
+ $spam_error_type_str = __( "NGキーワード混入", self::DOMAIN );
1760
+ break;
1761
+ case BLOCK_IP:
1762
+ $spam_error_type_str = __( "ブロック対象IPアドレス", self::DOMAIN );
1763
+ break;
1764
+ case SPAM_BLACKLIST:
1765
+ $spam_error_type_str = __( "スパム拒否リスト", self::DOMAIN );
1766
+ break;
1767
+ case SPAM_TRACKBACK:
1768
+ $spam_error_type_str = __( "トラックバックスパム", self::DOMAIN );
1769
+ break;
1770
+ case URL_COUNT_OVER:
1771
+ $spam_error_type_str = __( "URL文字列混入数オーバー", self::DOMAIN );
1772
+ break;
1773
+ case SPAM_LIMIT_OVER:
1774
+ $spam_error_type_str = __( "一定時間スパム判定エラー", self::DOMAIN );
1775
+ break;
1776
+ case DUMMY_FIELD:
1777
+ $spam_error_type_str = __( "ダミー項目エラー", self::DOMAIN );
1778
+ break;
1779
+ case NOT_IN_WHITELIST_IP:
1780
+ $spam_error_type_str = __( "許可リスト許可IP以外", self::DOMAIN );
1781
+ break;
1782
+ }
1783
+ ?>
1784
+ <tr>
1785
+ <td>
1786
+ <b><a href="javascript:void(0);"
1787
+ onclick="window.open('<?php echo esc_attr( $p_url ); ?>hostbyip.php?ip=<?php esc_attr_e( $spam_ip ); ?>', 'hostbyip', 'width=350,height=500,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php esc_attr_e( $spam_ip ); ?>
1788
+ </a></b><br clear="all">
1789
+ <input type="button"
1790
+ onclick="javascript:removeIpAddressOnData('<?php esc_attr_e( $spam_ip ); ?>');"
1791
+ value="<?php _e( "スパムデータから削除する", self::DOMAIN ); ?>">
1792
+ </td>
1793
+ <td><?php esc_attr_e( $spam_cnt ); ?>回</td>
1794
+ <td><?php esc_attr_e( $last_post_date ); ?></td>
1795
+ <td>
1796
+ <?php // if ( ! in_array( $spam_ip, $ip_list ) ) { ?>
1797
+ <input type="button"
1798
+ onclick="javascript:addIpAddressOnData('<?php esc_attr_e( $spam_ip ); ?>');"
1799
+ value="<?php _e( "ブロック対象IPアドレス追加", self::DOMAIN ); ?>[<?php esc_attr_e( $spam_ip ); ?>]">
1800
+ <?php /*} else { ?>
 
1801
  ブロック対象IP
1802
  <?php } */ ?>
1803
+ </td>
1804
+ <td>
1805
+ <a href="javascript:void(0);"
1806
+ onclick="window.open('<?php echo esc_attr( $p_url ); ?>hostbyip.php?ip=<?php esc_attr_e( $spam_ip ); ?>', 'hostbyip', 'width=350,height=500,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php esc_attr_e( $spam_error_type_str ); ?>
1807
+ </a>
1808
+ </td>
1809
+ </tr>
1810
+ <?php
1811
+ }
1812
+ ?>
1813
+ </tbody>
1814
+ </table>
1815
+ </div>
1816
+ </div>
1817
+ <?php } ?>
1818
+ <?php } else { ?>
1819
+ <p><?php _e( 'スパムデータベースを使用するにはThrows SPAM Awayのメニュー「設定」から<br>「スパムコメント投稿情報を保存しますか?」項目を<strong>「スパムコメント情報を保存する」</strong>に設定してください', self::DOMAIN ); ?></p>
1820
+ <?php } ?>
1821
+ <form method="post" id="remove">
1822
+ <input type="hidden" name="ip_address" id="remove_ip_address" value="">
1823
+ <input type="hidden" name="act" value="remove_ip">
1824
+ <?php wp_nonce_field( 'tsa_action', 'tsa_nonce' ) ?>
1825
+ </form>
1826
+ <form method="post" id="adding">
1827
+ <input type="hidden" name="ip_address" id="add_ip_address" value="">
1828
+ <input type="hidden" name="act" value="add_ip">
1829
+ <?php wp_nonce_field( 'tsa_action', 'tsa_nonce' ) ?>
1830
+ </form>
1831
+ <p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
1832
+ <form method="post" id="adding">
1833
+ <input type="hidden" name="act" value="truncate">
1834
+ <?php
1835
+ $other_attributes = array( 'onclick' => "return confirm('" . __( 'すべてのスパムデータが削除されます。よろしいですか?', self::DOMAIN ) . "');" );
1836
+ submit_button( __( 'すべてのデータを削除する', self::DOMAIN ), 'delete', 'wpdocs-save-settings', true, $other_attributes );
1837
+ ?>
1838
+ <?php wp_nonce_field( 'tsa_action', 'tsa_nonce' ) ?>
1839
+ </form>
1840
+ </div>
1841
+ <br clear="all">
1842
+ <?php
 
1843
  }
1844
 
1845
  /**
1846
+ * おすすめ設定ページ
1847
  */
1848
  function recommend_setting() {
1849
+ // global $wpdb;
1850
  ?>
1851
+ 制作中
1852
+ <?php
1853
  }
1854
 
1855
  }
throws_spam_away.php CHANGED
@@ -4,11 +4,13 @@
4
  Plugin URI: https://gti.co.jp/throws-spam-away/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
- Version: 2.8.2
8
  Author URI: https://gti.co.jp/
9
  License: GPL2
 
 
10
  */
11
- /* Copyright 2016 Takeshi Satoh (https://gti.co.jp/)
12
 
13
  This program is free software; you can redistribute it and/or modify
14
  it under the terms of the GNU General Public License, version 2, as
@@ -29,11 +31,15 @@ require_once 'throws_spam_away.class.php';
29
  * 設定値一覧
30
  * デフォルト設定
31
  */
 
32
 
 
 
 
33
  $tsa_spam_tbl_name = 'tsa_spam';
34
 
35
  // Throws SPAM Awayバージョン
36
- $tsa_version = '2.8.2';
37
  // スパムデータベースバージョン
38
  $tsa_db_version = 2.6; // 2.6からデータベース変更 [error_type]追加
39
 
@@ -42,55 +48,55 @@ $tsa_db_version = 2.6; // 2.6からデータベース変更 [error_type]追加
42
  * 設定値変更 2.6.2から
43
  */
44
 
45
- // ダミー項目でのスパム判定をするか
46
- $default_dummy_param_field_flg = '1'; // 1: する 2:しない
47
 
48
- // 日本語が存在しない場合無視対象とするか
49
- $default_on_flg = 1; // 1:する
50
 
51
- // タイトルの文字列はカウントから排除するか since 2.6.4
52
- $default_without_title_str = 1; // 1:する
53
 
54
- // 日本語文字最小含有数
55
- $default_japanese_string_min_count = 3;
56
 
57
- // 無視後、元画面に戻る時間
58
- $default_back_second = 0;
59
 
60
- // コメント欄下に表示される注意文言(初期設定)
61
- $default_caution_msg = '日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)';
62
 
63
- // コメント欄下に表示する位置(初期設定)1:コメント送信ボタンの上 2:コメント送信フォームの下
64
- $default_caution_msg_point = '1'; //1:"comment_form", 2:"comment_form_after"
65
 
66
- // エラー時に表示されるエラー文言(初期設定)
67
- $default_error_msg = '日本語を規定文字数以上含まない記事は投稿できませんよ。';
68
 
69
- /** URL文字列除外 設定 */
70
- // URL数の制限をするか
71
- $default_url_count_check_flg = '1'; // 1:する
72
 
73
- // URL数の制限数
74
- $default_ok_url_count = 3; // 3つまで許容
75
 
76
- // URL数制限値オーバーのエラー文言(初期設定)
77
- $default_url_count_over_error_msg = '';
78
 
79
- /** NGキーワード/必須キーワード 制御設定 */
80
 
81
- // キーワードNGエラー時に表示されるエラー文言(初期設定)
82
- $default_ng_key_error_msg = 'NGキーワードが含まれているため投稿できません。';
83
 
84
- // 必須キーワードが含まれないエラー文言(初期設定)
85
- $default_must_key_error_msg = '必須キーワードが含まれていないため投稿できません。';
86
 
87
  /** トラックバックへの対応設定 */
88
 
89
- // トラックバックへの対応 1: する
90
- $default_tb_on_flg = '1';
91
 
92
- // トラックバック記事に当サイトURLがなければ無視するか
93
- $default_tb_url_flg = '1';
94
 
95
  /** 投稿IPアドレスによる制御設定 */
96
  /** ver 2.6.5から */
@@ -102,47 +108,47 @@ $default_tb_url_flg = '1';
102
 
103
  //$default_spam_champuru_hosts = array("bsb.spamlookup.net");
104
 
105
- // スパムブラックリスト by テキスト
106
- $default_spam_champuru_by_text = "";
107
 
108
- // すぱむちゃんぷるー利用初期設定
109
- $default_spam_champuru_flg = '2'; // "2":しない
110
 
111
  /** /2.6.5 */
112
 
113
- // WordPressのcommentsテーブルで「spam」判定されたことがあるIPアドレスからの投稿を無視するか
114
- $default_ip_block_from_spam_chk_flg = '1'; // "1":する
115
 
116
- // ブロックIPアドレスからの投稿の場合に表示されるエラー文言(初期設定)
117
- $default_block_ip_address_error_msg = '';
118
 
119
- /** ver.2.8から */
120
- // ホワイトリスト以外無視するか
121
- $default_only_whitelist_ip_flg = '2'; // "2":しない
122
  /** /ver.2.8 */
123
 
124
- /** スパムデータベース */
125
 
126
- // スパムデータベース保存するか "0":保存しない
127
- $default_spam_data_save = '0';
128
 
129
- // 期間が過ぎたデータを削除するか? "1":する
130
- $default_spam_data_delete_flg = '1';
131
 
132
- // スパムデータ保持期間(日)
133
- $default_spam_keep_day_count = 15; /** 30 -> 15 */
 
134
 
135
- // 最低保存期間(日)
136
- $lower_spam_keep_day_count =1;
137
-
138
- // ○分以内に○回スパムとなったら○分間そのIPからのコメントははじくかの設定
139
- $default_spam_limit_flg = 0; // 1:する Other:しない ※スパム情報保存がデフォルトではないのでこちらも基本はしない方向です。
140
- // ※スパム情報保存していないと機能しません。
141
- $default_spam_limit_minutes = 10; // 10分以内に・・・
142
- $default_spam_limit_count = 2; // 2回までは許そうか。
143
- $default_spam_limit_over_interval = 10; // だがそれを超えたら(デフォルト3回目以降)10分はOKコメントでもスパム扱いするんでよろしく!
144
- $default_spam_limit_over_interval_error_msg = ''; // そしてその際のエラーメッセージは・・・
145
 
 
 
 
 
 
 
 
146
 
147
 
148
  /** オプションキー */
@@ -171,36 +177,41 @@ $default_spam_limit_over_interval_error_msg = ''; // そしてその際のエ
171
  // [tsa_block_ip_addresses] 文字列型
172
  // ブロック対象IPアドレスからの投稿時に表示される文言(元の記事に戻ってくる時間の間のみ表示)
173
  // [tsa_block_ip_address_error_message] 文字列型
174
- // ホワイトリスト登録IPアドレスのみ許可フラグ
175
  // [tsa_only_whitelist_ip_flg] 1:する その他:しない
176
  // URL(単純に'http'文字列のチェックのみ)文字列数を制限するか [tsa_url_count_on_flg] 1:する その他:しない
177
  // URL(単純に'http'文字列のチェックのみ)文字列の許容数 [tsa_ok_url_count] 数値型
178
  // URL(単純に'http'文字列のチェックのみ)文字列許容数オーバー時に表示される文言(元の記事に戻ってくる時間の間のみ表示)
179
  // [tsa_url_count_over_error_message] 文字列型
180
 
181
- // スパムブラックリスト [tsa_spam_champuru_hosts] 配列型
182
- // スパムブラックリスト by テキスト [tsa_spam_chmapuru_by_text] 文字列型(カンマ区切り)
183
 
184
- /** プロセス */
185
  $newThrowsSpamAway = new ThrowsSpamAway;
186
- // トラックバックチェックフィルター
187
  add_filter( 'preprocess_comment', array( &$newThrowsSpamAway, 'trackback_spam_away' ), 1, 1 );
188
- // ダミーフィールド作成
189
- $dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
190
  if ( '1' == $dummy_param_field_flg ) {
191
- add_action( 'wp_head', array( &$newThrowsSpamAway, 'tsa_scripts_init' ), 9997 );
192
- add_action( "comment_form", array(&$newThrowsSpamAway, "comment_form_dummy_param_field" ), 9998);
193
  }
194
- // 注意文言表示
195
- // コメントフォーム表示
196
- $comment_disp_point = 'comment_form';
197
- $comment_form_action_point = get_option( 'tsa_caution_msg_point', $default_caution_msg_point );
198
- // フォーム内かフォーム外か判断する
199
  if ( '2' == $comment_form_action_point ) {
200
- $comment_disp_point = 'comment_form_after';
 
 
 
 
 
201
  }
202
- add_action( $comment_disp_point, array( &$newThrowsSpamAway, 'comment_form' ), 9999 );
203
- // コメントチェックフィルター
204
- add_action( 'pre_comment_on_post', array( &$newThrowsSpamAway, 'comment_post' ), 1 );
205
- // // コメントチェックフィルター for bbPress
206
  // add_action( 'bbp_new_forum_pre_insert', array( &$newThrowsSpamAway, 'comment_post' ), 1 );
4
  Plugin URI: https://gti.co.jp/throws-spam-away/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
+ Version: 3.3.2
8
  Author URI: https://gti.co.jp/
9
  License: GPL2
10
+ Text Domain: throws-spam-away
11
+ Domain Path: /languages
12
  */
13
+ /* Copyright 2021 Takeshi Satoh (https://gti.co.jp/)
14
 
15
  This program is free software; you can redistribute it and/or modify
16
  it under the terms of the GNU General Public License, version 2, as
31
  * 設定値一覧
32
  * デフォルト設定
33
  */
34
+ $tsa_domain = 'throws-spam-away';
35
 
36
+ /**
37
+ * Throws SPAM Away で利用するテーブル名
38
+ */
39
  $tsa_spam_tbl_name = 'tsa_spam';
40
 
41
  // Throws SPAM Awayバージョン
42
+ $tsa_version = '3.3.2';
43
  // スパムデータベースバージョン
44
  $tsa_db_version = 2.6; // 2.6からデータベース変更 [error_type]追加
45
 
48
  * 設定値変更 2.6.2から
49
  */
50
 
51
+ /** ダミー項目でのスパム判定をするか */
52
+ $df_dummy_param_field_flg = '1'; // 1: する 2:しない
53
 
54
+ /** 日本語が存在しない場合無視対象とするか */
55
+ $df_on_flg = 1; // 1:する
56
 
57
+ /** タイトルの文字列はカウントから排除するか since 2.6.4 */
58
+ $df_without_title_str = 1; // 1:する
59
 
60
+ /** 日本語文字最小含有数 */
61
+ $df_japanese_string_min_cnt = 3;
62
 
63
+ /** 無視後、元画面に戻る時間 */
64
+ $df_back_second = 0;
65
 
66
+ /** コメント欄下に表示される注意文言(初期設定) */
67
+ $df_caution_msg = __( '日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)', $tsa_domain );
68
 
69
+ /** コメント欄下に表示する位置(初期設定)1:コメント送信ボタンの上 2:コメント送信フォームの下 */
70
+ $df_caution_msg_pnt = '1'; //1:"comment_form", 2:"comment_form_after", 3:"comment_form_submit_field"
71
 
72
+ /** エラー時に表示されるエラー文言(初期設定) */
73
+ $df_err_msg = __( '日本語を規定文字数以上含まない記事は投稿できませんよ。', $tsa_domain );
74
 
75
+ /***** URL文字列除外 設定 ****/
76
+ /** URL数の制限をするか */
77
+ $df_url_cnt_chk_flg = '1'; // 1:する
78
 
79
+ /** URL数の制限数 */
80
+ $df_ok_url_cnt = 3; // 3つまで許容
81
 
82
+ /** URL数制限値オーバーのエラー文言(初期設定) */
83
+ $df_url_cnt_over_err_msg = '';
84
 
85
+ /***** NGキーワード/必須キーワード 制御設定 ****/
86
 
87
+ /** キーワードNGエラー時に表示されるエラー文言(初期設定) */
88
+ $df_ng_key_err_msg = __( 'NGキーワードが含まれているため投稿できません。', $tsa_domain );
89
 
90
+ /** 必須キーワードが含まれないエラー文言(初期設定) */
91
+ $df_must_key_err_msg = __( '必須キーワードが含まれていないため投稿できません。', $tsa_domain );
92
 
93
  /** トラックバックへの対応設定 */
94
 
95
+ /** トラックバックへの対応 1: する */
96
+ $df_tb_on_flg = '1';
97
 
98
+ /** トラックバック記事に当サイトURLがなければ無視するか */
99
+ $df_tb_url_flg = '1';
100
 
101
  /** 投稿IPアドレスによる制御設定 */
102
  /** ver 2.6.5から */
108
 
109
  //$default_spam_champuru_hosts = array("bsb.spamlookup.net");
110
 
111
+ /** スパム拒否リスト by テキスト */
112
+ $df_spam_champuru_by_text = "";
113
 
114
+ /** すぱむちゃんぷるー利用初期設定 */
115
+ $df_spam_champuru_flg = '2'; // "2":しない
116
 
117
  /** /2.6.5 */
118
 
119
+ /** WordPressのcommentsテーブルで「spam」判定されたことがあるIPアドレスからの投稿を無視するか */
120
+ $df_ip_block_from_spam_chk_flg = '1'; // "1":する
121
 
122
+ /** ブロックIPアドレスからの投稿の場合に表示されるエラー文言(初期設定) */
123
+ $df_block_ip_address_err_msg = '';
124
 
125
+ /***** ver.2.8から ****/
126
+ /** 許可リスト以外無視するか */
127
+ $df_only_whitelist_ip_flg = '2'; // "2":しない
128
  /** /ver.2.8 */
129
 
130
+ /***** スパムデータベース ****/
131
 
132
+ /** スパムデータベース保存するか "0":保存しない */
133
+ $df_spam_data_save = '0';
134
 
135
+ /** 期間が過ぎたデータを削除するか? "1":する */
136
+ $df_spam_data_delete_flg = '1';
137
 
138
+ /** スパムデータ保持期間(日) */
139
+ $df_spam_keep_day_cnt = 15;
140
+ /** 30 -> 15 */
141
 
142
+ /** 最低保存期間(日) */
143
+ $lower_spam_keep_day_cnt = 1;
 
 
 
 
 
 
 
 
144
 
145
+ /** ○分以内に○回スパムとなったら○分間そのIPからのコメントははじくかの設定 */
146
+ $df_spam_limit_flg = 0; // 1:する Other:しない ※スパム情報保存がデフォルトではないのでこちらも基本はしない方向です。
147
+ /** ※スパム情報保存していないと機能しません。 */
148
+ $df_spam_limit_minutes = 10; // 10分以内に・・・
149
+ $df_spam_limit_cnt = 2; // 2回までは許そうか。
150
+ $df_spam_limit_over_interval = 10; // だがそれを超えたら(デフォルト3回目以降)10分はOKコメントでもスパム扱いするんでよろしく!
151
+ $df_spam_limit_over_interval_err_msg = ''; // そしてその際のエラーメッセージは・・・
152
 
153
 
154
  /** オプションキー */
177
  // [tsa_block_ip_addresses] 文字列型
178
  // ブロック対象IPアドレスからの投稿時に表示される文言(元の記事に戻ってくる時間の間のみ表示)
179
  // [tsa_block_ip_address_error_message] 文字列型
180
+ // 許可リスト登録IPアドレスのみ許可フラグ
181
  // [tsa_only_whitelist_ip_flg] 1:する その他:しない
182
  // URL(単純に'http'文字列のチェックのみ)文字列数を制限するか [tsa_url_count_on_flg] 1:する その他:しない
183
  // URL(単純に'http'文字列のチェックのみ)文字列の許容数 [tsa_ok_url_count] 数値型
184
  // URL(単純に'http'文字列のチェックのみ)文字列許容数オーバー時に表示される文言(元の記事に戻ってくる時間の間のみ表示)
185
  // [tsa_url_count_over_error_message] 文字列型
186
 
187
+ // スパム拒否リスト [tsa_spam_champuru_hosts] 配列型
188
+ // スパム拒否リスト by テキスト [tsa_spam_chmapuru_by_text] 文字列型(カンマ区切り)
189
 
190
+ /************ プロセス ***********/
191
  $newThrowsSpamAway = new ThrowsSpamAway;
192
+ /** トラックバックチェックフィルター */
193
  add_filter( 'preprocess_comment', array( &$newThrowsSpamAway, 'trackback_spam_away' ), 1, 1 );
194
+ /** ダミーフィールド作成 */
195
+ $dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $df_dummy_param_field_flg );
196
  if ( '1' == $dummy_param_field_flg ) {
197
+ add_action( 'wp_head', array( &$newThrowsSpamAway, 'tsa_scripts_init' ), 9997 );
198
+ add_action( "comment_form", array( &$newThrowsSpamAway, "comment_form_dummy_param_field" ), 9998 );
199
  }
200
+ /***** 注意文言表示 ****/
201
+ /** コメントフォーム表示 */
202
+ $comment_disp_point = 'comment_form';
203
+ $comment_form_action_point = get_option( 'tsa_caution_msg_point', $df_caution_msg_pnt );
204
+ /** フォーム内かフォーム外か判断する */
205
  if ( '2' == $comment_form_action_point ) {
206
+ $comment_disp_point = 'comment_form_after';
207
+ }
208
+ if ( '3' == $comment_form_action_point ) {
209
+ add_action( 'comment_form_submit_field', array( &$newThrowsSpamAway, 'comment_form_submit_field' ), 9999, 2 );
210
+ } else {
211
+ add_action( $comment_disp_point, array( &$newThrowsSpamAway, 'comment_form' ), 9999 );
212
  }
213
+ /** コメントチェックフィルター */
214
+ add_action( 'preprocess_comment', array( &$newThrowsSpamAway, 'comment_post' ), 2, 1 );
215
+
216
+ // // コメントチェックフィルター for bbPress
217
  // add_action( 'bbp_new_forum_pre_insert', array( &$newThrowsSpamAway, 'comment_post' ), 1 );
throws_spam_away_comments.php ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * <p>ThrowsSpamAway</p> Comments Class
4
+ * WordPress's Plugin
5
+ * @author Takeshi Satoh@GTI Inc. 2022
6
+ * @version 3.3.2
7
+ */
8
+
9
+ require_once "throws_spam_away.class.php";
10
+
11
+ function tsa_comment_main() {
12
+ global $wpdb;
13
+ $nonce = isset( $_POST['_wpnonce'] ) ? $_POST['_wpnonce'] : null;
14
+ $verified = $nonce && wp_verify_nonce( $nonce );
15
+
16
+ $_spam_delete_flg = false;
17
+ $_pend_delete_flg = false;
18
+
19
+ $param_c_all = ! isset( $_POST['c_all'] ) ? "" : $_POST['c_all'];
20
+ $param_tsa_kind = ! isset( $_POST['tsa_kind'] ) ? "" : $_POST['tsa_kind'];
21
+ $param_c_pend = ! isset( $_POST['c_pend'] ) ? "" : $_POST['c_pend'];
22
+ $param_pend = ! isset( $_POST['pend'] ) ? "" : $_POST['pend'];
23
+
24
+
25
+ if ( $verified ) {
26
+ if ( $param_c_all == 'a' && $param_tsa_kind == 's' ) {
27
+ $spam_comment_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 'spam'" );
28
+ if ( $spam_comment_count == 0 ) {
29
+ } else {
30
+ $_spam_delete_flg = $wpdb->query( "DELETE FROM $wpdb->comments WHERE comment_approved = 'spam'" );
31
+ }
32
+ }
33
+ if ( $param_c_pend == 'p' && $param_pend == 'p' ) {
34
+ $delete_count = $wpdb->query( "DELETE FROM $wpdb->comments WHERE comment_approved = '0'" );
35
+ $_pend_delete_flg = $delete_count >= 0;
36
+ }
37
+ }
38
+
39
+ $c_all = $wpdb->get_var( "SELECT count( comment_ID ) FROM $wpdb->comments" );
40
+ $c_pend = $wpdb->get_var( "SELECT count( comment_ID ) FROM $wpdb->comments WHERE comment_approved = '0'" );
41
+ $s_count = $wpdb->get_var( "SELECT count( comment_ID ) FROM $wpdb->comments WHERE comment_approved = 'spam'" );
42
+ ?>
43
+ <div class="wrap">
44
+ <h2>スパムコメント処理</h2>
45
+ <p>Akismet などのコメントフィルタによって spam マークがついているコメントを削除します。</p>
46
+ <?php
47
+ if ( $verified ) {
48
+ if ( $param_c_all == 'a' && $param_tsa_kind == 's' ) {
49
+ if ( $s_count == 0 ) {
50
+ echo "<p style='color:green'><strong>" . __( 'You have no comment spam.', ThrowsSpamAway::DOMAIN ) . "</strong></p>";
51
+ } else {
52
+ if ( $_spam_delete_flg != false ) {
53
+ echo "<p style='color:green'><strong>" . __( 'Spam comments have been deleted.', ThrowsSpamAway::DOMAIN ) . "</strong></p>";
54
+ } else {
55
+ echo "<p style='color:red'><strong>" . __( 'Something Went Wrong,Please Try Again!', ThrowsSpamAway::DOMAIN ) . "</strong></p>";
56
+ }
57
+ }
58
+ }
59
+ }
60
+ ?>
61
+ <h4><?php _e( 'Number of all Comments', ThrowsSpamAway::DOMAIN ); ?> : <?php echo $c_all; ?></h4>
62
+ <h4><?php _e( 'Number of Spam Comments', ThrowsSpamAway::DOMAIN ); ?> : <?php echo $s_count; ?></h4>
63
+
64
+ <?php if ( $c_all > 0 ) { ?>
65
+ <form name="dce" method="post">
66
+ <?php wp_nonce_field(); ?>
67
+ <input type="hidden" name="c_all" value="a">
68
+ <label><input type="checkbox" name="tsa_kind"
69
+ value="s"> <?php _e( 'Delete all spam comments', ThrowsSpamAway::DOMAIN ); ?></label>
70
+ <p class="submit">
71
+ <input type="submit" name="Submit"
72
+ value="<?php _e( 'Delete all spam comments', ThrowsSpamAway::DOMAIN ); ?>"
73
+ onclick="return confirm('<?php _e( 'I will send. Is it OK?', ThrowsSpamAway::DOMAIN ); ?>');">
74
+ </p>
75
+ </form>
76
+ <?php
77
+ } else {
78
+ echo "<p><strong>" . __( 'All comments have been deleted.', ThrowsSpamAway::DOMAIN ) . "</strong></p>";
79
+ }
80
+ if ( $param_c_pend == 'p' && $param_pend == 'p' && $verified ) {
81
+ if ( $_pend_delete_flg === true ) {
82
+ echo "<p style='color:green'><strong> " . __( 'All Pending comments have been deleted.', ThrowsSpamAway::DOMAIN ) . "</strong></p>";
83
+ } else {
84
+ echo "<p style='color:red'><strong>" . __( 'Something Went Wrong,Please Try Again!', ThrowsSpamAway::DOMAIN ) . "</strong></p>";
85
+ }
86
+ } else {
87
+ ?>
88
+ <h4><?php _e( 'Number of Pending Comments', ThrowsSpamAway::DOMAIN ); ?> : <?php echo $c_pend; ?></h4>
89
+
90
+ <?php if ( $c_pend > 0 ) { ?>
91
+ <form name="dcep" method="post"
92
+ action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI'] ); ?>">
93
+ <?php wp_nonce_field(); ?>
94
+ <input type="hidden" name="c_pend" value="p">
95
+ <label><input type="checkbox" name="pend"
96
+ value="p"> <?php _e( 'Delete all pending comments', ThrowsSpamAway::DOMAIN ); ?></label>
97
+ <p class="submit">
98
+ <input type="submit" name="Submit"
99
+ value="<?php _e( 'Delete all pending Comments', ThrowsSpamAway::DOMAIN ); ?>">
100
+ </p>
101
+ </form>
102
+ <?php
103
+ } else {
104
+ ?>
105
+ <p>
106
+ <strong><?php _e( 'All pending comments have been deleted.', ThrowsSpamAway::DOMAIN ); ?></strong>
107
+ </p>
108
+ <?php
109
+ }
110
+ }
111
+ ?>
112
+ <h4><?php _e( 'Warning : Once Comment Deleted can\'t be restored!', ThrowsSpamAway::DOMAIN ); ?></h4>
113
+ </div>
114
+ <?php
115
+ }
116
+
117
+ // プロセス
118
+ tsa_comment_main();