Throws SPAM Away - Version 2.6.1

Version Description

= 2.0 = IP IP

= 1.4 =

NG

= 1.3 =

= 1.2.1 =

= 1.2 = 1

= 1.1 =

= 1.0 =

Download this release

Release Info

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

Code changes from version 2.6 to 2.6.1

Files changed (3) hide show
  1. readme.txt +6 -1
  2. throws_spam_away.class.php +489 -421
  3. throws_spam_away.php +2 -2
readme.txt CHANGED
@@ -4,7 +4,7 @@ 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
 
@@ -46,6 +46,11 @@ 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バイトのみ)
4
  Tags: comments, spam
5
  Requires at least: 3.1
6
  Tested up to: 3.8
7
+ Stable tag: 2.6.1
8
 
9
  コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
10
 
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.1
50
+  スパムデータベースの表示に時間がかかるため「設定」部分と「スパムデータ」表示画面の2メニュー構成に変更しました。
51
+  すぱむチャンプルーによる捕捉の場合にエラータイプが正しく表示されていない不具合を修正しました。
52
+  スパム投稿内容によって画面が崩れる不具合を修正しました。
53
+
54
  ・バージョン2.6
55
   コメント欄に隠しフィールドを生成しその項目に入力があればスパム判定する機能を追加。
56
   スパムデータベースに[error_type]を追加。なにが原因でスパム判定されたかとスパム投稿の内容をスパムデータベースで保存(255バイトのみ)
throws_spam_away.class.php CHANGED
@@ -12,25 +12,25 @@ class ThrowsSpamAway {
12
  var $version = '2.6';
13
  var $table_name = "";
14
 
15
- public function __construct($flg = FALSE) {
16
  global $default_spam_data_save;
17
  global $wpdb;
18
  // 接頭辞(wp_)を付けてテーブル名を設定
19
  $this->table_name = $wpdb->prefix . 'tsa_spam';
20
- if ($flg == FALSE) {
21
- add_action( 'admin_menu', array( $this, 'admin_menu' ) );
22
- global $default_spam_keep_day_count;
23
- global $lower_spam_keep_day_count;
24
-
25
- // 保存期間終了したデータ削除
26
- $skdc = intval( get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count) );
27
- if ( $skdc < $lower_spam_keep_day_count ) { $skdc = $lower_spam_keep_day_count; }
28
- if ( get_option('tsa_spam_data_delete_flg', "") == "1" ) {
29
- // 期間 get_option('tsa_spam_keep_day_count')
30
- $wpdb->query(
31
- "DELETE FROM ".$this->table_name." WHERE post_date < '".gmdate('Y-m-d 23:59:59', current_time('timestamp')-86400 * $skdc)."'"
32
- );
33
- }
34
  }
35
  }
36
 
