IP Geo Block - Version 3.0.12

Version Description

  • Improvement: Enhance "Privacy and record settings" where "Expiration time [sec] for Logs" can be specified.
  • Improvement: Add "Export cache" in "Statistics in IP address cache" on "Statistics" tab.
  • Fix: Fix some minor bugs.
Download this release

Release Info

Developer tokkonopapa
Plugin Icon 128x128 IP Geo Block
Version 3.0.12
Comparing to
See all releases

Code changes from version 3.0.11 to 3.0.12

README.txt CHANGED
@@ -4,7 +4,7 @@ Donate link:
4
Tags: security, firewall, brute force, vulnerability, login, wp-admin, admin, ajax, xmlrpc, comment, pingback, trackback, spam, IP address, geo, geolocation, buddypress, bbPress
5
Requires at least: 3.7
6
Tested up to: 4.9.5
7
- Stable tag: 3.0.11
8
License: GPLv3
9
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
10
@@ -242,7 +242,7 @@ or following descriptions for your best setup.
242
243
= Does the site using this plugin comply with GDPR? =
244
245
- Using this plugin itself should not be the problem, because from version 3.0.11 IP addresses in logs and cache of this plugin are encrypted by default in preparation for personal data breach. It also not only provides a way to manually erase them but also has the functionality to remove them when those are exceeded a certain amount/time. The option "Plivacy friendly" helps you to restrict sending the ip address to the 3rd parties such as geolocaiton APIs and whois service equiped in this plugin. However, these functions are part of the requirements that GDPR requires and do not guarantee that the site is compliant with GDPR. Refer to [3.0.11 release note](http://www.ipgeoblock.com/changelog/release-3.0.11.html) for details.
246
247
= Does this plugin support multisite? =
248
@@ -382,6 +382,11 @@ Please refer to "[How can I fix permission troubles?](http://www.ipgeoblock.com/
382
383
== Changelog ==
384
385
= 3.0.11 =
386
* **Improvement:** To comply with GDPR, IP address in logs/cache will be always encrypted. The option of "**Anonymize IP address**" was renamed to "**Privacy friendly**" in "**Privacy and record settings**". It will not only anonymize an IP address but also will restrict on sending to the 3rd parties such as geolocation APIs and whois service.
387
* **Improvement:** Update geolocation APIs and add a new one.
4
Tags: security, firewall, brute force, vulnerability, login, wp-admin, admin, ajax, xmlrpc, comment, pingback, trackback, spam, IP address, geo, geolocation, buddypress, bbPress
5
Requires at least: 3.7
6
Tested up to: 4.9.5
7
+ Stable tag: 3.0.12
8
License: GPLv3
9
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
10
242
243
= Does the site using this plugin comply with GDPR? =
244
245
+ Using this plugin itself should not be the problem, because from version 3.0.11 IP addresses in logs and cache of this plugin are encrypted by default in preparation for personal data breach. It also not only provides a way to manually erase them but also has the functionality to remove them when those are exceeded a certain amount/time. The option "Privacy friendly" helps you to restrict sending the ip address to the 3rd parties such as geolocaiton APIs and whois service equipped in this plugin. However, these functions are part of the requirements that GDPR requires and do not guarantee that the site is compliant with GDPR. Refer to [3.0.11 release note](http://www.ipgeoblock.com/changelog/release-3.0.11.html) for details.
246
247
= Does this plugin support multisite? =
248
382
383
== Changelog ==
384
385
+ = 3.0.12 =
386
+ * **Improvement:** Enhance "Privacy and record settings" where "Expiration time [sec] for Logs" can be specified.
387
+ * **Improvement:** Add "Export cache" in "Statistics in IP address cache" on "Statistics" tab.
388
+ * **Fix:** Fix some minor bugs.
389
+
390
= 3.0.11 =
391
* **Improvement:** To comply with GDPR, IP address in logs/cache will be always encrypted. The option of "**Anonymize IP address**" was renamed to "**Privacy friendly**" in "**Privacy and record settings**". It will not only anonymize an IP address but also will restrict on sending to the 3rd parties such as geolocation APIs and whois service.
392
* **Improvement:** Update geolocation APIs and add a new one.
admin/class-ip-geo-block-admin.php CHANGED
@@ -9,6 +9,7 @@
9
* @copyright 2013-2018 tokkonopapa
10
*/
11
define( 'IP_GEO_BLOCK_NETWORK', FALSE );
12
class IP_Geo_Block_Admin {
13
14
/**
@@ -397,11 +398,11 @@ class IP_Geo_Block_Admin {
397
$admin_menu = ( 'admin_menu' === current_filter() ); // @since: 2.5 `admin_menu` or `network_admin_menu`
398
399
// Verify tab number
400
- if ( $this->is_network ) {
401
if ( $admin_menu ) {
402
- $this->admin_tab = min( 4, max( $settings['network_wide'] ? 1 : 0, $this->admin_tab ) );
403
- } elseif ( ! in_array( $this->admin_tab, $settings['network_wide'] ? array( 0, 5 ) : array( 5 ), TRUE ) ) {
404
- $this->admin_tab = $settings['network_wide'] ? 0 : 5;
405
}
406
} else {
407
$this->admin_tab = min( 4, $this->admin_tab ); // exclude `Site List`
@@ -409,7 +410,7 @@ class IP_Geo_Block_Admin {
409
410
if ( $admin_menu ) {
411
// `settings-updated` would be added just after settings updated.
412
- if ( ! empty( $_REQUEST['settings-updated'] ) && $this->is_network && $settings['network_wide'] &&
413
! empty( $_REQUEST['page'] ) && IP_Geo_Block::PLUGIN_NAME === $_REQUEST['page'] ) {
414
$this->update_multisite_settings( $settings );
415
wp_safe_redirect( esc_url_raw( add_query_arg(
@@ -437,7 +438,7 @@ class IP_Geo_Block_Admin {
437
'manage_network_options',
438
IP_Geo_Block::PLUGIN_NAME,
439
array( $this, 'display_plugin_admin_page' )
440
- //'dashicons-admin-site' // or 'data:image/svg+xml;base64...'
441
);
442
if ( $settings['network_wide'] ) {
443
add_submenu_page(
@@ -1454,8 +1455,12 @@ endif;
1454
$res = IP_Geo_Block_Util::get_registered_actions( TRUE );
1455
break;
1456
1457
case 'restore-cache': // Restore cache from database and format for DataTables
1458
- $res = IP_Geo_Block_Admin_Ajax::restore_cache( $which, $settings['anonymize'] );
1459
break;
1460
1461
case 'bulk-action-remove': // Delete specified IP addresses from cache
@@ -1547,6 +1552,7 @@ endif;
1547
$res = array(
1548
'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME,
1549
);
1550
}
1551
1552
if ( isset( $res ) ) // wp_send_json_{success,error}() @since 3.5.0
9
* @copyright 2013-2018 tokkonopapa
10
*/
11
define( 'IP_GEO_BLOCK_NETWORK', FALSE );
12
+
13
class IP_Geo_Block_Admin {
14
15
/**
398
$admin_menu = ( 'admin_menu' === current_filter() ); // @since: 2.5 `admin_menu` or `network_admin_menu`
399
400
// Verify tab number
401
+ if ( $this->is_network &= $settings['network_wide'] ) {
402
if ( $admin_menu ) {
403
+ $this->admin_tab = min( 4, max( 1, $this->admin_tab ) );
404
+ } elseif ( ! in_array( $this->admin_tab, array( 0, 5 ), TRUE ) ) {
405
+ $this->admin_tab = 0;
406
}
407
} else {
408
$this->admin_tab = min( 4, $this->admin_tab ); // exclude `Site List`
410
411
if ( $admin_menu ) {
412
// `settings-updated` would be added just after settings updated.
413
+ if ( ! empty( $_REQUEST['settings-updated'] ) && $this->is_network &&
414
! empty( $_REQUEST['page'] ) && IP_Geo_Block::PLUGIN_NAME === $_REQUEST['page'] ) {
415
$this->update_multisite_settings( $settings );
416
wp_safe_redirect( esc_url_raw( add_query_arg(
438
'manage_network_options',
439
IP_Geo_Block::PLUGIN_NAME,
440
array( $this, 'display_plugin_admin_page' )
441
+ //, 'dashicons-admin-site' // or 'data:image/svg+xml;base64...'
442
);
443
if ( $settings['network_wide'] ) {
444
add_submenu_page(
1455
$res = IP_Geo_Block_Util::get_registered_actions( TRUE );
1456
break;
1457
1458
+ case 'export-cache': // Restore cache from database and format for DataTables
1459
+ IP_Geo_Block_Admin_Ajax::export_cache( $settings['anonymize'] );
1460
+ break;
1461
+
1462
case 'restore-cache': // Restore cache from database and format for DataTables
1463
+ $res = IP_Geo_Block_Admin_Ajax::restore_cache( $settings['anonymize'] );
1464
break;
1465
1466
case 'bulk-action-remove': // Delete specified IP addresses from cache
1552
$res = array(
1553
'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME,
1554
);
1555
+ break;
1556
}
1557
1558
if ( isset( $res ) ) // wp_send_json_{success,error}() @since 3.5.0
admin/includes/class-admin-ajax.php CHANGED
@@ -103,22 +103,36 @@ class IP_Geo_Block_Admin_Ajax {
103
* @param string $which 'comment', 'xmlrpc', 'login', 'admin' or 'public'
104
*/
105
public static function export_logs( $which ) {
106
- $csv = '';
107
- $which = IP_Geo_Block_Logs::restore_logs( $which );
108
- $date = isset( $which[0] ) ? $which[0][1] : $_SERVER['REQUEST_TIME'];
109
- $date = IP_Geo_Block_Util::localdate( $date, 'Y-m-d_H-i-s' );
110
-
111
- foreach ( $which as $data ) {
112
$hook = array_shift( $data );
113
self::array_insert( $data, $hook, 3 );
114
$data[0] = IP_Geo_Block_Util::localdate( $data[0], 'Y-m-d H:i:s' );
115
$csv .= implode( ',', $data ) . PHP_EOL;
116
}
117
118
// Send as file
119
header( 'Content-Description: File Transfer' );
120
header( 'Content-Type: application/octet-stream' );
121
- header( 'Content-Disposition: attachment; filename="' . IP_Geo_Block::PLUGIN_NAME . '_' . $date . '.csv"' );
122
header( 'Pragma: public' );
123
header( 'Expires: 0' );
124
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
@@ -214,14 +228,59 @@ class IP_Geo_Block_Admin_Ajax {
214
return array( 'error' => $res->get_error_message() );
215
}
216
217
/**
218
* Restore cache from MySQL DB
219
*
220
- * @param string $which 'comment', 'xmlrpc', 'login', 'admin' or 'public'
221
*/
222
- public static function restore_cache( $which, $anonymize ) {
223
- $time = time();
224
$res = array();
225
226
foreach ( IP_Geo_Block_Logs::restore_cache() as $key => $val ) {
227
if ( $anonymize ) {
@@ -510,9 +569,10 @@ endif; // TEST_RESTORE_NETWORK
510
'[behavior][time]', // 3.0.10
511
'[behavior][view]', // 3.0.10
512
'[save_statistics]',
513
- '[validation][reclogs]',
514
'[validation][recdays]', // 2.2.9
515
'[validation][maxlogs]',
516
'[validation][postkey]',
517
'[update][auto]',
518
'[cache_time_gc]', // 3.0.0
103
* @param string $which 'comment', 'xmlrpc', 'login', 'admin' or 'public'
104
*/
105
public static function export_logs( $which ) {
106
+ $csv = '#';
107
+ $time = $_SERVER['REQUEST_TIME'];
108
+
109
+ $csv .= implode( ',', array(
110
+ __( 'Time', 'ip-geo-block' ),
111
+ __( 'IP address', 'ip-geo-block' ),
112
+ __( 'Code', 'ip-geo-block' ),
113
+ __( 'ASN', 'ip-geo-block' ),
114
+ __( 'Target', 'ip-geo-block' ),
115
+ __( 'Result', 'ip-geo-block' ),
116
+ __( 'Request', 'ip-geo-block' ),
117
+ __( 'User agent', 'ip-geo-block' ),
118
+ __( 'HTTP headers', 'ip-geo-block' ),
119
+ __( '$_POST data', 'ip-geo-block' ),
120
+ ) ) . PHP_EOL;
121
+
122
+ foreach ( IP_Geo_Block_Logs::restore_logs( $which ) as $data ) {
123
$hook = array_shift( $data );
124
self::array_insert( $data, $hook, 3 );
125
$data[0] = IP_Geo_Block_Util::localdate( $data[0], 'Y-m-d H:i:s' );
126
+ $data[7] = str_replace( ',', '‚', $data[7] ); // , --> ‚
127
+ $data[8] = str_replace( ',', '‚', $data[8] ); // , --> ‚
128
+ $data[9] = str_replace( ',', '‚', $data[9] ); // , --> ‚
129
$csv .= implode( ',', $data ) . PHP_EOL;
130
}
131
132
// Send as file
133
header( 'Content-Description: File Transfer' );
134
header( 'Content-Type: application/octet-stream' );
135
+ header( 'Content-Disposition: attachment; filename="' . IP_Geo_Block::PLUGIN_NAME . '_' . IP_Geo_Block_Util::localdate( $time, 'Y-m-d_H-i-s' ) . '.csv"' );
136
header( 'Pragma: public' );
137
header( 'Expires: 0' );
138
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
228
return array( 'error' => $res->get_error_message() );
229
}
230
231
+ /**
232
+ * Export IP address in cache from MySQL DB
233
+ *
234
+ */
235
+ public static function export_cache( $anonymize = TRUE ) {
236
+ $csv = '#';
237
+ $time = $_SERVER['REQUEST_TIME'];
238
+
239
+ $csv .= implode( ',', array(
240
+ __( 'IP address', 'ip-geo-block' ),
241
+ __( 'Code', 'ip-geo-block' ),
242
+ __( 'ASN', 'ip-geo-block' ),
243
+ __( 'Host name', 'ip-geo-block' ),
244
+ __( 'Target', 'ip-geo-block' ),
245
+ __( 'Failure / Total', 'ip-geo-block' ),
246
+ __( 'Elapsed[sec]', 'ip-geo-block' ),
247
+ ) ) . PHP_EOL;
248
+
249
+ foreach ( IP_Geo_Block_Logs::restore_cache() as $key => $val ) {
250
+ if ( $anonymize ) {
251
+ $key = IP_Geo_Block_Util::anonymize_ip( $key );
252
+ $val['host'] = IP_Geo_Block_Util::anonymize_ip( $val['host'] );
253
+ }
254
+
255
+ $csv .= implode( ',', array(
256
+ /* IP address */ $key,
257
+ /* Country code */ $val['code'],
258
+ /* AS number */ $val['asn' ],
259
+ /* Host name */ $val['host'],
260
+ /* Target */ $val['hook'],
261
+ /* Failure / Total */ sprintf( '%d / %d', (int)$val['fail'], (int)$val['call'] ),
262
+ /* Elapsed[sec] */ $time - (int)$val['time'],
263
+ ) ) . PHP_EOL;
264
+ }
265
+
266
+ // Send as file
267
+ header( 'Content-Description: File Transfer' );
268
+ header( 'Content-Type: application/octet-stream' );
269
+ header( 'Content-Disposition: attachment; filename="' . IP_Geo_Block::PLUGIN_NAME . '_' . IP_Geo_Block_Util::localdate( $time, 'Y-m-d_H-i-s' ) . '.csv"' );
270
+ header( 'Pragma: public' );
271
+ header( 'Expires: 0' );
272
+ header( 'Cache-Control: no-store, no-cache, must-revalidate' );
273
+ header( 'Content-Length: ' . strlen( $csv ) );
274
+ echo $csv;
275
+ }
276
+
277
/**
278
* Restore cache from MySQL DB
279
*
280
*/
281
+ public static function restore_cache( $anonymize = TRUE ) {
282
$res = array();
283
+ $time = $_SERVER['REQUEST_TIME'];
284
285
foreach ( IP_Geo_Block_Logs::restore_cache() as $key => $val ) {
286
if ( $anonymize ) {
569
'[behavior][time]', // 3.0.10
570
'[behavior][view]', // 3.0.10
571
'[save_statistics]',
572
'[validation][recdays]', // 2.2.9
573
+ '[validation][reclogs]',
574
'[validation][maxlogs]',
575
+ '[validation][explogs]', // 3.0.12
576
'[validation][postkey]',
577
'[update][auto]',
578
'[cache_time_gc]', // 3.0.0
admin/includes/tab-accesslog.php CHANGED
@@ -170,8 +170,8 @@ endif; // $options['validation']['reclogs']
170
171
public static function warn_accesslog() {
172
$context = IP_Geo_Block_Admin::get_instance();
173
- $url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 5 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-5' );
174
- echo '<p style="padding:0 1em">', sprintf( __( '[ %sRecord &#8220;Logs&#8221;%s ] is desabled.', 'ip-geo-block' ), '<a href="' . $url . '"><strong>', '</strong></a>' ), '</p>', "\n";
175
echo '<p style="padding:0 1em">', __( 'Please set the proper condition to record and analyze the validation logs.', 'ip-geo-block' ), '</p>', "\n";
176
}
177
170
171
public static function warn_accesslog() {
172
$context = IP_Geo_Block_Admin::get_instance();
173
+ $url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 3 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-3' );
174
+ echo '<p style="padding:0 1em">', sprintf( __( '[ %sRecord &#8220;Logs&#8221;%s ] is disabled.', 'ip-geo-block' ), '<a href="' . $url . '">', '</a>' ), '</p>', "\n";
175
echo '<p style="padding:0 1em">', __( 'Please set the proper condition to record and analyze the validation logs.', 'ip-geo-block' ), '</p>', "\n";
176
}
177
admin/includes/tab-geolocation.php CHANGED
@@ -83,7 +83,7 @@ class IP_Geo_Block_Admin_Tab {
83
$field = 'anonymize';
84
add_settings_field(
85
$option_name.'_'.$field,
86
- __( '<dfn title="IP address is always encrypted on recording in logs and cache. Moreover, this option makes the IP address anonymous and restricted on sending to the 3rd parties such as geolocation APIs or whois service.">Privacy friendly</dfn>', 'ip-geo-block' ),
87
array( $context, 'callback_field' ),
88
$option_slug,
89
$section,
83
$field = 'anonymize';
84
add_settings_field(
85
$option_name.'_'.$field,
86
+ __( '<dfn title="IP address is always encrypted on recording in cache and logs. Moreover, this option makes the IP address anonymous and restricted on sending to the 3rd parties such as geolocation APIs or whois service.">Anonymize IP address and restrict 3rd party APIs</dfn>', 'ip-geo-block' ),
87
array( $context, 'callback_field' ),
88
$option_slug,
89
$section,
admin/includes/tab-network.php CHANGED
@@ -111,7 +111,7 @@ class IP_Geo_Block_Admin_Tab {
111
if ( self::$controls['warn'] ) {
112
$context = IP_Geo_Block_Admin::get_instance();
113
$url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 5 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-5' );
114
- echo '<p style="padding:0 1em">', sprintf( __( '[ %sRecord &#8220;Logs&#8221;%s ] is desabled.', 'ip-geo-block' ), '<a href="' . $url . '"><strong>', '</strong></a>' ), '</p>', "\n";
115
echo '<p style="padding:0 1em">', __( 'Please set the proper condition to record and analyze the validation logs.', 'ip-geo-block' ), '</p>', "\n";
116
}
117
111
if ( self::$controls['warn'] ) {
112
$context = IP_Geo_Block_Admin::get_instance();
113
$url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 5 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-5' );
114
+ echo '<p style="padding:0 1em">', sprintf( __( '[ %sRecord &#8220;Logs&#8221;%s ] is disabled.', 'ip-geo-block' ), '<a href="' . $url . '"><strong>', '</strong></a>' ), '</p>', "\n";
115
echo '<p style="padding:0 1em">', __( 'Please set the proper condition to record and analyze the validation logs.', 'ip-geo-block' ), '</p>', "\n";
116
}
117
admin/includes/tab-settings.php CHANGED
@@ -1094,11 +1094,11 @@ endif;
1094
$option_slug
1095
);
1096
1097
- // Privacy friendly
1098
$field = 'anonymize';
1099
add_settings_field(
1100
$option_name.'_'.$field,
1101
- __( '<dfn title="IP address is always encrypted on recording in logs and cache. Moreover, this option makes the IP address anonymous and restricted on sending to the 3rd parties such as geolocation APIs or whois service.">Privacy friendly</dfn>', 'ip-geo-block' ),
1102
array( $context, 'callback_field' ),
1103
$option_slug,
1104
$section,
@@ -1110,11 +1110,11 @@ endif;
1110
)
1111
);
1112
1113
- // Record "Statistics"
1114
- $field = 'save_statistics';
1115
add_settings_field(
1116
$option_name.'_'.$field,
1117
- __( '<dfn title="This option enables to record the number blocked countries and the number of blocked requests per day.">Record &#8220;Statistics&#8221;</dfn>', 'ip-geo-block' ),
1118
array( $context, 'callback_field' ),
1119
$option_slug,
1120
$section,
@@ -1126,12 +1126,11 @@ endif;
1126
)
1127
);
1128
1129
- if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1130
- $field = 'validation';
1131
- $key = 'recdays';
1132
add_settings_field(
1133
- $option_name.'_'.$field.'_'.$key,
1134
- __( 'Maximum period for &#8220;Statistics&#8221; (days)', 'ip-geo-block' ),
1135
array( $context, 'callback_field' ),
1136
$option_slug,
1137
$section,
@@ -1139,17 +1138,15 @@ if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1139
'type' => 'text',
1140
'option' => $option_name,
1141
'field' => $field,
1142
- 'sub-field' => $key,
1143
- 'value' => $options[ $field ][ $key ],
1144
)
1145
);
1146
- endif;
1147
1148
// Record "Logs"
1149
$field = 'validation';
1150
add_settings_field(
1151
$option_name.'_'.$field.'_reclogs',
1152
- __( '<dfn title="This option enables to record the validation logs including IP address.">Record &#8220;Logs&#8221;</dfn>', 'ip-geo-block' ),
1153
array( $context, 'callback_field' ),
1154
$option_slug,
1155
$section,
@@ -1161,8 +1158,8 @@ endif;
1161
'value' => $options[ $field ]['reclogs'],
1162
'list' => array(
1163
0 => __( 'Disable', 'ip-geo-block' ),
1164
- 1 => __( 'When requests blocked', 'ip-geo-block' ),
1165
- 2 => __( 'When requests passed', 'ip-geo-block' ),
1166
6 => __( 'When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;', 'ip-geo-block' ),
1167
3 => __( 'Unauthenticated visitor', 'ip-geo-block' ),
1168
4 => __( 'Authenticated user', 'ip-geo-block' ),
@@ -1171,11 +1168,27 @@ endif;
1171
)
1172
);
1173
1174
- if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1175
- $key = 'maxlogs';
1176
add_settings_field(
1177
$option_name.'_'.$field.'_'.$key,
1178
- __( 'Maximum entries of &#8220;Logs&#8221;', 'ip-geo-block' ),
1179
array( $context, 'callback_field' ),
1180
$option_slug,
1181
$section,
@@ -1187,12 +1200,13 @@ if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1187
'value' => $options[ $field ][ $key ],
1188
)
1189
);
1190
- endif;
1191
1192
- // $_POST keys to be recorded with their values in "Logs"
1193
add_settings_field(
1194
- $option_name.'_'.$field.'_postkey',
1195
- __( '<dfn title="e.g. action, comment, log, pwd, FILES">$_POST keys to be recorded with their values in &#8220;Logs&#8221;</dfn>', 'ip-geo-block' ),
1196
array( $context, 'callback_field' ),
1197
$option_slug,
1198
$section,
@@ -1200,13 +1214,11 @@ endif;
1200
'type' => 'text',
1201
'option' => $option_name,
1202
'field' => $field,
1203
- 'sub-field' => 'postkey',
1204
- 'value' => $options[ $field ]['postkey'],
1205
- 'after' => $comma[0],
1206
)
1207
);
1208
1209
- if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1210
// Live update
1211
$field = 'live_update';
1212
add_settings_field(
@@ -1252,56 +1264,75 @@ if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1252
);
1253
endif;
1254
1255
- // Record "IP address cache"
1256
- $field = 'cache_hold';
1257
add_settings_field(
1258
$option_name.'_'.$field,
1259
- __( '<dfn title="This option enables to record the IP address , country code and login fail counter into the cache on database to minimize the impact on site speed.">Record &#8220;IP address cache&#8221;</dfn>', 'ip-geo-block' ),
1260
array( $context, 'callback_field' ),
1261
$option_slug,
1262
$section,
1263
array(
1264
- 'type' => 'checkbox',
1265
'option' => $option_name,
1266
'field' => $field,
1267
'value' => $options[ $field ],
1268
)
1269
);
1270
1271
- // Expiration time [sec] for IP address cache
1272
- $field = 'cache_time';
1273
add_settings_field(
1274
$option_name.'_'.$field,
1275
- sprintf( __( '<dfn title="If user authentication fails consecutively %d times, subsequent login will also be prohibited for this and garbage collection period.">Expiration time [sec] for &#8220;IP address cache&#8221;</dfn>', 'ip-geo-block' ), (int)$options['login_fails'] ),
1276
array( $context, 'callback_field' ),
1277
$option_slug,
1278
$section,
1279
array(
1280
- 'type' => 'text',
1281
'option' => $option_name,
1282
'field' => $field,
1283
'value' => $options[ $field ],
1284
)
1285
);
1286
1287
- // Get the next schedule of cron
1288
- $tmp = wp_next_scheduled( IP_Geo_Block::CACHE_NAME );
1289
- $tmp = $tmp ? IP_Geo_Block_Util::localdate( $tmp ) : '<span class="ip-geo-block-warn">' . __( 'Task could not be found in WP-Cron. Please try to deactivate this plugin once and activate again.', 'ip-geo-block' ). '</span>';
1290
1291
- // Garbage collection period [sec] for IP address cache
1292
- $field = 'cache_time_gc';
1293
add_settings_field(
1294
$option_name.'_'.$field,
1295
- __( '<dfn title="This option enables to schedule the WP-Cron event to remove the expired entries of cache.">Garbage collection period [sec] for &#8220;IP address cache&#8221;</dfn>', 'ip-geo-block' ),
1296
array( $context, 'callback_field' ),
1297
$option_slug,
1298
$section,
1299
array(
1300
- 'type' => 'text',
1301
'option' => $option_name,
1302
'field' => $field,
1303
'value' => $options[ $field ],
1304
- 'after' => '<p class="ip-geo-block-desc">' . sprintf( __( 'Next schedule: %s', 'ip-geo-block'), $tmp ) . '</p>',
1305
)
1306
);
1307
@@ -1515,22 +1546,6 @@ if ( IP_GEO_BLOCK_NETWORK ):
1515
);
1516
}
1517
endif;
1518
- // Remove all settings at uninstallation
1519
- $field = 'clean_uninstall';
1520
- add_settings_field(
1521
- $option_name.'_'.$field,
1522
- __( 'Remove all settings at uninstallation', 'ip-geo-block' ),
1523
- array( $context, 'callback_field' ),
1524
- $option_slug,
1525
- $section,
1526
- array(
1527
- 'type' => 'checkbox',
1528
- 'option' => $option_name,
1529
- 'field' => $field,
1530
- 'value' => $options[ $field ],
1531
- )
1532
- );
1533
-
1534
// Google Maps API key
1535
$field = 'api_key';
1536
$key = 'GoogleMap';
@@ -1622,11 +1637,11 @@ if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1622
);
1623
endif;
1624
1625
- // Show WordPress system info
1626
$field = 'show-info';
1627
add_settings_field(
1628
$option_name.'_'.$field,
1629
- __( '<dfn title="When an unexpected blocking has occurred, please press the button to find the blocked request in the dumped information which may help to solve the issue.">Debug information</dfn><br />[ <a rel="noreferrer" href="https://wordpress.org/support/plugin/ip-geo-block" title="WordPress &#8250; Support &raquo; IP Geo Block">support forum</a> ]', 'ip-geo-block' ),
1630
array( $context, 'callback_field' ),
1631
$option_slug,
1632
$section,
1094
$option_slug
1095
);
1096
1097
+ // Anonymize IP address and restrict 3rd party APIs
1098
$field = 'anonymize';
1099
add_settings_field(
1100
$option_name.'_'.$field,
1101
+ __( '<dfn title="IP address is always encrypted on recording in cache and logs. Moreover, this option makes the IP address anonymous and restricted on sending to the 3rd parties such as geolocation APIs or whois service.">Anonymize IP address and restrict 3rd party APIs</dfn>', 'ip-geo-block' ),
1102
array( $context, 'callback_field' ),
1103
$option_slug,
1104
$section,
1110
)
1111
);
1112
1113
+ // Record IP address cache
1114
+ $field = 'cache_hold';
1115
add_settings_field(
1116
$option_name.'_'.$field,
1117
+ __( '<dfn title="This option enables to record the IP address, country code and failure counter of login attempts into the cache on database to minimize the impact on site speed.">Record &#8220;IP address cache&#8221;</dfn>', 'ip-geo-block' ),
1118
array( $context, 'callback_field' ),
1119
$option_slug,
1120
$section,
1126
)
1127
);
1128
1129
+ // Expiration time [sec] for IP address cache
1130
+ $field = 'cache_time';
1131
add_settings_field(
1132
+ $option_name.'_'.$field,
1133
+ sprintf( __( '<dfn title="If user authentication fails consecutively %d times, subsequent login will also be prohibited for this and garbage collection period.">Expiration time [sec] for &#8220;IP address cache&#8221;</dfn>', 'ip-geo-block' ), (int)$options['login_fails'] ),
1134
array( $context, 'callback_field' ),
1135
$option_slug,
1136
$section,
1138
'type' => 'text',
1139
'option' => $option_name,
1140
'field' => $field,
1141
+ 'value' => $options[ $field ],
1142
)
1143
);
1144
1145
// Record "Logs"
1146
$field = 'validation';
1147
add_settings_field(
1148
$option_name.'_'.$field.'_reclogs',
1149
+ __( '<dfn title="This option enables to record the validation logs including IP addresses.">Record &#8220;Logs&#8221;</dfn>', 'ip-geo-block' ),
1150
array( $context, 'callback_field' ),
1151
$option_slug,
1152
$section,
1158
'value' => $options[ $field ]['reclogs'],
1159
'list' => array(
1160
0 => __( 'Disable', 'ip-geo-block' ),
1161
+ 1 => __( 'When blocked', 'ip-geo-block' ),
1162
+ 2 => __( 'When passed', 'ip-geo-block' ),
1163
6 => __( 'When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;', 'ip-geo-block' ),
1164
3 => __( 'Unauthenticated visitor', 'ip-geo-block' ),
1165
4 => __( 'Authenticated user', 'ip-geo-block' ),
1168
)
1169
);
1170
1171
+ // $_POST keys to be recorded with their values in "Logs"
1172
+ add_settings_field(
1173
+ $option_name.'_'.$field.'_postkey',
1174
+ __( '<dfn title="e.g. action, comment, log, pwd, FILES">$_POST keys to be recorded with their values in &#8220;Logs&#8221;</dfn>', 'ip-geo-block' ),
1175
+ array( $context, 'callback_field' ),
1176
+ $option_slug,
1177
+ $section,
1178
+ array(
1179
+ 'type' => 'text',
1180
+ 'option' => $option_name,
1181
+ 'field' => $field,
1182
+ 'sub-field' => 'postkey',
1183
+ 'value' => $options[ $field ]['postkey'],
1184
+ 'after' => $comma[0],
1185
+ )
1186
+ );
1187
+
1188
+ $key = 'explogs';
1189
add_settings_field(
1190
$option_name.'_'.$field.'_'.$key,
1191
+ sprintf( __( '<dfn title="The maximum number of entries in the logs is also limited to %d.">Expiration time [sec] for &#8220;Logs&#8221;</dfn>', 'ip-geo-block' ), $options[ $field ]['maxlogs'] ),
1192
array( $context, 'callback_field' ),
1193
$option_slug,
1194
$section,
1200
'value' => $options[ $field ][ $key ],
1201
)
1202
);
1203
1204
+ if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1205
+ // Maximum entries of Logs
1206
+ $key = 'maxlogs';
1207
add_settings_field(
1208
+ $option_name.'_'.$field.'_'.$key,
1209
+ __( 'Maximum entries of &#8220;Logs&#8221;', 'ip-geo-block' ),
1210
array( $context, 'callback_field' ),
1211
$option_slug,
1212
$section,
1214
'type' => 'text',
1215
'option' => $option_name,
1216
'field' => $field,
1217
+ 'sub-field' => $key,
1218
+ 'value' => $options[ $field ][ $key ],
1219
)
1220
);
1221
1222
// Live update
1223
$field = 'live_update';
1224
add_settings_field(
1264
);
1265
endif;
1266
1267
+ // Get the next schedule of cron
1268
+ $tmp = wp_next_scheduled( IP_Geo_Block::CACHE_NAME );
1269
+ $tmp = $tmp ? IP_Geo_Block_Util::localdate( $tmp ) : '<span class="ip-geo-block-warn">' . __( 'Task could not be found in WP-Cron. Please try to deactivate this plugin once and activate again.', 'ip-geo-block' ). '</span>';
1270
+
1271
+ // Cleanup interval [sec] for Logs and IP address cache
1272
+ $field = 'cache_time_gc';
1273
add_settings_field(
1274
$option_name.'_'.$field,
1275
+ __( '<dfn title="This option enables to schedule the WP-Cron event to remove the expired entries in ip address cache and logs.">Cleanup interval [sec] for &#8220;IP address cache&#8221; and &#8220;Logs&#8221;</dfn>', 'ip-geo-block' ),
1276
array( $context, 'callback_field' ),
1277
$option_slug,
1278
$section,
1279
array(
1280
+ 'type' => 'text',
1281
'option' => $option_name,
1282
'field' => $field,
1283
'value' => $options[ $field ],
1284
+ 'after' => '<p class="ip-geo-block-desc">' . sprintf( __( 'Next schedule: %s', 'ip-geo-block'), $tmp ) . '</p>',
1285
)
1286
);
1287
1288
+ // Record "Statistics"
1289
+ $field = 'save_statistics';
1290
add_settings_field(
1291
$option_name.'_'.$field,
1292
+ __( '<dfn title="This option enables to record the number blocked countries and the number of blocked requests per day.">Record &#8220;Statistics&#8221;</dfn>', 'ip-geo-block' ),
1293
array( $context, 'callback_field' ),
1294
$option_slug,
1295
$section,
1296
array(
1297
+ 'type' => 'checkbox',
1298
'option' => $option_name,
1299
'field' => $field,
1300
'value' => $options[ $field ],
1301
)
1302
);
1303
1304
+ if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
1305
+ $field = 'validation';
1306
+ $key = 'recdays';
1307
+ add_settings_field(
1308
+ $option_name.'_'.$field.'_'.$key,
1309
+ __( 'Maximum period for &#8220;Statistics&#8221; [day]', 'ip-geo-block' ),
1310
+ array( $context, 'callback_field' ),
1311
+ $option_slug,
1312
+ $section,
1313
+ array(
1314
+ 'type' => 'text',
1315
+ 'option' => $option_name,
1316
+ 'field' => $field,
1317
+ 'sub-field' => $key,
1318
+ 'value' => $options[ $field ][ $key ],
1319
+ )
1320
+ );
1321
+ endif;
1322
1323
+ // Remove all settings and records at uninstallation
1324
+ $field = 'clean_uninstall';
1325
add_settings_field(
1326
$option_name.'_'.$field,
1327
+ __( 'Remove all settings and records at uninstallation', 'ip-geo-block' ),
1328
array( $context, 'callback_field' ),
1329
$option_slug,
1330
$section,
1331
array(
1332
+ 'type' => 'checkbox',
1333
'option' => $option_name,
1334
'field' => $field,
1335
'value' => $options[ $field ],
1336
)
1337
);
1338
1546
);
1547
}
1548
endif;
1549
// Google Maps API key
1550
$field = 'api_key';
1551
$key = 'GoogleMap';
1637
);
1638
endif;
1639
1640
+ // Diagnostic information
1641
$field = 'show-info';
1642
add_settings_field(
1643
$option_name.'_'.$field,
1644
+ __( '<dfn title="When an unexpected blocking has occurred, please press the button to find the blocked request in the dumped information which may help to solve the issue.">Diagnostic information</dfn><br />[ <a rel="noreferrer" href="https://wordpress.org/support/plugin/ip-geo-block" title="WordPress &#8250; Support &raquo; IP Geo Block">support forum</a> ]', 'ip-geo-block' ),
1645
array( $context, 'callback_field' ),
1646
$option_slug,
1647
$section,
admin/includes/tab-statistics.php CHANGED
@@ -210,15 +210,20 @@ if ( $options['validation']['reclogs'] ) :
210
endif;
211
212
/*----------------------------------------*
213
- * Statistics in cache
214
*----------------------------------------*/
215
add_settings_section(
216
$section = $plugin_slug . '-cache',
217
- __( 'Statistics in cache', 'ip-geo-block' ),
218
- array( __CLASS__, 'statistics_cache' ),
219
$option_slug
220
);
221
222
$field = 'search_filter';
223
add_settings_field(
224
$option_name.'_'.$field,
@@ -275,6 +280,24 @@ endif;
275
'after' => '<div id="'.$plugin_slug.'-cache"></div>',
276
)
277
);
278
}
279
280
/**
@@ -390,16 +413,23 @@ endif;
390
*/
391
public static function warn_statistics() {
392
$context = IP_Geo_Block_Admin::get_instance();
393
- $url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 5 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-5' );
394
- echo '<p>', sprintf( __( '[ %sRecord &#8220;Statistics&#8221;%s ] is desabled.', 'ip-geo-block' ), '<a href="' . $url . '"><strong>', '</strong></a>' ), '</p>', "\n";
395
echo '<p>', __( 'Please set the proper condition to record and analyze the validation statistics.', 'ip-geo-block' ), '</p>', "\n";
396
}
397
398
public static function warn_validation() {
399
$context = IP_Geo_Block_Admin::get_instance();
400
- $url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 5 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-5' );
401
- echo '<p>', sprintf( __( '[ %sRecord &#8220;Logs&#8221;%s ] is desabled.', 'ip-geo-block' ), '<a href="' . $url . '"><strong>', '</strong></a>' ), '</p>', "\n";
402
echo '<p>', __( 'Please set the proper condition to record and analyze the validation logs.', 'ip-geo-block' ), '</p>', "\n";
403
}
404
405
}
210
endif;
211
212
/*----------------------------------------*
213
+ * IP address in cache
214
*----------------------------------------*/
215
add_settings_section(
216
$section = $plugin_slug . '-cache',
217
+ __( 'Statistics in IP address cache', 'ip-geo-block' ),
218
+ ( $options['cache_hold'] ?
219
+ array( __CLASS__, 'statistics_cache' ) :
220
+ array( __CLASS__, 'warn_ipadr_cache' )
221
+ ),
222
$option_slug
223
);
224
225
+ if ( $options['cache_hold'] ) :
226
+
227
$field = 'search_filter';
228
add_settings_field(
229
$option_name.'_'.$field,
280
'after' => '<div id="'.$plugin_slug.'-cache"></div>',
281
)
282
);
283
+
284
+ // Export cache
285
+ $field = 'export_cache';
286
+ add_settings_field(
287
+ $option_name.'_'.$field,
288
+ __( 'Export cache', 'ip-geo-block' ),
289
+ array( $context, 'callback_field' ),
290
+ $option_slug,
291
+ $section,
292
+ array(
293
+ 'type' => 'none',
294
+ 'before' => '<a class="button button-secondary" id="ip-geo-block-export-cache" title="' . __( 'Export to the local file', 'ip-geo-block' ) . '" href="#!">'. __( 'Export csv', 'ip-geo-block' ) . '</a>',
295
+ 'after' => '<div id="'.$plugin_slug.'-export"></div>',
296
+ )
297
+ );
298
+
299
+ endif;
300
+
301
}
302
303
/**
413
*/
414
public static function warn_statistics() {
415
$context = IP_Geo_Block_Admin::get_instance();
416
+ $url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 3 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-3' );
417
+ echo '<p>', sprintf( __( '[ %sRecord &#8220;Statistics&#8221;%s ] is disabled.', 'ip-geo-block' ), '<a href="' . $url . '">', '</a>' ), '</p>', "\n";
418
echo '<p>', __( 'Please set the proper condition to record and analyze the validation statistics.', 'ip-geo-block' ), '</p>', "\n";
419
}
420
421
public static function warn_validation() {
422
$context = IP_Geo_Block_Admin::get_instance();
423
+ $url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 3 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-3' );
424
+ echo '<p>', sprintf( __( '[ %sRecord &#8220;Logs&#8221;%s ] is disabled.', 'ip-geo-block' ), '<a href="' . $url . '">', '</a>' ), '</p>', "\n";
425
echo '<p>', __( 'Please set the proper condition to record and analyze the validation logs.', 'ip-geo-block' ), '</p>', "\n";
426
}
427
428
+ public static function warn_ipadr_cache() {
429
+ $context = IP_Geo_Block_Admin::get_instance();
430
+ $url = esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => '0', 'sec' => 3 ), $context->dashboard_url() ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-3' );
431
+ echo '<p style="padding:0 1em">', sprintf( __( '[ %sRecord &#8220;IP address cache&#8221;%s ] is disabled.', 'ip-geo-block' ), '<a href="' . $url . '">', '</a>' ), '</p>', "\n";
432
+ echo '<p style="padding:0 1em">', __( 'Please set the proper condition to record IP address in cache.', 'ip-geo-block' ), '</p>', "\n";
433
+ }
434
+
435
}
admin/js/admin.js CHANGED
@@ -1353,8 +1353,8 @@
1353
1354
$(ID('@', 'cache_hold')).on('change', function (/*event*/) {
1355
var checked = $(this).prop('checked');
1356
- $('input[id*="cache_time"]' ).prop('disabled', !checked);
1357
- $('select[id*="login_fails"]').prop('disabled', !checked);
1358
}).trigger('change');
1359
1360
/*---------------------------
@@ -1595,7 +1595,7 @@
1595
return false;
1596
});
1597
1598
- // Statistics in cache
1599
initTable(tabNo, {
1600
tableID: 'statistics-cache',
1601
ajaxCMD: 'restore-cache',
@@ -1626,6 +1626,15 @@
1626
{ className: "all", targets: [0, 1, 2, 5] } // always visible
1627
]
1628
});
1629
break;
1630
1631
/*----------------------------------------
@@ -1804,7 +1813,7 @@
1804
return false;
1805
}).trigger('change');
1806
1807
- // Export / Import settings
1808
add_hidden_form('export-logs');
1809
1810
// Export logs
1353
1354
$(ID('@', 'cache_hold')).on('change', function (/*event*/) {
1355
var checked = $(this).prop('checked');
1356
+ $('input[name*="[cache_time]"]').prop('disabled', !checked);
1357
+ $('select[id*="login_fails"]' ).prop('disabled', !checked);
1358
}).trigger('change');
1359
1360
/*---------------------------
1595
return false;
1596
});
1597
1598
+ // IP address in cache
1599
initTable(tabNo, {
1600
tableID: 'statistics-cache',
1601
ajaxCMD: 'restore-cache',
1626
{ className: "all", targets: [0, 1, 2, 5] } // always visible
1627
]
1628
});
1629
+
1630
+ // Export cache
1631
+ add_hidden_form('export-cache');
1632
+
1633
+ // Export cache
1634
+ $(ID('#', 'export-cache')).on('click', function (/*event*/) {
1635
+ $(ID('#', 'export-form')).submit();
1636
+ return false;
1637
+ });
1638
break;
1639
1640
/*----------------------------------------
1813
return false;
1814
}).trigger('change');
1815
1816
+ // Export logs
1817
add_hidden_form('export-logs');
1818
1819
// Export logs
admin/js/admin.min.js CHANGED
@@ -3,4 +3,4 @@
3
Copyright (c) 2013-2018 tokkonopapa (tokkonopapa@yahoo.com)
4
This software is released under the MIT License.
5
*/
6
- (function(a,f,t){function b(a,b){var c={".":".ip-geo-block-","#":"#ip-geo-block-","@":"#ip_geo_block_settings_",$:"ip-geo-block-","%":"ip_geo_block_","!":"ip_geo_block_settings_"};return"undefined"!==typeof b?c[a]+b:c.$+a}function da(a){return a.toString().replace(/[&<>"']/g,function(a){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[a]}).replace(/&amp;(#\d{2,4}|\w{4,7});/g,"&$1;")}function k(a){return a?da(a.toString().replace(/(<([^>]+)>)/ig,"")):""}function E(b,e){var c=a(f).width();c!==J&&(J=c,"undefined"===typeof p[b]&&(p[b]={id:!1,callback:e}),a(f).off("resize").on("resize",function(){!1!==p[b].id&&f.clearTimeout(p[b].id);p[b].time=f.setTimeout(p[b].callback,200);return!1}))}function C(c,e){e?a(b("#",c)).addClass(b("loading")):a(b("#",c)).removeClass(b("loading"))}function z(a,b){f.confirm(k(a))&&b()}function D(a,b,g){f.alert(k(b||d.msg[12].replace("%s",g)+" ("+a+")"))}function K(a,b){-1!==f.location.href.indexOf(a)&&(f.location=k(a)+(b?"&"+k(b):"")+"&ip-geo-block-auth-nonce="+F.nonce)}function q(b,e,g,l){b&&C(b,!0);e.action=d.action;e.nonce=d.nonce;a.post(d.url,e).done(function(a){g&&g(a)}).fail(function(a){R||D(a.status,a.responseText,e.action)}).always(function(){b&&("object"===typeof l?a.when.apply(a,l).then(function(){C(b,!1)}):C(b,!1))})}function M(a,b){q(a,{cmd:"clear-"+a,which:b},function(a){K(a.page,a.tab)})}function S(a){q(a,{cmd:a},function(a){K(a.page,a.tab)})}function x(a){a.stopImmediatePropagation();return!1}function G(a,e){e?a.removeClass("folding-disable"):(a.children(b(".","hide")).hide(),a.addClass("folding-disable"),a.removeClass(b("dropdown")).addClass(b("dropup")))}function N(c,e,g){var l=0===c.prop("type").indexOf("checkbox")&&c.is(":checked")||0===c.prop("type").indexOf("select")&&"0"!==c.val();c.siblings('input[name^="'+b("%","settings")+'"]:checkbox').prop("disabled",!l);a.isArray(e)?a.each(e,function(c,e){a(e).nextAll(b(".","settings-folding")).each(function(b,e){G(a(e),l&&g[c])})}):e.nextAll(b(".","settings-folding")).each(function(b,c){G(a(c),l&&g)})}function T(c){var e=b("@","validation_ajax_");G(c.closest("ul").next(),a(e+"1").is(":checked")||a(e+"2").is(":checked"))}function H(a){return String(a).replace(/[a-z]/gi,function(a){return String.fromCharCode(a.charCodeAt(0)+("n">a.toLowerCase()?13:-13))})}function ea(a,b){var c=new f.FileReader;c.onload=function(a){b&&b(a.target.result)};c.onerror=function(a){D("Error",a.target.error.code)};c.readAsText(a)}function U(c){var e=c.is(":checked"),g=a(b("@","public_target_rule")),l=a(b("@","public_behavior")),d=c.closest("tr").nextAll("tr");d.find('[name^="'+b("%","settings")+'"]').prop("disabled",!e);d.find(b(".","desc")).css("opacity",e?1:.5);N(c,[g,l],["1"===g.val()?!0:!1,l.val()]);e&&l.change()}function O(c,e){c&&("string"===typeof c&&(c=JSON.parse(c)),e&&(a('input[type="checkbox"]').prop("checked",!1).change(),a("input[name*=providers]").prop("disabled",!1).change()),a(b("#","import")).closest("form").deserialize(c),a(b("@","exception_admin")+","+b("@","validation_mimetype")).change(),a('select[name*="'+b("%","settings")+'"]').change(),a(b("@","validation_login")).change(),U(a(b("@","validation_public"))),T(a(b("@","validation_ajax_1"))),e&&(e=b("%","settings[providers][IPInfoDB]"),a(b("@","providers_IPInfoDB")).prop("checked",c[e]?!0:!1)))}function fa(a,b){var c=Math.ceil(a.length/b),e=[],d;for(d=0;d<c;++d){var m=d*b;e.push(a.slice(m,m+b))}return e}function v(c){"object"===typeof f.google&&(1===c?a(b("#","chart-countries")).length&&(h.drawPie(b("chart-countries")),h.drawLine(b("chart-daily"),"date")):5===c&&a(b(".","network")).each(function(b,c){h.drawStacked(a(c).attr("id"))}))}function V(a){if("object"===typeof f.google){var b=["corechart"];5===a&&b.push("bar");f.google.load("visualization","1",{packages:b,callback:function(){v(a)}});E("draw-chart."+a,function(){v(a)})}}function ha(a){var b,c="undefined"!==typeof wpCookies&&wpCookies.getHash("ip-geo-block")||[];for(b in c)c.hasOwnProperty(b)&&(c[b]=c[b].replace(/[^ox\d]/g,"").split(""));"undefined"===typeof c[a]&&(c[a]=[]);return c}function A(b){var c,g,d=[];a.each(b,function(a,b){d[a]="";if("undefined"!==typeof b&&(g=b.length))for(d[a]=b[0]||"o",c=1;c<g;++c)d[a]+=b[c]||"o"});"undefined"!==typeof wpCookies&&wpCookies.setHash("ip-geo-block",d,new Date(Date.now()+2592E6),F.home+F.admin)}function ia(c){var e=ha(c);a("form").on("click","h2,h3 a",function(){f.open(this.href,null);return!1}).on("click","h2,h3",function(){var d=a(this),l=d.closest("fieldset").data("section"),f=d.parent().nextAll(".panel-body").toggle();d.toggleClass(b("dropup")).toggleClass(b("dropdown"));(d=d.hasClass(b("dropdown")))?f.addClass(b("border")).trigger(b("show-body")):f.removeClass(b("border"));e[c][l]=d?"o":"x";A(e);v(c);return!1});a(b("#","toggle-sections")).on("click",function(){var d,l=a(b(".","field")).find("h2,h3"),f=[b("dropdown"),b("dropup")],m=l.filter("."+f[0]).length;l.each(function(g){d=a(this);d.removeClass(f.join(" ")).addClass(m?f[1]:f[0]);d=d.parent().nextAll(".panel-body").toggle(m?!1:!0);m?d.removeClass(b("border")):d.addClass(b("border")).trigger("show-body");e[c][g]=m?"x":"o"});A(e);v(c);return!1});return e}function W(c){a("body").append('<div style="display:none"><form method="POST" id="'+b("export-form")+'" action="'+d.url.replace("ajax.php","post.php")+'"><input type="hidden" name="action" value="'+d.action+'" /><input type="hidden" name="nonce" value="'+d.nonce+'" /><input type="hidden" name="cmd" value="'+c+'" /><input type="hidden" name="data" value="" id="'+b("export-data")+'"/><input type="submit" value="submit" /></form><input type="file" name="settings" id="'+b("file-dialog")+'" /></div>')}function X(a,b,d,f){a=a.cloneNode(!1);a.setAttribute("title",k(d));b=b.cloneNode(!1);b.setAttribute("class","dashicons dashicons-"+f);a.appendChild(b);return a}function Y(c,e,g){a.extend(!0,a.fn.dataTable.defaults,g,{dom:"tp",serverSide:!1,autoWidth:!1,processing:!0,deferRender:!0,deferLoading:10,info:!1,lengthChange:!1,language:{emptyTable:d.i18n[1],loadingRecords:d.i18n[0],processing:d.i18n[0],zeroRecords:d.i18n[2],paginate:{first:"&laquo;",last:"&raquo;",next:"&rsaquo;",previous:"&lsaquo;"}},responsive:{details:{type:"column",target:"td:nth-child(n+2)"}},columnDefs:[{width:"1.25em",targets:0},{orderable:!1,targets:0},{searchable:!1,targets:0},{targets:[0],data:null,defaultContent:'<input type="checkbox">'}],pagingType:"full_numbers",pageLength:10,scroller:!0,scrollY:1E4,scrollCollapse:!0,drawCallback:function(c){var f=a(b("#",e.tableID)).find("td.dataTables_empty"),g="restore-logs"===e.ajaxCMD?3:2;g>c.iDraw?f.html(d.i18n[0]):g===c.iDraw&&(f.html(d.i18n[1]),f=a(b("@","search_filter")),f.val()&&f.trigger("keyup"))}});var l=a(b("#",e.tableID)).DataTable({ajax:{url:d.url,type:"POST",data:{cmd:e.ajaxCMD,action:d.action,nonce:d.nonce}},mark:!0}),h=function(){l.columns.adjust().responsive.recalc().draw(!1)};E("draw-table."+c,h);a(b("#",e.sectionID)).find(".panel-body").off(b("show-body")).on(b("show-body"),function(){h();return!1}).off("change").on("change",'th>input[type="checkbox"]',function(){var c=a(this).prop("checked");a(b("#",e.tableID)).find('td>input[type="checkbox"]').prop("checked",c);return!1});a(b("#","select-target")).off("change").on("change",function(){var c=a(this).find('input[name="'+b("target")+'"]:checked').val();l.columns(e.targetColumn).search("all"!==c?c:"").draw();return!1}).trigger("change");a(b("#","bulk-action")).off("click").on("click",function(){var f=a(this).prev().val(),g=/(<([^>]+)>)/ig,h=/data-hash=[\W]([\w]+)[\W]/i,k={IP:[],AS:[]},r,w,I=a("table.dataTable").find("td>input:checked");if(!f)return!1;if(!I.length)return D(null,d.msg[11]),!1;I.each(function(){w=l.cell(this.parentNode).data();r="bulk-action-remove"===f||"bulk-action-ip-erase"===f?(r=w[e.columnIP].match(h))?","+r[1]:"":"";k.IP.push(w[e.columnIP].replace(g,"")+r);k.AS.push(w[e.columnAS].replace(g,""))});k.IP.length&&q("loading",{cmd:f,which:k},function(d){"undefined"!==typeof d.page?K(d.page,"tab="+c):d&&(l.ajax.reload(),a(b("#",e.tableID)).find('th input[type="checkbox"]').prop("checked",!1))});return!1});a(b("@","search_filter")).off("keyup").on("keyup",function(){l.search(this.value,!1,!0,!/[A-Z]/.test(this.value)).draw();return!1});a(b("#","reset-filter")).off("click").on("click",function(){a(b("@","search_filter")).val("");l.search("").draw();return!1});a(b("@","clear_all")).off("click").on("click",function(){z(d.msg[1===c?4:5],function(){M(1===c?"cache":"logs",null)});return!1});a("table.dataTable tbody").on("click","a",function(){var b=f.location.search.slice(1).split("&"),e=b.length,d={},g;for(g=0;g<e;++g){var l=b[g].split("=");d[l[0]]=l[1]}d.tab=1===c?4:2;d.s=a(this).text().replace(/[^\w\.:\*]/,"");l=[];for(g in d)d.hasOwnProperty(g)&&l.push(g+"="+d[g]);f.open(f.location.pathname+"?"+l.join("&"),"_blank");return!1});return l}var R=!1,p=[],J=a(f).width(),d=IP_GEO_BLOCK,F=IP_GEO_BLOCK_AUTH;a.fn.deserialize=function(b){return this.each(function(){var c,d=this,f={};for(c in b)if(b.hasOwnProperty(c))try{var h=decodeURIComponent(c);var k=decodeURIComponent(b[c]);f.hasOwnProperty(h)||(f[h]=[]);f[h].push(k)}catch(ja){}a.each(f,function(b,e){c=a('[name="'+b+'"]:input',d).val(e);"hidden"!==c.attr("type")&&c.before('<span style="color:red">*</span>')})})};var h={dataPie:[],viewPie:[],drawPie:function(b){if("undefined"===typeof h.dataPie[b]){var c=h.dataPie[b]=new f.google.visualization.DataTable;c.addColumn("string","Country");c.addColumn("number","Requests");c=a.parseJSON(a("#"+b).attr("data-"+b));h.dataPie[b].addRows(c)}"undefined"===typeof h.viewPie[b]&&(h.viewPie[b]=new f.google.visualization.PieChart(t.getElementById(b)));"undefined"!==typeof h.dataPie[b]&&"undefined"!==typeof h.viewPie[b]&&0<a("#"+b).width()&&h.viewPie[b].draw(h.dataPie[b],{backgroundColor:{fill:"transparent"},chartArea:{left:0,top:"5%",width:"100%",height:"90%"},sliceVisibilityThreshold:.015})},dataLine:[],viewLine:[],drawLine:function(b,d){if("undefined"===typeof h.dataLine[b]){var c=h.dataLine[b]=new f.google.visualization.DataTable;c.addColumn(d,"Date");c.addColumn("number","comment");c.addColumn("number","xmlrpc");c.addColumn("number","login");c.addColumn("number","admin");c.addColumn("number","public");var e=a.parseJSON(a("#"+b).attr("data-"+b));var k=e.length;for(c=0;c<k;++c)e[c][0]=new Date(1E3*e[c][0]);h.dataLine[b].addRows(e)}"undefined"===typeof h.viewLine[b]&&(h.viewLine[b]=new f.google.visualization.LineChart(t.getElementById(b)));"undefined"!==typeof h.dataLine[b]&&"undefined"!==typeof h.viewLine[b]&&0<(c=a("#"+b).width())&&h.viewLine[b].draw(h.dataLine[b],{legend:{position:"bottom"},backgroundColor:{fill:"transparent"},hAxis:{format:"MM/dd"+("datetime"===d?" HH:mm":"")},vAxis:{textPosition:320<c?"out":"in"},chartArea:{left:320<c?"10%":0,top:"5%",width:"100%",height:"75%"}})},dataStacked:[],viewStacked:[],drawStacked:function(c){var d,g,l=a("#"+c);"undefined"===typeof h.dataStacked[c]&&(g=a.parseJSON(l.attr("data-"+c)))&&(g.unshift(["site","comment","xmlrpc","login","admin","poblic",{role:"link"}]),h.dataStacked[c]=f.google.visualization.arrayToDataTable(g));"undefined"===typeof h.viewStacked[c]&&(h.viewStacked[c]=new f.google.visualization.BarChart(t.getElementById(c)),f.google.visualization.events.addListener(h.viewStacked[c],"animationfinish",function(){var d,e,f,g=[],k=h.dataStacked[c],m=k.getNumberOfRows(),q=a(b("#","open-new")).prop("checked");for(d=0;d<m;d++)g.push({label:k.getValue(d,0),link:k.getValue(d,6)});m="http://www.w3.org/1999/xlink";l.find("text").each(function(a,b){f=b.parentNode;var c;if(c="g"===f.tagName.toLowerCase()){a:{c=b.textContent;var d,k=g.length;c=c.replace("\u2026","");for(d=0;d<k;++d)if(g.hasOwnProperty(d)&&0===g[d].label.indexOf(c)){c=d;break a}c=-1}c=-1!==(a=c)}c&&(e=t.createElementNS("http://www.w3.org/2000/svg","a"),e.setAttributeNS(m,"xlink:href",g[a].link),e.setAttributeNS(m,"title",g[a].label),e.setAttribute("target",q?"_blank":"_self"),e.setAttribute("class","site"),e.appendChild(f.removeChild(b)),f.appendChild(e),g.splice(a,1))})}));if(0<(d=l.width())&&"undefined"!==typeof h.dataStacked[c]&&"undefined"!==typeof h.viewStacked[c]){var k=b("range");var m=a.parseJSON(a("."+k).attr("data-"+k));g=h.dataStacked[c];k=40*g.getNumberOfRows();h.viewStacked[c].draw(g,{width:d,height:k+80,allowHtml:!0,isStacked:!0,legend:{position:"top"},chartArea:{top:50,left:90,width:"100%",height:k},hAxis:{minValue:0,maxValue:m[1]},backgroundColor:{fill:"transparent"},animation:{startup:!0,duration:200,easing:"out"}})}},ajaxStacked:function(c,d,f,k){c=Math.max(0,Math.min(4,c));d=5*Math.max(1,Math.min(5,d));q(null,{cmd:"restore-network",which:c,offset:d*f*k,length:d},function(c){var e,f,g,k,l;c=fa(c,d);a(b(".","network")).each(function(b,m){if("undefined"!==typeof c[b]){k=a(m).attr("id");l=h.dataStacked[k];g=Math.min(d,c[b].length);for(e=0;e<g;++e)for(f=1;5>=f;f++)l.setValue(e,f,c[b][e][f]);h.drawStacked(k)}})})}};a(function(){var c=Number(d.tab)||0,e=ia(c);a(b(".","inhibit")).on("submit",function(){return!1});a(f).on("beforeunload",function(){R=!0});switch(c){case 0:var g=b("%","settings");a('[id^="'+b("scan-")+'"]').on("click",function(){var c=a(this),d=c.attr("id"),e=c.parent();q(d.replace(/^.*(?:scan)/,"scanning"),{cmd:"scan-code",which:d.replace(b("scan-"),"")},function(a){e.children("ul").length||e.append('<ul id="'+b("code-list")+'"></ul>');e=e.children("ul").empty();for(c in a)if(a.hasOwnProperty(c)){var c=k(c);if("string"===typeof a[c])var d=k(a[c]);else d=k(a[c].code),c='<abbr title="'+k(a[c].type)+'">'+c+"</abbr>";e.append("<li>"+c+' : <span class="'+b("notice")+'">'+d+"</span></li>")}e.show("slow")});return!1});a(b("@","matching_rule")).on("change",function(){var c=this.value;a(b("@","white_list")).closest("tr").toggle("0"===c);a(b("@","black_list")).closest("tr").toggle("1"===c);return!1}).change();a(b(".","icon-cidr")).on("click",function(){var c=a(b("#","admin-styles-css")).get(0).href,d=f.open("about:blank","","width=560,height=170");c=c.slice(0,c.lastIndexOf("css/"));d.document.write('<!DOCTYPE html><html lang=en><meta charset=utf-8><title>CIDR calculator for IPv4 / IPv6</title><link href="'+c+'css/cidr.min.css?v=.1" rel=stylesheet><div class="row container"><div class=row id=i><fieldset class="col span_11"><legend>Range <input id=a type=button value=Clear tabindex=1></legend><textarea id=c name=range placeholder="192.168.0.0 - 192.168.255.255" rows=5 wrap=off tabindex=2></textarea></fieldset><ul class="col span_2" id=h><li class=row><input id=e type=button value=&rarr; class="col span_24" tabindex=3><li class=row><input id=f type=button value=&larr; class="col span_24" tabindex=6></ul><fieldset class="col span_11"><legend>CIDR <input id=b type=button value=Clear tabindex=4></legend><textarea id=d name=cidr placeholder=192.168.0.0/16 rows=5 wrap=off tabindex=5></textarea></fieldset></div><div class=row id=j><span class=col id=g>\u00a0</span></div></div><script src="'+c+'js/cidr.min.js?v=.1">\x3c/script>');d.document.close();return!1});a(b("@","validation_mimetype")).on("change",function(c){var d=a(this),n=parseInt(d.val(),10);d.nextAll(b(".","settings-folding")).each(function(b,c){G(a(c),n===b+1||n&&2===b)});return x(c)}).change();a('select[name*="response_code"]').on("change",function(c){var d=a(this),n=parseInt(d.val()/100,10),e=d.closest("tr").nextAll("tr");if(0<=d.attr("name").indexOf("public")&&-1===parseInt(a(b("@","public_matching_rule")).val(),10))return e.each(function(b){1>=b&&a(this).hide()}),x(c);3>=n?e.each(function(b){0===b?a(this).show():1===b&&a(this).hide()}):e.each(function(b){0===b?a(this).hide():1===b&&a(this).show()});return x(c)}).change();a(b("#","decode")).on("click",function(){var c=a(b("@","signature")),d=c.val();-1===d.search(/,/)?c.val(H(f.atob(d))):c.val(f.btoa(H(d)));return!1});a(b("@","validation_login")).on("change",function(b){var c=a(this);N(c,c,g,!0);return x(b)}).change();q(null,{cmd:"get-actions"},function(c){var e,n=a(b("#","list-admin")),f=t.createElement("li"),g=t.createElement("input"),h=t.createElement("label"),l=t.createElement("dfn"),m=t.createElement("span");for(y in c)if(c.hasOwnProperty(y)){var y=k(y);if(!n.find("#"+(e=b("!","exception_admin_"+y))).size()){var p=g.cloneNode(!1);p.setAttribute("id",e);p.setAttribute("value",y);p.setAttribute("type","checkbox");var r=f.cloneNode(!1);r.appendChild(p);p=h.cloneNode(!1);p.setAttribute("for",e);p.appendChild(t.createTextNode(y));r.appendChild(p);1&c[y]&&r.appendChild(X(l,m,d.msg[6],"lock"));2&c[y]&&r.appendChild(X(l,m,d.msg[7],"unlock"));n.append(r)}}a(b(".","icon-unlock")).on("click",function(){a(b("#","list-admin")+">li").filter(function(){return!a(this).find(".dashicons-unlock").length}).toggle();return!1});a(b("@","exception_admin")).on("change",function(c){var d=a.grep(a(this).val().split(","),function(a){return""!==a.replace(/^\s+|\s+#x2F;g,"")});a(b("#","list-admin")).find("input").each(function(){var b=a(this),c=b.val();b.prop("checked",-1!==a.inArray(c,d))});return x(c)}).change();a(b("#","list-admin")).on("click","input",function(){var c=a(this);var d=a(b("@","exception_admin")),e=c.val(),n=a.grep(d.val().split(","),function(a){return""!==a.replace(/^\s+|\s+#x2F;g,"")});c=a.inArray(e,n);-1===c?n.push(e):n.splice(c,1);d.val(n.join(",")).change()});a(b(".","icon-find")).on("click",function(){var c=a(this),e=[],n=0,f,ca,g,h,l=k(d.msg[9]),u=k(c.data("target"));a(b("#","find-"+u)).empty();c.next().children(b(".","find-desc")).show();c=a(b("#","list-"+u));c.children("li").each(function(b,c){e.push(a(c).find("input").val())});q("find-"+u,{cmd:"find-"+u},function(Q){for(var m in Q)Q.hasOwnProperty(m)&&(++n,f=k(Q[m]),m=k(m),ca=a.inArray(m,e),g=b("!","exception_"+u+"_"+m),h="admin"===u?f+"="+m:"/"+f+"/"+m+"/",h='<a class="ip-geo-block-icon ip-geo-block-icon-alert" href="'+F.sites[0]+F.admin+"options-general.php?page=ip-geo-block&tab=4&s="+encodeURIComponent(h)+'" title="'+l.replace("%s",h)+'" target="_blank"><span></span></a>',0>ca?(e.push(m),c.prepend('<li><input id="'+g+'" value="'+m+'" type="checkbox" '+("admin"===u?"/>":"name=ip_geo_block_settings[exception]["+u+"]["+m+"] />")+'<label for="'+g+'">'+m+"</lable>"+h+"</li>")):(g=c.find("#"+g).parent(),g.find("a").length||g.append(h)));a(b("@","exception_"+u)).trigger("change");a(b("#","find-"+u)).append(' <span class="ip-geo-block-warn">'+k(d.msg[8].replace("%d",n))+"</span>")});return!1})});a('input[id^="'+b("!","validation_ajax_")+'"]').on("change",function(){T(a(this))}).change();a(b("@","validation_public")).on("change",function(b){U(a(this));return x(b)}).change();a(b("@","public_matching_rule")).on("change",function(c){var d=this.value;a(b("@","public_white_list")).closest("tr").toggle("0"===d);a(b("@","public_black_list")).closest("tr").toggle("1"===d);a(b("@","public_response_code")).change().closest("tr").toggle("-1"!==d);return x(c)}).change();a(b("@","public_behavior")).on("change",function(b){var c=a(this);G(c.siblings("ul"),c.prop("checked"));return x(b)}).change();a(b("@","update")).on("click",function(){q("download",{cmd:"download"},function(c){var d;for(d in c)if(c.hasOwnProperty(d)){var e=c[d];for(n in e)if(e.hasOwnProperty(n)){var n=k(n);e[n].filename&&a(b("@",d+"_"+n+"_path")).val(k(e[n].filename));e[n].message&&a(b("#",d+"-"+n)).text(k(e[n].message))}}});return!1});a(b("@","anonymize")).on("change",function(){a('input[class*="remote"]').prop("disabled",a(this).prop("checked"))}).trigger("change");a(b("@","save_statistics")).on("change",function(){a(b("@","validation_recdays")).prop("disabled",!a(this).prop("checked"));return!1}).trigger("change");a(b("@","validation_reclogs")).on("change",function(){var b=a(this);b.parent().parent().nextAll().find('input[id*="validation"]').prop("disabled",0===Number(b.prop("selectedIndex")))}).trigger("change");a(b("@","cache_hold")).on("change",function(){var b=a(this).prop("checked");a('input[id*="cache_time"]').prop("disabled",!b);a('select[id*="login_fails"]').prop("disabled",!b)}).trigger("change");a(b("@","comment_pos")).on("change",function(){var b=a(this);b.nextAll('input[type="text"]').prop("disabled",0===Number(b.prop("selectedIndex")))}).trigger("change");W("validate");a(b("#","export")).on("click",function(){if("undefined"===typeof JSON)return D(null,k(d.msg[10])),!1;var c=g,e={};a.each(a(this).closest("form").serializeArray(),function(a,b){-1!==b.name.indexOf(c)&&(e[b.name]=b.value)});e[c+="[signature]"]=f.btoa(H(e[c]));a(b("#","export-data")).val(JSON.stringify(e));a(b("#","export-form")).submit();return!1});a(b("#","file-dialog")).on("change",function(a){if("undefined"===typeof f.FileReader)return D(null,k(d.msg[10])),!1;var b;(a=a.target.files[0])&&ea(a,function(a){a=JSON.parse(a);b=g+"[signature]";"undefined"!==typeof a[b]&&(a[b]=f.btoa(H(a[b])));q("export-import",{cmd:"validate",data:JSON.stringify(a)},function(a){O(a,!0)})});return!1});a(b("#","import")).on("click",function(){a(b("#","file-dialog")).click();return!1});a(b("#","default")).on("click",function(){z(d.msg[0],function(){q("pre-defined",{cmd:"import-default"},function(a){O(a,!0)})});return!1});a(b("#","preferred")).on("click",function(){z(d.msg[0],function(){q("pre-defined",{cmd:"import-preferred"},function(a){O(a,!1)})});return!1});a(b("@","reset_live")).on("click",function(){q("reset-live",{cmd:"reset-live"});return!1});a(b("@","create_table")).on("click",function(){z(d.msg[1],function(){S("create-table")});return!1});a(b("@","delete_table")).on("click",function(){z(d.msg[2],function(){S("delete-table")});return!1});a(b("#","show-info")).on("click",function(){a(b("#","wp-info")).empty();q("wp-info",{cmd:"show-info"},function(c){var d,e=[];for(d in c)c.hasOwnProperty(d)&&e.push("- "+d+" "+c[d]);a(b("#","wp-info")).html('<textarea class="regular-text code" rows="'+e.length+'">'+e.join("\n")+"</textarea>").find("textarea").select();return!1})});a('select[name^="'+g+'"]').on("change",function(){var c=a(this),d,e=b(".","desc");c.next(e).empty();(d=c.children("option:selected").data("desc"))&&c.next(e).html(a.parseHTML(d));N(c,c,g,!0);return!1}).change();a(b(".","icon-cycle")).on("click",function(){var c=a(this).nextAll("li"),d=c.find(b("@","exception_admin"));c=c.find("input:checkbox").filter(":visible");var e=c.filter(":checked").length;c.prop("checked",!e);if(d.length)if(e)d.val("");else{var f=[];c.each(function(b,c){f.push(a(c).val())});d.val(f.join(","))}a(this).blur();return!1});a(b(".","settings-folding>dfn")).on("click",function(){var c=b("drop"),d=a(this).parent();d.children(b(".","hide")).toggle();d.toggleClass(c+"up").toggleClass(c+"down");d.hasClass(c+"up")&&d.children("div").hide();return!1});a("#submit").on("click",function(){var c=a(b("@","signature")),d=c.val();-1!==d.indexOf(",")&&c.val(f.btoa(H(d)));return!0});break;case 1:V(c);var l=0;a(b("#","sort-slug")).on("click",function(){var b=a(this).closest("ol"),c=b.children("li");(l=!l)?c.sort(function(b,c){return a(b).text()>a(c).text()}):c.sort(function(b,c){return parseInt(a(b).text().replace(/^.*\((\d+)\)#x2F;,"$1"),10)<=parseInt(a(c).text().replace(/^.*\((\d+)\)#x2F;,"$1"),10)});b.children("li").remove();c.appendTo(b)});a(b("@","clear_statistics")).on("click",function(){z(d.msg[3],function(){M("statistics",null)});return!1});a(b("@","clear_logs")).on("click",function(){z(d.msg[5],function(){M("logs",null)});return!1});Y(c,{tableID:"statistics-cache",ajaxCMD:"restore-cache",sectionID:"section-2",targetColumn:4,columnIP:1,columnAS:3},{columns:[{title:'<input type="checkbox">'},{title:d.i18n[3]},{title:d.i18n[4]},{title:d.i18n[5]},{title:d.i18n[6]},{title:d.i18n[7]},{title:d.i18n[8]},{title:d.i18n[9]}],columnDefs:[{responsivePriority:0,targets:0},{responsivePriority:1,targets:1},{responsivePriority:2,targets:2},{responsivePriority:6,targets:3},{responsivePriority:7,targets:4},{responsivePriority:3,targets:5},{responsivePriority:4,targets:6},{responsivePriority:5,targets:7},{className:"all",targets:[0,1,2,5]}]});break;case 4:var w={tableID:"validation-logs",sectionID:"section-0",targetColumn:6,columnIP:3,columnAS:5},m={columns:[{title:'<input type="checkbox">'},{title:""},{title:d.i18n[10]},{title:d.i18n[3]},{title:d.i18n[4]},{title:d.i18n[5]},{title:d.i18n[7]},{title:d.i18n[11]},{title:d.i18n[12]},{title:d.i18n[13]},{title:d.i18n[14]},{title:d.i18n[15]}],columnDefs:[{responsivePriority:11,targets:0},{responsivePriority:0,targets:1},{responsivePriority:1,targets:2},{responsivePriority:2,targets:3},{responsivePriority:3,targets:4},{responsivePriority:6,targets:5},{responsivePriority:4,targets:6},{responsivePriority:5,targets:7},{responsivePriority:7,targets:8},{responsivePriority:8,targets:9},{responsivePriority:9,targets:10},{responsivePriority:10,targets:11},{visible:!1,targets:1},{className:"all",targets:[0,2,3,4]},{className:"none",targets:[8,9,10,11]}]},p=null,v=null,C=a(b("#","live-loading")),r=null,P=function(){p&&(f.clearTimeout(p),p=null);v&&(C.removeClass(b("live-timer")),f.clearTimeout(v),v=null)},I=function(){P();q("live-loading",{cmd:"live-start"},function(a){if(a.error)D(null,a.error);else if(a.data.length){var b,c=a.data.length;for(b=0;b<c;b++)r.row.add(a.data[b]);r.draw(!1)}p=f.setTimeout(I,1E3*d.interval)})},E=function(a,b){P();q(null,{cmd:a||"live-stop",callback:b})},J=function(){E("live-pause",function(){C.addClass(b("live-timer"));v=f.setTimeout(function(){P();a(b("#","live-log-stop")).prop("checked",!0)},1E3*d.timeout)})},B=b(""),Z=function(b,c,d){-1===c[7].indexOf("pass")?a(b).addClass(B+d+"blocked"):a(b).addClass(B+d+"passed")},aa=a(b("#","live-log")),ba=a(b("#","live-update"));a(b("#","validation-logs")).on("animationend",function(){a(this).find('tr[class*="'+B+'new"]').each(function(){var b=a(this);-1!==b.prop("class").indexOf("passed")?b.addClass(B+"passed").removeClass(B+"new-passed"):b.addClass(B+"blocked").removeClass(B+"new-blocked")});return!1});aa.on("change",function(){switch(a('input[name="'+b("live-log")+'"]:checked').val()){case "start":I();break;case "pause":J();break;case "stop":E()}});ba.on("change",function(){var d=aa.closest("tr"),f=ba.prop("checked");e[c][1]=f?"o":"x";A(e);r&&r.clear().destroy();f?(d.show().next().next().next().nextAll().hide(),w.ajaxCMD="live-stop",m.order=[1,"desc"],m.createdRow=function(a,b){Z(a,b,"new-")}):(d.hide().next().next().next().nextAll().show(),w.ajaxCMD="restore-logs",m.order=[0,""],m.createdRow=function(a,b){Z(a,b,"")});a(b("#","live-log-stop")).trigger("click");r=Y(c,w,m);return!1}).trigger("change");W("export-logs");a(b("#","export-logs")).on("click",function(){a(b("#","export-form")).submit();return!1});break;case 2:a(f).on(b("gmap-error"),function(){q(null,{cmd:"gmap-error"},function(a){K(a.page,a.tab)})});var L=a(b("#","map"));"object"===typeof f.google?L.each(function(){a(this).GmapRS()}):L.each(function(){a(this).empty().html('<iframe src="'+d.altgmap+'?output=embed" frameborder="0" style="width:100%; height:400px; border:0" allowfullscreen></iframe>')});a('select[id^="'+b("!","service")+'"]').on("change",function(){e[c][3]=a(this).prop("selectedIndex");A(e)}).change();a(b("@","get_location")).on("click",function(){var c=a(b("#","whois")),d=a.trim(a(b("@","ip_address")).val());if(d){a(b("@","anonymize")).prop("checked")&&(d=d.replace(/([\.:])\w{1,4}#x2F;,"$10"),a(b("@","ip_address")).val(d));c.hide().empty();var e=a.whois(d,function(d){var e,f="";for(e=0;e<d.length;++e)f+="<tr><td>"+d[e].name+"</td><td>"+d[e].value+"</td></tr>";c.html('<fieldset id="'+b("section-1")+'" class="'+b("field")+' panel panel-default" data-section="1"><legend class="panel-heading"><h3 id="'+b("whois-title")+'" class="'+b("dropdown")+'">Whois</h3></legend><div class="panel-body '+b("border")+'"><table class="'+b("table")+'">'+f+"</table></div></fieldset>").fadeIn("slow");a(b("#","whois-title")).on("click",function(){var c=a(this);c.parent().nextAll().toggle();c.toggleClass(b("dropup")).toggleClass(b("dropdown"));return!1})});q("loading",{cmd:"search",ip:d,which:a(b("@","service")).val()},function(a){var c="",e=k(a.latitude||"0"),g=k(a.longitude||"0"),h=a.latitude||a.longitude?8:2;for(l in a)if(a.hasOwnProperty(l)){var l=k(l);c+='<li><span class="'+b("title")+'">'+l+' : </span><span class="'+b("result")+'">'+k(a[l])+"</span></li>"}"object"===typeof f.google?L.GmapRS("addMarker",{latitude:e,longitude:g,title:d,content:"<ul>"+c+"</ul>",show:!0,zoom:h}):L.css({height:"600px",backgroundColor:"transparent"}).empty().html('<ul style="margin-top:0; margin-left:1em;"><li><span class="'+b("title")+'">IP address : </span><span class="'+b("result")+'">'+k(d)+"</span></li>"+c+'</ul><iframe src="//maps.google.com/maps?q='+e+","+g+"&z="+h+'&output=embed" frameborder="0" style="width:100%; height:400px; border:0" allowfullscreen></iframe>')},[e])}return!1});a(b("@","ip_address")).on("keypress",function(c){if(c.which&&13===c.which||c.keyCode&&13===c.keyCode)return a(b("@","get_location")).click(),!1});a(b("@","ip_address")).val()&&a(b("@","get_location")).click();break;case 5:V(c),a("input[name="+b("duration")+"]:radio").on("click",function(){var b=a('div[class*="paginate"]').find('a[class*="current"]').text();e[c][2]=a(this).val()||0;e[c][3]=e[c][3]||2;e[c][4]=e[c][4]||1;A(e);h.ajaxStacked(e[c][2],e[c][3],e[c][4],b-1)}),a(b("#","open-new")).on("change",function(){var d=a(this).prop("checked");e[c][1]=d?"o":"x";A(e);a(b("#","section-0 svg")).find("a").each(function(){this.setAttribute("target",d?"_blank":"_self")})}),a(b("#","apply-layout")).on("click",function(){var d=a(b("#","select-layout"));e[c][3]=d.find('select[name="rows"] option:selected').val();e[c][4]=d.find('select[name="cols"] option:selected').val();A(e)}),a("ul.wp-submenu>li.wp-first-item").removeClass("current").next().addClass("current")}})})(jQuery,window,document);
3
Copyright (c) 2013-2018 tokkonopapa (tokkonopapa@yahoo.com)
4
This software is released under the MIT License.
5
*/
6
+ (function(a,f,t){function b(a,b){var c={".":".ip-geo-block-","#":"#ip-geo-block-","@":"#ip_geo_block_settings_",$:"ip-geo-block-","%":"ip_geo_block_","!":"ip_geo_block_settings_"};return"undefined"!==typeof b?c[a]+b:c.$+a}function da(a){return a.toString().replace(/[&<>"']/g,function(a){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[a]}).replace(/&amp;(#\d{2,4}|\w{4,7});/g,"&$1;")}function k(a){return a?da(a.toString().replace(/(<([^>]+)>)/ig,"")):""}function E(b,e){var c=a(f).width();c!==J&&(J=c,"undefined"===typeof p[b]&&(p[b]={id:!1,callback:e}),a(f).off("resize").on("resize",function(){!1!==p[b].id&&f.clearTimeout(p[b].id);p[b].time=f.setTimeout(p[b].callback,200);return!1}))}function C(c,e){e?a(b("#",c)).addClass(b("loading")):a(b("#",c)).removeClass(b("loading"))}function z(a,b){f.confirm(k(a))&&b()}function D(a,b,g){f.alert(k(b||d.msg[12].replace("%s",g)+" ("+a+")"))}function K(a,b){-1!==f.location.href.indexOf(a)&&(f.location=k(a)+(b?"&"+k(b):"")+"&ip-geo-block-auth-nonce="+F.nonce)}function q(b,e,g,l){b&&C(b,!0);e.action=d.action;e.nonce=d.nonce;a.post(d.url,e).done(function(a){g&&g(a)}).fail(function(a){S||D(a.status,a.responseText,e.action)}).always(function(){b&&("object"===typeof l?a.when.apply(a,l).then(function(){C(b,!1)}):C(b,!1))})}function M(a,b){q(a,{cmd:"clear-"+a,which:b},function(a){K(a.page,a.tab)})}function T(a){q(a,{cmd:a},function(a){K(a.page,a.tab)})}function x(a){a.stopImmediatePropagation();return!1}function G(a,e){e?a.removeClass("folding-disable"):(a.children(b(".","hide")).hide(),a.addClass("folding-disable"),a.removeClass(b("dropdown")).addClass(b("dropup")))}function N(c,e,g){var l=0===c.prop("type").indexOf("checkbox")&&c.is(":checked")||0===c.prop("type").indexOf("select")&&"0"!==c.val();c.siblings('input[name^="'+b("%","settings")+'"]:checkbox').prop("disabled",!l);a.isArray(e)?a.each(e,function(c,e){a(e).nextAll(b(".","settings-folding")).each(function(b,e){G(a(e),l&&g[c])})}):e.nextAll(b(".","settings-folding")).each(function(b,c){G(a(c),l&&g)})}function U(c){var e=b("@","validation_ajax_");G(c.closest("ul").next(),a(e+"1").is(":checked")||a(e+"2").is(":checked"))}function H(a){return String(a).replace(/[a-z]/gi,function(a){return String.fromCharCode(a.charCodeAt(0)+("n">a.toLowerCase()?13:-13))})}function ea(a,b){var c=new f.FileReader;c.onload=function(a){b&&b(a.target.result)};c.onerror=function(a){D("Error",a.target.error.code)};c.readAsText(a)}function V(c){var e=c.is(":checked"),g=a(b("@","public_target_rule")),l=a(b("@","public_behavior")),d=c.closest("tr").nextAll("tr");d.find('[name^="'+b("%","settings")+'"]').prop("disabled",!e);d.find(b(".","desc")).css("opacity",e?1:.5);N(c,[g,l],["1"===g.val()?!0:!1,l.val()]);e&&l.change()}function O(c,e){c&&("string"===typeof c&&(c=JSON.parse(c)),e&&(a('input[type="checkbox"]').prop("checked",!1).change(),a("input[name*=providers]").prop("disabled",!1).change()),a(b("#","import")).closest("form").deserialize(c),a(b("@","exception_admin")+","+b("@","validation_mimetype")).change(),a('select[name*="'+b("%","settings")+'"]').change(),a(b("@","validation_login")).change(),V(a(b("@","validation_public"))),U(a(b("@","validation_ajax_1"))),e&&(e=b("%","settings[providers][IPInfoDB]"),a(b("@","providers_IPInfoDB")).prop("checked",c[e]?!0:!1)))}function fa(a,b){var c=Math.ceil(a.length/b),e=[],d;for(d=0;d<c;++d){var m=d*b;e.push(a.slice(m,m+b))}return e}function v(c){"object"===typeof f.google&&(1===c?a(b("#","chart-countries")).length&&(h.drawPie(b("chart-countries")),h.drawLine(b("chart-daily"),"date")):5===c&&a(b(".","network")).each(function(b,c){h.drawStacked(a(c).attr("id"))}))}function W(a){if("object"===typeof f.google){var b=["corechart"];5===a&&b.push("bar");f.google.load("visualization","1",{packages:b,callback:function(){v(a)}});E("draw-chart."+a,function(){v(a)})}}function ha(a){var b,c="undefined"!==typeof wpCookies&&wpCookies.getHash("ip-geo-block")||[];for(b in c)c.hasOwnProperty(b)&&(c[b]=c[b].replace(/[^ox\d]/g,"").split(""));"undefined"===typeof c[a]&&(c[a]=[]);return c}function A(b){var c,g,d=[];a.each(b,function(a,b){d[a]="";if("undefined"!==typeof b&&(g=b.length))for(d[a]=b[0]||"o",c=1;c<g;++c)d[a]+=b[c]||"o"});"undefined"!==typeof wpCookies&&wpCookies.setHash("ip-geo-block",d,new Date(Date.now()+2592E6),F.home+F.admin)}function ia(c){var e=ha(c);a("form").on("click","h2,h3 a",function(){f.open(this.href,null);return!1}).on("click","h2,h3",function(){var d=a(this),l=d.closest("fieldset").data("section"),f=d.parent().nextAll(".panel-body").toggle();d.toggleClass(b("dropup")).toggleClass(b("dropdown"));(d=d.hasClass(b("dropdown")))?f.addClass(b("border")).trigger(b("show-body")):f.removeClass(b("border"));e[c][l]=d?"o":"x";A(e);v(c);return!1});a(b("#","toggle-sections")).on("click",function(){var d,l=a(b(".","field")).find("h2,h3"),f=[b("dropdown"),b("dropup")],m=l.filter("."+f[0]).length;l.each(function(g){d=a(this);d.removeClass(f.join(" ")).addClass(m?f[1]:f[0]);d=d.parent().nextAll(".panel-body").toggle(m?!1:!0);m?d.removeClass(b("border")):d.addClass(b("border")).trigger("show-body");e[c][g]=m?"x":"o"});A(e);v(c);return!1});return e}function P(c){a("body").append('<div style="display:none"><form method="POST" id="'+b("export-form")+'" action="'+d.url.replace("ajax.php","post.php")+'"><input type="hidden" name="action" value="'+d.action+'" /><input type="hidden" name="nonce" value="'+d.nonce+'" /><input type="hidden" name="cmd" value="'+c+'" /><input type="hidden" name="data" value="" id="'+b("export-data")+'"/><input type="submit" value="submit" /></form><input type="file" name="settings" id="'+b("file-dialog")+'" /></div>')}function X(a,b,d,f){a=a.cloneNode(!1);a.setAttribute("title",k(d));b=b.cloneNode(!1);b.setAttribute("class","dashicons dashicons-"+f);a.appendChild(b);return a}function Y(c,e,g){a.extend(!0,a.fn.dataTable.defaults,g,{dom:"tp",serverSide:!1,autoWidth:!1,processing:!0,deferRender:!0,deferLoading:10,info:!1,lengthChange:!1,language:{emptyTable:d.i18n[1],loadingRecords:d.i18n[0],processing:d.i18n[0],zeroRecords:d.i18n[2],paginate:{first:"&laquo;",last:"&raquo;",next:"&rsaquo;",previous:"&lsaquo;"}},responsive:{details:{type:"column",target:"td:nth-child(n+2)"}},columnDefs:[{width:"1.25em",targets:0},{orderable:!1,targets:0},{searchable:!1,targets:0},{targets:[0],data:null,defaultContent:'<input type="checkbox">'}],pagingType:"full_numbers",pageLength:10,scroller:!0,scrollY:1E4,scrollCollapse:!0,drawCallback:function(c){var f=a(b("#",e.tableID)).find("td.dataTables_empty"),g="restore-logs"===e.ajaxCMD?3:2;g>c.iDraw?f.html(d.i18n[0]):g===c.iDraw&&(f.html(d.i18n[1]),f=a(b("@","search_filter")),f.val()&&f.trigger("keyup"))}});var l=a(b("#",e.tableID)).DataTable({ajax:{url:d.url,type:"POST",data:{cmd:e.ajaxCMD,action:d.action,nonce:d.nonce}},mark:!0}),h=function(){l.columns.adjust().responsive.recalc().draw(!1)};E("draw-table."+c,h);a(b("#",e.sectionID)).find(".panel-body").off(b("show-body")).on(b("show-body"),function(){h();return!1}).off("change").on("change",'th>input[type="checkbox"]',function(){var c=a(this).prop("checked");a(b("#",e.tableID)).find('td>input[type="checkbox"]').prop("checked",c);return!1});a(b("#","select-target")).off("change").on("change",function(){var c=a(this).find('input[name="'+b("target")+'"]:checked').val();l.columns(e.targetColumn).search("all"!==c?c:"").draw();return!1}).trigger("change");a(b("#","bulk-action")).off("click").on("click",function(){var f=a(this).prev().val(),g=/(<([^>]+)>)/ig,h=/data-hash=[\W]([\w]+)[\W]/i,k={IP:[],AS:[]},r,w,I=a("table.dataTable").find("td>input:checked");if(!f)return!1;if(!I.length)return D(null,d.msg[11]),!1;I.each(function(){w=l.cell(this.parentNode).data();r="bulk-action-remove"===f||"bulk-action-ip-erase"===f?(r=w[e.columnIP].match(h))?","+r[1]:"":"";k.IP.push(w[e.columnIP].replace(g,"")+r);k.AS.push(w[e.columnAS].replace(g,""))});k.IP.length&&q("loading",{cmd:f,which:k},function(d){"undefined"!==typeof d.page?K(d.page,"tab="+c):d&&(l.ajax.reload(),a(b("#",e.tableID)).find('th input[type="checkbox"]').prop("checked",!1))});return!1});a(b("@","search_filter")).off("keyup").on("keyup",function(){l.search(this.value,!1,!0,!/[A-Z]/.test(this.value)).draw();return!1});a(b("#","reset-filter")).off("click").on("click",function(){a(b("@","search_filter")).val("");l.search("").draw();return!1});a(b("@","clear_all")).off("click").on("click",function(){z(d.msg[1===c?4:5],function(){M(1===c?"cache":"logs",null)});return!1});a("table.dataTable tbody").on("click","a",function(){var b=f.location.search.slice(1).split("&"),e=b.length,d={},g;for(g=0;g<e;++g){var l=b[g].split("=");d[l[0]]=l[1]}d.tab=1===c?4:2;d.s=a(this).text().replace(/[^\w\.:\*]/,"");l=[];for(g in d)d.hasOwnProperty(g)&&l.push(g+"="+d[g]);f.open(f.location.pathname+"?"+l.join("&"),"_blank");return!1});return l}var S=!1,p=[],J=a(f).width(),d=IP_GEO_BLOCK,F=IP_GEO_BLOCK_AUTH;a.fn.deserialize=function(b){return this.each(function(){var c,d=this,f={};for(c in b)if(b.hasOwnProperty(c))try{var h=decodeURIComponent(c);var k=decodeURIComponent(b[c]);f.hasOwnProperty(h)||(f[h]=[]);f[h].push(k)}catch(ja){}a.each(f,function(b,e){c=a('[name="'+b+'"]:input',d).val(e);"hidden"!==c.attr("type")&&c.before('<span style="color:red">*</span>')})})};var h={dataPie:[],viewPie:[],drawPie:function(b){if("undefined"===typeof h.dataPie[b]){var c=h.dataPie[b]=new f.google.visualization.DataTable;c.addColumn("string","Country");c.addColumn("number","Requests");c=a.parseJSON(a("#"+b).attr("data-"+b));h.dataPie[b].addRows(c)}"undefined"===typeof h.viewPie[b]&&(h.viewPie[b]=new f.google.visualization.PieChart(t.getElementById(b)));"undefined"!==typeof h.dataPie[b]&&"undefined"!==typeof h.viewPie[b]&&0<a("#"+b).width()&&h.viewPie[b].draw(h.dataPie[b],{backgroundColor:{fill:"transparent"},chartArea:{left:0,top:"5%",width:"100%",height:"90%"},sliceVisibilityThreshold:.015})},dataLine:[],viewLine:[],drawLine:function(b,d){if("undefined"===typeof h.dataLine[b]){var c=h.dataLine[b]=new f.google.visualization.DataTable;c.addColumn(d,"Date");c.addColumn("number","comment");c.addColumn("number","xmlrpc");c.addColumn("number","login");c.addColumn("number","admin");c.addColumn("number","public");var e=a.parseJSON(a("#"+b).attr("data-"+b));var k=e.length;for(c=0;c<k;++c)e[c][0]=new Date(1E3*e[c][0]);h.dataLine[b].addRows(e)}"undefined"===typeof h.viewLine[b]&&(h.viewLine[b]=new f.google.visualization.LineChart(t.getElementById(b)));"undefined"!==typeof h.dataLine[b]&&"undefined"!==typeof h.viewLine[b]&&0<(c=a("#"+b).width())&&h.viewLine[b].draw(h.dataLine[b],{legend:{position:"bottom"},backgroundColor:{fill:"transparent"},hAxis:{format:"MM/dd"+("datetime"===d?" HH:mm":"")},vAxis:{textPosition:320<c?"out":"in"},chartArea:{left:320<c?"10%":0,top:"5%",width:"100%",height:"75%"}})},dataStacked:[],viewStacked:[],drawStacked:function(c){var d,g,l=a("#"+c);"undefined"===typeof h.dataStacked[c]&&(g=a.parseJSON(l.attr("data-"+c)))&&(g.unshift(["site","comment","xmlrpc","login","admin","poblic",{role:"link"}]),h.dataStacked[c]=f.google.visualization.arrayToDataTable(g));"undefined"===typeof h.viewStacked[c]&&(h.viewStacked[c]=new f.google.visualization.BarChart(t.getElementById(c)),f.google.visualization.events.addListener(h.viewStacked[c],"animationfinish",function(){var d,e,f,g=[],k=h.dataStacked[c],m=k.getNumberOfRows(),q=a(b("#","open-new")).prop("checked");for(d=0;d<m;d++)g.push({label:k.getValue(d,0),link:k.getValue(d,6)});m="http://www.w3.org/1999/xlink";l.find("text").each(function(a,b){f=b.parentNode;var c;if(c="g"===f.tagName.toLowerCase()){a:{c=b.textContent;var d,k=g.length;c=c.replace("\u2026","");for(d=0;d<k;++d)if(g.hasOwnProperty(d)&&0===g[d].label.indexOf(c)){c=d;break a}c=-1}c=-1!==(a=c)}c&&(e=t.createElementNS("http://www.w3.org/2000/svg","a"),e.setAttributeNS(m,"xlink:href",g[a].link),e.setAttributeNS(m,"title",g[a].label),e.setAttribute("target",q?"_blank":"_self"),e.setAttribute("class","site"),e.appendChild(f.removeChild(b)),f.appendChild(e),g.splice(a,1))})}));if(0<(d=l.width())&&"undefined"!==typeof h.dataStacked[c]&&"undefined"!==typeof h.viewStacked[c]){var k=b("range");var m=a.parseJSON(a("."+k).attr("data-"+k));g=h.dataStacked[c];k=40*g.getNumberOfRows();h.viewStacked[c].draw(g,{width:d,height:k+80,allowHtml:!0,isStacked:!0,legend:{position:"top"},chartArea:{top:50,left:90,width:"100%",height:k},hAxis:{minValue:0,maxValue:m[1]},backgroundColor:{fill:"transparent"},animation:{startup:!0,duration:200,easing:"out"}})}},ajaxStacked:function(c,d,f,k){c=Math.max(0,Math.min(4,c));d=5*Math.max(1,Math.min(5,d));q(null,{cmd:"restore-network",which:c,offset:d*f*k,length:d},function(c){var e,f,g,k,l;c=fa(c,d);a(b(".","network")).each(function(b,m){if("undefined"!==typeof c[b]){k=a(m).attr("id");l=h.dataStacked[k];g=Math.min(d,c[b].length);for(e=0;e<g;++e)for(f=1;5>=f;f++)l.setValue(e,f,c[b][e][f]);h.drawStacked(k)}})})}};a(function(){var c=Number(d.tab)||0,e=ia(c);a(b(".","inhibit")).on("submit",function(){return!1});a(f).on("beforeunload",function(){S=!0});switch(c){case 0:var g=b("%","settings");a('[id^="'+b("scan-")+'"]').on("click",function(){var c=a(this),d=c.attr("id"),e=c.parent();q(d.replace(/^.*(?:scan)/,"scanning"),{cmd:"scan-code",which:d.replace(b("scan-"),"")},function(a){e.children("ul").length||e.append('<ul id="'+b("code-list")+'"></ul>');e=e.children("ul").empty();for(c in a)if(a.hasOwnProperty(c)){var c=k(c);if("string"===typeof a[c])var d=k(a[c]);else d=k(a[c].code),c='<abbr title="'+k(a[c].type)+'">'+c+"</abbr>";e.append("<li>"+c+' : <span class="'+b("notice")+'">'+d+"</span></li>")}e.show("slow")});return!1});a(b("@","matching_rule")).on("change",function(){var c=this.value;a(b("@","white_list")).closest("tr").toggle("0"===c);a(b("@","black_list")).closest("tr").toggle("1"===c);return!1}).change();a(b(".","icon-cidr")).on("click",function(){var c=a(b("#","admin-styles-css")).get(0).href,d=f.open("about:blank","","width=560,height=170");c=c.slice(0,c.lastIndexOf("css/"));d.document.write('<!DOCTYPE html><html lang=en><meta charset=utf-8><title>CIDR calculator for IPv4 / IPv6</title><link href="'+c+'css/cidr.min.css?v=.1" rel=stylesheet><div class="row container"><div class=row id=i><fieldset class="col span_11"><legend>Range <input id=a type=button value=Clear tabindex=1></legend><textarea id=c name=range placeholder="192.168.0.0 - 192.168.255.255" rows=5 wrap=off tabindex=2></textarea></fieldset><ul class="col span_2" id=h><li class=row><input id=e type=button value=&rarr; class="col span_24" tabindex=3><li class=row><input id=f type=button value=&larr; class="col span_24" tabindex=6></ul><fieldset class="col span_11"><legend>CIDR <input id=b type=button value=Clear tabindex=4></legend><textarea id=d name=cidr placeholder=192.168.0.0/16 rows=5 wrap=off tabindex=5></textarea></fieldset></div><div class=row id=j><span class=col id=g>\u00a0</span></div></div><script src="'+c+'js/cidr.min.js?v=.1">\x3c/script>');d.document.close();return!1});a(b("@","validation_mimetype")).on("change",function(c){var d=a(this),n=parseInt(d.val(),10);d.nextAll(b(".","settings-folding")).each(function(b,c){G(a(c),n===b+1||n&&2===b)});return x(c)}).change();a('select[name*="response_code"]').on("change",function(c){var d=a(this),n=parseInt(d.val()/100,10),e=d.closest("tr").nextAll("tr");if(0<=d.attr("name").indexOf("public")&&-1===parseInt(a(b("@","public_matching_rule")).val(),10))return e.each(function(b){1>=b&&a(this).hide()}),x(c);3>=n?e.each(function(b){0===b?a(this).show():1===b&&a(this).hide()}):e.each(function(b){0===b?a(this).hide():1===b&&a(this).show()});return x(c)}).change();a(b("#","decode")).on("click",function(){var c=a(b("@","signature")),d=c.val();-1===d.search(/,/)?c.val(H(f.atob(d))):c.val(f.btoa(H(d)));return!1});a(b("@","validation_login")).on("change",function(b){var c=a(this);N(c,c,g,!0);return x(b)}).change();q(null,{cmd:"get-actions"},function(c){var e,n=a(b("#","list-admin")),f=t.createElement("li"),g=t.createElement("input"),h=t.createElement("label"),l=t.createElement("dfn"),m=t.createElement("span");for(y in c)if(c.hasOwnProperty(y)){var y=k(y);if(!n.find("#"+(e=b("!","exception_admin_"+y))).size()){var p=g.cloneNode(!1);p.setAttribute("id",e);p.setAttribute("value",y);p.setAttribute("type","checkbox");var r=f.cloneNode(!1);r.appendChild(p);p=h.cloneNode(!1);p.setAttribute("for",e);p.appendChild(t.createTextNode(y));r.appendChild(p);1&c[y]&&r.appendChild(X(l,m,d.msg[6],"lock"));2&c[y]&&r.appendChild(X(l,m,d.msg[7],"unlock"));n.append(r)}}a(b(".","icon-unlock")).on("click",function(){a(b("#","list-admin")+">li").filter(function(){return!a(this).find(".dashicons-unlock").length}).toggle();return!1});a(b("@","exception_admin")).on("change",function(c){var d=a.grep(a(this).val().split(","),function(a){return""!==a.replace(/^\s+|\s+#x2F;g,"")});a(b("#","list-admin")).find("input").each(function(){var b=a(this),c=b.val();b.prop("checked",-1!==a.inArray(c,d))});return x(c)}).change();a(b("#","list-admin")).on("click","input",function(){var c=a(this);var d=a(b("@","exception_admin")),e=c.val(),n=a.grep(d.val().split(","),function(a){return""!==a.replace(/^\s+|\s+#x2F;g,"")});c=a.inArray(e,n);-1===c?n.push(e):n.splice(c,1);d.val(n.join(",")).change()});a(b(".","icon-find")).on("click",function(){var c=a(this),e=[],n=0,f,ca,g,h,l=k(d.msg[9]),u=k(c.data("target"));a(b("#","find-"+u)).empty();c.next().children(b(".","find-desc")).show();c=a(b("#","list-"+u));c.children("li").each(function(b,c){e.push(a(c).find("input").val())});q("find-"+u,{cmd:"find-"+u},function(R){for(var m in R)R.hasOwnProperty(m)&&(++n,f=k(R[m]),m=k(m),ca=a.inArray(m,e),g=b("!","exception_"+u+"_"+m),h="admin"===u?f+"="+m:"/"+f+"/"+m+"/",h='<a class="ip-geo-block-icon ip-geo-block-icon-alert" href="'+F.sites[0]+F.admin+"options-general.php?page=ip-geo-block&tab=4&s="+encodeURIComponent(h)+'" title="'+l.replace("%s",h)+'" target="_blank"><span></span></a>',0>ca?(e.push(m),c.prepend('<li><input id="'+g+'" value="'+m+'" type="checkbox" '+("admin"===u?"/>":"name=ip_geo_block_settings[exception]["+u+"]["+m+"] />")+'<label for="'+g+'">'+m+"</lable>"+h+"</li>")):(g=c.find("#"+g).parent(),g.find("a").length||g.append(h)));a(b("@","exception_"+u)).trigger("change");a(b("#","find-"+u)).append(' <span class="ip-geo-block-warn">'+k(d.msg[8].replace("%d",n))+"</span>")});return!1})});a('input[id^="'+b("!","validation_ajax_")+'"]').on("change",function(){U(a(this))}).change();a(b("@","validation_public")).on("change",function(b){V(a(this));return x(b)}).change();a(b("@","public_matching_rule")).on("change",function(c){var d=this.value;a(b("@","public_white_list")).closest("tr").toggle("0"===d);a(b("@","public_black_list")).closest("tr").toggle("1"===d);a(b("@","public_response_code")).change().closest("tr").toggle("-1"!==d);return x(c)}).change();a(b("@","public_behavior")).on("change",function(b){var c=a(this);G(c.siblings("ul"),c.prop("checked"));return x(b)}).change();a(b("@","update")).on("click",function(){q("download",{cmd:"download"},function(c){var d;for(d in c)if(c.hasOwnProperty(d)){var e=c[d];for(n in e)if(e.hasOwnProperty(n)){var n=k(n);e[n].filename&&a(b("@",d+"_"+n+"_path")).val(k(e[n].filename));e[n].message&&a(b("#",d+"-"+n)).text(k(e[n].message))}}});return!1});a(b("@","anonymize")).on("change",function(){a('input[class*="remote"]').prop("disabled",a(this).prop("checked"))}).trigger("change");a(b("@","save_statistics")).on("change",function(){a(b("@","validation_recdays")).prop("disabled",!a(this).prop("checked"));return!1}).trigger("change");a(b("@","validation_reclogs")).on("change",function(){var b=a(this);b.parent().parent().nextAll().find('input[id*="validation"]').prop("disabled",0===Number(b.prop("selectedIndex")))}).trigger("change");a(b("@","cache_hold")).on("change",function(){var b=a(this).prop("checked");a('input[name*="[cache_time]"]').prop("disabled",!b);a('select[id*="login_fails"]').prop("disabled",!b)}).trigger("change");a(b("@","comment_pos")).on("change",function(){var b=a(this);b.nextAll('input[type="text"]').prop("disabled",0===Number(b.prop("selectedIndex")))}).trigger("change");P("validate");a(b("#","export")).on("click",function(){if("undefined"===typeof JSON)return D(null,k(d.msg[10])),!1;var c=g,e={};a.each(a(this).closest("form").serializeArray(),function(a,b){-1!==b.name.indexOf(c)&&(e[b.name]=b.value)});e[c+="[signature]"]=f.btoa(H(e[c]));a(b("#","export-data")).val(JSON.stringify(e));a(b("#","export-form")).submit();return!1});a(b("#","file-dialog")).on("change",function(a){if("undefined"===typeof f.FileReader)return D(null,k(d.msg[10])),!1;var b;(a=a.target.files[0])&&ea(a,function(a){a=JSON.parse(a);b=g+"[signature]";"undefined"!==typeof a[b]&&(a[b]=f.btoa(H(a[b])));q("export-import",{cmd:"validate",data:JSON.stringify(a)},function(a){O(a,!0)})});return!1});a(b("#","import")).on("click",function(){a(b("#","file-dialog")).click();return!1});a(b("#","default")).on("click",function(){z(d.msg[0],function(){q("pre-defined",{cmd:"import-default"},function(a){O(a,!0)})});return!1});a(b("#","preferred")).on("click",function(){z(d.msg[0],function(){q("pre-defined",{cmd:"import-preferred"},function(a){O(a,!1)})});return!1});a(b("@","reset_live")).on("click",function(){q("reset-live",{cmd:"reset-live"});return!1});a(b("@","create_table")).on("click",function(){z(d.msg[1],function(){T("create-table")});return!1});a(b("@","delete_table")).on("click",function(){z(d.msg[2],function(){T("delete-table")});return!1});a(b("#","show-info")).on("click",function(){a(b("#","wp-info")).empty();q("wp-info",{cmd:"show-info"},function(c){var d,e=[];for(d in c)c.hasOwnProperty(d)&&e.push("- "+d+" "+c[d]);a(b("#","wp-info")).html('<textarea class="regular-text code" rows="'+e.length+'">'+e.join("\n")+"</textarea>").find("textarea").select();return!1})});a('select[name^="'+g+'"]').on("change",function(){var c=a(this),d,e=b(".","desc");c.next(e).empty();(d=c.children("option:selected").data("desc"))&&c.next(e).html(a.parseHTML(d));N(c,c,g,!0);return!1}).change();a(b(".","icon-cycle")).on("click",function(){var c=a(this).nextAll("li"),d=c.find(b("@","exception_admin"));c=c.find("input:checkbox").filter(":visible");var e=c.filter(":checked").length;c.prop("checked",!e);if(d.length)if(e)d.val("");else{var f=[];c.each(function(b,c){f.push(a(c).val())});d.val(f.join(","))}a(this).blur();return!1});a(b(".","settings-folding>dfn")).on("click",function(){var c=b("drop"),d=a(this).parent();d.children(b(".","hide")).toggle();d.toggleClass(c+"up").toggleClass(c+"down");d.hasClass(c+"up")&&d.children("div").hide();return!1});a("#submit").on("click",function(){var c=a(b("@","signature")),d=c.val();-1!==d.indexOf(",")&&c.val(f.btoa(H(d)));return!0});break;case 1:W(c);var l=0;a(b("#","sort-slug")).on("click",function(){var b=a(this).closest("ol"),c=b.children("li");(l=!l)?c.sort(function(b,c){return a(b).text()>a(c).text()}):c.sort(function(b,c){return parseInt(a(b).text().replace(/^.*\((\d+)\)#x2F;,"$1"),10)<=parseInt(a(c).text().replace(/^.*\((\d+)\)#x2F;,"$1"),10)});b.children("li").remove();c.appendTo(b)});a(b("@","clear_statistics")).on("click",function(){z(d.msg[3],function(){M("statistics",null)});return!1});a(b("@","clear_logs")).on("click",function(){z(d.msg[5],function(){M("logs",null)});return!1});Y(c,{tableID:"statistics-cache",ajaxCMD:"restore-cache",sectionID:"section-2",targetColumn:4,columnIP:1,columnAS:3},{columns:[{title:'<input type="checkbox">'},{title:d.i18n[3]},{title:d.i18n[4]},{title:d.i18n[5]},{title:d.i18n[6]},{title:d.i18n[7]},{title:d.i18n[8]},{title:d.i18n[9]}],columnDefs:[{responsivePriority:0,targets:0},{responsivePriority:1,targets:1},{responsivePriority:2,targets:2},{responsivePriority:6,targets:3},{responsivePriority:7,targets:4},{responsivePriority:3,targets:5},{responsivePriority:4,targets:6},{responsivePriority:5,targets:7},{className:"all",targets:[0,1,2,5]}]});P("export-cache");a(b("#","export-cache")).on("click",function(){a(b("#","export-form")).submit();return!1});break;case 4:var w={tableID:"validation-logs",sectionID:"section-0",targetColumn:6,columnIP:3,columnAS:5},m={columns:[{title:'<input type="checkbox">'},{title:""},{title:d.i18n[10]},{title:d.i18n[3]},{title:d.i18n[4]},{title:d.i18n[5]},{title:d.i18n[7]},{title:d.i18n[11]},{title:d.i18n[12]},{title:d.i18n[13]},{title:d.i18n[14]},{title:d.i18n[15]}],columnDefs:[{responsivePriority:11,targets:0},{responsivePriority:0,targets:1},{responsivePriority:1,targets:2},{responsivePriority:2,targets:3},{responsivePriority:3,targets:4},{responsivePriority:6,targets:5},{responsivePriority:4,targets:6},{responsivePriority:5,targets:7},{responsivePriority:7,targets:8},{responsivePriority:8,targets:9},{responsivePriority:9,targets:10},{responsivePriority:10,targets:11},{visible:!1,targets:1},{className:"all",targets:[0,2,3,4]},{className:"none",targets:[8,9,10,11]}]},p=null,v=null,C=a(b("#","live-loading")),r=null,Q=function(){p&&(f.clearTimeout(p),p=null);v&&(C.removeClass(b("live-timer")),f.clearTimeout(v),v=null)},I=function(){Q();q("live-loading",{cmd:"live-start"},function(a){if(a.error)D(null,a.error);else if(a.data.length){var b,c=a.data.length;for(b=0;b<c;b++)r.row.add(a.data[b]);r.draw(!1)}p=f.setTimeout(I,1E3*d.interval)})},E=function(a,b){Q();q(null,{cmd:a||"live-stop",callback:b})},J=function(){E("live-pause",function(){C.addClass(b("live-timer"));v=f.setTimeout(function(){Q();a(b("#","live-log-stop")).prop("checked",!0)},1E3*d.timeout)})},B=b(""),Z=function(b,c,d){-1===c[7].indexOf("pass")?a(b).addClass(B+d+"blocked"):a(b).addClass(B+d+"passed")},aa=a(b("#","live-log")),ba=a(b("#","live-update"));a(b("#","validation-logs")).on("animationend",function(){a(this).find('tr[class*="'+B+'new"]').each(function(){var b=a(this);-1!==b.prop("class").indexOf("passed")?b.addClass(B+"passed").removeClass(B+"new-passed"):b.addClass(B+"blocked").removeClass(B+"new-blocked")});return!1});aa.on("change",function(){switch(a('input[name="'+b("live-log")+'"]:checked').val()){case "start":I();break;case "pause":J();break;case "stop":E()}});ba.on("change",function(){var d=aa.closest("tr"),f=ba.prop("checked");e[c][1]=f?"o":"x";A(e);r&&r.clear().destroy();f?(d.show().next().next().next().nextAll().hide(),w.ajaxCMD="live-stop",m.order=[1,"desc"],m.createdRow=function(a,b){Z(a,b,"new-")}):(d.hide().next().next().next().nextAll().show(),w.ajaxCMD="restore-logs",m.order=[0,""],m.createdRow=function(a,b){Z(a,b,"")});a(b("#","live-log-stop")).trigger("click");r=Y(c,w,m);return!1}).trigger("change");P("export-logs");a(b("#","export-logs")).on("click",function(){a(b("#","export-form")).submit();return!1});break;case 2:a(f).on(b("gmap-error"),function(){q(null,{cmd:"gmap-error"},function(a){K(a.page,a.tab)})});var L=a(b("#","map"));"object"===typeof f.google?L.each(function(){a(this).GmapRS()}):L.each(function(){a(this).empty().html('<iframe src="'+d.altgmap+'?output=embed" frameborder="0" style="width:100%; height:400px; border:0" allowfullscreen></iframe>')});a('select[id^="'+b("!","service")+'"]').on("change",function(){e[c][3]=a(this).prop("selectedIndex");A(e)}).change();a(b("@","get_location")).on("click",function(){var c=a(b("#","whois")),d=a.trim(a(b("@","ip_address")).val());if(d){a(b("@","anonymize")).prop("checked")&&(d=d.replace(/([\.:])\w{1,4}#x2F;,"$10"),a(b("@","ip_address")).val(d));c.hide().empty();var e=a.whois(d,function(d){var e,f="";for(e=0;e<d.length;++e)f+="<tr><td>"+d[e].name+"</td><td>"+d[e].value+"</td></tr>";c.html('<fieldset id="'+b("section-1")+'" class="'+b("field")+' panel panel-default" data-section="1"><legend class="panel-heading"><h3 id="'+b("whois-title")+'" class="'+b("dropdown")+'">Whois</h3></legend><div class="panel-body '+b("border")+'"><table class="'+b("table")+'">'+f+"</table></div></fieldset>").fadeIn("slow");a(b("#","whois-title")).on("click",function(){var c=a(this);c.parent().nextAll().toggle();c.toggleClass(b("dropup")).toggleClass(b("dropdown"));return!1})});q("loading",{cmd:"search",ip:d,which:a(b("@","service")).val()},function(a){var c="",e=k(a.latitude||"0"),g=k(a.longitude||"0"),h=a.latitude||a.longitude?8:2;for(l in a)if(a.hasOwnProperty(l)){var l=k(l);c+='<li><span class="'+b("title")+'">'+l+' : </span><span class="'+b("result")+'">'+k(a[l])+"</span></li>"}"object"===typeof f.google?L.GmapRS("addMarker",{latitude:e,longitude:g,title:d,content:"<ul>"+c+"</ul>",show:!0,zoom:h}):L.css({height:"600px",backgroundColor:"transparent"}).empty().html('<ul style="margin-top:0; margin-left:1em;"><li><span class="'+b("title")+'">IP address : </span><span class="'+b("result")+'">'+k(d)+"</span></li>"+c+'</ul><iframe src="//maps.google.com/maps?q='+e+","+g+"&z="+h+'&output=embed" frameborder="0" style="width:100%; height:400px; border:0" allowfullscreen></iframe>')},[e])}return!1});a(b("@","ip_address")).on("keypress",function(c){if(c.which&&13===c.which||c.keyCode&&13===c.keyCode)return a(b("@","get_location")).click(),!1});a(b("@","ip_address")).val()&&a(b("@","get_location")).click();break;case 5:W(c),a("input[name="+b("duration")+"]:radio").on("click",function(){var b=a('div[class*="paginate"]').find('a[class*="current"]').text();e[c][2]=a(this).val()||0;e[c][3]=e[c][3]||2;e[c][4]=e[c][4]||1;A(e);h.ajaxStacked(e[c][2],e[c][3],e[c][4],b-1)}),a(b("#","open-new")).on("change",function(){var d=a(this).prop("checked");e[c][1]=d?"o":"x";A(e);a(b("#","section-0 svg")).find("a").each(function(){this.setAttribute("target",d?"_blank":"_self")})}),a(b("#","apply-layout")).on("click",function(){var d=a(b("#","select-layout"));e[c][3]=d.find('select[name="rows"] option:selected').val();e[c][4]=d.find('select[name="cols"] option:selected').val();A(e)}),a("ul.wp-submenu>li.wp-first-item").removeClass("current").next().addClass("current")}})})(jQuery,window,document);
classes/class-ip-geo-block-cron.php CHANGED
@@ -178,7 +178,12 @@ class IP_Geo_Block_Cron {
178
*/
179
public static function exec_cache_gc( $settings ) {
180
self::stop_cache_gc();
181
- IP_Geo_Block_Logs::delete_cache_expired( $settings['cache_time'] );
182
self::start_cache_gc( $settings );
183
}
184
@@ -186,7 +191,7 @@ class IP_Geo_Block_Cron {
186
$settings or $settings = IP_Geo_Block::get_option();
187
188
if ( ! wp_next_scheduled( IP_Geo_Block::CACHE_NAME ) )
189
- wp_schedule_single_event( time() + $settings['cache_time_gc'], IP_Geo_Block::CACHE_NAME );
190
}
191
192
public static function stop_cache_gc() {
178
*/
179
public static function exec_cache_gc( $settings ) {
180
self::stop_cache_gc();
181
+
182
+ IP_Geo_Block_Logs::delete_expired( array(
183
+ $settings['validation']['explogs'],
184
+ $settings['cache_time']
185
+ ) );
186
+
187
self::start_cache_gc( $settings );
188
}
189
191
$settings or $settings = IP_Geo_Block::get_option();
192
193
if ( ! wp_next_scheduled( IP_Geo_Block::CACHE_NAME ) )
194
+ wp_schedule_single_event( time() + max( $settings['cache_time_gc'], MINUTE_IN_SECONDS ), IP_Geo_Block::CACHE_NAME );
195
}
196
197
public static function stop_cache_gc() {
classes/class-ip-geo-block-logs.php CHANGED
@@ -964,14 +964,14 @@ class IP_Geo_Block_Logs {
964
* Delete expired cache
965
*
966
*/
967
- public static function delete_cache_expired( $cache_time ) {
968
global $wpdb;
969
- $table = $wpdb->prefix . IP_Geo_Block::CACHE_NAME;
970
-
971
- $sql = $wpdb->prepare( "DELETE FROM `$table` WHERE `time` < %d", $_SERVER['REQUEST_TIME'] - $cache_time )
972
- and $result = ( FALSE !== $wpdb->query( $sql ) ) or self::error( __LINE__ );
973
974
- return isset( $result ) ? $result : FALSE;
975
}
976
977
/**
964
* Delete expired cache
965
*
966
*/
967
+ public static function delete_expired( $expired ) {
968
global $wpdb;
969
970
+ foreach ( array( self::TABLE_LOGS, IP_Geo_Block::CACHE_NAME ) as $key => $table ) {
971
+ $table = $wpdb->prefix . $table;
972
+ $sql = $wpdb->prepare( "DELETE FROM `$table` WHERE `time` < %d", $_SERVER['REQUEST_TIME'] - $expired[ $key ] )
973
+ and FALSE !== $wpdb->query( $sql ) or self::error( __LINE__ );
974
+ }
975
}
976
977
/**
classes/class-ip-geo-block-opts.php CHANGED
@@ -16,7 +16,7 @@ class IP_Geo_Block_Opts {
16
*
17
*/
18
private static $option_table = array(
19
- 'version' => '3.0.11',// Version of this table (not package)
20
// since version 1.0
21
'providers' => array(), // List of providers and API keys
22
'comment' => array( // Message on the comment form
@@ -29,9 +29,9 @@ class IP_Geo_Block_Opts {
29
'timeout' => 30, // Timeout in second
30
'response_code' => 403, // Response code
31
'save_statistics' => TRUE, // Record validation statistics
32
- 'clean_uninstall' => FALSE, // Remove all savings from DB
33
// since version 1.1
34
- 'cache_hold' => TRUE, // Record IP address in cache
35
'cache_time' => HOUR_IN_SECONDS, // @since 3.5
36
// since version 3.0.0
37
'cache_time_gc' => 900, // Cache garbage collection time
@@ -45,11 +45,13 @@ class IP_Geo_Block_Opts {
45
'ajax' => 0, // Validate on ajax/post (1:country 2:ZEP)
46
'xmlrpc' => 1, // Validate on xmlrpc (1:country 2:close)
47
'proxy' => NULL, // $_SERVER variables for IPs
48
- 'reclogs' => 1, // 1:blocked 2:passed 3:unauth 4:auth 5:all 6:blocked/passed
49
'postkey' => 'action,comment,log,pwd,FILES', // Keys in $_POST, $_FILES
50
// since version 1.3.1
51
- 'maxlogs' => 100, // Max number of rows for validation logs
52
'backup' => NULL, // Absolute path to directory for backup logs
53
// since version 2.1.0
54
'plugins' => 0, // Validate on wp-content/plugins (1:country 2:ZEP)
55
'themes' => 0, // Validate on wp-content/themes (1:country 2:ZEP)
@@ -383,7 +385,6 @@ class IP_Geo_Block_Opts {
383
}
384
385
if ( version_compare( $version, '3.0.5' ) < 0 ) {
386
- $settings['validation' ]['maxlogs'] = 500;
387
$settings['live_update'] = $default['live_update'];
388
}
389
@@ -411,6 +412,11 @@ class IP_Geo_Block_Opts {
411
IP_Geo_Block_Logs::reset_sqlite_db();
412
}
413
414
// save package version number
415
$settings['version'] = IP_Geo_Block::VERSION;
416
}
16
*
17
*/
18
private static $option_table = array(
19
+ 'version' => '3.0.12',// Version of this table (not package)
20
// since version 1.0
21
'providers' => array(), // List of providers and API keys
22
'comment' => array( // Message on the comment form
29
'timeout' => 30, // Timeout in second
30
'response_code' => 403, // Response code
31
'save_statistics' => TRUE, // Record validation statistics
32
+ 'clean_uninstall' => TRUE, // Remove all savings from DB
33
// since version 1.1
34
+ 'cache_hold' => FALSE, // Record IP address cache
35
'cache_time' => HOUR_IN_SECONDS, // @since 3.5
36
// since version 3.0.0
37
'cache_time_gc' => 900, // Cache garbage collection time
45
'ajax' => 0, // Validate on ajax/post (1:country 2:ZEP)
46
'xmlrpc' => 1, // Validate on xmlrpc (1:country 2:close)
47
'proxy' => NULL, // $_SERVER variables for IPs
48
+ 'reclogs' => 0, // 1:blocked 2:passed 3:unauth 4:auth 5:all 6:blocked/passed
49
'postkey' => 'action,comment,log,pwd,FILES', // Keys in $_POST, $_FILES
50
// since version 1.3.1
51
+ 'maxlogs' => 500, // Max number of rows for validation logs
52
'backup' => NULL, // Absolute path to directory for backup logs
53
+ // since version 3.0.12
54
+ 'explogs' => WEEK_IN_SECONDS, // expiration time for logs
55
// since version 2.1.0
56
'plugins' => 0, // Validate on wp-content/plugins (1:country 2:ZEP)
57
'themes' => 0, // Validate on wp-content/themes (1:country 2:ZEP)
385
}
386
387
if ( version_compare( $version, '3.0.5' ) < 0 ) {
388
$settings['live_update'] = $default['live_update'];
389
}
390
412
IP_Geo_Block_Logs::reset_sqlite_db();
413
}
414
415
+ if ( version_compare( $version, '3.0.12' ) < 0 ) {
416
+ $settings['validation']['maxlogs'] = $default['validation']['maxlogs'];
417
+ $settings['validation']['explogs'] = $default['validation']['explogs'];
418
+ }
419
+
420
// save package version number
421
$settings['version'] = IP_Geo_Block::VERSION;
422
}
classes/class-ip-geo-block.php CHANGED
@@ -15,7 +15,7 @@ class IP_Geo_Block {
15
* Unique identifier for this plugin.
16
*
17
*/
18
- const VERSION = '3.0.11';
19
const GEOAPI_NAME = 'ip-geo-api';
20
const PLUGIN_NAME = 'ip-geo-block';
21
const OPTION_NAME = 'ip_geo_block_settings';
15
* Unique identifier for this plugin.
16
*
17
*/
18
+ const VERSION = '3.0.12';
19
const GEOAPI_NAME = 'ip-geo-api';
20
const PLUGIN_NAME = 'ip-geo-block';
21
const OPTION_NAME = 'ip_geo_block_settings';
ip-geo-block.php CHANGED
@@ -13,7 +13,7 @@
13
* Plugin Name: IP Geo Block
14
* Plugin URI: http://wordpress.org/plugins/ip-geo-block/
15
* Description: It blocks any spams, login attempts and malicious access to the admin area posted from outside your nation, and also prevents zero-day exploit.
16
- * Version: 3.0.11
17
* Author: tokkonopapa
18
* Author URI: http://www.ipgeoblock.com/
19
* Text Domain: ip-geo-block
13
* Plugin Name: IP Geo Block
14
* Plugin URI: http://wordpress.org/plugins/ip-geo-block/
15
* Description: It blocks any spams, login attempts and malicious access to the admin area posted from outside your nation, and also prevents zero-day exploit.
16
+ * Version: 3.0.12
17
* Author: tokkonopapa
18
* Author URI: http://www.ipgeoblock.com/
19
* Text Domain: ip-geo-block
languages/ip-geo-block-ja.mo CHANGED
Binary file
languages/ip-geo-block-ja.po CHANGED
@@ -2,10 +2,10 @@
2
# This file is distributed under the same license as the IP Geo Block package.
3
msgid ""
4
msgstr ""
5
- "Project-Id-Version: IP Geo Block 3.0.11\n"
6
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ip-geo-block\n"
7
- "POT-Creation-Date: 2018-05-06 15:31+0900\n"
8
- "PO-Revision-Date: 2018-05-06 15:32+0900\n"
9
"Language-Team: \n"
10
"MIME-Version: 1.0\n"
11
"Content-Type: text/plain; charset=UTF-8\n"
@@ -28,151 +28,169 @@ msgstr ""
28
"自国以外から投稿されるスパム、ログインフォーム、さらにゼロデイ攻撃を含む管理領"
29
"域への悪意あるアクセスからサイトを守ります。"
30
31
- #: admin/class-ip-geo-block-admin.php:268
32
msgid "Import settings ?"
33
msgstr "設定をインポートしますか?"
34
35
- #: admin/class-ip-geo-block-admin.php:269
36
msgid "Create table ?"
37
msgstr "テーブルを作成しますか?"
38
39
- #: admin/class-ip-geo-block-admin.php:270
40
msgid "Delete table ?"
41
msgstr "テーブルを削除しますか?"
42
43
- #: admin/class-ip-geo-block-admin.php:271
44
msgid "Clear statistics ?"
45
msgstr "統計をクリアしますか?"
46
47
- #: admin/class-ip-geo-block-admin.php:272
48
msgid "Clear cache ?"
49
msgstr "キャッシュをクリアしますか?"
50
51
- #: admin/class-ip-geo-block-admin.php:273
52
msgid "Clear logs ?"
53
msgstr "ログをクリアしますか?"
54
55
- #: admin/class-ip-geo-block-admin.php:274
56
msgid "ajax for logged-in user"
57
msgstr "認証済ユーザー用 ajax"
58
59
- #: admin/class-ip-geo-block-admin.php:275
60
msgid "ajax for non logged-in user"
61
msgstr "未認証ユーザー用 ajax"
62
63
- #: admin/class-ip-geo-block-admin.php:276
64
#, php-format
65
msgid "[Found: %d]"
66
msgstr "[見つかった数:%d]"
67
68
- #: admin/class-ip-geo-block-admin.php:277
69
#, php-format
70
msgid "Find and verify `%s` on &#8220;Logs&#8221; tab."
71
msgstr "ログから `%s` を検索し、検証して下さい。"
72
73
- #: admin/class-ip-geo-block-admin.php:278
74
msgid "This feature is available with HTML5 compliant browsers."
75
msgstr "HTML5準拠のブラウザでのみ機能します。"
76
77
- #: admin/class-ip-geo-block-admin.php:279
78
msgid "The selected row cannot be found in the visible area."
79
msgstr "可視領域に選択された行が見つかりません。"
80
81
- #: admin/class-ip-geo-block-admin.php:280
82
- #: admin/class-ip-geo-block-admin.php:1478
83
#, php-format
84
msgid "An error occurred while executing the ajax command `%s`."
85
msgstr "Ajaxコマンド `%s` の実行中にエラーが発生しました。"
86
87
- #: admin/class-ip-geo-block-admin.php:284
88
msgid "No data available in table"
89
msgstr "テーブルにデータがありません"
90
91
- #: admin/class-ip-geo-block-admin.php:285
92
msgid "No matching records found"
93
msgstr "一致するレコードがありません"
94
95
- #: admin/class-ip-geo-block-admin.php:286 admin/includes/tab-geolocation.php:70
96
msgid "IP address"
97
msgstr "IPアドレス"
98
99
- #: admin/class-ip-geo-block-admin.php:287
100
msgid "Code"
101
msgstr "国"
102
103
- #: admin/class-ip-geo-block-admin.php:288
104
msgid "ASN"
105
msgstr "AS番号"
106
107
- #: admin/class-ip-geo-block-admin.php:289
108
msgid "Host name"
109
msgstr "ホスト名"
110
111
- #: admin/class-ip-geo-block-admin.php:290
112
msgid "Target"
113
msgstr "検証対象"
114
115
- #: admin/class-ip-geo-block-admin.php:291
116
msgid "Failure / Total"
117
msgstr "ログイン失敗/総計"
118
119
- #: admin/class-ip-geo-block-admin.php:292
120
msgid "Elapsed[sec]"
121
msgstr "経過 [秒]"
122
123
- #: admin/class-ip-geo-block-admin.php:293
124
msgid "Time"
125
msgstr "日時"
126
127
- #: admin/class-ip-geo-block-admin.php:294
128
msgid "Result"
129
msgstr "検証結果"
130
131
- #: admin/class-ip-geo-block-admin.php:295
132
msgid "Request"
133
msgstr "リクエスト"
134
135
- #: admin/class-ip-geo-block-admin.php:296
136
msgid "User agent"
137
msgstr "ユーザー・エージェント"
138
139
- #: admin/class-ip-geo-block-admin.php:297
140
msgid "HTTP headers"
141
msgstr "HTTP ヘッダー"
142
143
- #: admin/class-ip-geo-block-admin.php:298
144
msgid "$_POST data"
145
msgstr "$_POST データ"
146
147
- #: admin/class-ip-geo-block-admin.php:324
148
msgid "Contribute on GitHub"
149
msgstr "開発に参加"
150
151
- #: admin/class-ip-geo-block-admin.php:338
152
- #: admin/class-ip-geo-block-admin.php:446
153
- #: admin/class-ip-geo-block-admin.php:663
154
msgid "Settings"
155
msgstr "設定"
156
157
- #: admin/class-ip-geo-block-admin.php:424
158
#: admin/class-ip-geo-block-admin.php:425
159
- #: admin/class-ip-geo-block-admin.php:435
160
#: admin/class-ip-geo-block-admin.php:436
161
- #: admin/class-ip-geo-block-admin.php:445
162
- #: admin/class-ip-geo-block-admin.php:454
163
msgid "IP Geo Block"
164
msgstr "IP Geo Block"
165
166
- #: admin/class-ip-geo-block-admin.php:455
167
- #: admin/class-ip-geo-block-admin.php:668
168
msgid "Site List"
169
msgstr "サイト一覧"
170
171
- #: admin/class-ip-geo-block-admin.php:484
172
msgid "You need WordPress 3.7+."
173
msgstr "WordPress 3.7&thinsp;以上が必要です。"
174
175
- #: admin/class-ip-geo-block-admin.php:490
176
#, php-format
177
msgid ""
178
"Now downloading geolocation databases in background. After a little while, "
@@ -183,7 +201,7 @@ msgstr ""
183
"た後、あなたの国コードと[<strong>マッチング規則</strong>]を[<a href=\"%s\">"
184
"検証ルールの設定</a>]で確認して下さい。"
185
186
- #: admin/class-ip-geo-block-admin.php:496
187
#, php-format
188
msgid ""
189
"The &#8220;<strong>Matching rule</strong>&#8221; is not set properly. Please "
@@ -192,11 +210,11 @@ msgstr ""
192
"[<strong>マッチング規則</strong>]が正しく設定されていません。[<a href=\"%s"
193
"\">検証ルールの設定</a>]を確認して下さい。"
194
195
- #: admin/class-ip-geo-block-admin.php:505
196
msgid "Local database and matching rule have been updated."
197
msgstr "ローカル・データベースとマッチング規則を更新しました。"
198
199
- #: admin/class-ip-geo-block-admin.php:516
200
msgid ""
201
"Once you logout, you will be unable to login again because the number of "
202
"login attempts reaches the limit."
@@ -204,7 +222,7 @@ msgstr ""
204
"あなたのIPアドレスのログイン試行可能回数がリミットに達したため、ログアウトする"
205
"と再びログインする事が出来なくなります。"
206
207
- #: admin/class-ip-geo-block-admin.php:518
208
#, php-format
209
msgid ""
210
"Please execute \"<strong>Clear cache</strong>\" on <a href=\"%s\">Statistics "
@@ -213,7 +231,7 @@ msgstr ""
213
"<a href=\"%s\">[統計]タブ</a>の[<strong>キャッシュのクリア</strong>]を実行"
214
"し、ロックアウトを回避してください。"
215
216
- #: admin/class-ip-geo-block-admin.php:528
217
msgid ""
218
"Once you logout, you will be unable to login again because your country code "
219
"or IP address is in the blacklist."
@@ -221,7 +239,7 @@ msgstr ""
221
"あなたの国コードまたはIPアドレスがブラックリストに含まれているため、ログアウト"
222
"すると再びログインする事が出来なくなります。"
223
224
- #: admin/class-ip-geo-block-admin.php:529
225
msgid ""
226
"Once you logout, you will be unable to login again because your country code "
227
"or IP address is not in the whitelist."
@@ -229,12 +247,12 @@ msgstr ""
229
"あなたの国コードまたはIPアドレスがホワイトリストに含まれていないため、ログアウ"
230
"トすると再びログインする事が出来なくなります。"
231
232
- #: admin/class-ip-geo-block-admin.php:533
233
#, php-format
234
msgid "Please check your &#8220;%sValidation rule settings%s&#8221;."
235
msgstr "[%s検証ルールの設定%s]を確認して下さい。"
236
237
- #: admin/class-ip-geo-block-admin.php:537
238
#, php-format
239
msgid ""
240
"Please confirm your local geolocation databases at &#8220;%sLocal database "
@@ -244,7 +262,7 @@ msgstr ""
244
"[%sローカル・データベースの設定%s]で位置情報データベースを確認し、[%sキャッ"
245
"シュの統計%s]でキャッシュされているあなたのIPアドレスを削除して下さい。"
246
247
- #: admin/class-ip-geo-block-admin.php:558
248
msgid ""
249
"&#8220;mu-plugins&#8221; (ip-geo-block-mu.php) at &#8220;Validation "
250
"timing&#8221; is imcompatible with <strong>IP Geo Allow</strong>. Please "
@@ -254,32 +272,32 @@ msgstr ""
254
"されていますが、<strong>IP Geo Allow</strong> と互換性がありません。「&#8220;"
255
"init&#8221; アクション・フック」を選択してください。"
256
257
- #: admin/class-ip-geo-block-admin.php:664
258
msgid "Statistics"
259
msgstr "統計"
260
261
- #: admin/class-ip-geo-block-admin.php:665
262
msgid "Logs"
263
msgstr "ログ"
264
265
- #: admin/class-ip-geo-block-admin.php:666
266
msgid "Search"
267
msgstr "検索"
268
269
- #: admin/class-ip-geo-block-admin.php:667
270
msgid "Attribution"
271
msgstr "リンク"
272
273
- #: admin/class-ip-geo-block-admin.php:684
274
- #: admin/class-ip-geo-block-admin.php:701
275
msgid "Network wide"
276
msgstr "ネットワーク管理"
277
278
- #: admin/class-ip-geo-block-admin.php:714
279
msgid "Toggle all"
280
msgstr "全てを開閉"
281
282
- #: admin/class-ip-geo-block-admin.php:717
283
msgid ""
284
"Independent of &#8220;Statistics and Logs settings&#8221;, you can see all "
285
"the requests validated by this plugin in almost real time."
@@ -287,23 +305,23 @@ msgstr ""
287
"[統計とログの設定]にかかわらず、このプラグインによる検証結果のすべてを、ほぼ"
288
"リアルタイムに表示します。"
289
290
- #: admin/class-ip-geo-block-admin.php:717 admin/includes/tab-accesslog.php:39
291
msgid "Live update"
292
msgstr "ライブアップデート"
293
294
- #: admin/class-ip-geo-block-admin.php:721
295
msgid "Open a new window on clicking the link in the chart."
296
msgstr "チャート内のリンクをクリックすると、新しいウィンドウが開きます。"
297
298
- #: admin/class-ip-geo-block-admin.php:721
299
msgid "Open a new window"
300
msgstr "別窓で開く"
301
302
- #: admin/class-ip-geo-block-admin.php:744
303
msgid "Thanks for providing these great services for free."
304
msgstr "これらのすばらしいサービスの提供元に、敬意と感謝の意を表します!"
305
306
- #: admin/class-ip-geo-block-admin.php:745
307
msgid ""
308
"(Most browsers will redirect you to each site <a href=\"http://www."
309
"ipgeoblock.com/etc/referer.html\" title=\"Referer Checker\">without referrer "
@@ -313,33 +331,33 @@ msgstr ""
313
"\" title=\"Referer Checker\">参照元を残さずにリンク先にリダイレクトできます</"
314
"a>。)"
315
316
- #: admin/class-ip-geo-block-admin.php:750
317
msgid "Back to top"
318
msgstr "トップに戻る"
319
320
- #: admin/class-ip-geo-block-admin.php:842
321
msgid "Enable"
322
msgstr "有効"
323
324
- #: admin/class-ip-geo-block-admin.php:857
325
msgid "Select one"
326
msgstr "何れかを選択"
327
328
- #: admin/class-ip-geo-block-admin.php:1272
329
msgid "You do not have sufficient permissions to access this page."
330
msgstr "このページにアクセスするための十分な権限がありません。"
331
332
- #: admin/class-ip-geo-block-admin.php:1299
333
#: admin/includes/class-admin-rewrite.php:194
334
- #: classes/class-ip-geo-block-cron.php:212
335
- #: classes/class-ip-geo-block-cron.php:316
336
- #: classes/class-ip-geo-block-cron.php:390
337
- #: classes/class-ip-geo-block-opts.php:446
338
#, php-format
339
msgid "Unable to write <code>%s</code>. Please check the permission."
340
msgstr "<code>%s</code> に書き込めません。パーミッションをチェックして下さい。"
341
342
- #: admin/class-ip-geo-block-admin.php:1329
343
msgid "Settings saved."
344
msgstr "設定を保存しました。"
345
@@ -352,20 +370,20 @@ msgstr "利用不可"
352
msgid "UNKNOWN"
353
msgstr "不明"
354
355
- #: admin/includes/class-admin-ajax.php:187
356
#, php-format
357
msgid "The user %s (user ID: %d) is in use."
358
msgstr "ユーザー %s(ユーザーID:%d)が使用中です。"
359
360
- #: admin/includes/class-admin-ajax.php:436
361
#, php-format
362
msgid ""
363
"illegal format at %s. Please delete the corresponding line and try again."
364
msgstr "%sは誤ったフォーマットです。該当行を削除し、再実行してください。"
365
366
#: admin/includes/class-admin-rewrite.php:168
367
- #: classes/class-ip-geo-block-cron.php:207
368
- #: classes/class-ip-geo-block-cron.php:385
369
#, php-format
370
msgid "Unable to read <code>%s</code>. Please check the permission."
371
msgstr "<code>%s</code> が読めません。パーミッションをチェックして下さい。"
@@ -386,7 +404,7 @@ msgid "Validation logs"
386
msgstr "検証のログ"
387
388
#: admin/includes/tab-accesslog.php:19 admin/includes/tab-settings.php:765
389
- #: admin/includes/tab-settings.php:1379
390
msgid "Help"
391
msgstr "ヘルプ"
392
@@ -422,36 +440,36 @@ msgstr "対象を選択"
422
msgid "Search in logs"
423
msgstr "ログを検索"
424
425
- #: admin/includes/tab-accesslog.php:96 admin/includes/tab-statistics.php:235
426
msgid "Reset"
427
msgstr "リセット"
428
429
- #: admin/includes/tab-accesslog.php:104 admin/includes/tab-statistics.php:242
430
msgid "Bulk action"
431
msgstr "選択して実行"
432
433
- #: admin/includes/tab-accesslog.php:115 admin/includes/tab-statistics.php:253
434
msgid "Remove entries by IP address"
435
msgstr "指定のIPアドレスでエントリを削除"
436
437
- #: admin/includes/tab-accesslog.php:116 admin/includes/tab-statistics.php:254
438
msgid "Add IP address to &#8220;Whitelist&#8221;"
439
msgstr "IPアドレスをホワイトリストへ追加"
440
441
- #: admin/includes/tab-accesslog.php:117 admin/includes/tab-statistics.php:255
442
msgid "Add IP address to &#8220;Blacklist&#8221;"
443
msgstr "IPアドレスをブラックリストへ追加"
444
445
- #: admin/includes/tab-accesslog.php:118 admin/includes/tab-statistics.php:256
446
msgid "Add AS number to &#8220;Whitelist&#8221;"
447
msgstr "AS番号をホワイトリストへ追加"
448
449
- #: admin/includes/tab-accesslog.php:119 admin/includes/tab-statistics.php:257
450
msgid "Add AS number to &#8220;Blacklist&#8221;"
451
msgstr "AS番号をブラックリストへ追加"
452
453
#: admin/includes/tab-accesslog.php:121 admin/includes/tab-network.php:56
454
- #: admin/includes/tab-statistics.php:259
455
msgid "Apply"
456
msgstr "実行する"
457
@@ -460,7 +478,7 @@ msgid "Clear logs"
460
msgstr "ログをクリア"
461
462
#: admin/includes/tab-accesslog.php:137 admin/includes/tab-statistics.php:173
463
- #: admin/includes/tab-statistics.php:206 admin/includes/tab-statistics.php:274
464
msgid "Clear all"
465
msgstr "全てをクリア"
466
@@ -468,22 +486,23 @@ msgstr "全てをクリア"
468
msgid "Export logs"
469
msgstr "ログをエクスポート"
470
471
- #: admin/includes/tab-accesslog.php:153 admin/includes/tab-settings.php:1567
472
msgid "Export to the local file"
473
msgstr "ローカル・ファイルへエクスポートする"
474
475
- #: admin/includes/tab-accesslog.php:153
476
msgid "Export csv"
477
msgstr "CSVへエクスポート"
478
479
#: admin/includes/tab-accesslog.php:174 admin/includes/tab-network.php:114
480
- #: admin/includes/tab-statistics.php:401
481
#, php-format
482
- msgid "[ %sRecord &#8220;Logs&#8221;%s ] is desabled."
483
msgstr "[%s検証のログを記録%s]が無効です。"
484
485
#: admin/includes/tab-accesslog.php:175 admin/includes/tab-network.php:115
486
- #: admin/includes/tab-statistics.php:402
487
msgid ""
488
"Please set the proper condition to record and analyze the validation logs."
489
msgstr "検証のログを記録し分析するためには、適切な条件を設定して下さい。"
@@ -502,14 +521,15 @@ msgstr "位置情報サービス"
502
503
#: admin/includes/tab-geolocation.php:86 admin/includes/tab-settings.php:1101
504
msgid ""
505
- "<dfn title=\"IP address is always encrypted on recording in logs and cache. "
506
"Moreover, this option makes the IP address anonymous and restricted on "
507
"sending to the 3rd parties such as geolocation APIs or whois service."
508
- "\">Privacy friendly</dfn>"
509
msgstr ""
510
- "<dfn title=\"IPアドレスは、ログとキャッシュに記録される際に常に暗号化されま"
511
"す。このオプションはさらに、IPアドレスを匿名化し、位置情報サービスやwhoisサー"
512
- "ビスなどの第三者への送信を制限します。\">プライバシーに配慮</dfn>"
513
514
#: admin/includes/tab-geolocation.php:101
515
msgid "Find geolocation"
@@ -794,7 +814,7 @@ msgstr ""
794
"意のあるアップロード防止</dfn>"
795
796
#: admin/includes/tab-settings.php:318 admin/includes/tab-settings.php:499
797
- #: admin/includes/tab-settings.php:623 admin/includes/tab-settings.php:1163
798
msgid "Disable"
799
msgstr "無効"
800
@@ -1214,54 +1234,58 @@ msgstr "プライバシーと記録の設定"
1214
1215
#: admin/includes/tab-settings.php:1117
1216
msgid ""
1217
- "<dfn title=\"This option enables to record the number blocked countries and "
1218
- "the number of blocked requests per day.\">Record &#8220;Statistics&#8221;</"
1219
- "dfn>"
1220
msgstr ""
1221
- "<dfn title=\"このオプションは、国別遮断数や1日あたりの遮断数など、統計の記録を"
1222
- "有効にします。\">検証の統計を記録</dfn>"
1223
1224
- #: admin/includes/tab-settings.php:1134
1225
- msgid "Maximum period for &#8220;Statistics&#8221; (days)"
1226
- msgstr "記録する統計の最大期間(日)"
1227
1228
- #: admin/includes/tab-settings.php:1152
1229
msgid ""
1230
"<dfn title=\"This option enables to record the validation logs including IP "
1231
- "address.\">Record &#8220;Logs&#8221;</dfn>"
1232
msgstr ""
1233
"<dfn title=\"このオプションは、IPアドレスを含む検証ログの記録を有効にしま"
1234
"す。\">検証のログを記録</dfn>"
1235
1236
- #: admin/includes/tab-settings.php:1164
1237
- msgid "When requests blocked"
1238
msgstr "遮断時に記録"
1239
1240
- #: admin/includes/tab-settings.php:1165
1241
- msgid "When requests passed"
1242
msgstr "通過時に記録"
1243
1244
- #: admin/includes/tab-settings.php:1166
1245
msgid "When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;"
1246
msgstr "遮断時または遮断対象国の通過時に記録"
1247
1248
- #: admin/includes/tab-settings.php:1167
1249
msgid "Unauthenticated visitor"
1250
msgstr "未認証の訪問者を記録"
1251
1252
- #: admin/includes/tab-settings.php:1168
1253
msgid "Authenticated user"
1254
msgstr "認証済のユーザーを記録"
1255
1256
- #: admin/includes/tab-settings.php:1169
1257
msgid "All the validation"
1258
msgstr "すべての検証を記録"
1259
1260
- #: admin/includes/tab-settings.php:1178
1261
- msgid "Maximum entries of &#8220;Logs&#8221;"
1262
- msgstr "記録するログの最大エントリ数"
1263
-
1264
- #: admin/includes/tab-settings.php:1195
1265
msgid ""
1266
"<dfn title=\"e.g. action, comment, log, pwd, FILES\">$_POST keys to be "
1267
"recorded with their values in &#8220;Logs&#8221;</dfn>"
@@ -1269,7 +1293,20 @@ msgstr ""
1269
"<dfn title=\"例)action, comment, log, pwd, FILES\">ログに記録する際に内容を展"
1270
"開する$_POSTのキー</dfn>"
1271
1272
- #: admin/includes/tab-settings.php:1214
1273
msgid ""
1274
"<dfn title=\"Select SQLite database source.\">Database source of SQLite for "
1275
"&#8220;Live update&#8221;</dfn>"
@@ -1277,19 +1314,19 @@ msgstr ""
1277
"<dfn title=\"SQLiteデータベース・ソースを選択します。\">ライブアップデート用"
1278
"SQLiteデータベース・ソースの選択</dfn>"
1279
1280
- #: admin/includes/tab-settings.php:1226
1281
msgid "Ordinary file"
1282
msgstr "通常のファイル"
1283
1284
- #: admin/includes/tab-settings.php:1227
1285
msgid "In-Memory"
1286
msgstr "イン・メモリ"
1287
1288
- #: admin/includes/tab-settings.php:1230
1289
msgid "PDO_SQLITE driver not available"
1290
msgstr "PDO_SQLITEドライバが利用出来ません。"
1291
1292
- #: admin/includes/tab-settings.php:1231
1293
msgid ""
1294
"It takes a few tens of milliseconds as overhead. It can be safely used "
1295
"without conflict with other plugins."
@@ -1297,7 +1334,7 @@ msgstr ""
1297
"数十ミリ秒のオーバーヘッドが生じますが、他のプラグインと競合することなく、安全"
1298
"に使用できます。"
1299
1300
- #: admin/includes/tab-settings.php:1232
1301
msgid ""
1302
"It takes a few milliseconds as overhead. There is a possibility of conflict "
1303
"with other plugins using this method."
@@ -1305,36 +1342,15 @@ msgstr ""
1305
"数ミリ秒のオーバーヘッドが生じます。同手法を用いている他のプラグインと競合する"
1306
"可能性があります。"
1307
1308
- #: admin/includes/tab-settings.php:1241
1309
msgid "Reset database source of &#8220;Live update&#8221;"
1310
msgstr "ライブアップデートのデータソースをリセットする"
1311
1312
- #: admin/includes/tab-settings.php:1249
1313
msgid "Reset now"
1314
msgstr "今すぐリセット"
1315
1316
- #: admin/includes/tab-settings.php:1259
1317
- msgid ""
1318
- "<dfn title=\"This option enables to record the IP address , country code and "
1319
- "login fail counter into the cache on database to minimize the impact on site "
1320
- "speed.\">Record &#8220;IP address cache&#8221;</dfn>"
1321
- msgstr ""
1322
- "<dfn title=\"このオプションは、IPアドレス、国コード、ログイン失敗回数等の"
1323
- "キャッシュへの記録を有効にし、サイト速度への影響を最小化します。\">IPアドレス"
1324
- "をキャッシュに記録</dfn>"
1325
-
1326
- #: admin/includes/tab-settings.php:1275
1327
- #, php-format
1328
- msgid ""
1329
- "<dfn title=\"If user authentication fails consecutively %d times, subsequent "
1330
- "login will also be prohibited for this and garbage collection period."
1331
- "\">Expiration time [sec] for &#8220;IP address cache&#8221;</dfn>"
1332
- msgstr ""
1333
- "<dfn title=\"ユーザ認証が連続%d回失敗した場合も、以降のログインがこの期間だけ"
1334
- "(ガベージコレクション周期を含む)禁止されます。\">キャッシュの有効時間 "
1335
- "[sec]</dfn>"
1336
-
1337
- #: admin/includes/tab-settings.php:1289 admin/includes/tab-settings.php:1411
1338
msgid ""
1339
"Task could not be found in WP-Cron. Please try to deactivate this plugin "
1340
"once and activate again."
@@ -1342,26 +1358,43 @@ msgstr ""
1342
"WP-Cronのタスクが見つかりません。 一旦このプラグインを停止させた後、再度、有効"
1343
"化してみてください。"
1344
1345
- #: admin/includes/tab-settings.php:1295
1346
msgid ""
1347
"<dfn title=\"This option enables to schedule the WP-Cron event to remove the "
1348
- "expired entries of cache.\">Garbage collection period [sec] for &#8220;IP "
1349
- "address cache&#8221;</dfn>"
1350
msgstr ""
1351
- "<dfn title=\"このオプションは、有効期限の切れたキャッシュのエントリーを削除す"
1352
- "るWP-Cronイベントの起動周期を設定します。\">ガベージコレクション周期 [秒]</"
1353
- "dfn>"
1354
1355
- #: admin/includes/tab-settings.php:1304 admin/includes/tab-settings.php:1428
1356
#, php-format
1357
msgid "Next schedule: %s"
1358
msgstr "次回日時:%s"
1359
1360
- #: admin/includes/tab-settings.php:1313
1361
msgid "Geolocation API settings"
1362
msgstr "位置情報APIの設定"
1363
1364
- #: admin/includes/tab-settings.php:1334
1365
msgid ""
1366
"<dfn title=\"IP address cache and local database are scanned at the top "
1367
"priority.\">API selection and key settings</dfn>"
@@ -1369,11 +1402,11 @@ msgstr ""
1369
"<dfn title=\"IPアドレスのキャッシュとローカルのデータベースが最優先で検索され"
1370
"ます。\">APIの選択とキーの設定</dfn>"
1371
1372
- #: admin/includes/tab-settings.php:1354
1373
msgid "Timeout for network API [sec]"
1374
msgstr "ネットワークAPIのタイムアウト[秒]"
1375
1376
- #: admin/includes/tab-settings.php:1372
1377
#, php-format
1378
msgid ""
1379
"Can not find geolocation API libraries in <code>%s</code>. It seems to have "
@@ -1398,60 +1431,60 @@ msgstr ""
1398
"Geo Block\">FAQ</a> を参照し、適切な書き込み権限と共に <code>ip-geo-api</"
1399
"code> をインストールしてください。"
1400
1401
- #: admin/includes/tab-settings.php:1379
1402
msgid "Local database settings"
1403
msgstr "ローカル・データベースの設定"
1404
1405
- #: admin/includes/tab-settings.php:1393
1406
msgid "database"
1407
msgstr "ファイル"
1408
1409
- #: admin/includes/tab-settings.php:1394 classes/class-ip-geo-block-cron.php:414
1410
#, php-format
1411
msgid "Last update: %s"
1412
msgstr "最終更新:%s"
1413
1414
- #: admin/includes/tab-settings.php:1417
1415
msgid "Auto updating (once a month)"
1416
msgstr "自動更新(月1回)"
1417
1418
- #: admin/includes/tab-settings.php:1435
1419
msgid "Download database"
1420
msgstr "データベースのダウンロード"
1421
1422
- #: admin/includes/tab-settings.php:1443
1423
msgid "Download now"
1424
msgstr "今すぐダウンロード"
1425
1426
- #: admin/includes/tab-settings.php:1454
1427
msgid "Submission settings"
1428
msgstr "投稿時の設定"
1429
1430
- #: admin/includes/tab-settings.php:1466
1431
msgid "The whole will be wrapped by &lt;p&gt; tag. Allowed tags: "
1432
msgstr "全体が&lt;p&gt;タグで囲われます。使用可能タグ:"
1433
1434
- #: admin/includes/tab-settings.php:1466
1435
msgid "Message on comment form"
1436
msgstr "投稿フォーム上のメッセージ"
1437
1438
- #: admin/includes/tab-settings.php:1478
1439
msgid "None"
1440
msgstr "なし"
1441
1442
- #: admin/includes/tab-settings.php:1479
1443
msgid "Top"
1444
msgstr "上部"
1445
1446
- #: admin/includes/tab-settings.php:1480
1447
msgid "Bottom"
1448
msgstr "下部"
1449
1450
- #: admin/includes/tab-settings.php:1491
1451
msgid "Plugin settings"
1452
msgstr "プラグインの設定"
1453
1454
- #: admin/includes/tab-settings.php:1504
1455
msgid ""
1456
"<dfn title=\"Synchronize all settings over the network wide.\">Network wide "
1457
"settings</dfn>"
@@ -1459,11 +1492,7 @@ msgstr ""
1459
"<dfn title=\"全ての設定をネットワーク全体で同期させます。\">ネットワーク内で設"
1460
"定を同期</dfn>"
1461
1462
- #: admin/includes/tab-settings.php:1522
1463
- msgid "Remove all settings at uninstallation"
1464
- msgstr "アンインストール時に全設定を削除"
1465
-
1466
- #: admin/includes/tab-settings.php:1540
1467
msgid ""
1468
"<dfn title=\"Valid key for Google Maps JavaScript API\">Google Maps API key</"
1469
"dfn>"
@@ -1471,7 +1500,7 @@ msgstr ""
1471
"<dfn title=\"Google Maps JavaScript API に有効なキー\">Google Maps API キー</"
1472
"dfn>"
1473
1474
- #: admin/includes/tab-settings.php:1554
1475
msgid ""
1476
"You need to click the &#8220;Save Changes&#8221; button for imported "
1477
"settings to take effect."
@@ -1479,37 +1508,37 @@ msgstr ""
1479
"インポートされた設定を有効にするには、[変更を保存]ボタンをクリックする必要が"
1480
"あります。"
1481
1482
- #: admin/includes/tab-settings.php:1560
1483
msgid "Export / Import settings"
1484
msgstr "設定のエクスポート、インポート"
1485
1486
- #: admin/includes/tab-settings.php:1567
1487
msgid "Export settings"
1488
msgstr "エクスポート"
1489
1490
- #: admin/includes/tab-settings.php:1568
1491
msgid "Import from the local file"
1492
msgstr "ローカル・ファイルからインポートします"
1493
1494
- #: admin/includes/tab-settings.php:1568
1495
msgid "Import settings"
1496
msgstr "インポート"
1497
1498
- #: admin/includes/tab-settings.php:1577
1499
msgid "Import pre-defined settings"
1500
msgstr "プリセットのインポート"
1501
1502
- #: admin/includes/tab-settings.php:1584
1503
msgid ""
1504
"Import the default settings to revert to the &#8220;Right after "
1505
"installing&#8221; state"
1506
msgstr "インストール直後の状態に戻すための設定値をインポートします"
1507
1508
- #: admin/includes/tab-settings.php:1584
1509
msgid "Default settings"
1510
msgstr "初期設定"
1511
1512
- #: admin/includes/tab-settings.php:1585
1513
msgid ""
1514
"Import the preferred settings mainly by enabling Zero-day Exploit Prevention "
1515
"for the &#8220;Back-end target settings&#8221;"
@@ -1517,49 +1546,49 @@ msgstr ""
1517
"「ゼロデイ攻撃の遮断」など、主に[バックエンドの設定]の推奨設定をインポートし"
1518
"ます。"
1519
1520
- #: admin/includes/tab-settings.php:1585
1521
msgid "Best for Back-end"
1522
msgstr "バックエンドの推奨設定"
1523
1524
- #: admin/includes/tab-settings.php:1595
1525
msgid "Delete DB tables for this plugin"
1526
msgstr "このプラグイン用データベース・テーブルの削除"
1527
1528
- #: admin/includes/tab-settings.php:1603
1529
msgid "Delete now"
1530
msgstr "今すぐ削除"
1531
1532
- #: admin/includes/tab-settings.php:1611
1533
msgid "Create DB tables for this plugin"
1534
msgstr "このプラグイン用データベース・テーブルの作成"
1535
1536
- #: admin/includes/tab-settings.php:1619
1537
msgid "Create now"
1538
msgstr "今すぐ作成"
1539
1540
- #: admin/includes/tab-settings.php:1629
1541
msgid ""
1542
"<dfn title=\"When an unexpected blocking has occurred, please press the "
1543
"button to find the blocked request in the dumped information which may help "
1544
- "to solve the issue.\">Debug information</dfn><br />[ <a rel=\"noreferrer\" "
1545
- "href=\"https://wordpress.org/support/plugin/ip-geo-block\" title=\"WordPress "
1546
- "&#8250; Support &raquo; IP Geo Block\">support forum</a> ]"
1547
msgstr ""
1548
- "<dfn title=\"予期しない遮断が発生した場合は、ダンプされたデバッグ情報を元にリ"
1549
- "クエストの遮断理由を推定し、問題解決に役立ててください。\">デバッグ情報</"
1550
- "dfn><br />[ <a rel=\"noreferrer\" href=\"https://wordpress.org/support/plugin/"
1551
- "ip-geo-block\" title=\"WordPress &#8250; Support &raquo; IP Geo Block\">サポー"
1552
- "ト・フォーラム</a> ]"
1553
1554
- #: admin/includes/tab-settings.php:1636
1555
msgid "Please copy &amp; paste when submitting your issue to support forum."
1556
msgstr "フォーラムに問題を投稿する際、コピーして張り付けてください。"
1557
1558
- #: admin/includes/tab-settings.php:1636
1559
msgid "Show information"
1560
msgstr "情報を表示"
1561
1562
- #: admin/includes/tab-settings.php:1652
1563
msgid ""
1564
"To enhance the protection ability, please refer to &#8220;<a rel=\"noreferrer"
1565
"\" href=\"http://www.ipgeoblock.com/codex/the-best-practice-for-target-"
@@ -1571,7 +1600,7 @@ msgstr ""
1571
"\" title=\"The best practice for target settings | IP Geo Block\">The best "
1572
"practice fortarget settings</a>&#8220;&thinsp;を参照してください。"
1573
1574
- #: admin/includes/tab-settings.php:1653
1575
msgid ""
1576
"If you have any troubles with these, please check FAQ at <a rel=\"noreferrer"
1577
"\" href=\"https://wordpress.org/plugins/ip-geo-block/faq/\" title=\"IP Geo "
@@ -1585,21 +1614,21 @@ msgstr ""
1585
"com/codex/#faq\" title=\"Codex | IP Geo Block\">Codex</a> の FAQ を参照してく"
1586
"ださい。"
1587
1588
- #: admin/includes/tab-settings.php:1660
1589
msgid ""
1590
"While Geolite2&thinsp;/&thinsp;Maxmind and IP2Location will fetch the local "
1591
"databases, others will pass an IP address to the 3rd parties' API via HTTP."
1592
msgstr ""
1593
- "MaxmindとIP2Locationはローカルのデータベースを検索しますが、他はHTTPを介して"
1594
- "サードパーティーのAPIにIPアドレスを渡します。"
1595
1596
- #: admin/includes/tab-settings.php:1661
1597
msgid ""
1598
"Please select the appropriate APIs to fit the privacy law&thinsp;/&thinsp;"
1599
"regulation in your country&thinsp;/&thinsp;region."
1600
msgstr "自国のプライバシー関連法規に合わせ、適切なAPIを選択して下さい。"
1601
1602
- #: admin/includes/tab-settings.php:1670
1603
#, php-format
1604
msgid ""
1605
"Maxmind GeoLite2 databases and APIs need PHP version 5.4.0+ and %sPECL phar "
@@ -1609,7 +1638,7 @@ msgstr ""
1609
"ジョン&thinsp;5.4.0&thinsp;以上と&thinsp;%sPECL phar 2.0.0&thinsp;以上%sが必要"
1610
"です。"
1611
1612
- #: admin/includes/tab-settings.php:1678
1613
msgid ""
1614
"Please refer to the document &#8220;<a rel=\"noreferrer\" href=\"http://www."
1615
"ipgeoblock.com/codex/#blocking-on-front-end\" title=\"Codex | IP Geo Block"
@@ -1621,7 +1650,7 @@ msgstr ""
1621
"end\" title=\"Codex | IP Geo Block\">Blocking on front-end</a>&#8221; を参照し"
1622
"てください。"
1623
1624
- #: admin/includes/tab-settings.php:1679
1625
msgid ""
1626
"If you find any issues or have something to suggest, please feel free to "
1627
"open an issue at <a rel=\"noreferrer\" href=\"https://wordpress.org/support/"
@@ -1633,7 +1662,7 @@ msgstr ""
1633
"&#8250; Support &raquo; IP Geo Block\">サポートフォーラム</a> に投稿をお願いし"
1634
"ます。"
1635
1636
- #: admin/includes/tab-settings.php:1686
1637
msgid ""
1638
"Please refer to the document &#8220;<a rel=\"noreferrer\" href=\"http://www."
1639
"ipgeoblock.com/codex/record-settings-and-logs.html\" title=\"Codex | IP Geo "
@@ -1688,48 +1717,62 @@ msgid "Statistics in Logs"
1688
msgstr "ログの統計"
1689
1690
#: admin/includes/tab-statistics.php:217
1691
- msgid "Statistics in cache"
1692
msgstr "キャッシュの統計"
1693
1694
- #: admin/includes/tab-statistics.php:225
1695
msgid "Search in cache"
1696
msgstr "キャッシュを検索"
1697
1698
- #: admin/includes/tab-statistics.php:266
1699
msgid "Clear cache"
1700
msgstr "キャッシュのクリア"
1701
1702
#: admin/includes/tab-statistics.php:288
1703
msgid "Country (Top 10)"
1704
msgstr "国(トップ10)"
1705
1706
- #: admin/includes/tab-statistics.php:289
1707
msgid "AS number (Top 10)"
1708
msgstr "AS番号(トップ10)"
1709
1710
- #: admin/includes/tab-statistics.php:290
1711
msgid "IP address (Top 10)"
1712
msgstr "IPアドレス(トップ10)"
1713
1714
- #: admin/includes/tab-statistics.php:291
1715
msgid "Slug in back-end"
1716
msgstr "バックエンドのスラッグ"
1717
1718
- #: admin/includes/tab-statistics.php:343
1719
msgid "Toggle sorting order"
1720
msgstr "ソート順を切り替え"
1721
1722
- #: admin/includes/tab-statistics.php:394
1723
#, php-format
1724
- msgid "[ %sRecord &#8220;Statistics&#8221;%s ] is desabled."
1725
msgstr "[%s検証の統計を記録%s]が無効です。"
1726
1727
- #: admin/includes/tab-statistics.php:395
1728
msgid ""
1729
"Please set the proper condition to record and analyze the validation "
1730
"statistics."
1731
msgstr "検証の統計を記録し分析するためには、適切な条件を設定して下さい。"
1732
1733
#: classes/class-ip-geo-block-apis.php:661
1734
msgid ""
1735
"You need to select at least one IP geolocation service. Otherwise "
@@ -1738,17 +1781,17 @@ msgstr ""
1738
"少なくとも1つ以上の位置情報サービスを選択して下さい。未選択の場合、キャッシュ"
1739
"の有効期限切れと共にロックアウトされます。"
1740
1741
- #: classes/class-ip-geo-block-cron.php:217
1742
#, php-format
1743
msgid "Can't lock <code>%s</code>. Please try again after a while."
1744
msgstr ""
1745
"<code>%s</code> をロック出来ません。パーミッションをチェックして下さい。"
1746
1747
- #: classes/class-ip-geo-block-cron.php:296
1748
msgid "Your database file is up-to-date."
1749
msgstr "データベース・ファイルは最新です。"
1750
1751
- #: classes/class-ip-geo-block-cron.php:395
1752
msgid "gz or zip is not supported on your system."
1753
msgstr "gz または zip がサポートされていません。"
1754
2
# This file is distributed under the same license as the IP Geo Block package.
3
msgid ""
4
msgstr ""
5
+ "Project-Id-Version: IP Geo Block 3.0.12\n"
6
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ip-geo-block\n"
7
+ "POT-Creation-Date: 2018-05-20 16:59+0900\n"
8
+ "PO-Revision-Date: 2018-05-20 17:01+0900\n"
9
"Language-Team: \n"
10
"MIME-Version: 1.0\n"
11
"Content-Type: text/plain; charset=UTF-8\n"
28
"自国以外から投稿されるスパム、ログインフォーム、さらにゼロデイ攻撃を含む管理領"
29
"域への悪意あるアクセスからサイトを守ります。"
30
31
+ #: admin/class-ip-geo-block-admin.php:269
32
msgid "Import settings ?"
33
msgstr "設定をインポートしますか?"
34
35
+ #: admin/class-ip-geo-block-admin.php:270
36
msgid "Create table ?"
37
msgstr "テーブルを作成しますか?"
38
39
+ #: admin/class-ip-geo-block-admin.php:271
40
msgid "Delete table ?"
41
msgstr "テーブルを削除しますか?"
42
43
+ #: admin/class-ip-geo-block-admin.php:272
44
msgid "Clear statistics ?"
45
msgstr "統計をクリアしますか?"
46
47
+ #: admin/class-ip-geo-block-admin.php:273
48
msgid "Clear cache ?"
49
msgstr "キャッシュをクリアしますか?"
50
51
+ #: admin/class-ip-geo-block-admin.php:274
52
msgid "Clear logs ?"
53
msgstr "ログをクリアしますか?"
54
55
+ #: admin/class-ip-geo-block-admin.php:275
56
msgid "ajax for logged-in user"
57
msgstr "認証済ユーザー用 ajax"
58
59
+ #: admin/class-ip-geo-block-admin.php:276
60
msgid "ajax for non logged-in user"
61
msgstr "未認証ユーザー用 ajax"
62
63
+ #: admin/class-ip-geo-block-admin.php:277
64
#, php-format
65
msgid "[Found: %d]"
66
msgstr "[見つかった数:%d]"
67
68
+ #: admin/class-ip-geo-block-admin.php:278
69
#, php-format
70
msgid "Find and verify `%s` on &#8220;Logs&#8221; tab."
71
msgstr "ログから `%s` を検索し、検証して下さい。"
72
73
+ #: admin/class-ip-geo-block-admin.php:279
74
msgid "This feature is available with HTML5 compliant browsers."
75
msgstr "HTML5準拠のブラウザでのみ機能します。"
76
77
+ #: admin/class-ip-geo-block-admin.php:280
78
msgid "The selected row cannot be found in the visible area."
79
msgstr "可視領域に選択された行が見つかりません。"
80
81
+ #: admin/class-ip-geo-block-admin.php:281
82
+ #: admin/class-ip-geo-block-admin.php:1483
83
#, php-format
84
msgid "An error occurred while executing the ajax command `%s`."
85
msgstr "Ajaxコマンド `%s` の実行中にエラーが発生しました。"
86
87
+ #: admin/class-ip-geo-block-admin.php:285
88
msgid "No data available in table"
89
msgstr "テーブルにデータがありません"
90
91
+ #: admin/class-ip-geo-block-admin.php:286
92
msgid "No matching records found"
93
msgstr "一致するレコードがありません"
94
95
+ #: admin/class-ip-geo-block-admin.php:287
96
+ #: admin/includes/class-admin-ajax.php:111
97
+ #: admin/includes/class-admin-ajax.php:237
98
+ #: admin/includes/tab-geolocation.php:70
99
msgid "IP address"
100
msgstr "IPアドレス"
101
102
+ #: admin/class-ip-geo-block-admin.php:288
103
+ #: admin/includes/class-admin-ajax.php:112
104
+ #: admin/includes/class-admin-ajax.php:238
105
msgid "Code"
106
msgstr "国"
107
108
+ #: admin/class-ip-geo-block-admin.php:289
109
+ #: admin/includes/class-admin-ajax.php:113
110
+ #: admin/includes/class-admin-ajax.php:239
111
msgid "ASN"
112
msgstr "AS番号"
113
114
+ #: admin/class-ip-geo-block-admin.php:290
115
+ #: admin/includes/class-admin-ajax.php:240
116
msgid "Host name"
117
msgstr "ホスト名"
118
119
+ #: admin/class-ip-geo-block-admin.php:291
120
+ #: admin/includes/class-admin-ajax.php:114
121
+ #: admin/includes/class-admin-ajax.php:241
122
msgid "Target"
123
msgstr "検証対象"
124
125
+ #: admin/class-ip-geo-block-admin.php:292
126
+ #: admin/includes/class-admin-ajax.php:242
127
msgid "Failure / Total"
128
msgstr "ログイン失敗/総計"
129
130
+ #: admin/class-ip-geo-block-admin.php:293
131
+ #: admin/includes/class-admin-ajax.php:243
132
msgid "Elapsed[sec]"
133
msgstr "経過 [秒]"
134
135
+ #: admin/class-ip-geo-block-admin.php:294
136
+ #: admin/includes/class-admin-ajax.php:110
137
msgid "Time"
138
msgstr "日時"
139
140
+ #: admin/class-ip-geo-block-admin.php:295
141
+ #: admin/includes/class-admin-ajax.php:115
142
msgid "Result"
143
msgstr "検証結果"
144
145
+ #: admin/class-ip-geo-block-admin.php:296
146
+ #: admin/includes/class-admin-ajax.php:116
147
msgid "Request"
148
msgstr "リクエスト"
149
150
+ #: admin/class-ip-geo-block-admin.php:297
151
+ #: admin/includes/class-admin-ajax.php:117
152
msgid "User agent"
153
msgstr "ユーザー・エージェント"
154
155
+ #: admin/class-ip-geo-block-admin.php:298
156
+ #: admin/includes/class-admin-ajax.php:118
157
msgid "HTTP headers"
158
msgstr "HTTP ヘッダー"
159
160
+ #: admin/class-ip-geo-block-admin.php:299
161
+ #: admin/includes/class-admin-ajax.php:119
162
msgid "$_POST data"
163
msgstr "$_POST データ"
164
165
+ #: admin/class-ip-geo-block-admin.php:325
166
msgid "Contribute on GitHub"
167
msgstr "開発に参加"
168
169
+ #: admin/class-ip-geo-block-admin.php:339
170
+ #: admin/class-ip-geo-block-admin.php:447
171
+ #: admin/class-ip-geo-block-admin.php:664
172
msgid "Settings"
173
msgstr "設定"
174
175
#: admin/class-ip-geo-block-admin.php:425
176
+ #: admin/class-ip-geo-block-admin.php:426
177
#: admin/class-ip-geo-block-admin.php:436
178
+ #: admin/class-ip-geo-block-admin.php:437
179
+ #: admin/class-ip-geo-block-admin.php:446
180
+ #: admin/class-ip-geo-block-admin.php:455
181
msgid "IP Geo Block"
182
msgstr "IP Geo Block"
183
184
+ #: admin/class-ip-geo-block-admin.php:456
185
+ #: admin/class-ip-geo-block-admin.php:669
186
msgid "Site List"
187
msgstr "サイト一覧"
188
189
+ #: admin/class-ip-geo-block-admin.php:485
190
msgid "You need WordPress 3.7+."
191
msgstr "WordPress 3.7&thinsp;以上が必要です。"
192
193
+ #: admin/class-ip-geo-block-admin.php:491
194
#, php-format
195
msgid ""
196
"Now downloading geolocation databases in background. After a little while, "
201
"た後、あなたの国コードと[<strong>マッチング規則</strong>]を[<a href=\"%s\">"
202
"検証ルールの設定</a>]で確認して下さい。"
203
204
+ #: admin/class-ip-geo-block-admin.php:497
205
#, php-format
206
msgid ""
207
"The &#8220;<strong>Matching rule</strong>&#8221; is not set properly. Please "
210
"[<strong>マッチング規則</strong>]が正しく設定されていません。[<a href=\"%s"
211
"\">検証ルールの設定</a>]を確認して下さい。"
212
213
+ #: admin/class-ip-geo-block-admin.php:506
214
msgid "Local database and matching rule have been updated."
215
msgstr "ローカル・データベースとマッチング規則を更新しました。"
216
217
+ #: admin/class-ip-geo-block-admin.php:517
218
msgid ""
219
"Once you logout, you will be unable to login again because the number of "
220
"login attempts reaches the limit."
222
"あなたのIPアドレスのログイン試行可能回数がリミットに達したため、ログアウトする"
223
"と再びログインする事が出来なくなります。"
224
225
+ #: admin/class-ip-geo-block-admin.php:519
226
#, php-format
227
msgid ""
228
"Please execute \"<strong>Clear cache</strong>\" on <a href=\"%s\">Statistics "
231
"<a href=\"%s\">[統計]タブ</a>の[<strong>キャッシュのクリア</strong>]を実行"
232
"し、ロックアウトを回避してください。"
233
234
+ #: admin/class-ip-geo-block-admin.php:529
235
msgid ""
236
"Once you logout, you will be unable to login again because your country code "
237
"or IP address is in the blacklist."
239
"あなたの国コードまたはIPアドレスがブラックリストに含まれているため、ログアウト"
240
"すると再びログインする事が出来なくなります。"
241
242
+ #: admin/class-ip-geo-block-admin.php:530
243
msgid ""
244
"Once you logout, you will be unable to login again because your country code "
245
"or IP address is not in the whitelist."
247
"あなたの国コードまたはIPアドレスがホワイトリストに含まれていないため、ログアウ"
248
"トすると再びログインする事が出来なくなります。"
249
250
+ #: admin/class-ip-geo-block-admin.php:534
251
#, php-format
252
msgid "Please check your &#8220;%sValidation rule settings%s&#8221;."
253
msgstr "[%s検証ルールの設定%s]を確認して下さい。"
254
255
+ #: admin/class-ip-geo-block-admin.php:538
256
#, php-format
257
msgid ""
258
"Please confirm your local geolocation databases at &#8220;%sLocal database "
262
"[%sローカル・データベースの設定%s]で位置情報データベースを確認し、[%sキャッ"
263
"シュの統計%s]でキャッシュされているあなたのIPアドレスを削除して下さい。"
264
265
+ #: admin/class-ip-geo-block-admin.php:559
266
msgid ""
267
"&#8220;mu-plugins&#8221; (ip-geo-block-mu.php) at &#8220;Validation "
268
"timing&#8221; is imcompatible with <strong>IP Geo Allow</strong>. Please "
272
"されていますが、<strong>IP Geo Allow</strong> と互換性がありません。「&#8220;"
273
"init&#8221; アクション・フック」を選択してください。"
274
275
+ #: admin/class-ip-geo-block-admin.php:665
276
msgid "Statistics"
277
msgstr "統計"
278
279
+ #: admin/class-ip-geo-block-admin.php:666
280
msgid "Logs"
281
msgstr "ログ"
282
283
+ #: admin/class-ip-geo-block-admin.php:667
284
msgid "Search"
285
msgstr "検索"
286
287
+ #: admin/class-ip-geo-block-admin.php:668
288
msgid "Attribution"
289
msgstr "リンク"
290
291
+ #: admin/class-ip-geo-block-admin.php:685
292
+ #: admin/class-ip-geo-block-admin.php:702
293
msgid "Network wide"
294
msgstr "ネットワーク管理"
295
296
+ #: admin/class-ip-geo-block-admin.php:715
297
msgid "Toggle all"
298
msgstr "全てを開閉"
299
300
+ #: admin/class-ip-geo-block-admin.php:718
301
msgid ""
302
"Independent of &#8220;Statistics and Logs settings&#8221;, you can see all "
303
"the requests validated by this plugin in almost real time."
305
"[統計とログの設定]にかかわらず、このプラグインによる検証結果のすべてを、ほぼ"
306
"リアルタイムに表示します。"
307
308
+ #: admin/class-ip-geo-block-admin.php:718 admin/includes/tab-accesslog.php:39
309
msgid "Live update"
310
msgstr "ライブアップデート"
311
312
+ #: admin/class-ip-geo-block-admin.php:722
313
msgid "Open a new window on clicking the link in the chart."
314
msgstr "チャート内のリンクをクリックすると、新しいウィンドウが開きます。"
315
316
+ #: admin/class-ip-geo-block-admin.php:722
317
msgid "Open a new window"
318
msgstr "別窓で開く"
319
320
+ #: admin/class-ip-geo-block-admin.php:745
321
msgid "Thanks for providing these great services for free."
322
msgstr "これらのすばらしいサービスの提供元に、敬意と感謝の意を表します!"
323
324
+ #: admin/class-ip-geo-block-admin.php:746
325
msgid ""
326
"(Most browsers will redirect you to each site <a href=\"http://www."
327
"ipgeoblock.com/etc/referer.html\" title=\"Referer Checker\">without referrer "
331
"\" title=\"Referer Checker\">参照元を残さずにリンク先にリダイレクトできます</"
332
"a>。)"
333
334
+ #: admin/class-ip-geo-block-admin.php:751
335
msgid "Back to top"
336
msgstr "トップに戻る"
337
338
+ #: admin/class-ip-geo-block-admin.php:843
339
msgid "Enable"
340
msgstr "有効"
341
342
+ #: admin/class-ip-geo-block-admin.php:858
343
msgid "Select one"
344
msgstr "何れかを選択"
345
346
+ #: admin/class-ip-geo-block-admin.php:1273
347
msgid "You do not have sufficient permissions to access this page."
348
msgstr "このページにアクセスするための十分な権限がありません。"
349
350
+ #: admin/class-ip-geo-block-admin.php:1300
351
#: admin/includes/class-admin-rewrite.php:194
352
+ #: classes/class-ip-geo-block-cron.php:217
353
+ #: classes/class-ip-geo-block-cron.php:321
354
+ #: classes/class-ip-geo-block-cron.php:395
355
+ #: classes/class-ip-geo-block-opts.php:452
356
#, php-format
357
msgid "Unable to write <code>%s</code>. Please check the permission."
358
msgstr "<code>%s</code> に書き込めません。パーミッションをチェックして下さい。"
359
360
+ #: admin/class-ip-geo-block-admin.php:1330
361
msgid "Settings saved."
362
msgstr "設定を保存しました。"
363
370
msgid "UNKNOWN"
371
msgstr "不明"
372
373
+ #: admin/includes/class-admin-ajax.php:198
374
#, php-format
375
msgid "The user %s (user ID: %d) is in use."
376
msgstr "ユーザー %s(ユーザーID:%d)が使用中です。"
377
378
+ #: admin/includes/class-admin-ajax.php:492
379
#, php-format
380
msgid ""
381
"illegal format at %s. Please delete the corresponding line and try again."
382
msgstr "%sは誤ったフォーマットです。該当行を削除し、再実行してください。"
383
384
#: admin/includes/class-admin-rewrite.php:168
385
+ #: classes/class-ip-geo-block-cron.php:212
386
+ #: classes/class-ip-geo-block-cron.php:390
387
#, php-format
388
msgid "Unable to read <code>%s</code>. Please check the permission."
389
msgstr "<code>%s</code> が読めません。パーミッションをチェックして下さい。"
404
msgstr "検証のログ"
405
406
#: admin/includes/tab-accesslog.php:19 admin/includes/tab-settings.php:765
407
+ #: admin/includes/tab-settings.php:1410
408
msgid "Help"
409
msgstr "ヘルプ"
410
440
msgid "Search in logs"
441
msgstr "ログを検索"
442
443
+ #: admin/includes/tab-accesslog.php:96 admin/includes/tab-statistics.php:240
444
msgid "Reset"
445
msgstr "リセット"
446
447
+ #: admin/includes/tab-accesslog.php:104 admin/includes/tab-statistics.php:247
448
msgid "Bulk action"
449
msgstr "選択して実行"
450
451
+ #: admin/includes/tab-accesslog.php:115 admin/includes/tab-statistics.php:258
452
msgid "Remove entries by IP address"
453
msgstr "指定のIPアドレスでエントリを削除"
454
455
+ #: admin/includes/tab-accesslog.php:116 admin/includes/tab-statistics.php:259
456
msgid "Add IP address to &#8220;Whitelist&#8221;"
457
msgstr "IPアドレスをホワイトリストへ追加"
458
459
+ #: admin/includes/tab-accesslog.php:117 admin/includes/tab-statistics.php:260
460
msgid "Add IP address to &#8220;Blacklist&#8221;"
461
msgstr "IPアドレスをブラックリストへ追加"
462
463
+ #: admin/includes/tab-accesslog.php:118 admin/includes/tab-statistics.php:261
464
msgid "Add AS number to &#8220;Whitelist&#8221;"
465
msgstr "AS番号をホワイトリストへ追加"
466
467
+ #: admin/includes/tab-accesslog.php:119 admin/includes/tab-statistics.php:262
468
msgid "Add AS number to &#8220;Blacklist&#8221;"
469
msgstr "AS番号をブラックリストへ追加"
470
471
#: admin/includes/tab-accesslog.php:121 admin/includes/tab-network.php:56
472
+ #: admin/includes/tab-statistics.php:264
473
msgid "Apply"
474
msgstr "実行する"
475
478
msgstr "ログをクリア"
479
480
#: admin/includes/tab-accesslog.php:137 admin/includes/tab-statistics.php:173
481
+ #: admin/includes/tab-statistics.php:206 admin/includes/tab-statistics.php:279
482
msgid "Clear all"
483
msgstr "全てをクリア"
484
486
msgid "Export logs"
487
msgstr "ログをエクスポート"
488
489
+ #: admin/includes/tab-accesslog.php:153 admin/includes/tab-settings.php:1582
490
+ #: admin/includes/tab-statistics.php:294
491
msgid "Export to the local file"
492
msgstr "ローカル・ファイルへエクスポートする"
493
494
+ #: admin/includes/tab-accesslog.php:153 admin/includes/tab-statistics.php:294
495
msgid "Export csv"
496
msgstr "CSVへエクスポート"
497
498
#: admin/includes/tab-accesslog.php:174 admin/includes/tab-network.php:114
499
+ #: admin/includes/tab-statistics.php:424
500
#, php-format
501
+ msgid "[ %sRecord &#8220;Logs&#8221;%s ] is disabled."
502
msgstr "[%s検証のログを記録%s]が無効です。"
503
504
#: admin/includes/tab-accesslog.php:175 admin/includes/tab-network.php:115
505
+ #: admin/includes/tab-statistics.php:425
506
msgid ""
507
"Please set the proper condition to record and analyze the validation logs."
508
msgstr "検証のログを記録し分析するためには、適切な条件を設定して下さい。"
521
522
#: admin/includes/tab-geolocation.php:86 admin/includes/tab-settings.php:1101
523
msgid ""
524
+ "<dfn title=\"IP address is always encrypted on recording in cache and logs. "
525
"Moreover, this option makes the IP address anonymous and restricted on "
526
"sending to the 3rd parties such as geolocation APIs or whois service."
527
+ "\">Anonymize IP address and restrict 3rd party APIs</dfn>"
528
msgstr ""
529
+ "<dfn title=\"IPアドレスは、キャッシュとログに記録される際に常に暗号化されま"
530
"す。このオプションはさらに、IPアドレスを匿名化し、位置情報サービスやwhoisサー"
531
+ "ビスなどの第三者への送信を制限します。\">IPアドレスを匿名化し、APIの使用を制限"
532
+ "する</dfn>"
533
534
#: admin/includes/tab-geolocation.php:101
535
msgid "Find geolocation"
814
"意のあるアップロード防止</dfn>"
815
816
#: admin/includes/tab-settings.php:318 admin/includes/tab-settings.php:499
817
+ #: admin/includes/tab-settings.php:623 admin/includes/tab-settings.php:1160
818
msgid "Disable"
819
msgstr "無効"
820
1234
1235
#: admin/includes/tab-settings.php:1117
1236
msgid ""
1237
+ "<dfn title=\"This option enables to record the IP address, country code and "
1238
+ "failure counter of login attempts into the cache on database to minimize the "
1239
+ "impact on site speed.\">Record &#8220;IP address cache&#8221;</dfn>"
1240
msgstr ""
1241
+ "<dfn title=\"このオプションは、IPアドレス、国コード、ログイン失敗回数等の"
1242
+ "キャッシュへの記録を有効にし、サイト速度への影響を最小化します。\">IPアドレス"
1243
+ "をキャッシュに記録</dfn>"
1244
1245
+ #: admin/includes/tab-settings.php:1133
1246
+ #, php-format
1247
+ msgid ""
1248
+ "<dfn title=\"If user authentication fails consecutively %d times, subsequent "
1249
+ "login will also be prohibited for this and garbage collection period."
1250
+ "\">Expiration time [sec] for &#8220;IP address cache&#8221;</dfn>"
1251
+ msgstr ""
1252
+ "<dfn title=\"ユーザ認証が連続%d回失敗した場合も、以降のログインがこの期間だけ"
1253
+ "(ガベージコレクション周期を含む)禁止されます。\">キャッシュの有効時間 "
1254
+ "[sec]</dfn>"
1255
1256
+ #: admin/includes/tab-settings.php:1149
1257
msgid ""
1258
"<dfn title=\"This option enables to record the validation logs including IP "
1259
+ "addresses.\">Record &#8220;Logs&#8221;</dfn>"
1260
msgstr ""
1261
"<dfn title=\"このオプションは、IPアドレスを含む検証ログの記録を有効にしま"
1262
"す。\">検証のログを記録</dfn>"
1263
1264
+ #: admin/includes/tab-settings.php:1161
1265
+ msgid "When blocked"
1266
msgstr "遮断時に記録"
1267
1268
+ #: admin/includes/tab-settings.php:1162
1269
+ msgid "When passed"
1270
msgstr "通過時に記録"
1271
1272
+ #: admin/includes/tab-settings.php:1163
1273
msgid "When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;"
1274
msgstr "遮断時または遮断対象国の通過時に記録"
1275
1276
+ #: admin/includes/tab-settings.php:1164
1277
msgid "Unauthenticated visitor"
1278
msgstr "未認証の訪問者を記録"
1279
1280
+ #: admin/includes/tab-settings.php:1165
1281
msgid "Authenticated user"
1282
msgstr "認証済のユーザーを記録"
1283
1284
+ #: admin/includes/tab-settings.php:1166
1285
msgid "All the validation"
1286
msgstr "すべての検証を記録"
1287
1288
+ #: admin/includes/tab-settings.php:1174
1289
msgid ""
1290
"<dfn title=\"e.g. action, comment, log, pwd, FILES\">$_POST keys to be "
1291
"recorded with their values in &#8220;Logs&#8221;</dfn>"
1293
"<dfn title=\"例)action, comment, log, pwd, FILES\">ログに記録する際に内容を展"
1294
"開する$_POSTのキー</dfn>"
1295
1296
+ #: admin/includes/tab-settings.php:1191
1297
+ #, php-format
1298
+ msgid ""
1299
+ "<dfn title=\"The maximum number of entries in the logs is also limited to %d."
1300
+ "\">Expiration time [sec] for &#8220;Logs&#8221;</dfn>"
1301
+ msgstr ""
1302
+ "<dfn title=\"ログの最大エントリー数は %d に制限されます。\">ログの有効時間 "
1303
+ "[sec]</dfn>"
1304
+
1305
+ #: admin/includes/tab-settings.php:1209
1306
+ msgid "Maximum entries of &#8220;Logs&#8221;"
1307
+ msgstr "記録するログの最大エントリ数"
1308
+
1309
+ #: admin/includes/tab-settings.php:1226
1310
msgid ""
1311
"<dfn title=\"Select SQLite database source.\">Database source of SQLite for "
1312
"&#8220;Live update&#8221;</dfn>"
1314
"<dfn title=\"SQLiteデータベース・ソースを選択します。\">ライブアップデート用"
1315
"SQLiteデータベース・ソースの選択</dfn>"
1316
1317
+ #: admin/includes/tab-settings.php:1238
1318
msgid "Ordinary file"
1319
msgstr "通常のファイル"
1320
1321
+ #: admin/includes/tab-settings.php:1239
1322
msgid "In-Memory"
1323
msgstr "イン・メモリ"
1324
1325
+ #: admin/includes/tab-settings.php:1242
1326
msgid "PDO_SQLITE driver not available"
1327
msgstr "PDO_SQLITEドライバが利用出来ません。"
1328
1329
+ #: admin/includes/tab-settings.php:1243
1330
msgid ""
1331
"It takes a few tens of milliseconds as overhead. It can be safely used "
1332
"without conflict with other plugins."
1334
"数十ミリ秒のオーバーヘッドが生じますが、他のプラグインと競合することなく、安全"
1335
"に使用できます。"
1336
1337
+ #: admin/includes/tab-settings.php:1244
1338
msgid ""
1339
"It takes a few milliseconds as overhead. There is a possibility of conflict "
1340
"with other plugins using this method."
1342
"数ミリ秒のオーバーヘッドが生じます。同手法を用いている他のプラグインと競合する"
1343
"可能性があります。"
1344
1345
+ #: admin/includes/tab-settings.php:1253
1346
msgid "Reset database source of &#8220;Live update&#8221;"
1347
msgstr "ライブアップデートのデータソースをリセットする"
1348
1349
+ #: admin/includes/tab-settings.php:1261
1350
msgid "Reset now"
1351
msgstr "今すぐリセット"
1352
1353
+ #: admin/includes/tab-settings.php:1269 admin/includes/tab-settings.php:1442
1354
msgid ""
1355
"Task could not be found in WP-Cron. Please try to deactivate this plugin "
1356
"once and activate again."
1358
"WP-Cronのタスクが見つかりません。 一旦このプラグインを停止させた後、再度、有効"
1359
"化してみてください。"
1360
1361
+ #: admin/includes/tab-settings.php:1275
1362
msgid ""
1363
"<dfn title=\"This option enables to schedule the WP-Cron event to remove the "
1364
+ "expired entries in ip address cache and logs.\">Cleanup interval [sec] for "
1365
+ "&#8220;IP address cache&#8221; and &#8220;Logs&#8221;</dfn>"
1366
msgstr ""
1367
+ "<dfn title=\"このオプションは、有効期限の切れたエントリーをIPアドレスのキャッ"
1368
+ "シュとログから削除するWP-Cronイベントの起動周期を設定します。\">ガベージコレク"
1369
+ "ション周期 [秒]</dfn>"
1370
1371
+ #: admin/includes/tab-settings.php:1284 admin/includes/tab-settings.php:1459
1372
#, php-format
1373
msgid "Next schedule: %s"
1374
msgstr "次回日時:%s"
1375
1376
+ #: admin/includes/tab-settings.php:1292
1377
+ msgid ""
1378
+ "<dfn title=\"This option enables to record the number blocked countries and "
1379
+ "the number of blocked requests per day.\">Record &#8220;Statistics&#8221;</"
1380
+ "dfn>"
1381
+ msgstr ""
1382
+ "<dfn title=\"このオプションは、国別遮断数や1日あたりの遮断数など、統計の記録を"
1383
+ "有効にします。\">検証の統計を記録</dfn>"
1384
+
1385
+ #: admin/includes/tab-settings.php:1309
1386
+ msgid "Maximum period for &#8220;Statistics&#8221; [day]"
1387
+ msgstr "記録する統計の最大期間(日)"
1388
+
1389
+ #: admin/includes/tab-settings.php:1327
1390
+ msgid "Remove all settings and records at uninstallation"
1391
+ msgstr "アンインストール時に設定と記録を全て削除"
1392
+
1393
+ #: admin/includes/tab-settings.php:1344
1394
msgid "Geolocation API settings"
1395
msgstr "位置情報APIの設定"
1396
1397
+ #: admin/includes/tab-settings.php:1365
1398
msgid ""
1399
"<dfn title=\"IP address cache and local database are scanned at the top "
1400
"priority.\">API selection and key settings</dfn>"
1402
"<dfn title=\"IPアドレスのキャッシュとローカルのデータベースが最優先で検索され"
1403
"ます。\">APIの選択とキーの設定</dfn>"
1404
1405
+ #: admin/includes/tab-settings.php:1385
1406
msgid "Timeout for network API [sec]"
1407
msgstr "ネットワークAPIのタイムアウト[秒]"
1408
1409
+ #: admin/includes/tab-settings.php:1403
1410
#, php-format
1411
msgid ""
1412
"Can not find geolocation API libraries in <code>%s</code>. It seems to have "
1431
"Geo Block\">FAQ</a> を参照し、適切な書き込み権限と共に <code>ip-geo-api</"
1432
"code> をインストールしてください。"
1433
1434
+ #: admin/includes/tab-settings.php:1410
1435
msgid "Local database settings"
1436
msgstr "ローカル・データベースの設定"
1437