Throws SPAM Away - Version 2.6

Version Description

[error_type]255

Throws SPAM Away

Download this release

Release Info

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

Code changes from version 2.5.2.1 to 2.6

css/tipTip.css ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* TipTip CSS - Version 1.2 */
2
+
3
+ #tiptip_holder {
4
+ display: none;
5
+ position: absolute;
6
+ top: 0;
7
+ left: 0;
8
+ z-index: 99999;
9
+ }
10
+
11
+ #tiptip_holder.tip_top {
12
+ padding-bottom: 5px;
13
+ }
14
+
15
+ #tiptip_holder.tip_bottom {
16
+ padding-top: 5px;
17
+ }
18
+
19
+ #tiptip_holder.tip_right {
20
+ padding-left: 5px;
21
+ }
22
+
23
+ #tiptip_holder.tip_left {
24
+ padding-right: 5px;
25
+ }
26
+
27
+ #tiptip_content {
28
+ font-size: 11px;
29
+ text-align: left;
30
+ color: #fff;
31
+ text-shadow: 0 0 2px #000;
32
+ padding: 4px 8px;
33
+ border: 1px solid rgba(255,255,255,0.25);
34
+ background-color: rgb(25,25,25);
35
+ /* background-color: rgba(25,25,25,0.92); */
36
+ background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000));
37
+ border-radius: 3px;
38
+ -webkit-border-radius: 3px;
39
+ -moz-border-radius: 3px;
40
+ box-shadow: 0 0 3px #555;
41
+ -webkit-box-shadow: 0 0 3px #555;
42
+ -moz-box-shadow: 0 0 3px #555;
43
+ }
44
+
45
+ #tiptip_arrow, #tiptip_arrow_inner {
46
+ position: absolute;
47
+ border-color: transparent;
48
+ border-style: solid;
49
+ border-width: 6px;
50
+ height: 0;
51
+ width: 0;
52
+ }
53
+
54
+ #tiptip_holder.tip_top #tiptip_arrow {
55
+ border-top-color: #fff;
56
+ border-top-color: rgba(255,255,255,0.35);
57
+ }
58
+
59
+ #tiptip_holder.tip_bottom #tiptip_arrow {
60
+ border-bottom-color: #fff;
61
+ border-bottom-color: rgba(255,255,255,0.35);
62
+ }
63
+
64
+ #tiptip_holder.tip_right #tiptip_arrow {
65
+ border-right-color: #fff;
66
+ border-right-color: rgba(255,255,255,0.35);
67
+ }
68
+
69
+ #tiptip_holder.tip_left #tiptip_arrow {
70
+ border-left-color: #fff;
71
+ border-left-color: rgba(255,255,255,0.35);
72
+ }
73
+
74
+ #tiptip_holder.tip_top #tiptip_arrow_inner {
75
+ margin-top: -7px;
76
+ margin-left: -6px;
77
+ border-top-color: rgb(25,25,25);
78
+ border-top-color: rgba(25,25,25,0.92);
79
+ }
80
+
81
+ #tiptip_holder.tip_bottom #tiptip_arrow_inner {
82
+ margin-top: -5px;
83
+ margin-left: -6px;
84
+ border-bottom-color: rgb(25,25,25);
85
+ border-bottom-color: rgba(25,25,25,0.92);
86
+ }
87
+
88
+ #tiptip_holder.tip_right #tiptip_arrow_inner {
89
+ margin-top: -6px;
90
+ margin-left: -5px;
91
+ border-right-color: rgb(25,25,25);
92
+ border-right-color: rgba(25,25,25,0.92);
93
+ }
94
+
95
+ #tiptip_holder.tip_left #tiptip_arrow_inner {
96
+ margin-top: -6px;
97
+ margin-left: -7px;
98
+ border-left-color: rgb(25,25,25);
99
+ border-left-color: rgba(25,25,25,0.92);
100
+ }
101
+
102
+ /* Webkit Hacks */
103
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
104
+ #tiptip_content {
105
+ padding: 4px 8px 5px 8px;
106
+ background-color: rgba(45,45,45,0.88);
107
+ }
108
+ #tiptip_holder.tip_bottom #tiptip_arrow_inner {
109
+ border-bottom-color: rgba(45,45,45,0.88);
110
+ }
111
+ #tiptip_holder.tip_top #tiptip_arrow_inner {
112
+ border-top-color: rgba(20,20,20,0.92);
113
+ }
114
+ }
js/jquery.tipTip.js ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * TipTip
3
+ * Copyright 2010 Drew Wilson
4
+ * www.drewwilson.com
5
+ * code.drewwilson.com/entry/tiptip-jquery-plugin
6
+ *
7
+ * Version 1.3 - Updated: Mar. 23, 2010
8
+ *
9
+ * This Plug-In will create a custom tooltip to replace the default
10
+ * browser tooltip. It is extremely lightweight and very smart in
11
+ * that it detects the edges of the browser window and will make sure
12
+ * the tooltip stays within the current window size. As a result the
13
+ * tooltip will adjust itself to be displayed above, below, to the left
14
+ * or to the right depending on what is necessary to stay within the
15
+ * browser window. It is completely customizable as well via CSS.
16
+ *
17
+ * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
18
+ * http://www.opensource.org/licenses/mit-license.php
19
+ * http://www.gnu.org/licenses/gpl.html
20
+ */
21
+
22
+ (function($){
23
+ $.fn.tipTip = function(options) {
24
+ var defaults = {
25
+ activation: "hover",
26
+ keepAlive: false,
27
+ maxWidth: "200px",
28
+ edgeOffset: 3,
29
+ defaultPosition: "bottom",
30
+ delay: 400,
31
+ fadeIn: 200,
32
+ fadeOut: 200,
33
+ attribute: "title",
34
+ content: false, // HTML or String to fill TipTIp with
35
+ enter: function(){},
36
+ exit: function(){}
37
+ };
38
+ var opts = $.extend(defaults, options);
39
+
40
+ // Setup tip tip elements and render them to the DOM
41
+ if($("#tiptip_holder").length <= 0){
42
+ var tiptip_holder = $('<div id="tiptip_holder" style="max-width:'+ opts.maxWidth +';"></div>');
43
+ var tiptip_content = $('<div id="tiptip_content"></div>');
44
+ var tiptip_arrow = $('<div id="tiptip_arrow"></div>');
45
+ $("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')));
46
+ } else {
47
+ var tiptip_holder = $("#tiptip_holder");
48
+ var tiptip_content = $("#tiptip_content");
49
+ var tiptip_arrow = $("#tiptip_arrow");
50
+ }
51
+
52
+ return this.each(function(){
53
+ var org_elem = $(this);
54
+ if(opts.content){
55
+ var org_title = opts.content;
56
+ } else {
57
+ var org_title = org_elem.attr(opts.attribute);
58
+ }
59
+ if(org_title != ""){
60
+ if(!opts.content){
61
+ org_elem.removeAttr(opts.attribute); //remove original Attribute
62
+ }
63
+ var timeout = false;
64
+
65
+ if(opts.activation == "hover"){
66
+ org_elem.hover(function(){
67
+ active_tiptip();
68
+ }, function(){
69
+ if(!opts.keepAlive){
70
+ deactive_tiptip();
71
+ }
72
+ });
73
+ if(opts.keepAlive){
74
+ tiptip_holder.hover(function(){}, function(){
75
+ deactive_tiptip();
76
+ });
77
+ }
78
+ } else if(opts.activation == "focus"){
79
+ org_elem.focus(function(){
80
+ active_tiptip();
81
+ }).blur(function(){
82
+ deactive_tiptip();
83
+ });
84
+ } else if(opts.activation == "click"){
85
+ org_elem.click(function(){
86
+ active_tiptip();
87
+ return false;
88
+ }).hover(function(){},function(){
89
+ if(!opts.keepAlive){
90
+ deactive_tiptip();
91
+ }
92
+ });
93
+ if(opts.keepAlive){
94
+ tiptip_holder.hover(function(){}, function(){
95
+ deactive_tiptip();
96
+ });
97
+ }
98
+ }
99
+
100
+ function active_tiptip(){
101
+ opts.enter.call(this);
102
+ tiptip_content.html(org_title);
103
+ tiptip_holder.hide().removeAttr("class").css("margin","0");
104
+ tiptip_arrow.removeAttr("style");
105
+
106
+ var top = parseInt(org_elem.offset()['top']);
107
+ var left = parseInt(org_elem.offset()['left']);
108
+ var org_width = parseInt(org_elem.outerWidth());
109
+ var org_height = parseInt(org_elem.outerHeight());
110
+ var tip_w = tiptip_holder.outerWidth();
111
+ var tip_h = tiptip_holder.outerHeight();
112
+ var w_compare = Math.round((org_width - tip_w) / 2);
113
+ var h_compare = Math.round((org_height - tip_h) / 2);
114
+ var marg_left = Math.round(left + w_compare);
115
+ var marg_top = Math.round(top + org_height + opts.edgeOffset);
116
+ var t_class = "";
117
+ var arrow_top = "";
118
+ var arrow_left = Math.round(tip_w - 12) / 2;
119
+
120
+ if(opts.defaultPosition == "bottom"){
121
+ t_class = "_bottom";
122
+ } else if(opts.defaultPosition == "top"){
123
+ t_class = "_top";
124
+ } else if(opts.defaultPosition == "left"){
125
+ t_class = "_left";
126
+ } else if(opts.defaultPosition == "right"){
127
+ t_class = "_right";
128
+ }
129
+
130
+ var right_compare = (w_compare + left) < parseInt($(window).scrollLeft());
131
+ var left_compare = (tip_w + left) > parseInt($(window).width());
132
+
133
+ if((right_compare && w_compare < 0) || (t_class == "_right" && !left_compare) || (t_class == "_left" && left < (tip_w + opts.edgeOffset + 5))){
134
+ t_class = "_right";
135
+ arrow_top = Math.round(tip_h - 13) / 2;
136
+ arrow_left = -12;
137
+ marg_left = Math.round(left + org_width + opts.edgeOffset);
138
+ marg_top = Math.round(top + h_compare);
139
+ } else if((left_compare && w_compare < 0) || (t_class == "_left" && !right_compare)){
140
+ t_class = "_left";
141
+ arrow_top = Math.round(tip_h - 13) / 2;
142
+ arrow_left = Math.round(tip_w);
143
+ marg_left = Math.round(left - (tip_w + opts.edgeOffset + 5));
144
+ marg_top = Math.round(top + h_compare);
145
+ }
146
+
147
+ var top_compare = (top + org_height + opts.edgeOffset + tip_h + 8) > parseInt($(window).height() + $(window).scrollTop());
148
+ var bottom_compare = ((top + org_height) - (opts.edgeOffset + tip_h + 8)) < 0;
149
+
150
+ if(top_compare || (t_class == "_bottom" && top_compare) || (t_class == "_top" && !bottom_compare)){
151
+ if(t_class == "_top" || t_class == "_bottom"){
152
+ t_class = "_top";
153
+ } else {
154
+ t_class = t_class+"_top";
155
+ }
156
+ arrow_top = tip_h;
157
+ marg_top = Math.round(top - (tip_h + 5 + opts.edgeOffset));
158
+ } else if(bottom_compare | (t_class == "_top" && bottom_compare) || (t_class == "_bottom" && !top_compare)){
159
+ if(t_class == "_top" || t_class == "_bottom"){
160
+ t_class = "_bottom";
161
+ } else {
162
+ t_class = t_class+"_bottom";
163
+ }
164
+ arrow_top = -12;
165
+ marg_top = Math.round(top + org_height + opts.edgeOffset);
166
+ }
167
+
168
+ if(t_class == "_right_top" || t_class == "_left_top"){
169
+ marg_top = marg_top + 5;
170
+ } else if(t_class == "_right_bottom" || t_class == "_left_bottom"){
171
+ marg_top = marg_top - 5;
172
+ }
173
+ if(t_class == "_left_top" || t_class == "_left_bottom"){
174
+ marg_left = marg_left + 5;
175
+ }
176
+ tiptip_arrow.css({"margin-left": arrow_left+"px", "margin-top": arrow_top+"px"});
177
+ tiptip_holder.css({"margin-left": marg_left+"px", "margin-top": marg_top+"px"}).attr("class","tip"+t_class);
178
+
179
+ if (timeout){ clearTimeout(timeout); }
180
+ timeout = setTimeout(function(){ tiptip_holder.stop(true,true).fadeIn(opts.fadeIn); }, opts.delay);
181
+ }
182
+
183
+ function deactive_tiptip(){
184
+ opts.exit.call(this);
185
+ if (timeout){ clearTimeout(timeout); }
186
+ tiptip_holder.fadeOut(opts.fadeOut);
187
+ }
188
+ }
189
+ });
190
+ }
191
+ })(jQuery);
js/tsa_params.js ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * <p>ThrowsSpamAway</p> JavaScript
3
+ * WordPress's Plugin
4
+ * @author Takeshi Satoh@GTI Inc. 2014
5
+ * @since version2.6
6
+ */
7
+
8
+ jQuery(function($){
9
+ $('.tsa_param_field_tsa_2').hide(); // hide
10
+ $('.tsa_param_field_tsa_2 input#tsa_param_field_tsa_3').val( $('.tsa_param_field_tsa_ input').val() ); // copy
11
+
12
+ var date = new Date();
13
+ var iso = date.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/);
14
+ current_date = iso[1] + ' ' + iso[2];
15
+ if ( $('#comments form input#tsa_param_field_tsa_3').length == 0 ) {
16
+ $('#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
17
+ }
18
+
19
+ if ( $('#respond form input#tsa_param_field_tsa_3').length == 0 ) {
20
+ $('#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
21
+ }
22
+
23
+ if ( $('form#commentform input#tsa_param_field_tsa_3').length == 0 ) {
24
+ $('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
25
+ }
26
+
27
+ });
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Plugin Name ===
2
  Contributors: taman777
3
- Donate link: http://gti.jp/
4
  Tags: comments, spam
5
  Requires at least: 3.1
6
- Tested up to: 3.6.1
7
- Stable tag: 2.5.2.1
8
 
9
  コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
10
 
@@ -24,6 +24,9 @@ Stable tag: 2.5.2.1
24
  日本語が入っていないと許可しない設定を「オン・オフ」出来るようになっています。
25
  リンクと思わしき'http'を含んだ文字列が許容数(初期設定は3つ)を超えて包含される場合にエラーとします。
26
 
 
 
 
27
  IPアドレスによる投稿制御が出来ます。
28
 
29
  以前スパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
@@ -43,6 +46,15 @@ IPアドレスの指定「ブロックリスト」「ホワイトリスト」共
43
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
44
   [192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否(または優先通過)対象とします。
45
 
 
 
 
 
 
 
 
 
 
46
  ・バージョン2.5.2.1
47
   管理画面の微妙な調整を行いました。
48
 
@@ -156,6 +168,14 @@ e.g.
156
  == Screenshots ==
157
 
158
  == Changelog ==
 
 
 
 
 
 
 
 
159
  = 2.5 =
160
  ・「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用出来ます。
161
    スパムちゃんぷるーでスパム判定する機能です。
1
  === Plugin Name ===
2
  Contributors: taman777
3
+ Donate link: http://gti.jp/tsa
4
  Tags: comments, spam
5
  Requires at least: 3.1
6
+ Tested up to: 3.8
7
+ Stable tag: 2.6
8
 
9
  コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
10
 
24
  日本語が入っていないと許可しない設定を「オン・オフ」出来るようになっています。
25
  リンクと思わしき'http'を含んだ文字列が許容数(初期設定は3つ)を超えて包含される場合にエラーとします。
26
 
27
+ 設定により、空のダミーフィールドを生成しJavaScriptでの制御を行うことでスパム判定出来ます。
28
+ ※スパムプログラムによる投稿に有効です。実際に入力しようとしてもその項目は見えないようになっています。
29
+
30
  IPアドレスによる投稿制御が出来ます。
31
 
32
  以前スパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
46
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
47
   [192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否(または優先通過)対象とします。
48
 
49
+ ・バージョン2.6
50
+  コメント欄に隠しフィールドを生成しその項目に入力があればスパム判定する機能を追加。
51
+  スパムデータベースに[error_type]を追加。なにが原因でスパム判定されたかとスパム投稿の内容をスパムデータベースで保存(255バイトのみ)
52
+  スパム一覧に少し表示するようにしました。
53
+  ※データベースを直接参照すれば最新以外のスパム内容もわかります。(wp_)tsa_spamテーブルです。authorとcommentのみ格納しています。
54
+
55
+  個人的にThrows SPAM Awayの設定内容をどこかに保存しておきたい場合がありましたので、そのためのメモ欄を追加しました。
56
+  これは便利機能なだけで本体機能自体とはなんら関係ありませんのでご自由にお使い下さい。
57
+
58
  ・バージョン2.5.2.1
59
   管理画面の微妙な調整を行いました。
60
 
168
  == Screenshots ==
169
 
170
  == Changelog ==
171
+ = 2.6 =
172
+  コメント欄に隠しフィールドを生成しその項目に入力があればスパム判定する機能を追加。
173
+  スパムデータベースに[error_type]を追加。なにが原因でスパム判定されたかとスパム投稿の内容をスパムデータベースで保存(255バイトずつ)
174
+  スパム一覧に少し表示するようにしました。
175
+
176
+  個人的にThrows SPAM Awayの設定内容をどこかに保存しておきたい場合がありましたので、そのためのメモ欄を追加しました。
177
+  これは便利機能なだけで本体機能自体とはなんら関係ありませんのでご自由にお使い下さい。
178
+
179
  = 2.5 =
180
  ・「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用出来ます。
181
    スパムちゃんぷるーでスパム判定する機能です。
throws_spam_away.class.php CHANGED
@@ -3,13 +3,13 @@
3
  *
4
  * <p>ThrowsSpamAway</p> Class
5
  * WordPress's Plugin
6
- * @author Takeshi Satoh@GTI Inc. 2013
7
  *
8
  */
9
  class ThrowsSpamAway {
10
 
11
  // version
12
- var $version = '2.5.2.1';
13
  var $table_name = "";
14
 
15
  public function __construct($flg = FALSE) {
@@ -54,13 +54,16 @@ class ThrowsSpamAway {
54
  //現在のDBバージョン取得
55
  $installed_ver = get_option( 'tsa_meta_version', 0 );
56
  // DBバージョンが低い または テーブルが存在しない場合は作成
57
- if( $installed_ver < $tsa_db_version || $flg == TRUE) {
58
- // DBバージョンは 2.3未満が存在しないためSQLはCREATE文のみ
59
  $sql = "CREATE TABLE " . $this->table_name . " (
60
  meta_id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
61
  post_id bigint(20) UNSIGNED DEFAULT '0' NOT NULL,
62
- ip_address text,
63
  post_date timestamp,
 
 
 
64
  UNIQUE KEY meta_id (meta_id)
65
  )
66
  CHARACTER SET 'utf8';";
@@ -76,17 +79,24 @@ class ThrowsSpamAway {
76
  * @param string $post_id
77
  * @param string $ip_address
78
  */
79
- function save_post_meta( $post_id, $ip_address ) {
80
  global $default_spam_data_save;
81
 
82
  if ( get_option('tsa_spam_data_save', $default_spam_data_save) != "1" ) return;
83
 
84
  global $wpdb;
85
 
 
 
 
 
86
  //保存するために配列にする
87
  $set_arr = array(
88
  'post_id' => $post_id,
89
- 'ip_address' => $ip_address
 
 
 
90
  );
91
 
92
  //レコード新規追加
@@ -95,6 +105,15 @@ class ThrowsSpamAway {
95
  return;
96
  }
97
 
 
 
 
 
 
 
 
 
 
98
  function comment_form() {
99
  global $default_caution_msg;
100
  // 注意文言表示
@@ -106,6 +125,19 @@ class ThrowsSpamAway {
106
  return TRUE;
107
  }
108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  function comment_post( $id ) {
110
  global $newThrowsSpamAway;
111
  global $user_ID;
@@ -174,11 +206,19 @@ class ThrowsSpamAway {
174
  case "spam_limit_over" :
175
  $error_msg = get_option( 'tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg );
176
  break;
 
177
  default :
178
  $error_msg = get_option( 'tsa_error_message', $default_error_msg );
179
  }
180
  // 記録する場合はDB記録
181
- if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) == "1" ) $this->save_post_meta( $id, $ip );
 
 
 
 
 
 
 
182
  // 元画面へ戻るタイム計算
183
  $back_time = ( (int) get_option( 'tsa_back_second', $default_back_second ) ) * 1000;
184
  // タイム値が0なら元画面へそのままリダイレクト
@@ -316,6 +356,7 @@ class ThrowsSpamAway {
316
  function validation( $comment, $author ) {
317
  global $newThrowsSpamAway;
318
  global $error_type;
 
319
  global $default_url_count_check_flg; // URL数を制御するか初期設定値
320
  global $default_ok_url_count; // 制限する場合のURL数初期設定値
321
  global $default_japanese_string_min_count; // 日本語文字最小含有数
@@ -368,8 +409,17 @@ class ThrowsSpamAway {
368
  return FALSE;
369
  }
370
  }
371
- // まずはシングルバイトだけならエラー
 
 
 
 
 
 
 
 
372
  if ($tsa_on_flg != "2" && strlen( bin2hex( $comment ) ) / 2 == mb_strlen( $comment ) ) {
 
373
  return FALSE;
374
  } else {
375
  // 日本語文字列必須含有数
@@ -403,6 +453,7 @@ class ThrowsSpamAway {
403
  }
404
  $flg = ($tsa_japanese_string_min_count < $count_flg);
405
  if ($flg == FALSE) {
 
406
  return FALSE;
407
  }
408
  }
@@ -468,6 +519,7 @@ class ThrowsSpamAway {
468
  */
469
  function options_page() {
470
  global $wpdb; // WordPress DBアクセス
 
471
  global $default_japanese_string_min_count;
472
  global $default_caution_msg;
473
  global $default_caution_msg_point;
@@ -587,8 +639,24 @@ function removeIpAddressOnData(ipAddressStr) {
587
  <?php wp_nonce_field('update-options'); ?>
588
  <table class="form-table">
589
  <tr valign="top">
590
- <th scope="row" >日本語が存在しない場合、無視対象とする<br />(日本語文字列が存在しない場合無視対象となります。)
591
- </th>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
592
  <td><?php
593
  $chk_1 = "";
594
  $chk_2 = "";
@@ -597,9 +665,8 @@ function removeIpAddressOnData(ipAddressStr) {
597
  } else {
598
  $chk_1 = " checked=\"checked\"";
599
  }
600
- ?> <label><input type="radio" name="tsa_on_flg"
601
- value="1" <?php echo $chk_1;?> />&nbsp;する</label>&nbsp; <label><input
602
- type="radio" name="tsa_on_flg" value="2" <?php echo $chk_2;?> />&nbsp;しない</label>
603
  </td>
604
  </tr>
605
  <tr valign="top">
@@ -794,17 +861,27 @@ function removeIpAddressOnData(ipAddressStr) {
794
  size="80"
795
  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>
796
  </tr>
797
-
798
- <tr style="background-color: #efefef;"><td colspan="2"><hr />※上記のスパムチェックから除外するIPアドレスがあれば下記に設定してください。優先的に通過させます。<br />※トラックバックは優先通過ではありません。</td></tr>
799
- <tr style="background-color: #efefef;" valign="top">
800
- <th scope="row"><strong>IP制御免除<br />ホワイトリスト</strong><br />※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br />※日本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用ください。<br />改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッシュ、ドットのみ)</th>
801
  <td>
802
- <textarea name="tsa_white_ip_addresses"
 
803
  id="tsa_white_ip_addresses" cols="80" rows="10"><?php echo get_option('tsa_white_ip_addresses', "");?></textarea>
804
  </td>
805
  </tr>
806
 
807
  </table>
 
 
 
 
 
 
 
 
 
 
808
  <h3>スパムデータベース</h3>
809
  <table class="form-table">
810
  <tr valign="top">
@@ -866,8 +943,8 @@ function removeIpAddressOnData(ipAddressStr) {
866
 
867
  <input type="hidden" name="action" value="update" /> <input
868
  type="hidden" name="page_options"
869
- 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" />
870
- <p class="submit">
871
  <input type="submit" class="button-primary"
872
  value="<?php _e('Save Changes') ?>" />
873
  </p>
@@ -944,7 +1021,7 @@ print "><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;te
944
  <div style='background:$unique_color;width:100%;height:".$px_visitors."px;' title='".$qry_visitors->total." ip_addresses'></div>
945
  <div style='background:$web_color;width:100%;height:".$px_pageviews."px;' title='".$qry_pageviews->total." spam comments'></div>
946
  <div style='background:gray;width:100%;height:1px;'></div>
947
- <br />".gmdate('d', current_time('timestamp')-86400*$gg) . ' ' . gmdate('M', current_time('timestamp')-86400*$gg) ."
948
  <div style='background:$ffffff;width:100%;height:2.2em;'>".$qry_visitors->total."<br />".$qry_pageviews->total."</div>
949
  <br clear=\"all\" /></div>
950
  </td>\n";
@@ -955,14 +1032,15 @@ print "><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;te
955
  </div>
956
  &nbsp;※&nbsp;数値は
957
  &lt;上段&gt;がSPAM投稿したユニークIPアドレス数、&nbsp;&lt;下段&gt;が破棄したスパム投稿数<br />
958
- <div>
959
  <?php
960
  // wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
961
  $results = $wpdb->get_results(
962
- "SELECT count(ip_address) as cnt,ip_address,max(ppd) as post_date FROM (select ip_address, post_date as ppd from $this->table_name) as D
963
- WHERE ppd >= '". gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
964
- GROUP BY ip_address
965
- ORDER BY cnt DESC"
 
966
  );
967
  ?>
968
  <h4>
@@ -971,7 +1049,7 @@ ORDER BY cnt DESC"
971
  日間に無視投稿されたIPアドレス
972
  </h4>
973
  <p>
974
- ※「このIPアドレスを任意のブロック対象IPアドレスにコピーする」ボタンを押した場合は上の<b>「変更を保存」</b>をクリックし内容を保存してください。
975
  </p>
976
  <p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
977
  <p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
@@ -979,9 +1057,17 @@ ORDER BY cnt DESC"
979
  $p_url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
980
  wp_enqueue_script("jquery.tablesorter", $p_url."js/jquery.tablesorter.min.js", array('jquery'), FALSE);
981
  wp_enqueue_style("jquery.tablesorter", $p_url."images/style.css");
 
 
982
  ?>
983
  <style type="text/css">
984
  <!--
 
 
 
 
 
 
985
  /** ------ lightbox風 ----- */
986
  #kotak-dialog {
987
  position:absolute;
@@ -1068,7 +1154,6 @@ ORDER BY cnt DESC"
1068
  background-color:#ccc;
1069
  overflow:auto;
1070
  }
1071
- /** ------ /lightbox風 ----- */
1072
 
1073
  /** スクロール対象テーブルCSS */
1074
  #spam_list {
@@ -1080,14 +1165,14 @@ ORDER BY cnt DESC"
1080
  #spam_list_container {
1081
  position: relative;
1082
  padding-top: 26px;
1083
- width: 826px; /* 列幅合計+セル間の幅(2px)の合計+20px */
1084
  border: 1px solid #3377b6;
1085
  background-color: #ffffff;
1086
  }
1087
  /** tbody スクロール対象 */
1088
  #spam_list_div {
1089
  overflow: auto;
1090
- height: 500px;
1091
  }
1092
 
1093
  #spam_list thead tr {
@@ -1111,9 +1196,10 @@ ORDER BY cnt DESC"
1111
  }
1112
 
1113
  .cols0 { width: 200px; }
1114
- .cols1 { width: 100px; }
1115
  .cols2 { width: 100px; }
1116
- .cols3 { width: 400px; }
 
1117
 
1118
  -->
1119
  </style>
@@ -1129,10 +1215,30 @@ jQuery(function() {
1129
  3: { sorter: false }
1130
  }
1131
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1132
 
1133
  });
1134
  -->
1135
  </script>
 
1136
  <div id="spam_list_container">
1137
  <div id="spam_list_div">
1138
  <table id="spam_list" class="tablesorter">
@@ -1140,12 +1246,14 @@ jQuery(function() {
1140
  <colgroup class="cols1"></colgroup>
1141
  <colgroup class="cols2"></colgroup>
1142
  <colgroup class="cols3"></colgroup>
 
1143
  <thead>
1144
  <tr>
1145
  <th class="cols0">IPアドレス</th>
1146
  <th class="cols1">投稿数</th>
1147
  <th class="cols2">最終投稿日時</th>
1148
  <th class="cols3">スパムIP登録</th>
 
1149
  </tr>
1150
  </thead>
1151
  <tbody>
@@ -1154,6 +1262,38 @@ jQuery(function() {
1154
  $spam_ip = $item->ip_address;
1155
  $spam_cnt = $item->cnt;
1156
  $last_post_date = $item->post_date;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1157
  ?>
1158
  <tr>
1159
  <td>
@@ -1169,6 +1309,8 @@ jQuery(function() {
1169
  <td><input type="button"
1170
  onclick="javascript:addIpAddresses('<?php echo $spam_ip; ?>');"
1171
  value="ブロック対象IPアドレスにコピー[<?php echo $spam_ip; ?>]" /></td>
 
 
1172
  </tr>
1173
  <?php
1174
  }
@@ -1186,6 +1328,7 @@ jQuery(function() {
1186
  </form>
1187
  <p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
1188
 
 
1189
  </div>
1190
  <br clear="all" />
1191
  <?php
@@ -1206,6 +1349,7 @@ jQuery(function() {
1206
  // コメント判定
1207
  $author = $tb["comment_author"];
1208
  $comment = $tb["comment_content"];
 
1209
  // IP系の検査
1210
  $ip = $_SERVER['REMOTE_ADDR'];
1211
  if ( !$newThrowsSpamAway->ip_check( $ip ) ) {
@@ -1224,6 +1368,14 @@ jQuery(function() {
1224
  // トラックバック内に日本語存在(または禁止語句混入なし)
1225
  return $tb;
1226
  } else {
 
 
 
 
 
 
 
 
1227
  die( 'Your Trackback Throws Away.' );
1228
  }
1229
  }
3
  *
4
  * <p>ThrowsSpamAway</p> Class
5
  * WordPress's Plugin
6
+ * @author Takeshi Satoh@GTI Inc. 2014
7
  *
8
  */
9
  class ThrowsSpamAway {
10
 
11
  // version
12
+ var $version = '2.6';
13
  var $table_name = "";
14
 
15
  public function __construct($flg = FALSE) {
54
  //現在のDBバージョン取得
55
  $installed_ver = get_option( 'tsa_meta_version', 0 );
56
  // DBバージョンが低い または テーブルが存在しない場合は作成
57
+ if( $flg == TRUE || $installed_ver < $tsa_db_version ) {
58
+ // dbDeltaのおかげ様でCREATE文のみ
59
  $sql = "CREATE TABLE " . $this->table_name . " (
60
  meta_id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
61
  post_id bigint(20) UNSIGNED DEFAULT '0' NOT NULL,
62
+ ip_address varchar(64),
63
  post_date timestamp,
64
+ error_type varchar(255),
65
+ author varchar(255),
66
+ comment varchar(255),
67
  UNIQUE KEY meta_id (meta_id)
68
  )
69
  CHARACTER SET 'utf8';";
79
  * @param string $post_id
80
  * @param string $ip_address
81
  */
82
+ function save_post_meta( $post_id, $ip_address, $spam_contents ) {
83
  global $default_spam_data_save;
84
 
85
  if ( get_option('tsa_spam_data_save', $default_spam_data_save) != "1" ) return;
86
 
87
  global $wpdb;
88
 
89
+ $error_type = $spam_contents['error_type'];
90
+ $author = $spam_contents['author'];
91
+ $comment = $spam_contents['comment'];
92
+
93
  //保存するために配列にする
94
  $set_arr = array(
95
  'post_id' => $post_id,
96
+ 'ip_address' => $ip_address,
97
+ 'error_type' => $error_type,
98
+ 'author' => $author,
99
+ 'comment' => $comment
100
  );
101
 
102
  //レコード新規追加
105
  return;
106
  }
107
 
108
+ // JS読み込み部
109
+ function tsa_scripts_init() {
110
+ global $tsa_version;
111
+ // anti-spam の方法を参考に作成しました
112
+ if ( !is_admin() ) {
113
+ wp_enqueue_script( 'throws-spam-away-script', plugins_url( '/js/tsa_params.js', __FILE__ ), array( 'jquery' ), $tsa_version );
114
+ }
115
+ }
116
+
117
  function comment_form() {
118
  global $default_caution_msg;
119
  // 注意文言表示
125
  return TRUE;
126
  }
127
 
128
+ function comment_form_dummy_param_field() {
129
+ global $default_dummy_param_field_flg;
130
+ // 空パラメータフィールド作成
131
+ $dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg);
132
+ if ( $dummy_param_field_flg == "1" ) {
133
+ 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="" />
134
+ </p>';
135
+ echo '<p class="tsa_param_field_tsa_2">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').'" />
136
+ </p>';
137
+ }
138
+ return TRUE;
139
+ }
140
+
141
  function comment_post( $id ) {
142
  global $newThrowsSpamAway;
143
  global $user_ID;
206
  case "spam_limit_over" :
207
  $error_msg = get_option( 'tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg );
208
  break;
209
+ case "dummy_param_field" : // ダミーフィールドの場合は通常メッセージ
210
  default :
211
  $error_msg = get_option( 'tsa_error_message', $default_error_msg );
212
  }
213
  // 記録する場合はDB記録
214
+ if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) == "1" ) {
215
+ $spam_contents = array();
216
+ $spam_contents['error_type'] = $error_type;
217
+ $spam_contents['author'] = mb_strcut($author, 0, 255);
218
+ $spam_contents['comment'] = mb_strcut($comment, 0, 255);
219
+
220
+ $this->save_post_meta( $id, $ip, $spam_contents );
221
+ }
222
  // 元画面へ戻るタイム計算
223
  $back_time = ( (int) get_option( 'tsa_back_second', $default_back_second ) ) * 1000;
224
  // タイム値が0なら元画面へそのままリダイレクト
356
  function validation( $comment, $author ) {
357
  global $newThrowsSpamAway;
358
  global $error_type;
359
+ global $default_dummy_param_field_flg; // ダミー項目によるスパム判定初期値
360
  global $default_url_count_check_flg; // URL数を制御するか初期設定値
361
  global $default_ok_url_count; // 制限する場合のURL数初期設定値
362
  global $default_japanese_string_min_count; // 日本語文字最小含有数
409
  return FALSE;
410
  }
411
  }
412
+ // ダミーフィールド使用する場合、ダミーフィールドに入力値があればエラー
413
+ $tsa_dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
414
+ if ( $tsa_dummy_param_field_flg == "1") {
415
+ if ( !empty( $_POST['tsa_param_field_tsa_3'] ) ) { // このフィールドにリクエストパラメータが入る場合はスパム判定
416
+ $error_type = "dummy_param_field";
417
+ return FALSE;
418
+ }
419
+ }
420
+ // シングルバイトだけならエラー
421
  if ($tsa_on_flg != "2" && strlen( bin2hex( $comment ) ) / 2 == mb_strlen( $comment ) ) {
422
+ $error_type = "not_japanese";
423
  return FALSE;
424
  } else {
425
  // 日本語文字列必須含有数
453
  }
454
  $flg = ($tsa_japanese_string_min_count < $count_flg);
455
  if ($flg == FALSE) {
456
+ $error_type = "not_japanese";
457
  return FALSE;
458
  }
459
  }
519
  */
520
  function options_page() {
521
  global $wpdb; // WordPress DBアクセス
522
+ global $default_dummy_param_field_flg;
523
  global $default_japanese_string_min_count;
524
  global $default_caution_msg;
525
  global $default_caution_msg_point;
639
  <?php wp_nonce_field('update-options'); ?>
640
  <table class="form-table">
641
  <tr valign="top">
642
+ <th scope="row">人の目には見えないダミーの入力項目を作成し、そこに入力があれば無視対象とする<br />(スパムプログラム投稿に有効です)</th>
643
+ <td><?php
644
+ $chk_1 = "";
645
+ $chk_2 = "";
646
+ if ( get_option( 'tsa_dummy_param_field_flg', "1") == "2" ) {
647
+ $chk_2 = " checked=\"checked\"";
648
+ } else {
649
+ $chk_1 = " checked=\"checked\"";
650
+ }
651
+ ?>
652
+ <label><input type="radio" name="tsa_dummy_param_field_flg" value="1"<?php echo $chk_1;?> />&nbsp;する</label>&nbsp;
653
+ <label><input type="radio" name="tsa_dummy_param_field_flg" value="2"<?php echo $chk_2;?> />&nbsp;しない</label><br />
654
+ ※ダミー項目の制御にJavaScriptを使用しますのでJavaScriptが動作しない環境からの投稿はスパム判定されてしまいます。ご注意の上、ご利用ください。
655
+ </td>
656
+ </tr>
657
+ <tr valign="top"><td colspan="2"><hr/></td></tr>
658
+ <tr valign="top">
659
+ <th scope="row">日本語が存在しない場合、無視対象とする<br />(日本語文字列が存在しない場合無視対象となります。)</th>
660
  <td><?php
661
  $chk_1 = "";
662
  $chk_2 = "";
665
  } else {
666
  $chk_1 = " checked=\"checked\"";
667
  }
668
+ ?> <label><input type="radio" name="tsa_on_flg" value="1" <?php echo $chk_1;?> />&nbsp;する</label>&nbsp;
669
+ <label><input type="radio" name="tsa_on_flg" value="2" <?php echo $chk_2;?> />&nbsp;しない</label>
 
670
  </td>
671
  </tr>
672
  <tr valign="top">
861
  size="80"
862
  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>
863
  </tr>
864
+ <tr style="background-color: #fefefe;"><td colspan="2">※上記のスパムチェックから除外するIPアドレスがあれば下記に設定してください。優先的に通過させます。<br />※トラックバックは優先通過ではありません。</td></tr>
865
+ <tr style="background-color: #fefefe;" valign="top">
866
+ <th scope="row"><strong>IP制御免除<br />ホワイトリスト</strong></th>
 
867
  <td>
868
+ ※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br />※日本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用ください。<br />改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッシュ、ドットのみ)
869
+ <textarea name="tsa_white_ip_addresses"
870
  id="tsa_white_ip_addresses" cols="80" rows="10"><?php echo get_option('tsa_white_ip_addresses', "");?></textarea>
871
  </td>
872
  </tr>
873
 
874
  </table>
875
+ <h3>メモ(スパム対策情報や IPアドレス・NGワードその他メモ備忘録としてご自由にお使い下さい)</h3>
876
+ <p>この欄の内容が表示されることはありません。</p>
877
+ <table class="form-table">
878
+ <tr valign="top">
879
+ <td>
880
+ <textarea name="tsa_memo" style="width: 80%;" rows="10"><?php echo get_option('tsa_memo', ""); ?></textarea>
881
+
882
+ </td>
883
+ </tr>
884
+ </table>
885
  <h3>スパムデータベース</h3>
886
  <table class="form-table">
887
  <tr valign="top">
943
 
944
  <input type="hidden" name="action" value="update" /> <input
945
  type="hidden" name="page_options"
946
+ 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" />
947
+ <p class="submit" id="tsa_submit_button">
948
  <input type="submit" class="button-primary"
949
  value="<?php _e('Save Changes') ?>" />
950
  </p>
1021
  <div style='background:$unique_color;width:100%;height:".$px_visitors."px;' title='".$qry_visitors->total." ip_addresses'></div>
1022
  <div style='background:$web_color;width:100%;height:".$px_pageviews."px;' title='".$qry_pageviews->total." spam comments'></div>
1023
  <div style='background:gray;width:100%;height:1px;'></div>
1024
+ <br />".gmdate('d', current_time('timestamp')-86400*$gg) . '<br />' . gmdate('M', current_time('timestamp')-86400*$gg) ."
1025
  <div style='background:$ffffff;width:100%;height:2.2em;'>".$qry_visitors->total."<br />".$qry_pageviews->total."</div>
1026
  <br clear=\"all\" /></div>
1027
  </td>\n";
1032
  </div>
1033
  &nbsp;※&nbsp;数値は
1034
  &lt;上段&gt;がSPAM投稿したユニークIPアドレス数、&nbsp;&lt;下段&gt;が破棄したスパム投稿数<br />
1035
+
1036
  <?php
1037
  // wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
1038
  $results = $wpdb->get_results(
1039
+ "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
1040
+ ((select count(ip_address) as cnt, ip_address, max(post_date) as ppd, error_type, author, comment from $this->table_name
1041
+ WHERE post_date >= '". gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
1042
+ 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)
1043
+ ORDER BY post_date DESC"
1044
  );
1045
  ?>
1046
  <h4>
1049
  日間に無視投稿されたIPアドレス
1050
  </h4>
1051
  <p>
1052
+ ※「このIPアドレスを任意のブロック対象IPアドレスにコピーする」ボタンを押した場合は上の<b><a href="#tsa_submit_button">「変更を保存」</a></b>をクリックし内容を保存してください。
1053
  </p>
1054
  <p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
1055
  <p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
1057
  $p_url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
1058
  wp_enqueue_script("jquery.tablesorter", $p_url."js/jquery.tablesorter.min.js", array('jquery'), FALSE);
1059
  wp_enqueue_style("jquery.tablesorter", $p_url."images/style.css");
1060
+ wp_enqueue_script("jquery.tipTip", $p_url."js/jquery.tipTip.js", array('jquery'), FALSE);
1061
+ wp_enqueue_style("jquery.tipTip", $p_url."css/tipTip.css");
1062
  ?>
1063
  <style type="text/css">
1064
  <!--
1065
+ /** 変更ボタン */
1066
+ p.submit .button-primary {
1067
+ width: 200px;
1068
+ height: 30px;
1069
+ margin: 20px auto 50px 20px;
1070
+ }
1071
  /** ------ lightbox風 ----- */
1072
  #kotak-dialog {
1073
  position:absolute;
1154
  background-color:#ccc;
1155
  overflow:auto;
1156
  }
 
1157
 
1158
  /** スクロール対象テーブルCSS */
1159
  #spam_list {
1165
  #spam_list_container {
1166
  position: relative;
1167
  padding-top: 26px;
1168
+ width: 928px; /* 列幅合計+セル間の幅(2px)の合計+20px */
1169
  border: 1px solid #3377b6;
1170
  background-color: #ffffff;
1171
  }
1172
  /** tbody スクロール対象 */
1173
  #spam_list_div {
1174
  overflow: auto;
1175
+ height: 600px;
1176
  }
1177
 
1178
  #spam_list thead tr {
1196
  }
1197
 
1198
  .cols0 { width: 200px; }
1199
+ .cols1 { width: 50px; }
1200
  .cols2 { width: 100px; }
1201
+ .cols3 { width: 380px; }
1202
+ .cols4 { width: 170px; }
1203
 
1204
  -->
1205
  </style>
1215
  3: { sorter: false }
1216
  }
1217
  });
1218
+ // tipTip
1219
+ jQuery(".tip").tipTip({
1220
+ activation: "hover", // hover か focus か click で起動
1221
+ keepAlive: "true", // true か false true だとずっと出ている。
1222
+ maxWidth: "auto", //ツールチップ最大幅
1223
+ edgeOffset: 10, //要素からのオフセット距離
1224
+ defaultPosition: "left", // デフォルト表示位置 bottom(default) か top か left か right
1225
+ fadeIn: 300, // フェードインのスピード
1226
+ fadeOut: 500 // フェードアウトのスピード
1227
+ });
1228
+ jQuery(".tip_click").tipTip({
1229
+ activation: "click", // hover か focus か click で起動
1230
+ keepAlive: "true", // true か false true だとずっと出ている。
1231
+ maxWidth: "auto", //ツールチップ最大幅
1232
+ edgeOffset: 10, //要素からのオフセット距離
1233
+ defaultPosition: "left", // デフォルト表示位置 bottom(default) か top か left か right
1234
+ fadeIn: 300, // フェードインのスピード
1235
+ fadeOut: 500 // フェードアウトのスピード
1236
+ });
1237
 
1238
  });
1239
  -->
1240
  </script>
1241
+ <p><strong>投稿内容の判定</strong>&nbsp;最新投稿内容には最近のスパムコメント内容及びエラー判定が表示されます。●にカーソルを重ねると内容が表示されます。</p>
1242
  <div id="spam_list_container">
1243
  <div id="spam_list_div">
1244
  <table id="spam_list" class="tablesorter">
1246
  <colgroup class="cols1"></colgroup>
1247
  <colgroup class="cols2"></colgroup>
1248
  <colgroup class="cols3"></colgroup>
1249
+ <colgroup class="cols4"></colgroup>
1250
  <thead>
1251
  <tr>
1252
  <th class="cols0">IPアドレス</th>
1253
  <th class="cols1">投稿数</th>
1254
  <th class="cols2">最終投稿日時</th>
1255
  <th class="cols3">スパムIP登録</th>
1256
+ <th class="cols4">最新投稿内容</th>
1257
  </tr>
1258
  </thead>
1259
  <tbody>
1262
  $spam_ip = $item->ip_address;
1263
  $spam_cnt = $item->cnt;
1264
  $last_post_date = $item->post_date;
1265
+ $spam_error_type = $item->error_type;
1266
+ $spam_author = $item->author;
1267
+ $spam_comment = $item->comment;
1268
+
1269
+ // エラー変換
1270
+ $spam_error_type_str = $spam_error_type;
1271
+ switch ($spam_error_type) {
1272
+ case "not_japanese":
1273
+ $spam_error_type_str = "日本語以外";
1274
+ break;
1275
+ case "must_word":
1276
+ $spam_error_type_str = "必須キーワード無し";
1277
+ break;
1278
+ case "ng_word":
1279
+ $spam_error_type_str = "NGキーワード混入";
1280
+ break;
1281
+ case "block_ip":
1282
+ $spam_error_type_str = "ブロック対象IPアドレス";
1283
+ break;
1284
+ case "spam_trackback":
1285
+ $spam_error_type_str = "トラックバックスパム";
1286
+ break;
1287
+ case "url_count_over":
1288
+ $spam_error_type_str = "URL文字列混入数オーバー";
1289
+ break;
1290
+ case "spam_limit_over":
1291
+ $spam_error_type_str = "一定時間スパム判定エラー";
1292
+ break;
1293
+ case "dummy_param_field":
1294
+ $spam_error_type_str = "ダミー項目エラー";
1295
+ break;
1296
+ }
1297
  ?>
1298
  <tr>
1299
  <td>
1309
  <td><input type="button"
1310
  onclick="javascript:addIpAddresses('<?php echo $spam_ip; ?>');"
1311
  value="ブロック対象IPアドレスにコピー[<?php echo $spam_ip; ?>]" /></td>
1312
+ <td><?php echo $spam_error_type_str; ?><?php if ($spam_author != NULL && $spam_comment != NULL) { ?>&nbsp;<a name="<?php echo $spam_ip; ?>" class="tip tip_click" title="名前:<?php echo $spam_author; ?><br />内容:<?php echo $spam_comment; ?>">●</a><?php } ?>
1313
+ </td>
1314
  </tr>
1315
  <?php
1316
  }
1328
  </form>
1329
  <p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
1330
 
1331
+
1332
  </div>
1333
  <br clear="all" />
1334
  <?php
1349
  // コメント判定
1350
  $author = $tb["comment_author"];
1351
  $comment = $tb["comment_content"];
1352
+ $post_id = $tb["comment_post_ID"];
1353
  // IP系の検査
1354
  $ip = $_SERVER['REMOTE_ADDR'];
1355
  if ( !$newThrowsSpamAway->ip_check( $ip ) ) {
1368
  // トラックバック内に日本語存在(または禁止語句混入なし)
1369
  return $tb;
1370
  } else {
1371
+ if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) == "1" ) {
1372
+ $spam_contents = array();
1373
+ $spam_contents['error_type'] = "spam_trackback";
1374
+ $spam_contents['author'] = mb_strcut($author, 0, 255);
1375
+ $spam_contents['comment'] = mb_strcut(strip_tags($comment), 0, 255);
1376
+
1377
+ $this->save_post_meta( $post_id, $ip, $spam_contents );
1378
+ }
1379
  die( 'Your Trackback Throws Away.' );
1380
  }
1381
  }
throws_spam_away.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin URI: http://gti.jp/tsa/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
- Version: 2.5.2.1
8
  Author URI: http://gti.jp/
9
  */
10
  require_once 'throws_spam_away.class.php';
@@ -14,12 +14,16 @@ require_once 'throws_spam_away.class.php';
14
  * デフォルト設定
15
  */
16
 
 
 
17
  // スパムデータベースバージョン
18
- $tsa_db_version = 2.3; // 2.4もデータベースバージョンは変更なし
19
 
20
  /** 初期設定 */
21
  // エラー種別
22
  $error_type = "";
 
 
23
  // 日本語文字最小含有数
24
  $default_japanese_string_min_count = 3;
25
  // コメント欄下に表示される注意文言(初期設定)
@@ -61,6 +65,7 @@ $lower_spam_keep_day_count = 7;
61
  $spam_champuru_host = "dnsbl.spam-champuru.livedoor.com";
62
 
63
  /** オプションキー */
 
64
  // 日本語が存在しない時エラーとするかフラグ [tsa_on_flg] 1:する 2:しない
65
  // 日本語文字列含有数 (入力値以下ならエラー) [tsa_japanese_string_min_count] 数値型
66
  // 元の記事に戻ってくる時間(秒) [tsa_back_second] 数値型
@@ -96,6 +101,12 @@ $spam_champuru_host = "dnsbl.spam-champuru.livedoor.com";
96
  $newThrowsSpamAway = new ThrowsSpamAway;
97
  // トラックバックチェックフィルター
98
  add_filter('preprocess_comment', array(&$newThrowsSpamAway, 'trackback_spam_away'), 1, 1);
 
 
 
 
 
 
99
  // 注意文言表示
100
  // コメントフォーム表示
101
  $comment_disp_point = "comment_form";
4
  Plugin URI: http://gti.jp/tsa/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
+ Version: 2.6
8
  Author URI: http://gti.jp/
9
  */
10
  require_once 'throws_spam_away.class.php';
14
  * デフォルト設定
15
  */
16
 
17
+ // Throws SPAM Awayバージョン
18
+ $tsa_version = "2.6";
19
  // スパムデータベースバージョン
20
+ $tsa_db_version = 2.6; // 2.6からデータベース変更 [error_type]追加
21
 
22
  /** 初期設定 */
23
  // エラー種別
24
  $error_type = "";
25
+ // ダミー項目でのスパム判定をするか
26
+ $default_dummy_param_field_flg = "1"; // 1: する 2:しない
27
  // 日本語文字最小含有数
28
  $default_japanese_string_min_count = 3;
29
  // コメント欄下に表示される注意文言(初期設定)
65
  $spam_champuru_host = "dnsbl.spam-champuru.livedoor.com";
66
 
67
  /** オプションキー */
68
+ // ダミーフィールドを生成しそこに入力がある場合はエラーとするかフラグ [tsa_dummy_param_field_flg] 1:する 2:しない
69
  // 日本語が存在しない時エラーとするかフラグ [tsa_on_flg] 1:する 2:しない
70
  // 日本語文字列含有数 (入力値以下ならエラー) [tsa_japanese_string_min_count] 数値型
71
  // 元の記事に戻ってくる時間(秒) [tsa_back_second] 数値型
101
  $newThrowsSpamAway = new ThrowsSpamAway;
102
  // トラックバックチェックフィルター
103
  add_filter('preprocess_comment', array(&$newThrowsSpamAway, 'trackback_spam_away'), 1, 1);
104
+ // ダミーフィールド作成
105
+ $dummy_param_field_flg = get_option("tsa_dummy_param_field_flg", $default_dummy_param_field_flg );
106
+ if ( "1" == $dummy_param_field_flg ) {
107
+ add_action('init', array(&$newThrowsSpamAway, "tsa_scripts_init" ), 9997);
108
+ add_action( "comment_form", array(&$newThrowsSpamAway, "comment_form_dummy_param_field" ), 9998);
109
+ }
110
  // 注意文言表示
111
  // コメントフォーム表示
112
  $comment_disp_point = "comment_form";
uninstall.php CHANGED
@@ -3,6 +3,7 @@
3
  Throws SPAM Awayプラグインアンインストール
4
  2.3 追加
5
  2.4 追記
 
6
  */
7
 
8
  if(!defined('ABSPATH') && !defined('WP_UNINSTALL_PLUGIN')) { exit(); }
@@ -42,4 +43,7 @@ delete_option('tsa_spam_keep_day_count');
42
  delete_option('tsa_spam_data_delete_flg');
43
  delete_option('tsa_white_ip_addresses');
44
  // ver.2.5.1
45
- delete_option('tsa_caution_msg_point');
 
 
 
3
  Throws SPAM Awayプラグインアンインストール
4
  2.3 追加
5
  2.4 追記
6
+ 2.6 追記
7
  */
8
 
9
  if(!defined('ABSPATH') && !defined('WP_UNINSTALL_PLUGIN')) { exit(); }
43
  delete_option('tsa_spam_data_delete_flg');
44
  delete_option('tsa_white_ip_addresses');
45
  // ver.2.5.1
46
+ delete_option('tsa_caution_msg_point');
47
+ // ver.2.6
48
+ delete_option('tsa_empty_param_field_flg');
49
+ delete_option('tsa_memo');