@@ -87,8 +87,8 @@ class ThrowsSpamAway {
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(
@@ -291,6 +291,7 @@ class ThrowsSpamAway {
291
  */
292
  function rejectSpamIP( $ip ) {
293
  global $spam_champuru_host;
 
294
 
295
  $spam_IP = '127.0.0.2';
296
  $host = $spam_champuru_host;
@@ -502,8 +503,16 @@ class ThrowsSpamAway {
502
  */
503
  function admin_menu() {
504
  $mincap="level_8";
505
- add_menu_page(__( 'Throws SPAM Away', $this->domain ), __( 'Throws SPAM Away', $this->domain ), $mincap, __FILE__, array( $this, 'options_page' ) );
 
 
 
506
 
 
 
 
 
 
507
  // 従来通りスパムデータ保存しない場合はスルーする
508
  if ( get_option( 'tsa_spam_data_save' ) != 1 ) {
509
  // N/A
@@ -543,19 +552,6 @@ class ThrowsSpamAway {
543
 
544
  // 設定完了の場合はメッセージ表示
545
  $_saved = FALSE;
546
- // スパム情報から 特定IPアドレス削除
547
- if ( $_POST['act'] != NULL && $_POST['act'] == "remove_ip" ) {
548
- $remove_ip_address = @htmlspecialchars($_POST['ip_address']);
549
- if ( !isset($remove_ip_address) || strlen($remove_ip_address) == 0 ) {
550
- // N/A
551
- } else {
552
- // スパムデータベースから特定IP情報削除
553
- $wpdb->query(
554
- "DELETE FROM ".$this->table_name." WHERE ip_address = '".$remove_ip_address."' "
555
- );
556
- $_saved = TRUE;
557
- }
558
- }
559
  if ( $_GET['settings-updated'] == "true" ) {
560
  $_saved = TRUE;
561
  }
@@ -620,14 +616,6 @@ function addIpAddresses(newAddressStr) {
620
  }
621
  return false;
622
  }
623
- function removeIpAddressOnData(ipAddressStr) {
624
- if (confirm('['+ipAddressStr+'] をスパムデータベースから削除します。よろしいですか?この操作は取り消せません')) {
625
- jQuery('#remove_ip_address').val(ipAddressStr);
626
- jQuery('#remove').submit();
627
- } else {
628
- return false;
629
- }
630
- }
631
  </script>
632
  <div class="wrap">
633
  <h2>Throws SPAM Away設定</h2>
@@ -948,389 +936,8 @@ function removeIpAddressOnData(ipAddressStr) {
948
  <input type="submit" class="button-primary"
949
  value="<?php _e('Save Changes') ?>" />
950
  </p>
951
-
952
- <?php
953
- if ( get_option( 'tsa_spam_data_save' ) == "1" ) {
954
- // 日数
955
- $gdays = get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count);
956
- if ( $gdays < $lower_spam_keep_day_count ) { $gdays = $lower_spam_keep_day_count; }
957
- // 表カラー
958
- $unique_color="#114477";
959
- $web_color="#3377B6";
960
- ?>
961
- <h3>スパム投稿<?php echo $gdays; ?>日間の推移</h3>
962
-
963
- <div style="background-color: #efefef;">
964
- <table style="width: 100%; border: none;">
965
- <tr>
966
- <?php
967
- $total_qry = "
968
- SELECT count(ppd) as pageview, ppd
969
- FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as A
970
- GROUP BY ppd HAVING ppd >= '".gmdate('Y-m-d', current_time('timestamp')-86400*$gdays)."'
971
- ORDER BY pageview DESC
972
- LIMIT 1
973
- ";
974
- $qry = $wpdb->get_row($total_qry);
975
- $maxxday=$qry->pageview;
976
-
977
- $total_vis = "
978
- SELECT count(distinct ip_address) as vis, ppd
979
- FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
980
- GROUP BY ppd HAVING ppd >= '" . gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays ) . "'
981
- ORDER BY vis DESC
982
- LIMIT 1
983
- ";
984
- $qry_vis = $wpdb->get_row($total_vis);
985
- $maxxday += $qry_vis->vis;
986
-
987
- if ( $maxxday == 0 ) {
988
- $maxxday = 1;
989
- }
990
-
991
- // Y
992
- $gd = ( 100 / $gdays ).'%';
993
- for ( $gg = $gdays - 1; $gg >= 0; $gg-- ) {
994
- // TOTAL SPAM COUNT
995
- $visitor_qry = "
996
- SELECT count(DISTINCT ip_address) AS total
997
- FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
998
- WHERE ppd = '".gmdate('Y-m-d', current_time('timestamp')-86400*$gg)."'
999
- ";
1000
- $qry_visitors = $wpdb->get_row($visitor_qry);
1001
- $px_visitors = round($qry_visitors->total*100/$maxxday);
1002
- // TOTAL
1003
- $pageview_qry = "
1004
- SELECT count(ppd) as total
1005
- FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as C
1006
- WHERE ppd = '".gmdate('Y-m-d', current_time('timestamp')-86400*$gg)."'
1007
- ";
1008
- $qry_pageviews = $wpdb->get_row($pageview_qry);
1009
- $px_pageviews = round($qry_pageviews->total*100/$maxxday);
1010
- $px_white = 100 - $px_pageviews - $px_visitors;
1011
- if ($px_white < 0) {
1012
- $px_white = 0;
1013
- }
1014
-
1015
- print '<td width="'.$gd.'" valign="bottom"';
1016
- if($start_of_week == gmdate('w',current_time('timestamp')-86400*$gg)) {
1017
- print ' style="border-left:2px dotted gray;"';
1018
- } # week-cut
1019
- print "><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;text-align:center;border-right:1px solid white;color:black;'>
1020
- <div style='background:#ffffff;width:100%;height:".$px_white."px;'></div>
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";
1028
- }
1029
- ?>
1030
- </tr>
1031
- </table>
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>
1047
- 過去
1048
- <?php echo $gdays; ?>
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>
1056
- <?php if ( count( $results ) > 0 ) {
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;
1074
- top:20%;
1075
- left:50%;
1076
- margin:0px 0px 0px -200px;
1077
- width:400px;
1078
- height:auto;
1079
- background-color:#fff;
1080
- -webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.4);
1081
- -moz-box-shadow:0px 1px 2px rgba(0,0,0,0.4);
1082
- box-shadow:0px 1px 2px rgba(0,0,0,0.4);
1083
- z-index:1000;
1084
- display:none;
1085
- }
1086
-
1087
- #kotak-dialog *:focus {
1088
- outline:none;
1089
- }
1090
-
1091
- #kotak-dialog h3.title {
1092
- background-color:#3B5998;
1093
- padding:10px 15px;
1094
- color:#fff;
1095
- font:normal 16px Arial,Sans-Serif;
1096
- margin:0px 0px 0px 0px;
1097
- position:relative;
1098
- }
1099
-
1100
- #kotak-dialog h3.title a {
1101
- position:absolute;
1102
- top:10px;
1103
- right:15px;
1104
- color:#fff;
1105
- text-decoration:none;
1106
- cursor:pointer;
1107
- }
1108
-
1109
- #kotak-dialog .isi-dialog {
1110
- margin:15px;
1111
- font:normal 12px Arial,Sans-Serif;
1112
- }
1113
-
1114
- #kotak-dialog .button-wrapper {
1115
- padding:10px 15px 0px;
1116
- border-top:1px solid #ddd;
1117
- margin-top:15px;
1118
- }
1119
-
1120
- #kotak-dialog .button-wrapper button {
1121
- background-color:#FF0C39;
1122
- border:none;
1123
- font:bold 12px Arial,Sans-Serif;
1124
- color:#fff;
1125
- padding:5px 10px;
1126
- -webkit-border-radius:3px;
1127
- -moz-border-radius:3px;
1128
- border-radius:3px;
1129
- cursor:pointer;
1130
- }
1131
-
1132
- #kotak-dialog .button-wrapper button:hover {
1133
- background-color:#aaa;
1134
- }
1135
-
1136
- #dialog-overlay {
1137
- position:fixed !important;
1138
- position:absolute;
1139
- z-index:999;
1140
- top:0px;
1141
- right:0px;
1142
- bottom:0px;
1143
- left:0px;
1144
- background-color:#000;
1145
- display:none;
1146
- }
1147
-
1148
-
1149
- /* Iframe */
1150
- #iframeContainer iframe {
1151
- width:100%;
1152
- height:300px;
1153
- border:none;
1154
- background-color:#ccc;
1155
- overflow:auto;
1156
- }
1157
-
1158
- /** スクロール対象テーブルCSS */
1159
- #spam_list {
1160
- background-color: #ffffff;
1161
- border-collapse:;
1162
- font-size: 1em !important;
1163
- }
1164
- /** 全体container */
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 {
1179
- position: absolute;
1180
- top: 0;
1181
- left: 0;
1182
- background-color: #ffffff;
1183
- }
1184
- #spam_list thead tr th {
1185
- background-color: #3377b6;
1186
- color: #fff;
1187
- padding: 3px 0px;
1188
- }
1189
- #spam_list tbody tr td {
1190
- background-color: #efefef;
1191
- color: black;
1192
- padding: 3px 6px;
1193
- }
1194
- #spam_list tbody tr.odd td {
1195
- background-color:#F0F0F6;
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>
1206
- <script type="text/JavaScript">
1207
- <!--
1208
- jQuery(function() {
1209
- jQuery('#spam_list').tablesorter({
1210
- widgets: ['zebra'],
1211
- headers: {
1212
- 0: { id: "ipAddress" },
1213
- 1: { sorter: "digit" },
1214
- 2: { sorter: "shortDate" },
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">
1245
- <colgroup class="cols0"></colgroup>
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>
1260
- <?php
1261
- foreach ($results as $item) {
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>
1300
- <b><a href="javascript:void(0);"
1301
- onclick="window.open('<?php echo $p_url; ?>hostbyip.php?ip=<?php echo $spam_ip; ?>', 'hostbyip', 'width=350,height=300,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php echo $spam_ip; ?>
1302
- </a></b><br clear="all" />
1303
- <input type="button"
1304
- onclick="javascript:removeIpAddressOnData('<?php echo $spam_ip; ?>');"
1305
- value="スパムデータから削除する" />
1306
- </td>
1307
- <td><?php echo $spam_cnt; ?>回</td>
1308
- <td><?php echo $last_post_date; ?></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
- }
1317
- ?>
1318
- </tbody>
1319
- </table>
1320
- </div>
1321
- </div>
1322
- <?php } ?>
1323
- <?php } ?>
1324
  </form>
1325
- <form method="post" id="remove">
1326
- <input type="hidden" name="ip_address" id="remove_ip_address" value="" />
1327
- <input type="hidden" name="act" value="remove_ip" />
1328
- </form>
1329
- <p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
1330
-
1331
-
1332
  </div>
1333
- <br clear="all" />
1334
  <?php
1335
  }
1336
 
@@ -1371,7 +978,7 @@ jQuery(function() {
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 );
@@ -1400,4 +1007,465 @@ jQuery(function() {
1400
  return NULL;
1401
  }
1402
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1403
  }
12
  var $version = '2.6';
13
  var $table_name = "";
14
 
15
+ public function __construct() {
16
  global $default_spam_data_save;
17
  global $wpdb;
18
  // 接頭辞(wp_)を付けてテーブル名を設定
19
  $this->table_name = $wpdb->prefix . 'tsa_spam';
20
+
21
+ add_action( 'admin_menu', array( $this, 'admin_menu' ) );
22
+
23
+ global $default_spam_keep_day_count;
24
+ global $lower_spam_keep_day_count;
25
+
26
+ // 保存期間終了したデータ削除
27
+ $skdc = intval( get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count) );
28
+ if ( $skdc < $lower_spam_keep_day_count ) { $skdc = $lower_spam_keep_day_count; }
29
+ if ( get_option('tsa_spam_data_delete_flg', "") == "1" ) {
30
+ // 期間 get_option('tsa_spam_keep_day_count') 日
31
+ $wpdb->query(
32
+ "DELETE FROM ".$this->table_name." WHERE post_date < '".gmdate('Y-m-d 23:59:59', current_time('timestamp')-86400 * $skdc)."'"
33
+ );
34
  }
35
  }
36
 
87
  global $wpdb;
88
 
89
  $error_type = $spam_contents['error_type'];
90
+ $author = strip_tags($spam_contents['author']);
91
+ $comment = strip_tags($spam_contents['comment']);
92
 
93
  //保存するために配列にする
94
  $set_arr = array(
291
  */
292
  function rejectSpamIP( $ip ) {
293
  global $spam_champuru_host;
294
+ global $error_type;
295
 
296
  $spam_IP = '127.0.0.2';
297
  $host = $spam_champuru_host;
503
  */
504
  function admin_menu() {
505
  $mincap="level_8";
506
+ $spam_mincap = "level_7";
507
+ if (function_exists('add_menu_page')) {
508
+ add_menu_page(__('設定', 'throws-spam-away'), __('Throws SPAM Away', 'throws-spam-away'), $mincap, 'throws-spam-away', array( $this, 'options_page'));
509
+ }
510
 
511
+ if ( get_option( 'tsa_spam_data_save' ) == "1" ) {
512
+ if (function_exists('add_submenu_page')) {
513
+ 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'));
514
+ }
515
+ }
516
  // 従来通りスパムデータ保存しない場合はスルーする
517
  if ( get_option( 'tsa_spam_data_save' ) != 1 ) {
518
  // N/A
552
 
553
  // 設定完了の場合はメッセージ表示
554
  $_saved = FALSE;
 
 
 
 
 
 
 
 
 
 
 
 
 
555
  if ( $_GET['settings-updated'] == "true" ) {
556
  $_saved = TRUE;
557
  }
616
  }
617
  return false;
618
  }
 
 
 
 
 
 
 
 
619
  </script>
620
  <div class="wrap">
621
  <h2>Throws SPAM Away設定</h2>
936
  <input type="submit" class="button-primary"
937
  value="<?php _e('Save Changes') ?>" />
938
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
939
  </form>
 
 
 
 
 
 
 
940
  </div>
 
941
  <?php
942
  }
943
 
978
  if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) == "1" ) {
979
  $spam_contents = array();
980
  $spam_contents['error_type'] = "spam_trackback";
981
+ $spam_contents['author'] = mb_strcut(strip_tags($author), 0, 255);
982
  $spam_contents['comment'] = mb_strcut(strip_tags($comment), 0, 255);
983
 
984
  $this->save_post_meta( $post_id, $ip, $spam_contents );
1007
  return NULL;
1008
  }
1009
 
1010
+ /**
1011
+ * スパムデータベース表示
1012
+ * @param
1013
+ * @return HTML
1014
+ */
1015
+ function spams_list() {
1016
+ global $wpdb;
1017
+ $_saved = FALSE;
1018
+ // スパム情報から 特定IPアドレス削除
1019
+ if ( $_POST['act'] != NULL && $_POST['act'] == "remove_ip" ) {
1020
+ $remove_ip_address = @htmlspecialchars($_POST['ip_address']);
1021
+ if ( !isset($remove_ip_address) || strlen($remove_ip_address) == 0 ) {
1022
+ // N/A
1023
+ } else {
1024
+ // スパムデータベースから特定IP情報削除
1025
+ $wpdb->query(
1026
+ "DELETE FROM ".$this->table_name." WHERE ip_address = '".$remove_ip_address."' "
1027
+ );
1028
+ $_saved = TRUE;
1029
+ $message = "スパムデータから $remove_ip_address のデータを削除しました。";
1030
+ }
1031
+ } elseif ( $_POST['act'] != NULL && $_POST['act'] == "add_ip" ) {
1032
+ $add_ip_address = @htmlspecialchars($_POST['ip_address']);
1033
+ if ( !isset($add_ip_address) || strlen($add_ip_address) == 0 ) {
1034
+ // N/A
1035
+ } else {
1036
+ // 対象IPアドレスに一つ追加
1037
+ $block_ip_addresses_str = get_option('tsa_block_ip_addresses', '');
1038
+ $block_ip_addresses = str_replace("\n", ",", $block_ip_addresses_str);
1039
+ $ip_list = mb_split( ",", $block_ip_addresses );
1040
+ $dup_flg = FALSE;
1041
+ foreach ( $ip_list as $ip ) {
1042
+ if ( $ip == trim($add_ip_address) ) {
1043
+ $_saved = TRUE;
1044
+ $message = "$add_ip_address はすでに設定されています。";
1045
+ $dup_flg = TRUE;
1046
+ break;
1047
+ }
1048
+ }
1049
+ if ( $dup_flg == FALSE ) {
1050
+ $added_block_ip_addresses_str = $block_ip_addresses_str . "\n" .$add_ip_address;
1051
+ update_option("tsa_block_ip_addresses", $added_block_ip_addresses_str);
1052
+ $_saved = TRUE;
1053
+ $message = "$add_ip_address を追加設定しました。";
1054
+ }
1055
+ }
1056
+ }
1057
+ if ( $_GET['settings-updated'] == "true" ) {
1058
+ $_saved = TRUE;
1059
+ }
1060
+ ?>
1061
+ <div class="wrap">
1062
+ <?php
1063
+ if ( get_option( 'tsa_spam_data_save' ) == "1" ) {
1064
+ // 日数
1065
+ $gdays = get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count);
1066
+ if ( $gdays < $lower_spam_keep_day_count ) { $gdays = $lower_spam_keep_day_count; }
1067
+ // 表カラー
1068
+ $unique_color="#114477";
1069
+ $web_color="#3377B6";
1070
+ ?>
1071
+ <h2>Throws SPAM Away スパムデータ</h2>
1072
+ <h3>スパム投稿<?php echo $gdays; ?>日間の推移</h3>
1073
+ <?php if ($_saved) { ?>
1074
+ <div class="updated" style="padding: 10px; width: 50%;" id="message"><?php echo $message; ?></div>
1075
+ <?php } ?>
1076
+ <div style="background-color: #efefef;">
1077
+ <table style="width: 100%; border: none;">
1078
+ <tr>
1079
+ <?php
1080
+ $total_qry = "
1081
+ SELECT count(ppd) as pageview, ppd
1082
+ FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as A
1083
+ GROUP BY ppd HAVING ppd >= '".gmdate('Y-m-d', current_time('timestamp')-86400*$gdays)."'
1084
+ ORDER BY pageview DESC
1085
+ LIMIT 1
1086
+ ";
1087
+ $qry = $wpdb->get_row($total_qry);
1088
+ $maxxday=$qry->pageview;
1089
+
1090
+ $total_vis = "
1091
+ SELECT count(distinct ip_address) as vis, ppd
1092
+ FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
1093
+ GROUP BY ppd HAVING ppd >= '" . gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays ) . "'
1094
+ ORDER BY vis DESC
1095
+ LIMIT 1
1096
+ ";
1097
+ $qry_vis = $wpdb->get_row($total_vis);
1098
+ $maxxday += $qry_vis->vis;
1099
+
1100
+ if ( $maxxday == 0 ) {
1101
+ $maxxday = 1;
1102
+ }
1103
+
1104
+ // Y
1105
+ $gd = ( 100 / $gdays ).'%';
1106
+ for ( $gg = $gdays - 1; $gg >= 0; $gg-- ) {
1107
+ // TOTAL SPAM COUNT
1108
+ $visitor_qry = "
1109
+ SELECT count(DISTINCT ip_address) AS total
1110
+ FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
1111
+ WHERE ppd = '".gmdate('Y-m-d', current_time('timestamp')-86400*$gg)."'
1112
+ ";
1113
+ $qry_visitors = $wpdb->get_row($visitor_qry);
1114
+ $px_visitors = round($qry_visitors->total*100/$maxxday);
1115
+ // TOTAL
1116
+ $pageview_qry = "
1117
+ SELECT count(ppd) as total
1118
+ FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as C
1119
+ WHERE ppd = '".gmdate('Y-m-d', current_time('timestamp')-86400*$gg)."'
1120
+ ";
1121
+ $qry_pageviews = $wpdb->get_row($pageview_qry);
1122
+ $px_pageviews = round($qry_pageviews->total*100/$maxxday);
1123
+ $px_white = 100 - $px_pageviews - $px_visitors;
1124
+ if ($px_white < 0) {
1125
+ $px_white = 0;
1126
+ }
1127
+
1128
+ print '<td width="'.$gd.'" valign="bottom"';
1129
+ if($start_of_week == gmdate('w',current_time('timestamp')-86400*$gg)) {
1130
+ print ' style="border-left:2px dotted gray;"';
1131
+ } # week-cut
1132
+ print "><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;text-align:center;border-right:1px solid white;color:black;'>
1133
+ <div style='background:#ffffff;width:100%;height:".$px_white."px;'></div>
1134
+ <div style='background:$unique_color;width:100%;height:".$px_visitors."px;' title='".$qry_visitors->total." ip_addresses'></div>
1135
+ <div style='background:$web_color;width:100%;height:".$px_pageviews."px;' title='".$qry_pageviews->total." spam comments'></div>
1136
+ <div style='background:gray;width:100%;height:1px;'></div>
1137
+ <br />".gmdate('d', current_time('timestamp')-86400*$gg) . '<br />' . gmdate('M', current_time('timestamp')-86400*$gg) ."
1138
+ <div style='background:$ffffff;width:100%;height:2.2em;'>".$qry_visitors->total."<br />".$qry_pageviews->total."</div>
1139
+ <br clear=\"all\" /></div>
1140
+ </td>\n";
1141
+ }
1142
+ ?>
1143
+ </tr>
1144
+ </table>
1145
+ </div>
1146
+ &nbsp;※&nbsp;数値は
1147
+ &lt;上段&gt;がSPAM投稿したユニークIPアドレス数、&nbsp;&lt;下段&gt;が破棄したスパム投稿数<br />
1148
+
1149
+ <?php
1150
+ // wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
1151
+ $results = $wpdb->get_results(
1152
+ "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
1153
+ ((select count(ip_address) as cnt, ip_address, max(post_date) as ppd, error_type, author, comment from $this->table_name
1154
+ WHERE post_date >= '". gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
1155
+ 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)
1156
+ ORDER BY post_date DESC"
1157
+ );
1158
+ ?>
1159
+ <h4>
1160
+ 過去
1161
+ <?php echo $gdays; ?>
1162
+ 日間に無視投稿されたIPアドレス
1163
+ </h4>
1164
+ <p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
1165
+ <p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
1166
+ <?php if ( count( $results ) > 0 ) {
1167
+ $p_url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
1168
+ wp_enqueue_script("jquery.tablesorter", $p_url."js/jquery.tablesorter.min.js", array('jquery'), FALSE);
1169
+ wp_enqueue_style("jquery.tablesorter", $p_url."images/style.css");
1170
+ wp_enqueue_script("jquery.tipTip", $p_url."js/jquery.tipTip.js", array('jquery'), FALSE);
1171
+ wp_enqueue_style("jquery.tipTip", $p_url."css/tipTip.css");
1172
+ ?>
1173
+ <style type="text/css">
1174
+ <!--
1175
+ /** 変更ボタン */
1176
+ p.submit .button-primary {
1177
+ width: 200px;
1178
+ height: 30px;
1179
+ margin: 20px auto 50px 20px;
1180
+ }
1181
+ /** ------ lightbox風 ----- */
1182
+ #kotak-dialog {
1183
+ position:absolute;
1184
+ top:20%;
1185
+ left:50%;
1186
+ margin:0px 0px 0px -200px;
1187
+ width:400px;
1188
+ height:auto;
1189
+ background-color:#fff;
1190
+ -webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.4);
1191
+ -moz-box-shadow:0px 1px 2px rgba(0,0,0,0.4);
1192
+ box-shadow:0px 1px 2px rgba(0,0,0,0.4);
1193
+ z-index:1000;
1194
+ display:none;
1195
+ }
1196
+
1197
+ #kotak-dialog *:focus {
1198
+ outline:none;
1199
+ }
1200
+
1201
+ #kotak-dialog h3.title {
1202
+ background-color:#3B5998;
1203
+ padding:10px 15px;
1204
+ color:#fff;
1205
+ font:normal 16px Arial,Sans-Serif;
1206
+ margin:0px 0px 0px 0px;
1207
+ position:relative;
1208
+ }
1209
+
1210
+ #kotak-dialog h3.title a {
1211
+ position:absolute;
1212
+ top:10px;
1213
+ right:15px;
1214
+ color:#fff;
1215
+ text-decoration:none;
1216
+ cursor:pointer;
1217
+ }
1218
+
1219
+ #kotak-dialog .isi-dialog {
1220
+ margin:15px;
1221
+ font:normal 12px Arial,Sans-Serif;
1222
+ }
1223
+
1224
+ #kotak-dialog .button-wrapper {
1225
+ padding:10px 15px 0px;
1226
+ border-top:1px solid #ddd;
1227
+ margin-top:15px;
1228
+ }
1229
+
1230
+ #kotak-dialog .button-wrapper button {
1231
+ background-color:#FF0C39;
1232
+ border:none;
1233
+ font:bold 12px Arial,Sans-Serif;
1234
+ color:#fff;
1235
+ padding:5px 10px;
1236
+ -webkit-border-radius:3px;
1237
+ -moz-border-radius:3px;
1238
+ border-radius:3px;
1239
+ cursor:pointer;
1240
+ }
1241
+
1242
+ #kotak-dialog .button-wrapper button:hover {
1243
+ background-color:#aaa;
1244
+ }
1245
+
1246
+ #dialog-overlay {
1247
+ position:fixed !important;
1248
+ position:absolute;
1249
+ z-index:999;
1250
+ top:0px;
1251
+ right:0px;
1252
+ bottom:0px;
1253
+ left:0px;
1254
+ background-color:#000;
1255
+ display:none;
1256
+ }
1257
+
1258
+
1259
+ /* Iframe */
1260
+ #iframeContainer iframe {
1261
+ width:100%;
1262
+ height:300px;
1263
+ border:none;
1264
+ background-color:#ccc;
1265
+ overflow:auto;
1266
+ }
1267
+
1268
+ /** スクロール対象テーブルCSS */
1269
+ #spam_list {
1270
+ background-color: #ffffff;
1271
+ border-collapse:;
1272
+ font-size: 1em !important;
1273
+ }
1274
+ /** 全体container */
1275
+ #spam_list_container {
1276
+ position: relative;
1277
+ padding-top: 26px;
1278
+ width: 928px; /* 列幅合計+セル間の幅(2px)の合計+20px */
1279
+ border: 1px solid #3377b6;
1280
+ background-color: #ffffff;
1281
+ }
1282
+ /** tbody スクロール対象 */
1283
+ #spam_list_div {
1284
+ overflow: auto;
1285
+ height: 600px;
1286
+ }
1287
+
1288
+ #spam_list thead tr {
1289
+ position: absolute;
1290
+ top: 0;
1291
+ left: 0;
1292
+ background-color: #ffffff;
1293
+ }
1294
+ #spam_list thead tr th {
1295
+ background-color: #3377b6;
1296
+ color: #fff;
1297
+ padding: 3px 0px;
1298
+ }
1299
+ #spam_list tbody tr td {
1300
+ background-color: #efefef;
1301
+ color: black;
1302
+ padding: 3px 6px;
1303
+ }
1304
+ #spam_list tbody tr.odd td {
1305
+ background-color:#F0F0F6;
1306
+ }
1307
+
1308
+ .cols0 { width: 200px; }
1309
+ .cols1 { width: 50px; }
1310
+ .cols2 { width: 100px; }
1311
+ .cols3 { width: 380px; }
1312
+ .cols4 { width: 170px; }
1313
+
1314
+ -->
1315
+ </style>
1316
+ <script type="text/JavaScript">
1317
+ <!--
1318
+ jQuery(function() {
1319
+ jQuery('#spam_list').tablesorter({
1320
+ widgets: ['zebra'],
1321
+ headers: {
1322
+ 0: { id: "ipAddress" },
1323
+ 1: { sorter: "digit" },
1324
+ 2: { sorter: "shortDate" },
1325
+ 3: { sorter: false }
1326
+ }
1327
+ });
1328
+ // tipTip
1329
+ jQuery(".tip").tipTip({
1330
+ activation: "hover", // hover か focus か click で起動
1331
+ keepAlive: "true", // true か false true だとずっと出ている。
1332
+ maxWidth: "auto", //ツールチップ最大幅
1333
+ edgeOffset: 10, //要素からのオフセット距離
1334
+ defaultPosition: "left", // デフォルト表示位置 bottom(default) か top か left か right
1335
+ fadeIn: 300, // フェードインのスピード
1336
+ fadeOut: 500 // フェードアウトのスピード
1337
+ });
1338
+ jQuery(".tip_click").tipTip({
1339
+ activation: "click", // hover か focus か click で起動
1340
+ keepAlive: "true", // true か false true だとずっと出ている。
1341
+ maxWidth: "auto", //ツールチップ最大幅
1342
+ edgeOffset: 10, //要素からのオフセット距離
1343
+ defaultPosition: "left", // デフォルト表示位置 bottom(default) か top か left か right
1344
+ fadeIn: 300, // フェードインのスピード
1345
+ fadeOut: 500 // フェードアウトのスピード
1346
+ });
1347
+
1348
+ });
1349
+
1350
+ function removeIpAddressOnData(ipAddressStr) {
1351
+ if (confirm('['+ipAddressStr+'] をスパムデータベースから削除します。よろしいですか?この操作は取り消せません')) {
1352
+ jQuery('#remove_ip_address').val(ipAddressStr);
1353
+ jQuery('#remove').submit();
1354
+ } else {
1355
+ return false;
1356
+ }
1357
+ }
1358
+
1359
+ function addIpAddressOnData(ipAddressStr) {
1360
+ if (confirm('['+ipAddressStr+'] を無視対象に追加します。よろしいですか?削除は設定から行ってください')) {
1361
+ jQuery('#add_ip_address').val(ipAddressStr);
1362
+ jQuery('#adding').submit();
1363
+ } else {
1364
+ return false;
1365
+ }
1366
+ }
1367
+ -->
1368
+ </script>
1369
+ <p><strong>投稿内容の判定</strong>&nbsp;最新投稿内容には最近のスパムコメント内容及びエラー判定が表示されます。●にカーソルを重ねると内容が表示されます。</p>
1370
+ <div id="spam_list_container">
1371
+ <div id="spam_list_div">
1372
+ <table id="spam_list" class="tablesorter">
1373
+ <colgroup class="cols0"></colgroup>
1374
+ <colgroup class="cols1"></colgroup>
1375
+ <colgroup class="cols2"></colgroup>
1376
+ <colgroup class="cols3"></colgroup>
1377
+ <colgroup class="cols4"></colgroup>
1378
+ <thead>
1379
+ <tr>
1380
+ <th class="cols0">IPアドレス</th>
1381
+ <th class="cols1">投稿数</th>
1382
+ <th class="cols2">最終投稿日時</th>
1383
+ <th class="cols3">スパムIP登録</th>
1384
+ <th class="cols4">最新投稿内容</th>
1385
+ </tr>
1386
+ </thead>
1387
+ <tbody>
1388
+ <?php
1389
+ foreach ($results as $item) {
1390
+ $spam_ip = $item->ip_address;
1391
+ $spam_cnt = $item->cnt;
1392
+ $last_post_date = $item->post_date;
1393
+ $spam_error_type = $item->error_type;
1394
+ $spam_author = strip_tags($item->author);
1395
+ $spam_comment = strip_tags($item->comment);
1396
+
1397
+ // エラー変換
1398
+ $spam_error_type_str = $spam_error_type;
1399
+ switch ($spam_error_type) {
1400
+ case "not_japanese":
1401
+ $spam_error_type_str = "日本語以外";
1402
+ break;
1403
+ case "must_word":
1404
+ $spam_error_type_str = "必須キーワード無し";
1405
+ break;
1406
+ case "ng_word":
1407
+ $spam_error_type_str = "NGキーワード混入";
1408
+ break;
1409
+ case "block_ip":
1410
+ $spam_error_type_str = "ブロック対象IPアドレス";
1411
+ break;
1412
+ case "spam_trackback":
1413
+ $spam_error_type_str = "トラックバックスパム";
1414
+ break;
1415
+ case "url_count_over":
1416
+ $spam_error_type_str = "URL文字列混入数オーバー";
1417
+ break;
1418
+ case "spam_limit_over":
1419
+ $spam_error_type_str = "一定時間スパム判定エラー";
1420
+ break;
1421
+ case "dummy_param_field":
1422
+ $spam_error_type_str = "ダミー項目エラー";
1423
+ break;
1424
+ }
1425
+ ?>
1426
+ <tr>
1427
+ <td>
1428
+ <b><a href="javascript:void(0);"
1429
+ onclick="window.open('<?php echo $p_url; ?>hostbyip.php?ip=<?php echo $spam_ip; ?>', 'hostbyip', 'width=350,height=300,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php echo $spam_ip; ?>
1430
+ </a></b><br clear="all" />
1431
+ <input type="button"
1432
+ onclick="javascript:removeIpAddressOnData('<?php echo $spam_ip; ?>');"
1433
+ value="スパムデータから削除する" />
1434
+ </td>
1435
+ <td><?php echo $spam_cnt; ?>回</td>
1436
+ <td><?php echo $last_post_date; ?></td>
1437
+ <td><input type="button"
1438
+ onclick="javascript:addIpAddressOnData('<?php echo $spam_ip; ?>');"
1439
+ value="ブロック対象IPアドレス追加[<?php echo $spam_ip; ?>]" /></td>
1440
+ <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 } ?>
1441
+ </td>
1442
+ </tr>
1443
+ <?php
1444
+ }
1445
+ ?>
1446
+ </tbody>
1447
+ </table>
1448
+ </div>
1449
+ </div>
1450
+ <?php } ?>
1451
+ <?php } else { ?>
1452
+ <p>スパムデータベースを使用するにはThrows SPAM Awayのメニュー「設定」から<br />
1453
+ 「スパムコメント投稿情報を保存しますか?」項目を<strong>「スパムコメント情報を保存する」</strong>に設定してください</p>
1454
+ <?php } ?>
1455
+ <form method="post" id="remove">
1456
+ <input type="hidden" name="ip_address" id="remove_ip_address" value="" />
1457
+ <input type="hidden" name="act" value="remove_ip" />
1458
+ </form>
1459
+ <form method="post" id="adding">
1460
+ <input type="hidden" name="ip_address" id="add_ip_address" value="" />
1461
+ <input type="hidden" name="act" value="add_ip" />
1462
+ </form>
1463
+ <p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
1464
+
1465
+
1466
+ </div>
1467
+ <br clear="all" />
1468
+ <?php
1469
+ }
1470
+
1471
  }
throws_spam_away.php CHANGED
@@ -4,7 +4,7 @@
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';
@@ -15,7 +15,7 @@ require_once 'throws_spam_away.class.php';
15
  */
16
 
17
  // Throws SPAM Awayバージョン
18
- $tsa_version = "2.6";
19
  // スパムデータベースバージョン
20
  $tsa_db_version = 2.6; // 2.6からデータベース変更 [error_type]追加
21
 
4
  Plugin URI: http://gti.jp/tsa/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
+ Version: 2.6.1
8
  Author URI: http://gti.jp/
9
  */
10
  require_once 'throws_spam_away.class.php';
15
  */
16
 
17
  // Throws SPAM Awayバージョン
18
+ $tsa_version = "2.6.1";
19
  // スパムデータベースバージョン
20
  $tsa_db_version = 2.6; // 2.6からデータベース変更 [error_type]追加
21