IP Geo Block - Version 3.0.17

Version Description

  • Fix issue: Avoid the error of "Can not load Geolocation API libraries" caused by the race condition on upgrading this plugin.
  • New feature: Enhance protecting against certain types of attacks by privilege escalation.
  • New feature: Add a new option of "Network wide settings" in "Plugin settings" section to synchronize all the settings with the main blog on multisite.
  • New feature: Add "Preset filters" using ip-geo-block-logs[-preset] filter hook to make analyze logs easy on "Logs" tab.
  • Improvement: When pwd is set at "$_POST key to record with value" in "Privacy and record settings" section, mask the password in logs unless the login attempt is blocked.
  • Improvement: Flush out the buffer of "Live update" on "Logs" tab when stop button is activated to avoid data remains.
  • Improvement: Update the geolocation API service "geoip.nekudo.com" to "ipapi.com".
  • Improvement: Update the class for Maxmind GeoLite Legacy databases to prepare against the upcoming expiry of support.
  • See 3.0.17 release note for some details.
Download this release

Release Info

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

Code changes from version 3.0.16 to 3.0.17

Files changed (39) hide show
  1. README.txt +41 -183
  2. admin/class-ip-geo-block-admin.php +169 -67
  3. admin/css/admin-icons.css +23 -55
  4. admin/css/admin-icons.min.css +1 -1
  5. admin/css/admin.css +3 -0
  6. admin/css/admin.min.css +1 -1
  7. admin/css/fonts/icomoon.eot +0 -0
  8. admin/css/fonts/icomoon.svg +6 -14
  9. admin/css/fonts/icomoon.ttf +0 -0
  10. admin/css/fonts/icomoon.woff +0 -0
  11. admin/includes/class-admin-ajax.php +13 -9
  12. admin/includes/class-admin-rewrite.php +3 -3
  13. admin/includes/tab-accesslog.php +10 -2
  14. admin/includes/tab-geolocation.php +2 -2
  15. admin/includes/tab-settings.php +26 -4
  16. admin/js/admin.js +17 -9
  17. admin/js/admin.min.js +1 -1
  18. admin/js/whois.js +2 -2
  19. admin/js/whois.min.js +1 -1
  20. classes/class-ip-geo-block-apis.php +104 -102
  21. classes/class-ip-geo-block-cron.php +11 -1
  22. classes/class-ip-geo-block-file.php +30 -0
  23. classes/class-ip-geo-block-logs.php +6 -6
  24. classes/class-ip-geo-block-opts.php +55 -35
  25. classes/class-ip-geo-block-util.php +3 -1
  26. classes/class-ip-geo-block.php +136 -64
  27. ip-geo-block.php +1 -1
  28. languages/ip-geo-block-ja.mo +0 -0
  29. languages/ip-geo-block-ja.po +348 -266
  30. languages/ip-geo-block.mo +0 -0
  31. languages/ip-geo-block.po +324 -257
  32. languages/ip-geo-block.pot +324 -257
  33. uninstall.php +1 -0
  34. wp-content/ip-geo-api/drop-in-admin-sample.php +100 -0
  35. wp-content/ip-geo-api/ip2location/bcmath.php +4 -4
  36. wp-content/ip-geo-api/ip2location/class-ip2location.php +20 -15
  37. wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php +39 -24
  38. wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php +120 -96
  39. wp-content/ip-geo-api/maxmind/class-maxmind.php +11 -5
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.8
7
- Stable tag: 3.0.16
8
  License: GPLv3
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.txt
10
 
@@ -12,15 +12,17 @@ It blocks spam posts, login attempts and malicious access to the back-end reques
12
 
13
  == Description ==
14
 
15
- A considerable number of WordPress vulnerabilities in plugins and themes have been disclosed every month on a site like [WPScan Vulnerability Database](https://wpvulndb.com/ "WPScan Vulnerability Database") and [Exploits Database](https://www.exploit-db.com/ "Exploits Database by Offensive Security"). It means that we're always exposed to the threats of being exploited caused by them.
16
 
17
- This plugin guards your site against threats of attack to the back-end of your site such as login form, XML-RPC (login attempt) and admin area. It also blocks undesired comment spam, trackback and pingback spam and any requests to public facing pages aka front-end from undesired countries.
18
 
19
- After several days of installation, you'll be supprised to find many malicious or undesirable accesses are blocked especially if you enable Zero-day Expoit Prevention.
 
 
20
 
21
  = Features =
22
 
23
- * **Privacy friendly:**
24
  IP address is always encrypted on recording in logs/cache. Moreover, it can be anonymized and restricted on sending to the 3rd parties such as geolocation APIs or whois service.
25
 
26
  * **Immigration control:**
@@ -77,13 +79,13 @@ This package includes GeoLite2 library distributed by MaxMind, available from [M
77
 
78
  Also thanks for providing the following great services and REST APIs for free.
79
 
80
- * [https://ipdata.co/](https://ipdata.co/ "ipdata.co - IP Geolocation and Threat Data API") (IPv4, IPv6 / free)
81
- * [https://ipinfo.io/](https://ipinfo.io/ "IP Address API and Data Solutions") (IPv4, IPv6 / free)
82
- * [https://geoip.nekudo.com/](https://geoip.nekudo.com/ "Free IP GeoLocation/GeoIp API - geoip.nekudo.com") (IPv4, IPv6 / free)
83
- * [http://geoiplookup.net/](http://geoiplookup.net/ "What Is My IP Address | GeoIP Lookup") (IPv4, IPv6 / free)
84
  * [http://ip-api.com/](http://ip-api.com/ "IP-API.com - Free Geolocation API") (IPv4, IPv6 / free for non-commercial use)
85
- * [https://ipinfodb.com/](https://ipinfodb.com/ "Free IP Geolocation Tools and API| IPInfoDB") (IPv4, IPv6 / free for registered user, need API key)
 
 
 
86
  * [https://ipstack.com/](https://ipstack.com/ "ipstack - Free IP Geolocation API") (IPv4, IPv6 / free for registered user, need API key)
 
87
 
88
  = Development =
89
 
@@ -99,150 +101,18 @@ All contributions will always be welcome. Or visit my [development blog](https:/
99
  2. Search for 'IP Geo Block'
100
  3. Click 'Install Now'
101
  4. Activate the plugin on the Plugin dashboard
102
- 5. Try 'Best for Back-end' button for easy setup at the bottom of this plugin's setting page.
103
-
104
- Please refer to [the document](https://www.ipgeoblock.com/codex/ "Codex | IP Geo Block")
105
- or following descriptions for your best setup.
106
-
107
- = Validation rules and behavior =
108
-
109
- * **Matching rule**
110
- Choose either `White list` (recommended) or `Black list` to specify the countries from which you want to pass or block.
111
-
112
- * **Whitelist/Blacklist of country code**
113
- Specify the country code with two letters (see [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements "ISO 3166-1 alpha-2 - Wikipedia, the free encyclopedia")). Each of them should be separated by comma.
114
-
115
- * **Use Autonomous System Number (ASN)**
116
- It enables you to use "AS number" in the whitelist and blacklist of extra IP addresses to specify a group of IP networks.
117
-
118
- * **Whitelist/Blacklist of extra IP addresses prior to country code**
119
- The list of extra IP addresses prior to the validation of country code. [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing "Classless Inter-Domain Routing - Wikipedia, the free encyclopedia") and [AS number](https://en.wikipedia.org/wiki/Autonomous_system_(Internet) "Autonomous system (Internet) - Wikipedia") are also acceptable to specify the range.
120
-
121
- * **$_SERVER keys to retrieve extra IP addresses**
122
- Additional IP addresses will be validated if some of keys in `$_SERVER` variable are specified in this textfield. Typically `HTTP_X_FORWARDED_FOR`.
123
-
124
- * **Bad signatures in query**
125
- It validates malicious signatures independently of **Block by country** and **Prevent Zero-day Exploit** for the target **Admin area**, **Admin ajax/post**, **Plugins area** and **Themes area**. Typically, `/wp-config.php` and `/passwd`.
126
-
127
- * **Prevent malicious file uploading**
128
- It restricts the file types on upload to block malware and backdoor via both back-end and front-end.
129
-
130
- * **Response code**
131
- Choose one of the [response code](https://tools.ietf.org/html/rfc2616#section-10 "RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1") to be sent when it blocks a comment.
132
- The 2xx code will lead to your top page, the 3xx code will redirect to [Black Hole Server](http://blackhole.webpagetest.org/), the 4xx code will lead to WordPress error page, and the 5xx will pretend an server error.
133
-
134
- * **Max number of failed login attempts per IP address**
135
- Set the maximum number of login attempts to accept the requests to the login process.
136
-
137
- * **Validation timing**
138
- Choose **"init" action hook** or **"mu-plugins" (ip-geo-block-mu.php)** to specify the timing of validation.
139
-
140
- = Back-end target settings =
141
-
142
- * **Comment post**
143
- Validate post to `wp-comment-post.php`. Comment post and trackback will be validated.
144
-
145
- * **XML-RPC**
146
- Validate access to `xmlrpc.php`. Pingback and other remote command with username and password will be validated.
147
-
148
- * **Login form**
149
- Validate access to `wp-login.php` and `wp-signup.php`.
150
-
151
- * **Admin area**
152
- Validate access to `wp-admin/*.php`.
153
-
154
- * **Admin ajax/post**
155
- Validate access to `wp-admin/admin-(ajax|post)*.php`.
156
-
157
- * **Plugins area**
158
- Validate direct access to plugins. Typically `wp-content/plugins/…/*.php`.
159
-
160
- * **Themes area**
161
- Validate direct access to themes. Typically `wp-content/themes/…/*.php`.
162
-
163
- = Front-end target settings =
164
-
165
- * **Block by country**
166
- Enables validation of country code on public facing pages.
167
-
168
- * **Matching rule**
169
- Same as **Validation target settings** but can be set independently.
170
-
171
- * **Validation target**
172
- Specify the single and archive page by post type, category and tag as blocking target.
173
-
174
- * **Block badly-behaved bots and crawlers**
175
- Specify the allowable request frequency over a period of time.
176
-
177
- * **UA string and qualification**
178
- Additional rules targeted at SEO which can specify acceptable requests based on user agent.
179
 
180
- * **DNS reverse lookup**
181
- It enables to verify the host by reverse DNS lookup which would spend some server resources.
182
-
183
- * **Simulation mode**
184
- You can simulate the 'blocking on front-end' functionality before deploying.
185
-
186
- = Geolocation API settings =
187
-
188
- * **API selection and key settings**
189
- If you wish to use `IPInfoDB`, you should register at [their site](https://ipinfodb.com/ "IPInfoDB | Free IP Address Geolocation Tools") to get a free API key and set it into the textfield. And `ip-api.com` and `Smart-IP.net` require non-commercial use.
190
-
191
- = Local database settings settings =
192
-
193
- * **Auto updating (once a month)**
194
- If `Enable`, geolocation databases will be downloaded automatically by WordPress cron job.
195
-
196
- * **Download database**
197
- Fetch all the databases from their server if those are updated.
198
-
199
- = Privacy and record settings =
200
-
201
- * **Privacy friendly**
202
- It makes an IP address anonymous on recording into the database (e.g. logs, IP address cache) and restricted on sending to the 3rd parties (e.g. geolocation APIs, whois).
203
-
204
- * **Record "Statistics"**
205
- If `Enable`, you can see `Statistics of validation` on Statistics tab.
206
-
207
- * **Record "Logs"**
208
- If you choose anything but `Disable`, you can see `Validation logs` on Logs tab.
209
-
210
- * **$_POST keys to be recorded with their values in "Logs"**
211
- Normally, you can see just keys at `$_POST data:` on Logs tab. If you put some of interested keys into this textfield, you can see the value of key like `key=value`.
212
-
213
- * **Record "IP address cache"**
214
- It enables to record the pare of IP address and country code into the cache on database to minimize the impact on site speed.
215
-
216
- * **Expiration time [sec] for IP address cache**
217
- Maximum time in sec to keep cache.
218
-
219
- * **Garbage collection period [sec] for IP address cache**
220
- Period of garbage collection to clean cache.
221
-
222
- = Submission settings =
223
-
224
- * **Text position on comment form**
225
- If you want to put some text message on your comment form, please choose `Top` or `Bottom` and put text with some tags into the **Text message on comment form** textfield.
226
-
227
- = Plugin settings =
228
-
229
- * **Network wide settings**
230
- Synchronize all settings over the network wide based on the settings of main blog.
231
-
232
- * **Remove all settings at uninstallation**
233
- If you checked this option, all settings will be removed when this plugin is uninstalled for clean uninstalling.
234
-
235
- * **Export / Import settings**
236
- All settings data can be saved as json file which enables to export/import to the dashboard.
237
-
238
- * **Import pre-defined settings**
239
- Reset all settings data as initial values, or set as recommended values for "Back-end target settings".
240
 
241
  == Frequently Asked Questions ==
242
 
243
  = Does the site using this plugin comply with GDPR? =
244
 
245
- Since version 3.0.11, this plugin has been designed based on the principle "Privacy by design" in GDPR so that you can compliantly run it to GDPR. In preparation for personal data breach, IP addresses in this plugin are encrypted by default and also can be anonymized. It also provides some functions not only to manually erase them but also to automatically remove them when those are exceeded a certain amount/time. Refer to [3.0.11 release note](https://www.ipgeoblock.com/changelog/release-3.0.11.html) for more details.
 
 
246
 
247
  = Does this plugin support multisite? =
248
 
@@ -252,31 +122,7 @@ Yes. You can synchronize the settings with all the sites on the network when you
252
 
253
  The short answer is **YES**, especially for the purpose of security e.g. blocking malicious access both on the back-end and on the front-end.
254
 
255
- The long answer is as follows:
256
-
257
- For the back-end protection, both blocking malicious access and blocking by country work fine, if you disable caching on the back-end. As for the front-end, there are 2 scenarios.
258
-
259
- The first one is the case that there's no cached page against a request to the specific page. In this scenario, this plugin responds a specific HTTP status code (including redirection) when the request comes from blacklisted countries (or IPs) and exit telling the caching plugin not to make a cached page. When the request comes from the whitelisted countries (or IPs), this plugin passes it to the caching plugin in order to generate a new cache.
260
-
261
- The second scenario is the case that there's a cached page. In this case, the response depends on the caching method you are employing. Currently, the following plugins can be supported with specific configurations if you want to [restrict contents by geolocation](https://en.wikipedia.org/wiki/Geo-blocking "Geo-blocking - Wikipedia"):
262
-
263
- - [WP Super Cache](https://wordpress.org/plugins/wp-super-cache/ "WP Super Cache — WordPress Plugins")
264
- Select "**Use PHP to serve cache files**" and enable "**Late init**".
265
-
266
- - [W3 Total Cache](https://wordpress.org/plugins/w3-total-cache/ "W3 Total Cache — WordPress Plugins")
267
- Select "**Disk: Basic**" and enable "**Late initialization**" for page cache. "**Disk: Enhanced**" (where "**Late initialization**" is not available) in W3TC 0.9.5.1 seems to work good without any imcompatibility with this plugin.
268
-
269
- - [Vendi Cache](https://wordpress.org/plugins/vendi-cache/ "Vendi Cache — WordPress Plugins")
270
- This plugin was formerly built in Wordfence. Select "**basic caching**" for Vendi Cache and **"mu-plugin" (ip-geo-block-mu.php)** for IP Geo Block.
271
-
272
- - [Swift Performance Lite](https://wordpress.org/plugins/swift-performance-lite/ "Swift Performance Lite | WordPress.org")
273
- Select "Disk Cashe with PHP" caching mode.
274
-
275
- Other plugins adopting `mod_rewrite` (e.g. WP Fastest Cache) or `advanced-cache.php` [drop-in](https://make.wordpress.org/core/2016/08/13/global-overloading-in-advanced-cache-php/ "Global overloading in advanced-cache.php – Make WordPress Core") (e.g. Comet Cache) or other caching method at server side might serve a normal page.
276
-
277
- Thus your site would have less risk against the exploiting via vulnerable plugins and themes.
278
-
279
- For more details, please refer to some documents at "[Blocking on front-end](https://www.ipgeoblock.com/codex/#blocking-on-front-end 'Codex | IP Geo Block')".
280
 
281
  = I still have access from blacklisted country. Does it work correctly? =
282
 
@@ -372,19 +218,31 @@ Please refer to "[How can I fix permission troubles?](https://www.ipgeoblock.com
372
 
373
  == Screenshots ==
374
 
375
- 1. **IP Geo Plugin** - Settings tab
376
- 2. **IP Geo Plugin** - Validation rules and behavior
377
- 3. **IP Geo Plugin** - Back-end target settings
378
- 4. **IP Geo Plugin** - Front-end target settings
379
- 5. **IP Geo Plugin** - Geolocation API settings
380
- 6. **IP Geo Plugin** - IP address cache settings
381
- 7. **IP Geo Plugin** - Statistics tab
382
- 8. **IP Geo Plugin** - Logs tab
383
- 9. **IP Geo Plugin** - Search tab
384
- 10. **IP Geo Plugin** - Attribution tab
 
385
 
386
  == Changelog ==
387
 
 
 
 
 
 
 
 
 
 
 
 
388
  = 3.0.16 =
389
  * **Fix issue:** Fix the issue that some functions did not work properly when "Validation timing" was set as `"mu-plugins" (ip-geo-block-mu.php)` under some conditions before WP 4.0.
390
  * **New feature:** Add "**Sites list**" page at Network admin page to look through the status of the sites if this plugin is network activated on multisite.
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.8
7
+ Stable tag: 3.0.17
8
  License: GPLv3
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.txt
10
 
12
 
13
  == Description ==
14
 
15
+ The more you install themes and plugins, the more likely your sites will be vulnerable, even if you [securely harden your sites](https://codex.wordpress.org/Hardening_WordPress "Hardening WordPress « WordPress Codex").
16
 
17
+ While WordPress.org [provides](https://wordpress.org/about/security/ "Security | WordPress.org") [excellent](https://developer.wordpress.org/themes/theme-security/ "Theme Security | Theme Developer Handbook | WordPress Developer Resources") [resources](https://developer.wordpress.org/plugins/security/ "Plugin Security | Plugin Developer Handbook | WordPress Developer Resources"), themes and plugins may often get vulnerable due to developers' [human factors](https://www.google.com/search?q=human+factors+in+security "human factors in security - Google Search") such as lack of security awareness, misuse and disuse of the best practices in those resources.
18
 
19
+ This plugin focuses on insights into such developers' human factors instead of detecting the specific attack vectors after they were disclosed. This brings a smart and powerful methods named as "**WP Zero-day Exploit Prevention**" and "**WP Metadata Exploit Protection**".
20
+
21
+ Combined with those methods and IP address geolocation, you'll be surprised to find a bunch of malicious or undesirable access blocked in the logs of this plugin after several days of installation.
22
 
23
  = Features =
24
 
25
+ * **Privacy by design:**
26
  IP address is always encrypted on recording in logs/cache. Moreover, it can be anonymized and restricted on sending to the 3rd parties such as geolocation APIs or whois service.
27
 
28
  * **Immigration control:**
79
 
80
  Also thanks for providing the following great services and REST APIs for free.
81
 
 
 
 
 
82
  * [http://ip-api.com/](http://ip-api.com/ "IP-API.com - Free Geolocation API") (IPv4, IPv6 / free for non-commercial use)
83
+ * [http://geoiplookup.net/](http://geoiplookup.net/ "What Is My IP Address | GeoIP Lookup") (IPv4, IPv6 / free)
84
+ * [https://ipinfo.io/](https://ipinfo.io/ "IP Address API and Data Solutions") (IPv4, IPv6 / free)
85
+ * [https://ipapi.com/](https://ipapi.com/ "ipapi - IP Address Lookup and Geolocation API) (IPv4, IPv6 / free, need API key)
86
+ * [https://ipdata.co/](https://ipdata.co/ "ipdata.co - IP Geolocation and Threat Data API") (IPv4, IPv6 / free, need API key)
87
  * [https://ipstack.com/](https://ipstack.com/ "ipstack - Free IP Geolocation API") (IPv4, IPv6 / free for registered user, need API key)
88
+ * [https://ipinfodb.com/](https://ipinfodb.com/ "Free IP Geolocation Tools and API| IPInfoDB") (IPv4, IPv6 / free for registered user, need API key)
89
 
90
  = Development =
91
 
101
  2. Search for 'IP Geo Block'
102
  3. Click 'Install Now'
103
  4. Activate the plugin on the Plugin dashboard
104
+ 5. Stay cool for a while and go to 'Settings' » 'IP Geo Block'
105
+ 6. Try 'Best for Back-end' button for easy setup at the bottom of this plugin's setting page.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
 
107
+ Please refer to [the document](https://www.ipgeoblock.com/codex/ "Codex | IP Geo Block") for your best setup.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
 
109
  == Frequently Asked Questions ==
110
 
111
  = Does the site using this plugin comply with GDPR? =
112
 
113
+ This plugin is designed based on the principle of "Privacy by design" so that you can compliantly run it to GDPR. As guarding against personal data breach, IP addresses in this plugin are encrypted and also can be anonymized by default. It also provides some functions not only to manually erase them but also to automatically remove them when those are exceeded a certain amount/time.
114
+
115
+ However, these are the part of GDPR requirements and do not guarantee that the site is compliant with GDPR. Refer to [3.0.11 release note](https://www.ipgeoblock.com/changelog/release-3.0.11.html) for details.
116
 
117
  = Does this plugin support multisite? =
118
 
122
 
123
  The short answer is **YES**, especially for the purpose of security e.g. blocking malicious access both on the back-end and on the front-end.
124
 
125
+ You can find the long answer and the compatibility list of cache plugins at "[Compatibility with cache plugins](https://www.ipgeoblock.com/codex/living-with-caching-plugin.html 'Compatibility with cache plugins | IP Geo Block')".
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
 
127
  = I still have access from blacklisted country. Does it work correctly? =
128
 
218
 
219
  == Screenshots ==
220
 
221
+ 1. **IP Geo Plugin** - Multisite list on network
222
+ 2. **IP Geo Plugin** - Settings tab
223
+ 3. **IP Geo Plugin** - Validation rules and behavior
224
+ 4. **IP Geo Plugin** - Back-end target settings
225
+ 5. **IP Geo Plugin** - Front-end target settings
226
+ 6. **IP Geo Plugin** - Geolocation API settings
227
+ 7. **IP Geo Plugin** - IP address cache settings
228
+ 8. **IP Geo Plugin** - Statistics tab
229
+ 9. **IP Geo Plugin** - Logs tab
230
+ 10. **IP Geo Plugin** - Search tab
231
+ 11. **IP Geo Plugin** - Attribution tab
232
 
233
  == Changelog ==
234
 
235
+ = 3.0.17 =
236
+ * **Fix issue:** Avoid the error of "Can not load Geolocation API libraries" caused by the race condition on upgrading this plugin.
237
+ * **New feature:** Enhance protecting against certain types of attacks by privilege escalation.
238
+ * **New feature:** Add a new option of "**Network wide settings**" in "**Plugin settings**" section to synchronize all the settings with the main blog on multisite.
239
+ * **New feature:** Add "**Preset filters**" using [`ip-geo-block-logs[-preset]`](https://www.ipgeoblock.com/codex/ip-geo-block-logs-preset.html "ip-geo-block-logs[-preset] | IP Geo Block") filter hook to make analyze logs easy on "**Logs**" tab.
240
+ * **Improvement:** When `pwd` is set at "**$_POST key to record with value**" in "**Privacy and record settings**" section, mask the password in logs unless the login attempt is blocked.
241
+ * **Improvement:** Flush out the buffer of "**Live update**" on "**Logs**" tab when stop button is activated to avoid data remains.
242
+ * **Improvement:** Update the geolocation API service "geoip.nekudo.com" to "ipapi.com".
243
+ * **Improvement:** Update the class for Maxmind GeoLite Legacy databases to prepare against the upcoming expiry of support.
244
+ * See [3.0.17 release note](https://www.ipgeoblock.com/changelog/release-3.0.17.html) for some details.
245
+
246
  = 3.0.16 =
247
  * **Fix issue:** Fix the issue that some functions did not work properly when "Validation timing" was set as `"mu-plugins" (ip-geo-block-mu.php)` under some conditions before WP 4.0.
248
  * **New feature:** Add "**Sites list**" page at Network admin page to look through the status of the sites if this plugin is network activated on multisite.
admin/class-ip-geo-block-admin.php CHANGED
@@ -8,7 +8,6 @@
8
  * @link https://www.ipgeoblock.com/
9
  * @copyright 2013-2018 tokkonopapa
10
  */
11
- define( 'IP_GEO_BLOCK_NETWORK', TRUE );
12
 
13
  class IP_Geo_Block_Admin {
14
 
@@ -444,7 +443,7 @@ class IP_Geo_Block_Admin {
444
  }
445
 
446
  if ( $admin_menu ) {
447
- // `settings-updated` would be added just after settings updated.
448
  if ( ! empty( $_REQUEST['page'] ) && IP_Geo_Block::PLUGIN_NAME === $_REQUEST['page'] &&
449
  ! empty( $_REQUEST['settings-updated'] ) && $this->is_network_admin && $settings['network_wide'] ) {
450
  $this->update_multisite_settings( $settings );
@@ -465,7 +464,7 @@ class IP_Geo_Block_Admin {
465
  );
466
  }
467
 
468
- elseif ( IP_GEO_BLOCK_NETWORK && $this->is_network_admin ) {
469
  // Add a settings page for this plugin to the Settings menu.
470
  $hook = add_menu_page(
471
  __( 'IP Geo Block', 'ip-geo-block' ),
@@ -476,17 +475,6 @@ class IP_Geo_Block_Admin {
476
  //, 'dashicons-admin-site' // or 'data:image/svg+xml;base64...'
477
  );
478
 
479
- if ( $settings['network_wide'] ) {
480
- add_submenu_page(
481
- IP_Geo_Block::PLUGIN_NAME,
482
- __( 'IP Geo Block', 'ip-geo-block' ),
483
- __( 'Settings', 'ip-geo-block' ),
484
- 'manage_network_options',
485
- IP_Geo_Block::PLUGIN_NAME,
486
- array( $this, 'display_plugin_admin_page' )
487
- );
488
- }
489
-
490
  add_submenu_page(
491
  IP_Geo_Block::PLUGIN_NAME,
492
  __( 'IP Geo Block', 'ip-geo-block' ),
@@ -496,6 +484,17 @@ class IP_Geo_Block_Admin {
496
  array( $this, 'display_plugin_admin_page' )
497
  );
498
 
 
 
 
 
 
 
 
 
 
 
 
499
  wp_enqueue_style( IP_Geo_Block::PLUGIN_NAME . '-admin-icons',
500
  plugins_url( ! defined( 'IP_GEO_BLOCK_DEBUG' ) || ! IP_GEO_BLOCK_DEBUG ?
501
  'css/admin-icons.min.css' : 'css/admin-icons.css', __FILE__
@@ -523,7 +522,7 @@ class IP_Geo_Block_Admin {
523
 
524
  if ( ! $settings['api_dir'] || ! file_exists( $settings['api_dir'] ) ) {
525
  $this->add_admin_notice( 'error', sprintf(
526
- __( 'Can not load Geolocation API libraries from <code>%s</code>. It seems to have failed downloading <a rel="noreferrer" href="https://github.com/tokkonopapa/WordPress-IP-Geo-API/archive/master.zip" title="Download the contents of tokkonopapa/WordPress-IP-Geo-API as a zip file">ZIP file</a> from <a rel="noreferrer" href="https://github.com/tokkonopapa/WordPress-IP-Geo-API" title="tokkonopapa/WordPress-IP-Geo-API - GitHub">WordPress-IP-Geo-API</a>. Please install <code>ip-geo-api</code> with write permission according to <a rel="noreferrer" href="https://www.ipgeoblock.com/codex/how-to-fix-permission-troubles.html" title="How can I fix permission troubles? | IP Geo Block">this instruction</a>.', 'ip-geo-block' ),
527
  apply_filters( 'ip-geo-block-api-dir', $settings['api_dir'] ? $settings['api_dir'] : basename( WP_CONTENT_DIR ) )
528
  ) );
529
  }
@@ -532,8 +531,8 @@ class IP_Geo_Block_Admin {
532
  $providers = IP_Geo_Block_Provider::get_valid_providers( $settings, FALSE, FALSE, TRUE );
533
  if ( empty( $providers ) ) {
534
  $this->add_admin_notice( 'error', sprintf(
535
- __( 'You should select at least one API at <a href="%s">Geolocation API settings</a>. Otherwise <strong>you\'ll be blocked</strong> after the cache expires.', 'ip-geo-block' ),
536
- esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 0, 'sec' => 4 ), $adminurl ) ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-4'
537
  ) );
538
  }
539
 
@@ -541,7 +540,7 @@ class IP_Geo_Block_Admin {
541
  $providers = IP_Geo_Block_Provider::get_addons( $settings['providers'] );
542
  if ( empty( $providers ) ) {
543
  $this->add_admin_notice( 'error', sprintf(
544
- __( 'You should select at least one API for local database at <a href="%s">Geolocation API settings</a>. Otherwise access to the external API may slow down the site.', 'ip-geo-block' ),
545
  esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 0, 'sec' => 4 ), $adminurl ) ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-4'
546
  ) );
547
  }
@@ -573,7 +572,7 @@ class IP_Geo_Block_Admin {
573
  // Check self blocking (skip during updating)
574
  if ( FALSE === $updating && 1 === (int)$settings['validation']['login'] ) {
575
  $instance = IP_Geo_Block::get_instance();
576
- $validate = $instance->validate_ip( 'login', $settings, TRUE, FALSE, FALSE ); // skip authentication check
577
 
578
  switch( $validate['result'] ) {
579
  case 'limited':
@@ -705,8 +704,6 @@ class IP_Geo_Block_Admin {
705
  ($stat ? ' ' . IP_Geo_Block::PLUGIN_NAME . '-border"' : '"'),
706
  ($stat || (4 === $tab && $index) ? '>' : ' style="display:none">'), "\n";
707
 
708
- ++$index;
709
-
710
  if ( $section['callback'] )
711
  call_user_func( $section['callback'], $section );
712
 
@@ -719,6 +716,7 @@ class IP_Geo_Block_Admin {
719
  }
720
 
721
  echo "</div>\n</fieldset>\n";
 
722
  }
723
  }
724
  }
@@ -730,12 +728,12 @@ class IP_Geo_Block_Admin {
730
  public function display_plugin_admin_page() {
731
  $tab = $this->admin_tab;
732
  $tabs = array(
 
733
  0 => __( 'Settings', 'ip-geo-block' ),
734
  1 => __( 'Statistics', 'ip-geo-block' ),
735
  4 => __( 'Logs', 'ip-geo-block' ),
736
  2 => __( 'Search', 'ip-geo-block' ),
737
  3 => __( 'Attribution', 'ip-geo-block' ),
738
- 5 => __( 'Sites list', 'ip-geo-block' ),
739
  );
740
 
741
  $settings = IP_Geo_Block::get_option();
@@ -746,13 +744,14 @@ class IP_Geo_Block_Admin {
746
  if ( 'options-general.php' === $GLOBALS['pagenow'] ) {
747
  $action = 'options.php';
748
  unset( $tabs[5] ); // Sites list
749
- if ( IP_GEO_BLOCK_NETWORK && $this->is_network_admin ) {
 
 
750
  if ( $settings['network_wide'] ) {
751
  unset( $tabs[0] ); // Settings
 
752
  }
753
- $title .= ' <span class="ip-geo-block-menu-link">';
754
- $title .= ' [ <a href="' . esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME ), $this->dashboard_url( TRUE ) ) ) . '" target="_self">' . __( 'Network', 'ip-geo-block' ) . '</a> ]';
755
- $title .= '</span>';
756
  }
757
  }
758
 
@@ -762,13 +761,15 @@ class IP_Geo_Block_Admin {
762
  // `edit.php` ==> do action `network_admin_edit_ip-geo-block` ==> `validate_network_settings()`
763
  $action = 'edit.php?action=' . IP_Geo_Block::PLUGIN_NAME;
764
  if ( $this->is_network_admin ) {
765
- if ( ! $settings['network_wide'] ) {
766
- unset( $tabs[0] ); // remove Settings
767
- }
768
  unset( $tabs[1], $tabs[4], $tabs[2], $tabs[3] ); // Statistics, Logs, Search, Attribution
769
- $title .= ' <span class="ip-geo-block-menu-link">';
770
- $title .= '[ ' . __( 'Network', 'ip-geo-block' ) . ' ]';
771
- $title .= '</span>';
 
 
 
 
 
772
  }
773
  }
774
 
@@ -889,7 +890,7 @@ class IP_Geo_Block_Admin {
889
  foreach ( $args['list'] as $key => $val ) { ?>
890
  <li>
891
  <input type="checkbox" id="<?php echo $id, $sub_id, '_', $key; ?>" name="<?php echo $name, $sub_name, '[', $key, ']'; ?>" value="<?php echo $key; ?>"<?php
892
- checked( is_array( $args['value'] ) ? ! empty( $args['value'][ $key ] ) : ( $key & $args['value'] ? TRUE : FALSE ) ); ?> /><label for="<?php
893
  echo $id, $sub_id, '_', $key; ?>"><?php
894
  if ( isset( $args['desc'][ $key ] ) )
895
  echo '<dfn title="', $args['desc'][ $key ], '">', $val, '</dfn>';
@@ -905,7 +906,7 @@ class IP_Geo_Block_Admin {
905
  case 'checkbox': ?>
906
  <input type="checkbox" id="<?php echo $id, $sub_id; ?>" name="<?php echo $name, $sub_name; ?>" value="1"<?php
907
  checked( esc_attr( $args['value'] ) );
908
- disabled( ! empty( $args['disabled'] ), TRUE ); ?> /><label for="<?php
909
  echo $id, $sub_id; ?>"><?php
910
  if ( isset( $args['text'] ) ) echo esc_attr( $args['text'] );
911
  else if ( isset( $args['html'] ) ) echo $args['html'];
@@ -1060,6 +1061,17 @@ class IP_Geo_Block_Admin {
1060
  }
1061
  break;
1062
 
 
 
 
 
 
 
 
 
 
 
 
1063
  default: // checkbox, select, text
1064
  // single field
1065
  if ( ! is_array( $default[ $key ] ) ) {
@@ -1227,15 +1239,20 @@ class IP_Geo_Block_Admin {
1227
  }
1228
 
1229
  // 3.0.4 AS number, 3.0.8 Geolite2
1230
- $output['Geolite2']['use_asn'] = $output['Maxmind']['use_asn'];
 
 
 
1231
  if ( $output['Maxmind']['use_asn'] && ( ! $output['Maxmind']['asn4_path'] || ! $output['Geolite2']['asn_path'] ) ) {
1232
- // force to update in case of using asn
1233
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-cron.php';
1234
- IP_Geo_Block_Cron::start_update_db( $output, TRUE );
1235
- } else {
1236
- // reset path if file does not exist
 
 
1237
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
1238
- $fs = IP_Geo_Block_FS::init( 'postprocess_options' );
 
1239
  if ( ! $output['Maxmind']['use_asn'] && ! $fs->exists( $output['Maxmind']['asn4_path'] ) ) {
1240
  $output['Maxmind']['asn4_path'] = NULL;
1241
  $output['Maxmind']['asn6_path'] = NULL;
@@ -1377,6 +1394,9 @@ class IP_Geo_Block_Admin {
1377
  // Force to finish update matching rule
1378
  delete_transient( IP_Geo_Block::CRON_NAME );
1379
 
 
 
 
1380
  return $options;
1381
  }
1382
 
@@ -1395,8 +1415,9 @@ class IP_Geo_Block_Admin {
1395
 
1396
  // Go through the posted data and save the targetted options.
1397
  foreach ( $options as $option ) {
1398
- if ( isset( $_POST[ $option ] ) )
1399
  $this->update_multisite_settings( $_POST[ $option ] );
 
1400
  }
1401
 
1402
  // Register a settings error to be displayed to the user
@@ -1418,7 +1439,7 @@ class IP_Geo_Block_Admin {
1418
  *
1419
  * @note: This function triggers `validate_settings()` on register_setting() in wp-include/option.php.
1420
  */
1421
- private function update_multisite_settings( $settings ) {
1422
  global $wpdb;
1423
  $blog_ids = $wpdb->get_col( "SELECT `blog_id` FROM `$wpdb->blogs`" );
1424
  $ret = TRUE;
@@ -1434,6 +1455,86 @@ class IP_Geo_Block_Admin {
1434
  return $ret;
1435
  }
1436
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1437
  /**
1438
  * Ajax callback function
1439
  *
@@ -1498,9 +1599,34 @@ class IP_Geo_Block_Admin {
1498
  break;
1499
 
1500
  case 'restore-logs': // Get logs from MySQL DB
 
1501
  $res = IP_Geo_Block_Admin_Ajax::restore_logs( $which );
1502
  break;
1503
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1504
  case 'validate': // Validate settings
1505
  IP_Geo_Block_Admin_Ajax::validate_settings( $this );
1506
  break;
@@ -1594,29 +1720,6 @@ class IP_Geo_Block_Admin {
1594
  $res = IP_Geo_Block_Admin_Ajax::restore_network( $which, (int)$_POST['offset'], (int)$_POST['length'], FALSE );
1595
  break;
1596
 
1597
- case 'live-start': // Restore live log
1598
- if ( is_wp_error( $res = IP_Geo_Block_Admin_Ajax::restore_live_log( $which, $settings ) ) )
1599
- $res = array( 'error' => $res->get_error_message() );
1600
- break;
1601
-
1602
- case 'live-pause': // Pause live log
1603
- if ( ! is_wp_error( $res = IP_Geo_Block_Admin_Ajax::catch_live_log() ) )
1604
- $res = array( 'data' => array() );
1605
- else
1606
- $res = array( 'error' => $res->get_error_message() );
1607
- break;
1608
-
1609
- case 'live-stop': // Stop live log
1610
- if ( ! is_wp_error( $res = IP_Geo_Block_Admin_Ajax::release_live_log() ) )
1611
- $res = array( 'data' => array() );
1612
- else
1613
- $res = array( 'error' => $res->get_error_message() );
1614
- break;
1615
-
1616
- case 'reset-live': // Reset data source of live log
1617
- $res = IP_Geo_Block_Admin_Ajax::reset_live_log();
1618
- break;
1619
-
1620
  case 'find-admin':
1621
  case 'find-plugins':
1622
  case 'find-themes':
@@ -1624,8 +1727,7 @@ class IP_Geo_Block_Admin {
1624
  $res = IP_Geo_Block_Admin_Ajax::find_exceptions( $cmd );
1625
  break;
1626
 
1627
- case 'diag-tables':
1628
- // Check database tables
1629
  IP_Geo_Block_Logs::diag_tables() or IP_Geo_Block_Logs::create_tables();
1630
  $res = array( 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME );
1631
  break;
8
  * @link https://www.ipgeoblock.com/
9
  * @copyright 2013-2018 tokkonopapa
10
  */
 
11
 
12
  class IP_Geo_Block_Admin {
13
 
443
  }
444
 
445
  if ( $admin_menu ) {
446
+ // `options-general.php` ==> `options.php` ==> `settings-updated` is added as query just after settings updated.
447
  if ( ! empty( $_REQUEST['page'] ) && IP_Geo_Block::PLUGIN_NAME === $_REQUEST['page'] &&
448
  ! empty( $_REQUEST['settings-updated'] ) && $this->is_network_admin && $settings['network_wide'] ) {
449
  $this->update_multisite_settings( $settings );
464
  );
465
  }
466
 
467
+ elseif ( $this->is_network_admin ) {
468
  // Add a settings page for this plugin to the Settings menu.
469
  $hook = add_menu_page(
470
  __( 'IP Geo Block', 'ip-geo-block' ),
475
  //, 'dashicons-admin-site' // or 'data:image/svg+xml;base64...'
476
  );
477
 
 
 
 
 
 
 
 
 
 
 
 
478
  add_submenu_page(
479
  IP_Geo_Block::PLUGIN_NAME,
480
  __( 'IP Geo Block', 'ip-geo-block' ),
484
  array( $this, 'display_plugin_admin_page' )
485
  );
486
 
487
+ if ( $settings['network_wide'] ) {
488
+ add_submenu_page(
489
+ IP_Geo_Block::PLUGIN_NAME,
490
+ __( 'IP Geo Block', 'ip-geo-block' ),
491
+ __( 'Settings', 'ip-geo-block' ),
492
+ 'manage_network_options',
493
+ IP_Geo_Block::PLUGIN_NAME,
494
+ array( $this, 'display_plugin_admin_page' )
495
+ );
496
+ }
497
+
498
  wp_enqueue_style( IP_Geo_Block::PLUGIN_NAME . '-admin-icons',
499
  plugins_url( ! defined( 'IP_GEO_BLOCK_DEBUG' ) || ! IP_GEO_BLOCK_DEBUG ?
500
  'css/admin-icons.min.css' : 'css/admin-icons.css', __FILE__
522
 
523
  if ( ! $settings['api_dir'] || ! file_exists( $settings['api_dir'] ) ) {
524
  $this->add_admin_notice( 'error', sprintf(
525
+ __( 'Can not load Geolocation API libraries from <code>%s</code>. It seems to have failed downloading <a rel="noreferrer" href="https://github.com/tokkonopapa/WordPress-IP-Geo-API/archive/master.zip" title="Download the contents of tokkonopapa/WordPress-IP-Geo-API as a zip file">ZIP file</a> from <a rel="noreferrer" href="https://github.com/tokkonopapa/WordPress-IP-Geo-API" title="tokkonopapa/WordPress-IP-Geo-API - GitHub">WordPress-IP-Geo-API</a>. Try to deactivate IP Geo Block once and activate it again, or install <code>ip-geo-api</code> with write permission according to <a rel="noreferrer" href="https://www.ipgeoblock.com/codex/how-to-fix-permission-troubles.html" title="How can I fix permission troubles? | IP Geo Block">this instruction</a>.', 'ip-geo-block' ),
526
  apply_filters( 'ip-geo-block-api-dir', $settings['api_dir'] ? $settings['api_dir'] : basename( WP_CONTENT_DIR ) )
527
  ) );
528
  }
531
  $providers = IP_Geo_Block_Provider::get_valid_providers( $settings, FALSE, FALSE, TRUE );
532
  if ( empty( $providers ) ) {
533
  $this->add_admin_notice( 'error', sprintf(
534
+ __( 'You should select at least one API at <a href="%s">Geolocation API settings</a>. Otherwise <strong>you\'ll be blocked</strong> after the cache expires.', 'ip-geo-block' ),
535
+ esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 0, 'sec' => 4 ), $adminurl ) ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-4'
536
  ) );
537
  }
538
 
540
  $providers = IP_Geo_Block_Provider::get_addons( $settings['providers'] );
541
  if ( empty( $providers ) ) {
542
  $this->add_admin_notice( 'error', sprintf(
543
+ __( 'You should select at least one API for local database at <a href="%s">Geolocation API settings</a>. Otherwise access to the external API may slow down the site.', 'ip-geo-block' ),
544
  esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 0, 'sec' => 4 ), $adminurl ) ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-4'
545
  ) );
546
  }
572
  // Check self blocking (skip during updating)
573
  if ( FALSE === $updating && 1 === (int)$settings['validation']['login'] ) {
574
  $instance = IP_Geo_Block::get_instance();
575
+ $validate = $instance->validate_ip( 'login', $settings, TRUE, FALSE ); // skip authentication check
576
 
577
  switch( $validate['result'] ) {
578
  case 'limited':
704
  ($stat ? ' ' . IP_Geo_Block::PLUGIN_NAME . '-border"' : '"'),
705
  ($stat || (4 === $tab && $index) ? '>' : ' style="display:none">'), "\n";
706
 
 
 
707
  if ( $section['callback'] )
708
  call_user_func( $section['callback'], $section );
709
 
716
  }
717
 
718
  echo "</div>\n</fieldset>\n";
719
+ ++$index;
720
  }
721
  }
722
  }
728
  public function display_plugin_admin_page() {
729
  $tab = $this->admin_tab;
730
  $tabs = array(
731
+ 5 => __( 'Sites list', 'ip-geo-block' ),
732
  0 => __( 'Settings', 'ip-geo-block' ),
733
  1 => __( 'Statistics', 'ip-geo-block' ),
734
  4 => __( 'Logs', 'ip-geo-block' ),
735
  2 => __( 'Search', 'ip-geo-block' ),
736
  3 => __( 'Attribution', 'ip-geo-block' ),
 
737
  );
738
 
739
  $settings = IP_Geo_Block::get_option();
744
  if ( 'options-general.php' === $GLOBALS['pagenow'] ) {
745
  $action = 'options.php';
746
  unset( $tabs[5] ); // Sites list
747
+ if ( $this->is_network_admin ) {
748
+ $title .= ' <span class="ip-geo-block-menu-link"> [ ';
749
+ $title .= '<a href="' . esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 5 ), $this->dashboard_url( TRUE ) ) ) . '" target="_self">' . __( 'Sites list', 'ip-geo-block' ) . '</a>';
750
  if ( $settings['network_wide'] ) {
751
  unset( $tabs[0] ); // Settings
752
+ $title .= ' / <a href="' . esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 0 ), $this->dashboard_url( TRUE ) ) ) . '" target="_self">' . __( 'Settings', 'ip-geo-block' ) . '</a>';
753
  }
754
+ $title .= ' ]</span>';
 
 
755
  }
756
  }
757
 
761
  // `edit.php` ==> do action `network_admin_edit_ip-geo-block` ==> `validate_network_settings()`
762
  $action = 'edit.php?action=' . IP_Geo_Block::PLUGIN_NAME;
763
  if ( $this->is_network_admin ) {
 
 
 
764
  unset( $tabs[1], $tabs[4], $tabs[2], $tabs[3] ); // Statistics, Logs, Search, Attribution
765
+ $title .= ' <span class="ip-geo-block-menu-link"> [ ';
766
+ $title .= __( 'Sites list', 'ip-geo-block' );
767
+ if ( $settings['network_wide'] ) {
768
+ $title .= ' / ' . __( 'Settings', 'ip-geo-block' );
769
+ } else {
770
+ unset( $tabs[0] ); // Settings
771
+ }
772
+ $title .= ' ]</span>';
773
  }
774
  }
775
 
890
  foreach ( $args['list'] as $key => $val ) { ?>
891
  <li>
892
  <input type="checkbox" id="<?php echo $id, $sub_id, '_', $key; ?>" name="<?php echo $name, $sub_name, '[', $key, ']'; ?>" value="<?php echo $key; ?>"<?php
893
+ checked( is_array( $args['value'] ) ? ! empty( $args['value'][ $key ] ) : ( $key & $args['value'] ? TRUE : FALSE ) ); ?> /><label for="<?php
894
  echo $id, $sub_id, '_', $key; ?>"><?php
895
  if ( isset( $args['desc'][ $key ] ) )
896
  echo '<dfn title="', $args['desc'][ $key ], '">', $val, '</dfn>';
906
  case 'checkbox': ?>
907
  <input type="checkbox" id="<?php echo $id, $sub_id; ?>" name="<?php echo $name, $sub_name; ?>" value="1"<?php
908
  checked( esc_attr( $args['value'] ) );
909
+ disabled( ! empty( $args['disabled'] ), TRUE ); ?> /><label for="<?php
910
  echo $id, $sub_id; ?>"><?php
911
  if ( isset( $args['text'] ) ) echo esc_attr( $args['text'] );
912
  else if ( isset( $args['html'] ) ) echo $args['html'];
1061
  }
1062
  break;
1063
 
1064
+ case 'metadata':
1065
+ if ( isset( $input[ $key ] ) ) {
1066
+ if ( is_string( $input[ $key ]['pre_update_option' ] ) ) {
1067
+ $output[ $key ]['pre_update_option' ] = array_map( 'sanitize_key', explode( ',', trim( $input[ $key ]['pre_update_option' ], ',' ) ) ); // @since 3.0.17
1068
+ }
1069
+ if ( is_string( $input[ $key ]['pre_update_site_option'] ) ) {
1070
+ $output[ $key ]['pre_update_site_option'] = array_map( 'sanitize_key', explode( ',', trim( $input[ $key ]['pre_update_site_option'], ',' ) ) ); // @since 3.0.17
1071
+ }
1072
+ }
1073
+ break;
1074
+
1075
  default: // checkbox, select, text
1076
  // single field
1077
  if ( ! is_array( $default[ $key ] ) ) {
1239
  }
1240
 
1241
  // 3.0.4 AS number, 3.0.8 Geolite2
1242
+ if ( version_compare( PHP_VERSION, '5.4' ) >= 0 )
1243
+ $output['Geolite2']['use_asn'] = $output['Maxmind']['use_asn'];
1244
+
1245
+ // force to update asn file not immediately but after `validate_settings()` and `validate_network_settings()`
1246
  if ( $output['Maxmind']['use_asn'] && ( ! $output['Maxmind']['asn4_path'] || ! $output['Geolite2']['asn_path'] ) ) {
 
1247
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-cron.php';
1248
+ add_action( IP_Geo_Block::PLUGIN_NAME . '-settings-updated', array( 'IP_Geo_Block_Cron', 'start_update_db' ), 10, 2 );
1249
+ }
1250
+
1251
+ // reset path if asn file does not exist
1252
+ else {
1253
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
1254
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
1255
+
1256
  if ( ! $output['Maxmind']['use_asn'] && ! $fs->exists( $output['Maxmind']['asn4_path'] ) ) {
1257
  $output['Maxmind']['asn4_path'] = NULL;
1258
  $output['Maxmind']['asn6_path'] = NULL;
1394
  // Force to finish update matching rule
1395
  delete_transient( IP_Geo_Block::CRON_NAME );
1396
 
1397
+ // start to update databases immediately
1398
+ do_action( IP_Geo_Block::PLUGIN_NAME . '-settings-updated', $options, TRUE );
1399
+
1400
  return $options;
1401
  }
1402
 
1415
 
1416
  // Go through the posted data and save the targetted options.
1417
  foreach ( $options as $option ) {
1418
+ if ( isset( $_POST[ $option ] ) ) {
1419
  $this->update_multisite_settings( $_POST[ $option ] );
1420
+ }
1421
  }
1422
 
1423
  // Register a settings error to be displayed to the user
1439
  *
1440
  * @note: This function triggers `validate_settings()` on register_setting() in wp-include/option.php.
1441
  */
1442
+ public function update_multisite_settings( $settings ) {
1443
  global $wpdb;
1444
  $blog_ids = $wpdb->get_col( "SELECT `blog_id` FROM `$wpdb->blogs`" );
1445
  $ret = TRUE;
1455
  return $ret;
1456
  }
1457
 
1458
+ /**
1459
+ * Analyze entries in "Validation logs"
1460
+ *
1461
+ * @param array $logs An array including each entry where:
1462
+ * Array (
1463
+ * [0 DB row number] => 154
1464
+ * [1 Target ] => comment
1465
+ * [2 Time ] => 1534580897
1466
+ * [3 IP address ] => 102.177.147.***
1467
+ * [4 Country code ] => ZA
1468
+ * [5 Result ] => blocked
1469
+ * [6 AS number ] => AS328239
1470
+ * [7 Request ] => POST[80]:/wp-comments-post.php
1471
+ * [8 User agent ] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) ...
1472
+ * [9 HTTP headers ] => HTTP_ORIGIN=http://localhost,HTTP_X_FORWARDED_FOR=102.177.147.***
1473
+ * [10 $_POST data ] => comment=Hello.,author,email,url,comment_post_ID,comment_parent
1474
+ * )
1475
+ * And put a mark at "Target"
1476
+ * ¹¹: Passed in Whitelist
1477
+ * ¹²: Passed in Blacklist
1478
+ * ¹³: Passed not in list
1479
+ * ²¹: Blocked in Whitelist
1480
+ * ²²: Blocked in Blacklist
1481
+ * ²³: Blocked not in list
1482
+ */
1483
+ public function filter_logs( $logs ) {
1484
+ $settings = IP_Geo_Block::get_option();
1485
+
1486
+ // White/Black list for back-end
1487
+ $white_backend = $settings['white_list'];
1488
+ $black_backend = $settings['black_list'];
1489
+
1490
+ // White/Black list for front-end
1491
+ if ( $settings['public']['matching_rule'] < 0 ) {
1492
+ // Follow "Validation rule settings"
1493
+ $white_frontend = $white_backend;
1494
+ $black_frontend = $black_backend;
1495
+ } else {
1496
+ // Whitelist or Blacklist for "Public facing pages"
1497
+ $white_frontend = $settings['public']['white_list'];
1498
+ $black_frontend = $settings['public']['black_list'];
1499
+ }
1500
+
1501
+ foreach ( $logs as $key => $log ) {
1502
+ // Passed or Blocked
1503
+ $mark = IP_Geo_Block::is_passed( $log[5] ) ? '&sup1;' : '&sup2;';
1504
+
1505
+ // Whitelisted, Blacklisted or N/A
1506
+ if ( 'public' === $log[1] ) {
1507
+ $mark .= IP_Geo_Block::is_listed( $log[4], $white_frontend ) ? '&sup1;' : (
1508
+ IP_Geo_Block::is_listed( $log[4], $black_frontend ) ? '&sup2;' : '&sup3;' );
1509
+ } else {
1510
+ $mark .= IP_Geo_Block::is_listed( $log[4], $white_backend ) ? '&sup1;' : (
1511
+ IP_Geo_Block::is_listed( $log[4], $black_backend ) ? '&sup2;' : '&sup3;' );
1512
+ }
1513
+
1514
+ // Put a mark at "Target"
1515
+ $logs[ $key ][1] .= $mark;
1516
+ }
1517
+
1518
+ return $logs;
1519
+ }
1520
+
1521
+ /**
1522
+ * Register UI "Preset filters" at "Search in logs"
1523
+ *
1524
+ * @param array $filters An empty array by default.
1525
+ * @return array $filters The array of paired with 'title' and 'value'.
1526
+ */
1527
+ public function preset_filters( $filters = array() ) {
1528
+ return array(
1529
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-happy" >&nbsp;</span>' . __( '<span title="Show only passed entries whose country codes are in Whitelist.">Passed in Whitelist</span>', 'ip-geo-block' ), 'value' => '&sup1;&sup1;' ),
1530
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-grin2" >&nbsp;</span>' . __( '<span title="Show only passed entries whose country codes are in Blacklist.">Passed in Blacklist</span>', 'ip-geo-block' ), 'value' => '&sup1;&sup2;' ),
1531
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-cool" >&nbsp;</span>' . __( '<span title="Show only passed entries whose country codes are not in either list.">Passed not in List</span>', 'ip-geo-block' ), 'value' => '&sup1;&sup3;' ),
1532
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-confused" >&nbsp;</span>' . __( '<span title="Show only blocked entries whose country codes are in Whitelist.">Blocked in Whitelist</span>', 'ip-geo-block' ), 'value' => '&sup2;&sup1;' ),
1533
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-confused2">&nbsp;</span>' . __( '<span title="Show only blocked entries whose country codes are in Blacklist.">Blocked in Blacklist</span>', 'ip-geo-block' ), 'value' => '&sup2;&sup2;' ),
1534
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-crying" >&nbsp;</span>' . __( '<span title="Show only blocked entries whose country codes are not in either list.">Blocked not in List</span>', 'ip-geo-block' ), 'value' => '&sup2;&sup3;' ),
1535
+ );
1536
+ }
1537
+
1538
  /**
1539
  * Ajax callback function
1540
  *
1599
  break;
1600
 
1601
  case 'restore-logs': // Get logs from MySQL DB
1602
+ has_filter( $cmd = IP_Geo_Block::PLUGIN_NAME . '-logs' ) or add_filter( $cmd, array( $this, 'filter_logs' ) );
1603
  $res = IP_Geo_Block_Admin_Ajax::restore_logs( $which );
1604
  break;
1605
 
1606
+ case 'live-start': // Restore live log
1607
+ has_filter( $cmd = IP_Geo_Block::PLUGIN_NAME . '-logs' ) or add_filter( $cmd, array( $this, 'filter_logs' ) );
1608
+ if ( is_wp_error( $res = IP_Geo_Block_Admin_Ajax::restore_live_log( $which, $settings ) ) )
1609
+ $res = array( 'error' => $res->get_error_message() );
1610
+ break;
1611
+
1612
+ case 'live-pause': // Pause live log
1613
+ if ( ! is_wp_error( $res = IP_Geo_Block_Admin_Ajax::catch_live_log() ) )
1614
+ $res = array( 'data' => array() );
1615
+ else
1616
+ $res = array( 'error' => $res->get_error_message() );
1617
+ break;
1618
+
1619
+ case 'live-stop': // Stop live log
1620
+ if ( ! is_wp_error( $res = IP_Geo_Block_Admin_Ajax::release_live_log() ) )
1621
+ $res = array( 'data' => array() );
1622
+ else
1623
+ $res = array( 'error' => $res->get_error_message() );
1624
+ break;
1625
+
1626
+ case 'reset-live': // Reset data source of live log
1627
+ $res = IP_Geo_Block_Admin_Ajax::reset_live_log();
1628
+ break;
1629
+
1630
  case 'validate': // Validate settings
1631
  IP_Geo_Block_Admin_Ajax::validate_settings( $this );
1632
  break;
1720
  $res = IP_Geo_Block_Admin_Ajax::restore_network( $which, (int)$_POST['offset'], (int)$_POST['length'], FALSE );
1721
  break;
1722
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1723
  case 'find-admin':
1724
  case 'find-plugins':
1725
  case 'find-themes':
1727
  $res = IP_Geo_Block_Admin_Ajax::find_exceptions( $cmd );
1728
  break;
1729
 
1730
+ case 'diag-tables': // Check database tables
 
1731
  IP_Geo_Block_Logs::diag_tables() or IP_Geo_Block_Logs::create_tables();
1732
  $res = array( 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME );
1733
  break;
admin/css/admin-icons.css CHANGED
@@ -6,11 +6,11 @@
6
  */
7
  @font-face {
8
  font-family: 'icomoon';
9
- src: url('fonts/icomoon.eot?119jp3');
10
- src: url('fonts/icomoon.eot?119jp3#iefix') format('embedded-opentype'),
11
- url('fonts/icomoon.ttf?119jp3') format('truetype'),
12
- url('fonts/icomoon.woff?119jp3') format('woff'),
13
- url('fonts/icomoon.svg?119jp3#icomoon') format('svg');
14
  font-weight: normal;
15
  font-style: normal;
16
  }
@@ -39,42 +39,6 @@
39
  .ip-geo-block-icon-vpn_lock:before {
40
  content: "\e62f";
41
  }
42
- .ip-geo-block-icon-search:before {
43
- content: "\e986";
44
- }
45
- .ip-geo-block-icon-key:before {
46
- content: "\e98d";
47
- }
48
- .ip-geo-block-icon-lock:before {
49
- content: "\e98f";
50
- }
51
- .ip-geo-block-icon-unlocked:before {
52
- content: "\e990";
53
- }
54
- .ip-geo-block-icon-cogs:before {
55
- content: "\e995";
56
- }
57
- .ip-geo-block-icon-pie-chart:before {
58
- content: "\e99a";
59
- }
60
- .ip-geo-block-icon-stats-dots:before {
61
- content: "\e99b";
62
- }
63
- .ip-geo-block-icon-stats-bars:before {
64
- content: "\e99c";
65
- }
66
- .ip-geo-block-icon-stats-bars2:before {
67
- content: "\e99d";
68
- }
69
- .ip-geo-block-icon-switch:before {
70
- content: "\e9b6";
71
- }
72
- .ip-geo-block-icon-sphere:before {
73
- content: "\e9c9";
74
- }
75
- .ip-geo-block-icon-earth:before {
76
- content: "\e9ca";
77
- }
78
  .ip-geo-block-icon-play:before {
79
  content: "\ea1c";
80
  }
@@ -84,15 +48,27 @@
84
  .ip-geo-block-icon-stop:before {
85
  content: "\ea1e";
86
  }
87
- .ip-geo-block-icon-eject:before {
88
- content: "\ea25";
89
- }
90
- .ip-geo-block-icon-new-tab:before {
91
- content: "\ea7e";
92
- }
93
  .ip-geo-block-icon-warning:before {
94
  content: "\e900";
95
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
  /* Dashicons is the official icon font of the WordPress admin as of 3.8+. */
98
  #toplevel_page_ip-geo-block .dashicons-admin-generic:before {
@@ -101,11 +77,3 @@
101
  font-size: 18px;
102
  margin-left: 2px;
103
  }
104
- /*
105
- #toplevel_page_ip-geo-block .dashicons-admin-generic:before {
106
- font-family: 'icomoon';
107
- content: "\e9c9";
108
- font-size: 18px;
109
- margin-left: 2px;
110
- }
111
- */
6
  */
7
  @font-face {
8
  font-family: 'icomoon';
9
+ src: url('fonts/icomoon.eot?jihakz');
10
+ src: url('fonts/icomoon.eot?jihakz#iefix') format('embedded-opentype'),
11
+ url('fonts/icomoon.ttf?jihakz') format('truetype'),
12
+ url('fonts/icomoon.woff?jihakz') format('woff'),
13
+ url('fonts/icomoon.svg?jihakz#icomoon') format('svg');
14
  font-weight: normal;
15
  font-style: normal;
16
  }
39
  .ip-geo-block-icon-vpn_lock:before {
40
  content: "\e62f";
41
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  .ip-geo-block-icon-play:before {
43
  content: "\ea1c";
44
  }
48
  .ip-geo-block-icon-stop:before {
49
  content: "\ea1e";
50
  }
 
 
 
 
 
 
51
  .ip-geo-block-icon-warning:before {
52
  content: "\e900";
53
  }
54
+ .ip-geo-block-icon-happy:before {
55
+ content: "\e9df";
56
+ }
57
+ .ip-geo-block-icon-grin2:before {
58
+ content: "\e9ea";
59
+ }
60
+ .ip-geo-block-icon-cool:before {
61
+ content: "\e9eb";
62
+ }
63
+ .ip-geo-block-icon-confused:before {
64
+ content: "\e9f5";
65
+ }
66
+ .ip-geo-block-icon-confused2:before {
67
+ content: "\e9f6";
68
+ }
69
+ .ip-geo-block-icon-crying:before {
70
+ content: "\ea01";
71
+ }
72
 
73
  /* Dashicons is the official icon font of the WordPress admin as of 3.8+. */
74
  #toplevel_page_ip-geo-block .dashicons-admin-generic:before {
77
  font-size: 18px;
78
  margin-left: 2px;
79
  }
 
 
 
 
 
 
 
 
admin/css/admin-icons.min.css CHANGED
@@ -4,4 +4,4 @@
4
  * Zondicons / Designer: Steve Schoger / License: CC BY 4.0
5
  * Material Icons / Designer: Google / License: Apache License 2.0
6
  */
7
- @font-face{font-family:icomoon;src:url(fonts/icomoon.eot?119jp3);src:url(fonts/icomoon.eot?119jp3#iefix) format('embedded-opentype'),url(fonts/icomoon.ttf?119jp3) format('truetype'),url(fonts/icomoon.woff?119jp3) format('woff'),url(fonts/icomoon.svg?119jp3#icomoon) format('svg');font-weight:400;font-style:normal}[class*=" ip-geo-block-icon-"],[class^=ip-geo-block-icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ip-geo-block-icon-calc{margin-top:.2em!important}.ip-geo-block-icon-calc:before{content:"\e901"}.ip-geo-block-icon-vpn_lock:before{content:"\e62f"}.ip-geo-block-icon-search:before{content:"\e986"}.ip-geo-block-icon-key:before{content:"\e98d"}.ip-geo-block-icon-lock:before{content:"\e98f"}.ip-geo-block-icon-unlocked:before{content:"\e990"}.ip-geo-block-icon-cogs:before{content:"\e995"}.ip-geo-block-icon-pie-chart:before{content:"\e99a"}.ip-geo-block-icon-stats-dots:before{content:"\e99b"}.ip-geo-block-icon-stats-bars:before{content:"\e99c"}.ip-geo-block-icon-stats-bars2:before{content:"\e99d"}.ip-geo-block-icon-switch:before{content:"\e9b6"}.ip-geo-block-icon-sphere:before{content:"\e9c9"}.ip-geo-block-icon-earth:before{content:"\e9ca"}.ip-geo-block-icon-play:before{content:"\ea1c"}.ip-geo-block-icon-pause:before{content:"\ea1d"}.ip-geo-block-icon-stop:before{content:"\ea1e"}.ip-geo-block-icon-eject:before{content:"\ea25"}.ip-geo-block-icon-new-tab:before{content:"\ea7e"}.ip-geo-block-icon-warning:before{content:"\e900"}#toplevel_page_ip-geo-block .dashicons-admin-generic:before{font-family:icomoon;content:"\e62f";font-size:18px;margin-left:2px}
4
  * Zondicons / Designer: Steve Schoger / License: CC BY 4.0
5
  * Material Icons / Designer: Google / License: Apache License 2.0
6
  */
7
+ @font-face{font-family:icomoon;src:url(fonts/icomoon.eot?jihakz);src:url(fonts/icomoon.eot?jihakz#iefix) format('embedded-opentype'),url(fonts/icomoon.ttf?jihakz) format('truetype'),url(fonts/icomoon.woff?jihakz) format('woff'),url(fonts/icomoon.svg?jihakz#icomoon) format('svg');font-weight:400;font-style:normal}[class*=" ip-geo-block-icon-"],[class^=ip-geo-block-icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ip-geo-block-icon-calc{margin-top:.2em!important}.ip-geo-block-icon-calc:before{content:"\e901"}.ip-geo-block-icon-vpn_lock:before{content:"\e62f"}.ip-geo-block-icon-play:before{content:"\ea1c"}.ip-geo-block-icon-pause:before{content:"\ea1d"}.ip-geo-block-icon-stop:before{content:"\ea1e"}.ip-geo-block-icon-warning:before{content:"\e900"}.ip-geo-block-icon-happy:before{content:"\e9df"}.ip-geo-block-icon-grin2:before{content:"\e9ea"}.ip-geo-block-icon-cool:before{content:"\e9eb"}.ip-geo-block-icon-confused:before{content:"\e9f5"}.ip-geo-block-icon-confused2:before{content:"\e9f6"}.ip-geo-block-icon-crying:before{content:"\ea01"}#toplevel_page_ip-geo-block .dashicons-admin-generic:before{font-family:icomoon;content:"\e62f";font-size:18px;margin-left:2px}
admin/css/admin.css CHANGED
@@ -232,10 +232,13 @@ input[id*="ip_geo_block_settings_providers"] + label {
232
  }
233
  ul#ip-geo-block-logs-preset {
234
  margin: 0.25em 0;
 
235
  }
236
  ul#ip-geo-block-logs-preset li {
237
  float: left;
 
238
  margin-right: 1em;
 
239
  }
240
 
241
  /* Loading image */
232
  }
233
  ul#ip-geo-block-logs-preset {
234
  margin: 0.25em 0;
235
+ max-width: 600px;
236
  }
237
  ul#ip-geo-block-logs-preset li {
238
  float: left;
239
+ line-height: 1.6;
240
  margin-right: 1em;
241
+ min-width: 160px;
242
  }
243
 
244
  /* Loading image */
admin/css/admin.min.css 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
- dfn{cursor:help;border-bottom:1px dotted #888}fieldset,legend{padding:0;margin:0;border:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}fieldset{min-width:0}legend{display:block;line-height:inherit;width:100%}label{display:inline-block;max-width:100%}.panel{border-color:#888;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);-moz-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#f5f5f5}.panel-heading{float:left!important;background:#fff}.panel-default>.panel-heading{border-color:inherit}.panel-body{width:100%;padding:0 1em;display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-body:after{clear:both}.ip-geo-block-navi-link{text-align:left}.ip-geo-block-help-link{float:right;font-size:90%;font-weight:400}.ip-geo-block-help-link a{box-shadow:none}fieldset label{vertical-align:text-middle}fieldset input[type=checkbox]{margin:1px 2px 0}fieldset.ip-geo-block-field{margin:1em 0}fieldset.ip-geo-block-field h2,fieldset.ip-geo-block-field h3{padding:0;margin:0;font-size:14px!important}fieldset.ip-geo-block-field h4{margin:.75em 0 .5em 0}fieldset.ip-geo-block-field legend.panel-heading{padding:10px}fieldset.ip-geo-block-field .ip-geo-block-dropdown,fieldset.ip-geo-block-field .ip-geo-block-dropup{cursor:pointer;position:relative;padding-left:1em}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before,fieldset.ip-geo-block-field .ip-geo-block-dropup:before{content:'';height:0;width:0;border:.4em solid transparent;position:absolute}fieldset.ip-geo-block-field .ip-geo-block-dropup:before{border-left:.4em solid #555;left:2px;top:18%}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before{border-top:.4em solid #555;left:-2px;top:38%}fieldset.ip-geo-block-field .form-table .ip-geo-block-dropdown,fieldset.ip-geo-block-field .form-table .ip-geo-block-dropup{margin-top:.75em}fieldset.ip-geo-block-field ul.ip-geo-block-dropup:before{top:.25em}fieldset.ip-geo-block-field ul.ip-geo-block-dropdown:before{top:.5em}fieldset.ip-geo-block-field table.form-table{margin:0 0 .5em;width:100%}textarea.regular-text{width:25em}fieldset.ip-geo-block-field input.regular-text,fieldset.ip-geo-block-field textarea.regular-text{font-size:95%}fieldset.ip-geo-block-field input[type=checkbox],fieldset.ip-geo-block-field input[type=radio],p.ip-geo-block-navi-link input[type=checkbox]{margin-right:.4em}input[id*=ip_geo_block_settings_rewrite_]+label{margin-left:.25em}input[id*=ip_geo_block_settings_providers]+label{min-width:7em}.ip-geo-block-settings-folding{margin:.5em 0}.ip-geo-block-settings-folding ul{margin-bottom:0}.ip-geo-block-settings-folding li{margin:.5em 0}.folding-disable{pointer-events:none;opacity:.5}.folding-inactive{opacity:.5;font-style:oblique!important}.ip-geo-block-float li{display:inline-block;width:18em;margin-top:0}.ip-geo-block-checked{list-style-type:disc}.ip-geo-block-ip-addr{display:inline-block;padding-top:5px}.ip-geo-block-hide{display:none}.ip-geo-block-sup{margin-left:.2em;display:inline-block}.ip-geo-block-note{margin-top:1em;list-style:disc inside}.ip-geo-block-note li{text-indent:-1em;padding-left:1em}.ip-geo-block-border{border-top:inherit}.ip-geo-block-notice{color:#dd3d36}.ip-geo-block-title{width:100px;display:inline-block}.ip-geo-block-result{color:#2786c2;display:inline-block}.ip-geo-block-primary{color:#fff!important;background:#00838f!important;border-color:#00707a!important;text-shadow:none}.ip-geo-block-primary:hover{background-color:#00919e!important;border-color:#00525a!important}ul#ip-geo-block-logs-preset{margin:.25em 0}ul#ip-geo-block-logs-preset li{float:left;margin-right:1em}#ip-geo-block-live-loading,.ip-geo-block-loading{height:16px;width:16px;background-size:16px 16px;background-position:center center;background-repeat:no-repeat;margin-left:1em;margin-top:.2em;display:inline-block;vertical-align:top}.ip-geo-block-loading{background-image:url(data:image/gif;base64,R0lGODlhEAAQAPYCAKqqqsbGxlZWVsrKyvr6+ubm5tDQ0K6urmZmZmJiYuzs7IaGhvT09JycnLq6us7Ozurq6o6OjtbW1tra2vDw8CgoKCYmJvz8/NLS0kJCQlJSUqysrPLy8vb29pqamra2tm5ubujo6Kampvj4+IiIiMjIyEhISNzc3OLi4rKysj4+PlBQULi4uJKSkmRkZODg4KKiou7u7iQkJB4eHlpaWhISErCwsHh4eMDAwDIyMi4uLqSkpIKCgr6+vt7e3n5+fggICJCQkAwMDEpKSmBgYHZ2dhgYGBYWFnx8fF5eXk5OTiIiIjAwMIyMjISEhDQ0NJaWltTU1AQEBBwcHGpqaoqKiuTk5CoqKlhYWAoKCtjY2Hp6ehAQEJ6ensLCwkxMTJSUlCwsLAYGBnR0dDg4OFxcXLy8vKCgoA4ODsTExMzMzDw8PERERDY2NqioqHJycrS0tGhoaBQUFEZGRjo6OkBAQICAgHBwcFRUVCAgIGxsbP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgACACwAAAAAEAAQAEAHjIACgoOEhYJsbTGGghcPGIJRbFNNhgQKCheDDkllDQYMHSc4MAcvhTB0aFliggQjmYNEFQ6LAh0+VoIwbFW1GGamhCgfUE5NbgMKtQYLc0a1gjsyR3E2IYwMFASDYDJvtRRWFIJ1TMq1ElqCICpetQoBEoInVCsAhhI2XhyEPUgIIG7waALlwAloCAMBACH5BAkKAAIALAEAAQAOAA4AAAeDgAKCEmBYYRVKJAaCjAcrVzIzRjVoTw2MKRk5Ww4KECkuWTWCE0Rrl4yCTow7bAupsBcCW19psKkjBEQaFLeMHBwINBy+ggoxVQkPxSMFMXBUMMUQPhRWVUU9tyFRLwQCA048cCcjIyFaJQYxjA8NEVBnAClmahCwEANwbjYBJwyMAgEAIfkECQoABQAsAQABAA4ADgAAB4OABYInO29DbC5QUYKMZiBfbCptTBUmIow4LgJBaTExZkVLFTAFKD8JB4yMQUZrBixUXaqqVFwkUG8Ys4wpQiZOWwy7ghBiRk08HcOqblUTy4wlLWbLBCMFCgBdurMjFMoFE24ADxAXFwwKITEEjD5mH2YBDxI+IdeqHCcGAxgv7IwCAQAh+QQJCgAAACwBAAEADgAOAAAHhYAAglYfTVQJSCITgowDVSAISQJKJgkpjA8LWyIGHBQBJCoZBwAQDU44jIxdTxoSAxEfqqpbFWApUCezjA5LWCJdI7uCClNXGyLCwxBHFl4HBcMAKVxfEx8Y0glZCxwlOCjDUkwPACElAygMghftAB6MClpRJygQFB0EuyMKBQUKDPQxCgQAIfkECQoAAAAsAQABAA4ADgAAB4SAAIIKahstTQ0OVoKMJzYeLVU8W29OXowvBztePh0dUTtxVD0AHDgHEoyMKWVvPj4sBqqqLUoiGDgQs4wBJmNqARe7gjEqXxgPwsMxbWw+UQzDAGY6LjEnusNjFmAEBVbRs00zc1EAHRAKHYw2CHIyO4wEHAwjgmJCZDC7F8psC7IEBQIAIfkECQoARwAsAQABAA4ADgAAB4OAR4IMPgMfNg4PCoKMEA84LCkAMB47GIwxBiUTEAQjKD0REQ9HBD4YIYyMATwtBRQnqaqMG0UOEC8ds4wYIEEQBbuMHC4gMYvCRxw0CAwcF8kBGj8EHdDCJCYiRxfXsw0qCROqRDYQECw3ORkpqjpAQjVGMxYrB7MPC0MyFQItEowCAQAh+QQJCgACACwBAAEADgAOAAAHgIACghcUVhIYEigMgowjEC8nUQ8BOGkojAQxITEdAhcxEh9wPoIMFCOMjBMAKTEXHaipjGldDxcEsqkvUAe5sh1NLb6pHTxNbGK9vlE3DU5ZLsNnIA4GbTVVuQcJdpdnS0Z3LAoxXhF4LjiMMBl5FjptKiZ6ZrJRLUkqbCAwJ4yBACH5BAUKAAEALAEAAQAOAA4AAAd/gAGCARcjHDExHASDjAQdHAoFLy8Ugw2MgiMKWhIKAQ9MYpiCEA8YHQtZCaOCJ14vX2g2rAEKZgMyNRC0BCksFUa7rCMANgIzH7QvZw4tMmO0DlAPUV9hHqNeVTC7G2tkTmkUHA8iSFUGgzZlGSYaNC4gTWqYEzA3SQhVH1aDgQA7)}#ip-geo-block-map{height:400px;margin:1em auto}#ip-geo-block-apis div.nav-tab-wrapper{padding-top:0;margin-bottom:1em}#ip-geo-block-geoinfo{white-space:normal;word-wrap:break-word;word-break:break-all}#ip-geo-block-geoinfo ul{margin-top:0;margin-left:1em}.gm-style-iw{width:18em;height:auto!important;height:100%;min-height:100%:}.gm-style-iw ul{margin:.1em}.gm-style-iw li{margin:.2em}svg a{cursor:pointer}svg a:hover>text{fill:#0096dd}svg a>text{fill:#0073aa;text-decoration:underline}table.ip-geo-block-statistics-table{float:right}table.ip-geo-block-statistics-table td,table.ip-geo-block-statistics-table th{width:12em;margin:0;padding:.2em;text-align:right;line-height:1.5em;word-wrap:break-word}table.ip-geo-block-statistics-table tr:nth-child(even){background-color:#eee}table.ip-geo-block-table{margin:1em 0;white-space:normal;word-wrap:break-word;word-break:break-all}table.ip-geo-block-table td:first-child{min-width:4.3em}@media screen and (max-width:782px){#ip-geo-block-whois .panel-body{padding:0 .5em}}#ip-geo-block-scan-code{vertical-align:middle}#ip-geo-block-code-list{display:none;margin-bottom:0}#ip-geo-block-chart-countries{height:200px}#ip-geo-block-chart-daily{height:240px}#ip_geo_block_settings_validation_mimetype+label{padding-top:.25em}#ip_geo_block_settings_validation_mimetype+label+ul{margin-top:.7em}#ip_geo_block_settings_create_user{margin-bottom:.5em}#ip-geo-block-back-to-top a,#ip-geo-block-toggle-sections{box-shadow:none}#ip-geo-block-wp-info textarea{margin-top:.5em;overflow:auto;width:100%;word-wrap:normal;word-break:normal;white-space:pre}#ip-geo-block-back-to-top{margin:0;text-align:right}#ip-geo-block-live-update,#ip-geo-block-open-new{margin-left:1em}.ip-geo-block-menu-link{font-size:13px!important}dfn~.ip-geo-block-icon{margin-left:.4em}.ip-geo-block-icon{position:relative;cursor:pointer;outline:0;box-shadow:none;text-decoration:none;background-color:transparent}.ip-geo-block-icon:active{top:1px}.ip-geo-block-icon span{height:16px;width:16px;margin:0;border:none;display:inline-block;vertical-align:middle;background-size:16px 16px;background-position:center center;background-repeat:no-repeat}.ip-geo-block-icon-cycle span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAda2otLp+rsSHprWHr8IBd7EpfKRGhaNajqeUqrRymKuKoq5yo7prlKgAcqoVe6w8gqQmgq5Tj6wIdqsVdKIshrEMea1Uhp+Anqw0hawDdq4gfKhljqE7hqoLdKYbgbM4jLQygKUGeK8CdawQd6gVeKcad6NKkrSerrZAj7UAc6sAc6rc3NySrVGQAAAALXRSTlP//////////////////////////////////////////////////////////wCl7wv9AAACOklEQVR4Ae2W15rzKgxF9xTZzhTX9B7S/gN6/9ebYqzzGZsw/S7LV3FZgCSIwD/kQ8FVcBU8xatZUczy8luC/ABNOn0DSHEsvyZ4PgLatNCYR3efFxyhTQ8g+qQgJxgv2JefERzJXATRh4LHOUwAHD4S7OGEztRJaN86hAUxtaNWDUf/bRdDBbQMWVDAO8jn89WUhag1MeyCAh6hHofyrliLgZKggDMYgzF3eVAwFq0uCZq5KY0TezjIHDDzC0qqmkwe2ctGDOQVLMkgu+F3/rGXwb4xIPcJ6P3JgkM8wFjmfcFAWfeKQywaAz33BJVuHsUcAt09gVbuLDThAJkdR687ggLmf4gDJLIGV7BydtB8yn3u+fbtuj/LS7G9wZAd1AKK+yxJ1x+aBmibTtgCcEHGHsh0wdbOgNLek4L7lI5BigY8nWuZUQ3qGEXes9JzOKGJztPaGtLslu3lIXJirdxCWkASHGDTMqg7V1DKPplygDG61YJukLHjEErGSXqCSos6xNSOgzP3BDmsQBcchNwkoV8oiNnPA78zIefUgCdJeGIfE7LmFWXsFTCFdzTJ/RlfEMRiSGnFXXbkC7AIeqcKDu4ynseozeouKJiSEYBDwkJyIC1nRUjgblkNWp/e/1vXc2gjoAoLksYgjrrFMi0oDgjEEIDij1scBXMJSH6DAj6RNl7o8MkuLak8Co15/Pk+MRmT0xilQJV/sdWNKg2kTaeroudvNNsDjmejYjSL+e6v2/2r4Cp4BXNajr0H7hRfAAAAAElFTkSuQmCC)}.ip-geo-block-icon-lock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3Ny3y9Zzq8dRmb7M1dlXnsIFdK0AcawAcqwphrYAcKvZ29wAb6oJd680jrqlw9MBcqxmo8MUfbJLl75eoMI7kbzX2ttqp8VSmL1YnL8NeK+Tu89DlL1ImMEOebBNmL4OkqMoAAAAAXRSTlMAQObYZgAAAPlJREFUeAG9kAWyhTAQBIPOsCzufv9TPnf4Ll0CSbpmxXwNy3Yc23rz2fV8kPA99433AIQIiGDTCD0lojiOQPXCDSFJIbF16CMWItkQMkF+inZzSLYhFKLl+a9UKTZaqJTZJYtarZuo40chrv9CqJTN+behVi+Cm7RdDgRld6AMgLxrE/dxBz0BEjwBEmD/uIsWPAOAF9A+CE56ufSryr8oqfOYcBbQJ8YkES7COkFOYzTypqCDOTDo2wljaEw4vp1APYyWKd8WMBozylvCpcvmXeHQ5fCegHia4s1FgZcIVeVFeFx1M4MvYG4eBHdYWufC+addBtf8E3vdjBNhWnVQqAAAAABJRU5ErkJggg==)}.ip-geo-block-icon-unlock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NyzydRzq8dRmb7I09hYnsEFdK0AcawAcqzP1toqhrYAcKvZ29wAb6oMeK8zjbqrxtQBcazBz9Zko8MVfbLF0thMmL07kbtpp8WjwtJSmL1YnL+Tu89DlL1JmMEPebBFV++UAAAAAXRSTlMAQObYZgAAAONJREFUeAG9kAWChDAMAIMmJaTFXf7/ynXflvMbnE5j8DU8Pwh8D1yEUYxEGEchWFEJEjEflESBhTQSQm2MRpIotQhZTmgKgMIg5ZlFKBmrGg7UFXJpEQKW8qIKN7YeikJdBJI2BTtXwfyx0L3XoPphvBEliNU49OoxqEa6g4cTST/OYshvi3hV8+FxSNfluG3jqxG8C6h7gF6jU+AODnTsFGSCA5O4I8wpQDq7I5CUAKWQW+AZYOYtoQPoGDeECWDaioBmWQxeBduoWURso+5WpBdw7R4ENTVDcGE435tJwT+xB+vMEnZRNB0YAAAAAElFTkSuQmCC)}.ip-geo-block-icon-find span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NzS19rD0NWHtMpGk7kYfbAGda0Req+WtcTT1temwM4AcasAcqwAc6wAcKydvMt1pr8Ab6pqpcLX2doggrKoxdNYm7yzw8u/y9HO1tkKdq4th7Td3t6DrcLL0taxyNPGe/YhAAAAAXRSTlMAQObYZgAAARVJREFUeAGtkkeiwyAMRP2xDfxoRjElvd3/lOkNUlZ5u0GPruan/Bnz96Xadr21rvP/7+ujXsAjom78rj4ApCoERIipqfGB1H7wPmYhw1DXjZI6nOel1oJhVAmdUP0tTEDkVC4AYvqIbaDOCqFV6vwRF0tIeYoo6J/X7ICuPAJl9ZynwiIfB5DXxZlRChulbh8xZci0EHZK3TziJFDL504rEOZ+iR5cVj82DoS7XtSshLJpKqaB0Dg3ZjcsQWKaKiF1gVQlITwh/bw2pgKeEeURhE29yKSzUFF03p1V7Wqj2Y7GfrY9X/NirJsPxKsxfBLSSs5GmH8yjAWPSNd8Yoez4f4/G1nIsksqFtGK1i9e39o0P+EAqaoRLlQ+r94AAAAASUVORK5CYII=)}.ip-geo-block-icon-alert span,span.ip-geo-block-icon-alert{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAkFBMVEXc3Nzc2trWl5DHRDTFOyvOgXfc1tXCLBrEMiHEMyLNcmfaxMLDMSDDLx7bu7jRiYHDLhzDMB/LX1PaxsTDLh3YtrHMY1bWmpPJVknSjYXUkYnZuLTMZVnENCPWlI3QhXzENiXXrqrDLRzXsa3Oal7Pe3Hc2NjVn5nNbmPayMbbwb7ay8rUj4fc09Lbw8Db0dDBbRUDAAAAAXRSTlMAQObYZgAAAPVJREFUeAG9ktXWwyAQBonC12brFvff5f2frr4nBredK2DnTFS8Gst2XM8XZmypIGeWcT4PFABaGIXlClfWG1NiC4Ubu705oKRcY32wTAHl2MdTYEqEK8hIiHgHSnSJeaogMyEWO4BijZCvwII2MS9UJ2BXTh+hQidoEttboBOwq3WBnkCNpQlA2iyAhol2hRu71n97p4fw0Z9/ugoPHCfFA+o/iLfCkyBglRJdICBas7uuey+R56fF14wNanj+/QjwY3aX23cBFn6EiHmHNT/ICYxystv/wJy4UHWGlN2cuPB72tFqAq3dP/Hk3zs0E5LZVryGC/hqGNnUa0SVAAAAAElFTkSuQmCC);vertical-align:bottom}table.form-table th .ip-geo-block-cycle span{vertical-align:text-bottom}.ip-geo-block-list{margin-top:0;margin-bottom:.7em}@media screen and (min-width:782px){ul.ip-geo-block-list .code{width:15em}}.ip-geo-block-list-exceptions label{display:inline-block}.ip-geo-block-list-exceptions dfn{border:none}.ip-geo-block-list-exceptions span.dashicons{font-size:14px}.ip-geo-block-list-exceptions a.ip-geo-block-icon{margin-left:.3em;outline:0;box-shadow:none;text-decoration:none;background-color:transparent}.form-table td p.ip-geo-block-desc,.form-table td p.ip-geo-block-find-desc{color:#666;font-size:13px!important;margin:4px 0 .5em .5em}.ip-geo-block-find-desc{display:none}.ip-geo-block-admin-post{color:#c43322;margin-left:.25em}.ip-geo-block-warn{color:#c43322;font-weight:700}input#ip_geo_block_settings_behavior_time,input#ip_geo_block_settings_behavior_view{width:3.5em}.ip-geo-block-top-list{display:inline-table;list-style-position:outside;margin:0 2em .5em 1.75em}.ip-geo-block-top-list h4{margin:1em 0}.ip-geo-block-top-list li code{background:0 0}.ip-geo-block-network{margin-bottom:1em}.ip-geo-block-container{margin:0 auto;padding:0 1em;position:relative;width:100%}.ip-geo-block-row{display:flex;flex-direction:column;align-items:flex-start;align-items:stretch;padding:0;width:100%}.ip-geo-block-row .ip-geo-block-column{display:block;flex:1 1 auto;align-self:flex-start;margin-left:0;max-width:100%;width:100%}.ip-geo-block-row .ip-geo-block-column.column-20{flex:0 0 20%;max-width:20%}.ip-geo-block-row .ip-geo-block-column.column-25{flex:0 0 25%;max-width:25%}.ip-geo-block-row .ip-geo-block-column.column-33{flex:0 0 33.3333%;max-width:33.3333%}.ip-geo-block-row .ip-geo-block-column.column-50{flex:0 0 50%;max-width:50%}@media (min-width:40rem){.ip-geo-block-row{flex-direction:row;margin-left:-2em;width:calc(100% + 2em)}.ip-geo-block-row .ip-geo-block-column{margin-bottom:inherit;padding:0 1em}}table.ip-geo-block-dataTable{clear:none!important}table.ip-geo-block-dataTable td,table.ip-geo-block-dataTable th{text-align:right}table.ip-geo-block-dataTable td:nth-child(n+2),table.ip-geo-block-dataTable th:nth-child(n+2){padding-left:0!important}table.ip-geo-block-dataTable th{white-space:nowrap}table.ip-geo-block-dataTable>thead>tr{line-height:1.8em}table.ip-geo-block-dataTable>tbody>tr{cursor:pointer}table.ip-geo-block-dataTable.no-footer,table.ip-geo-block-dataTable>thead>tr>td,table.ip-geo-block-dataTable>thead>tr>th{border-bottom:1px solid #ddd}table.ip-geo-block-dataTable thead td,table.ip-geo-block-dataTable thead th{padding:10px 16px}#ip-geo-block-statistics-cache td:nth-child(3),#ip-geo-block-validation-logs td:nth-child(4){min-width:1.6em}div[class*=ip-geo-block] .dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #ddd}table.ip-geo-block-dataTable.nowrap td,table.ip-geo-block-dataTable>tbody>tr>td span{white-space:normal!important;word-wrap:break-word!important;word-break:break-all!important}table.ip-geo-block-dataTable>tbody>tr>td span{display:inline-block}.ip-geo-block-settings-folding input[type=checkbox]{margin-right:.5em}table.ip-geo-block-dataTable input[type=checkbox]{max-height:16px;max-width:16px;margin:0}table.ip-geo-block-dataTable>tbody>tr>td:first-child,table.ip-geo-block-dataTable>thead>tr>th:first-child{padding:8px 4px 8px 1.4em;text-align:left}table.collapsed>tbody>tr>td.dataTables_empty:first-child::before,table.ip-geo-block-dataTable>tbody>tr>td.dataTables_empty{border:none;text-align:center}table.ip-geo-block-dataTable thead>tr>th:first-child.sorting_asc{background-image:none!important}table.ip-geo-block-dataTable.display tbody tr.even>.sorting_1,table.ip-geo-block-dataTable.display tbody tr.odd>.sorting_1,table.ip-geo-block-dataTable.display tbody tr:hover>.sorting_1{background-color:inherit!important}table.ip-geo-block-dataTable.collapsed>tbody>tr>td:first-child{padding:8px 4px 8px 8px!important}table.collapsed>tbody>tr.parent>td:first-child::before,table.collapsed>tbody>tr>td:first-child::before{content:'';height:0;width:0;display:inline-block;border-radius:0;border:5px solid transparent;box-shadow:none;position:relative;background-color:transparent}table.collapsed>tbody>tr>td:first-child::before{border-left:5px solid #555;top:1px;left:-2px}table.collapsed>tbody>tr.parent>td:first-child::before{border-top:5px solid #555;top:4px;left:-4px}table.collapsed>tbody>tr.child>td:first-child::before{border:none}table.collapsed>tbody>tr.child>td.child>ul li{border:none;padding:0;margin:0;line-height:1.8em}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data,table.collapsed>tbody>tr.child>td.child>ul li span.dtr-title{font-size:13px!important;display:block;white-space:normal;word-wrap:break-word;word-break:break-all}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data{margin-left:1.25em;margin-right:.3em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length{padding-top:.15em;margin:.5em 0 0 .3em;position:relative;display:inline-block}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length:after{content:'';width:6px;height:6px;border:0;border-bottom:solid 2px #999;border-right:solid 2px #999;-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;top:50%;right:10px;margin-top:-4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length select{padding-top:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:13px!important;line-height:1.4em;width:100%;height:2.05em!important;background:0 0;position:relative;z-index:1;padding:.125em 1.5em .125em .25em;border:1px solid #ddd;border-radius:4px;box-shadow:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length select::-ms-expand{display:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{float:none;text-align:center;margin-bottom:1em;margin-top:0!important}@media screen and (min-width:640px){div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length{margin:.5em 0 0 .6em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{position:relative;left:-2.25em}}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate span.ellipsis{min-width:2em;background:inherit;border-color:#ddd;border-radius:0;border-image:none;border-style:solid;border-width:1px 1px 1px 0;box-shadow:none;margin:.5em 0 0 0;padding:.25em 0;display:inline-block;text-decoration:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:active>a.paginate_button:first-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:first-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate>a.paginate_button:first-child{border-left-width:1px;border-bottom-left-radius:4px;border-top-left-radius:4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:active>a.paginate_button:last-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:last-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate>a.paginate_button:last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button{color:#0073aa!important}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover{color:#0096dd!important;background-color:#fff}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate span.ellipsis{cursor:default;color:#999!important;background-color:transparent}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover{cursor:default;color:#444!important;background-color:#fff!important}#ip-geo-block-1 #ip-geo-block-section-2 .panel-body,#ip-geo-block-4 #ip-geo-block-section-0 .panel-body{padding:0}#ip-geo-block-1 #ip-geo-block-section-2 table.form-table,#ip-geo-block-4 #ip-geo-block-section-0 table.form-table{margin-left:1em;max-width:95%}#ip-geo-block-select-duration,#ip-geo-block-select-layout,#ip-geo-block-select-target{margin:0}#ip-geo-block-select-duration li,#ip-geo-block-select-layout li,#ip-geo-block-select-target li{float:left;margin-right:1.5em}#ip-geo-block-select-duration li label,#ip-geo-block-select-target li label{cursor:pointer}#ip_geo_block_settings_search_filter{width:16em;padding-top:3px}table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-passed{background-color:#edf6ff!important}table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-blocked{background-color:#ffefef!important}.ip-geo-block-new-passed{animation:ip-geo-block-flash-passed 1s ease-out 0s 1 normal both running}.ip-geo-block-new-blocked{animation:ip-geo-block-flash-blocked 1s ease-out 0s 1 normal both running}@keyframes ip-geo-block-flash-passed{0%{background-color:gold}100%{background-color:#edf6ff}}@keyframes ip-geo-block-flash-blocked{0%{background-color:gold}100%{background-color:#ffefef}}mark{padding:0;background:gold}// Gold #ip-geo-block-live-log{margin:0}#ip-geo-block-live-log li{float:left;margin-right:3em}#ip-geo-block-live-log li:last-child{margin-right:0}#ip-geo-block-live-log li input[type=radio]{visibility:hidden;position:absolute}#ip-geo-block-live-log li input[type=radio]+label{display:inline-block;margin:-2px;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border-bottom-color:#b3b3b3;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}#ip-geo-block-live-log li input[type=radio]:checked+label{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);background-color:#e0e0e0}.ip-geo-block-live-timer{height:1em;width:1em;margin:0;position:relative;top:0;left:0}.ip-geo-block-live-timer:before{content:"";display:block;height:1em;width:1em;background:#0073aa;border-radius:50%;position:absolute;top:0;left:0}.ip-geo-block-live-timer:after{display:none}.ip-geo-block-live-timer>div{position:absolute;width:1em;height:1em;clip:rect(0,1em,1em,.5em)}.ip-geo-block-live-timer>div:before{content:" ";position:absolute;width:1em;height:1em;border-radius:.5em;clip:rect(0,.5em,1em,0);background-color:#f1f1f1;transform:rotate(0)}.ip-geo-block-live-timer>div:first-child:before{animation:30s spin-timer linear forwards}.ip-geo-block-live-timer>div:last-child{transform:rotate(180deg)}.ip-geo-block-live-timer>div:last-child:before{transform:rotate(0);animation:30s spin-timer linear 30s forwards}@keyframes spin-timer{0%{transform:rotate(0)}100%{transform:rotate(180deg)}}.ip-geo-block-subitem{margin-left:1.7em}.ip-geo-block-subitem:before{content:"\00bb";position:absolute;left:2em}.ip-geo-block-subitem dfn{vertical-align:middle}.ip-geo-block-subitem-parent td,.ip-geo-block-subitem-parent th{padding-top:0}:placeholder-shown{color:#888}::-webkit-input-placeholder{color:#888}:-moz-placeholder{color:#888;opacity:1}::-moz-placeholder{color:#888;opacity:1}:-ms-input-placeholder{color:#888}
3
  * Copyright (c) 2013-2018 tokkonopapa (tokkonopapa@yahoo.com)
4
  * This software is released under the MIT License.
5
  */
6
+ dfn{cursor:help;border-bottom:1px dotted #888}fieldset,legend{padding:0;margin:0;border:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}fieldset{min-width:0}legend{display:block;line-height:inherit;width:100%}label{display:inline-block;max-width:100%}.panel{border-color:#888;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);-moz-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#f5f5f5}.panel-heading{float:left!important;background:#fff}.panel-default>.panel-heading{border-color:inherit}.panel-body{width:100%;padding:0 1em;display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-body:after{clear:both}.ip-geo-block-navi-link{text-align:left}.ip-geo-block-help-link{float:right;font-size:90%;font-weight:400}.ip-geo-block-help-link a{box-shadow:none}fieldset label{vertical-align:text-middle}fieldset input[type=checkbox]{margin:1px 2px 0}fieldset.ip-geo-block-field{margin:1em 0}fieldset.ip-geo-block-field h2,fieldset.ip-geo-block-field h3{padding:0;margin:0;font-size:14px!important}fieldset.ip-geo-block-field h4{margin:.75em 0 .5em 0}fieldset.ip-geo-block-field legend.panel-heading{padding:10px}fieldset.ip-geo-block-field .ip-geo-block-dropdown,fieldset.ip-geo-block-field .ip-geo-block-dropup{cursor:pointer;position:relative;padding-left:1em}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before,fieldset.ip-geo-block-field .ip-geo-block-dropup:before{content:'';height:0;width:0;border:.4em solid transparent;position:absolute}fieldset.ip-geo-block-field .ip-geo-block-dropup:before{border-left:.4em solid #555;left:2px;top:18%}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before{border-top:.4em solid #555;left:-2px;top:38%}fieldset.ip-geo-block-field .form-table .ip-geo-block-dropdown,fieldset.ip-geo-block-field .form-table .ip-geo-block-dropup{margin-top:.75em}fieldset.ip-geo-block-field ul.ip-geo-block-dropup:before{top:.25em}fieldset.ip-geo-block-field ul.ip-geo-block-dropdown:before{top:.5em}fieldset.ip-geo-block-field table.form-table{margin:0 0 .5em;width:100%}textarea.regular-text{width:25em}fieldset.ip-geo-block-field input.regular-text,fieldset.ip-geo-block-field textarea.regular-text{font-size:95%}fieldset.ip-geo-block-field input[type=checkbox],fieldset.ip-geo-block-field input[type=radio],p.ip-geo-block-navi-link input[type=checkbox]{margin-right:.4em}input[id*=ip_geo_block_settings_rewrite_]+label{margin-left:.25em}input[id*=ip_geo_block_settings_providers]+label{min-width:7em}.ip-geo-block-settings-folding{margin:.5em 0}.ip-geo-block-settings-folding ul{margin-bottom:0}.ip-geo-block-settings-folding li{margin:.5em 0}.folding-disable{pointer-events:none;opacity:.5}.folding-inactive{opacity:.5;font-style:oblique!important}.ip-geo-block-float li{display:inline-block;width:18em;margin-top:0}.ip-geo-block-checked{list-style-type:disc}.ip-geo-block-ip-addr{display:inline-block;padding-top:5px}.ip-geo-block-hide{display:none}.ip-geo-block-sup{margin-left:.2em;display:inline-block}.ip-geo-block-note{margin-top:1em;list-style:disc inside}.ip-geo-block-note li{text-indent:-1em;padding-left:1em}.ip-geo-block-border{border-top:inherit}.ip-geo-block-notice{color:#dd3d36}.ip-geo-block-title{width:100px;display:inline-block}.ip-geo-block-result{color:#2786c2;display:inline-block}.ip-geo-block-primary{color:#fff!important;background:#00838f!important;border-color:#00707a!important;text-shadow:none}.ip-geo-block-primary:hover{background-color:#00919e!important;border-color:#00525a!important}ul#ip-geo-block-logs-preset{margin:.25em 0;max-width:600px}ul#ip-geo-block-logs-preset li{float:left;line-height:1.6;margin-right:1em;min-width:160px}#ip-geo-block-live-loading,.ip-geo-block-loading{height:16px;width:16px;background-size:16px 16px;background-position:center center;background-repeat:no-repeat;margin-left:1em;margin-top:.2em;display:inline-block;vertical-align:top}.ip-geo-block-loading{background-image:url(data:image/gif;base64,R0lGODlhEAAQAPYCAKqqqsbGxlZWVsrKyvr6+ubm5tDQ0K6urmZmZmJiYuzs7IaGhvT09JycnLq6us7Ozurq6o6OjtbW1tra2vDw8CgoKCYmJvz8/NLS0kJCQlJSUqysrPLy8vb29pqamra2tm5ubujo6Kampvj4+IiIiMjIyEhISNzc3OLi4rKysj4+PlBQULi4uJKSkmRkZODg4KKiou7u7iQkJB4eHlpaWhISErCwsHh4eMDAwDIyMi4uLqSkpIKCgr6+vt7e3n5+fggICJCQkAwMDEpKSmBgYHZ2dhgYGBYWFnx8fF5eXk5OTiIiIjAwMIyMjISEhDQ0NJaWltTU1AQEBBwcHGpqaoqKiuTk5CoqKlhYWAoKCtjY2Hp6ehAQEJ6ensLCwkxMTJSUlCwsLAYGBnR0dDg4OFxcXLy8vKCgoA4ODsTExMzMzDw8PERERDY2NqioqHJycrS0tGhoaBQUFEZGRjo6OkBAQICAgHBwcFRUVCAgIGxsbP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgACACwAAAAAEAAQAEAHjIACgoOEhYJsbTGGghcPGIJRbFNNhgQKCheDDkllDQYMHSc4MAcvhTB0aFliggQjmYNEFQ6LAh0+VoIwbFW1GGamhCgfUE5NbgMKtQYLc0a1gjsyR3E2IYwMFASDYDJvtRRWFIJ1TMq1ElqCICpetQoBEoInVCsAhhI2XhyEPUgIIG7waALlwAloCAMBACH5BAkKAAIALAEAAQAOAA4AAAeDgAKCEmBYYRVKJAaCjAcrVzIzRjVoTw2MKRk5Ww4KECkuWTWCE0Rrl4yCTow7bAupsBcCW19psKkjBEQaFLeMHBwINBy+ggoxVQkPxSMFMXBUMMUQPhRWVUU9tyFRLwQCA048cCcjIyFaJQYxjA8NEVBnAClmahCwEANwbjYBJwyMAgEAIfkECQoABQAsAQABAA4ADgAAB4OABYInO29DbC5QUYKMZiBfbCptTBUmIow4LgJBaTExZkVLFTAFKD8JB4yMQUZrBixUXaqqVFwkUG8Ys4wpQiZOWwy7ghBiRk08HcOqblUTy4wlLWbLBCMFCgBdurMjFMoFE24ADxAXFwwKITEEjD5mH2YBDxI+IdeqHCcGAxgv7IwCAQAh+QQJCgAAACwBAAEADgAOAAAHhYAAglYfTVQJSCITgowDVSAISQJKJgkpjA8LWyIGHBQBJCoZBwAQDU44jIxdTxoSAxEfqqpbFWApUCezjA5LWCJdI7uCClNXGyLCwxBHFl4HBcMAKVxfEx8Y0glZCxwlOCjDUkwPACElAygMghftAB6MClpRJygQFB0EuyMKBQUKDPQxCgQAIfkECQoAAAAsAQABAA4ADgAAB4SAAIIKahstTQ0OVoKMJzYeLVU8W29OXowvBztePh0dUTtxVD0AHDgHEoyMKWVvPj4sBqqqLUoiGDgQs4wBJmNqARe7gjEqXxgPwsMxbWw+UQzDAGY6LjEnusNjFmAEBVbRs00zc1EAHRAKHYw2CHIyO4wEHAwjgmJCZDC7F8psC7IEBQIAIfkECQoARwAsAQABAA4ADgAAB4OAR4IMPgMfNg4PCoKMEA84LCkAMB47GIwxBiUTEAQjKD0REQ9HBD4YIYyMATwtBRQnqaqMG0UOEC8ds4wYIEEQBbuMHC4gMYvCRxw0CAwcF8kBGj8EHdDCJCYiRxfXsw0qCROqRDYQECw3ORkpqjpAQjVGMxYrB7MPC0MyFQItEowCAQAh+QQJCgACACwBAAEADgAOAAAHgIACghcUVhIYEigMgowjEC8nUQ8BOGkojAQxITEdAhcxEh9wPoIMFCOMjBMAKTEXHaipjGldDxcEsqkvUAe5sh1NLb6pHTxNbGK9vlE3DU5ZLsNnIA4GbTVVuQcJdpdnS0Z3LAoxXhF4LjiMMBl5FjptKiZ6ZrJRLUkqbCAwJ4yBACH5BAUKAAEALAEAAQAOAA4AAAd/gAGCARcjHDExHASDjAQdHAoFLy8Ugw2MgiMKWhIKAQ9MYpiCEA8YHQtZCaOCJ14vX2g2rAEKZgMyNRC0BCksFUa7rCMANgIzH7QvZw4tMmO0DlAPUV9hHqNeVTC7G2tkTmkUHA8iSFUGgzZlGSYaNC4gTWqYEzA3SQhVH1aDgQA7)}#ip-geo-block-map{height:400px;margin:1em auto}#ip-geo-block-apis div.nav-tab-wrapper{padding-top:0;margin-bottom:1em}#ip-geo-block-geoinfo{white-space:normal;word-wrap:break-word;word-break:break-all}#ip-geo-block-geoinfo ul{margin-top:0;margin-left:1em}.gm-style-iw{width:18em;height:auto!important;height:100%;min-height:100%:}.gm-style-iw ul{margin:.1em}.gm-style-iw li{margin:.2em}svg a{cursor:pointer}svg a:hover>text{fill:#0096dd}svg a>text{fill:#0073aa;text-decoration:underline}table.ip-geo-block-statistics-table{float:right}table.ip-geo-block-statistics-table td,table.ip-geo-block-statistics-table th{width:12em;margin:0;padding:.2em;text-align:right;line-height:1.5em;word-wrap:break-word}table.ip-geo-block-statistics-table tr:nth-child(even){background-color:#eee}table.ip-geo-block-table{margin:1em 0;white-space:normal;word-wrap:break-word;word-break:break-all}table.ip-geo-block-table td:first-child{min-width:4.3em}@media screen and (max-width:782px){#ip-geo-block-whois .panel-body{padding:0 .5em}}#ip-geo-block-scan-code{vertical-align:middle}#ip-geo-block-code-list{display:none;margin-bottom:0}#ip-geo-block-chart-countries{height:200px}#ip-geo-block-chart-daily{height:240px}#ip_geo_block_settings_validation_mimetype+label{padding-top:.25em}#ip_geo_block_settings_validation_mimetype+label+ul{margin-top:.7em}#ip_geo_block_settings_create_user{margin-bottom:.5em}#ip-geo-block-back-to-top a,#ip-geo-block-toggle-sections{box-shadow:none}#ip-geo-block-wp-info textarea{margin-top:.5em;overflow:auto;width:100%;word-wrap:normal;word-break:normal;white-space:pre}#ip-geo-block-back-to-top{margin:0;text-align:right}#ip-geo-block-live-update,#ip-geo-block-open-new{margin-left:1em}.ip-geo-block-menu-link{font-size:13px!important}dfn~.ip-geo-block-icon{margin-left:.4em}.ip-geo-block-icon{position:relative;cursor:pointer;outline:0;box-shadow:none;text-decoration:none;background-color:transparent}.ip-geo-block-icon:active{top:1px}.ip-geo-block-icon span{height:16px;width:16px;margin:0;border:none;display:inline-block;vertical-align:middle;background-size:16px 16px;background-position:center center;background-repeat:no-repeat}.ip-geo-block-icon-cycle span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAda2otLp+rsSHprWHr8IBd7EpfKRGhaNajqeUqrRymKuKoq5yo7prlKgAcqoVe6w8gqQmgq5Tj6wIdqsVdKIshrEMea1Uhp+Anqw0hawDdq4gfKhljqE7hqoLdKYbgbM4jLQygKUGeK8CdawQd6gVeKcad6NKkrSerrZAj7UAc6sAc6rc3NySrVGQAAAALXRSTlP//////////////////////////////////////////////////////////wCl7wv9AAACOklEQVR4Ae2W15rzKgxF9xTZzhTX9B7S/gN6/9ebYqzzGZsw/S7LV3FZgCSIwD/kQ8FVcBU8xatZUczy8luC/ABNOn0DSHEsvyZ4PgLatNCYR3efFxyhTQ8g+qQgJxgv2JefERzJXATRh4LHOUwAHD4S7OGEztRJaN86hAUxtaNWDUf/bRdDBbQMWVDAO8jn89WUhag1MeyCAh6hHofyrliLgZKggDMYgzF3eVAwFq0uCZq5KY0TezjIHDDzC0qqmkwe2ctGDOQVLMkgu+F3/rGXwb4xIPcJ6P3JgkM8wFjmfcFAWfeKQywaAz33BJVuHsUcAt09gVbuLDThAJkdR687ggLmf4gDJLIGV7BydtB8yn3u+fbtuj/LS7G9wZAd1AKK+yxJ1x+aBmibTtgCcEHGHsh0wdbOgNLek4L7lI5BigY8nWuZUQ3qGEXes9JzOKGJztPaGtLslu3lIXJirdxCWkASHGDTMqg7V1DKPplygDG61YJukLHjEErGSXqCSos6xNSOgzP3BDmsQBcchNwkoV8oiNnPA78zIefUgCdJeGIfE7LmFWXsFTCFdzTJ/RlfEMRiSGnFXXbkC7AIeqcKDu4ynseozeouKJiSEYBDwkJyIC1nRUjgblkNWp/e/1vXc2gjoAoLksYgjrrFMi0oDgjEEIDij1scBXMJSH6DAj6RNl7o8MkuLak8Co15/Pk+MRmT0xilQJV/sdWNKg2kTaeroudvNNsDjmejYjSL+e6v2/2r4Cp4BXNajr0H7hRfAAAAAElFTkSuQmCC)}.ip-geo-block-icon-lock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3Ny3y9Zzq8dRmb7M1dlXnsIFdK0AcawAcqwphrYAcKvZ29wAb6oJd680jrqlw9MBcqxmo8MUfbJLl75eoMI7kbzX2ttqp8VSmL1YnL8NeK+Tu89DlL1ImMEOebBNmL4OkqMoAAAAAXRSTlMAQObYZgAAAPlJREFUeAG9kAWyhTAQBIPOsCzufv9TPnf4Ll0CSbpmxXwNy3Yc23rz2fV8kPA99433AIQIiGDTCD0lojiOQPXCDSFJIbF16CMWItkQMkF+inZzSLYhFKLl+a9UKTZaqJTZJYtarZuo40chrv9CqJTN+behVi+Cm7RdDgRld6AMgLxrE/dxBz0BEjwBEmD/uIsWPAOAF9A+CE56ufSryr8oqfOYcBbQJ8YkES7COkFOYzTypqCDOTDo2wljaEw4vp1APYyWKd8WMBozylvCpcvmXeHQ5fCegHia4s1FgZcIVeVFeFx1M4MvYG4eBHdYWufC+addBtf8E3vdjBNhWnVQqAAAAABJRU5ErkJggg==)}.ip-geo-block-icon-unlock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NyzydRzq8dRmb7I09hYnsEFdK0AcawAcqzP1toqhrYAcKvZ29wAb6oMeK8zjbqrxtQBcazBz9Zko8MVfbLF0thMmL07kbtpp8WjwtJSmL1YnL+Tu89DlL1JmMEPebBFV++UAAAAAXRSTlMAQObYZgAAAONJREFUeAG9kAWChDAMAIMmJaTFXf7/ynXflvMbnE5j8DU8Pwh8D1yEUYxEGEchWFEJEjEflESBhTQSQm2MRpIotQhZTmgKgMIg5ZlFKBmrGg7UFXJpEQKW8qIKN7YeikJdBJI2BTtXwfyx0L3XoPphvBEliNU49OoxqEa6g4cTST/OYshvi3hV8+FxSNfluG3jqxG8C6h7gF6jU+AODnTsFGSCA5O4I8wpQDq7I5CUAKWQW+AZYOYtoQPoGDeECWDaioBmWQxeBduoWURso+5WpBdw7R4ENTVDcGE435tJwT+xB+vMEnZRNB0YAAAAAElFTkSuQmCC)}.ip-geo-block-icon-find span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NzS19rD0NWHtMpGk7kYfbAGda0Req+WtcTT1temwM4AcasAcqwAc6wAcKydvMt1pr8Ab6pqpcLX2doggrKoxdNYm7yzw8u/y9HO1tkKdq4th7Td3t6DrcLL0taxyNPGe/YhAAAAAXRSTlMAQObYZgAAARVJREFUeAGtkkeiwyAMRP2xDfxoRjElvd3/lOkNUlZ5u0GPruan/Bnz96Xadr21rvP/7+ujXsAjom78rj4ApCoERIipqfGB1H7wPmYhw1DXjZI6nOel1oJhVAmdUP0tTEDkVC4AYvqIbaDOCqFV6vwRF0tIeYoo6J/X7ICuPAJl9ZynwiIfB5DXxZlRChulbh8xZci0EHZK3TziJFDL504rEOZ+iR5cVj82DoS7XtSshLJpKqaB0Dg3ZjcsQWKaKiF1gVQlITwh/bw2pgKeEeURhE29yKSzUFF03p1V7Wqj2Y7GfrY9X/NirJsPxKsxfBLSSs5GmH8yjAWPSNd8Yoez4f4/G1nIsksqFtGK1i9e39o0P+EAqaoRLlQ+r94AAAAASUVORK5CYII=)}.ip-geo-block-icon-alert span,span.ip-geo-block-icon-alert{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAkFBMVEXc3Nzc2trWl5DHRDTFOyvOgXfc1tXCLBrEMiHEMyLNcmfaxMLDMSDDLx7bu7jRiYHDLhzDMB/LX1PaxsTDLh3YtrHMY1bWmpPJVknSjYXUkYnZuLTMZVnENCPWlI3QhXzENiXXrqrDLRzXsa3Oal7Pe3Hc2NjVn5nNbmPayMbbwb7ay8rUj4fc09Lbw8Db0dDBbRUDAAAAAXRSTlMAQObYZgAAAPVJREFUeAG9ktXWwyAQBonC12brFvff5f2frr4nBredK2DnTFS8Gst2XM8XZmypIGeWcT4PFABaGIXlClfWG1NiC4Ubu705oKRcY32wTAHl2MdTYEqEK8hIiHgHSnSJeaogMyEWO4BijZCvwII2MS9UJ2BXTh+hQidoEttboBOwq3WBnkCNpQlA2iyAhol2hRu71n97p4fw0Z9/ugoPHCfFA+o/iLfCkyBglRJdICBas7uuey+R56fF14wNanj+/QjwY3aX23cBFn6EiHmHNT/ICYxystv/wJy4UHWGlN2cuPB72tFqAq3dP/Hk3zs0E5LZVryGC/hqGNnUa0SVAAAAAElFTkSuQmCC);vertical-align:bottom}table.form-table th .ip-geo-block-cycle span{vertical-align:text-bottom}.ip-geo-block-list{margin-top:0;margin-bottom:.7em}@media screen and (min-width:782px){ul.ip-geo-block-list .code{width:15em}}.ip-geo-block-list-exceptions label{display:inline-block}.ip-geo-block-list-exceptions dfn{border:none}.ip-geo-block-list-exceptions span.dashicons{font-size:14px}.ip-geo-block-list-exceptions a.ip-geo-block-icon{margin-left:.3em;outline:0;box-shadow:none;text-decoration:none;background-color:transparent}.form-table td p.ip-geo-block-desc,.form-table td p.ip-geo-block-find-desc{color:#666;font-size:13px!important;margin:4px 0 .5em .5em}.ip-geo-block-find-desc{display:none}.ip-geo-block-admin-post{color:#c43322;margin-left:.25em}.ip-geo-block-warn{color:#c43322;font-weight:700}input#ip_geo_block_settings_behavior_time,input#ip_geo_block_settings_behavior_view{width:3.5em}.ip-geo-block-top-list{display:inline-table;list-style-position:outside;margin:0 2em .5em 1.75em}.ip-geo-block-top-list h4{margin:1em 0}.ip-geo-block-top-list li code{background:0 0}.ip-geo-block-network{margin-bottom:1em}.ip-geo-block-container{margin:0 auto;padding:0 1em;position:relative;width:100%}.ip-geo-block-row{display:flex;flex-direction:column;align-items:flex-start;align-items:stretch;padding:0;width:100%}.ip-geo-block-row .ip-geo-block-column{display:block;flex:1 1 auto;align-self:flex-start;margin-left:0;max-width:100%;width:100%}.ip-geo-block-row .ip-geo-block-column.column-20{flex:0 0 20%;max-width:20%}.ip-geo-block-row .ip-geo-block-column.column-25{flex:0 0 25%;max-width:25%}.ip-geo-block-row .ip-geo-block-column.column-33{flex:0 0 33.3333%;max-width:33.3333%}.ip-geo-block-row .ip-geo-block-column.column-50{flex:0 0 50%;max-width:50%}@media (min-width:40rem){.ip-geo-block-row{flex-direction:row;margin-left:-2em;width:calc(100% + 2em)}.ip-geo-block-row .ip-geo-block-column{margin-bottom:inherit;padding:0 1em}}table.ip-geo-block-dataTable{clear:none!important}table.ip-geo-block-dataTable td,table.ip-geo-block-dataTable th{text-align:right}table.ip-geo-block-dataTable td:nth-child(n+2),table.ip-geo-block-dataTable th:nth-child(n+2){padding-left:0!important}table.ip-geo-block-dataTable th{white-space:nowrap}table.ip-geo-block-dataTable>thead>tr{line-height:1.8em}table.ip-geo-block-dataTable>tbody>tr{cursor:pointer}table.ip-geo-block-dataTable.no-footer,table.ip-geo-block-dataTable>thead>tr>td,table.ip-geo-block-dataTable>thead>tr>th{border-bottom:1px solid #ddd}table.ip-geo-block-dataTable thead td,table.ip-geo-block-dataTable thead th{padding:10px 16px}#ip-geo-block-statistics-cache td:nth-child(3),#ip-geo-block-validation-logs td:nth-child(4){min-width:1.6em}div[class*=ip-geo-block] .dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #ddd}table.ip-geo-block-dataTable.nowrap td,table.ip-geo-block-dataTable>tbody>tr>td span{white-space:normal!important;word-wrap:break-word!important;word-break:break-all!important}table.ip-geo-block-dataTable>tbody>tr>td span{display:inline-block}.ip-geo-block-settings-folding input[type=checkbox]{margin-right:.5em}table.ip-geo-block-dataTable input[type=checkbox]{max-height:16px;max-width:16px;margin:0}table.ip-geo-block-dataTable>tbody>tr>td:first-child,table.ip-geo-block-dataTable>thead>tr>th:first-child{padding:8px 4px 8px 1.4em;text-align:left}table.collapsed>tbody>tr>td.dataTables_empty:first-child::before,table.ip-geo-block-dataTable>tbody>tr>td.dataTables_empty{border:none;text-align:center}table.ip-geo-block-dataTable thead>tr>th:first-child.sorting_asc{background-image:none!important}table.ip-geo-block-dataTable.display tbody tr.even>.sorting_1,table.ip-geo-block-dataTable.display tbody tr.odd>.sorting_1,table.ip-geo-block-dataTable.display tbody tr:hover>.sorting_1{background-color:inherit!important}table.ip-geo-block-dataTable.collapsed>tbody>tr>td:first-child{padding:8px 4px 8px 8px!important}table.collapsed>tbody>tr.parent>td:first-child::before,table.collapsed>tbody>tr>td:first-child::before{content:'';height:0;width:0;display:inline-block;border-radius:0;border:5px solid transparent;box-shadow:none;position:relative;background-color:transparent}table.collapsed>tbody>tr>td:first-child::before{border-left:5px solid #555;top:1px;left:-2px}table.collapsed>tbody>tr.parent>td:first-child::before{border-top:5px solid #555;top:4px;left:-4px}table.collapsed>tbody>tr.child>td:first-child::before{border:none}table.collapsed>tbody>tr.child>td.child>ul li{border:none;padding:0;margin:0;line-height:1.8em}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data,table.collapsed>tbody>tr.child>td.child>ul li span.dtr-title{font-size:13px!important;display:block;white-space:normal;word-wrap:break-word;word-break:break-all}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data{margin-left:1.25em;margin-right:.3em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length{padding-top:.15em;margin:.5em 0 0 .3em;position:relative;display:inline-block}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length:after{content:'';width:6px;height:6px;border:0;border-bottom:solid 2px #999;border-right:solid 2px #999;-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;top:50%;right:10px;margin-top:-4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length select{padding-top:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:13px!important;line-height:1.4em;width:100%;height:2.05em!important;background:0 0;position:relative;z-index:1;padding:.125em 1.5em .125em .25em;border:1px solid #ddd;border-radius:4px;box-shadow:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length select::-ms-expand{display:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{float:none;text-align:center;margin-bottom:1em;margin-top:0!important}@media screen and (min-width:640px){div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length{margin:.5em 0 0 .6em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{position:relative;left:-2.25em}}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate span.ellipsis{min-width:2em;background:inherit;border-color:#ddd;border-radius:0;border-image:none;border-style:solid;border-width:1px 1px 1px 0;box-shadow:none;margin:.5em 0 0 0;padding:.25em 0;display:inline-block;text-decoration:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:active>a.paginate_button:first-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:first-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate>a.paginate_button:first-child{border-left-width:1px;border-bottom-left-radius:4px;border-top-left-radius:4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:active>a.paginate_button:last-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:last-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate>a.paginate_button:last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button{color:#0073aa!important}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover{color:#0096dd!important;background-color:#fff}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate span.ellipsis{cursor:default;color:#999!important;background-color:transparent}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover{cursor:default;color:#444!important;background-color:#fff!important}#ip-geo-block-1 #ip-geo-block-section-2 .panel-body,#ip-geo-block-4 #ip-geo-block-section-0 .panel-body{padding:0}#ip-geo-block-1 #ip-geo-block-section-2 table.form-table,#ip-geo-block-4 #ip-geo-block-section-0 table.form-table{margin-left:1em;max-width:95%}#ip-geo-block-select-duration,#ip-geo-block-select-layout,#ip-geo-block-select-target{margin:0}#ip-geo-block-select-duration li,#ip-geo-block-select-layout li,#ip-geo-block-select-target li{float:left;margin-right:1.5em}#ip-geo-block-select-duration li label,#ip-geo-block-select-target li label{cursor:pointer}#ip_geo_block_settings_search_filter{width:16em;padding-top:3px}table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-passed{background-color:#edf6ff!important}table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-blocked{background-color:#ffefef!important}.ip-geo-block-new-passed{animation:ip-geo-block-flash-passed 1s ease-out 0s 1 normal both running}.ip-geo-block-new-blocked{animation:ip-geo-block-flash-blocked 1s ease-out 0s 1 normal both running}@keyframes ip-geo-block-flash-passed{0%{background-color:gold}100%{background-color:#edf6ff}}@keyframes ip-geo-block-flash-blocked{0%{background-color:gold}100%{background-color:#ffefef}}mark{padding:0;background:gold}// Gold #ip-geo-block-live-log{margin:0}#ip-geo-block-live-log li{float:left;margin-right:3em}#ip-geo-block-live-log li:last-child{margin-right:0}#ip-geo-block-live-log li input[type=radio]{visibility:hidden;position:absolute}#ip-geo-block-live-log li input[type=radio]+label{display:inline-block;margin:-2px;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border-bottom-color:#b3b3b3;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}#ip-geo-block-live-log li input[type=radio]:checked+label{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);background-color:#e0e0e0}.ip-geo-block-live-timer{height:1em;width:1em;margin:0;position:relative;top:0;left:0}.ip-geo-block-live-timer:before{content:"";display:block;height:1em;width:1em;background:#0073aa;border-radius:50%;position:absolute;top:0;left:0}.ip-geo-block-live-timer:after{display:none}.ip-geo-block-live-timer>div{position:absolute;width:1em;height:1em;clip:rect(0,1em,1em,.5em)}.ip-geo-block-live-timer>div:before{content:" ";position:absolute;width:1em;height:1em;border-radius:.5em;clip:rect(0,.5em,1em,0);background-color:#f1f1f1;transform:rotate(0)}.ip-geo-block-live-timer>div:first-child:before{animation:30s spin-timer linear forwards}.ip-geo-block-live-timer>div:last-child{transform:rotate(180deg)}.ip-geo-block-live-timer>div:last-child:before{transform:rotate(0);animation:30s spin-timer linear 30s forwards}@keyframes spin-timer{0%{transform:rotate(0)}100%{transform:rotate(180deg)}}.ip-geo-block-subitem{margin-left:1.7em}.ip-geo-block-subitem:before{content:"\00bb";position:absolute;left:2em}.ip-geo-block-subitem dfn{vertical-align:middle}.ip-geo-block-subitem-parent td,.ip-geo-block-subitem-parent th{padding-top:0}:placeholder-shown{color:#888}::-webkit-input-placeholder{color:#888}:-moz-placeholder{color:#888;opacity:1}::-moz-placeholder{color:#888;opacity:1}:-ms-input-placeholder{color:#888}
admin/css/fonts/icomoon.eot CHANGED
Binary file
admin/css/fonts/icomoon.svg CHANGED
@@ -10,21 +10,13 @@
10
  <glyph unicode="&#xe62f;" glyph-name="vpn_lock" d="M426 44.667v84c-46 0-84 38-84 84v44l-206 204c-6-24-8-50-8-76 0-174 130-320 298-340zM808 426.667h86c2-14 2-28 2-42 0-236-190-428-426-428s-428 192-428 428 192 426 428 426c44 0 88-8 128-20v-108c0-46-40-86-86-86h-86v-84c0-24-18-44-42-44h-86v-84h256c24 0 44-20 44-44v-128h42c38 0 70-24 82-58 56 60 88 142 88 230 0 14 0 28-2 42zM904 768.667v20c0 40-32 74-72 74s-72-34-72-74v-20h144zM938 768.667c24 0 44-20 44-44v-170c0-24-20-42-44-42h-212c-24 0-44 18-44 42v170c0 24 20 44 44 44v20c0 58 48 108 106 108s106-50 106-108v-20z" />
11
  <glyph unicode="&#xe900;" glyph-name="warning" d="M1010.432 121.248l-383.968 768c-21.664 43.36-65.952 70.752-114.464 70.752s-92.8-27.392-114.464-70.752l-383.968-768c-19.84-39.68-17.728-86.816 5.6-124.576 23.328-37.696 64.512-60.672 108.864-60.672h767.904c44.384 0 85.568 22.976 108.864 60.672 23.328 37.76 25.44 84.896 5.632 124.576zM575.936 96c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v64c0 17.696 14.304 32 32 32h64c17.696 0 32-14.304 32-32v-64zM575.936 352c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v320c0 17.664 14.304 32 32 32h64c17.696 0 32-14.336 32-32v-320z" />
12
  <glyph unicode="&#xe901;" glyph-name="calculator" d="M102.4 870.4c0 56.32 46.080 102.4 102.4 102.4h614.4c56.554 0 102.4-45.846 102.4-102.4v0-819.2c0-56.554-45.846-102.4-102.4-102.4v0h-614.4c-56.554 0-102.4 45.846-102.4 102.4v0 819.2zM256 819.2v-102.4h512v102.4h-512zM256 614.4v-102.4h102.4v102.4h-102.4zM460.8 614.4v-102.4h102.4v102.4h-102.4zM665.6 614.4v-102.4h102.4v102.4h-102.4zM256 409.6v-102.4h102.4v102.4h-102.4zM460.8 409.6v-102.4h102.4v102.4h-102.4zM665.6 409.6v-307.2h102.4v307.2h-102.4zM256 204.8v-102.4h102.4v102.4h-102.4zM460.8 204.8v-102.4h102.4v102.4h-102.4z" />
13
- <glyph unicode="&#xe986;" glyph-name="search" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256z" />
14
- <glyph unicode="&#xe98d;" glyph-name="key" d="M704 960c-176.73 0-320-143.268-320-320 0-20.026 1.858-39.616 5.376-58.624l-389.376-389.376v-192c0-35.346 28.654-64 64-64h64v64h128v128h128v128h128l83.042 83.042c34.010-12.316 70.696-19.042 108.958-19.042 176.73 0 320 143.268 320 320s-143.27 320-320 320zM799.874 639.874c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96z" />
15
- <glyph unicode="&#xe98f;" glyph-name="lock" d="M592 512h-16v192c0 105.87-86.13 192-192 192h-128c-105.87 0-192-86.13-192-192v-192h-16c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h544c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48zM192 704c0 35.29 28.71 64 64 64h128c35.29 0 64-28.71 64-64v-192h-256v192z" />
16
- <glyph unicode="&#xe990;" glyph-name="unlocked" d="M768 896c105.87 0 192-86.13 192-192v-192h-128v192c0 35.29-28.71 64-64 64h-128c-35.29 0-64-28.71-64-64v-192h16c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48h-544c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h400v192c0 105.87 86.13 192 192 192h128z" />
17
- <glyph unicode="&#xe995;" glyph-name="cogs" d="M363.722 237.948l41.298 57.816-45.254 45.256-57.818-41.296c-10.722 5.994-22.204 10.774-34.266 14.192l-11.682 70.084h-64l-11.68-70.086c-12.062-3.418-23.544-8.198-34.266-14.192l-57.818 41.298-45.256-45.256 41.298-57.816c-5.994-10.72-10.774-22.206-14.192-34.266l-70.086-11.682v-64l70.086-11.682c3.418-12.060 8.198-23.544 14.192-34.266l-41.298-57.816 45.254-45.256 57.818 41.296c10.722-5.994 22.204-10.774 34.266-14.192l11.682-70.084h64l11.68 70.086c12.062 3.418 23.544 8.198 34.266 14.192l57.818-41.296 45.254 45.256-41.298 57.816c5.994 10.72 10.774 22.206 14.192 34.266l70.088 11.68v64l-70.086 11.682c-3.418 12.060-8.198 23.544-14.192 34.266zM224 96c-35.348 0-64 28.654-64 64s28.652 64 64 64 64-28.654 64-64-28.652-64-64-64zM1024 576v64l-67.382 12.25c-1.242 8.046-2.832 15.978-4.724 23.79l57.558 37.1-24.492 59.128-66.944-14.468c-4.214 6.91-8.726 13.62-13.492 20.13l39.006 56.342-45.256 45.254-56.342-39.006c-6.512 4.766-13.22 9.276-20.13 13.494l14.468 66.944-59.128 24.494-37.1-57.558c-7.812 1.892-15.744 3.482-23.79 4.724l-12.252 67.382h-64l-12.252-67.382c-8.046-1.242-15.976-2.832-23.79-4.724l-37.098 57.558-59.128-24.492 14.468-66.944c-6.91-4.216-13.62-8.728-20.13-13.494l-56.342 39.006-45.254-45.254 39.006-56.342c-4.766-6.51-9.278-13.22-13.494-20.13l-66.944 14.468-24.492-59.128 57.558-37.1c-1.892-7.812-3.482-15.742-4.724-23.79l-67.384-12.252v-64l67.382-12.25c1.242-8.046 2.832-15.978 4.724-23.79l-57.558-37.1 24.492-59.128 66.944 14.468c4.216-6.91 8.728-13.618 13.494-20.13l-39.006-56.342 45.254-45.256 56.342 39.006c6.51-4.766 13.22-9.276 20.13-13.492l-14.468-66.944 59.128-24.492 37.102 57.558c7.81-1.892 15.742-3.482 23.788-4.724l12.252-67.384h64l12.252 67.382c8.044 1.242 15.976 2.832 23.79 4.724l37.1-57.558 59.128 24.492-14.468 66.944c6.91 4.216 13.62 8.726 20.13 13.492l56.342-39.006 45.256 45.256-39.006 56.342c4.766 6.512 9.276 13.22 13.492 20.13l66.944-14.468 24.492 59.13-57.558 37.1c1.892 7.812 3.482 15.742 4.724 23.79l67.382 12.25zM672 468.8c-76.878 0-139.2 62.322-139.2 139.2s62.32 139.2 139.2 139.2 139.2-62.322 139.2-139.2c0-76.878-62.32-139.2-139.2-139.2z" />
18
- <glyph unicode="&#xe99a;" glyph-name="pie-chart" d="M448 384v448c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448c0 72.034-17.028 140.084-47.236 200.382l-400.764-200.382zM912.764 712.382c-73.552 146.816-225.374 247.618-400.764 247.618v-448l400.764 200.382z" />
19
- <glyph unicode="&#xe99b;" glyph-name="stats-dots" d="M128 64h896v-128h-1024v1024h128zM288 128c-53.020 0-96 42.98-96 96s42.98 96 96 96c2.828 0 5.622-0.148 8.388-0.386l103.192 171.986c-9.84 15.070-15.58 33.062-15.58 52.402 0 53.020 42.98 96 96 96s96-42.98 96-96c0-19.342-5.74-37.332-15.58-52.402l103.192-171.986c2.766 0.238 5.56 0.386 8.388 0.386 2.136 0 4.248-0.094 6.35-0.23l170.356 298.122c-10.536 15.408-16.706 34.036-16.706 54.11 0 53.020 42.98 96 96 96s96-42.98 96-96c0-53.020-42.98-96-96-96-2.14 0-4.248 0.094-6.35 0.232l-170.356-298.124c10.536-15.406 16.706-34.036 16.706-54.11 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 19.34 5.74 37.332 15.578 52.402l-103.19 171.984c-2.766-0.238-5.56-0.386-8.388-0.386s-5.622 0.146-8.388 0.386l-103.192-171.986c9.84-15.068 15.58-33.060 15.58-52.4 0-53.020-42.98-96-96-96z" />
20
- <glyph unicode="&#xe99c;" glyph-name="stats-bars" d="M0 128h1024v-128h-1024zM128 384h128v-192h-128zM320 640h128v-448h-128zM512 448h128v-256h-128zM704 832h128v-640h-128z" />
21
- <glyph unicode="&#xe99d;" glyph-name="stats-bars2" d="M288 576h-192c-17.6 0-32-14.4-32-32v-576c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v576c0 17.6-14.4 32-32 32zM288 0h-192v256h192v-256zM608 704h-192c-17.6 0-32-14.4-32-32v-704c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v704c0 17.6-14.4 32-32 32zM608 0h-192v320h192v-320zM928 832h-192c-17.6 0-32-14.4-32-32v-832c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v832c0 17.6-14.4 32-32 32zM928 0h-192v384h192v-384z" />
22
- <glyph unicode="&#xe9b6;" glyph-name="switch" d="M640 813.412v-135.958c36.206-15.804 69.5-38.408 98.274-67.18 60.442-60.44 93.726-140.8 93.726-226.274s-33.286-165.834-93.726-226.274c-60.44-60.44-140.798-93.726-226.274-93.726s-165.834 33.286-226.274 93.726c-60.44 60.44-93.726 140.8-93.726 226.274s33.286 165.834 93.726 226.274c28.774 28.774 62.068 51.378 98.274 67.182v135.956c-185.048-55.080-320-226.472-320-429.412 0-247.424 200.578-448 448-448 247.424 0 448 200.576 448 448 0 202.94-134.95 374.332-320 429.412zM448 960h128v-512h-128z" />
23
- <glyph unicode="&#xe9c9;" glyph-name="sphere" d="M480 896c-265.096 0-480-214.904-480-480 0-265.098 214.904-480 480-480 265.098 0 480 214.902 480 480 0 265.096-214.902 480-480 480zM751.59 256c8.58 40.454 13.996 83.392 15.758 128h127.446c-3.336-44.196-13.624-87.114-30.68-128h-112.524zM208.41 576c-8.58-40.454-13.996-83.392-15.758-128h-127.444c3.336 44.194 13.622 87.114 30.678 128h112.524zM686.036 576c9.614-40.962 15.398-83.854 17.28-128h-191.316v128h174.036zM512 640v187.338c14.59-4.246 29.044-11.37 43.228-21.37 26.582-18.74 52.012-47.608 73.54-83.486 14.882-24.802 27.752-52.416 38.496-82.484h-155.264zM331.232 722.484c21.528 35.878 46.956 64.748 73.54 83.486 14.182 10 28.638 17.124 43.228 21.37v-187.34h-155.264c10.746 30.066 23.616 57.68 38.496 82.484zM448 576v-128h-191.314c1.88 44.146 7.666 87.038 17.278 128h174.036zM95.888 256c-17.056 40.886-27.342 83.804-30.678 128h127.444c1.762-44.608 7.178-87.546 15.758-128h-112.524zM256.686 384h191.314v-128h-174.036c-9.612 40.96-15.398 83.854-17.278 128zM448 192v-187.34c-14.588 4.246-29.044 11.372-43.228 21.37-26.584 18.74-52.014 47.61-73.54 83.486-14.882 24.804-27.75 52.418-38.498 82.484h155.266zM628.768 109.516c-21.528-35.876-46.958-64.746-73.54-83.486-14.184-9.998-28.638-17.124-43.228-21.37v187.34h155.266c-10.746-30.066-23.616-57.68-38.498-82.484zM512 256v128h191.314c-1.88-44.146-7.666-87.040-17.28-128h-174.034zM767.348 448c-1.762 44.608-7.178 87.546-15.758 128h112.524c17.056-40.886 27.344-83.806 30.68-128h-127.446zM830.658 640h-95.9c-18.638 58.762-44.376 110.294-75.316 151.428 42.536-20.34 81.058-47.616 114.714-81.272 21.48-21.478 40.362-44.938 56.502-70.156zM185.844 710.156c33.658 33.658 72.18 60.932 114.714 81.272-30.942-41.134-56.676-92.666-75.316-151.428h-95.898c16.138 25.218 35.022 48.678 56.5 70.156zM129.344 192h95.898c18.64-58.762 44.376-110.294 75.318-151.43-42.536 20.34-81.058 47.616-114.714 81.274-21.48 21.478-40.364 44.938-56.502 70.156zM774.156 121.844c-33.656-33.658-72.18-60.934-114.714-81.274 30.942 41.134 56.678 92.668 75.316 151.43h95.9c-16.14-25.218-35.022-48.678-56.502-70.156z" />
24
- <glyph unicode="&#xe9ca;" glyph-name="earth" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512-0.002c-62.958 0-122.872 13.012-177.23 36.452l233.148 262.29c5.206 5.858 8.082 13.422 8.082 21.26v96c0 17.674-14.326 32-32 32-112.99 0-232.204 117.462-233.374 118.626-6 6.002-14.14 9.374-22.626 9.374h-128c-17.672 0-32-14.328-32-32v-192c0-12.122 6.848-23.202 17.69-28.622l110.31-55.156v-187.886c-116.052 80.956-192 215.432-192 367.664 0 68.714 15.49 133.806 43.138 192h116.862c8.488 0 16.626 3.372 22.628 9.372l128 128c6 6.002 9.372 14.14 9.372 22.628v77.412c40.562 12.074 83.518 18.588 128 18.588 70.406 0 137.004-16.26 196.282-45.2-4.144-3.502-8.176-7.164-12.046-11.036-36.266-36.264-56.236-84.478-56.236-135.764s19.97-99.5 56.236-135.764c36.434-36.432 85.218-56.264 135.634-56.26 3.166 0 6.342 0.080 9.518 0.236 13.814-51.802 38.752-186.656-8.404-372.334-0.444-1.744-0.696-3.488-0.842-5.224-81.324-83.080-194.7-134.656-320.142-134.656z" />
25
  <glyph unicode="&#xea1c;" glyph-name="play3" d="M192 832l640-384-640-384z" />
26
  <glyph unicode="&#xea1d;" glyph-name="pause2" d="M128 832h320v-768h-320zM576 832h320v-768h-320z" />
27
  <glyph unicode="&#xea1e;" glyph-name="stop2" d="M128 832h768v-768h-768z" />
28
- <glyph unicode="&#xea25;" glyph-name="eject" d="M0 192h1024v-128h-1024zM512 832l512-512h-1024z" />
29
- <glyph unicode="&#xea7e;" glyph-name="new-tab" d="M192 896v-768h768v768h-768zM896 192h-640v640h640v-640zM128 64v672l-64 64v-800h800l-64 64h-672zM352 704l160-160-192-192 96-96 192 192 160-160v416z" />
30
  </font></defs></svg>
10
  <glyph unicode="&#xe62f;" glyph-name="vpn_lock" d="M426 44.667v84c-46 0-84 38-84 84v44l-206 204c-6-24-8-50-8-76 0-174 130-320 298-340zM808 426.667h86c2-14 2-28 2-42 0-236-190-428-426-428s-428 192-428 428 192 426 428 426c44 0 88-8 128-20v-108c0-46-40-86-86-86h-86v-84c0-24-18-44-42-44h-86v-84h256c24 0 44-20 44-44v-128h42c38 0 70-24 82-58 56 60 88 142 88 230 0 14 0 28-2 42zM904 768.667v20c0 40-32 74-72 74s-72-34-72-74v-20h144zM938 768.667c24 0 44-20 44-44v-170c0-24-20-42-44-42h-212c-24 0-44 18-44 42v170c0 24 20 44 44 44v20c0 58 48 108 106 108s106-50 106-108v-20z" />
11
  <glyph unicode="&#xe900;" glyph-name="warning" d="M1010.432 121.248l-383.968 768c-21.664 43.36-65.952 70.752-114.464 70.752s-92.8-27.392-114.464-70.752l-383.968-768c-19.84-39.68-17.728-86.816 5.6-124.576 23.328-37.696 64.512-60.672 108.864-60.672h767.904c44.384 0 85.568 22.976 108.864 60.672 23.328 37.76 25.44 84.896 5.632 124.576zM575.936 96c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v64c0 17.696 14.304 32 32 32h64c17.696 0 32-14.304 32-32v-64zM575.936 352c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v320c0 17.664 14.304 32 32 32h64c17.696 0 32-14.336 32-32v-320z" />
12
  <glyph unicode="&#xe901;" glyph-name="calculator" d="M102.4 870.4c0 56.32 46.080 102.4 102.4 102.4h614.4c56.554 0 102.4-45.846 102.4-102.4v0-819.2c0-56.554-45.846-102.4-102.4-102.4v0h-614.4c-56.554 0-102.4 45.846-102.4 102.4v0 819.2zM256 819.2v-102.4h512v102.4h-512zM256 614.4v-102.4h102.4v102.4h-102.4zM460.8 614.4v-102.4h102.4v102.4h-102.4zM665.6 614.4v-102.4h102.4v102.4h-102.4zM256 409.6v-102.4h102.4v102.4h-102.4zM460.8 409.6v-102.4h102.4v102.4h-102.4zM665.6 409.6v-307.2h102.4v307.2h-102.4zM256 204.8v-102.4h102.4v102.4h-102.4zM460.8 204.8v-102.4h102.4v102.4h-102.4z" />
13
+ <glyph unicode="&#xe9df;" glyph-name="happy" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM512 361.24c115.95 0 226.23 30.806 320 84.92-14.574-178.438-153.128-318.16-320-318.16-166.868 0-305.422 139.872-320 318.304 93.77-54.112 204.050-85.064 320-85.064zM256 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM640 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96z" />
14
+ <glyph unicode="&#xe9ea;" glyph-name="grin2" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM704 724c63.962 0 116-52.038 116-116 0-6.378-0.546-12.876-1.628-19.312-1.618-9.632-9.958-16.688-19.724-16.688s-18.108 7.056-19.722 16.69c-6.16 36.684-37.67 53.31-74.926 53.31s-68.766-16.626-74.924-53.31c-1.616-9.632-9.956-16.69-19.722-16.69-0.002 0 0 0-0.002 0-9.766 0-18.106 7.056-19.722 16.688-1.084 6.436-1.63 12.934-1.63 19.312 0 63.962 52.038 116 116 116zM320 724c63.962 0 116-52.038 116-116 0-6.378-0.548-12.876-1.628-19.312-1.618-9.632-9.956-16.688-19.724-16.688s-18.106 7.056-19.722 16.69c-6.16 36.684-37.67 53.31-74.926 53.31s-68.766-16.626-74.924-53.31c-1.616-9.632-9.956-16.69-19.722-16.69 0 0 0 0 0 0-9.766 0-18.106 7.056-19.724 16.688-1.082 6.436-1.63 12.934-1.63 19.312 0 63.962 52.038 116 116 116zM192 384h192v-247.846c-110.094 28.606-192 129.124-192 247.846zM448 128v256h128v-256h-128zM640 136.154v247.846h192c0-118.722-81.904-219.24-192-247.846z" />
15
+ <glyph unicode="&#xe9eb;" glyph-name="cool" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM800 704c17.6 0 32-14.4 32-32v-96c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64h-128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v96c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-32h128v32c0 17.6 14.4 32 32 32h192zM512 192c93.208 0 174.772 49.818 219.546 124.278l54.88-32.934c-55.966-93.070-157.916-155.344-274.426-155.344-48.458 0-94.384 10.796-135.54 30.082l33.162 55.278c31.354-13.714 65.964-21.36 102.378-21.36z" />
16
+ <glyph unicode="&#xe9f5;" glyph-name="confused" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM726.106 320h64.864c9.246-72.506-32.452-144.53-103.958-170.56-82.904-30.176-174.9 12.716-205.080 95.616-18.108 49.744-73.306 75.482-123.048 57.372-45.562-16.588-70.956-64.298-60.988-110.424h-64.86c-9.242 72.508 32.45 144.528 103.956 170.56 82.904 30.178 174.902-12.716 205.082-95.614 18.104-49.748 73.306-75.482 123.044-57.372 45.562 16.584 70.956 64.298 60.988 110.422z" />
17
+ <glyph unicode="&#xe9f6;" glyph-name="confused2" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64zM687.010 149.44c-82.902-30.18-174.9 12.712-205.080 95.614-18.108 49.742-73.306 75.478-123.048 57.372-45.562-16.588-70.958-64.296-60.988-110.424h-64.86c-9.244 72.508 32.45 144.532 103.956 170.56 82.904 30.18 174.902-12.712 205.082-95.614 18.108-49.742 73.306-75.476 123.046-57.37 45.562 16.584 70.958 64.294 60.988 110.422h64.864c9.24-72.506-32.454-144.532-103.96-170.56z" />
18
+ <glyph unicode="&#xea01;" glyph-name="crying" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM800 576h-128c-17.674 0-32 14.328-32 32s14.326 32 32 32h128c17.674 0 32-14.328 32-32s-14.326-32-32-32zM352 576h-128c-17.672 0-32 14.328-32 32s14.328 32 32 32h128c17.672 0 32-14.328 32-32s-14.328-32-32-32zM608 104c-8.19 0-16.378 3.124-22.626 9.374-4.582 4.582-29.42 14.626-73.374 14.626s-68.79-10.044-73.374-14.626c-12.496-12.496-32.758-12.496-45.254 0-12.498 12.496-12.498 32.758 0 45.254 30.122 30.12 92.994 33.372 118.628 33.372 25.632 0 88.506-3.252 118.626-33.374 12.498-12.496 12.498-32.758 0-45.254-6.248-6.248-14.436-9.372-22.626-9.372zM736 384c-17.674 0-32 14.326-32 32v64c0 17.672 14.326 32 32 32s32-14.328 32-32v-64c0-17.674-14.326-32-32-32zM736 192c-17.674 0-32 14.326-32 32v64c0 17.674 14.326 32 32 32s32-14.326 32-32v-64c0-17.674-14.326-32-32-32zM288 384c-17.672 0-32 14.326-32 32v64c0 17.672 14.328 32 32 32s32-14.328 32-32v-64c0-17.674-14.328-32-32-32zM288 192c-17.672 0-32 14.326-32 32v64c0 17.674 14.328 32 32 32s32-14.326 32-32v-64c0-17.674-14.328-32-32-32z" />
 
 
 
 
 
 
19
  <glyph unicode="&#xea1c;" glyph-name="play3" d="M192 832l640-384-640-384z" />
20
  <glyph unicode="&#xea1d;" glyph-name="pause2" d="M128 832h320v-768h-320zM576 832h320v-768h-320z" />
21
  <glyph unicode="&#xea1e;" glyph-name="stop2" d="M128 832h768v-768h-768z" />
 
 
22
  </font></defs></svg>
admin/css/fonts/icomoon.ttf CHANGED
Binary file
admin/css/fonts/icomoon.woff CHANGED
Binary file
admin/includes/class-admin-ajax.php CHANGED
@@ -223,7 +223,7 @@ class IP_Geo_Block_Admin_Ajax {
223
  return $ret;
224
 
225
  if ( ! is_wp_error( $res = IP_Geo_Block_Logs::restore_live_log( $hook, $settings ) ) )
226
- return array( 'data' => self::format_logs( $res ) ); // DataTables requires `data`
227
  else
228
  return array( 'error' => $res->get_error_message() );
229
  }
@@ -347,7 +347,7 @@ endif;
347
  HOUR_IN_SECONDS, // Latest 1 hour
348
  DAY_IN_SECONDS, // Latest 24 hours
349
  WEEK_IN_SECONDS, // Latest 1 week
350
- 30 * DAY_IN_SECONDS // Latest 1 month (MONTH_IN_SECONDS is since WP 4.4+)
351
  );
352
 
353
  $i = 0;
@@ -600,6 +600,9 @@ endif; // TEST_RESTORE_NETWORK
600
  '[mimetype][capability][$]', // 3.0.4
601
  '[Maxmind][use_asn]', // 3.0.4
602
  '[live_update][in_memory]', // 3.0.5
 
 
 
603
  );
604
  $json = array();
605
  $prfx = IP_Geo_Block::OPTION_NAME;
@@ -814,7 +817,7 @@ endif; // TEST_RESTORE_NETWORK
814
  public static function get_wp_info() {
815
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-lkup.php';
816
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
817
- $fs = IP_Geo_Block_FS::init( 'get_wp_info' );
818
 
819
  // DNS reverse lookup
820
  $key = microtime( TRUE );
@@ -833,9 +836,11 @@ endif; // TEST_RESTORE_NETWORK
833
  @ini_set( 'error_log', $log );
834
  @error_reporting( $err );
835
 
836
- // Proces owner
 
837
  // https://secure.php.net/manual/function.get-current-user.php#57624
838
  // https://secure.php.net/manual/function.posix-getpwuid.php#82387
 
839
  $usr = function_exists( 'posix_getpwuid' ) ? posix_getpwuid( posix_geteuid() ) : array( 'name' => getenv( 'USERNAME' ) );
840
 
841
  // Server, PHP, WordPress
@@ -844,6 +849,8 @@ endif; // TEST_RESTORE_NETWORK
844
  'MySQL:' => $ver . ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG && $bem ? ' (' . $bem . ')' : '' ),
845
  'PHP:' => PHP_VERSION,
846
  'PHP SAPI:' => php_sapi_name(),
 
 
847
  'WordPress:' => $GLOBALS['wp_version'],
848
  'Multisite:' => is_multisite() ? 'yes' : 'no',
849
  'File system:' => $fs->get_method(),
@@ -879,9 +886,7 @@ endif; // TEST_RESTORE_NETWORK
879
 
880
  foreach ( $installed as $key => $val ) {
881
  if ( isset( $activated[ $key ] ) ) {
882
- $res += array(
883
- esc_html( $val['Name'] ) => esc_html( $val['Version'] )
884
- );
885
  }
886
  }
887
 
@@ -896,8 +901,7 @@ endif; // TEST_RESTORE_NETWORK
896
  // add post data
897
  $query = array();
898
  foreach ( explode( ',', $val['data'] ) as $str ) {
899
- if ( FALSE !== strpos( $str, '=' ) )
900
- $query[] = $str;
901
  }
902
 
903
  if ( ! empty( $query ) )
223
  return $ret;
224
 
225
  if ( ! is_wp_error( $res = IP_Geo_Block_Logs::restore_live_log( $hook, $settings ) ) )
226
+ return array( 'data' => self::format_logs( apply_filters( IP_Geo_Block::PLUGIN_NAME . '-logs', $res ) ) );
227
  else
228
  return array( 'error' => $res->get_error_message() );
229
  }
347
  HOUR_IN_SECONDS, // Latest 1 hour
348
  DAY_IN_SECONDS, // Latest 24 hours
349
  WEEK_IN_SECONDS, // Latest 1 week
350
+ 30 * DAY_IN_SECONDS // Latest 1 month (MONTH_IN_SECONDS is since WP 4.4+)
351
  );
352
 
353
  $i = 0;
600
  '[mimetype][capability][$]', // 3.0.4
601
  '[Maxmind][use_asn]', // 3.0.4
602
  '[live_update][in_memory]', // 3.0.5
603
+ '[monitor][metadata]', // 3.0.17
604
+ '[metadata][pre_update_option][$]', // 3.0.17
605
+ '[metadata][pre_update_site_option][$]', // 3.0.17
606
  );
607
  $json = array();
608
  $prfx = IP_Geo_Block::OPTION_NAME;
817
  public static function get_wp_info() {
818
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-lkup.php';
819
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
820
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
821
 
822
  // DNS reverse lookup
823
  $key = microtime( TRUE );
836
  @ini_set( 'error_log', $log );
837
  @error_reporting( $err );
838
 
839
+ // Human readable size, Proces owner
840
+ // https://gist.github.com/mehdichaouch/341a151dd5f469002a021c9396aa2615
841
  // https://secure.php.net/manual/function.get-current-user.php#57624
842
  // https://secure.php.net/manual/function.posix-getpwuid.php#82387
843
+ $siz = array( 'B', 'K', 'M', 'G', 'T', 'P' );
844
  $usr = function_exists( 'posix_getpwuid' ) ? posix_getpwuid( posix_geteuid() ) : array( 'name' => getenv( 'USERNAME' ) );
845
 
846
  // Server, PHP, WordPress
849
  'MySQL:' => $ver . ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG && $bem ? ' (' . $bem . ')' : '' ),
850
  'PHP:' => PHP_VERSION,
851
  'PHP SAPI:' => php_sapi_name(),
852
+ 'Memory limit:' => ini_get( 'memory_limit' ),
853
+ 'Peak usage:' => @round( ( $m = memory_get_peak_usage() ) / pow( 1024, ( $i = floor( log( $m, 1024 ) ) ) ), 2 ) . $siz[ $i ],
854
  'WordPress:' => $GLOBALS['wp_version'],
855
  'Multisite:' => is_multisite() ? 'yes' : 'no',
856
  'File system:' => $fs->get_method(),
886
 
887
  foreach ( $installed as $key => $val ) {
888
  if ( isset( $activated[ $key ] ) ) {
889
+ $res += array( esc_html( $val['Name'] ) => esc_html( $val['Version'] ) );
 
 
890
  }
891
  }
892
 
901
  // add post data
902
  $query = array();
903
  foreach ( explode( ',', $val['data'] ) as $str ) {
904
+ FALSE !== strpos( $str, '=' ) and $query[] = $str;
 
905
  }
906
 
907
  if ( ! empty( $query ) )
admin/includes/class-admin-rewrite.php CHANGED
@@ -155,7 +155,7 @@ class IP_Geo_Block_Admin_Rewrite {
155
  */
156
  private function get_rewrite_rule( $which ) {
157
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
158
- $fs = IP_Geo_Block_FS::init( 'get_rewrite_rule' );
159
 
160
  // check the existence of configuration file
161
  $file = $this->get_rewrite_file( $which );
@@ -185,7 +185,7 @@ class IP_Geo_Block_Admin_Rewrite {
185
  */
186
  private function put_rewrite_rule( $which, $content ) {
187
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
188
- $fs = IP_Geo_Block_FS::init( 'put_rewrite_rule' );
189
 
190
  $file = $this->get_rewrite_file( $which );
191
 
@@ -285,7 +285,7 @@ class IP_Geo_Block_Admin_Rewrite {
285
  $additional = '';
286
  if ( '.user.ini' === $type ) {
287
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
288
- $fs = IP_Geo_Block_FS::init( 'append_rewrite_block' );
289
 
290
  $dir = dirname( IP_GEO_BLOCK_PATH ); // `/wp-content/plugins`
291
  $ini = $this->config_file;
155
  */
156
  private function get_rewrite_rule( $which ) {
157
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
158
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
159
 
160
  // check the existence of configuration file
161
  $file = $this->get_rewrite_file( $which );
185
  */
186
  private function put_rewrite_rule( $which, $content ) {
187
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
188
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
189
 
190
  $file = $this->get_rewrite_file( $which );
191
 
285
  $additional = '';
286
  if ( '.user.ini' === $type ) {
287
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
288
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
289
 
290
  $dir = dirname( IP_GEO_BLOCK_PATH ); // `/wp-content/plugins`
291
  $ini = $this->config_file;
admin/includes/tab-accesslog.php CHANGED
@@ -97,11 +97,19 @@ endif; // extension_loaded( 'pdo_sqlite' )
97
  );
98
 
99
  // Preset filters
100
- $filters = apply_filters( $plugin_slug . '-logs-preset', array() );
101
  if ( ! empty( $filters ) ) {
 
 
 
 
 
 
 
 
102
  $html = '<ul id="ip-geo-block-logs-preset">';
103
  foreach ( $filters as $filter ) {
104
- $html .= '<li><a href="#!" data-value="' . esc_attr( $filter['value'] ) . '">' . esc_html( $filter['title'] ) . '</a></li>';
105
  }
106
 
107
  add_settings_field(
97
  );
98
 
99
  // Preset filters
100
+ $filters = has_filter( $plugin_slug . '-logs-preset' ) ? apply_filters( $plugin_slug . '-logs-preset', array() ) : $context->preset_filters();
101
  if ( ! empty( $filters ) ) {
102
+ // allowed tags and attributes
103
+ $allow_tags = array(
104
+ 'span' => array(
105
+ 'class' => 1,
106
+ 'title' => 1,
107
+ )
108
+ );
109
+
110
  $html = '<ul id="ip-geo-block-logs-preset">';
111
  foreach ( $filters as $filter ) {
112
+ $html .= '<li><a href="#!" data-value="' . esc_attr( $filter['value'] ) . '">' . IP_Geo_Block_Util::kses( $filter['title'], $allow_tags ) . '</a></li>';
113
  }
114
 
115
  add_settings_field(
admin/includes/tab-geolocation.php CHANGED
@@ -23,8 +23,8 @@ class IP_Geo_Block_Admin_Tab {
23
  $list = array();
24
  $providers = IP_Geo_Block_Provider::get_providers( 'key' );
25
  foreach ( $providers as $provider => $key ) {
26
- if ( ! is_string( $key ) ||
27
- ! empty( $options['providers'][ $provider ] ) ) {
28
  $list += array( $provider => $provider );
29
  }
30
  }
23
  $list = array();
24
  $providers = IP_Geo_Block_Provider::get_providers( 'key' );
25
  foreach ( $providers as $provider => $key ) {
26
+ if ( ! is_string( $key ) || // provider that does not need api key
27
+ ! empty( $options['providers'][ $provider ] ) ) { // provider that has api key
28
  $list += array( $provider => $provider );
29
  }
30
  }
admin/includes/tab-settings.php CHANGED
@@ -309,6 +309,28 @@ endif;
309
  )
310
  );
311
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312
  // Response code (RFC 2616)
313
  add_settings_field(
314
  $option_name.'_response_code',
@@ -535,8 +557,8 @@ endif;
535
  );
536
 
537
  $desc = array(
538
- 1 => __( 'It will block a request related to the services for both public facing pages and the dashboard.', 'ip-geo-block' ),
539
- 2 => __( 'Regardless of the country code, it will block a malicious request related to the services only for the dashboard.', 'ip-geo-block' ),
540
  );
541
 
542
  // Max failed login attempts per IP address
@@ -1470,7 +1492,7 @@ endif;
1470
  NULL,
1471
  $option_slug
1472
  );
1473
- if ( IP_GEO_BLOCK_NETWORK && FALSE ):
1474
  // @see https://vedovini.net/2015/10/using-the-wordpress-settings-api-with-network-admin-pages/
1475
  if ( $context->is_network_admin() ) {
1476
  add_action( 'network_admin_edit_' . IP_Geo_Block::PLUGIN_NAME, array( $context, 'validate_network_settings' ) );
@@ -1491,7 +1513,7 @@ if ( IP_GEO_BLOCK_NETWORK && FALSE ):
1491
  )
1492
  );
1493
  }
1494
- endif;
1495
  // Emergency login link
1496
  $key = IP_Geo_Block_Util::get_link();
1497
  add_settings_field(
309
  )
310
  );
311
 
312
+ if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
313
+ // Prevent metadata alteration
314
+ $list = '<ul class="ip-geo-block-settings-folding ip-geo-block-dropup" style="margin-top:0.4em">' . __( '<dfn title="Specify the table names to be verified for single site. This verification will be skipped if empty.">pre_update_option</dfn>', 'ip-geo-block' ) . "\n";
315
+ $list .= '<li class="ip-geo-block-hide"><ul><li><input type="text" id="ip_geo_block_settings_metadata_pre_update_option" name="ip_geo_block_settings[metadata][pre_update_option]" class="regular-text code" value="' . esc_attr( implode( ',', $options['metadata']['pre_update_option'] ) ) . '" />' . $common[0] . '</li></ul></li></ul>' . "\n";
316
+ $list .= '<ul class="ip-geo-block-settings-folding ip-geo-block-dropup">' . __( '<dfn title="Specify the table names to be verified for multisite. This verification will be skipped if empty.">pre_update_site_option</dfn>', 'ip-geo-block' ) . "\n";
317
+ $list .= '<li class="ip-geo-block-hide"><ul><li><input type="text" id="ip_geo_block_settings_metadata_pre_update_site_option" name="ip_geo_block_settings[metadata][pre_update_site_option]" class="regular-text code" value="' . esc_attr( implode( ',', $options['metadata']['pre_update_site_option'] ) ) . '" />' . $common[0] . '</li></ul></li></ul>' . "\n";
318
+
319
+ add_settings_field(
320
+ $option_name.'_metadata',
321
+ __( '<dfn title="It prevents to manipulate metadata in database without admin privilege.">Prevent metadata alteration</dfn>', 'ip-geo-block' ),
322
+ array( $context, 'callback_field' ),
323
+ $option_slug,
324
+ $section,
325
+ array(
326
+ 'type' => 'html',
327
+ 'option' => $option_name,
328
+ 'field' => 'metadata',
329
+ 'value' => $list,
330
+ )
331
+ );
332
+ endif;
333
+
334
  // Response code (RFC 2616)
335
  add_settings_field(
336
  $option_name.'_response_code',
557
  );
558
 
559
  $desc = array(
560
+ 1 => __( 'It will block a request related to the services for both &#8220;non-logged in user&#8221; and &#8220;logged-in user&#8221;.', 'ip-geo-block' ),
561
+ 2 => __( 'Regardless of the country code, it will block a malicious request related to the services only for &#8220;logged-in user&#8221;.', 'ip-geo-block' ),
562
  );
563
 
564
  // Max failed login attempts per IP address
1492
  NULL,
1493
  $option_slug
1494
  );
1495
+
1496
  // @see https://vedovini.net/2015/10/using-the-wordpress-settings-api-with-network-admin-pages/
1497
  if ( $context->is_network_admin() ) {
1498
  add_action( 'network_admin_edit_' . IP_Geo_Block::PLUGIN_NAME, array( $context, 'validate_network_settings' ) );
1513
  )
1514
  );
1515
  }
1516
+
1517
  // Emergency login link
1518
  $key = IP_Geo_Block_Util::get_link();
1519
  add_settings_field(
admin/js/admin.js CHANGED
@@ -94,7 +94,12 @@
94
  request.action = ip_geo_block.action;
95
  request.nonce = ip_geo_block.nonce;
96
 
97
- $.post(ip_geo_block.url, request)
 
 
 
 
 
98
 
99
  .done(function (data/*, textStatus, jqXHR*/) {
100
  if (callback) {
@@ -461,7 +466,7 @@
461
  if (chart.dataStacked[id] === undefined) {
462
  data = $.parseJSON($id.attr('data-' + id));
463
  if (data) {
464
- data.unshift(['site', 'comment', 'xmlrpc', 'login', 'admin', 'poblic', { role: 'link' } ]);
465
  chart.dataStacked[id] = window.google.visualization.arrayToDataTable(data);
466
  }
467
  }
@@ -482,8 +487,8 @@
482
 
483
  for (i = 0; i < n; i++) {
484
  info.push({
485
- label: data.getValue(i, 0),
486
- link: data.getValue(i, 6)
487
  });
488
  }
489
 
@@ -1722,9 +1727,9 @@
1722
  timer_pause = null;
1723
  }
1724
  },
1725
- live_start = function () {
1726
  clear_timer();
1727
- ajax_post('live-loading', {
1728
  cmd: 'live-start'
1729
  }, function (res) {
1730
  if (res.error) {
@@ -1737,11 +1742,14 @@
1737
  }
1738
  table.draw(false); // the current page will still be shown.
1739
  }
1740
- timer_start = window.setTimeout(live_start, ip_geo_block.interval * 1000);
 
 
 
1741
  });
1742
  },
1743
  live_stop = function (cmd, callback) {
1744
- clear_timer();
1745
  ajax_post(null, {
1746
  cmd: cmd || 'live-stop',
1747
  callback: callback
@@ -1751,8 +1759,8 @@
1751
  live_stop('live-pause', function () {
1752
  $timer_pause.addClass(ID('live-timer'));
1753
  timer_pause = window.setTimeout(function () {
1754
- clear_timer();
1755
  $(ID('#', 'live-log-stop')).prop('checked', true);
 
1756
  }, ip_geo_block.timeout * 1000);
1757
  });
1758
  },
94
  request.action = ip_geo_block.action;
95
  request.nonce = ip_geo_block.nonce;
96
 
97
+ $.ajax({
98
+ type: 'POST',
99
+ url: ip_geo_block.url,
100
+ data: request,
101
+ dataType: 'json'
102
+ })
103
 
104
  .done(function (data/*, textStatus, jqXHR*/) {
105
  if (callback) {
466
  if (chart.dataStacked[id] === undefined) {
467
  data = $.parseJSON($id.attr('data-' + id));
468
  if (data) {
469
+ data.unshift(['site', 'comment', 'xmlrpc', 'login', 'admin', 'public', { role: 'link' } ]);
470
  chart.dataStacked[id] = window.google.visualization.arrayToDataTable(data);
471
  }
472
  }
487
 
488
  for (i = 0; i < n; i++) {
489
  info.push({
490
+ label: /*escapeHTML(*/data.getValue(i, 0)/*)*/,
491
+ link: /*escapeHTML(*/data.getValue(i, 6)/*)*/
492
  });
493
  }
494
 
1727
  timer_pause = null;
1728
  }
1729
  },
1730
+ live_start = function (cmd) {
1731
  clear_timer();
1732
+ ajax_post(cmd === undefined ? 'live-loading' : null, {
1733
  cmd: 'live-start'
1734
  }, function (res) {
1735
  if (res.error) {
1742
  }
1743
  table.draw(false); // the current page will still be shown.
1744
  }
1745
+ if (cmd === undefined) {
1746
+ // keep updating
1747
+ timer_start = window.setTimeout(live_start, ip_geo_block.interval * 1000);
1748
+ }
1749
  });
1750
  },
1751
  live_stop = function (cmd, callback) {
1752
+ live_start(false); // once read out the buffer
1753
  ajax_post(null, {
1754
  cmd: cmd || 'live-stop',
1755
  callback: callback
1759
  live_stop('live-pause', function () {
1760
  $timer_pause.addClass(ID('live-timer'));
1761
  timer_pause = window.setTimeout(function () {
 
1762
  $(ID('#', 'live-log-stop')).prop('checked', true);
1763
+ live_stop();
1764
  }, ip_geo_block.timeout * 1000);
1765
  });
1766
  },
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(e,t,n,i){var a=!1,o=[],r=e(t).width(),l=IP_GEO_BLOCK,c=IP_GEO_BLOCK_AUTH;function s(e,t){var n={".":".ip-geo-block-","#":"#ip-geo-block-","@":"#ip_geo_block_settings_",$:"ip-geo-block-","%":"ip_geo_block_","!":"ip_geo_block_settings_"};return t!==i?n[e]+t:n.$+e}function d(e){return e?function(e){return e.toString().replace(/[&<>"']/g,function(e){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[e]}).replace(/&amp;(#\d{2,4}|\w{4,7});/g,"&$1;")}(e.toString().replace(/(<([^>]+)>)/gi,"")):""}function u(n,a){var l=e(t).width();l!==r&&(r=l,o[n]===i&&(o[n]={id:!1,callback:a}),e(t).off("resize").on("resize",function(){return!1!==o[n].id&&t.clearTimeout(o[n].id),o[n].time=t.setTimeout(o[n].callback,200),!1}))}function p(t,n){n?e(s("#",t)).addClass(s("loading")):e(s("#",t)).removeClass(s("loading"))}function h(e,n){t.confirm(d(e))&&n()}function f(e,n,i){t.alert(d(n||l.msg[11].replace("%s",i)+" ("+e+")"))}function g(){f(null,d(l.msg[9]))}function m(e,n){-1!==t.location.href.indexOf(e)&&(t.location=d(e)+(n?"&"+d(n):"")+"&"+(c.key?c.key+"="+c.nonce:""))}function v(t,n,i,o){t&&p(t,!0),n.action=l.action,n.nonce=l.nonce,e.post(l.url,n).done(function(e){i&&i(e)}).fail(function(e){a||f(e.status,e.responseText,n.action)}).always(function(){t&&("object"==typeof o?e.when.apply(e,o).then(function(){p(t,!1)}):p(t,!1))})}function b(e,t){v(e,{cmd:"clear-"+e,which:t},function(e){m(e.page,e.tab)})}function k(e){return e.stopImmediatePropagation(),!1}function w(e,t){t?e.removeClass("folding-disable"):(e.children(s(".","hide")).hide(),e.addClass("folding-disable"),e.removeClass(s("dropdown")).addClass(s("dropup")))}function x(t,n,i){var a=t.prop("type")||"",o=0===a.indexOf("checkbox")&&t.is(":checked")||0===a.indexOf("select")&&"0"!==t.val();t.siblings('input[name^="'+s("%","settings")+'"]:checkbox').prop("disabled",!o),e.isArray(n)?e.each(n,function(t,n){e(n).nextAll(s(".","settings-folding")).each(function(n,a){w(e(a),o&&i[t])})}):n.nextAll(s(".","settings-folding")).each(function(t,n){w(e(n),o&&i)})}function y(t){var n=s("@","validation_ajax_");w(t.closest("ul").next(),e(n+"1").is(":checked")||e(n+"2").is(":checked"))}function _(e){return String(e).replace(/[a-z]/gi,function(e){return String.fromCharCode(e.charCodeAt(0)+(e.toLowerCase()<"n"?13:-13))})}function C(e){return function(e){return t.btoa(e)}(_(e))}function P(e){return _(function(e){return t.atob(e)}(e))}function S(t){var n=t.is(":checked"),i=e(s("@","public_target_rule")),a=e(s("@","public_behavior")),o=t.closest("tr").nextAll("tr");o.find('[name^="'+s("%","settings")+'"]').prop("disabled",!n),o.find(s(".","desc")).css("opacity",n?1:.5),x(t,[i,a],["1"===i.val(),a.val()]),n&&a.change()}function A(t,n){t&&("string"==typeof t&&(t=JSON.parse(t)),n&&(e('input[type="checkbox"]').prop("checked",!1).change(),e("input[name*=providers]").prop("disabled",!1).change()),e(s("#","import")).closest("form").deserialize(t),e(s("@","exception_admin")+","+s("@","validation_mimetype")).change(),e('select[name*="'+s("%","settings")+'"]').change(),e(s("@","validation_login")).change(),S(e(s("@","validation_public"))),y(e(s("@","validation_ajax_1"))),n&&(n=s("%","settings[providers][IPInfoDB]"),e(s("@","providers_IPInfoDB")).prop("checked",!!t[n])))}e.fn.deserialize=function(t){return this.each(function(){var n,i,a,o=this,r={};for(n in t)if(t.hasOwnProperty(n))try{i=d(decodeURIComponent(n)),a=d(decodeURIComponent(t[n])),r.hasOwnProperty(i)||(r[i]=[]),r[i].push(a)}catch(e){}e.each(r,function(t,i){"hidden"!==(n=e('[name="'+t+'"]:input',o).val(i)).attr("type")&&n.before('<span style="color:red">*</span>')})})};var O={dataPie:[],viewPie:[],drawPie:function(a){var o,r;O.dataPie[a]===i&&((o=O.dataPie[a]=new t.google.visualization.DataTable).addColumn("string","Country"),o.addColumn("number","Requests"),r=e.parseJSON(e("#"+a).attr("data-"+a)),O.dataPie[a].addRows(r)),O.viewPie[a]===i&&(O.viewPie[a]=new t.google.visualization.PieChart(n.getElementById(a))),O.dataPie[a]!==i&&O.viewPie[a]!==i&&0<(o=e("#"+a).width())&&O.viewPie[a].draw(O.dataPie[a],{backgroundColor:{fill:"transparent"},chartArea:{left:0,top:"5%",width:"100%",height:"90%"},sliceVisibilityThreshold:.015})},dataLine:[],viewLine:[],drawLine:function(a,o){var r,l,c;if(O.dataLine[a]===i){for((r=O.dataLine[a]=new t.google.visualization.DataTable).addColumn(o,"Date"),r.addColumn("number","comment"),r.addColumn("number","xmlrpc"),r.addColumn("number","login"),r.addColumn("number","admin"),r.addColumn("number","public"),l=(c=e.parseJSON(e("#"+a).attr("data-"+a))).length,r=0;r<l;++r)c[r][0]=new Date(1e3*c[r][0]);O.dataLine[a].addRows(c)}O.viewLine[a]===i&&(O.viewLine[a]=new t.google.visualization.LineChart(n.getElementById(a))),O.dataLine[a]!==i&&O.viewLine[a]!==i&&0<(r=e("#"+a).width())&&O.viewLine[a].draw(O.dataLine[a],{legend:{position:"bottom"},backgroundColor:{fill:"transparent"},hAxis:{format:"MM/dd"+("datetime"===o?" HH:mm":"")},vAxis:{textPosition:r>320?"out":"in"},chartArea:{left:r>320?"10%":0,top:"5%",width:"100%",height:"75%"}})},dataStacked:[],viewStacked:[],drawStacked:function(a){var o,r,l,c,u=e("#"+d(a));O.dataStacked[a]===i&&(l=e.parseJSON(u.attr("data-"+a)))&&(l.unshift(["site","comment","xmlrpc","login","admin","poblic",{role:"link"}]),O.dataStacked[a]=t.google.visualization.arrayToDataTable(l)),O.viewStacked[a]===i&&(O.viewStacked[a]=new t.google.visualization.BarChart(n.getElementById(a)),t.google.visualization.events.addListener(O.viewStacked[a],"animationfinish",function(){var t,i,o,r=[],l=O.dataStacked[a],c=l.getNumberOfRows(),d=e(s("#","open-new")).prop("checked");for(t=0;t<c;t++)r.push({label:l.getValue(t,0),link:l.getValue(t,6)});c="http://www.w3.org/1999/xlink",u.find("text").each(function(e,t){"g"===(o=t.parentNode).tagName.toLowerCase()&&-1!==(e=function(e,t){var n,i=t.length;for(e=e.replace("…",""),n=0;n<i;++n)if(t.hasOwnProperty(n)&&0===t[n].label.indexOf(e))return n;return-1}(t.textContent,r))&&((i=n.createElementNS("http://www.w3.org/2000/svg","a")).setAttributeNS(c,"xlink:href",r[e].link),i.setAttributeNS(c,"title",r[e].label),i.setAttribute("target",d?"_blank":"_self"),i.setAttribute("class","site"),i.appendChild(o.removeChild(t)),o.appendChild(i),r.splice(e,1))})})),0<(r=u.width())&&O.dataStacked[a]!==i&&O.viewStacked[a]!==i&&(o=s("range"),c=e.parseJSON(e("."+o).attr("data-"+o)),o=40*(l=O.dataStacked[a]).getNumberOfRows(),O.viewStacked[a].draw(l,{width:r,height:o+80,allowHtml:!0,isStacked:!0,legend:{position:"top"},chartArea:{top:50,left:90,width:"100%",height:o},hAxis:{minValue:0,maxValue:c[1]},backgroundColor:{fill:"transparent"},animation:{startup:!0,duration:200,easing:"out"}}))},ajaxStacked:function(t,n,a,o){v(null,{cmd:"restore-network",which:t=Math.max(0,Math.min(4,t)),offset:(n=5*Math.max(1,Math.min(5,n)))*a*o,length:n},function(t){var a,o,r,l,c;t=function(e,t){var n,i,a=Math.ceil(e.length/t),o=[];for(n=0;n<a;++n)i=n*t,o.push(e.slice(i,i+t));return o}(t,n),e(s(".","network")).each(function(s,d){if(t[s]!==i){for(l=e(d).attr("id"),c=O.dataStacked[l],r=Math.min(n,t[s].length),a=0;a<r;++a)for(o=1;o<=5;o++)c.setValue(a,o,t[s][a][o]);O.drawStacked(l)}})})}};function I(n){"object"==typeof t.google&&(1===n?e(s("#","chart-countries")).length&&(O.drawPie(s("chart-countries")),O.drawLine(s("chart-daily"),"date")):5===n&&e(s(".","network")).each(function(t,n){O.drawStacked(e(n).attr("id"))}))}function N(e){if("object"==typeof t.google){var n=["corechart"];5===e&&n.push("bar"),t.google.charts.load("current",{packages:n,callback:function(){I(e)}}),u("draw-chart."+e,function(){I(e)})}}function D(t){var n,a,o=[];e.each(t,function(e,t){if(o[e]="",t!==i&&(a=t.length))for(o[e]=(t[0]||"o").toString(),n=1;n<a;++n)o[e]+=(t[n]||"o").toString()}),wpCookies!==i&&wpCookies.setHash("ip-geo-block",o,new Date(Date.now()+2592e6),c.home+c.admin)}function j(t){var a=function(e){var t,n=wpCookies!==i&&wpCookies.getHash("ip-geo-block")||[];for(t in n)n.hasOwnProperty(t)&&(n[t]=n[t].replace(/[^ox\d]/gi,"").split(""));return n[e]===i&&(n[e]=[]),n}(t);return e(n).on("click","form>h2,h3",function(){return function(e,t,n){var i,a=e.closest("fieldset").data("section"),o=e.parent().nextAll(".panel-body").toggle();e.toggleClass(s("dropup")).toggleClass(s("dropdown")),(i=e.hasClass(s("dropdown")))?o.addClass(s("border")).trigger(s("show-body")):o.removeClass(s("border")),n[t][a]=i?"o":"x",D(n),I(t)}(e(this),t,a),!1}),e(s("#","toggle-sections")).on("click",function(){var n,i=e(s(".","field")).find("h2,h3"),o=[s("dropdown"),s("dropup")],r=i.filter("."+o[0]).length;return i.each(function(i){(n=e(this)).removeClass(o.join(" ")).addClass(r?o[1]:o[0]),n=n.parent().nextAll(".panel-body").toggle(!r),r?n.removeClass(s("border")):n.addClass(s("border")).trigger("show-body"),a[t][i]=r?"x":"o"}),D(a),I(t),!1}),a}function T(t){e("body").append('<div style="display:none"><form method="POST" id="'+s("export-form")+'" action="'+l.url.replace("ajax.php","post.php")+'"><input type="hidden" name="action" value="'+l.action+'" /><input type="hidden" name="nonce" value="'+l.nonce+'" /><input type="hidden" name="cmd" value="'+t+'" /><input type="hidden" name="data" value="" id="'+s("export-data")+'"/><input type="submit" value="submit" /></form><input type="file" name="settings" id="'+s("file-dialog")+'" /></div>')}function L(e,t,n,i){var a,o;return(a=e.cloneNode(!1)).setAttribute("title",d(n)),(o=t.cloneNode(!1)).setAttribute("class","dashicons dashicons-"+i),a.appendChild(o),a}function R(n,a,o,r){var c=Number(r[n][1===n?3:2])||0;c=[10,25,50,100][c],e.extend(!0,e.fn.dataTable.defaults,o,{dom:"tlp",serverSide:!1,autoWidth:!1,processing:!0,deferRender:!0,language:{emptyTable:l.i18n[1],loadingRecords:l.i18n[0],processing:l.i18n[0],zeroRecords:l.i18n[2],lengthMenu:"_MENU_",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",lengthMenu:[10,25,50,100],pageLength:c,scroller:!0,scrollY:1e4,scrollCollapse:!0,drawCallback:function(t){var n=e(s("#",a.tableID)).find("td.dataTables_empty"),i="restore-logs"===a.ajaxCMD?3:2;i>t.iDraw?n.html(l.i18n[0]):i===t.iDraw&&(n.html(l.i18n[1]),(n=e(s("@","search_filter"))).val()&&n.trigger("keyup"))}});var d=e(s("#",a.tableID)).DataTable({ajax:{url:l.url,type:"POST",data:{cmd:a.ajaxCMD,action:l.action,nonce:l.nonce}},mark:!0}),p=function(){d.columns.adjust().responsive.recalc().draw(!1)};return u("draw-table."+n,p),e(s("#",a.sectionID)).find(".panel-body").off(s("show-body")).on(s("show-body"),function(){return p(),!1}).off("change").on("change",'th>input[type="checkbox"]',function(){var t=e(this).prop("checked");return e(s("#",a.tableID)).find('td>input[type="checkbox"]').prop("checked",t),!1}),e(s("#","select-target")).off("change").on("change",function(){var t=e(this).find('input[name="'+s("target")+'"]:checked').val();return d.columns(a.targetColumn).search("all"!==t?t:"").draw(),!1}).trigger("change"),e(s("#","bulk-action")).off("click").on("click",function(){var t,o,r=e(this).prev().val(),c=/(<([^>]+)>)/gi,u=/data-hash=[\W]([\w]+)[\W]/i,p={IP:[],AS:[]},h=d.$("input:checked");return!!r&&(h.length?(h.each(function(){o=d.cell(this.parentNode).data(),t=("bulk-action-remove"===r||"bulk-action-ip-erase"===r)&&(t=o[a.columnIP].match(u))?","+t[1]:"",p.IP.push(o[a.columnIP].replace(c,"")+t),p.AS.push(o[a.columnAS].replace(c,""))}),p.IP.length&&v("loading",{cmd:r,which:p},function(t){t.page!==i?m(t.page,"tab="+n):t&&(d.ajax.reload(),e(s("#",a.tableID)).find('th input[type="checkbox"]').prop("checked",!1))}),!1):(f(null,l.msg[10]),!1))}),e(s("@","search_filter")).off("keyup").on("keyup",function(){return d.search(this.value,!1,!0,!/[A-Z]/.test(this.value)).draw(),!1}),e(s("#","reset-filter")).off("click").on("click",function(){return e(s("@","search_filter")).val(""),d.search("").draw(),!1}),e(s("@","clear_all")).off("click").on("click",function(){return h(l.msg[0],function(){b(1===n?"cache":"logs",null)}),!1}),e("table"+s(".","dataTable")+" tbody").on("click","a",function(){var i,a,o=t.location.search.slice(1).split("&"),r=o.length,l={};for(i=0;i<r;++i)l[(a=o[i].split("="))[0]]=a[1];for(i in l.tab=1===n?4:2,l.s=e(this).text().replace(/[^\w\.\:\*]/,""),a=[],l)l.hasOwnProperty(i)&&a.push(i+"="+l[i]);return t.open(t.location.pathname+"?"+a.join("&"),"_blank"),!1}),e(s("#",a.tableID)).on("length.dt",function(e,t,i){r[n][1===n?3:2]={10:0,25:1,50:2,100:3}[i]||0,D(r)}),d}e(function(){var o=Number(l.tab)||0,r=j(o);switch(e(s(".","inhibit")).on("submit",function(){return!1}),e(t).on("beforeunload",function(){a=!0}),o){case 0:var u=s("%","settings");e('[id^="'+s("scan-")+'"]').on("click",function(){var t=e(this),n=t.attr("id"),i=t.parent();return v(n.replace(/^.*(?:scan)/,"scanning"),{cmd:"scan-code",which:n.replace(s("scan-"),"")},function(e){var t,n;for(t in i.children("ul").length||i.append('<ul id="'+s("code-list")+'"></ul>'),i=i.children("ul").empty(),e)e.hasOwnProperty(t)&&("string"==typeof e[t=d(t)]?n=d(e[t]):(n=d(e[t].code),t='<abbr title="'+d(e[t].type)+'">'+t+"</abbr>"),i.append("<li>"+t+' : <span class="'+s("notice")+'">'+n+"</span></li>"));i.show("slow")}),!1}),e(s("@","matching_rule")).on("change",function(){var t=this.value;return e(s("@","white_list")).closest("tr").toggle("0"===t),e(s("@","black_list")).closest("tr").toggle("1"===t),!1}).change(),e(s(".","icon-cidr")).on("click",function(){var n=e(s("#","admin-styles-css")).get(0).href,i=t.open("about:blank","","width=560,height=170");return n=n.slice(0,n.lastIndexOf("css/")),i.document.write('<!DOCTYPE html><html lang=en><meta charset=utf-8><title>CIDR calculator for IPv4 / IPv6</title><link href="'+n+'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> </span></div></div><script src="'+n+'js/cidr.min.js?v=.1"><\/script>'),i.document.close(),!1}),e(s("@","validation_mimetype")).on("change",function(t){var n=e(this),i=Number(n.val());return n.nextAll(s(".","settings-folding")).each(function(t,n){w(e(n),i===t+1||i&&2===t)}),k(t)}).change(),e('select[name*="response_code"]').on("change",function(t){var n=e(this),i=parseInt(n.val()/100,10),a=n.closest("tr").nextAll("tr");return 0<=n.attr("name").indexOf("public")&&-1===Number(e(s("@","public_matching_rule")).val())?(a.each(function(t){1>=t&&e(this).hide()}),k(t)):(i<=3?a.each(function(t){0===t?e(this).show():1===t&&e(this).hide()}):a.each(function(t){0===t?e(this).hide():1===t&&e(this).show()}),k(t))}).change(),e(s("#","decode")).on("click",function(){var t=e(s("@","signature")),n=t.val();return-1===n.search(/,/)?t.val(P(n)):t.val(C(n)),!1}),e(s("@","validation_login")).on("change",function(t){var n=e(this);return x(n,n,u),k(t)}).change(),v(null,{cmd:"get-actions"},function(t){var i,a,o,r,u=e(s("#","list-admin")),p=n.createElement("li"),h=n.createElement("input"),f=n.createElement("label"),g=n.createElement("dfn"),m=n.createElement("span");for(r in t)t.hasOwnProperty(r)&&(r=d(r),u.find("#"+(o=s("!","exception_admin_"+r))).size()||((i=h.cloneNode(!1)).setAttribute("id",o),i.setAttribute("value",r),i.setAttribute("type","checkbox"),(a=p.cloneNode(!1)).appendChild(i),(i=f.cloneNode(!1)).setAttribute("for",o),i.appendChild(n.createTextNode(r)),a.appendChild(i),1&t[r]&&a.appendChild(L(g,m,l.msg[5],"lock")),2&t[r]&&a.appendChild(L(g,m,l.msg[6],"unlock")),u.append(a)));e(s(".","icon-unlock")).on("click",function(){return e(s("#","list-admin")+">li").filter(function(){return!e(this).find(".dashicons-unlock").length}).toggle(),!1}),e(s("@","exception_admin")).on("change",function(t){var n=e.grep(e(this).val().split(","),function(e){return""!==e.replace(/^\s+|\s+$/g,"")});return e(s("#","list-admin")).find("input").each(function(){var t=e(this),i=t.val();t.prop("checked",-1!==e.inArray(i,n))}),k(t)}).change(),e(s("#","list-admin")).on("click","input",function(){var t,n=e(this),i=e(s("@","exception_admin")),a=n.val(),o=e.grep(i.val().split(","),function(e){return""!==e.replace(/^\s+|\s+$/g,"")});-1===(t=e.inArray(a,o))?o.push(a):o.splice(t,1),i.val(o.join(",")).change()}),e(s(".","icon-find")).on("click",function(){var t,n,i,a,o=e(this),r=[],u=0,p=d(l.msg[8]),h=d(o.data("target"));return e(s("#","find-"+h)).empty(),o.next().children(s(".","find-desc")).show(),(o=e(s("#","list-"+h))).children("li").each(function(t,n){r.push(e(n).find("input").val())}),v("find-"+h,{cmd:"find-"+h},function(f){var g;for(g in f)f.hasOwnProperty(g)&&(++u,t=d(f[g]),g=d(g),n=e.inArray(g,r),i=s("!","exception_"+h+"_"+g),a="admin"===h?t+"="+g:"/"+t+"/"+g+"/",a='<a class="ip-geo-block-icon ip-geo-block-icon-alert" href="'+c.sites[0]+c.admin+"options-general.php?page=ip-geo-block&tab=4&s="+encodeURIComponent(a)+'" title="'+p.replace("%s",a)+'" target="_blank"><span></span></a>',n<0?(r.push(g),o.prepend('<li><input id="'+i+'" value="'+g+'" type="checkbox" '+("admin"===h?"/>":"name=ip_geo_block_settings[exception]["+h+"]["+g+"] />")+'<label for="'+i+'">'+g+"</lable>"+a+"</li>")):(i=o.find("#"+i).parent()).find("a").length||i.append(a));e(s("@","exception_"+h)).trigger("change"),e(s("#","find-"+h)).append(' <span class="ip-geo-block-warn">'+d(l.msg[7].replace("%d",u))+"</span>")}),!1})}),e('input[id^="'+s("!","validation_ajax_")+'"]').on("change",function(){y(e(this))}).change(),e(s("@","validation_public")).on("change",function(t){return S(e(this)),k(t)}).change(),e(s("@","public_matching_rule")).on("change",function(t){var n=this.value;return e(s("@","public_white_list")).closest("tr").toggle("0"===n),e(s("@","public_black_list")).closest("tr").toggle("1"===n),e(s("@","public_response_code")).change().closest("tr").toggle("-1"!==n),k(t)}).change(),e(s("@","public_behavior")).on("change",function(t){var n=e(this);return w(n.siblings("ul"),n.prop("checked")),k(t)}).change(),e(s("@","update")).on("click",function(){return v("download",{cmd:"download"},function(t){var n,i,a;for(n in t)if(t.hasOwnProperty(n))for(i in a=t[n])a.hasOwnProperty(i)&&(a[i=d(i)].filename&&e(s("@",n+"_"+i+"_path")).val(d(a[i].filename)),a[i].message&&e(s("#",n+"-"+i)).text(d(a[i].message)))}),!1}),e(s("@","restrict_api")).on("change",function(){e('input[class*="remote"]').prop("disabled",e(this).prop("checked"))}).trigger("change"),e(s("@","save_statistics")).on("change",function(){return e(s("@","validation_recdays")).prop("disabled",!e(this).prop("checked")),!1}).trigger("change"),e(s("@","validation_reclogs")).on("change",function(){var t=e(this);t.parent().parent().nextAll().find('input[id*="validation"]').prop("disabled",0===Number(t.prop("selectedIndex")))}).trigger("change"),e(s("@","cache_hold")).on("change",function(){var t=e(this).prop("checked");e('input[name*="[cache_time]"]').prop("disabled",!t),e('select[id*="login_fails"]').prop("disabled",!t)}).trigger("change"),e(s("@","comment_pos")).on("change",function(){var t=e(this);t.nextAll('input[type="text"]').prop("disabled",0===Number(t.prop("selectedIndex")))}).trigger("change"),T("validate"),e(s("#","export")).on("click",function(){if(JSON===i)return g(),!1;var t=u,n={};return e.each(e(this).closest("form").serializeArray(),function(e,i){-1!==i.name.indexOf(t)&&(n[i.name]=i.value)}),n[t+="[signature]"]=C(n[t]),e(s("#","export-data")).val(JSON.stringify(n)),e(s("#","export-form")).submit(),!1}),e(s("#","file-dialog")).on("change",function(e){if(t.FileReader===i)return g(),!1;var n,a=e.target.files[0];return a&&function(e,n){var i=new t.FileReader;i.onload=function(e){n&&n(e.target.result)},i.onerror=function(e){f("Error",e.target.error.code)},i.readAsText(e)}(a,function(e){(e=JSON.parse(e))[n=u+"[signature]"]!==i&&(e[n]=C(e[n])),v("export-import",{cmd:"validate",data:JSON.stringify(e)},function(e){A(e,!0)})}),!1}),e(s("#","import")).on("click",function(){return e(s("#","file-dialog")).click(),!1}),e(s("#","default")).on("click",function(){return h(l.msg[0],function(){v("pre-defined",{cmd:"import-default"},function(e){A(e,!0)})}),!1}),e(s("#","preferred")).on("click",function(){return h(l.msg[0],function(){v("pre-defined",{cmd:"import-preferred"},function(e){A(e,!1)})}),!1}),e(s("@","reset_live")).on("click",function(){return v("reset-live",{cmd:"reset-live"}),!1}),e(s("#","login-link")).on("click",function(){var t=e(this),n=s("$","primary");return t.hasClass(n)?v("login-loading",{cmd:"generate-link"},function(i){t.text(l.msg[3]),t.removeClass(n).nextAll(s(".","desc")).remove(),e('<p class="ip-geo-block-desc"></p>').appendTo(t.parent()).append(l.msg[4],'<a href="'+i.link+'" title="'+l.msg[1]+'" target=_blank>'+i.link+"</a></p>")}):h(l.msg[0],function(){v("login-loading",{cmd:"delete-link"},function(){t.text(l.msg[2]),t.addClass(n).nextAll(s(".","desc")).remove()})}),!1}),e(s("@","diag_tables")).on("click",function(){return h(l.msg[0],function(){var e;v(e="diag-tables",{cmd:e},function(e){m(e.page,e.tab)})}),!1}),e(s("#","show-info")).on("click",function(){e(s("#","wp-info")).empty(),v("wp-info",{cmd:"show-info"},function(t){var n,i=[];for(n in t)t.hasOwnProperty(n)&&i.push("- "+n+" "+t[n]);return e(s("#","wp-info")).html('<textarea class="regular-text code" rows="'+i.length+'">'+i.join("\n")+"</textarea>").find("textarea").select(),!1})}),e('select[name^="'+u+'"]').on("change",function(){var t,n,i,a=e(this);return t=a,i=s(".","desc"),t.next(i).empty(),(n=t.children("option:selected").data("desc"))&&t.next(i).html(e.parseHTML(n)),x(a,a,u),!1}).change(),e(s(".","icon-cycle")).on("click",function(){var t,n=e(this).nextAll("li"),i=n.find(s("@","exception_admin")),a=n.find("input:checkbox").filter(":visible"),o=a.filter(":checked").length;return a.prop("checked",!o),i.length&&(o?i.val(""):(t=[],a.each(function(n,i){t.push(e(i).val())}),i.val(t.join(",")))),e(this).blur(),!1}),e(s(".","settings-folding>dfn")).on("click",function(){var t=s("drop"),n=e(this).parent();return n.children(s(".","hide")).toggle(),n.toggleClass(t+"up").toggleClass(t+"down"),n.hasClass(t+"up")&&n.children("div").hide(),!1}),e("#submit").on("click",function(){var t=e(s("@","signature")),n=t.val();return-1!==n.indexOf(",")&&t.val(C(n)),!0});break;case 1:N(o);var p=0;e(s("#","sort-slug")).on("click",function(){var t=e(this).closest("ol"),n=t.children("li");(p=!p)?n.sort(function(t,n){return e(t).text()>e(n).text()}):n.sort(function(t,n){return Number(e(t).text().replace(/^.*\((\d+)\)$/,"$1"))<=Number(e(n).text().replace(/^.*\((\d+)\)$/,"$1"))}),t.children("li").remove(),n.appendTo(t)}),e(s("@","clear_statistics")).on("click",function(){return h(l.msg[0],function(){b("statistics",null)}),!1}),e(s("@","clear_logs")).on("click",function(){return h(l.msg[0],function(){b("logs",null)}),!1}),R(o,{tableID:"statistics-cache",ajaxCMD:"restore-cache",sectionID:"section-2",targetColumn:4,columnIP:1,columnAS:3},{columns:[{title:'<input type="checkbox">'},{title:l.i18n[3]},{title:l.i18n[4]},{title:l.i18n[5]},{title:l.i18n[6]},{title:l.i18n[7]},{title:l.i18n[8]},{title:l.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]}]},r),T("export-cache"),e(s("#","export-cache")).on("click",function(){return e(s("#","export-form")).submit(),!1});break;case 4:var _={tableID:"validation-logs",sectionID:"section-0",targetColumn:6,columnIP:3,columnAS:5},I={columns:[{title:'<input type="checkbox">'},{title:""},{title:l.i18n[10]},{title:l.i18n[3]},{title:l.i18n[4]},{title:l.i18n[5]},{title:l.i18n[7]},{title:l.i18n[11]},{title:l.i18n[12]},{title:l.i18n[13]},{title:l.i18n[14]},{title:l.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]}]},M=null,z=null,E=e(s("#","live-loading")),$=null,J=function(){M&&(t.clearTimeout(M),M=null),z&&(E.removeClass(s("live-timer")),t.clearTimeout(z),z=null)},B=function(){J(),v("live-loading",{cmd:"live-start"},function(e){if(e.error)f(null,e.error);else if(e.data.length){var n,i=e.data.length;for(n=0;n<i;n++)$.row.add(e.data[n]);$.draw(!1)}M=t.setTimeout(B,1e3*l.interval)})},q=function(e,t){J(),v(null,{cmd:e||"live-stop",callback:t})},H=s(""),V=function(t,n,i){-1===n[7].indexOf("pass")?e(t).addClass(H+i+"blocked"):e(t).addClass(H+i+"passed")},G=e(s("#","live-log")),U=e(s("#","live-update"));e(s("#","validation-logs")).on("animationend",function(){return e(this).find('tr[class*="'+H+'new"]').each(function(){var t=e(this);-1!==t.prop("class").indexOf("passed")?t.addClass(H+"passed").removeClass(H+"new-passed"):t.addClass(H+"blocked").removeClass(H+"new-blocked")}),!1}),G.on("change",function(){switch(e('input[name="'+s("live-log")+'"]:checked').val()){case"start":B();break;case"pause":q("live-pause",function(){E.addClass(s("live-timer")),z=t.setTimeout(function(){J(),e(s("#","live-log-stop")).prop("checked",!0)},1e3*l.timeout)});break;case"stop":q()}}),U.on("change",function(){var t=G.closest("tr"),n=U.prop("checked");return r[o][1]=n?"o":"x",D(r),$&&$.clear().destroy(),n?(t.show().next().next().next().nextAll().hide(),_.ajaxCMD="live-stop",I.order=[1,"desc"],I.createdRow=function(e,t){V(e,t,"new-")}):(t.hide().next().next().next().nextAll().show(),_.ajaxCMD="restore-logs",I.order=[0,""],I.createdRow=function(e,t){V(e,t,"")}),e(s("#","live-log-stop")).trigger("click"),$=R(o,_,I,r),!1}).trigger("change"),e(s("#","logs-preset")).on("click","a",function(){var t=e(this).data("value");return e(s("@","search_filter")).val(t),$.search(t,!1,!0,!/[A-Z]/.test(t)).draw(),!1}),T("export-logs"),e(s("#","export-logs")).on("click",function(){return e(s("#","export-form")).submit(),!1});break;case 2:e(t).on(s("gmap-error"),function(){v(null,{cmd:"gmap-error"},function(e){m(e.page,e.tab)})});var W=e(s("#","map"));"object"==typeof t.google?W.each(function(){e(this).GmapRS()}):W.each(function(){e(this).empty().html('<iframe src="'+l.altgmap+'?output=embed" frameborder="0" style="width:100%; height:400px; border:0" allowfullscreen></iframe>')});I=[];e('select[id^="'+s("!","service")+'"]').on("change",function(){e(this).children("option").each(function(t,n){I[e(n).text()]=t,r[o][3+t]=e(n).prop("selected")?"o":"x"}),"o"!==r[o][3+(Number(r[o][2])||0)]&&(r[o][2]=e(this).prop("selectedIndex")),D(r)}).change(),e(s("@","get_location")).on("click",function(){var n,i=e(s("#","whois")),a=e(s("#","apis")),c=e(s("@","service")).val(),u=e.trim(e(s("@","ip_address")).val());if(u&&c){if(e(s("@","anonymize")).prop("checked")){if(/[^0-9a-f\.:]/.test(u))return f(null,"illegal format."),!1;-1!==u.indexOf(".")?u=u.replace(/\.\w+$/,".0"):(-1===(u=(u=u.split(":")).splice(0,4).join(":")).indexOf("::")&&(u+="::"),u=u.replace(/:{3,}/,"::")),e(s("@","ip_address")).val(u)}i.hide().empty(),a.hide().empty(),n=e.whois(u,function(t){var n,a="";for(n=0;n<t.length;++n)a+="<tr><td>"+t[n].name+"</td><td>"+t[n].value+"</td></tr>";i.html('<fieldset id="'+s("section-1")+'" class="'+s("field")+' panel panel-default" data-section="1"><legend class="panel-heading"><h3 id="'+s("whois-title")+'" class="'+s("dropdown")+'">Whois</h3></legend><div class="panel-body '+s("border")+'"><table class="'+s("table")+'">'+a+"</table></div></fieldset>").fadeIn("slow"),"x"===r[o][1]&&e(s("#","whois-title")).trigger("click")}),v("loading",{cmd:"search",ip:u,which:c},function(n){var i,c="",p=Number(r[o][2])||0;for(i in n)n.hasOwnProperty(i)&&(c+='<a href="#!" class="nav-tab'+(I[i]===p?" nav-tab-active":"")+'" data-index="'+I[i]+"\" data-api='"+d(JSON.stringify(n[i]))+"'>"+i+"</a>");a.html('<div class="nav-tab-wrapper">'+c+'</div><div id="ip-geo-block-geoinfo"></div>').fadeIn("slow").on("click","a",function(){var n,i=e(this),a=e(this).data("api"),c="",p=d(a.latitude||"0"),h=d(a.longitude||"0"),f=a.latitude||a.longitude?7:2;for(n in i.parent().children("a").removeClass("nav-tab-active"),i.addClass("nav-tab-active"),r[o][2]=i.data("index"),D(r),a)a.hasOwnProperty(n)&&(n=d(n),c+='<li><span class="'+s("title")+'">'+n+' : </span><span class="'+s("result")+'">'+d(a[n])+"</span></li>");"object"==typeof t.google?W.GmapRS("deleteMarkers").GmapRS("addMarker",{latitude:p,longitude:h,title:u,content:"<ul>"+c+"</ul>",show:!0,zoom:f}):(W.empty().html('<iframe src="'+l.altgmap+"?q="+p+","+h+"&z="+f+'&output=embed" frameborder="0" style="width:100%; height:400px; border:0" allowfullscreen></iframe>'),e(s("#","geoinfo")).html("<ul>"+c+"</ul>"))}).find(".nav-tab-active").trigger("click")},[n])}return!1}),e(s("@","ip_address")).on("keypress",function(t){if(t.which&&13===t.which||t.keyCode&&13===t.keyCode)return e(s("@","get_location")).click(),!1}),e(s("@","ip_address")).val()&&e(s("@","get_location")).click();break;case 5:N(o),e("input[name="+s("duration")+"]:radio").on("click",function(){var t=e('div[class*="paginate"]').find('a[class*="current"]').text();r[o][2]=e(this).val()||0,r[o][3]=r[o][3]||2,r[o][4]=r[o][4]||1,D(r),O.ajaxStacked(r[o][2],r[o][3],r[o][4],t-1)}),e(s("#","open-new")).on("change",function(){var t=e(this).prop("checked");r[o][1]=t?"o":"x",D(r),e(s("#","section-0 svg")).find("a").each(function(){this.setAttribute("target",t?"_blank":"_self")})}),e(s("#","apply-layout")).on("click",function(){var t=e(s("#","select-layout"));r[o][3]=t.find('select[name="rows"] option:selected').val(),r[o][4]=t.find('select[name="cols"] option:selected').val(),D(r)}),e("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(e,t,n,i){var a=!1,o=[],r=e(t).width(),l=IP_GEO_BLOCK,c=IP_GEO_BLOCK_AUTH;function s(e,t){var n={".":".ip-geo-block-","#":"#ip-geo-block-","@":"#ip_geo_block_settings_",$:"ip-geo-block-","%":"ip_geo_block_","!":"ip_geo_block_settings_"};return t!==i?n[e]+t:n.$+e}function d(e){return e?function(e){return e.toString().replace(/[&<>"']/g,function(e){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[e]}).replace(/&amp;(#\d{2,4}|\w{4,7});/g,"&$1;")}(e.toString().replace(/(<([^>]+)>)/gi,"")):""}function u(n,a){var l=e(t).width();l!==r&&(r=l,o[n]===i&&(o[n]={id:!1,callback:a}),e(t).off("resize").on("resize",function(){return!1!==o[n].id&&t.clearTimeout(o[n].id),o[n].time=t.setTimeout(o[n].callback,200),!1}))}function p(t,n){n?e(s("#",t)).addClass(s("loading")):e(s("#",t)).removeClass(s("loading"))}function h(e,n){t.confirm(d(e))&&n()}function f(e,n,i){t.alert(d(n||l.msg[11].replace("%s",i)+" ("+e+")"))}function g(){f(null,d(l.msg[9]))}function m(e,n){-1!==t.location.href.indexOf(e)&&(t.location=d(e)+(n?"&"+d(n):"")+"&"+(c.key?c.key+"="+c.nonce:""))}function v(t,n,i,o){t&&p(t,!0),n.action=l.action,n.nonce=l.nonce,e.ajax({type:"POST",url:l.url,data:n,dataType:"json"}).done(function(e){i&&i(e)}).fail(function(e){a||f(e.status,e.responseText,n.action)}).always(function(){t&&("object"==typeof o?e.when.apply(e,o).then(function(){p(t,!1)}):p(t,!1))})}function b(e,t){v(e,{cmd:"clear-"+e,which:t},function(e){m(e.page,e.tab)})}function k(e){return e.stopImmediatePropagation(),!1}function w(e,t){t?e.removeClass("folding-disable"):(e.children(s(".","hide")).hide(),e.addClass("folding-disable"),e.removeClass(s("dropdown")).addClass(s("dropup")))}function x(t,n,i){var a=t.prop("type")||"",o=0===a.indexOf("checkbox")&&t.is(":checked")||0===a.indexOf("select")&&"0"!==t.val();t.siblings('input[name^="'+s("%","settings")+'"]:checkbox').prop("disabled",!o),e.isArray(n)?e.each(n,function(t,n){e(n).nextAll(s(".","settings-folding")).each(function(n,a){w(e(a),o&&i[t])})}):n.nextAll(s(".","settings-folding")).each(function(t,n){w(e(n),o&&i)})}function y(t){var n=s("@","validation_ajax_");w(t.closest("ul").next(),e(n+"1").is(":checked")||e(n+"2").is(":checked"))}function _(e){return String(e).replace(/[a-z]/gi,function(e){return String.fromCharCode(e.charCodeAt(0)+(e.toLowerCase()<"n"?13:-13))})}function C(e){return function(e){return t.btoa(e)}(_(e))}function P(e){return _(function(e){return t.atob(e)}(e))}function S(t){var n=t.is(":checked"),i=e(s("@","public_target_rule")),a=e(s("@","public_behavior")),o=t.closest("tr").nextAll("tr");o.find('[name^="'+s("%","settings")+'"]').prop("disabled",!n),o.find(s(".","desc")).css("opacity",n?1:.5),x(t,[i,a],["1"===i.val(),a.val()]),n&&a.change()}function A(t,n){t&&("string"==typeof t&&(t=JSON.parse(t)),n&&(e('input[type="checkbox"]').prop("checked",!1).change(),e("input[name*=providers]").prop("disabled",!1).change()),e(s("#","import")).closest("form").deserialize(t),e(s("@","exception_admin")+","+s("@","validation_mimetype")).change(),e('select[name*="'+s("%","settings")+'"]').change(),e(s("@","validation_login")).change(),S(e(s("@","validation_public"))),y(e(s("@","validation_ajax_1"))),n&&(n=s("%","settings[providers][IPInfoDB]"),e(s("@","providers_IPInfoDB")).prop("checked",!!t[n])))}e.fn.deserialize=function(t){return this.each(function(){var n,i,a,o=this,r={};for(n in t)if(t.hasOwnProperty(n))try{i=d(decodeURIComponent(n)),a=d(decodeURIComponent(t[n])),r.hasOwnProperty(i)||(r[i]=[]),r[i].push(a)}catch(e){}e.each(r,function(t,i){"hidden"!==(n=e('[name="'+t+'"]:input',o).val(i)).attr("type")&&n.before('<span style="color:red">*</span>')})})};var O={dataPie:[],viewPie:[],drawPie:function(a){var o,r;O.dataPie[a]===i&&((o=O.dataPie[a]=new t.google.visualization.DataTable).addColumn("string","Country"),o.addColumn("number","Requests"),r=e.parseJSON(e("#"+a).attr("data-"+a)),O.dataPie[a].addRows(r)),O.viewPie[a]===i&&(O.viewPie[a]=new t.google.visualization.PieChart(n.getElementById(a))),O.dataPie[a]!==i&&O.viewPie[a]!==i&&0<(o=e("#"+a).width())&&O.viewPie[a].draw(O.dataPie[a],{backgroundColor:{fill:"transparent"},chartArea:{left:0,top:"5%",width:"100%",height:"90%"},sliceVisibilityThreshold:.015})},dataLine:[],viewLine:[],drawLine:function(a,o){var r,l,c;if(O.dataLine[a]===i){for((r=O.dataLine[a]=new t.google.visualization.DataTable).addColumn(o,"Date"),r.addColumn("number","comment"),r.addColumn("number","xmlrpc"),r.addColumn("number","login"),r.addColumn("number","admin"),r.addColumn("number","public"),l=(c=e.parseJSON(e("#"+a).attr("data-"+a))).length,r=0;r<l;++r)c[r][0]=new Date(1e3*c[r][0]);O.dataLine[a].addRows(c)}O.viewLine[a]===i&&(O.viewLine[a]=new t.google.visualization.LineChart(n.getElementById(a))),O.dataLine[a]!==i&&O.viewLine[a]!==i&&0<(r=e("#"+a).width())&&O.viewLine[a].draw(O.dataLine[a],{legend:{position:"bottom"},backgroundColor:{fill:"transparent"},hAxis:{format:"MM/dd"+("datetime"===o?" HH:mm":"")},vAxis:{textPosition:r>320?"out":"in"},chartArea:{left:r>320?"10%":0,top:"5%",width:"100%",height:"75%"}})},dataStacked:[],viewStacked:[],drawStacked:function(a){var o,r,l,c,u=e("#"+d(a));O.dataStacked[a]===i&&(l=e.parseJSON(u.attr("data-"+a)))&&(l.unshift(["site","comment","xmlrpc","login","admin","public",{role:"link"}]),O.dataStacked[a]=t.google.visualization.arrayToDataTable(l)),O.viewStacked[a]===i&&(O.viewStacked[a]=new t.google.visualization.BarChart(n.getElementById(a)),t.google.visualization.events.addListener(O.viewStacked[a],"animationfinish",function(){var t,i,o,r=[],l=O.dataStacked[a],c=l.getNumberOfRows(),d=e(s("#","open-new")).prop("checked");for(t=0;t<c;t++)r.push({label:l.getValue(t,0),link:l.getValue(t,6)});c="http://www.w3.org/1999/xlink",u.find("text").each(function(e,t){"g"===(o=t.parentNode).tagName.toLowerCase()&&-1!==(e=function(e,t){var n,i=t.length;for(e=e.replace("…",""),n=0;n<i;++n)if(t.hasOwnProperty(n)&&0===t[n].label.indexOf(e))return n;return-1}(t.textContent,r))&&((i=n.createElementNS("http://www.w3.org/2000/svg","a")).setAttributeNS(c,"xlink:href",r[e].link),i.setAttributeNS(c,"title",r[e].label),i.setAttribute("target",d?"_blank":"_self"),i.setAttribute("class","site"),i.appendChild(o.removeChild(t)),o.appendChild(i),r.splice(e,1))})})),0<(r=u.width())&&O.dataStacked[a]!==i&&O.viewStacked[a]!==i&&(o=s("range"),c=e.parseJSON(e("."+o).attr("data-"+o)),o=40*(l=O.dataStacked[a]).getNumberOfRows(),O.viewStacked[a].draw(l,{width:r,height:o+80,allowHtml:!0,isStacked:!0,legend:{position:"top"},chartArea:{top:50,left:90,width:"100%",height:o},hAxis:{minValue:0,maxValue:c[1]},backgroundColor:{fill:"transparent"},animation:{startup:!0,duration:200,easing:"out"}}))},ajaxStacked:function(t,n,a,o){v(null,{cmd:"restore-network",which:t=Math.max(0,Math.min(4,t)),offset:(n=5*Math.max(1,Math.min(5,n)))*a*o,length:n},function(t){var a,o,r,l,c;t=function(e,t){var n,i,a=Math.ceil(e.length/t),o=[];for(n=0;n<a;++n)i=n*t,o.push(e.slice(i,i+t));return o}(t,n),e(s(".","network")).each(function(s,d){if(t[s]!==i){for(l=e(d).attr("id"),c=O.dataStacked[l],r=Math.min(n,t[s].length),a=0;a<r;++a)for(o=1;o<=5;o++)c.setValue(a,o,t[s][a][o]);O.drawStacked(l)}})})}};function I(n){"object"==typeof t.google&&(1===n?e(s("#","chart-countries")).length&&(O.drawPie(s("chart-countries")),O.drawLine(s("chart-daily"),"date")):5===n&&e(s(".","network")).each(function(t,n){O.drawStacked(e(n).attr("id"))}))}function N(e){if("object"==typeof t.google){var n=["corechart"];5===e&&n.push("bar"),t.google.charts.load("current",{packages:n,callback:function(){I(e)}}),u("draw-chart."+e,function(){I(e)})}}function D(t){var n,a,o=[];e.each(t,function(e,t){if(o[e]="",t!==i&&(a=t.length))for(o[e]=(t[0]||"o").toString(),n=1;n<a;++n)o[e]+=(t[n]||"o").toString()}),wpCookies!==i&&wpCookies.setHash("ip-geo-block",o,new Date(Date.now()+2592e6),c.home+c.admin)}function j(t){var a=function(e){var t,n=wpCookies!==i&&wpCookies.getHash("ip-geo-block")||[];for(t in n)n.hasOwnProperty(t)&&(n[t]=n[t].replace(/[^ox\d]/gi,"").split(""));return n[e]===i&&(n[e]=[]),n}(t);return e(n).on("click","form>h2,h3",function(){return function(e,t,n){var i,a=e.closest("fieldset").data("section"),o=e.parent().nextAll(".panel-body").toggle();e.toggleClass(s("dropup")).toggleClass(s("dropdown")),(i=e.hasClass(s("dropdown")))?o.addClass(s("border")).trigger(s("show-body")):o.removeClass(s("border")),n[t][a]=i?"o":"x",D(n),I(t)}(e(this),t,a),!1}),e(s("#","toggle-sections")).on("click",function(){var n,i=e(s(".","field")).find("h2,h3"),o=[s("dropdown"),s("dropup")],r=i.filter("."+o[0]).length;return i.each(function(i){(n=e(this)).removeClass(o.join(" ")).addClass(r?o[1]:o[0]),n=n.parent().nextAll(".panel-body").toggle(!r),r?n.removeClass(s("border")):n.addClass(s("border")).trigger("show-body"),a[t][i]=r?"x":"o"}),D(a),I(t),!1}),a}function T(t){e("body").append('<div style="display:none"><form method="POST" id="'+s("export-form")+'" action="'+l.url.replace("ajax.php","post.php")+'"><input type="hidden" name="action" value="'+l.action+'" /><input type="hidden" name="nonce" value="'+l.nonce+'" /><input type="hidden" name="cmd" value="'+t+'" /><input type="hidden" name="data" value="" id="'+s("export-data")+'"/><input type="submit" value="submit" /></form><input type="file" name="settings" id="'+s("file-dialog")+'" /></div>')}function L(e,t,n,i){var a,o;return(a=e.cloneNode(!1)).setAttribute("title",d(n)),(o=t.cloneNode(!1)).setAttribute("class","dashicons dashicons-"+i),a.appendChild(o),a}function R(n,a,o,r){var c=Number(r[n][1===n?3:2])||0;c=[10,25,50,100][c],e.extend(!0,e.fn.dataTable.defaults,o,{dom:"tlp",serverSide:!1,autoWidth:!1,processing:!0,deferRender:!0,language:{emptyTable:l.i18n[1],loadingRecords:l.i18n[0],processing:l.i18n[0],zeroRecords:l.i18n[2],lengthMenu:"_MENU_",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",lengthMenu:[10,25,50,100],pageLength:c,scroller:!0,scrollY:1e4,scrollCollapse:!0,drawCallback:function(t){var n=e(s("#",a.tableID)).find("td.dataTables_empty"),i="restore-logs"===a.ajaxCMD?3:2;i>t.iDraw?n.html(l.i18n[0]):i===t.iDraw&&(n.html(l.i18n[1]),(n=e(s("@","search_filter"))).val()&&n.trigger("keyup"))}});var d=e(s("#",a.tableID)).DataTable({ajax:{url:l.url,type:"POST",data:{cmd:a.ajaxCMD,action:l.action,nonce:l.nonce}},mark:!0}),p=function(){d.columns.adjust().responsive.recalc().draw(!1)};return u("draw-table."+n,p),e(s("#",a.sectionID)).find(".panel-body").off(s("show-body")).on(s("show-body"),function(){return p(),!1}).off("change").on("change",'th>input[type="checkbox"]',function(){var t=e(this).prop("checked");return e(s("#",a.tableID)).find('td>input[type="checkbox"]').prop("checked",t),!1}),e(s("#","select-target")).off("change").on("change",function(){var t=e(this).find('input[name="'+s("target")+'"]:checked').val();return d.columns(a.targetColumn).search("all"!==t?t:"").draw(),!1}).trigger("change"),e(s("#","bulk-action")).off("click").on("click",function(){var t,o,r=e(this).prev().val(),c=/(<([^>]+)>)/gi,u=/data-hash=[\W]([\w]+)[\W]/i,p={IP:[],AS:[]},h=d.$("input:checked");return!!r&&(h.length?(h.each(function(){o=d.cell(this.parentNode).data(),t=("bulk-action-remove"===r||"bulk-action-ip-erase"===r)&&(t=o[a.columnIP].match(u))?","+t[1]:"",p.IP.push(o[a.columnIP].replace(c,"")+t),p.AS.push(o[a.columnAS].replace(c,""))}),p.IP.length&&v("loading",{cmd:r,which:p},function(t){t.page!==i?m(t.page,"tab="+n):t&&(d.ajax.reload(),e(s("#",a.tableID)).find('th input[type="checkbox"]').prop("checked",!1))}),!1):(f(null,l.msg[10]),!1))}),e(s("@","search_filter")).off("keyup").on("keyup",function(){return d.search(this.value,!1,!0,!/[A-Z]/.test(this.value)).draw(),!1}),e(s("#","reset-filter")).off("click").on("click",function(){return e(s("@","search_filter")).val(""),d.search("").draw(),!1}),e(s("@","clear_all")).off("click").on("click",function(){return h(l.msg[0],function(){b(1===n?"cache":"logs",null)}),!1}),e("table"+s(".","dataTable")+" tbody").on("click","a",function(){var i,a,o=t.location.search.slice(1).split("&"),r=o.length,l={};for(i=0;i<r;++i)l[(a=o[i].split("="))[0]]=a[1];for(i in l.tab=1===n?4:2,l.s=e(this).text().replace(/[^\w\.\:\*]/,""),a=[],l)l.hasOwnProperty(i)&&a.push(i+"="+l[i]);return t.open(t.location.pathname+"?"+a.join("&"),"_blank"),!1}),e(s("#",a.tableID)).on("length.dt",function(e,t,i){r[n][1===n?3:2]={10:0,25:1,50:2,100:3}[i]||0,D(r)}),d}e(function(){var o=Number(l.tab)||0,r=j(o);switch(e(s(".","inhibit")).on("submit",function(){return!1}),e(t).on("beforeunload",function(){a=!0}),o){case 0:var u=s("%","settings");e('[id^="'+s("scan-")+'"]').on("click",function(){var t=e(this),n=t.attr("id"),i=t.parent();return v(n.replace(/^.*(?:scan)/,"scanning"),{cmd:"scan-code",which:n.replace(s("scan-"),"")},function(e){var t,n;for(t in i.children("ul").length||i.append('<ul id="'+s("code-list")+'"></ul>'),i=i.children("ul").empty(),e)e.hasOwnProperty(t)&&("string"==typeof e[t=d(t)]?n=d(e[t]):(n=d(e[t].code),t='<abbr title="'+d(e[t].type)+'">'+t+"</abbr>"),i.append("<li>"+t+' : <span class="'+s("notice")+'">'+n+"</span></li>"));i.show("slow")}),!1}),e(s("@","matching_rule")).on("change",function(){var t=this.value;return e(s("@","white_list")).closest("tr").toggle("0"===t),e(s("@","black_list")).closest("tr").toggle("1"===t),!1}).change(),e(s(".","icon-cidr")).on("click",function(){var n=e(s("#","admin-styles-css")).get(0).href,i=t.open("about:blank","","width=560,height=170");return n=n.slice(0,n.lastIndexOf("css/")),i.document.write('<!DOCTYPE html><html lang=en><meta charset=utf-8><title>CIDR calculator for IPv4 / IPv6</title><link href="'+n+'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> </span></div></div><script src="'+n+'js/cidr.min.js?v=.1"><\/script>'),i.document.close(),!1}),e(s("@","validation_mimetype")).on("change",function(t){var n=e(this),i=Number(n.val());return n.nextAll(s(".","settings-folding")).each(function(t,n){w(e(n),i===t+1||i&&2===t)}),k(t)}).change(),e('select[name*="response_code"]').on("change",function(t){var n=e(this),i=parseInt(n.val()/100,10),a=n.closest("tr").nextAll("tr");return 0<=n.attr("name").indexOf("public")&&-1===Number(e(s("@","public_matching_rule")).val())?(a.each(function(t){1>=t&&e(this).hide()}),k(t)):(i<=3?a.each(function(t){0===t?e(this).show():1===t&&e(this).hide()}):a.each(function(t){0===t?e(this).hide():1===t&&e(this).show()}),k(t))}).change(),e(s("#","decode")).on("click",function(){var t=e(s("@","signature")),n=t.val();return-1===n.search(/,/)?t.val(P(n)):t.val(C(n)),!1}),e(s("@","validation_login")).on("change",function(t){var n=e(this);return x(n,n,u),k(t)}).change(),v(null,{cmd:"get-actions"},function(t){var i,a,o,r,u=e(s("#","list-admin")),p=n.createElement("li"),h=n.createElement("input"),f=n.createElement("label"),g=n.createElement("dfn"),m=n.createElement("span");for(r in t)t.hasOwnProperty(r)&&(r=d(r),u.find("#"+(o=s("!","exception_admin_"+r))).size()||((i=h.cloneNode(!1)).setAttribute("id",o),i.setAttribute("value",r),i.setAttribute("type","checkbox"),(a=p.cloneNode(!1)).appendChild(i),(i=f.cloneNode(!1)).setAttribute("for",o),i.appendChild(n.createTextNode(r)),a.appendChild(i),1&t[r]&&a.appendChild(L(g,m,l.msg[5],"lock")),2&t[r]&&a.appendChild(L(g,m,l.msg[6],"unlock")),u.append(a)));e(s(".","icon-unlock")).on("click",function(){return e(s("#","list-admin")+">li").filter(function(){return!e(this).find(".dashicons-unlock").length}).toggle(),!1}),e(s("@","exception_admin")).on("change",function(t){var n=e.grep(e(this).val().split(","),function(e){return""!==e.replace(/^\s+|\s+$/g,"")});return e(s("#","list-admin")).find("input").each(function(){var t=e(this),i=t.val();t.prop("checked",-1!==e.inArray(i,n))}),k(t)}).change(),e(s("#","list-admin")).on("click","input",function(){var t,n=e(this),i=e(s("@","exception_admin")),a=n.val(),o=e.grep(i.val().split(","),function(e){return""!==e.replace(/^\s+|\s+$/g,"")});-1===(t=e.inArray(a,o))?o.push(a):o.splice(t,1),i.val(o.join(",")).change()}),e(s(".","icon-find")).on("click",function(){var t,n,i,a,o=e(this),r=[],u=0,p=d(l.msg[8]),h=d(o.data("target"));return e(s("#","find-"+h)).empty(),o.next().children(s(".","find-desc")).show(),(o=e(s("#","list-"+h))).children("li").each(function(t,n){r.push(e(n).find("input").val())}),v("find-"+h,{cmd:"find-"+h},function(f){var g;for(g in f)f.hasOwnProperty(g)&&(++u,t=d(f[g]),g=d(g),n=e.inArray(g,r),i=s("!","exception_"+h+"_"+g),a="admin"===h?t+"="+g:"/"+t+"/"+g+"/",a='<a class="ip-geo-block-icon ip-geo-block-icon-alert" href="'+c.sites[0]+c.admin+"options-general.php?page=ip-geo-block&tab=4&s="+encodeURIComponent(a)+'" title="'+p.replace("%s",a)+'" target="_blank"><span></span></a>',n<0?(r.push(g),o.prepend('<li><input id="'+i+'" value="'+g+'" type="checkbox" '+("admin"===h?"/>":"name=ip_geo_block_settings[exception]["+h+"]["+g+"] />")+'<label for="'+i+'">'+g+"</lable>"+a+"</li>")):(i=o.find("#"+i).parent()).find("a").length||i.append(a));e(s("@","exception_"+h)).trigger("change"),e(s("#","find-"+h)).append(' <span class="ip-geo-block-warn">'+d(l.msg[7].replace("%d",u))+"</span>")}),!1})}),e('input[id^="'+s("!","validation_ajax_")+'"]').on("change",function(){y(e(this))}).change(),e(s("@","validation_public")).on("change",function(t){return S(e(this)),k(t)}).change(),e(s("@","public_matching_rule")).on("change",function(t){var n=this.value;return e(s("@","public_white_list")).closest("tr").toggle("0"===n),e(s("@","public_black_list")).closest("tr").toggle("1"===n),e(s("@","public_response_code")).change().closest("tr").toggle("-1"!==n),k(t)}).change(),e(s("@","public_behavior")).on("change",function(t){var n=e(this);return w(n.siblings("ul"),n.prop("checked")),k(t)}).change(),e(s("@","update")).on("click",function(){return v("download",{cmd:"download"},function(t){var n,i,a;for(n in t)if(t.hasOwnProperty(n))for(i in a=t[n])a.hasOwnProperty(i)&&(a[i=d(i)].filename&&e(s("@",n+"_"+i+"_path")).val(d(a[i].filename)),a[i].message&&e(s("#",n+"-"+i)).text(d(a[i].message)))}),!1}),e(s("@","restrict_api")).on("change",function(){e('input[class*="remote"]').prop("disabled",e(this).prop("checked"))}).trigger("change"),e(s("@","save_statistics")).on("change",function(){return e(s("@","validation_recdays")).prop("disabled",!e(this).prop("checked")),!1}).trigger("change"),e(s("@","validation_reclogs")).on("change",function(){var t=e(this);t.parent().parent().nextAll().find('input[id*="validation"]').prop("disabled",0===Number(t.prop("selectedIndex")))}).trigger("change"),e(s("@","cache_hold")).on("change",function(){var t=e(this).prop("checked");e('input[name*="[cache_time]"]').prop("disabled",!t),e('select[id*="login_fails"]').prop("disabled",!t)}).trigger("change"),e(s("@","comment_pos")).on("change",function(){var t=e(this);t.nextAll('input[type="text"]').prop("disabled",0===Number(t.prop("selectedIndex")))}).trigger("change"),T("validate"),e(s("#","export")).on("click",function(){if(JSON===i)return g(),!1;var t=u,n={};return e.each(e(this).closest("form").serializeArray(),function(e,i){-1!==i.name.indexOf(t)&&(n[i.name]=i.value)}),n[t+="[signature]"]=C(n[t]),e(s("#","export-data")).val(JSON.stringify(n)),e(s("#","export-form")).submit(),!1}),e(s("#","file-dialog")).on("change",function(e){if(t.FileReader===i)return g(),!1;var n,a=e.target.files[0];return a&&function(e,n){var i=new t.FileReader;i.onload=function(e){n&&n(e.target.result)},i.onerror=function(e){f("Error",e.target.error.code)},i.readAsText(e)}(a,function(e){(e=JSON.parse(e))[n=u+"[signature]"]!==i&&(e[n]=C(e[n])),v("export-import",{cmd:"validate",data:JSON.stringify(e)},function(e){A(e,!0)})}),!1}),e(s("#","import")).on("click",function(){return e(s("#","file-dialog")).click(),!1}),e(s("#","default")).on("click",function(){return h(l.msg[0],function(){v("pre-defined",{cmd:"import-default"},function(e){A(e,!0)})}),!1}),e(s("#","preferred")).on("click",function(){return h(l.msg[0],function(){v("pre-defined",{cmd:"import-preferred"},function(e){A(e,!1)})}),!1}),e(s("@","reset_live")).on("click",function(){return v("reset-live",{cmd:"reset-live"}),!1}),e(s("#","login-link")).on("click",function(){var t=e(this),n=s("$","primary");return t.hasClass(n)?v("login-loading",{cmd:"generate-link"},function(i){t.text(l.msg[3]),t.removeClass(n).nextAll(s(".","desc")).remove(),e('<p class="ip-geo-block-desc"></p>').appendTo(t.parent()).append(l.msg[4],'<a href="'+i.link+'" title="'+l.msg[1]+'" target=_blank>'+i.link+"</a></p>")}):h(l.msg[0],function(){v("login-loading",{cmd:"delete-link"},function(){t.text(l.msg[2]),t.addClass(n).nextAll(s(".","desc")).remove()})}),!1}),e(s("@","diag_tables")).on("click",function(){return h(l.msg[0],function(){var e;v(e="diag-tables",{cmd:e},function(e){m(e.page,e.tab)})}),!1}),e(s("#","show-info")).on("click",function(){e(s("#","wp-info")).empty(),v("wp-info",{cmd:"show-info"},function(t){var n,i=[];for(n in t)t.hasOwnProperty(n)&&i.push("- "+n+" "+t[n]);return e(s("#","wp-info")).html('<textarea class="regular-text code" rows="'+i.length+'">'+i.join("\n")+"</textarea>").find("textarea").select(),!1})}),e('select[name^="'+u+'"]').on("change",function(){var t,n,i,a=e(this);return t=a,i=s(".","desc"),t.next(i).empty(),(n=t.children("option:selected").data("desc"))&&t.next(i).html(e.parseHTML(n)),x(a,a,u),!1}).change(),e(s(".","icon-cycle")).on("click",function(){var t,n=e(this).nextAll("li"),i=n.find(s("@","exception_admin")),a=n.find("input:checkbox").filter(":visible"),o=a.filter(":checked").length;return a.prop("checked",!o),i.length&&(o?i.val(""):(t=[],a.each(function(n,i){t.push(e(i).val())}),i.val(t.join(",")))),e(this).blur(),!1}),e(s(".","settings-folding>dfn")).on("click",function(){var t=s("drop"),n=e(this).parent();return n.children(s(".","hide")).toggle(),n.toggleClass(t+"up").toggleClass(t+"down"),n.hasClass(t+"up")&&n.children("div").hide(),!1}),e("#submit").on("click",function(){var t=e(s("@","signature")),n=t.val();return-1!==n.indexOf(",")&&t.val(C(n)),!0});break;case 1:N(o);var p=0;e(s("#","sort-slug")).on("click",function(){var t=e(this).closest("ol"),n=t.children("li");(p=!p)?n.sort(function(t,n){return e(t).text()>e(n).text()}):n.sort(function(t,n){return Number(e(t).text().replace(/^.*\((\d+)\)$/,"$1"))<=Number(e(n).text().replace(/^.*\((\d+)\)$/,"$1"))}),t.children("li").remove(),n.appendTo(t)}),e(s("@","clear_statistics")).on("click",function(){return h(l.msg[0],function(){b("statistics",null)}),!1}),e(s("@","clear_logs")).on("click",function(){return h(l.msg[0],function(){b("logs",null)}),!1}),R(o,{tableID:"statistics-cache",ajaxCMD:"restore-cache",sectionID:"section-2",targetColumn:4,columnIP:1,columnAS:3},{columns:[{title:'<input type="checkbox">'},{title:l.i18n[3]},{title:l.i18n[4]},{title:l.i18n[5]},{title:l.i18n[6]},{title:l.i18n[7]},{title:l.i18n[8]},{title:l.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]}]},r),T("export-cache"),e(s("#","export-cache")).on("click",function(){return e(s("#","export-form")).submit(),!1});break;case 4:var _={tableID:"validation-logs",sectionID:"section-0",targetColumn:6,columnIP:3,columnAS:5},I={columns:[{title:'<input type="checkbox">'},{title:""},{title:l.i18n[10]},{title:l.i18n[3]},{title:l.i18n[4]},{title:l.i18n[5]},{title:l.i18n[7]},{title:l.i18n[11]},{title:l.i18n[12]},{title:l.i18n[13]},{title:l.i18n[14]},{title:l.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]}]},M=null,z=null,E=e(s("#","live-loading")),$=null,J=function(e){M&&(t.clearTimeout(M),M=null),z&&(E.removeClass(s("live-timer")),t.clearTimeout(z),z=null),v(e===i?"live-loading":null,{cmd:"live-start"},function(n){if(n.error)f(null,n.error);else if(n.data.length){var a,o=n.data.length;for(a=0;a<o;a++)$.row.add(n.data[a]);$.draw(!1)}e===i&&(M=t.setTimeout(J,1e3*l.interval))})},B=function(e,t){J(!1),v(null,{cmd:e||"live-stop",callback:t})},q=s(""),H=function(t,n,i){-1===n[7].indexOf("pass")?e(t).addClass(q+i+"blocked"):e(t).addClass(q+i+"passed")},V=e(s("#","live-log")),G=e(s("#","live-update"));e(s("#","validation-logs")).on("animationend",function(){return e(this).find('tr[class*="'+q+'new"]').each(function(){var t=e(this);-1!==t.prop("class").indexOf("passed")?t.addClass(q+"passed").removeClass(q+"new-passed"):t.addClass(q+"blocked").removeClass(q+"new-blocked")}),!1}),V.on("change",function(){switch(e('input[name="'+s("live-log")+'"]:checked').val()){case"start":J();break;case"pause":B("live-pause",function(){E.addClass(s("live-timer")),z=t.setTimeout(function(){e(s("#","live-log-stop")).prop("checked",!0),B()},1e3*l.timeout)});break;case"stop":B()}}),G.on("change",function(){var t=V.closest("tr"),n=G.prop("checked");return r[o][1]=n?"o":"x",D(r),$&&$.clear().destroy(),n?(t.show().next().next().next().nextAll().hide(),_.ajaxCMD="live-stop",I.order=[1,"desc"],I.createdRow=function(e,t){H(e,t,"new-")}):(t.hide().next().next().next().nextAll().show(),_.ajaxCMD="restore-logs",I.order=[0,""],I.createdRow=function(e,t){H(e,t,"")}),e(s("#","live-log-stop")).trigger("click"),$=R(o,_,I,r),!1}).trigger("change"),e(s("#","logs-preset")).on("click","a",function(){var t=e(this).data("value");return e(s("@","search_filter")).val(t),$.search(t,!1,!0,!/[A-Z]/.test(t)).draw(),!1}),T("export-logs"),e(s("#","export-logs")).on("click",function(){return e(s("#","export-form")).submit(),!1});break;case 2:e(t).on(s("gmap-error"),function(){v(null,{cmd:"gmap-error"},function(e){m(e.page,e.tab)})});var U=e(s("#","map"));"object"==typeof t.google?U.each(function(){e(this).GmapRS()}):U.each(function(){e(this).empty().html('<iframe src="'+l.altgmap+'?output=embed" frameborder="0" style="width:100%; height:400px; border:0" allowfullscreen></iframe>')});I=[];e('select[id^="'+s("!","service")+'"]').on("change",function(){e(this).children("option").each(function(t,n){I[e(n).text()]=t,r[o][3+t]=e(n).prop("selected")?"o":"x"}),"o"!==r[o][3+(Number(r[o][2])||0)]&&(r[o][2]=e(this).prop("selectedIndex")),D(r)}).change(),e(s("@","get_location")).on("click",function(){var n,i=e(s("#","whois")),a=e(s("#","apis")),c=e(s("@","service")).val(),u=e.trim(e(s("@","ip_address")).val());if(u&&c){if(e(s("@","anonymize")).prop("checked")){if(/[^0-9a-f\.:]/.test(u))return f(null,"illegal format."),!1;-1!==u.indexOf(".")?u=u.replace(/\.\w+$/,".0"):(-1===(u=(u=u.split(":")).splice(0,4).join(":")).indexOf("::")&&(u+="::"),u=u.replace(/:{3,}/,"::")),e(s("@","ip_address")).val(u)}i.hide().empty(),a.hide().empty(),n=e.whois(u,function(t){var n,a="";for(n=0;n<t.length;++n)a+="<tr><td>"+t[n].name+"</td><td>"+t[n].value+"</td></tr>";i.html('<fieldset id="'+s("section-1")+'" class="'+s("field")+' panel panel-default" data-section="1"><legend class="panel-heading"><h3 id="'+s("whois-title")+'" class="'+s("dropdown")+'">Whois</h3></legend><div class="panel-body '+s("border")+'"><table class="'+s("table")+'">'+a+"</table></div></fieldset>").fadeIn("slow"),"x"===r[o][1]&&e(s("#","whois-title")).trigger("click")}),v("loading",{cmd:"search",ip:u,which:c},function(n){var i,c="",p=Number(r[o][2])||0;for(i in n)n.hasOwnProperty(i)&&(c+='<a href="#!" class="nav-tab'+(I[i]===p?" nav-tab-active":"")+'" data-index="'+I[i]+"\" data-api='"+d(JSON.stringify(n[i]))+"'>"+i+"</a>");a.html('<div class="nav-tab-wrapper">'+c+'</div><div id="ip-geo-block-geoinfo"></div>').fadeIn("slow").on("click","a",function(){var n,i=e(this),a=e(this).data("api"),c="",p=d(a.latitude||"0"),h=d(a.longitude||"0"),f=a.latitude||a.longitude?7:2;for(n in i.parent().children("a").removeClass("nav-tab-active"),i.addClass("nav-tab-active"),r[o][2]=i.data("index"),D(r),a)a.hasOwnProperty(n)&&(n=d(n),c+='<li><span class="'+s("title")+'">'+n+' : </span><span class="'+s("result")+'">'+d(a[n])+"</span></li>");"object"==typeof t.google?U.GmapRS("deleteMarkers").GmapRS("addMarker",{latitude:p,longitude:h,title:u,content:"<ul>"+c+"</ul>",show:!0,zoom:f}):(U.empty().html('<iframe src="'+l.altgmap+"?q="+p+","+h+"&z="+f+'&output=embed" frameborder="0" style="width:100%; height:400px; border:0" allowfullscreen></iframe>'),e(s("#","geoinfo")).html("<ul>"+c+"</ul>"))}).find(".nav-tab-active").trigger("click")},[n])}return!1}),e(s("@","ip_address")).on("keypress",function(t){if(t.which&&13===t.which||t.keyCode&&13===t.keyCode)return e(s("@","get_location")).click(),!1}),e(s("@","ip_address")).val()&&e(s("@","get_location")).click();break;case 5:N(o),e("input[name="+s("duration")+"]:radio").on("click",function(){var t=e('div[class*="paginate"]').find('a[class*="current"]').text();r[o][2]=e(this).val()||0,r[o][3]=r[o][3]||2,r[o][4]=r[o][4]||1,D(r),O.ajaxStacked(r[o][2],r[o][3],r[o][4],t-1)}),e(s("#","open-new")).on("change",function(){var t=e(this).prop("checked");r[o][1]=t?"o":"x",D(r),e(s("#","section-0 svg")).find("a").each(function(){this.setAttribute("target",t?"_blank":"_self")})}),e(s("#","apply-layout")).on("click",function(){var t=e(s("#","select-layout"));r[o][3]=t.find('select[name="rows"] option:selected').val(),r[o][4]=t.find('select[name="cols"] option:selected').val(),D(r)}),e("ul.wp-submenu>li.wp-first-item").removeClass("current").next().addClass("current")}})}(jQuery,window,document);
admin/js/whois.js CHANGED
@@ -77,14 +77,14 @@
77
 
78
  if (value.link) {
79
  if ((value['referenced-type'] || false) && 'aut-num' === value['referenced-type']) {
80
- value.value += ' [ <a href="https://ipinfo.io/' + escapeHTML(value.value) + '" target=_blank>Search on ipinfo.io</a> ]';
81
  } else {
82
  value.value = '<a href="' + escapeHTML(value.link.href) + '.json" target=_blank>' + escapeHTML(value.value) + '</a>';
83
  }
84
  }
85
 
86
  else if (value.value.match(/^AS\d+$/)) {
87
- value.value += ' [ <a href="https://ipinfo.io/' + escapeHTML(value.value) + '" target=_blank>Search on ipinfo.io</a> ]';
88
  }
89
 
90
  else if ('remarks' === value.name) {
77
 
78
  if (value.link) {
79
  if ((value['referenced-type'] || false) && 'aut-num' === value['referenced-type']) {
80
+ value.value += ' [ <a href="https://ipinfo.io/' + escapeHTML(value.value) + '" target=_blank>Search at ipinfo.io</a> ]';
81
  } else {
82
  value.value = '<a href="' + escapeHTML(value.link.href) + '.json" target=_blank>' + escapeHTML(value.value) + '</a>';
83
  }
84
  }
85
 
86
  else if (value.value.match(/^AS\d+$/)) {
87
+ value.value += ' [ <a href="https://ipinfo.io/' + escapeHTML(value.value) + '" target=_blank>Search at ipinfo.io</a> ]';
88
  }
89
 
90
  else if ('remarks' === value.name) {
admin/js/whois.min.js CHANGED
@@ -5,4 +5,4 @@
5
  * Copyright (c) 2016 tokkonopapa (tokkonopapa@yahoo.com)
6
  * This software is released under the MIT License.
7
  */
8
- !function(e){e.extend({whois:function(a,r){var t=[];function n(e){return e?e.toString().replace(/[&<>"']/g,function(e){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[e]}):""}return e.ajax({url:'https://query.yahooapis.com/v1/public/yql?q=select * from xml where url="%URL%"&format=json&jsonCompat=new'.replace(/%URL%/,"https://rest.db.ripe.net/search%3fflags=no-filtering%26flags=resource%26query-string="+a),method:"GET",dataType:"json"}).done(function(a,r,u){var l,o=a.query.results,i=[];for(l in o)if(o.hasOwnProperty(l)){i=o[l];break}!function a(r,u){if(u&&"object"==typeof u)if(u.errormessage){var l=u.errormessage,o=l.text.split(/\n+/);t.push({name:n(l.severity),value:n(o[1].replace(/%s/,l.args.value))})}else u.href?(u.href=n(u.href),t.push({name:n(r),value:'<a href="'+u.href+'.json" target=_blank>'+u.href+"</a>"})):u.name&&u.value?(u.link?u["referenced-type"]&&"aut-num"===u["referenced-type"]?u.value+=' [ <a href="https://ipinfo.io/'+n(u.value)+'" target=_blank>Search on ipinfo.io</a> ]':u.value='<a href="'+n(u.link.href)+'.json" target=_blank>'+n(u.value)+"</a>":u.value.match(/^AS\d+$/)?u.value+=' [ <a href="https://ipinfo.io/'+n(u.value)+'" target=_blank>Search on ipinfo.io</a> ]':"remarks"===u.name&&(u.value=n(u.value),u.value=u.value.replace(/(https?:\/\/[^\s]+)/gi,'<a href="$1" target=_blank>$1</a>')),t.push({name:n(u.name),value:u.value})):"primary-key"!==r&&e.each(u,function(e,r){a(e,r)})}(null,i)}).fail(function(e,a,r){t.push({name:n(a),value:n(r)})}).always(function(){t.push({name:"copyright",value:'<a href="https://apps.db.ripe.net/search/query.html" title="Database Query - RIPE Network Coordination Centre">RIPE NCC</a>'}),r&&r(t)})}})}(jQuery);
5
  * Copyright (c) 2016 tokkonopapa (tokkonopapa@yahoo.com)
6
  * This software is released under the MIT License.
7
  */
8
+ !function(e){e.extend({whois:function(a,r){var t=[];function n(e){return e?e.toString().replace(/[&<>"']/g,function(e){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[e]}):""}return e.ajax({url:'https://query.yahooapis.com/v1/public/yql?q=select * from xml where url="%URL%"&format=json&jsonCompat=new'.replace(/%URL%/,"https://rest.db.ripe.net/search%3fflags=no-filtering%26flags=resource%26query-string="+a),method:"GET",dataType:"json"}).done(function(a,r,u){var l,o=a.query.results,i=[];for(l in o)if(o.hasOwnProperty(l)){i=o[l];break}!function a(r,u){if(u&&"object"==typeof u)if(u.errormessage){var l=u.errormessage,o=l.text.split(/\n+/);t.push({name:n(l.severity),value:n(o[1].replace(/%s/,l.args.value))})}else u.href?(u.href=n(u.href),t.push({name:n(r),value:'<a href="'+u.href+'.json" target=_blank>'+u.href+"</a>"})):u.name&&u.value?(u.link?u["referenced-type"]&&"aut-num"===u["referenced-type"]?u.value+=' [ <a href="https://ipinfo.io/'+n(u.value)+'" target=_blank>Search at ipinfo.io</a> ]':u.value='<a href="'+n(u.link.href)+'.json" target=_blank>'+n(u.value)+"</a>":u.value.match(/^AS\d+$/)?u.value+=' [ <a href="https://ipinfo.io/'+n(u.value)+'" target=_blank>Search at ipinfo.io</a> ]':"remarks"===u.name&&(u.value=n(u.value),u.value=u.value.replace(/(https?:\/\/[^\s]+)/gi,'<a href="$1" target=_blank>$1</a>')),t.push({name:n(u.name),value:u.value})):"primary-key"!==r&&e.each(u,function(e,r){a(e,r)})}(null,i)}).fail(function(e,a,r){t.push({name:n(a),value:n(r)})}).always(function(){t.push({name:"copyright",value:'<a href="https://apps.db.ripe.net/search/query.html" title="Database Query - RIPE Network Coordination Centre">RIPE NCC</a>'}),r&&r(t)})}})}(jQuery);
classes/class-ip-geo-block-apis.php CHANGED
@@ -103,7 +103,6 @@ abstract class IP_Geo_Block_API {
103
  }
104
 
105
  switch ( $tmp ) {
106
-
107
  // decode json
108
  case 'json':
109
  case 'html': // ipinfo.io, Xhanch
@@ -198,56 +197,56 @@ abstract class IP_Geo_Block_API {
198
  }
199
 
200
  /**
201
- * Class for Ipdata.co
202
  *
203
- * URL : https://ipdata.co/
204
- * Term of use : https://ipdata.co/terms.html
205
- * Licence fee : free
206
- * Rate limit : 1500 requests free daily
207
- * Sample URL : https://api.ipdata.co/8.8.8.8?api-key=...
208
- * Input type : IP address (IPv4, IPv6)
209
- * Output type : json
 
210
  */
211
- class IP_Geo_Block_API_Ipdataco extends IP_Geo_Block_API {
212
  protected $template = array(
213
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
214
- 'url' => 'https://api.ipdata.co/%API_IP%?api-key=%API_KEY%',
215
  'api' => array(
216
  '%API_FORMAT%' => 'json',
217
  ),
218
  'transform' => array(
219
- 'countryCode' => 'country_code',
220
- 'countryName' => 'country_name',
221
- 'regionName' => 'region',
222
- 'cityName' => 'city',
223
- 'latitude' => 'latitude',
224
- 'longitude' => 'longitude',
 
225
  )
226
  );
227
  }
228
 
229
  /**
230
- * Class for ipstack
231
  *
232
- * URL : https://ipstack.com/
233
- * Term of use : https://ipstack.com/terms
234
- * Licence fee : free for registered user
235
- * Rate limit : 10,000 queries per month for free (https can be available for premium users)
236
- * Sample URL : http://api.ipstack.com/186.116.207.169?access_key=YOUR_ACCESS_KEY&output=json&legacy=1
237
- * Input type : IP address (IPv4, IPv6) / domain name
238
- * Output type : json, xml
239
  */
240
- class IP_Geo_Block_API_ipstack extends IP_Geo_Block_API {
241
  protected $template = array(
242
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
243
- 'url' => 'http://api.ipstack.com/%API_IP%?access_key=%API_KEY%&output=%API_FORMAT%',
244
- 'api' => array(
245
- '%API_FORMAT%' => 'json',
246
- ),
247
  'transform' => array(
248
- 'countryCode' => 'country_code',
249
- 'countryName' => 'country_name',
250
- 'regionName' => 'region_name',
251
  'cityName' => 'city',
252
  'latitude' => 'latitude',
253
  'longitude' => 'longitude',
@@ -261,7 +260,7 @@ class IP_Geo_Block_API_ipstack extends IP_Geo_Block_API {
261
  * URL : https://ipinfo.io/
262
  * Term of use : https://ipinfo.io/developers#terms
263
  * Licence fee : free
264
- * Rate limit :
265
  * Sample URL : https://ipinfo.io/124.83.187.140/json
266
  * Sample URL : https://ipinfo.io/124.83.187.140/country
267
  * Input type : IP address (IPv4)
@@ -303,64 +302,67 @@ class IP_Geo_Block_API_ipinfoio extends IP_Geo_Block_API {
303
  }
304
 
305
  /**
306
- * Class for Nekudo
307
  *
308
- * URL : https://geoip.nekudo.com/
309
- * Term of use : https://nekudo.com/blog/new-project-shiny-geoip
310
  * Licence fee : free to use the API
311
- * Rate limit : none
312
- * Sample URL : http://geoip.nekudo.com/api/2a00:1210:fffe:200::1
313
  * Input type : IP address (IPv4, IPv6)
314
  * Output type : json
315
  */
316
- class IP_Geo_Block_API_Nekudo extends IP_Geo_Block_API {
317
  protected $template = array(
318
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
319
- 'url' => 'https://geoip.nekudo.com/api/%API_IP%',
320
  'api' => array(),
321
  'transform' => array(
322
- 'countryCode' => 'country',
323
- 'countryName' => 'country',
324
  'cityName' => 'city',
325
- 'latitude' => 'location',
326
- 'longitude' => 'location',
 
327
  )
328
  );
329
 
330
  public function get_location( $ip, $args = array() ) {
331
  $res = parent::get_location( $ip, $args );
332
- if ( isset( $res['countryName'] ) && is_array( $res['countryName'] ) ) {
333
- $res['countryCode'] = esc_html( $res['countryCode']['code'] );
334
- $res['countryName'] = esc_html( $res['countryName']['name'] );
335
- $res['latitude' ] = esc_html( $res['latitude' ]['latitude' ] );
336
- $res['longitude' ] = esc_html( $res['longitude' ]['longitude'] );
337
  return $res;
338
  } else {
339
- return array( 'errorMessage' => 'Not Found' ); // 404
340
  }
341
  }
342
  }
343
 
344
  /**
345
- * Class for GeoIPLookup.net
346
  *
347
- * URL : http://geoiplookup.net/
348
- * Term of use : http://geoiplookup.net/terms-of-use.php
349
  * Licence fee : free
350
- * Rate limit : none
351
- * Sample URL : http://api.geoiplookup.net/?query=2a00:1210:fffe:200::1
352
  * Input type : IP address (IPv4, IPv6)
353
- * Output type : xml
354
  */
355
- class IP_Geo_Block_API_GeoIPLookup extends IP_Geo_Block_API {
356
  protected $template = array(
357
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
358
- 'url' => 'http://api.geoiplookup.net/?query=%API_IP%',
359
- 'api' => array(),
 
 
360
  'transform' => array(
361
- 'countryCode' => 'countrycode',
362
- 'countryName' => 'countryname',
363
- 'regionName' => 'countryname',
364
  'cityName' => 'city',
365
  'latitude' => 'latitude',
366
  'longitude' => 'longitude',
@@ -369,32 +371,30 @@ class IP_Geo_Block_API_GeoIPLookup extends IP_Geo_Block_API {
369
  }
370
 
371
  /**
372
- * Class for ip-api.com
373
  *
374
- * URL : http://ip-api.com/
375
- * Term of use : http://ip-api.com/docs/#usage_limits
376
- * Licence fee : free for non-commercial use
377
- * Rate limit : 240 requests per minute
378
- * Sample URL : http://ip-api.com/json/2a00:1210:fffe:200::1
379
- * Sample URL : http://ip-api.com/xml/yahoo.co.jp
380
- * Input type : IP address (IPv4, IPv6 with limited coverage) / domain name
381
  * Output type : json, xml
382
  */
383
- class IP_Geo_Block_API_ipapicom extends IP_Geo_Block_API {
384
  protected $template = array(
385
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
386
- 'url' => 'http://ip-api.com/%API_FORMAT%/%API_IP%',
387
  'api' => array(
388
  '%API_FORMAT%' => 'json',
389
  ),
390
  'transform' => array(
391
- 'errorMessage' => 'error',
392
- 'countryCode' => 'countryCode',
393
- 'countryName' => 'country',
394
- 'regionName' => 'regionName',
395
- 'cityName' => 'city',
396
- 'latitude' => 'lat',
397
- 'longitude' => 'lon',
398
  )
399
  );
400
  }
@@ -450,13 +450,13 @@ class IP_Geo_Block_API_Cache extends IP_Geo_Block_API {
450
  // memory cache
451
  protected static $memcache = array();
452
 
453
- public static function update_cache( $hook, $validate, $settings ) {
454
  $time = $_SERVER['REQUEST_TIME'];
455
  $cache = self::get_cache( $ip = $validate['ip'], $settings['cache_hold'] );
456
 
457
  if ( $cache ) {
458
- $fail = $cache['fail'] + ( 'failed' === $validate['result'] ? 1 : 0 );
459
- $call = $cache['reqs'] + ( 'failed' !== $validate['result'] ? 1 : 0 );
460
  $last = $cache['last'];
461
  $view = $cache['view'];
462
  } else { // if new cache then reset these values
@@ -526,34 +526,34 @@ class IP_Geo_Block_API_Cache extends IP_Geo_Block_API {
526
  class IP_Geo_Block_Provider {
527
 
528
  protected static $providers = array(
529
- 'ipinfo.io' => array(
530
- 'key' => NULL,
531
- 'type' => 'IPv4, IPv6 / free',
532
- 'link' => '<a rel="noreferrer" href="https://ipinfo.io/" title="IP Address API and Data Solutions">https://ipinfo.io/</a>&nbsp;(IPv4, IPv6 / free up to 1000 requests daily)',
533
  ),
534
 
535
- 'Nekudo' => array(
536
  'key' => NULL,
537
  'type' => 'IPv4, IPv6 / free',
538
- 'link' => '<a rel="noreferrer" href="https://geoip.nekudo.com/" title="geoip.nekudo.com | Free IP to geolocation API">https://geoip.nekudo.com/</a>&nbsp;(IPv4, IPv6 / free)',
539
  ),
540
 
541
- 'GeoIPLookup' => array(
542
  'key' => NULL,
543
  'type' => 'IPv4, IPv6 / free',
544
- 'link' => '<a rel="noreferrer" href="http://geoiplookup.net/" title="What Is My IP Address | GeoIP Lookup">GeoIPLookup.net</a>&nbsp;(IPv4, IPv6 / free)',
545
  ),
546
 
547
- 'ip-api.com' => array(
548
- 'key' => FALSE,
549
- 'type' => 'IPv4, IPv6 / free for non-commercial use',
550
- 'link' => '<a rel="noreferrer" href="http://ip-api.com/" title="IP-API.com - Free Geolocation API">http://ip-api.com/</a>&nbsp;(IPv4, IPv6 / free for non-commercial use)',
551
  ),
552
 
553
  'Ipdata.co' => array(
554
  'key' => '',
555
  'type' => 'IPv4, IPv6 / free',
556
- 'link' => '<a rel="noreferrer" href="https://ipdata.co/" title="ipdata.co - IP Geolocation and Threat Data API">https://ipdata.co/</a>&nbsp;(IPv4, IPv6 / free up to 1500 requests daily for registered user)',
557
  ),
558
 
559
  'ipstack' => array(
@@ -628,14 +628,16 @@ class IP_Geo_Block_Provider {
628
  * Returns providers name list which are checked in settings
629
  *
630
  */
631
- public static function get_valid_providers( $settings, $rand = TRUE, $cache = TRUE, $all = TRUE ) {
632
  $list = array();
633
- $providers = $settings['providers' ];
634
  $cache &= $settings['cache_hold']; // exclude `Cache` when `IP address cache` is disabled
635
 
636
- foreach ( self::get_providers( 'key', $rand, $cache, empty( $settings['restrict_api'] ) && $all ) as $key => $val ) {
637
- if ( ! empty( $providers[ $key ] ) || ( ! isset( $providers[ $key ] ) && NULL === $val ) )
638
- $list[] = $key;
 
 
639
  }
640
 
641
  return $list;
@@ -659,7 +661,7 @@ if ( class_exists( 'IP_Geo_Block', FALSE ) ) {
659
  );
660
 
661
  // Scan API directory
662
- $plugins = is_dir( $dir ) ? scandir( $dir, defined( 'SCANDIR_SORT_DESCENDING' ) ? SCANDIR_SORT_DESCENDING : 1 ) : FALSE;
663
 
664
  // Load addons by heigher priority order
665
  if ( FALSE !== $plugins ) {
103
  }
104
 
105
  switch ( $tmp ) {
 
106
  // decode json
107
  case 'json':
108
  case 'html': // ipinfo.io, Xhanch
197
  }
198
 
199
  /**
200
+ * Class for IP-API.com
201
  *
202
+ * URL : http://ip-api.com/
203
+ * Term of use : http://ip-api.com/docs/#usage_limits
204
+ * Licence fee : free for non-commercial use
205
+ * Rate limit : 240 requests per minute
206
+ * Sample URL : http://ip-api.com/json/2a00:1210:fffe:200::1
207
+ * Sample URL : http://ip-api.com/xml/yahoo.co.jp
208
+ * Input type : IP address (IPv4, IPv6 with limited coverage) / domain name
209
+ * Output type : json, xml
210
  */
211
+ class IP_Geo_Block_API_IPAPIcom extends IP_Geo_Block_API {
212
  protected $template = array(
213
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
214
+ 'url' => 'http://ip-api.com/%API_FORMAT%/%API_IP%',
215
  'api' => array(
216
  '%API_FORMAT%' => 'json',
217
  ),
218
  'transform' => array(
219
+ 'errorMessage' => 'error',
220
+ 'countryCode' => 'countryCode',
221
+ 'countryName' => 'country',
222
+ 'regionName' => 'regionName',
223
+ 'cityName' => 'city',
224
+ 'latitude' => 'lat',
225
+ 'longitude' => 'lon',
226
  )
227
  );
228
  }
229
 
230
  /**
231
+ * Class for GeoIPLookup.net
232
  *
233
+ * URL : http://geoiplookup.net/
234
+ * Term of use : http://geoiplookup.net/terms-of-use.php
235
+ * Licence fee : free
236
+ * Rate limit : none
237
+ * Sample URL : http://api.geoiplookup.net/?query=2a00:1210:fffe:200::1
238
+ * Input type : IP address (IPv4, IPv6)
239
+ * Output type : xml
240
  */
241
+ class IP_Geo_Block_API_GeoIPLookup extends IP_Geo_Block_API {
242
  protected $template = array(
243
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
244
+ 'url' => 'http://api.geoiplookup.net/?query=%API_IP%',
245
+ 'api' => array(),
 
 
246
  'transform' => array(
247
+ 'countryCode' => 'countrycode',
248
+ 'countryName' => 'countryname',
249
+ 'regionName' => 'countryname',
250
  'cityName' => 'city',
251
  'latitude' => 'latitude',
252
  'longitude' => 'longitude',
260
  * URL : https://ipinfo.io/
261
  * Term of use : https://ipinfo.io/developers#terms
262
  * Licence fee : free
263
+ * Rate limit : 1,000 lookups daily
264
  * Sample URL : https://ipinfo.io/124.83.187.140/json
265
  * Sample URL : https://ipinfo.io/124.83.187.140/country
266
  * Input type : IP address (IPv4)
302
  }
303
 
304
  /**
305
+ * Class for ipapi
306
  *
307
+ * URL : https://ipapi.com/
308
+ * Term of use : https://ipapi.com/terms
309
  * Licence fee : free to use the API
310
+ * Rate limit : 10,000 reqests per month
311
+ * Sample URL : http://api.ipapi.com/2a00:1210:fffe:200::1?access_key=...
312
  * Input type : IP address (IPv4, IPv6)
313
  * Output type : json
314
  */
315
+ class IP_Geo_Block_API_ipapi extends IP_Geo_Block_API {
316
  protected $template = array(
317
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
318
+ 'url' => 'http://api.ipapi.com/%API_IP%?access_key=%API_KEY%',
319
  'api' => array(),
320
  'transform' => array(
321
+ 'countryCode' => 'country_code',
322
+ 'countryName' => 'country_name',
323
  'cityName' => 'city',
324
+ 'latitude' => 'latitude',
325
+ 'longitude' => 'longitude',
326
+ 'error' => 'error',
327
  )
328
  );
329
 
330
  public function get_location( $ip, $args = array() ) {
331
  $res = parent::get_location( $ip, $args );
332
+ if ( isset( $res['countryName'] ) ) {
333
+ $res['countryCode'] = esc_html( $res['countryCode'] );
334
+ $res['countryName'] = esc_html( $res['countryName'] );
335
+ $res['latitude' ] = esc_html( $res['latitude' ] );
336
+ $res['longitude' ] = esc_html( $res['longitude' ] );
337
  return $res;
338
  } else {
339
+ return array( 'errorMessage' => esc_html( $res['error']['info'] ) );
340
  }
341
  }
342
  }
343
 
344
  /**
345
+ * Class for Ipdata.co
346
  *
347
+ * URL : https://ipdata.co/
348
+ * Term of use : https://ipdata.co/terms.html
349
  * Licence fee : free
350
+ * Rate limit : 1,500 lookups free daily
351
+ * Sample URL : https://api.ipdata.co/8.8.8.8?api-key=...
352
  * Input type : IP address (IPv4, IPv6)
353
+ * Output type : json
354
  */
355
+ class IP_Geo_Block_API_Ipdataco extends IP_Geo_Block_API {
356
  protected $template = array(
357
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
358
+ 'url' => 'https://api.ipdata.co/%API_IP%?api-key=%API_KEY%',
359
+ 'api' => array(
360
+ '%API_FORMAT%' => 'json',
361
+ ),
362
  'transform' => array(
363
+ 'countryCode' => 'country_code',
364
+ 'countryName' => 'country_name',
365
+ 'regionName' => 'region',
366
  'cityName' => 'city',
367
  'latitude' => 'latitude',
368
  'longitude' => 'longitude',
371
  }
372
 
373
  /**
374
+ * Class for ipstack
375
  *
376
+ * URL : https://ipstack.com/
377
+ * Term of use : https://ipstack.com/terms
378
+ * Licence fee : free for registered user
379
+ * Rate limit : 10,000 queries per month for free (https can be available for premium users)
380
+ * Sample URL : http://api.ipstack.com/186.116.207.169?access_key=YOUR_ACCESS_KEY&output=json&legacy=1
381
+ * Input type : IP address (IPv4, IPv6) / domain name
 
382
  * Output type : json, xml
383
  */
384
+ class IP_Geo_Block_API_ipstack extends IP_Geo_Block_API {
385
  protected $template = array(
386
  'type' => IP_GEO_BLOCK_API_TYPE_BOTH,
387
+ 'url' => 'http://api.ipstack.com/%API_IP%?access_key=%API_KEY%&output=%API_FORMAT%',
388
  'api' => array(
389
  '%API_FORMAT%' => 'json',
390
  ),
391
  'transform' => array(
392
+ 'countryCode' => 'country_code',
393
+ 'countryName' => 'country_name',
394
+ 'regionName' => 'region_name',
395
+ 'cityName' => 'city',
396
+ 'latitude' => 'latitude',
397
+ 'longitude' => 'longitude',
 
398
  )
399
  );
400
  }
450
  // memory cache
451
  protected static $memcache = array();
452
 
453
+ public static function update_cache( $hook, $validate, $settings, $countup = TRUE ) {
454
  $time = $_SERVER['REQUEST_TIME'];
455
  $cache = self::get_cache( $ip = $validate['ip'], $settings['cache_hold'] );
456
 
457
  if ( $cache ) {
458
+ $fail = isset( $validate['fail'] ) ? $validate['fail'] : 0;
459
+ $call = $cache['reqs'] + ( $countup ? 1 : 0 ); // prevent duplicate count up
460
  $last = $cache['last'];
461
  $view = $cache['view'];
462
  } else { // if new cache then reset these values
526
  class IP_Geo_Block_Provider {
527
 
528
  protected static $providers = array(
529
+ 'IP-API.com' => array(
530
+ 'key' => FALSE,
531
+ 'type' => 'IPv4, IPv6 / free for non-commercial use',
532
+ 'link' => '<a rel="noreferrer" href="http://ip-api.com/" title="IP-API.com - Free Geolocation API">http://ip-api.com/</a>&nbsp;(IPv4, IPv6 / free for non-commercial use)',
533
  ),
534
 
535
+ 'GeoIPLookup' => array(
536
  'key' => NULL,
537
  'type' => 'IPv4, IPv6 / free',
538
+ 'link' => '<a rel="noreferrer" href="http://geoiplookup.net/" title="What Is My IP Address | GeoIP Lookup">GeoIPLookup.net</a>&nbsp;(IPv4, IPv6 / free)',
539
  ),
540
 
541
+ 'ipinfo.io' => array(
542
  'key' => NULL,
543
  'type' => 'IPv4, IPv6 / free',
544
+ 'link' => '<a rel="noreferrer" href="https://ipinfo.io/" title="IP Address API and Data Solutions">https://ipinfo.io/</a>&nbsp;(IPv4, IPv6 / free up to 1,000 lookups daily)',
545
  ),
546
 
547
+ 'ipapi' => array(
548
+ 'key' => '',
549
+ 'type' => 'IPv4, IPv6 / free',
550
+ 'link' => '<a rel="noreferrer" href="https://ipapi.com/" title="ipapi - IP Address Lookup and Geolocation API">https://ipapi.com/</a>&nbsp;(IPv4, IPv6 / free up to 10,000 lookups monthly for registered user)',
551
  ),
552
 
553
  'Ipdata.co' => array(
554
  'key' => '',
555
  'type' => 'IPv4, IPv6 / free',
556
+ 'link' => '<a rel="noreferrer" href="https://ipdata.co/" title="ipdata.co - IP Geolocation and Threat Data API">https://ipdata.co/</a>&nbsp;(IPv4, IPv6 / free up to 1,500 lookups daily for registered user)',
557
  ),
558
 
559
  'ipstack' => array(
628
  * Returns providers name list which are checked in settings
629
  *
630
  */
631
+ public static function get_valid_providers( $settings, $rand = TRUE, $cache = TRUE, $all = FALSE ) {
632
  $list = array();
633
+ $providers = $settings['providers' ]; // list of not selected and selected with api key
634
  $cache &= $settings['cache_hold']; // exclude `Cache` when `IP address cache` is disabled
635
 
636
+ foreach ( self::get_providers( 'key', $rand, $cache, empty( $settings['restrict_api'] ) || $all ) as $name => $key ) {
637
+ // ( if $name has api key ) || ( if $name that does not need api key is selected )
638
+ if ( ! empty( $providers[ $name ] ) || ( ! isset( $providers[ $name ] ) && NULL === $key ) ) {
639
+ $list[] = $name;
640
+ }
641
  }
642
 
643
  return $list;
661
  );
662
 
663
  // Scan API directory
664
+ $plugins = ( is_dir( $dir ) ? scandir( $dir, defined( 'SCANDIR_SORT_DESCENDING' ) ? SCANDIR_SORT_DESCENDING : 1 ) : FALSE );
665
 
666
  // Load addons by heigher priority order
667
  if ( FALSE !== $plugins ) {
classes/class-ip-geo-block-cron.php CHANGED
@@ -171,6 +171,16 @@ class IP_Geo_Block_Cron {
171
 
172
  public static function stop_update_db() {
173
  wp_clear_scheduled_hook( IP_Geo_Block::CRON_NAME, array( FALSE ) ); // @since 2.1.0
 
 
 
 
 
 
 
 
 
 
174
  }
175
 
176
  /**
@@ -258,7 +268,7 @@ class IP_Geo_Block_Cron {
258
  */
259
  public static function download_zip( $url, $args, $files, $modified ) {
260
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
261
- $fs = IP_Geo_Block_FS::init( 'download_zip' );
262
 
263
  // get extension
264
  $ext = strtolower( pathinfo( $url, PATHINFO_EXTENSION ) );
171
 
172
  public static function stop_update_db() {
173
  wp_clear_scheduled_hook( IP_Geo_Block::CRON_NAME, array( FALSE ) ); // @since 2.1.0
174
+
175
+ // wait until updating has finished to avoid race condition with IP_Geo_Block_Opts::install_api()
176
+ $time = 0;
177
+ while ( ( $stat = get_transient( IP_Geo_Block::CRON_NAME ) ) && 'done' !== $stat ) {
178
+ sleep( 1 );
179
+
180
+ if ( ++$time > 5 * MINUTE_IN_SECONDS ) {
181
+ break;
182
+ }
183
+ }
184
  }
185
 
186
  /**
268
  */
269
  public static function download_zip( $url, $args, $files, $modified ) {
270
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
271
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
272
 
273
  // get extension
274
  $ext = strtolower( pathinfo( $url, PATHINFO_EXTENSION ) );
classes/class-ip-geo-block-file.php CHANGED
@@ -297,4 +297,34 @@ if (0) {
297
  return unzip_file( $src, $this->absolute_path( $dst ) );
298
  }
299
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  }
297
  return unzip_file( $src, $this->absolute_path( $dst ) );
298
  }
299
 
300
+ /**
301
+ * Get details for files in a directory or a specific file.
302
+ *
303
+ * @since 2.5.0
304
+ *
305
+ * @param string $path
306
+ * @param bool $include_hidden
307
+ * @param bool $recursive
308
+ * @return array|bool {
309
+ * Array of files. False if unable to list directory contents.
310
+ * @type string 'name' Name of the file/directory.
311
+ * @type string 'perms' *nix representation of permissions.
312
+ * @type int 'permsn' Octal representation of permissions.
313
+ * @type string 'owner' Owner name or ID.
314
+ * @type int 'size' Size of file in bytes.
315
+ * @type int 'lastmodunix' Last modified unix timestamp.
316
+ * @type mixed 'lastmod' Last modified month (3 letter) and day (without leading 0).
317
+ * @type int 'time' Last modified time.
318
+ * @type string 'type' Type of resource. 'f' for file, 'd' for directory.
319
+ * @type mixed 'files' If a directory and $recursive is true, contains another array of files.
320
+ * }
321
+ */
322
+ public function dirlist( $path, $include_hidden = FALSE, $recursive = FALSE ) {
323
+ global $wp_filesystem;
324
+ if ( empty( $wp_filesystem ) )
325
+ return FALSE;
326
+
327
+ return $wp_filesystem->dirlist( $path, $include_hidden, $recursive );
328
+ }
329
+
330
  }
classes/class-ip-geo-block-logs.php CHANGED
@@ -442,7 +442,7 @@ class IP_Geo_Block_Logs {
442
 
443
  private static function get_post_data( $hook, $validate, $settings ) {
444
  // condition of masking password
445
- $mask_pwd = IP_Geo_Block::is_passed( $validate['result'] );
446
 
447
  // XML-RPC
448
  if ( 'xmlrpc' === $hook ) {
@@ -581,10 +581,10 @@ class IP_Geo_Block_Logs {
581
 
582
  public static function reset_sqlite_db() {
583
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
584
- $fs = IP_Geo_Block_FS::init( 'reset_sqlite_db' );
585
 
586
- if ( FALSE !== ( $files = scandir( $dir = get_temp_dir(), 1 ) ) ) {
587
- foreach ( $files as $file ) {
588
  if ( FALSE !== strpos( $file, IP_Geo_Block::PLUGIN_NAME ) ) {
589
  $fs->delete( $dir . $file );
590
  }
@@ -624,8 +624,8 @@ class IP_Geo_Block_Logs {
624
  $posts = self::get_post_data( $hook, $validate, $settings );
625
  $method = $_SERVER['REQUEST_METHOD'] . '[' . $_SERVER['SERVER_PORT'] . ']:' . $_SERVER['REQUEST_URI'];
626
 
627
- // mark if malicious upload exists
628
- if ( isset( $validate['upload'] ) )
629
  $validate['result'] .= '^';
630
 
631
  // anonymize ip address
442
 
443
  private static function get_post_data( $hook, $validate, $settings ) {
444
  // condition of masking password
445
+ $mask_pwd = ( IP_Geo_Block::is_passed( $validate['result'] ) || IP_Geo_Block::is_failed( $validate['result'] ) );
446
 
447
  // XML-RPC
448
  if ( 'xmlrpc' === $hook ) {
581
 
582
  public static function reset_sqlite_db() {
583
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
584
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
585
 
586
+ if ( FALSE !== ( $files = $fs->dirlist( $dir = get_temp_dir() ) ) ) {
587
+ foreach ( array_keys( $files ) as $file ) {
588
  if ( FALSE !== strpos( $file, IP_Geo_Block::PLUGIN_NAME ) ) {
589
  $fs->delete( $dir . $file );
590
  }
624
  $posts = self::get_post_data( $hook, $validate, $settings );
625
  $method = $_SERVER['REQUEST_METHOD'] . '[' . $_SERVER['SERVER_PORT'] . ']:' . $_SERVER['REQUEST_URI'];
626
 
627
+ // mark if any uploaded files exist
628
+ if ( ! empty( $_FILES ) )
629
  $validate['result'] .= '^';
630
 
631
  // anonymize ip address
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.16',// 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
@@ -73,8 +73,8 @@ class IP_Geo_Block_Opts {
73
  'retry' => 0, // Number of retry to download
74
  'cycle' => 30, // Updating cycle (days)
75
  ),
76
- // since version 3.0.9
77
- 'priority' => PHP_INT_MAX, // Action priority for WP-ZEP
78
  // since version 2.2.0
79
  'anonymize' => TRUE, // Anonymize IP address to hide privacy
80
  'signature' => '../,/wp-config.php,/passwd', // malicious signature
@@ -195,6 +195,14 @@ class IP_Geo_Block_Opts {
195
  'link' => NULL, // key of login link
196
  'hash' => NULL, // hash of 'link'
197
  ),
 
 
 
 
 
 
 
 
198
  );
199
 
200
  /**
@@ -386,16 +394,11 @@ class IP_Geo_Block_Opts {
386
  $settings['live_update'] = $default['live_update'];
387
 
388
  if ( version_compare( $version, '3.0.8' ) < 0 ) {
389
- $settings['timeout' ] = $default['timeout'];
 
390
  $settings['Geolite2']['use_asn'] = $settings['Maxmind']['use_asn'];
391
- foreach ( array( 'ip_path', 'ip_last', 'asn_path', 'asn_last' ) as $tmp ) {
392
- $settings['Geolite2'][ $tmp ] = $default['Geolite2'][ $tmp ];
393
- }
394
  }
395
 
396
- if ( version_compare( $version, '3.0.9' ) < 0 )
397
- $settings['priority'] = $default['priority'];
398
-
399
  if ( version_compare( $version, '3.0.10' ) < 0 ) {
400
  $settings['behavior'] = $default['behavior'];
401
  $settings['public' ]['behavior'] = $default['public']['behavior'];
@@ -422,20 +425,28 @@ class IP_Geo_Block_Opts {
422
  IP_Geo_Block_Logs::upgrade( $version );
423
 
424
  if ( version_compare( $version, '3.0.16' ) < 0 ) {
425
- if ( isset( $settings['public']['simulate'] ) ) {
426
- $settings['simulate'] = $settings['public']['simulate'];
427
- unset( $settings['public']['simulate'] );
428
- } else {
429
- $settings['simulate'] = $default['simulate'];
 
 
 
 
 
 
 
 
430
  }
431
  }
432
 
433
  // update package version number
434
  $settings['version'] = IP_Geo_Block::VERSION;
435
 
436
- // install addons for IP Geolocation database API ver. 1.1.13
437
  $providers = IP_Geo_Block_Provider::get_addons();
438
- if ( empty( $providers ) || ! $settings['api_dir'] || ! file_exists( $settings['api_dir'] ) || version_compare( $version, '3.0.14' ) < 0 )
439
  $settings['api_dir'] = self::install_api( $settings );
440
 
441
  $settings['request_ua'] = trim( str_replace( array( 'InfiniteWP' ), '', @$_SERVER['HTTP_USER_AGENT'] ) );
@@ -452,8 +463,10 @@ class IP_Geo_Block_Opts {
452
  *
453
  */
454
  private static function install_api( $settings ) {
 
 
455
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
456
- $fs = IP_Geo_Block_FS::init( 'install_api' );
457
 
458
  $src = IP_Geo_Block_Util::slashit( IP_GEO_BLOCK_PATH . 'wp-content/' . IP_Geo_Block::GEOAPI_NAME );
459
  $dst = IP_Geo_Block_Util::slashit( self::get_api_dir( $settings ) );
@@ -469,32 +482,36 @@ class IP_Geo_Block_Opts {
469
  sprintf( __( 'Unable to write <code>%s</code>. Please check the permission.', 'ip-geo-block' ), '<code>' . $dst . '</code>' )
470
  );
471
  }
472
- return NULL;
473
  }
474
  }
475
 
 
 
476
  return $dst;
477
  }
478
 
479
  public static function uninstall_api( $settings ) {
480
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
481
- $fs = IP_Geo_Block_FS::init( 'uninstall_api' );
482
 
483
  return $fs->delete( self::get_api_dir( $settings ), TRUE ); // $recursive = true
484
  }
485
 
486
  private static function get_api_dir( $settings ) {
 
 
 
487
  // wp-content
488
- $dir = ( empty( $settings['api_dir'] ) || ! file_exists( $settings['api_dir'] ) ) ? WP_CONTENT_DIR : dirname( $settings['api_dir'] );
489
 
490
- if ( ! @is_writable( $dir ) ) {
491
  // wp-content/uploads
492
  $dir = wp_upload_dir();
493
  $dir = $dir['basedir'];
494
 
495
- if ( ! @is_writable( $dir ) ) { // wp-content/plugins/ip-geo-block
496
- $dir = @is_writable( IP_GEO_BLOCK_PATH ) ? IP_GEO_BLOCK_PATH : NULL;
497
- }
498
  }
499
 
500
  return IP_Geo_Block_Util::slashit(
@@ -506,21 +523,24 @@ class IP_Geo_Block_Opts {
506
  * Activate / Deactivate Must-use plugin / Advanced cache
507
  *
508
  */
509
- private static function remove_mu_plugin() {
510
- if ( file_exists( $src = WPMU_PLUGIN_DIR . '/ip-geo-block-mu.php' ) ) {
511
- require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
512
- $fs = IP_Geo_Block_FS::init( 'remove_mu_plugin' );
 
513
  return $fs->delete( $src ) ? TRUE : $src;
514
- }
515
 
516
  return TRUE;
517
  }
518
 
519
- public static function get_validation_timing() {
520
- return file_exists( WPMU_PLUGIN_DIR . '/ip-geo-block-mu.php' ) ? 1 : 0;
 
 
 
521
  }
522
 
523
- public static function setup_validation_timing( $settings = NULL ) {
524
  switch ( $settings ? (int)$settings['validation']['timing'] : 0 ) {
525
  case 0: // init
526
  if ( TRUE !== ( $src = self::remove_mu_plugin() ) )
@@ -529,10 +549,10 @@ class IP_Geo_Block_Opts {
529
 
530
  case 1: // mu-plugins
531
  $src = IP_GEO_BLOCK_PATH . 'wp-content/mu-plugins/ip-geo-block-mu.php';
532
- $dst = WPMU_PLUGIN_DIR . '/ip-geo-block-mu.php';
533
 
534
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
535
- $fs = IP_Geo_Block_FS::init( 'setup_validation_timing' );
536
 
537
  if ( ! $fs->is_file( $dst ) ) {
538
  if ( ! $fs->is_dir( WPMU_PLUGIN_DIR ) && ! $fs->mkdir( WPMU_PLUGIN_DIR ) )
16
  *
17
  */
18
  private static $option_table = array(
19
+ 'version' => '3.0.17',// 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
73
  'retry' => 0, // Number of retry to download
74
  'cycle' => 30, // Updating cycle (days)
75
  ),
76
+ // since version 3.0.9, 3.0.17
77
+ 'priority' => array( 0, PHP_INT_MAX ), // 0:high, 1:log for WP-ZEP
78
  // since version 2.2.0
79
  'anonymize' => TRUE, // Anonymize IP address to hide privacy
80
  'signature' => '../,/wp-config.php,/passwd', // malicious signature
195
  'link' => NULL, // key of login link
196
  'hash' => NULL, // hash of 'link'
197
  ),
198
+ // since version 3.0.17
199
+ 'monitor' => array(
200
+ 'metadata' => TRUE,
201
+ ),
202
+ 'metadata' => array(
203
+ 'pre_update_option' => array( 'siteurl', 'admin_email', 'users_can_register', 'default_role' ),
204
+ 'pre_update_site_option' => array( 'siteurl', 'admin_email', 'registration' ),
205
+ ),
206
  );
207
 
208
  /**
394
  $settings['live_update'] = $default['live_update'];
395
 
396
  if ( version_compare( $version, '3.0.8' ) < 0 ) {
397
+ $settings['timeout' ] = $default['timeout' ];
398
+ $settings['Geolite2'] = $default['Geolite2'];
399
  $settings['Geolite2']['use_asn'] = $settings['Maxmind']['use_asn'];
 
 
 
400
  }
401
 
 
 
 
402
  if ( version_compare( $version, '3.0.10' ) < 0 ) {
403
  $settings['behavior'] = $default['behavior'];
404
  $settings['public' ]['behavior'] = $default['public']['behavior'];
425
  IP_Geo_Block_Logs::upgrade( $version );
426
 
427
  if ( version_compare( $version, '3.0.16' ) < 0 ) {
428
+ $settings['simulate'] = $settings['public']['simulate'];
429
+ unset( $settings['public']['simulate'] );
430
+ }
431
+
432
+ if ( version_compare( $version, '3.0.17' ) < 0 ) {
433
+ $settings['priority'] = $default['priority'];
434
+ $settings['monitor' ] = $default['monitor' ];
435
+ $settings['metadata'] = $default['metadata'];
436
+
437
+ // re-install mu-plugins to re-order the priority
438
+ if ( self::get_validation_timing( NULL ) ) {
439
+ self::remove_mu_plugin( NULL );
440
+ self::setup_validation_timing( $settings );
441
  }
442
  }
443
 
444
  // update package version number
445
  $settings['version'] = IP_Geo_Block::VERSION;
446
 
447
+ // install addons for IP Geolocation database API ver. 1.1.14 at IP Geo Block 3.0.17
448
  $providers = IP_Geo_Block_Provider::get_addons();
449
+ if ( empty( $providers ) || ! $settings['api_dir'] || ! file_exists( $settings['api_dir'] ) || version_compare( $version, '3.0.17' ) < 0 )
450
  $settings['api_dir'] = self::install_api( $settings );
451
 
452
  $settings['request_ua'] = trim( str_replace( array( 'InfiniteWP' ), '', @$_SERVER['HTTP_USER_AGENT'] ) );
463
  *
464
  */
465
  private static function install_api( $settings ) {
466
+ IP_Geo_Block_Cron::stop_update_db();
467
+
468
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
469
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
470
 
471
  $src = IP_Geo_Block_Util::slashit( IP_GEO_BLOCK_PATH . 'wp-content/' . IP_Geo_Block::GEOAPI_NAME );
472
  $dst = IP_Geo_Block_Util::slashit( self::get_api_dir( $settings ) );
482
  sprintf( __( 'Unable to write <code>%s</code>. Please check the permission.', 'ip-geo-block' ), '<code>' . $dst . '</code>' )
483
  );
484
  }
485
+ $dst = NULL;
486
  }
487
  }
488
 
489
+ IP_Geo_Block_Cron::start_update_db( $settings );
490
+
491
  return $dst;
492
  }
493
 
494
  public static function uninstall_api( $settings ) {
495
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
496
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
497
 
498
  return $fs->delete( self::get_api_dir( $settings ), TRUE ); // $recursive = true
499
  }
500
 
501
  private static function get_api_dir( $settings ) {
502
+ require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
503
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
504
+
505
  // wp-content
506
+ $dir = ( empty( $settings['api_dir'] ) || ! $fs->exists( $settings['api_dir'] ) ) ? WP_CONTENT_DIR : dirname( $settings['api_dir'] );
507
 
508
+ if ( ! $fs->is_writable( $dir ) ) {
509
  // wp-content/uploads
510
  $dir = wp_upload_dir();
511
  $dir = $dir['basedir'];
512
 
513
+ if ( ! $fs->is_writable( $dir ) ) // wp-content/plugins/ip-geo-block
514
+ $dir = $fs->is_writable( IP_GEO_BLOCK_PATH ) ? IP_GEO_BLOCK_PATH : NULL;
 
515
  }
516
 
517
  return IP_Geo_Block_Util::slashit(
523
  * Activate / Deactivate Must-use plugin / Advanced cache
524
  *
525
  */
526
+ private static function remove_mu_plugin( $prefix = '!' ) {
527
+ require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
528
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
529
+
530
+ if ( $fs->exists( $src = WPMU_PLUGIN_DIR . '/' . $prefix . 'ip-geo-block-mu.php' ) )
531
  return $fs->delete( $src ) ? TRUE : $src;
 
532
 
533
  return TRUE;
534
  }
535
 
536
+ public static function get_validation_timing( $prefix = '!' ) {
537
+ require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
538
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
539
+
540
+ return $fs->exists( WPMU_PLUGIN_DIR . '/' . $prefix . 'ip-geo-block-mu.php' ) ? 1 : 0;
541
  }
542
 
543
+ public static function setup_validation_timing( $settings = NULL, $prefix = '!' ) {
544
  switch ( $settings ? (int)$settings['validation']['timing'] : 0 ) {
545
  case 0: // init
546
  if ( TRUE !== ( $src = self::remove_mu_plugin() ) )
549
 
550
  case 1: // mu-plugins
551
  $src = IP_GEO_BLOCK_PATH . 'wp-content/mu-plugins/ip-geo-block-mu.php';
552
+ $dst = WPMU_PLUGIN_DIR . '/' . $prefix . 'ip-geo-block-mu.php';
553
 
554
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
555
+ $fs = IP_Geo_Block_FS::init( __FUNCTION__ );
556
 
557
  if ( ! $fs->is_file( $dst ) ) {
558
  if ( ! $fs->is_dir( WPMU_PLUGIN_DIR ) && ! $fs->mkdir( WPMU_PLUGIN_DIR ) )
classes/class-ip-geo-block-util.php CHANGED
@@ -72,8 +72,10 @@ class IP_Geo_Block_Util {
72
  * @see wp-includes/kses.php
73
  */
74
  public static function kses( $str, $allow_tags = TRUE ) {
 
 
75
  // wp_kses() is unavailable on advanced-cache.php
76
- return wp_kses( $str, $allow_tags ? $GLOBALS['allowedtags'] : array() );
77
  }
78
 
79
  /**
72
  * @see wp-includes/kses.php
73
  */
74
  public static function kses( $str, $allow_tags = TRUE ) {
75
+ is_array( $allow_tags ) or $allow_tags = ( $allow_tags ? $GLOBALS['allowedtags'] : array() );
76
+
77
  // wp_kses() is unavailable on advanced-cache.php
78
+ return wp_kses( $str, $allow_tags );
79
  }
80
 
81
  /**
classes/class-ip-geo-block.php CHANGED
@@ -15,10 +15,11 @@ class IP_Geo_Block {
15
  * Unique identifier for this plugin.
16
  *
17
  */
18
- const VERSION = '3.0.16';
19
  const GEOAPI_NAME = 'ip-geo-api';
20
  const PLUGIN_NAME = 'ip-geo-block';
21
  const OPTION_NAME = 'ip_geo_block_settings';
 
22
  const CACHE_NAME = 'ip_geo_block_cache';
23
  const CRON_NAME = 'ip_geo_block_cron';
24
 
@@ -61,8 +62,8 @@ class IP_Geo_Block {
61
  file_exists( $key = IP_Geo_Block_Util::unslashit( $settings['api_dir'] ) . '/drop-in.php' ) and include( $key );
62
 
63
  // global settings after `drop-in.php`
64
- self::$live_log = get_transient( self::PLUGIN_NAME . '-live-log' );
65
  self::$auth_key = apply_filters( self::PLUGIN_NAME . '-auth-key', self::PLUGIN_NAME . '-auth-nonce' );
 
66
 
67
  // normalize requested uri and page
68
  $key = preg_replace( array( '!\.+/!', '!//+!' ), '/', $_SERVER['REQUEST_URI'] );
@@ -94,30 +95,30 @@ class IP_Geo_Block {
94
  'wp-signup.php' => 'login',
95
  );
96
 
97
- // wp-admin, wp-includes, wp-content/(plugins|themes|language|uploads)
98
  if ( $this->target_type ) {
99
  if ( 'admin' !== $this->target_type )
100
- $loader->add_action( 'init', array( $this, 'validate_direct' ), $priority );
101
  else // 'widget_init' for admin dashboard
102
- $loader->add_action( 'admin_init', array( $this, 'validate_admin' ), $priority );
103
  }
104
 
105
- // analize core validation target (comment|xmlrpc|login|public)
106
  elseif ( isset( $list[ $this->pagenow ] ) ) {
107
  if ( $validate[ $list[ $this->pagenow ] ] || self::$live_log )
108
- $loader->add_action( 'init', array( $this, 'validate_' . $list[ $this->pagenow ] ), $priority );
109
  }
110
 
111
- // alternative of trackback
112
  elseif ( 'POST' === $_SERVER['REQUEST_METHOD'] && 'trackback' === basename( $this->request_uri ) ) {
113
  if ( $validate['comment'] || self::$live_log )
114
- $loader->add_action( 'init', array( $this, 'validate_comment' ), $priority );
115
  }
116
 
117
  else {
118
  // public facing pages
119
  if ( $validate['public'] || ( ! empty( $_FILES ) && $validate['mimetype'] ) || self::$live_log /* && 'index.php' === $this->pagenow */ )
120
- defined( 'DOING_CRON' ) or $loader->add_action( 'init', array( $this, 'validate_public' ), $priority );
121
 
122
  // message text on comment form
123
  if ( $settings['comment']['pos'] ) {
@@ -126,25 +127,25 @@ class IP_Geo_Block {
126
  }
127
 
128
  if ( $validate['comment'] || self::$live_log ) {
129
- add_action( 'pre_comment_on_post', array( $this, 'validate_comment' ), $priority ); // wp-comments-post.php @since 2.8.0
130
- add_action( 'pre_trackback_post', array( $this, 'validate_comment' ), $priority ); // wp-trackback.php @since 4.7.0
131
- add_filter( 'preprocess_comment', array( $this, 'validate_comment' ), $priority ); // wp-includes/comment.php @since 1.5.0
132
 
133
  // bbPress: prevent creating topic/relpy and rendering form
134
- add_action( 'bbp_post_request_bbp-new-topic', array( $this, 'validate_comment' ), $priority );
135
- add_action( 'bbp_post_request_bbp-new-reply', array( $this, 'validate_comment' ), $priority );
136
- add_filter( 'bbp_current_user_can_access_create_topic_form', array( $this, 'validate_front' ), $priority );
137
- add_filter( 'bbp_current_user_can_access_create_reply_form', array( $this, 'validate_front' ), $priority );
138
  }
139
 
140
  if ( $validate['login'] || self::$live_log ) {
141
  // for hide/rename wp-login.php, BuddyPress: prevent registration and rendering form
142
- add_action( 'login_init', array( $this, 'validate_login' ), $priority );
143
 
144
  // only when block on front-end is disabled
145
  if ( ! $validate['public'] || self::$live_log ) {
146
- add_action( 'bp_core_screen_signup', array( $this, 'validate_login' ), $priority );
147
- add_action( 'bp_signup_pre_validate', array( $this, 'validate_login' ), $priority );
148
  }
149
  }
150
 
@@ -154,12 +155,15 @@ class IP_Geo_Block {
154
 
155
  // garbage collection for IP address cache, enque script for authentication
156
  add_action( self::CACHE_NAME, array( $this, 'exec_cache_gc' ) );
157
- add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue_nonce' ), $priority ); // @since 2.8.0
158
  }
159
 
160
  // force to redirect on logout to remove nonce, embed a nonce into pages
161
- add_filter( 'wp_redirect', array( $this, 'logout_redirect' ), 20, 2 ); // logout_redirect @4.2
162
- add_filter( 'http_request_args', array( $this, 'request_nonce' ), $priority, 2 ); // @since 2.7.0
 
 
 
163
  }
164
 
165
  /**
@@ -208,6 +212,14 @@ class IP_Geo_Block {
208
  return update_option( self::OPTION_NAME, $cache ? self::$settings = $settings : $settings );
209
  }
210
 
 
 
 
 
 
 
 
 
211
  /**
212
  * Remove a nonce from the redirecting URL on logout to prevent disclosing a nonce.
213
  *
@@ -266,7 +278,7 @@ class IP_Geo_Block {
266
  }
267
 
268
  /**
269
- * Get current IP address
270
  *
271
  */
272
  public static function get_ip_address( $settings = NULL ) {
@@ -289,6 +301,7 @@ class IP_Geo_Block {
289
  *
290
  */
291
  public static function is_passed ( $result ) { return 0 === strncmp( 'pass', $result, 4 ); }
 
292
  public static function is_blocked( $result ) { return 0 !== strncmp( 'pass', $result, 4 ); }
293
  public static function is_listed ( $code, $list ) { return FALSE !== strpos( $list, (string)$code ); }
294
 
@@ -332,8 +345,8 @@ class IP_Geo_Block {
332
  *
333
  */
334
  private static function _get_geolocation( $ip, $settings, $providers, $args = array(), $callback = 'get_country' ) {
335
- // check loop back / private address
336
- if ( IP_Geo_Block_Util::is_private_ip( $ip ) )
337
  return self::make_validation( $ip, array( 'time' => 0, 'provider' => 'Private', 'code' => 'XX' ) );
338
 
339
  // set arguments for wp_remote_get()
@@ -446,7 +459,7 @@ class IP_Geo_Block {
446
  }
447
 
448
  /**
449
- * Load and show theme template
450
  *
451
  */
452
  private function show_theme_template( $code, $settings ) {
@@ -459,7 +472,7 @@ class IP_Geo_Block {
459
  if ( $action = current_filter() ) { // `plugins_loaded`, `wp` or FALSE
460
  add_action( // `wp` (on front-end target) is too late to apply `init`
461
  'wp' === $action ? 'template_redirect' : 'init',
462
- array( $this, 'load_theme_template' ), $settings['priority']
463
  );
464
  return TRUE; // load template at the specified action
465
  }
@@ -489,6 +502,24 @@ class IP_Geo_Block {
489
  return $title_parts;
490
  }
491
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
492
  /**
493
  * Validate ip address.
494
  *
@@ -496,9 +527,8 @@ class IP_Geo_Block {
496
  * @param array $settings option settings
497
  * @param boolean $block block if validation fails (for simulate)
498
  * @param boolean $die send http response and die if validation fails (for validate_front )
499
- * @param boolean $check_auth save log and block if validation fails (for admin dashboard)
500
  */
501
- public function validate_ip( $hook, $settings, $block = TRUE, $die = TRUE, $check_auth = TRUE ) {
502
  // register auxiliary validation functions
503
  // priority high 3 close_xmlrpc, close_restapi
504
  // 4 check_nonce (high), check_user (low)
@@ -510,7 +540,7 @@ class IP_Geo_Block {
510
  // priority low 10 check_page (high), validate_country (low)
511
  $var = self::PLUGIN_NAME . '-' . $hook;
512
  $settings['validation' ]['mimetype' ] and add_filter( $var, array( $this, 'check_upload' ), 5, 2 );
513
- $check_auth and add_filter( $var, array( $this, 'check_auth' ), 6, 2 );
514
  $settings['extra_ips' ] = apply_filters( self::PLUGIN_NAME . '-extra-ips', $settings['extra_ips'], $hook );
515
  $settings['extra_ips' ]['black_list'] and add_filter( $var, array( $this, 'check_ips_black' ), 7, 2 );
516
  $settings['extra_ips' ]['white_list'] and add_filter( $var, array( $this, 'check_ips_white' ), 7, 2 );
@@ -541,19 +571,8 @@ class IP_Geo_Block {
541
  break;
542
  }
543
 
544
- if ( $check_auth ) {
545
- // record log and update cache
546
- IP_Geo_Block_Logs::record_logs( $hook, $validate, $settings, $block = self::is_blocked( $validate['result'] ) );
547
- IP_Geo_Block_API_Cache::update_cache( $hook, $validate, $settings );
548
-
549
- // update statistics
550
- if ( $settings['save_statistics'] && ! $validate['auth'] )
551
- IP_Geo_Block_Logs::update_stat( $hook, $validate, $settings );
552
-
553
- // send response code to refuse
554
- if ( empty( $settings['simulate'] ) && $block && $die )
555
- $this->send_response( $hook, $validate, $settings );
556
- }
557
 
558
  return $validate;
559
  }
@@ -586,7 +605,7 @@ class IP_Geo_Block {
586
  add_filter( self::PLUGIN_NAME . '-xmlrpc', array( $this, 'close_xmlrpc' ), 3, 2 );
587
 
588
  else // wp-includes/class-wp-xmlrpc-server.php @since 3.5.0
589
- add_filter( 'xmlrpc_login_error', array( $this, 'auth_fail' ), $settings['priority'] );
590
 
591
  $this->validate_ip( 'xmlrpc', $settings );
592
  }
@@ -616,7 +635,7 @@ class IP_Geo_Block {
616
  ! empty( $settings['login_action']['login'] ) and $settings['login_action']['logout'] = TRUE;
617
 
618
  // avoid conflict with WP Limit Login Attempts (wp-includes/pluggable.php @since 2.5.0)
619
- ! empty( $_POST ) and add_action( 'wp_login_failed', array( $this, 'auth_fail' ), $settings['priority'] );
620
 
621
  // verify emergency login key
622
  if ( 'login' === $action && ! empty( $_REQUEST[ self::PLUGIN_NAME . '-key' ] ) &&
@@ -634,7 +653,7 @@ class IP_Geo_Block {
634
  }
635
 
636
  /**
637
- * Check exceptions
638
  *
639
  */
640
  private function check_exceptions( $action, $page, $exceptions = array() ) {
@@ -747,7 +766,7 @@ class IP_Geo_Block {
747
  }
748
 
749
  /**
750
- * Auxiliary validation functions
751
  *
752
  */
753
  public function auth_fail( $something = NULL ) {
@@ -755,14 +774,13 @@ class IP_Geo_Block {
755
  $time = microtime( TRUE );
756
  $settings = self::get_option();
757
  if ( $cache = IP_Geo_Block_API_Cache::get_cache( self::$remote_addr, $settings['cache_hold'] ) ) {
 
758
  $validate = self::make_validation( self::$remote_addr, array(
759
- 'result' => 'failed', // count up $cache['fail'] in update_cache()
760
  'provider' => 'Cache',
761
  'time' => microtime( TRUE ) - $time,
762
  ) + $cache );
763
 
764
- $cache = IP_Geo_Block_API_Cache::update_cache( $hook = defined( 'XMLRPC_REQUEST' ) ? 'xmlrpc' : 'login', $validate, $settings );
765
-
766
  // the whitelist of IP address should be prior
767
  if ( ! $this->check_ips( $validate, $settings['extra_ips']['white_list'] ) ) {
768
  if ( (int)$settings['login_fails'] >= 0 && $cache['fail'] > max( 0, (int)$settings['login_fails'] ) )
@@ -776,16 +794,8 @@ class IP_Geo_Block {
776
  // apply filter hook for emergent functionality
777
  $validate = apply_filters( self::PLUGIN_NAME . '-login', $validate, $settings );
778
 
779
- // (1) blocked, (3) unauthenticated, (5) all
780
- IP_Geo_Block_Logs::record_logs( $hook, $validate, $settings, self::is_blocked( $validate['result'] ) );
781
-
782
- // send response code to refuse if login attempts is exceeded
783
- if ( 'failed' !== $validate['result'] ) {
784
- if ( $settings['save_statistics'] )
785
- IP_Geo_Block_Logs::update_stat( $hook, $validate, $settings );
786
-
787
- $this->send_response( $hook, $validate, $settings );
788
- }
789
  }
790
 
791
  return $something; // pass through
@@ -875,8 +885,9 @@ class IP_Geo_Block {
875
  $j = explode( '/', $i, 2 );
876
  $j[1] = isset( $j[1] ) ? min( 32, max( 0, (int)$j[1] ) ) : 32;
877
  if ( ( ! empty( $validate['asn'] ) && $validate['asn'] === $j[0] ) ||
878
- ( filter_var( $j[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) && Net_IPv4::ipInNetwork( $ip, $j[0].'/'.$j[1] ) ) )
879
  return TRUE;
 
880
  }
881
  }
882
 
@@ -887,8 +898,9 @@ class IP_Geo_Block {
887
  $j = explode( '/', $i, 2 );
888
  $j[1] = isset( $j[1] ) ? min( 128, max( 0, (int)$j[1] ) ) : 128;
889
  if ( ( ! empty( $validate['asn'] ) && $validate['asn'] === $j[0] ) ||
890
- ( filter_var( $j[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) && Net_IPv6::isInNetmask( $ip, $j[0].'/'.$j[1] ) ) )
891
  return TRUE;
 
892
  }
893
  }
894
 
@@ -903,6 +915,66 @@ class IP_Geo_Block {
903
  return self::check_ips( $validate, $settings['extra_ips']['black_list'] ) ? $validate + array( 'result' => 'extra' ) : $validate;
904
  }
905
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
906
  /**
907
  * Validate on public facing pages.
908
  *
@@ -1048,7 +1120,7 @@ class IP_Geo_Block {
1048
  }
1049
 
1050
  /**
1051
- * Handlers of cron job for database and garbage collection for cache
1052
  *
1053
  */
1054
  public function exec_update_db( $immediate = FALSE ) {
15
  * Unique identifier for this plugin.
16
  *
17
  */
18
+ const VERSION = '3.0.17';
19
  const GEOAPI_NAME = 'ip-geo-api';
20
  const PLUGIN_NAME = 'ip-geo-block';
21
  const OPTION_NAME = 'ip_geo_block_settings';
22
+ const OPTION_META = 'ip_geo_block_metadata';
23
  const CACHE_NAME = 'ip_geo_block_cache';
24
  const CRON_NAME = 'ip_geo_block_cron';
25
 
62
  file_exists( $key = IP_Geo_Block_Util::unslashit( $settings['api_dir'] ) . '/drop-in.php' ) and include( $key );
63
 
64
  // global settings after `drop-in.php`
 
65
  self::$auth_key = apply_filters( self::PLUGIN_NAME . '-auth-key', self::PLUGIN_NAME . '-auth-nonce' );
66
+ self::$live_log = ( $validate['reclogs'] ? get_transient( self::PLUGIN_NAME . '-live-log' ) : FALSE );
67
 
68
  // normalize requested uri and page
69
  $key = preg_replace( array( '!\.+/!', '!//+!' ), '/', $_SERVER['REQUEST_URI'] );
95
  'wp-signup.php' => 'login',
96
  );
97
 
98
+ // register target: (wp-admin|wp-includes|wp-content/(plugins|themes|language|uploads))
99
  if ( $this->target_type ) {
100
  if ( 'admin' !== $this->target_type )
101
+ $loader->add_action( 'init', array( $this, 'validate_direct' ), $priority[1] );
102
  else // 'widget_init' for admin dashboard
103
+ $loader->add_action( 'admin_init', array( $this, 'validate_admin' ), $priority[1] );
104
  }
105
 
106
+ // register target: (comment|xmlrpc|login|public)
107
  elseif ( isset( $list[ $this->pagenow ] ) ) {
108
  if ( $validate[ $list[ $this->pagenow ] ] || self::$live_log )
109
+ $loader->add_action( 'init', array( $this, 'validate_' . $list[ $this->pagenow ] ), $priority[0] );
110
  }
111
 
112
+ // register target: alternative of trackback
113
  elseif ( 'POST' === $_SERVER['REQUEST_METHOD'] && 'trackback' === basename( $this->request_uri ) ) {
114
  if ( $validate['comment'] || self::$live_log )
115
+ $loader->add_action( 'init', array( $this, 'validate_comment' ), $priority[0] );
116
  }
117
 
118
  else {
119
  // public facing pages
120
  if ( $validate['public'] || ( ! empty( $_FILES ) && $validate['mimetype'] ) || self::$live_log /* && 'index.php' === $this->pagenow */ )
121
+ defined( 'DOING_CRON' ) or $loader->add_action( 'init', array( $this, 'validate_public' ), $priority[0] );
122
 
123
  // message text on comment form
124
  if ( $settings['comment']['pos'] ) {
127
  }
128
 
129
  if ( $validate['comment'] || self::$live_log ) {
130
+ add_action( 'pre_comment_on_post', array( $this, 'validate_comment' ), $priority[0] ); // wp-comments-post.php @since 2.8.0
131
+ add_action( 'pre_trackback_post', array( $this, 'validate_comment' ), $priority[0] ); // wp-trackback.php @since 4.7.0
132
+ add_filter( 'preprocess_comment', array( $this, 'validate_comment' ), $priority[0] ); // wp-includes/comment.php @since 1.5.0
133
 
134
  // bbPress: prevent creating topic/relpy and rendering form
135
+ add_action( 'bbp_post_request_bbp-new-topic', array( $this, 'validate_comment' ), $priority[0] );
136
+ add_action( 'bbp_post_request_bbp-new-reply', array( $this, 'validate_comment' ), $priority[0] );
137
+ add_filter( 'bbp_current_user_can_access_create_topic_form', array( $this, 'validate_front' ), $priority[0] );
138
+ add_filter( 'bbp_current_user_can_access_create_reply_form', array( $this, 'validate_front' ), $priority[0] );
139
  }
140
 
141
  if ( $validate['login'] || self::$live_log ) {
142
  // for hide/rename wp-login.php, BuddyPress: prevent registration and rendering form
143
+ add_action( 'login_init', array( $this, 'validate_login' ), $priority[0] );
144
 
145
  // only when block on front-end is disabled
146
  if ( ! $validate['public'] || self::$live_log ) {
147
+ add_action( 'bp_core_screen_signup', array( $this, 'validate_login' ), $priority[0] );
148
+ add_action( 'bp_signup_pre_validate', array( $this, 'validate_login' ), $priority[0] );
149
  }
150
  }
151
 
155
 
156
  // garbage collection for IP address cache, enque script for authentication
157
  add_action( self::CACHE_NAME, array( $this, 'exec_cache_gc' ) );
158
+ add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue_nonce' ), $priority[0] ); // @since 2.8.0
159
  }
160
 
161
  // force to redirect on logout to remove nonce, embed a nonce into pages
162
+ add_filter( 'wp_redirect', array( $this, 'logout_redirect' ), 20, 2 ); // logout_redirect @4.2
163
+ add_filter( 'http_request_args', array( $this, 'request_nonce' ), $priority[1], 2 ); // @since 2.7.0
164
+
165
+ // register validation of updating metadata
166
+ $this->validate_metadata( $settings, $priority[0] );
167
  }
168
 
169
  /**
212
  return update_option( self::OPTION_NAME, $cache ? self::$settings = $settings : $settings );
213
  }
214
 
215
+ public static function get_metadata( $cache = TRUE ) {
216
+ return ( $metadata = get_option( self::OPTION_META ) ) ? $metadata : array();
217
+ }
218
+
219
+ public static function update_metadata( $metadata, $cache = TRUE ) {
220
+ return update_option( self::OPTION_META, $metadata );
221
+ }
222
+
223
  /**
224
  * Remove a nonce from the redirecting URL on logout to prevent disclosing a nonce.
225
  *
278
  }
279
 
280
  /**
281
+ * Get current IP address.
282
  *
283
  */
284
  public static function get_ip_address( $settings = NULL ) {
301
  *
302
  */
303
  public static function is_passed ( $result ) { return 0 === strncmp( 'pass', $result, 4 ); }
304
+ public static function is_failed ( $result ) { return 0 === strncmp( 'fail', $result, 4 ); }
305
  public static function is_blocked( $result ) { return 0 !== strncmp( 'pass', $result, 4 ); }
306
  public static function is_listed ( $code, $list ) { return FALSE !== strpos( $list, (string)$code ); }
307
 
345
  *
346
  */
347
  private static function _get_geolocation( $ip, $settings, $providers, $args = array(), $callback = 'get_country' ) {
348
+ // check loop back / private address / empty provider
349
+ if ( IP_Geo_Block_Util::is_private_ip( $ip ) || count( $providers ) <= 1 )
350
  return self::make_validation( $ip, array( 'time' => 0, 'provider' => 'Private', 'code' => 'XX' ) );
351
 
352
  // set arguments for wp_remote_get()
459
  }
460
 
461
  /**
462
+ * Load and show theme template.
463
  *
464
  */
465
  private function show_theme_template( $code, $settings ) {
472
  if ( $action = current_filter() ) { // `plugins_loaded`, `wp` or FALSE
473
  add_action( // `wp` (on front-end target) is too late to apply `init`
474
  'wp' === $action ? 'template_redirect' : 'init',
475
+ array( $this, 'load_theme_template' ), $settings['priority'][1]
476
  );
477
  return TRUE; // load template at the specified action
478
  }
502
  return $title_parts;
503
  }
504
 
505
+ /**
506
+ * The last process of validation.
507
+ *
508
+ */
509
+ private function endof_validate( $hook, $validate, $settings, $block = TRUE, $die = TRUE, $countup = TRUE ) {
510
+ // update cache and record logs
511
+ IP_Geo_Block_API_Cache::update_cache( $hook, $validate, $settings, $countup );
512
+ IP_Geo_Block_Logs::record_logs( $hook, $validate, $settings, self::is_blocked( $validate['result'] ) );
513
+
514
+ if ( $block ) {
515
+ if ( $settings['save_statistics'] && ! $validate['auth'] )
516
+ IP_Geo_Block_Logs::update_stat( $hook, $validate, $settings );
517
+
518
+ if ( ! $settings['simulate'] && $die )
519
+ $this->send_response( $hook, $validate, $settings );
520
+ }
521
+ }
522
+
523
  /**
524
  * Validate ip address.
525
  *
527
  * @param array $settings option settings
528
  * @param boolean $block block if validation fails (for simulate)
529
  * @param boolean $die send http response and die if validation fails (for validate_front )
 
530
  */
531
+ public function validate_ip( $hook, $settings, $block = TRUE, $die = TRUE ) {
532
  // register auxiliary validation functions
533
  // priority high 3 close_xmlrpc, close_restapi
534
  // 4 check_nonce (high), check_user (low)
540
  // priority low 10 check_page (high), validate_country (low)
541
  $var = self::PLUGIN_NAME . '-' . $hook;
542
  $settings['validation' ]['mimetype' ] and add_filter( $var, array( $this, 'check_upload' ), 5, 2 );
543
+ $die and add_filter( $var, array( $this, 'check_auth' ), 6, 2 );
544
  $settings['extra_ips' ] = apply_filters( self::PLUGIN_NAME . '-extra-ips', $settings['extra_ips'], $hook );
545
  $settings['extra_ips' ]['black_list'] and add_filter( $var, array( $this, 'check_ips_black' ), 7, 2 );
546
  $settings['extra_ips' ]['white_list'] and add_filter( $var, array( $this, 'check_ips_white' ), 7, 2 );
571
  break;
572
  }
573
 
574
+ if ( $die ) // send response code to die if validation fails
575
+ $this->endof_validate( $hook, $validate, $settings, self::is_blocked( $validate['result'] ) );
 
 
 
 
 
 
 
 
 
 
 
576
 
577
  return $validate;
578
  }
605
  add_filter( self::PLUGIN_NAME . '-xmlrpc', array( $this, 'close_xmlrpc' ), 3, 2 );
606
 
607
  else // wp-includes/class-wp-xmlrpc-server.php @since 3.5.0
608
+ add_filter( 'xmlrpc_login_error', array( $this, 'auth_fail' ), $settings['priority'][0] );
609
 
610
  $this->validate_ip( 'xmlrpc', $settings );
611
  }
635
  ! empty( $settings['login_action']['login'] ) and $settings['login_action']['logout'] = TRUE;
636
 
637
  // avoid conflict with WP Limit Login Attempts (wp-includes/pluggable.php @since 2.5.0)
638
+ ! empty( $_POST ) and add_action( 'wp_login_failed', array( $this, 'auth_fail' ), $settings['priority'][0] );
639
 
640
  // verify emergency login key
641
  if ( 'login' === $action && ! empty( $_REQUEST[ self::PLUGIN_NAME . '-key' ] ) &&
653
  }
654
 
655
  /**
656
+ * Check exceptions.
657
  *
658
  */
659
  private function check_exceptions( $action, $page, $exceptions = array() ) {
766
  }
767
 
768
  /**
769
+ * Auxiliary validation functions.
770
  *
771
  */
772
  public function auth_fail( $something = NULL ) {
774
  $time = microtime( TRUE );
775
  $settings = self::get_option();
776
  if ( $cache = IP_Geo_Block_API_Cache::get_cache( self::$remote_addr, $settings['cache_hold'] ) ) {
777
+ $cache['fail']++;
778
  $validate = self::make_validation( self::$remote_addr, array(
779
+ 'result' => 'failed',
780
  'provider' => 'Cache',
781
  'time' => microtime( TRUE ) - $time,
782
  ) + $cache );
783
 
 
 
784
  // the whitelist of IP address should be prior
785
  if ( ! $this->check_ips( $validate, $settings['extra_ips']['white_list'] ) ) {
786
  if ( (int)$settings['login_fails'] >= 0 && $cache['fail'] > max( 0, (int)$settings['login_fails'] ) )
794
  // apply filter hook for emergent functionality
795
  $validate = apply_filters( self::PLUGIN_NAME . '-login', $validate, $settings );
796
 
797
+ // send response code to die if the number of login attempts exceeds the limit
798
+ $this->endof_validate( defined( 'XMLRPC_REQUEST' ) ? 'xmlrpc' : 'login', $validate, $settings, TRUE, 'failed' !== $validate['result'], FALSE );
 
 
 
 
 
 
 
 
799
  }
800
 
801
  return $something; // pass through
885
  $j = explode( '/', $i, 2 );
886
  $j[1] = isset( $j[1] ) ? min( 32, max( 0, (int)$j[1] ) ) : 32;
887
  if ( ( ! empty( $validate['asn'] ) && $validate['asn'] === $j[0] ) ||
888
+ ( filter_var( $j[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) && Net_IPv4::ipInNetwork( $ip, $j[0].'/'.$j[1] ) ) ) {
889
  return TRUE;
890
+ }
891
  }
892
  }
893
 
898
  $j = explode( '/', $i, 2 );
899
  $j[1] = isset( $j[1] ) ? min( 128, max( 0, (int)$j[1] ) ) : 128;
900
  if ( ( ! empty( $validate['asn'] ) && $validate['asn'] === $j[0] ) ||
901
+ ( filter_var( $j[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) && Net_IPv6::isInNetmask( $ip, $j[0].'/'.$j[1] ) ) ) {
902
  return TRUE;
903
+ }
904
  }
905
  }
906
 
915
  return self::check_ips( $validate, $settings['extra_ips']['black_list'] ) ? $validate + array( 'result' => 'extra' ) : $validate;
916
  }
917
 
918
+ /**
919
+ * Validate updating metadata.
920
+ *
921
+ */
922
+ private function validate_metadata( $settings, $priority = 10 ) {
923
+ // @since 2.6.0 apply_filters( "pre_update_option_{$option}", $value, $old_value, $option ); @since 4.4.0 `$option` was added.
924
+ // @since 2.9.0 apply_filters( "pre_update_site_option_{$option}", $value, $old_value, $option, $network_id );
925
+ foreach ( array( 'pre_update_option', 'pre_update_site_option' ) as $key ) {
926
+ foreach ( $settings['metadata'][ $key ] as $option ) {
927
+ add_filter( "{$key}_{$option}", array( $this, 'check_capability' ), $priority, 3 );
928
+ }
929
+ }
930
+
931
+ /**
932
+ * @since 2.9.0
933
+ * do_action( 'updated_option', $option, $old_value, $value );
934
+ * @since 3.0.0, @since 4.7.0 The `$network_id` parameter was added.
935
+ * do_action( 'update_site_option', $option, $value, $old_value, $network_id );
936
+ */
937
+ if ( ! empty( $settings['monitor']['metadata'] ) ) {
938
+ add_action( 'updated_option', array( $this, 'update_meta_stats' ), $priority, 1 );
939
+ add_action( 'update_site_option', array( $this, 'update_meta_stats' ), $priority, 1 );
940
+ }
941
+ }
942
+
943
+ public function update_meta_stats( $option ) {
944
+ if ( FALSE === strpos( $option, 'transient' ) && self::OPTION_META !== $option ) {
945
+ $which = IP_Geo_Block_Util::current_user_can( 'manage_options' ) ||
946
+ IP_Geo_Block_Util::current_user_can( 'manage_network_options' ) ? 0 : 1;
947
+
948
+ $metadata = self::get_metadata();
949
+ $action = current_filter(); // @since 2.5.0
950
+
951
+ if ( ! isset( $metadata[ $action ][ $option ] ) )
952
+ $metadata[ $action ][ $option ] = array( 0, 0 );
953
+
954
+ $metadata[ $action ][ $option ][ $which ]++;
955
+ self::update_metadata( $metadata );
956
+ }
957
+ }
958
+
959
+ public function check_capability( $value, $old_value, $option = NULL ) {
960
+ // check capability
961
+ if ( ! IP_Geo_Block_Util::current_user_can( 'manage_options' ) && ! IP_Geo_Block_Util::current_user_can( 'manage_network_options' ) ) {
962
+ $time = microtime( TRUE );
963
+ $settings = self::get_option();
964
+ $cache = IP_Geo_Block_API_Cache::get_cache( self::$remote_addr, $settings['cache_hold'] );
965
+ $validate = self::make_validation( self::$remote_addr, array(
966
+ 'result' => 'badcap',
967
+ 'provider' => 'Cache',
968
+ 'time' => microtime( TRUE ) - $time,
969
+ ) + $cache );
970
+
971
+ // send response code to die if the current user does not have the right capability
972
+ $this->endof_validate( $this->target_type, $validate, $settings, TRUE, TRUE, FALSE );
973
+ }
974
+
975
+ return $value;
976
+ }
977
+
978
  /**
979
  * Validate on public facing pages.
980
  *
1120
  }
1121
 
1122
  /**
1123
+ * Handlers of cron job for database and garbage collection for cache.
1124
  *
1125
  */
1126
  public function exec_update_db( $immediate = FALSE ) {
ip-geo-block.php CHANGED
@@ -13,7 +13,7 @@
13
  * Plugin Name: IP Geo Block
14
  * Plugin URI: https://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.16
17
  * Author: tokkonopapa
18
  * Author URI: https://www.ipgeoblock.com/
19
  * Text Domain: ip-geo-block
13
  * Plugin Name: IP Geo Block
14
  * Plugin URI: https://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.17
17
  * Author: tokkonopapa
18
  * Author URI: https://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.16\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ip-geo-block\n"
7
- "POT-Creation-Date: 2018-11-01 22:01+0900\n"
8
- "PO-Revision-Date: 2018-11-01 22:03+0900\n"
9
  "Language-Team: \n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -28,167 +28,171 @@ msgstr ""
28
  "自国以外から投稿されるスパム、ログインフォーム、さらにゼロデイ攻撃を含む管理領域への悪意あるアクセス"
29
  "からサイトを守ります。"
30
 
31
- #: admin/class-ip-geo-block-admin.php:297
32
  msgid "Are you sure ?"
33
  msgstr "実行してもよいですか?"
34
 
35
- #: admin/class-ip-geo-block-admin.php:298
36
- #: admin/class-ip-geo-block-admin.php:790
37
  msgid "Open a new window"
38
  msgstr "別窓で開く"
39
 
40
- #: admin/class-ip-geo-block-admin.php:299 admin/includes/tab-settings.php:1506
41
  msgid "Generate new link"
42
  msgstr "新しいリンクを生成"
43
 
44
- #: admin/class-ip-geo-block-admin.php:300 admin/includes/tab-settings.php:1507
45
  msgid "Delete current link"
46
  msgstr "生成したリンクを削除"
47
 
48
- #: admin/class-ip-geo-block-admin.php:301
49
  msgid ""
50
  "Please add the following link to favorites / bookmarks in your browser : "
51
  msgstr "次のリンクをブラウザのお気に入り/ブックマークに追加して下さい : "
52
 
53
- #: admin/class-ip-geo-block-admin.php:302
54
  msgid "ajax for logged-in user"
55
  msgstr "認証済ユーザー用 ajax"
56
 
57
- #: admin/class-ip-geo-block-admin.php:303
58
  msgid "ajax for non logged-in user"
59
  msgstr "未認証ユーザー用 ajax"
60
 
61
- #: admin/class-ip-geo-block-admin.php:304
62
  #, php-format
63
  msgid "[Found: %d]"
64
  msgstr "[見つかった数:%d]"
65
 
66
- #: admin/class-ip-geo-block-admin.php:305
67
  #, php-format
68
  msgid "Find and verify `%s` on &#8220;Logs&#8221; tab."
69
  msgstr "ログから `%s` を検索し、検証して下さい。"
70
 
71
- #: admin/class-ip-geo-block-admin.php:306
72
  msgid "This feature is available with HTML5 compliant browsers."
73
  msgstr "HTML5準拠のブラウザでのみ機能します。"
74
 
75
- #: admin/class-ip-geo-block-admin.php:307
76
  msgid "The selected row cannot be found in the table."
77
  msgstr "テーブル中に選択された行が見つかりません。"
78
 
79
- #: admin/class-ip-geo-block-admin.php:308
80
- #: admin/class-ip-geo-block-admin.php:1568
81
  #, php-format
82
  msgid "An error occurred while executing the ajax command `%s`."
83
  msgstr "Ajaxコマンド `%s` の実行中にエラーが発生しました。"
84
 
85
- #: admin/class-ip-geo-block-admin.php:312
86
  msgid "No data available in table"
87
  msgstr "テーブルにデータがありません"
88
 
89
- #: admin/class-ip-geo-block-admin.php:313
90
  msgid "No matching records found"
91
  msgstr "一致するレコードがありません"
92
 
93
- #: admin/class-ip-geo-block-admin.php:314
94
  #: admin/includes/class-admin-ajax.php:107
95
  #: admin/includes/class-admin-ajax.php:240
96
  #: admin/includes/tab-geolocation.php:74
97
  msgid "IP address"
98
  msgstr "IPアドレス"
99
 
100
- #: admin/class-ip-geo-block-admin.php:315
101
  #: admin/includes/class-admin-ajax.php:108
102
  #: admin/includes/class-admin-ajax.php:241
103
  msgid "Code"
104
  msgstr "国"
105
 
106
- #: admin/class-ip-geo-block-admin.php:316
107
  #: admin/includes/class-admin-ajax.php:109
108
  #: admin/includes/class-admin-ajax.php:242
109
  msgid "ASN"
110
  msgstr "AS番号"
111
 
112
- #: admin/class-ip-geo-block-admin.php:317
113
  #: admin/includes/class-admin-ajax.php:243
114
  msgid "Host name"
115
  msgstr "ホスト名"
116
 
117
- #: admin/class-ip-geo-block-admin.php:318
118
  #: admin/includes/class-admin-ajax.php:110
119
  #: admin/includes/class-admin-ajax.php:244
120
  msgid "Target"
121
  msgstr "検証対象"
122
 
123
- #: admin/class-ip-geo-block-admin.php:319
124
  #: admin/includes/class-admin-ajax.php:245
125
  msgid "Failure / Total"
126
  msgstr "ログイン失敗/総計"
127
 
128
- #: admin/class-ip-geo-block-admin.php:320
129
  #: admin/includes/class-admin-ajax.php:246
130
  msgid "Elapsed[sec]"
131
  msgstr "経過 [秒]"
132
 
133
- #: admin/class-ip-geo-block-admin.php:321
134
  #: admin/includes/class-admin-ajax.php:106
135
  msgid "Time"
136
  msgstr "日時"
137
 
138
- #: admin/class-ip-geo-block-admin.php:322
139
  #: admin/includes/class-admin-ajax.php:111
140
  msgid "Result"
141
  msgstr "検証結果"
142
 
143
- #: admin/class-ip-geo-block-admin.php:323
144
  #: admin/includes/class-admin-ajax.php:112
145
  msgid "Request"
146
  msgstr "リクエスト"
147
 
148
- #: admin/class-ip-geo-block-admin.php:324
149
  #: admin/includes/class-admin-ajax.php:113
150
  msgid "User agent"
151
  msgstr "ユーザー・エージェント"
152
 
153
- #: admin/class-ip-geo-block-admin.php:325
154
  #: admin/includes/class-admin-ajax.php:114
155
  msgid "HTTP headers"
156
  msgstr "HTTP ヘッダー"
157
 
158
- #: admin/class-ip-geo-block-admin.php:326
159
  #: admin/includes/class-admin-ajax.php:115
160
  msgid "$_POST data"
161
  msgstr "$_POST データ"
162
 
163
- #: admin/class-ip-geo-block-admin.php:352
164
  msgid "Contribute on GitHub"
165
  msgstr "開発に参加"
166
 
167
- #: admin/class-ip-geo-block-admin.php:366
168
- #: admin/class-ip-geo-block-admin.php:483
169
- #: admin/class-ip-geo-block-admin.php:733
 
 
170
  msgid "Settings"
171
  msgstr "設定"
172
 
 
173
  #: admin/class-ip-geo-block-admin.php:460
174
- #: admin/class-ip-geo-block-admin.php:461
175
  #: admin/class-ip-geo-block-admin.php:471
176
- #: admin/class-ip-geo-block-admin.php:472
177
- #: admin/class-ip-geo-block-admin.php:482
178
- #: admin/class-ip-geo-block-admin.php:492
179
  msgid "IP Geo Block"
180
  msgstr "IP Geo Block"
181
 
182
- #: admin/class-ip-geo-block-admin.php:493
183
- #: admin/class-ip-geo-block-admin.php:738
 
 
184
  msgid "Sites list"
185
  msgstr "サイト一覧"
186
 
187
- #: admin/class-ip-geo-block-admin.php:522
188
  msgid "You need WordPress 3.7+."
189
  msgstr "WordPress 3.7 以上が必要です。"
190
 
191
- #: admin/class-ip-geo-block-admin.php:526
192
  #, php-format
193
  msgid ""
194
  "Can not load Geolocation API libraries from <code>%s</code>. It seems to "
@@ -197,21 +201,22 @@ msgid ""
197
  "contents of tokkonopapa/WordPress-IP-Geo-API as a zip file\">ZIP file</a> "
198
  "from <a rel=\"noreferrer\" href=\"https://github.com/tokkonopapa/WordPress-"
199
  "IP-Geo-API\" title=\"tokkonopapa/WordPress-IP-Geo-API - GitHub\">WordPress-"
200
- "IP-Geo-API</a>. Please install <code>ip-geo-api</code> with write permission "
201
- "according to <a rel=\"noreferrer\" href=\"https://www.ipgeoblock.com/codex/"
202
- "how-to-fix-permission-troubles.html\" title=\"How can I fix permission "
203
- "troubles? | IP Geo Block\">this instruction</a>."
 
204
  msgstr ""
205
  "<code>%s</code> に位置情報APIライブラリが見つかりません。<a rel=\"noreferrer\" href=\"https://github."
206
  "com/tokkonopapa/WordPress-IP-Geo-API\" title=\"tokkonopapa/WordPress-IP-Geo-API - GitHub\">WordPress-"
207
  "IP-Geo-API</a> から <a rel=\"noreferrer\" href=\"https://github.com/tokkonopapa/WordPress-IP-Geo-API/"
208
  "archive/master.zip\" title=\"Download the contents of tokkonopapa/WordPress-IP-Geo-API as a zip file"
209
- "\">ZIP file</a> のダウンロードに失敗したようです。<a rel=\"noreferrer\" href=\"https://www."
210
- "ipgeoblock.com/codex/how-to-fix-permission-troubles.html\" title=\"How can I fix permission "
211
- "troubles? | IP Geo Block\">FAQ</a> を参照し、適切な書き込み権限と共に <code>ip-geo-api</code> をイン"
212
- "ストールしてください。"
213
 
214
- #: admin/class-ip-geo-block-admin.php:535
215
  #, php-format
216
  msgid ""
217
  "You should select at least one API at <a href=\"%s\">Geolocation API "
@@ -221,7 +226,7 @@ msgstr ""
221
  "<a href=\"%s\">位置情報APIの設定</a>で、少なくとも1つ以上のAPIを選択して下さい。未選択の場合、キャッ"
222
  "シュの有効期限切れと共にロックアウトされます。"
223
 
224
- #: admin/class-ip-geo-block-admin.php:544
225
  #, php-format
226
  msgid ""
227
  "You should select at least one API for local database at <a href=\"%s"
@@ -231,7 +236,7 @@ msgstr ""
231
  "<a href=\"%s\">位置情報APIの設定</a>で、ローカルデータベース用のAPIを少なくとも1つ以上選択して下さ"
232
  "い。未選択の場合、外部APIへのアクセスにより、サイトの応答性が悪くなります。"
233
 
234
- #: admin/class-ip-geo-block-admin.php:555
235
  #, php-format
236
  msgid ""
237
  "Now downloading geolocation databases in background. After a little while, "
@@ -242,7 +247,7 @@ msgstr ""
242
  "と[<strong>マッチング規則</strong>]を[<a href=\"%s\">検証ルールと振る舞いの設定</a>]で確認して下"
243
  "さい。"
244
 
245
- #: admin/class-ip-geo-block-admin.php:561
246
  #, php-format
247
  msgid ""
248
  "The &#8220;<strong>Matching rule</strong>&#8221; is not set properly. Please "
@@ -251,11 +256,11 @@ msgstr ""
251
  "[<strong>マッチング規則</strong>]が正しく設定されていません。[<a href=\"%s\">検証ルールと振る舞い"
252
  "の設定</a>]を確認して下さい。"
253
 
254
- #: admin/class-ip-geo-block-admin.php:570
255
  msgid "Local database and matching rule have been updated."
256
  msgstr "ローカル・データベースとマッチング規則を更新しました。"
257
 
258
- #: admin/class-ip-geo-block-admin.php:581
259
  msgid ""
260
  "Once you logout, you will be unable to login again because the number of "
261
  "login attempts reaches the limit."
@@ -263,7 +268,7 @@ msgstr ""
263
  "あなたのIPアドレスのログイン試行可能回数がリミットに達したため、ログアウトすると再びログインする事が"
264
  "出来なくなります。"
265
 
266
- #: admin/class-ip-geo-block-admin.php:583
267
  #, php-format
268
  msgid ""
269
  "Please remove your IP address in &#8220;%1$sStatistics in IP address cache"
@@ -273,7 +278,7 @@ msgstr ""
273
  "[%3$s統計%4$s]タブの[%1$sIPアドレスのキャッシュ%2$s]から自身のIPアドレスを削除し、ロックアウトを"
274
  "回避してください。"
275
 
276
- #: admin/class-ip-geo-block-admin.php:594
277
  msgid ""
278
  "Once you logout, you will be unable to login again because your country code "
279
  "or IP address is in the blacklist."
@@ -281,7 +286,7 @@ msgstr ""
281
  "あなたの国コードまたはIPアドレスがブラックリストに含まれているため、ログアウトすると再びログインする"
282
  "事が出来なくなります。"
283
 
284
- #: admin/class-ip-geo-block-admin.php:595
285
  msgid ""
286
  "Once you logout, you will be unable to login again because your country code "
287
  "or IP address is not in the whitelist."
@@ -289,12 +294,12 @@ msgstr ""
289
  "あなたの国コードまたはIPアドレスがホワイトリストに含まれていないため、ログアウトすると再びログインす"
290
  "る事が出来なくなります。"
291
 
292
- #: admin/class-ip-geo-block-admin.php:599
293
  #, php-format
294
  msgid "Please check your &#8220;%sValidation rules and behavior%s&#8221;."
295
  msgstr "[%s検証ルールと振る舞いの設定%s]を確認して下さい。"
296
 
297
- #: admin/class-ip-geo-block-admin.php:603
298
  #, php-format
299
  msgid ""
300
  "Please confirm your local geolocation database files exist at &#8220;%sLocal "
@@ -304,7 +309,7 @@ msgstr ""
304
  "[%sローカル・データベースの設定%s]で位置情報データベース・ファイルの有無を確認して下さい。あるいは"
305
  "[%sキャッシュの統計%s]でキャッシュされているあなたのIPアドレスを削除して下さい。"
306
 
307
- #: admin/class-ip-geo-block-admin.php:617
308
  #, php-format
309
  msgid ""
310
  "Emergency login link is outdated. Please delete it once and generate again "
@@ -314,7 +319,7 @@ msgstr ""
314
  "緊急ログイン・リンクが古くなっています。[%sプラグインの設定%s]で一度削除してから再度生成してくださ"
315
  "い。 またブラウザのお気に入り/ブックマークも忘れずに更新して下さい。"
316
 
317
- #: admin/class-ip-geo-block-admin.php:626
318
  msgid ""
319
  "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php) at &#8220;Validation "
320
  "timing&#8221; is imcompatible with <strong>IP Geo Allow</strong>. Please "
@@ -324,32 +329,27 @@ msgstr ""
324
  "<strong>IP Geo Allow</strong> と互換性がありません。「&#8220;init&#8221; アクション・フック」を選択し"
325
  "てください。"
326
 
327
- #: admin/class-ip-geo-block-admin.php:734
328
  msgid "Statistics"
329
  msgstr "統計"
330
 
331
- #: admin/class-ip-geo-block-admin.php:735
332
  msgid "Logs"
333
  msgstr "ログ"
334
 
335
- #: admin/class-ip-geo-block-admin.php:736
336
  msgid "Search"
337
  msgstr "検索"
338
 
339
- #: admin/class-ip-geo-block-admin.php:737
340
  msgid "Attribution"
341
  msgstr "リンク"
342
 
343
- #: admin/class-ip-geo-block-admin.php:754
344
- #: admin/class-ip-geo-block-admin.php:770
345
- msgid "Network"
346
- msgstr "ネットワーク管理"
347
-
348
- #: admin/class-ip-geo-block-admin.php:783
349
  msgid "Toggle all"
350
  msgstr "全てを開閉"
351
 
352
- #: admin/class-ip-geo-block-admin.php:786
353
  msgid ""
354
  "Independent of &#8220;Privacy and record settings&#8221;, you can see all "
355
  "the requests validated by this plugin in almost real time."
@@ -357,19 +357,19 @@ msgstr ""
357
  "[プライバシーと記録の設定]にかかわらず、このプラグインによる検証結果のすべてを、ほぼリアルタイムに"
358
  "表示します。"
359
 
360
- #: admin/class-ip-geo-block-admin.php:786 admin/includes/tab-accesslog.php:39
361
  msgid "Live update"
362
  msgstr "ライブアップデート"
363
 
364
- #: admin/class-ip-geo-block-admin.php:790
365
  msgid "Open a new window on clicking the link in the chart."
366
  msgstr "チャート内のリンクをクリックすると、新しいウィンドウが開きます。"
367
 
368
- #: admin/class-ip-geo-block-admin.php:814
369
  msgid "Thanks for providing these great services for free."
370
  msgstr "これらのすばらしいサービスの提供元に、敬意と感謝の意を表します!"
371
 
372
- #: admin/class-ip-geo-block-admin.php:815
373
  msgid ""
374
  "(Most browsers will redirect you to each site <a href=\"https://www."
375
  "ipgeoblock.com/etc/referer.html\" title=\"Referer Checker\">without referrer "
@@ -378,36 +378,90 @@ msgstr ""
378
  "(ほとんどのブラウザでは、<a href=\"https://www.ipgeoblock.com/etc/referer.html\" title=\"Referer "
379
  "Checker\">参照元を残さずにリンク先にリダイレクトできます</a>。)"
380
 
381
- #: admin/class-ip-geo-block-admin.php:820
382
  msgid "Back to top"
383
  msgstr "トップに戻る"
384
 
385
- #: admin/class-ip-geo-block-admin.php:912
386
  msgid "Enable"
387
  msgstr "有効"
388
 
389
- #: admin/class-ip-geo-block-admin.php:927
390
  msgid "Select one"
391
  msgstr "何れかを選択"
392
 
393
- #: admin/class-ip-geo-block-admin.php:1346
394
  msgid "You do not have sufficient permissions to access this page."
395
  msgstr "このページにアクセスするための十分な権限がありません。"
396
 
397
- #: admin/class-ip-geo-block-admin.php:1373
398
  #: admin/includes/class-admin-rewrite.php:194
399
- #: classes/class-ip-geo-block-cron.php:218
400
- #: classes/class-ip-geo-block-cron.php:322
401
- #: classes/class-ip-geo-block-cron.php:400
402
- #: classes/class-ip-geo-block-opts.php:469
403
  #, php-format
404
  msgid "Unable to write <code>%s</code>. Please check the permission."
405
  msgstr "<code>%s</code> に書き込めません。パーミッションをチェックして下さい。"
406
 
407
- #: admin/class-ip-geo-block-admin.php:1403
408
  msgid "Settings saved."
409
  msgstr "設定を保存しました。"
410
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
  #: admin/includes/class-admin-ajax.php:72
412
  #: admin/includes/class-admin-ajax.php:75 admin/includes/tab-settings.php:84
413
  #: admin/includes/tab-settings.php:103
@@ -426,8 +480,8 @@ msgid ""
426
  msgstr "%sは誤ったフォーマットです。該当行を削除し、再実行してください。"
427
 
428
  #: admin/includes/class-admin-rewrite.php:168
429
- #: classes/class-ip-geo-block-cron.php:213
430
- #: classes/class-ip-geo-block-cron.php:395
431
  #, php-format
432
  msgid "Unable to read <code>%s</code>. Please check the permission."
433
  msgstr "<code>%s</code> が読めません。パーミッションをチェックして下さい。"
@@ -451,23 +505,23 @@ msgstr "検証のログ"
451
  msgid "Help"
452
  msgstr "ヘルプ"
453
 
454
- #: admin/includes/tab-accesslog.php:55 admin/includes/tab-settings.php:428
455
  msgid "Comment post"
456
  msgstr "コメント投稿"
457
 
458
- #: admin/includes/tab-accesslog.php:56 admin/includes/tab-settings.php:429
459
  msgid "XML-RPC"
460
  msgstr "XML-RPC"
461
 
462
- #: admin/includes/tab-accesslog.php:57 admin/includes/tab-settings.php:430
463
  msgid "Login form"
464
  msgstr "ログイン・フォーム"
465
 
466
- #: admin/includes/tab-accesslog.php:58 admin/includes/tab-settings.php:431
467
  msgid "Admin area"
468
  msgstr "管理領域"
469
 
470
- #: admin/includes/tab-accesslog.php:59 admin/includes/tab-settings.php:433
471
  msgid "Public facing pages"
472
  msgstr "一般公開ページ"
473
 
@@ -487,68 +541,68 @@ msgstr "ログを検索"
487
  msgid "Reset"
488
  msgstr "リセット"
489
 
490
- #: admin/includes/tab-accesslog.php:109
491
  msgid "Preset filters"
492
  msgstr "プリセット・フィルタ"
493
 
494
- #: admin/includes/tab-accesslog.php:125 admin/includes/tab-statistics.php:238
495
  msgid "Bulk action"
496
  msgstr "選択して実行"
497
 
498
- #: admin/includes/tab-accesslog.php:136 admin/includes/tab-statistics.php:249
499
  msgid "Remove entries by IP address"
500
  msgstr "指定のIPアドレスでエントリを削除"
501
 
502
- #: admin/includes/tab-accesslog.php:137 admin/includes/tab-statistics.php:250
503
  msgid "Add IP address to &#8220;Whitelist&#8221;"
504
  msgstr "IPアドレスをホワイトリストへ追加"
505
 
506
- #: admin/includes/tab-accesslog.php:138 admin/includes/tab-statistics.php:251
507
  msgid "Add IP address to &#8220;Blacklist&#8221;"
508
  msgstr "IPアドレスをブラックリストへ追加"
509
 
510
- #: admin/includes/tab-accesslog.php:139 admin/includes/tab-statistics.php:252
511
  msgid "Add AS number to &#8220;Whitelist&#8221;"
512
  msgstr "AS番号をホワイトリストへ追加"
513
 
514
- #: admin/includes/tab-accesslog.php:140 admin/includes/tab-statistics.php:253
515
  msgid "Add AS number to &#8220;Blacklist&#8221;"
516
  msgstr "AS番号をブラックリストへ追加"
517
 
518
- #: admin/includes/tab-accesslog.php:142 admin/includes/tab-network.php:56
519
  #: admin/includes/tab-statistics.php:255
520
  msgid "Apply"
521
  msgstr "実行する"
522
 
523
- #: admin/includes/tab-accesslog.php:149 admin/includes/tab-statistics.php:191
524
  msgid "Clear logs"
525
  msgstr "ログをクリア"
526
 
527
- #: admin/includes/tab-accesslog.php:157 admin/includes/tab-statistics.php:167
528
  #: admin/includes/tab-statistics.php:199 admin/includes/tab-statistics.php:269
529
  msgid "Clear all"
530
  msgstr "全てをクリア"
531
 
532
- #: admin/includes/tab-accesslog.php:166
533
  msgid "Export logs"
534
  msgstr "ログをエクスポート"
535
 
536
- #: admin/includes/tab-accesslog.php:172 admin/includes/tab-settings.php:1538
537
  #: admin/includes/tab-statistics.php:283
538
  msgid "Export to the local file"
539
  msgstr "ローカル・ファイルへエクスポートする"
540
 
541
- #: admin/includes/tab-accesslog.php:172 admin/includes/tab-statistics.php:283
542
  msgid "Export csv"
543
  msgstr "CSVへエクスポート"
544
 
545
- #: admin/includes/tab-accesslog.php:198 admin/includes/tab-network.php:112
546
  #: admin/includes/tab-statistics.php:410
547
  #, php-format
548
  msgid "[ %sRecord &#8220;Validation logs&#8221;%s ] is disabled."
549
  msgstr "[%s検証のログを記録%s]が無効です。"
550
 
551
- #: admin/includes/tab-accesslog.php:199 admin/includes/tab-network.php:113
552
  #: admin/includes/tab-statistics.php:411
553
  msgid ""
554
  "Please set the proper condition to record and analyze the validation logs."
@@ -566,7 +620,7 @@ msgstr "IPアドレスの位置情報を検索"
566
  msgid "Geolocation API"
567
  msgstr "位置情報API"
568
 
569
- #: admin/includes/tab-geolocation.php:89 admin/includes/tab-settings.php:1083
570
  msgid ""
571
  "<dfn title=\"IP address is always encrypted on recording in Cache and Logs. "
572
  "Moreover, this option replaces the end of IP address with &#8220;***&#8221; "
@@ -717,7 +771,7 @@ msgstr ""
717
  "の国にもマッチさせないことが必要な場合には、「YY」を指定してください。\">国コードのブラックリスト</"
718
  "dfn>"
719
 
720
- #: admin/includes/tab-settings.php:125 admin/includes/tab-settings.php:805
721
  msgid "Matching rule"
722
  msgstr "マッチング規則"
723
 
@@ -839,8 +893,8 @@ msgstr ""
839
  "ング]を「&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)」に設定することを検討してください。\">悪意の"
840
  "あるアップロード防止</dfn>"
841
 
842
- #: admin/includes/tab-settings.php:304 admin/includes/tab-settings.php:494
843
- #: admin/includes/tab-settings.php:639 admin/includes/tab-settings.php:1155
844
  msgid "Disable"
845
  msgstr "無効"
846
 
@@ -852,7 +906,29 @@ msgstr "拡張子と MIME タイプを検証"
852
  msgid "Verify file extension only"
853
  msgstr "ファイル拡張子のみを検証"
854
 
855
- #: admin/includes/tab-settings.php:315
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
856
  #, php-format
857
  msgid ""
858
  "<dfn title=\"You can put your original 403.php and so on into your theme "
@@ -861,7 +937,7 @@ msgstr ""
861
  "<dfn title=\"テーマ・ディレクトリには 403.php など、独自のファイルを設置する事が出来ます。\">レスポン"
862
  "ス・コード</dfn> %s"
863
 
864
- #: admin/includes/tab-settings.php:344 admin/includes/tab-settings.php:888
865
  msgid ""
866
  "<dfn title=\"Specify the URL for response code 2xx and 3xx. If it is pointed "
867
  "to a public facing page, visitors would not be blocked on the page to "
@@ -873,36 +949,36 @@ msgstr ""
873
  "避けるため、自サイト内の URL は[フロントエンドの設定]に関わらず遮断の対象外となります。空欄の場合、"
874
  "サイトのホームが使用されます。\">リダイレクト先 URL</dfn>"
875
 
876
- #: admin/includes/tab-settings.php:361 admin/includes/tab-settings.php:906
877
  msgid ""
878
  "<dfn title=\"Specify the message for response code 4xx and 5xx.\">Response "
879
  "message</dfn>"
880
  msgstr ""
881
  "<dfn title=\"レスポンス・コード 4xx、5xx 用のメッセージを指定します。\">レスポンス・メッセージ</dfn>"
882
 
883
- #: admin/includes/tab-settings.php:379
884
  msgid "Select when to run the validation."
885
  msgstr "検証を実行するタイミングを選択します。"
886
 
887
- #: admin/includes/tab-settings.php:379
888
  msgid "Validation timing"
889
  msgstr "検証のタイミング"
890
 
891
- #: admin/includes/tab-settings.php:390
892
  msgid "&#8220;init&#8221; action hook"
893
  msgstr "&#8220;init&#8221; アクション・フック"
894
 
895
- #: admin/includes/tab-settings.php:391
896
  msgid "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)"
897
  msgstr "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)"
898
 
899
- #: admin/includes/tab-settings.php:394
900
  msgid ""
901
  "Validate at &#8220;init&#8221; action hook in the same manner as typical "
902
  "plugins."
903
  msgstr "標準的な他のプラグインと同様、init アクション・フックのタイミングで検証を実行します。"
904
 
905
- #: admin/includes/tab-settings.php:395
906
  msgid ""
907
  "Validate at an earlier phase than other typical plugins. It can reduce load "
908
  "on server but has <a rel='noreferrer' href='https://www.ipgeoblock.com/codex/"
@@ -913,7 +989,7 @@ msgstr ""
913
  "が、<a rel=‘noreferrer’ href=‘https://www.ipgeoblock.com/codex/validation-timing.html' "
914
  "title=‘Validation timing | IP Geo Block’>幾つかの制限事項</a> が生じます。"
915
 
916
- #: admin/includes/tab-settings.php:403
917
  msgid ""
918
  "It enables to simulate the validation rules without actual blocking in order "
919
  "to check the behavior of this plugin. The results can be found on &#8220;"
@@ -922,122 +998,122 @@ msgstr ""
922
  "このプラグインの動作を確認するために、実際に遮断させることなく検証ルールをシミュレートします。結果は"
923
  "ログで確認する事が出来ます。"
924
 
925
- #: admin/includes/tab-settings.php:403
926
  msgid "Simulation mode"
927
  msgstr "シミュレーション・モード"
928
 
929
- #: admin/includes/tab-settings.php:420
930
  msgid "Back-end target settings"
931
  msgstr "バックエンドの設定"
932
 
933
- #: admin/includes/tab-settings.php:426
934
  #, php-format
935
  msgid "<dfn title=\"It enables to validate requests to %s.\">%s</dfn>"
936
  msgstr "<dfn title=\"%s へのリクエストを検証します。\">%s</dfn>"
937
 
938
- #: admin/includes/tab-settings.php:432
939
  msgid "Other areas"
940
  msgstr "その他の領域"
941
 
942
- #: admin/includes/tab-settings.php:433
943
  msgid "public facing pages"
944
  msgstr "一般公開ページ"
945
 
946
- #: admin/includes/tab-settings.php:449 admin/includes/tab-settings.php:495
947
- #: admin/includes/tab-settings.php:527 admin/includes/tab-settings.php:533
948
- #: admin/includes/tab-settings.php:798
949
  msgid "Block by country"
950
  msgstr "国コードで遮断"
951
 
952
- #: admin/includes/tab-settings.php:459
953
  msgid "The whole will be wrapped by &lt;p&gt; tag. Allowed tags: "
954
  msgstr "全体を &lt;p&gt; タグで囲みます。使用可能タグ:"
955
 
956
- #: admin/includes/tab-settings.php:459
957
  msgid "Message on comment form"
958
  msgstr "投稿フォーム上のメッセージ"
959
 
960
- #: admin/includes/tab-settings.php:472
961
  msgid "None"
962
  msgstr "なし"
963
 
964
- #: admin/includes/tab-settings.php:473
965
  msgid "Top"
966
  msgstr "上部"
967
 
968
- #: admin/includes/tab-settings.php:474
969
  msgid "Bottom"
970
  msgstr "下部"
971
 
972
- #: admin/includes/tab-settings.php:496
973
  msgid "Completely close"
974
  msgstr "完全に閉鎖"
975
 
976
- #: admin/includes/tab-settings.php:502
977
  msgid "Action to login as a registered user."
978
  msgstr "登録済みユーザーとしてログインするアクション。"
979
 
980
- #: admin/includes/tab-settings.php:502
981
  msgid "Log in"
982
  msgstr "ログイン"
983
 
984
- #: admin/includes/tab-settings.php:503
985
  msgid "Action to register new users."
986
  msgstr "新規ユーザーを登録するアクション。"
987
 
988
- #: admin/includes/tab-settings.php:503
989
  msgid "Register"
990
  msgstr "登録"
991
 
992
- #: admin/includes/tab-settings.php:504
993
  msgid "Action to reset a password to create a new one."
994
  msgstr "パスワードをリセットし、新しいパスワードに更新するアクション。"
995
 
996
- #: admin/includes/tab-settings.php:504
997
  msgid "Password Reset"
998
  msgstr "パスワードのリセット"
999
 
1000
- #: admin/includes/tab-settings.php:505
1001
  msgid "Action to email a password to a registered user."
1002
  msgstr "登録済みユーザーにパスワードを送付するアクション。"
1003
 
1004
- #: admin/includes/tab-settings.php:505
1005
  msgid "Lost Password"
1006
  msgstr "パスワード紛失"
1007
 
1008
- #: admin/includes/tab-settings.php:506
1009
  msgid ""
1010
  "Action to show prompt to enter a password on password protected post and "
1011
  "page."
1012
  msgstr "パスワードで保護された投稿とページにパスワードを入力するプロンプトを表示するアクション。"
1013
 
1014
- #: admin/includes/tab-settings.php:506
1015
  msgid "Password protected"
1016
  msgstr "パスワード保護"
1017
 
1018
- #: admin/includes/tab-settings.php:528
1019
  msgid ""
1020
  "<dfn title=\"Specify the individual action as a blocking target.\">Target "
1021
  "actions</dfn>"
1022
  msgstr "<dfn title=\"遮断対象とするアクションを指定します。\">対象アクション</dfn>"
1023
 
1024
- #: admin/includes/tab-settings.php:534
1025
  msgid "Prevent Zero-day Exploit"
1026
  msgstr "ゼロデイ攻撃を遮断"
1027
 
1028
- #: admin/includes/tab-settings.php:538
1029
  msgid ""
1030
- "It will block a request related to the services for both public facing pages "
1031
- "and the dashboard."
1032
- msgstr "一般公開ページとダッシュボード向けサービスに関連するリクエストを遮断します。"
1033
 
1034
- #: admin/includes/tab-settings.php:539
1035
  msgid ""
1036
  "Regardless of the country code, it will block a malicious request related to "
1037
- "the services only for the dashboard."
1038
- msgstr "国コードに拘らず、ダッシュボード向けサービスだけに関連する悪意のあるリクエストを遮断します。"
1039
 
1040
- #: admin/includes/tab-settings.php:545
1041
  msgid ""
1042
  "This is applied to &#8220;XML-RPC&#8221; and &#8220;Login form&#8221; when "
1043
  "&#8220;IP address cache&#8221; in &#8220;Privacy and record settings&#8221; "
@@ -1047,23 +1123,23 @@ msgstr ""
1047
  "[プライバシーと記録の設定]&raquo;[IPアドレスのキャッシュを記録]が有効の時、[XML-RPC]と[ログイ"
1048
  "ン・フォーム]に適用されます。ロックアウト時間は[有効時間]で定義します。"
1049
 
1050
- #: admin/includes/tab-settings.php:545
1051
  msgid "Max failed login attempts per IP address"
1052
  msgstr "IPアドレス当たりのログイン試行可能回数"
1053
 
1054
- #: admin/includes/tab-settings.php:586
1055
  msgid "admin post for logged-in user"
1056
  msgstr "認証済ユーザー用 admin post"
1057
 
1058
- #: admin/includes/tab-settings.php:587
1059
  msgid "admin post for non logged-in user"
1060
  msgstr "未認証ユーザー用 admin post"
1061
 
1062
- #: admin/includes/tab-settings.php:609
1063
  msgid "Admin ajax/post"
1064
  msgstr "管理領域 ajax/post"
1065
 
1066
- #: admin/includes/tab-settings.php:623
1067
  msgid ""
1068
  "Specify the action name (&#8220;action=&hellip;&#8221;) or the page name "
1069
  "(&#8220;page=&hellip;&#8221;) to prevent unintended blocking caused by "
@@ -1075,27 +1151,27 @@ msgstr ""
1075
  "&#8221; 部分)、またはページ名(&#8220;page=&hellip;&#8221; の &#8220;&hellip;&#8221; 部分)を指定"
1076
  "し、検証対象から除外します。"
1077
 
1078
- #: admin/includes/tab-settings.php:623 admin/includes/tab-settings.php:701
1079
- #: admin/includes/tab-settings.php:761
1080
  msgid "Exceptions"
1081
  msgstr "例外"
1082
 
1083
- #: admin/includes/tab-settings.php:624
1084
  msgid "Toggle with non logged-in user"
1085
  msgstr "未認証ユーザー用を含む項目に限定して表示する"
1086
 
1087
- #: admin/includes/tab-settings.php:627
1088
  msgid "Candidate actions/pages"
1089
  msgstr "候補 アクション/ページ"
1090
 
1091
- #: admin/includes/tab-settings.php:641
1092
  #, php-format
1093
  msgid ""
1094
  "Regardless of the country code, it will block a malicious request to <code>"
1095
  "%s&ctdot;/*.php</code>."
1096
- msgstr "国コードに拘らず、<code>%s&ctdot;/*.php</code>への悪意のあるリクエストを遮断します。"
1097
 
1098
- #: admin/includes/tab-settings.php:642
1099
  msgid ""
1100
  "Select the item which causes unintended blocking in order to exclude from "
1101
  "the validation target. Grayed item indicates &#8220;INACTIVE&#8221;."
@@ -1103,7 +1179,7 @@ msgstr ""
1103
  "意図しない遮断の原因となる項目を選択し、検証対象から除外します。灰色で表示された項目は、「非アクティ"
1104
  "ブ」であることを示しています。"
1105
 
1106
- #: admin/includes/tab-settings.php:643
1107
  #, php-format
1108
  msgid ""
1109
  "It configures &#8220;%s&#8221; to validate a direct request to the PHP file "
@@ -1113,37 +1189,37 @@ msgstr ""
1113
  "WordPressコアを読み込まないPHPファイルへのリクエストを検証対象とするために、%s を設定します。ドットで"
1114
  "始まる隠しファイルへのアクセス拒否がサーバー側で設定されていることを確認して下さい。"
1115
 
1116
- #: admin/includes/tab-settings.php:644
1117
  msgid "Sorry, but your server type is not supported."
1118
  msgstr "このサーバーではサポートされません。"
1119
 
1120
- #: admin/includes/tab-settings.php:645
1121
  msgid ""
1122
  "You need to click &#8220;Save Changes&#8221; button for imported settings to "
1123
  "take effect."
1124
  msgstr "インポートされた設定を有効にするには、[変更を保存]ボタンをクリックする必要があります。"
1125
 
1126
- #: admin/includes/tab-settings.php:680 admin/includes/tab-settings.php:740
1127
  msgid "Force to load WP core"
1128
  msgstr "WPコアの読み込みを強制"
1129
 
1130
- #: admin/includes/tab-settings.php:685
1131
  msgid "Plugins area"
1132
  msgstr "プラグイン領域"
1133
 
1134
- #: admin/includes/tab-settings.php:745
1135
  msgid "Themes area"
1136
  msgstr "テーマ領域"
1137
 
1138
- #: admin/includes/tab-settings.php:780
1139
  msgid "Front-end target settings"
1140
  msgstr "フロントエンドの設定"
1141
 
1142
- #: admin/includes/tab-settings.php:815
1143
  msgid "Follow &#8220;Validation rules and behavior&#8221;"
1144
  msgstr "[検証ルールと振る舞いの設定]に従う"
1145
 
1146
- #: admin/includes/tab-settings.php:857
1147
  #, php-format
1148
  msgid ""
1149
  "<dfn title=\"You can configure a different response code from the Back-end. "
@@ -1153,18 +1229,18 @@ msgstr ""
1153
  "<dfn title=\"バックエンドと異なるレスポンス・コードを設定できます。これは、アフィリエイト・プログラム"
1154
  "に対する違反を防止するのに役立つでしょう。\">レスポンス・コード</dfn> %s"
1155
 
1156
- #: admin/includes/tab-settings.php:921
1157
  msgid ""
1158
  "<dfn title=\"Specify the individual page as a blocking target.\">Page</dfn>"
1159
  msgstr "<dfn title=\"特定のページを遮断対象に指定します。\">ページ</dfn>"
1160
 
1161
- #: admin/includes/tab-settings.php:933
1162
  msgid ""
1163
  "<dfn title=\"Specify the individual post type on a single page as a blocking "
1164
  "target.\">Post type</dfn>"
1165
  msgstr "<dfn title=\"特定の投稿タイプのシングルページを遮断対象に指定します。\">投稿タイプ</dfn>"
1166
 
1167
- #: admin/includes/tab-settings.php:945
1168
  msgid ""
1169
  "<dfn title=\"Specify the individual category on a single page or archive "
1170
  "page as a blocking target.\">Category</dfn>"
@@ -1172,30 +1248,30 @@ msgstr ""
1172
  "<dfn title=\"特定のカテゴリを含むシングルページかアーカイブページを遮断対象に指定します。\">カテゴリ"
1173
  "</dfn>"
1174
 
1175
- #: admin/includes/tab-settings.php:957
1176
  msgid ""
1177
  "<dfn title=\"Specify the individual tag on a single page or archive page as "
1178
  "a blocking target.\">Tag</dfn>"
1179
  msgstr ""
1180
  "<dfn title=\"特定のタグを含むシングルページかアーカイブページを遮断対象に指定します。\">タグ</dfn>"
1181
 
1182
- #: admin/includes/tab-settings.php:971
1183
  msgid "Specify the validation target on front-end."
1184
  msgstr "フロントエンドの検証対象を設定します。"
1185
 
1186
- #: admin/includes/tab-settings.php:971
1187
  msgid "Validation target"
1188
  msgstr "検証対象"
1189
 
1190
- #: admin/includes/tab-settings.php:982
1191
  msgid "All requests"
1192
  msgstr "全てのリクエスト"
1193
 
1194
- #: admin/includes/tab-settings.php:983
1195
  msgid "Specify the targets"
1196
  msgstr "ターゲットを指定"
1197
 
1198
- #: admin/includes/tab-settings.php:986
1199
  msgid ""
1200
  "Notice that &#8220;Validation timing&#8221; is deferred till &#8220;"
1201
  "wp&#8221; action hook. It means that this feature would not be compatible "
@@ -1204,32 +1280,32 @@ msgstr ""
1204
  "[検証のタイミング]が &#8220;wp&#8221; アクション・フックまで遅延されます。これにより、ページ・"
1205
  "キャッシュとの互換性がなくなることに注意してください。"
1206
 
1207
- #: admin/includes/tab-settings.php:996
1208
  msgid "Specify the name of actions as exception that is invariably blocked."
1209
  msgstr "常に遮断されるアクション名を例外として指定します。"
1210
 
1211
- #: admin/includes/tab-settings.php:996
1212
  msgid "Excluded actions"
1213
  msgstr "除外するアクション"
1214
 
1215
- #: admin/includes/tab-settings.php:1012
1216
  msgid ""
1217
  "<dfn title=\"Specify the frequency of request for certain period of time."
1218
  "\">Blocking condition</dfn>"
1219
  msgstr "<dfn title=\"特定期間のリクエスト頻度を設定します。\">遮断条件</dfn>"
1220
 
1221
- #: admin/includes/tab-settings.php:1014
1222
  #, php-format
1223
  msgid "More than %1$s page view (PV) in %2$s seconds"
1224
  msgstr "%2$s 秒間で %1$s を超えるページビュー (PV)"
1225
 
1226
- #: admin/includes/tab-settings.php:1022
1227
  msgid ""
1228
  "<dfn title=\"It will validate the frequency of request.\">Block badly-"
1229
  "behaved bots and crawlers</dfn>"
1230
  msgstr "<dfn title=\"リクエスト頻度を検証します。\">行儀の悪いボットやクローラーを遮断</dfn>"
1231
 
1232
- #: admin/includes/tab-settings.php:1039
1233
  msgid ""
1234
  "A part of user agent string and a qualification connected with a separator "
1235
  "that indicates an applicable rule and can be &#8220;:&#8221; (pass) or "
@@ -1242,11 +1318,11 @@ msgstr ""
1242
  "「条件」のペアです。「条件」には「DNS」、「FEED」、国コード、または&nbsp;IPアドレス(CIDR記法)が使え"
1243
  "ます。また否定を表す記号「!」を「条件」の直前に配置する事が出来ます。"
1244
 
1245
- #: admin/includes/tab-settings.php:1039
1246
  msgid "UA string and qualification"
1247
  msgstr "ユーザーエージェント文字列と条件"
1248
 
1249
- #: admin/includes/tab-settings.php:1056
1250
  msgid ""
1251
  "It enables to verify the host by reverse DNS lookup which would spend some "
1252
  "server resources. If it is disabled, &#8220;HOST&#8221; and &#8220;"
@@ -1256,15 +1332,15 @@ msgstr ""
1256
  "DNS 逆引きによりホストを検証します(幾らかのサーバー・リソースを消費します)。無効にした場合、[ユー"
1257
  "ザーエージェント文字列と条件]中の「HOST」および「HOST=&hellip;」は常に真となります。"
1258
 
1259
- #: admin/includes/tab-settings.php:1056
1260
  msgid "Reverse DNS lookup"
1261
  msgstr "DNS 逆引き"
1262
 
1263
- #: admin/includes/tab-settings.php:1075
1264
  msgid "Privacy and record settings"
1265
  msgstr "プライバシーと記録の設定"
1266
 
1267
- #: admin/includes/tab-settings.php:1098
1268
  msgid ""
1269
  "<dfn title=\"This option restricts not to send IP address to the external "
1270
  "Geolocation APIs.\">Do not send IP address to external APIs</dfn>"
@@ -1272,7 +1348,7 @@ msgstr ""
1272
  "<dfn title=\"このオプションは、IPアドレスを外部の位置情報APIへ送信することを制限します。\">外部APIへ"
1273
  "の送信を制限する</dfn>"
1274
 
1275
- #: admin/includes/tab-settings.php:1113
1276
  msgid ""
1277
  "<dfn title=\"This option enables to record the IP address, country code and "
1278
  "failure counter of login attempts into the cache on database to minimize the "
@@ -1281,7 +1357,7 @@ msgstr ""
1281
  "<dfn title=\"このオプションは、IPアドレス、国コード、ログイン失敗回数等のキャッシュへの記録を有効に"
1282
  "し、サイト速度への影響を最小化します。\">IPアドレスをキャッシュに記録</dfn>"
1283
 
1284
- #: admin/includes/tab-settings.php:1128
1285
  msgid ""
1286
  "<dfn title=\"If user authentication fails consecutively beyond &#8220;Max "
1287
  "number of failed login attempts per IP address&#8221;, subsequent login will "
@@ -1291,7 +1367,7 @@ msgstr ""
1291
  "<dfn title=\"ユーザ認証が連続%d回失敗した場合も、以降のログインがこの期間だけ(ガベージコレクション周"
1292
  "期を含む)禁止されます。\">各エントリーの有効期間 [秒]</dfn>"
1293
 
1294
- #: admin/includes/tab-settings.php:1144
1295
  msgid ""
1296
  "<dfn title=\"This option enables to record the validation logs including IP "
1297
  "addresses.\">Record &#8220;Validation logs&#8221;</dfn>"
@@ -1299,48 +1375,48 @@ msgstr ""
1299
  "<dfn title=\"このオプションは、IPアドレスを含む検証ログの記録を有効にします。\">検証のログを記録</"
1300
  "dfn>"
1301
 
1302
- #: admin/includes/tab-settings.php:1156
1303
  msgid "When blocked"
1304
  msgstr "遮断時に記録"
1305
 
1306
- #: admin/includes/tab-settings.php:1157
1307
  msgid "When passed"
1308
  msgstr "通過時に記録"
1309
 
1310
- #: admin/includes/tab-settings.php:1158
1311
  msgid "When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;"
1312
  msgstr "遮断時または遮断対象国の通過時に記録"
1313
 
1314
- #: admin/includes/tab-settings.php:1159
1315
  msgid "Unauthenticated visitor"
1316
  msgstr "未認証の訪問者を記録"
1317
 
1318
- #: admin/includes/tab-settings.php:1160
1319
  msgid "Authenticated user"
1320
  msgstr "認証済のユーザーを記録"
1321
 
1322
- #: admin/includes/tab-settings.php:1161
1323
  msgid "All the validation"
1324
  msgstr "すべての検証を記録"
1325
 
1326
- #: admin/includes/tab-settings.php:1169
1327
  #, php-format
1328
  msgid ""
1329
  "<dfn title=\"The maximum number of entries in the logs is also limited to %d."
1330
  "\">Expiration time [days] for each entry</dfn>"
1331
  msgstr "<dfn title=\"ログの最大エントリー数は %d に制限されます。\">各エントリーの有効期間[日]</dfn>"
1332
 
1333
- #: admin/includes/tab-settings.php:1186
1334
  msgid ""
1335
  "<dfn title=\"e.g. action, comment, log, pwd, FILES\">$_POST key to record "
1336
  "with value</dfn>"
1337
  msgstr "<dfn title=\"例)action, comment, log, pwd, FILES\">内容を展開する$_POSTのキー</dfn>"
1338
 
1339
- #: admin/includes/tab-settings.php:1205
1340
  msgid "Maximum entries in &#8220;Logs&#8221;"
1341
  msgstr "記録するログの最大エントリ数"
1342
 
1343
- #: admin/includes/tab-settings.php:1222
1344
  msgid ""
1345
  "<dfn title=\"Select SQLite database source.\">Database source of SQLite for "
1346
  "&#8220;Live update&#8221;</dfn>"
@@ -1348,47 +1424,47 @@ msgstr ""
1348
  "<dfn title=\"SQLiteデータベース・ソースを選択します。\">ライブアップデート用SQLiteデータベース・ソー"
1349
  "スの選択</dfn>"
1350
 
1351
- #: admin/includes/tab-settings.php:1235
1352
  msgid "Ordinary file"
1353
  msgstr "ファイル"
1354
 
1355
- #: admin/includes/tab-settings.php:1236
1356
  msgid "In-Memory"
1357
  msgstr "イン・メモリ"
1358
 
1359
- #: admin/includes/tab-settings.php:1239
1360
  msgid "PDO_SQLITE driver not available"
1361
  msgstr "PDO_SQLITEドライバが利用出来ません"
1362
 
1363
- #: admin/includes/tab-settings.php:1240
1364
  msgid ""
1365
  "It takes a few tens of milliseconds as overhead. It can be safely used "
1366
  "without conflict with other plugins."
1367
  msgstr "数十ミリ秒のオーバーヘッドが生じますが、他のプラグインと競合することなく、安全に使用できます。"
1368
 
1369
- #: admin/includes/tab-settings.php:1241
1370
  msgid ""
1371
  "It takes a few milliseconds as overhead. There is a possibility of conflict "
1372
  "with other plugins using this method."
1373
  msgstr ""
1374
  "数ミリ秒のオーバーヘッドが生じます。同手法を用いている他のプラグインと競合する可能性があります。"
1375
 
1376
- #: admin/includes/tab-settings.php:1249
1377
  msgid "Reset database source of &#8220;Live update&#8221;"
1378
  msgstr "ライブアップデートのデータソースをリセットする"
1379
 
1380
- #: admin/includes/tab-settings.php:1257
1381
  msgid "Reset now"
1382
  msgstr "今すぐリセット"
1383
 
1384
- #: admin/includes/tab-settings.php:1266 admin/includes/tab-settings.php:1427
1385
  msgid ""
1386
  "Task could not be found in WP-Cron. Please try to deactivate this plugin "
1387
  "once and activate again."
1388
  msgstr ""
1389
  "WP-Cronのタスクが見つかりません。 一旦このプラグインを停止させた後、再度、有効化してみてください。"
1390
 
1391
- #: admin/includes/tab-settings.php:1271
1392
  msgid ""
1393
  "<dfn title=\"This option enables to schedule the WP-Cron event to remove the "
1394
  "expired entries from &#8220;IP address cache&#8221; and &#8220;Validation "
@@ -1397,12 +1473,12 @@ msgstr ""
1397
  "<dfn title=\"キャッシュとログから有効期限の切れたIPアドレスのエントリーを削除する WP-Cron イベントの"
1398
  "起動周期を設定します。\">ガベージコレクション周期[秒]</dfn>"
1399
 
1400
- #: admin/includes/tab-settings.php:1280 admin/includes/tab-settings.php:1443
1401
  #, php-format
1402
  msgid "Next schedule: %s"
1403
  msgstr "次回日時:%s"
1404
 
1405
- #: admin/includes/tab-settings.php:1287
1406
  msgid ""
1407
  "<dfn title=\"This option enables to record the number blocked countries and "
1408
  "the number of blocked requests per day.\">Record &#8220;Statistics of "
@@ -1411,19 +1487,19 @@ msgstr ""
1411
  "<dfn title=\"このオプションは、国別遮断数や1日あたりの遮断数など、統計の記録を有効にします。\">検証の"
1412
  "統計を記録</dfn>"
1413
 
1414
- #: admin/includes/tab-settings.php:1302
1415
  msgid "Maximum period for &#8220;Statistics&#8221; [days]"
1416
  msgstr "記録する統計の最大期間[日]"
1417
 
1418
- #: admin/includes/tab-settings.php:1320
1419
  msgid "Remove all settings and records at uninstallation"
1420
  msgstr "アンインストール時に設定と記録を全て削除"
1421
 
1422
- #: admin/includes/tab-settings.php:1337
1423
  msgid "Geolocation API settings"
1424
  msgstr "位置情報APIの設定"
1425
 
1426
- #: admin/includes/tab-settings.php:1358
1427
  msgid ""
1428
  "<dfn title=\"IP address cache and local databases are scanned at the top "
1429
  "priority.\">API selection and key settings</dfn>"
@@ -1431,46 +1507,46 @@ msgstr ""
1431
  "<dfn title=\"IPアドレスのキャッシュとローカルのデータベースが最優先で検索されます。\">APIの選択とキー"
1432
  "の設定</dfn>"
1433
 
1434
- #: admin/includes/tab-settings.php:1377
1435
  msgid "Timeout for network API [sec]"
1436
  msgstr "ネットワークAPIのタイムアウト[秒]"
1437
 
1438
- #: admin/includes/tab-settings.php:1395
1439
  msgid "Local database settings"
1440
  msgstr "ローカル・データベースの設定"
1441
 
1442
- #: admin/includes/tab-settings.php:1409
1443
  msgid "database"
1444
  msgstr "ファイル"
1445
 
1446
- #: admin/includes/tab-settings.php:1410 classes/class-ip-geo-block-cron.php:424
1447
  #, php-format
1448
  msgid "Last update: %s"
1449
  msgstr "最終更新:%s"
1450
 
1451
- #: admin/includes/tab-settings.php:1432
1452
  msgid "Auto updating (once a month)"
1453
  msgstr "自動更新(月1回)"
1454
 
1455
- #: admin/includes/tab-settings.php:1450
1456
  msgid "Download database"
1457
  msgstr "データベースのダウンロード"
1458
 
1459
- #: admin/includes/tab-settings.php:1458
1460
  msgid "Download now"
1461
  msgstr "今すぐダウンロード"
1462
 
1463
- #: admin/includes/tab-settings.php:1469
1464
  msgid "Plugin settings"
1465
  msgstr "プラグインの設定"
1466
 
1467
- #: admin/includes/tab-settings.php:1481
1468
  msgid ""
1469
  "<dfn title=\"Synchronize all settings over the network wide.\">Network wide "
1470
  "settings</dfn>"
1471
  msgstr "<dfn title=\"全ての設定をネットワーク全体で同期させます。\">ネットワーク内で設定を同期</dfn>"
1472
 
1473
- #: admin/includes/tab-settings.php:1499
1474
  msgid ""
1475
  "<dfn title=\"You can access to the login form with a specific key at "
1476
  "emergency. Please add the generated link to favorites / bookmarks in your "
@@ -1480,7 +1556,7 @@ msgstr ""
1480
  "<dfn title=\"緊急時にもログイン可能なリンクを生成します。キー自体は保存されないので、生成したリンクを"
1481
  "ブラウザのお気に入り/ブックマークに追加してください。\">緊急時用ログイン・リンク</dfn>"
1482
 
1483
- #: admin/includes/tab-settings.php:1515
1484
  msgid ""
1485
  "<dfn title=\"Valid key for Google Maps JavaScript API. Maps Embed API in "
1486
  "iframe can be available without key in case it's empty.\">Google Maps API "
@@ -1489,55 +1565,55 @@ msgstr ""
1489
  "<dfn title=\"Google Maps JavaScript API の有効なキー。空欄にするとキーなしの Maps Embed API が使用可"
1490
  "能です。\">Google Maps API キー</dfn>"
1491
 
1492
- #: admin/includes/tab-settings.php:1531
1493
  msgid "Export / Import settings"
1494
  msgstr "設定のエクスポート、インポート"
1495
 
1496
- #: admin/includes/tab-settings.php:1538
1497
  msgid "Export settings"
1498
  msgstr "エクスポート"
1499
 
1500
- #: admin/includes/tab-settings.php:1539
1501
  msgid "Import from the local file"
1502
  msgstr "ローカル・ファイルからインポートします"
1503
 
1504
- #: admin/includes/tab-settings.php:1539
1505
  msgid "Import settings"
1506
  msgstr "インポート"
1507
 
1508
- #: admin/includes/tab-settings.php:1547
1509
  msgid "Import pre-defined settings"
1510
  msgstr "プリセットのインポート"
1511
 
1512
- #: admin/includes/tab-settings.php:1554
1513
  msgid ""
1514
  "Import the default settings to revert to the &#8220;Right after "
1515
  "installing&#8221; state"
1516
  msgstr "インストール直後の状態に戻すための設定値をインポートします"
1517
 
1518
- #: admin/includes/tab-settings.php:1554
1519
  msgid "Default settings"
1520
  msgstr "初期設定"
1521
 
1522
- #: admin/includes/tab-settings.php:1555
1523
  msgid ""
1524
  "Import the preferred settings mainly by enabling Zero-day Exploit Prevention "
1525
  "for the &#8220;Back-end target settings&#8221;"
1526
  msgstr "「ゼロデイ攻撃の遮断」など、主に[バックエンドの設定]の推奨設定をインポートします"
1527
 
1528
- #: admin/includes/tab-settings.php:1555
1529
  msgid "Best for Back-end"
1530
  msgstr "バックエンドの推奨設定"
1531
 
1532
- #: admin/includes/tab-settings.php:1564
1533
  msgid "Diagnose all DB tables"
1534
  msgstr "全データベース・テーブルの検査"
1535
 
1536
- #: admin/includes/tab-settings.php:1572
1537
  msgid "Diagnose now"
1538
  msgstr "今すぐ検査"
1539
 
1540
- #: admin/includes/tab-settings.php:1581
1541
  msgid ""
1542
  "<dfn title=\"When you have some unexpected blocking experiences, please "
1543
  "press the button to find the blocked requests at the end of dumped "
@@ -1551,15 +1627,15 @@ msgstr ""
1551
  "org/support/plugin/ip-geo-block\" title=\"[IP Geo Block] Support | WordPress.org\">サポート・フォーラ"
1552
  "ム</a> ]"
1553
 
1554
- #: admin/includes/tab-settings.php:1588
1555
  msgid "Please copy &amp; paste when submitting your issue to support forum"
1556
  msgstr "フォーラムに問題を投稿する際、コピーして張り付けてください"
1557
 
1558
- #: admin/includes/tab-settings.php:1588
1559
  msgid "Show information"
1560
  msgstr "情報を表示"
1561
 
1562
- #: admin/includes/tab-settings.php:1605
1563
  msgid ""
1564
  "While Geolite2 / Maxmind and IP2Location will fetch the local databases, "
1565
  "others will pass an IP address to the 3rd parties' API via HTTP."
@@ -1567,14 +1643,14 @@ msgstr ""
1567
  "MaxmindとIP2Locationはローカルのデータベースを検索しますが、他はHTTPを介して外部のAPIにIPアドレスを渡"
1568
  "します。"
1569
 
1570
- #: admin/includes/tab-settings.php:1606
1571
  msgid ""
1572
  "Please select the appropriate APIs to fit the privacy law / regulation in "
1573
  "your country / region."
1574
  msgstr ""
1575
  "あなたの国/地域におけるプライバシー保護の法規・条例に適合するよう、適切なAPIを選択して下さい。"
1576
 
1577
- #: admin/includes/tab-settings.php:1615
1578
  #, php-format
1579
  msgid ""
1580
  "Maxmind GeoLite2 databases and APIs need PHP version 5.4.0+ and %sPECL phar "
@@ -1583,13 +1659,12 @@ msgstr ""
1583
  "Maxmind GeoLite2 データベースと API には、PHP バージョン 5.4.0 以上と %sPECL phar 2.0.0 以上%sが必要"
1584
  "です。"
1585
 
1586
- #: admin/includes/tab-settings.php:1623
1587
  #, php-format
1588
  msgid ""
1589
  "Please refer to \"%sLiving with cache plugin%s\" for compatibility with "
1590
  "cache plugins."
1591
- msgstr ""
1592
- "キャッシュ・プラグインとの互換性については、%sこのドキュメント%s を参照して下さい。"
1593
 
1594
  #: admin/includes/tab-statistics.php:18
1595
  msgid "Statistics of validation"
@@ -1691,16 +1766,16 @@ msgstr "[%sIPアドレスをキャッシュに記録%s]が無効です。"
1691
  msgid "Please set the proper condition to record IP address in cache."
1692
  msgstr "キャッシュを利用しサイトの応答性を上げるためには、適切な条件を設定して下さい。"
1693
 
1694
- #: classes/class-ip-geo-block-cron.php:223
1695
  #, php-format
1696
  msgid "Can't lock <code>%s</code>. Please try again after a while."
1697
  msgstr "<code>%s</code> をロック出来ません。パーミッションをチェックして下さい。"
1698
 
1699
- #: classes/class-ip-geo-block-cron.php:302
1700
  msgid "Your database file is up-to-date."
1701
  msgstr "データベース・ファイルは最新です。"
1702
 
1703
- #: classes/class-ip-geo-block-cron.php:405
1704
  msgid "gz or zip is not supported on your system."
1705
  msgstr "gz または zip がサポートされていません。"
1706
 
@@ -1743,12 +1818,19 @@ msgid ""
1743
  "again."
1744
  msgstr "%s 用のカラム型が一致しません。一旦このプラグインを無効化し、再度有効化して下さい。"
1745
 
1746
- #: wp-content/ip-geo-api/ip2location/class-ip2location.php:151
1747
- #: wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php:144
1748
- #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:228
1749
  msgid "Database file does not exist."
1750
  msgstr "データベース・ファイルが見つかりません。"
1751
 
 
 
 
 
 
 
 
1752
  #: wp-content/mu-plugins/ip-geo-block-mu.php:72
1753
  #, php-format
1754
  msgid ""
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.17\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ip-geo-block\n"
7
+ "POT-Creation-Date: 2018-12-03 23:01+0900\n"
8
+ "PO-Revision-Date: 2018-12-03 23:04+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:296
32
  msgid "Are you sure ?"
33
  msgstr "実行してもよいですか?"
34
 
35
+ #: admin/class-ip-geo-block-admin.php:297
36
+ #: admin/class-ip-geo-block-admin.php:791
37
  msgid "Open a new window"
38
  msgstr "別窓で開く"
39
 
40
+ #: admin/class-ip-geo-block-admin.php:298 admin/includes/tab-settings.php:1528
41
  msgid "Generate new link"
42
  msgstr "新しいリンクを生成"
43
 
44
+ #: admin/class-ip-geo-block-admin.php:299 admin/includes/tab-settings.php:1529
45
  msgid "Delete current link"
46
  msgstr "生成したリンクを削除"
47
 
48
+ #: admin/class-ip-geo-block-admin.php:300
49
  msgid ""
50
  "Please add the following link to favorites / bookmarks in your browser : "
51
  msgstr "次のリンクをブラウザのお気に入り/ブックマークに追加して下さい : "
52
 
53
+ #: admin/class-ip-geo-block-admin.php:301
54
  msgid "ajax for logged-in user"
55
  msgstr "認証済ユーザー用 ajax"
56
 
57
+ #: admin/class-ip-geo-block-admin.php:302
58
  msgid "ajax for non logged-in user"
59
  msgstr "未認証ユーザー用 ajax"
60
 
61
+ #: admin/class-ip-geo-block-admin.php:303
62
  #, php-format
63
  msgid "[Found: %d]"
64
  msgstr "[見つかった数:%d]"
65
 
66
+ #: admin/class-ip-geo-block-admin.php:304
67
  #, php-format
68
  msgid "Find and verify `%s` on &#8220;Logs&#8221; tab."
69
  msgstr "ログから `%s` を検索し、検証して下さい。"
70
 
71
+ #: admin/class-ip-geo-block-admin.php:305
72
  msgid "This feature is available with HTML5 compliant browsers."
73
  msgstr "HTML5準拠のブラウザでのみ機能します。"
74
 
75
+ #: admin/class-ip-geo-block-admin.php:306
76
  msgid "The selected row cannot be found in the table."
77
  msgstr "テーブル中に選択された行が見つかりません。"
78
 
79
+ #: admin/class-ip-geo-block-admin.php:307
80
+ #: admin/class-ip-geo-block-admin.php:1694
81
  #, php-format
82
  msgid "An error occurred while executing the ajax command `%s`."
83
  msgstr "Ajaxコマンド `%s` の実行中にエラーが発生しました。"
84
 
85
+ #: admin/class-ip-geo-block-admin.php:311
86
  msgid "No data available in table"
87
  msgstr "テーブルにデータがありません"
88
 
89
+ #: admin/class-ip-geo-block-admin.php:312
90
  msgid "No matching records found"
91
  msgstr "一致するレコードがありません"
92
 
93
+ #: admin/class-ip-geo-block-admin.php:313
94
  #: admin/includes/class-admin-ajax.php:107
95
  #: admin/includes/class-admin-ajax.php:240
96
  #: admin/includes/tab-geolocation.php:74
97
  msgid "IP address"
98
  msgstr "IPアドレス"
99
 
100
+ #: admin/class-ip-geo-block-admin.php:314
101
  #: admin/includes/class-admin-ajax.php:108
102
  #: admin/includes/class-admin-ajax.php:241
103
  msgid "Code"
104
  msgstr "国"
105
 
106
+ #: admin/class-ip-geo-block-admin.php:315
107
  #: admin/includes/class-admin-ajax.php:109
108
  #: admin/includes/class-admin-ajax.php:242
109
  msgid "ASN"
110
  msgstr "AS番号"
111
 
112
+ #: admin/class-ip-geo-block-admin.php:316
113
  #: admin/includes/class-admin-ajax.php:243
114
  msgid "Host name"
115
  msgstr "ホスト名"
116
 
117
+ #: admin/class-ip-geo-block-admin.php:317
118
  #: admin/includes/class-admin-ajax.php:110
119
  #: admin/includes/class-admin-ajax.php:244
120
  msgid "Target"
121
  msgstr "検証対象"
122
 
123
+ #: admin/class-ip-geo-block-admin.php:318
124
  #: admin/includes/class-admin-ajax.php:245
125
  msgid "Failure / Total"
126
  msgstr "ログイン失敗/総計"
127
 
128
+ #: admin/class-ip-geo-block-admin.php:319
129
  #: admin/includes/class-admin-ajax.php:246
130
  msgid "Elapsed[sec]"
131
  msgstr "経過 [秒]"
132
 
133
+ #: admin/class-ip-geo-block-admin.php:320
134
  #: admin/includes/class-admin-ajax.php:106
135
  msgid "Time"
136
  msgstr "日時"
137
 
138
+ #: admin/class-ip-geo-block-admin.php:321
139
  #: admin/includes/class-admin-ajax.php:111
140
  msgid "Result"
141
  msgstr "検証結果"
142
 
143
+ #: admin/class-ip-geo-block-admin.php:322
144
  #: admin/includes/class-admin-ajax.php:112
145
  msgid "Request"
146
  msgstr "リクエスト"
147
 
148
+ #: admin/class-ip-geo-block-admin.php:323
149
  #: admin/includes/class-admin-ajax.php:113
150
  msgid "User agent"
151
  msgstr "ユーザー・エージェント"
152
 
153
+ #: admin/class-ip-geo-block-admin.php:324
154
  #: admin/includes/class-admin-ajax.php:114
155
  msgid "HTTP headers"
156
  msgstr "HTTP ヘッダー"
157
 
158
+ #: admin/class-ip-geo-block-admin.php:325
159
  #: admin/includes/class-admin-ajax.php:115
160
  msgid "$_POST data"
161
  msgstr "$_POST データ"
162
 
163
+ #: admin/class-ip-geo-block-admin.php:351
164
  msgid "Contribute on GitHub"
165
  msgstr "開発に参加"
166
 
167
+ #: admin/class-ip-geo-block-admin.php:365
168
+ #: admin/class-ip-geo-block-admin.php:491
169
+ #: admin/class-ip-geo-block-admin.php:732
170
+ #: admin/class-ip-geo-block-admin.php:752
171
+ #: admin/class-ip-geo-block-admin.php:768
172
  msgid "Settings"
173
  msgstr "設定"
174
 
175
+ #: admin/class-ip-geo-block-admin.php:459
176
  #: admin/class-ip-geo-block-admin.php:460
177
+ #: admin/class-ip-geo-block-admin.php:470
178
  #: admin/class-ip-geo-block-admin.php:471
179
+ #: admin/class-ip-geo-block-admin.php:480
180
+ #: admin/class-ip-geo-block-admin.php:490
 
181
  msgid "IP Geo Block"
182
  msgstr "IP Geo Block"
183
 
184
+ #: admin/class-ip-geo-block-admin.php:481
185
+ #: admin/class-ip-geo-block-admin.php:731
186
+ #: admin/class-ip-geo-block-admin.php:749
187
+ #: admin/class-ip-geo-block-admin.php:766
188
  msgid "Sites list"
189
  msgstr "サイト一覧"
190
 
191
+ #: admin/class-ip-geo-block-admin.php:521
192
  msgid "You need WordPress 3.7+."
193
  msgstr "WordPress 3.7 以上が必要です。"
194
 
195
+ #: admin/class-ip-geo-block-admin.php:525
196
  #, php-format
197
  msgid ""
198
  "Can not load Geolocation API libraries from <code>%s</code>. It seems to "
201
  "contents of tokkonopapa/WordPress-IP-Geo-API as a zip file\">ZIP file</a> "
202
  "from <a rel=\"noreferrer\" href=\"https://github.com/tokkonopapa/WordPress-"
203
  "IP-Geo-API\" title=\"tokkonopapa/WordPress-IP-Geo-API - GitHub\">WordPress-"
204
+ "IP-Geo-API</a>. Try to deactivate IP Geo Block once and activate it again, "
205
+ "or install <code>ip-geo-api</code> with write permission according to <a rel="
206
+ "\"noreferrer\" href=\"https://www.ipgeoblock.com/codex/how-to-fix-permission-"
207
+ "troubles.html\" title=\"How can I fix permission troubles? | IP Geo Block"
208
+ "\">this instruction</a>."
209
  msgstr ""
210
  "<code>%s</code> に位置情報APIライブラリが見つかりません。<a rel=\"noreferrer\" href=\"https://github."
211
  "com/tokkonopapa/WordPress-IP-Geo-API\" title=\"tokkonopapa/WordPress-IP-Geo-API - GitHub\">WordPress-"
212
  "IP-Geo-API</a> から <a rel=\"noreferrer\" href=\"https://github.com/tokkonopapa/WordPress-IP-Geo-API/"
213
  "archive/master.zip\" title=\"Download the contents of tokkonopapa/WordPress-IP-Geo-API as a zip file"
214
+ "\">ZIP file</a> のダウンロードに失敗したようです。一旦プラグインを無効化した後に再び有効化するか、<a "
215
+ "rel=\"noreferrer\" href=\"https://www.ipgeoblock.com/codex/how-to-fix-permission-troubles.html\" "
216
+ "title=\"How can I fix permission troubles? | IP Geo Block\">FAQ</a> を参照し、適切な書き込み権限と共"
217
+ "に <code>ip-geo-api</code> をインストールしてください。"
218
 
219
+ #: admin/class-ip-geo-block-admin.php:534
220
  #, php-format
221
  msgid ""
222
  "You should select at least one API at <a href=\"%s\">Geolocation API "
226
  "<a href=\"%s\">位置情報APIの設定</a>で、少なくとも1つ以上のAPIを選択して下さい。未選択の場合、キャッ"
227
  "シュの有効期限切れと共にロックアウトされます。"
228
 
229
+ #: admin/class-ip-geo-block-admin.php:543
230
  #, php-format
231
  msgid ""
232
  "You should select at least one API for local database at <a href=\"%s"
236
  "<a href=\"%s\">位置情報APIの設定</a>で、ローカルデータベース用のAPIを少なくとも1つ以上選択して下さ"
237
  "い。未選択の場合、外部APIへのアクセスにより、サイトの応答性が悪くなります。"
238
 
239
+ #: admin/class-ip-geo-block-admin.php:554
240
  #, php-format
241
  msgid ""
242
  "Now downloading geolocation databases in background. After a little while, "
247
  "と[<strong>マッチング規則</strong>]を[<a href=\"%s\">検証ルールと振る舞いの設定</a>]で確認して下"
248
  "さい。"
249
 
250
+ #: admin/class-ip-geo-block-admin.php:560
251
  #, php-format
252
  msgid ""
253
  "The &#8220;<strong>Matching rule</strong>&#8221; is not set properly. Please "
256
  "[<strong>マッチング規則</strong>]が正しく設定されていません。[<a href=\"%s\">検証ルールと振る舞い"
257
  "の設定</a>]を確認して下さい。"
258
 
259
+ #: admin/class-ip-geo-block-admin.php:569
260
  msgid "Local database and matching rule have been updated."
261
  msgstr "ローカル・データベースとマッチング規則を更新しました。"
262
 
263
+ #: admin/class-ip-geo-block-admin.php:580
264
  msgid ""
265
  "Once you logout, you will be unable to login again because the number of "
266
  "login attempts reaches the limit."
268
  "あなたのIPアドレスのログイン試行可能回数がリミットに達したため、ログアウトすると再びログインする事が"
269
  "出来なくなります。"
270
 
271
+ #: admin/class-ip-geo-block-admin.php:582
272
  #, php-format
273
  msgid ""
274
  "Please remove your IP address in &#8220;%1$sStatistics in IP address cache"
278
  "[%3$s統計%4$s]タブの[%1$sIPアドレスのキャッシュ%2$s]から自身のIPアドレスを削除し、ロックアウトを"
279
  "回避してください。"
280
 
281
+ #: admin/class-ip-geo-block-admin.php:593
282
  msgid ""
283
  "Once you logout, you will be unable to login again because your country code "
284
  "or IP address is in the blacklist."
286
  "あなたの国コードまたはIPアドレスがブラックリストに含まれているため、ログアウトすると再びログインする"
287
  "事が出来なくなります。"
288
 
289
+ #: admin/class-ip-geo-block-admin.php:594
290
  msgid ""
291
  "Once you logout, you will be unable to login again because your country code "
292
  "or IP address is not in the whitelist."
294
  "あなたの国コードまたはIPアドレスがホワイトリストに含まれていないため、ログアウトすると再びログインす"
295
  "る事が出来なくなります。"
296
 
297
+ #: admin/class-ip-geo-block-admin.php:598
298
  #, php-format
299
  msgid "Please check your &#8220;%sValidation rules and behavior%s&#8221;."
300
  msgstr "[%s検証ルールと振る舞いの設定%s]を確認して下さい。"
301
 
302
+ #: admin/class-ip-geo-block-admin.php:602
303
  #, php-format
304
  msgid ""
305
  "Please confirm your local geolocation database files exist at &#8220;%sLocal "
309
  "[%sローカル・データベースの設定%s]で位置情報データベース・ファイルの有無を確認して下さい。あるいは"
310
  "[%sキャッシュの統計%s]でキャッシュされているあなたのIPアドレスを削除して下さい。"
311
 
312
+ #: admin/class-ip-geo-block-admin.php:616
313
  #, php-format
314
  msgid ""
315
  "Emergency login link is outdated. Please delete it once and generate again "
319
  "緊急ログイン・リンクが古くなっています。[%sプラグインの設定%s]で一度削除してから再度生成してくださ"
320
  "い。 またブラウザのお気に入り/ブックマークも忘れずに更新して下さい。"
321
 
322
+ #: admin/class-ip-geo-block-admin.php:625
323
  msgid ""
324
  "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php) at &#8220;Validation "
325
  "timing&#8221; is imcompatible with <strong>IP Geo Allow</strong>. Please "
329
  "<strong>IP Geo Allow</strong> と互換性がありません。「&#8220;init&#8221; アクション・フック」を選択し"
330
  "てください。"
331
 
332
+ #: admin/class-ip-geo-block-admin.php:733
333
  msgid "Statistics"
334
  msgstr "統計"
335
 
336
+ #: admin/class-ip-geo-block-admin.php:734
337
  msgid "Logs"
338
  msgstr "ログ"
339
 
340
+ #: admin/class-ip-geo-block-admin.php:735
341
  msgid "Search"
342
  msgstr "検索"
343
 
344
+ #: admin/class-ip-geo-block-admin.php:736
345
  msgid "Attribution"
346
  msgstr "リンク"
347
 
348
+ #: admin/class-ip-geo-block-admin.php:784
 
 
 
 
 
349
  msgid "Toggle all"
350
  msgstr "全てを開閉"
351
 
352
+ #: admin/class-ip-geo-block-admin.php:787
353
  msgid ""
354
  "Independent of &#8220;Privacy and record settings&#8221;, you can see all "
355
  "the requests validated by this plugin in almost real time."
357
  "[プライバシーと記録の設定]にかかわらず、このプラグインによる検証結果のすべてを、ほぼリアルタイムに"
358
  "表示します。"
359
 
360
+ #: admin/class-ip-geo-block-admin.php:787 admin/includes/tab-accesslog.php:39
361
  msgid "Live update"
362
  msgstr "ライブアップデート"
363
 
364
+ #: admin/class-ip-geo-block-admin.php:791
365
  msgid "Open a new window on clicking the link in the chart."
366
  msgstr "チャート内のリンクをクリックすると、新しいウィンドウが開きます。"
367
 
368
+ #: admin/class-ip-geo-block-admin.php:815
369
  msgid "Thanks for providing these great services for free."
370
  msgstr "これらのすばらしいサービスの提供元に、敬意と感謝の意を表します!"
371
 
372
+ #: admin/class-ip-geo-block-admin.php:816
373
  msgid ""
374
  "(Most browsers will redirect you to each site <a href=\"https://www."
375
  "ipgeoblock.com/etc/referer.html\" title=\"Referer Checker\">without referrer "
378
  "(ほとんどのブラウザでは、<a href=\"https://www.ipgeoblock.com/etc/referer.html\" title=\"Referer "
379
  "Checker\">参照元を残さずにリンク先にリダイレクトできます</a>。)"
380
 
381
+ #: admin/class-ip-geo-block-admin.php:821
382
  msgid "Back to top"
383
  msgstr "トップに戻る"
384
 
385
+ #: admin/class-ip-geo-block-admin.php:913
386
  msgid "Enable"
387
  msgstr "有効"
388
 
389
+ #: admin/class-ip-geo-block-admin.php:928
390
  msgid "Select one"
391
  msgstr "何れかを選択"
392
 
393
+ #: admin/class-ip-geo-block-admin.php:1363
394
  msgid "You do not have sufficient permissions to access this page."
395
  msgstr "このページにアクセスするための十分な権限がありません。"
396
 
397
+ #: admin/class-ip-geo-block-admin.php:1390
398
  #: admin/includes/class-admin-rewrite.php:194
399
+ #: classes/class-ip-geo-block-cron.php:228
400
+ #: classes/class-ip-geo-block-cron.php:332
401
+ #: classes/class-ip-geo-block-cron.php:410
402
+ #: classes/class-ip-geo-block-opts.php:482
403
  #, php-format
404
  msgid "Unable to write <code>%s</code>. Please check the permission."
405
  msgstr "<code>%s</code> に書き込めません。パーミッションをチェックして下さい。"
406
 
407
+ #: admin/class-ip-geo-block-admin.php:1424
408
  msgid "Settings saved."
409
  msgstr "設定を保存しました。"
410
 
411
+ #: admin/class-ip-geo-block-admin.php:1529
412
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:91
413
+ msgid ""
414
+ "<span title=\"Show only passed entries whose country codes are in Whitelist."
415
+ "\">Passed in Whitelist</span>"
416
+ msgstr ""
417
+ "<span title=\"ホワイトリストに国コードが有る、通過したエントリのみを表示します。\">ホワイトリスト通過"
418
+ "</span>"
419
+
420
+ #: admin/class-ip-geo-block-admin.php:1530
421
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:92
422
+ msgid ""
423
+ "<span title=\"Show only passed entries whose country codes are in Blacklist."
424
+ "\">Passed in Blacklist</span>"
425
+ msgstr ""
426
+ "<span title=\"ブラックリストに国コードが有る、通過したエントリのみを表示します。\">ブラックリスト通過"
427
+ "</span>"
428
+
429
+ #: admin/class-ip-geo-block-admin.php:1531
430
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:93
431
+ msgid ""
432
+ "<span title=\"Show only passed entries whose country codes are not in either "
433
+ "list.\">Passed not in List</span>"
434
+ msgstr ""
435
+ "<span title=\"どちらのリストにも国コードが無い、通過したエントリのみを表示します。\">どちらにも無く通"
436
+ "過</span>"
437
+
438
+ #: admin/class-ip-geo-block-admin.php:1532
439
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:94
440
+ msgid ""
441
+ "<span title=\"Show only blocked entries whose country codes are in Whitelist."
442
+ "\">Blocked in Whitelist</span>"
443
+ msgstr ""
444
+ "<span title=\"ホワイトリストに国コードが有る、遮断したエントリのみを表示します。\">ホワイトリスト遮断"
445
+ "</span>"
446
+
447
+ #: admin/class-ip-geo-block-admin.php:1533
448
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:95
449
+ msgid ""
450
+ "<span title=\"Show only blocked entries whose country codes are in Blacklist."
451
+ "\">Blocked in Blacklist</span>"
452
+ msgstr ""
453
+ "<span title=\"ブラックリストに国コードが有る、遮断したエントリのみを表示します。\">ブラックリスト遮断"
454
+ "</span>"
455
+
456
+ #: admin/class-ip-geo-block-admin.php:1534
457
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:96
458
+ msgid ""
459
+ "<span title=\"Show only blocked entries whose country codes are not in "
460
+ "either list.\">Blocked not in List</span>"
461
+ msgstr ""
462
+ "<span title=\"どちらのリストにも国コードが無い、遮断したエントリのみを表示します。\">どちらにも無く遮"
463
+ "断</span>"
464
+
465
  #: admin/includes/class-admin-ajax.php:72
466
  #: admin/includes/class-admin-ajax.php:75 admin/includes/tab-settings.php:84
467
  #: admin/includes/tab-settings.php:103
480
  msgstr "%sは誤ったフォーマットです。該当行を削除し、再実行してください。"
481
 
482
  #: admin/includes/class-admin-rewrite.php:168
483
+ #: classes/class-ip-geo-block-cron.php:223
484
+ #: classes/class-ip-geo-block-cron.php:405
485
  #, php-format
486
  msgid "Unable to read <code>%s</code>. Please check the permission."
487
  msgstr "<code>%s</code> が読めません。パーミッションをチェックして下さい。"
505
  msgid "Help"
506
  msgstr "ヘルプ"
507
 
508
+ #: admin/includes/tab-accesslog.php:55 admin/includes/tab-settings.php:450
509
  msgid "Comment post"
510
  msgstr "コメント投稿"
511
 
512
+ #: admin/includes/tab-accesslog.php:56 admin/includes/tab-settings.php:451
513
  msgid "XML-RPC"
514
  msgstr "XML-RPC"
515
 
516
+ #: admin/includes/tab-accesslog.php:57 admin/includes/tab-settings.php:452
517
  msgid "Login form"
518
  msgstr "ログイン・フォーム"
519
 
520
+ #: admin/includes/tab-accesslog.php:58 admin/includes/tab-settings.php:453
521
  msgid "Admin area"
522
  msgstr "管理領域"
523
 
524
+ #: admin/includes/tab-accesslog.php:59 admin/includes/tab-settings.php:455
525
  msgid "Public facing pages"
526
  msgstr "一般公開ページ"
527
 
541
  msgid "Reset"
542
  msgstr "リセット"
543
 
544
+ #: admin/includes/tab-accesslog.php:117
545
  msgid "Preset filters"
546
  msgstr "プリセット・フィルタ"
547
 
548
+ #: admin/includes/tab-accesslog.php:133 admin/includes/tab-statistics.php:238
549
  msgid "Bulk action"
550
  msgstr "選択して実行"
551
 
552
+ #: admin/includes/tab-accesslog.php:144 admin/includes/tab-statistics.php:249
553
  msgid "Remove entries by IP address"
554
  msgstr "指定のIPアドレスでエントリを削除"
555
 
556
+ #: admin/includes/tab-accesslog.php:145 admin/includes/tab-statistics.php:250
557
  msgid "Add IP address to &#8220;Whitelist&#8221;"
558
  msgstr "IPアドレスをホワイトリストへ追加"
559
 
560
+ #: admin/includes/tab-accesslog.php:146 admin/includes/tab-statistics.php:251
561
  msgid "Add IP address to &#8220;Blacklist&#8221;"
562
  msgstr "IPアドレスをブラックリストへ追加"
563
 
564
+ #: admin/includes/tab-accesslog.php:147 admin/includes/tab-statistics.php:252
565
  msgid "Add AS number to &#8220;Whitelist&#8221;"
566
  msgstr "AS番号をホワイトリストへ追加"
567
 
568
+ #: admin/includes/tab-accesslog.php:148 admin/includes/tab-statistics.php:253
569
  msgid "Add AS number to &#8220;Blacklist&#8221;"
570
  msgstr "AS番号をブラックリストへ追加"
571
 
572
+ #: admin/includes/tab-accesslog.php:150 admin/includes/tab-network.php:56
573
  #: admin/includes/tab-statistics.php:255
574
  msgid "Apply"
575
  msgstr "実行する"
576
 
577
+ #: admin/includes/tab-accesslog.php:157 admin/includes/tab-statistics.php:191
578
  msgid "Clear logs"
579
  msgstr "ログをクリア"
580
 
581
+ #: admin/includes/tab-accesslog.php:165 admin/includes/tab-statistics.php:167
582
  #: admin/includes/tab-statistics.php:199 admin/includes/tab-statistics.php:269
583
  msgid "Clear all"
584
  msgstr "全てをクリア"
585
 
586
+ #: admin/includes/tab-accesslog.php:174
587
  msgid "Export logs"
588
  msgstr "ログをエクスポート"
589
 
590
+ #: admin/includes/tab-accesslog.php:180 admin/includes/tab-settings.php:1560
591
  #: admin/includes/tab-statistics.php:283
592
  msgid "Export to the local file"
593
  msgstr "ローカル・ファイルへエクスポートする"
594
 
595
+ #: admin/includes/tab-accesslog.php:180 admin/includes/tab-statistics.php:283
596
  msgid "Export csv"
597
  msgstr "CSVへエクスポート"
598
 
599
+ #: admin/includes/tab-accesslog.php:206 admin/includes/tab-network.php:112
600
  #: admin/includes/tab-statistics.php:410
601
  #, php-format
602
  msgid "[ %sRecord &#8220;Validation logs&#8221;%s ] is disabled."
603
  msgstr "[%s検証のログを記録%s]が無効です。"
604
 
605
+ #: admin/includes/tab-accesslog.php:207 admin/includes/tab-network.php:113
606
  #: admin/includes/tab-statistics.php:411
607
  msgid ""
608
  "Please set the proper condition to record and analyze the validation logs."
620
  msgid "Geolocation API"
621
  msgstr "位置情報API"
622
 
623
+ #: admin/includes/tab-geolocation.php:89 admin/includes/tab-settings.php:1105
624
  msgid ""
625
  "<dfn title=\"IP address is always encrypted on recording in Cache and Logs. "
626
  "Moreover, this option replaces the end of IP address with &#8220;***&#8221; "
771
  "の国にもマッチさせないことが必要な場合には、「YY」を指定してください。\">国コードのブラックリスト</"
772
  "dfn>"
773
 
774
+ #: admin/includes/tab-settings.php:125 admin/includes/tab-settings.php:827
775
  msgid "Matching rule"
776
  msgstr "マッチング規則"
777
 
893
  "ング]を「&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)」に設定することを検討してください。\">悪意の"
894
  "あるアップロード防止</dfn>"
895
 
896
+ #: admin/includes/tab-settings.php:304 admin/includes/tab-settings.php:516
897
+ #: admin/includes/tab-settings.php:661 admin/includes/tab-settings.php:1177
898
  msgid "Disable"
899
  msgstr "無効"
900
 
906
  msgid "Verify file extension only"
907
  msgstr "ファイル拡張子のみを検証"
908
 
909
+ #: admin/includes/tab-settings.php:314
910
+ msgid ""
911
+ "<dfn title=\"Specify the table names to be verified for single site. This "
912
+ "verification will be skipped if empty.\">pre_update_option</dfn>"
913
+ msgstr ""
914
+ "<dfn title=\"データベース中のシングルサイト用テーブル名を指定します。空欄の場合、この検証はスキップさ"
915
+ "れます。\">pre_update_option</dfn>"
916
+
917
+ #: admin/includes/tab-settings.php:316
918
+ msgid ""
919
+ "<dfn title=\"Specify the table names to be verified for multisite. This "
920
+ "verification will be skipped if empty.\">pre_update_site_option</dfn>"
921
+ msgstr ""
922
+ "<dfn title=\"データベース中のマルチサイト用テーブル名を指定します。空欄の場合、この検証はスキップされ"
923
+ "ます。\">pre_update_site_option</dfn>"
924
+
925
+ #: admin/includes/tab-settings.php:321
926
+ msgid ""
927
+ "<dfn title=\"It prevents to manipulate metadata in database without admin "
928
+ "privilege.\">Prevent metadata alteration</dfn>"
929
+ msgstr "<dfn title=\"管理者権限なくメタデータが改変される事を防止します。\">メタデータの改竄防止</dfn>"
930
+
931
+ #: admin/includes/tab-settings.php:337
932
  #, php-format
933
  msgid ""
934
  "<dfn title=\"You can put your original 403.php and so on into your theme "
937
  "<dfn title=\"テーマ・ディレクトリには 403.php など、独自のファイルを設置する事が出来ます。\">レスポン"
938
  "ス・コード</dfn> %s"
939
 
940
+ #: admin/includes/tab-settings.php:366 admin/includes/tab-settings.php:910
941
  msgid ""
942
  "<dfn title=\"Specify the URL for response code 2xx and 3xx. If it is pointed "
943
  "to a public facing page, visitors would not be blocked on the page to "
949
  "避けるため、自サイト内の URL は[フロントエンドの設定]に関わらず遮断の対象外となります。空欄の場合、"
950
  "サイトのホームが使用されます。\">リダイレクト先 URL</dfn>"
951
 
952
+ #: admin/includes/tab-settings.php:383 admin/includes/tab-settings.php:928
953
  msgid ""
954
  "<dfn title=\"Specify the message for response code 4xx and 5xx.\">Response "
955
  "message</dfn>"
956
  msgstr ""
957
  "<dfn title=\"レスポンス・コード 4xx、5xx 用のメッセージを指定します。\">レスポンス・メッセージ</dfn>"
958
 
959
+ #: admin/includes/tab-settings.php:401
960
  msgid "Select when to run the validation."
961
  msgstr "検証を実行するタイミングを選択します。"
962
 
963
+ #: admin/includes/tab-settings.php:401
964
  msgid "Validation timing"
965
  msgstr "検証のタイミング"
966
 
967
+ #: admin/includes/tab-settings.php:412
968
  msgid "&#8220;init&#8221; action hook"
969
  msgstr "&#8220;init&#8221; アクション・フック"
970
 
971
+ #: admin/includes/tab-settings.php:413
972
  msgid "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)"
973
  msgstr "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)"
974
 
975
+ #: admin/includes/tab-settings.php:416
976
  msgid ""
977
  "Validate at &#8220;init&#8221; action hook in the same manner as typical "
978
  "plugins."
979
  msgstr "標準的な他のプラグインと同様、init アクション・フックのタイミングで検証を実行します。"
980
 
981
+ #: admin/includes/tab-settings.php:417
982
  msgid ""
983
  "Validate at an earlier phase than other typical plugins. It can reduce load "
984
  "on server but has <a rel='noreferrer' href='https://www.ipgeoblock.com/codex/"
989
  "が、<a rel=‘noreferrer’ href=‘https://www.ipgeoblock.com/codex/validation-timing.html' "
990
  "title=‘Validation timing | IP Geo Block’>幾つかの制限事項</a> が生じます。"
991
 
992
+ #: admin/includes/tab-settings.php:425
993
  msgid ""
994
  "It enables to simulate the validation rules without actual blocking in order "
995
  "to check the behavior of this plugin. The results can be found on &#8220;"
998
  "このプラグインの動作を確認するために、実際に遮断させることなく検証ルールをシミュレートします。結果は"
999
  "ログで確認する事が出来ます。"
1000
 
1001
+ #: admin/includes/tab-settings.php:425
1002
  msgid "Simulation mode"
1003
  msgstr "シミュレーション・モード"
1004
 
1005
+ #: admin/includes/tab-settings.php:442
1006
  msgid "Back-end target settings"
1007
  msgstr "バックエンドの設定"
1008
 
1009
+ #: admin/includes/tab-settings.php:448
1010
  #, php-format
1011
  msgid "<dfn title=\"It enables to validate requests to %s.\">%s</dfn>"
1012
  msgstr "<dfn title=\"%s へのリクエストを検証します。\">%s</dfn>"
1013
 
1014
+ #: admin/includes/tab-settings.php:454
1015
  msgid "Other areas"
1016
  msgstr "その他の領域"
1017
 
1018
+ #: admin/includes/tab-settings.php:455
1019
  msgid "public facing pages"
1020
  msgstr "一般公開ページ"
1021
 
1022
+ #: admin/includes/tab-settings.php:471 admin/includes/tab-settings.php:517
1023
+ #: admin/includes/tab-settings.php:549 admin/includes/tab-settings.php:555
1024
+ #: admin/includes/tab-settings.php:820
1025
  msgid "Block by country"
1026
  msgstr "国コードで遮断"
1027
 
1028
+ #: admin/includes/tab-settings.php:481
1029
  msgid "The whole will be wrapped by &lt;p&gt; tag. Allowed tags: "
1030
  msgstr "全体を &lt;p&gt; タグで囲みます。使用可能タグ:"
1031
 
1032
+ #: admin/includes/tab-settings.php:481
1033
  msgid "Message on comment form"
1034
  msgstr "投稿フォーム上のメッセージ"
1035
 
1036
+ #: admin/includes/tab-settings.php:494
1037
  msgid "None"
1038
  msgstr "なし"
1039
 
1040
+ #: admin/includes/tab-settings.php:495
1041
  msgid "Top"
1042
  msgstr "上部"
1043
 
1044
+ #: admin/includes/tab-settings.php:496
1045
  msgid "Bottom"
1046
  msgstr "下部"
1047
 
1048
+ #: admin/includes/tab-settings.php:518
1049
  msgid "Completely close"
1050
  msgstr "完全に閉鎖"
1051
 
1052
+ #: admin/includes/tab-settings.php:524
1053
  msgid "Action to login as a registered user."
1054
  msgstr "登録済みユーザーとしてログインするアクション。"
1055
 
1056
+ #: admin/includes/tab-settings.php:524
1057
  msgid "Log in"
1058
  msgstr "ログイン"
1059
 
1060
+ #: admin/includes/tab-settings.php:525
1061
  msgid "Action to register new users."
1062
  msgstr "新規ユーザーを登録するアクション。"
1063
 
1064
+ #: admin/includes/tab-settings.php:525
1065
  msgid "Register"
1066
  msgstr "登録"
1067
 
1068
+ #: admin/includes/tab-settings.php:526
1069
  msgid "Action to reset a password to create a new one."
1070
  msgstr "パスワードをリセットし、新しいパスワードに更新するアクション。"
1071
 
1072
+ #: admin/includes/tab-settings.php:526
1073
  msgid "Password Reset"
1074
  msgstr "パスワードのリセット"
1075
 
1076
+ #: admin/includes/tab-settings.php:527
1077
  msgid "Action to email a password to a registered user."
1078
  msgstr "登録済みユーザーにパスワードを送付するアクション。"
1079
 
1080
+ #: admin/includes/tab-settings.php:527
1081
  msgid "Lost Password"
1082
  msgstr "パスワード紛失"
1083
 
1084
+ #: admin/includes/tab-settings.php:528
1085
  msgid ""
1086
  "Action to show prompt to enter a password on password protected post and "
1087
  "page."
1088
  msgstr "パスワードで保護された投稿とページにパスワードを入力するプロンプトを表示するアクション。"
1089
 
1090
+ #: admin/includes/tab-settings.php:528
1091
  msgid "Password protected"
1092
  msgstr "パスワード保護"
1093
 
1094
+ #: admin/includes/tab-settings.php:550
1095
  msgid ""
1096
  "<dfn title=\"Specify the individual action as a blocking target.\">Target "
1097
  "actions</dfn>"
1098
  msgstr "<dfn title=\"遮断対象とするアクションを指定します。\">対象アクション</dfn>"
1099
 
1100
+ #: admin/includes/tab-settings.php:556
1101
  msgid "Prevent Zero-day Exploit"
1102
  msgstr "ゼロデイ攻撃を遮断"
1103
 
1104
+ #: admin/includes/tab-settings.php:560
1105
  msgid ""
1106
+ "It will block a request related to the services for both &#8220;non-logged "
1107
+ "in user&#8221; and &#8220;logged-in user&#8221;."
1108
+ msgstr "認証済ユーザーおよび未認証ユーザー用のサービスに関連するリクエストを遮断します。"
1109
 
1110
+ #: admin/includes/tab-settings.php:561
1111
  msgid ""
1112
  "Regardless of the country code, it will block a malicious request related to "
1113
+ "the services only for &#8220;logged-in user&#8221;."
1114
+ msgstr "国コードにかかわらず、認証済ユーザー限定のサービスに関連する悪意のあるリクエストを遮断します。"
1115
 
1116
+ #: admin/includes/tab-settings.php:567
1117
  msgid ""
1118
  "This is applied to &#8220;XML-RPC&#8221; and &#8220;Login form&#8221; when "
1119
  "&#8220;IP address cache&#8221; in &#8220;Privacy and record settings&#8221; "
1123
  "[プライバシーと記録の設定]&raquo;[IPアドレスのキャッシュを記録]が有効の時、[XML-RPC]と[ログイ"
1124
  "ン・フォーム]に適用されます。ロックアウト時間は[有効時間]で定義します。"
1125
 
1126
+ #: admin/includes/tab-settings.php:567
1127
  msgid "Max failed login attempts per IP address"
1128
  msgstr "IPアドレス当たりのログイン試行可能回数"
1129
 
1130
+ #: admin/includes/tab-settings.php:608
1131
  msgid "admin post for logged-in user"
1132
  msgstr "認証済ユーザー用 admin post"
1133
 
1134
+ #: admin/includes/tab-settings.php:609
1135
  msgid "admin post for non logged-in user"
1136
  msgstr "未認証ユーザー用 admin post"
1137
 
1138
+ #: admin/includes/tab-settings.php:631
1139
  msgid "Admin ajax/post"
1140
  msgstr "管理領域 ajax/post"
1141
 
1142
+ #: admin/includes/tab-settings.php:645
1143
  msgid ""
1144
  "Specify the action name (&#8220;action=&hellip;&#8221;) or the page name "
1145
  "(&#8220;page=&hellip;&#8221;) to prevent unintended blocking caused by "
1151
  "&#8221; 部分)、またはページ名(&#8220;page=&hellip;&#8221; の &#8220;&hellip;&#8221; 部分)を指定"
1152
  "し、検証対象から除外します。"
1153
 
1154
+ #: admin/includes/tab-settings.php:645 admin/includes/tab-settings.php:723
1155
+ #: admin/includes/tab-settings.php:783
1156
  msgid "Exceptions"
1157
  msgstr "例外"
1158
 
1159
+ #: admin/includes/tab-settings.php:646
1160
  msgid "Toggle with non logged-in user"
1161
  msgstr "未認証ユーザー用を含む項目に限定して表示する"
1162
 
1163
+ #: admin/includes/tab-settings.php:649
1164
  msgid "Candidate actions/pages"
1165
  msgstr "候補 アクション/ページ"
1166
 
1167
+ #: admin/includes/tab-settings.php:663
1168
  #, php-format
1169
  msgid ""
1170
  "Regardless of the country code, it will block a malicious request to <code>"
1171
  "%s&ctdot;/*.php</code>."
1172
+ msgstr "国コードにかかわらず、<code>%s&ctdot;/*.php</code>への悪意のあるリクエストを遮断します。"
1173
 
1174
+ #: admin/includes/tab-settings.php:664
1175
  msgid ""
1176
  "Select the item which causes unintended blocking in order to exclude from "
1177
  "the validation target. Grayed item indicates &#8220;INACTIVE&#8221;."
1179
  "意図しない遮断の原因となる項目を選択し、検証対象から除外します。灰色で表示された項目は、「非アクティ"
1180
  "ブ」であることを示しています。"
1181
 
1182
+ #: admin/includes/tab-settings.php:665
1183
  #, php-format
1184
  msgid ""
1185
  "It configures &#8220;%s&#8221; to validate a direct request to the PHP file "
1189
  "WordPressコアを読み込まないPHPファイルへのリクエストを検証対象とするために、%s を設定します。ドットで"
1190
  "始まる隠しファイルへのアクセス拒否がサーバー側で設定されていることを確認して下さい。"
1191
 
1192
+ #: admin/includes/tab-settings.php:666
1193
  msgid "Sorry, but your server type is not supported."
1194
  msgstr "このサーバーではサポートされません。"
1195
 
1196
+ #: admin/includes/tab-settings.php:667
1197
  msgid ""
1198
  "You need to click &#8220;Save Changes&#8221; button for imported settings to "
1199
  "take effect."
1200
  msgstr "インポートされた設定を有効にするには、[変更を保存]ボタンをクリックする必要があります。"
1201
 
1202
+ #: admin/includes/tab-settings.php:702 admin/includes/tab-settings.php:762
1203
  msgid "Force to load WP core"
1204
  msgstr "WPコアの読み込みを強制"
1205
 
1206
+ #: admin/includes/tab-settings.php:707
1207
  msgid "Plugins area"
1208
  msgstr "プラグイン領域"
1209
 
1210
+ #: admin/includes/tab-settings.php:767
1211
  msgid "Themes area"
1212
  msgstr "テーマ領域"
1213
 
1214
+ #: admin/includes/tab-settings.php:802
1215
  msgid "Front-end target settings"
1216
  msgstr "フロントエンドの設定"
1217
 
1218
+ #: admin/includes/tab-settings.php:837
1219
  msgid "Follow &#8220;Validation rules and behavior&#8221;"
1220
  msgstr "[検証ルールと振る舞いの設定]に従う"
1221
 
1222
+ #: admin/includes/tab-settings.php:879
1223
  #, php-format
1224
  msgid ""
1225
  "<dfn title=\"You can configure a different response code from the Back-end. "
1229
  "<dfn title=\"バックエンドと異なるレスポンス・コードを設定できます。これは、アフィリエイト・プログラム"
1230
  "に対する違反を防止するのに役立つでしょう。\">レスポンス・コード</dfn> %s"
1231
 
1232
+ #: admin/includes/tab-settings.php:943
1233
  msgid ""
1234
  "<dfn title=\"Specify the individual page as a blocking target.\">Page</dfn>"
1235
  msgstr "<dfn title=\"特定のページを遮断対象に指定します。\">ページ</dfn>"
1236
 
1237
+ #: admin/includes/tab-settings.php:955
1238
  msgid ""
1239
  "<dfn title=\"Specify the individual post type on a single page as a blocking "
1240
  "target.\">Post type</dfn>"
1241
  msgstr "<dfn title=\"特定の投稿タイプのシングルページを遮断対象に指定します。\">投稿タイプ</dfn>"
1242
 
1243
+ #: admin/includes/tab-settings.php:967
1244
  msgid ""
1245
  "<dfn title=\"Specify the individual category on a single page or archive "
1246
  "page as a blocking target.\">Category</dfn>"
1248
  "<dfn title=\"特定のカテゴリを含むシングルページかアーカイブページを遮断対象に指定します。\">カテゴリ"
1249
  "</dfn>"
1250
 
1251
+ #: admin/includes/tab-settings.php:979
1252
  msgid ""
1253
  "<dfn title=\"Specify the individual tag on a single page or archive page as "
1254
  "a blocking target.\">Tag</dfn>"
1255
  msgstr ""
1256
  "<dfn title=\"特定のタグを含むシングルページかアーカイブページを遮断対象に指定します。\">タグ</dfn>"
1257
 
1258
+ #: admin/includes/tab-settings.php:993
1259
  msgid "Specify the validation target on front-end."
1260
  msgstr "フロントエンドの検証対象を設定します。"
1261
 
1262
+ #: admin/includes/tab-settings.php:993
1263
  msgid "Validation target"
1264
  msgstr "検証対象"
1265
 
1266
+ #: admin/includes/tab-settings.php:1004
1267
  msgid "All requests"
1268
  msgstr "全てのリクエスト"
1269
 
1270
+ #: admin/includes/tab-settings.php:1005
1271
  msgid "Specify the targets"
1272
  msgstr "ターゲットを指定"
1273
 
1274
+ #: admin/includes/tab-settings.php:1008
1275
  msgid ""
1276
  "Notice that &#8220;Validation timing&#8221; is deferred till &#8220;"
1277
  "wp&#8221; action hook. It means that this feature would not be compatible "
1280
  "[検証のタイミング]が &#8220;wp&#8221; アクション・フックまで遅延されます。これにより、ページ・"
1281
  "キャッシュとの互換性がなくなることに注意してください。"
1282
 
1283
+ #: admin/includes/tab-settings.php:1018
1284
  msgid "Specify the name of actions as exception that is invariably blocked."
1285
  msgstr "常に遮断されるアクション名を例外として指定します。"
1286
 
1287
+ #: admin/includes/tab-settings.php:1018
1288
  msgid "Excluded actions"
1289
  msgstr "除外するアクション"
1290
 
1291
+ #: admin/includes/tab-settings.php:1034
1292
  msgid ""
1293
  "<dfn title=\"Specify the frequency of request for certain period of time."
1294
  "\">Blocking condition</dfn>"
1295
  msgstr "<dfn title=\"特定期間のリクエスト頻度を設定します。\">遮断条件</dfn>"
1296
 
1297
+ #: admin/includes/tab-settings.php:1036
1298
  #, php-format
1299
  msgid "More than %1$s page view (PV) in %2$s seconds"
1300
  msgstr "%2$s 秒間で %1$s を超えるページビュー (PV)"
1301
 
1302
+ #: admin/includes/tab-settings.php:1044
1303
  msgid ""
1304
  "<dfn title=\"It will validate the frequency of request.\">Block badly-"
1305
  "behaved bots and crawlers</dfn>"
1306
  msgstr "<dfn title=\"リクエスト頻度を検証します。\">行儀の悪いボットやクローラーを遮断</dfn>"
1307
 
1308
+ #: admin/includes/tab-settings.php:1061
1309
  msgid ""
1310
  "A part of user agent string and a qualification connected with a separator "
1311
  "that indicates an applicable rule and can be &#8220;:&#8221; (pass) or "
1318
  "「条件」のペアです。「条件」には「DNS」、「FEED」、国コード、または&nbsp;IPアドレス(CIDR記法)が使え"
1319
  "ます。また否定を表す記号「!」を「条件」の直前に配置する事が出来ます。"
1320
 
1321
+ #: admin/includes/tab-settings.php:1061
1322
  msgid "UA string and qualification"
1323
  msgstr "ユーザーエージェント文字列と条件"
1324
 
1325
+ #: admin/includes/tab-settings.php:1078
1326
  msgid ""
1327
  "It enables to verify the host by reverse DNS lookup which would spend some "
1328
  "server resources. If it is disabled, &#8220;HOST&#8221; and &#8220;"
1332
  "DNS 逆引きによりホストを検証します(幾らかのサーバー・リソースを消費します)。無効にした場合、[ユー"
1333
  "ザーエージェント文字列と条件]中の「HOST」および「HOST=&hellip;」は常に真となります。"
1334
 
1335
+ #: admin/includes/tab-settings.php:1078
1336
  msgid "Reverse DNS lookup"
1337
  msgstr "DNS 逆引き"
1338
 
1339
+ #: admin/includes/tab-settings.php:1097
1340
  msgid "Privacy and record settings"
1341
  msgstr "プライバシーと記録の設定"
1342
 
1343
+ #: admin/includes/tab-settings.php:1120
1344
  msgid ""
1345
  "<dfn title=\"This option restricts not to send IP address to the external "
1346
  "Geolocation APIs.\">Do not send IP address to external APIs</dfn>"
1348
  "<dfn title=\"このオプションは、IPアドレスを外部の位置情報APIへ送信することを制限します。\">外部APIへ"
1349
  "の送信を制限する</dfn>"
1350
 
1351
+ #: admin/includes/tab-settings.php:1135
1352
  msgid ""
1353
  "<dfn title=\"This option enables to record the IP address, country code and "
1354
  "failure counter of login attempts into the cache on database to minimize the "
1357
  "<dfn title=\"このオプションは、IPアドレス、国コード、ログイン失敗回数等のキャッシュへの記録を有効に"
1358
  "し、サイト速度への影響を最小化します。\">IPアドレスをキャッシュに記録</dfn>"
1359
 
1360
+ #: admin/includes/tab-settings.php:1150
1361
  msgid ""
1362
  "<dfn title=\"If user authentication fails consecutively beyond &#8220;Max "
1363
  "number of failed login attempts per IP address&#8221;, subsequent login will "
1367
  "<dfn title=\"ユーザ認証が連続%d回失敗した場合も、以降のログインがこの期間だけ(ガベージコレクション周"
1368
  "期を含む)禁止されます。\">各エントリーの有効期間 [秒]</dfn>"
1369
 
1370
+ #: admin/includes/tab-settings.php:1166
1371
  msgid ""
1372
  "<dfn title=\"This option enables to record the validation logs including IP "
1373
  "addresses.\">Record &#8220;Validation logs&#8221;</dfn>"
1375
  "<dfn title=\"このオプションは、IPアドレスを含む検証ログの記録を有効にします。\">検証のログを記録</"
1376
  "dfn>"
1377
 
1378
+ #: admin/includes/tab-settings.php:1178
1379
  msgid "When blocked"
1380
  msgstr "遮断時に記録"
1381
 
1382
+ #: admin/includes/tab-settings.php:1179
1383
  msgid "When passed"
1384
  msgstr "通過時に記録"
1385
 
1386
+ #: admin/includes/tab-settings.php:1180
1387
  msgid "When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;"
1388
  msgstr "遮断時または遮断対象国の通過時に記録"
1389
 
1390
+ #: admin/includes/tab-settings.php:1181
1391
  msgid "Unauthenticated visitor"
1392
  msgstr "未認証の訪問者を記録"
1393
 
1394
+ #: admin/includes/tab-settings.php:1182
1395
  msgid "Authenticated user"
1396
  msgstr "認証済のユーザーを記録"
1397
 
1398
+ #: admin/includes/tab-settings.php:1183
1399
  msgid "All the validation"
1400
  msgstr "すべての検証を記録"
1401
 
1402
+ #: admin/includes/tab-settings.php:1191
1403
  #, php-format
1404
  msgid ""
1405
  "<dfn title=\"The maximum number of entries in the logs is also limited to %d."
1406
  "\">Expiration time [days] for each entry</dfn>"
1407
  msgstr "<dfn title=\"ログの最大エントリー数は %d に制限されます。\">各エントリーの有効期間[日]</dfn>"
1408
 
1409
+ #: admin/includes/tab-settings.php:1208
1410
  msgid ""
1411
  "<dfn title=\"e.g. action, comment, log, pwd, FILES\">$_POST key to record "
1412
  "with value</dfn>"
1413
  msgstr "<dfn title=\"例)action, comment, log, pwd, FILES\">内容を展開する$_POSTのキー</dfn>"
1414
 
1415
+ #: admin/includes/tab-settings.php:1227
1416
  msgid "Maximum entries in &#8220;Logs&#8221;"
1417
  msgstr "記録するログの最大エントリ数"
1418
 
1419
+ #: admin/includes/tab-settings.php:1244
1420
  msgid ""
1421
  "<dfn title=\"Select SQLite database source.\">Database source of SQLite for "
1422
  "&#8220;Live update&#8221;</dfn>"
1424
  "<dfn title=\"SQLiteデータベース・ソースを選択します。\">ライブアップデート用SQLiteデータベース・ソー"
1425
  "スの選択</dfn>"
1426
 
1427
+ #: admin/includes/tab-settings.php:1257
1428
  msgid "Ordinary file"
1429
  msgstr "ファイル"
1430
 
1431
+ #: admin/includes/tab-settings.php:1258
1432
  msgid "In-Memory"
1433
  msgstr "イン・メモリ"
1434
 
1435
+ #: admin/includes/tab-settings.php:1261
1436
  msgid "PDO_SQLITE driver not available"
1437
  msgstr "PDO_SQLITEドライバが利用出来ません"
1438
 
1439
+ #: admin/includes/tab-settings.php:1262
1440
  msgid ""
1441
  "It takes a few tens of milliseconds as overhead. It can be safely used "
1442
  "without conflict with other plugins."
1443
  msgstr "数十ミリ秒のオーバーヘッドが生じますが、他のプラグインと競合することなく、安全に使用できます。"
1444
 
1445
+ #: admin/includes/tab-settings.php:1263
1446
  msgid ""
1447
  "It takes a few milliseconds as overhead. There is a possibility of conflict "
1448
  "with other plugins using this method."
1449
  msgstr ""
1450
  "数ミリ秒のオーバーヘッドが生じます。同手法を用いている他のプラグインと競合する可能性があります。"
1451
 
1452
+ #: admin/includes/tab-settings.php:1271
1453
  msgid "Reset database source of &#8220;Live update&#8221;"
1454
  msgstr "ライブアップデートのデータソースをリセットする"
1455
 
1456
+ #: admin/includes/tab-settings.php:1279
1457
  msgid "Reset now"
1458
  msgstr "今すぐリセット"
1459
 
1460
+ #: admin/includes/tab-settings.php:1288 admin/includes/tab-settings.php:1449
1461
  msgid ""
1462
  "Task could not be found in WP-Cron. Please try to deactivate this plugin "
1463
  "once and activate again."
1464
  msgstr ""
1465
  "WP-Cronのタスクが見つかりません。 一旦このプラグインを停止させた後、再度、有効化してみてください。"
1466
 
1467
+ #: admin/includes/tab-settings.php:1293
1468
  msgid ""
1469
  "<dfn title=\"This option enables to schedule the WP-Cron event to remove the "
1470
  "expired entries from &#8220;IP address cache&#8221; and &#8220;Validation "
1473
  "<dfn title=\"キャッシュとログから有効期限の切れたIPアドレスのエントリーを削除する WP-Cron イベントの"
1474
  "起動周期を設定します。\">ガベージコレクション周期[秒]</dfn>"
1475
 
1476
+ #: admin/includes/tab-settings.php:1302 admin/includes/tab-settings.php:1465
1477
  #, php-format
1478
  msgid "Next schedule: %s"
1479
  msgstr "次回日時:%s"
1480
 
1481
+ #: admin/includes/tab-settings.php:1309
1482
  msgid ""
1483
  "<dfn title=\"This option enables to record the number blocked countries and "
1484
  "the number of blocked requests per day.\">Record &#8220;Statistics of "
1487
  "<dfn title=\"このオプションは、国別遮断数や1日あたりの遮断数など、統計の記録を有効にします。\">検証の"
1488
  "統計を記録</dfn>"
1489
 
1490
+ #: admin/includes/tab-settings.php:1324
1491
  msgid "Maximum period for &#8220;Statistics&#8221; [days]"
1492
  msgstr "記録する統計の最大期間[日]"
1493
 
1494
+ #: admin/includes/tab-settings.php:1342
1495
  msgid "Remove all settings and records at uninstallation"
1496
  msgstr "アンインストール時に設定と記録を全て削除"
1497
 
1498
+ #: admin/includes/tab-settings.php:1359
1499
  msgid "Geolocation API settings"
1500
  msgstr "位置情報APIの設定"
1501
 
1502
+ #: admin/includes/tab-settings.php:1380
1503
  msgid ""
1504
  "<dfn title=\"IP address cache and local databases are scanned at the top "
1505
  "priority.\">API selection and key settings</dfn>"
1507
  "<dfn title=\"IPアドレスのキャッシュとローカルのデータベースが最優先で検索されます。\">APIの選択とキー"
1508
  "の設定</dfn>"
1509
 
1510
+ #: admin/includes/tab-settings.php:1399
1511
  msgid "Timeout for network API [sec]"
1512
  msgstr "ネットワークAPIのタイムアウト[秒]"
1513
 
1514
+ #: admin/includes/tab-settings.php:1417
1515
  msgid "Local database settings"
1516
  msgstr "ローカル・データベースの設定"
1517
 
1518
+ #: admin/includes/tab-settings.php:1431
1519
  msgid "database"
1520
  msgstr "ファイル"
1521
 
1522
+ #: admin/includes/tab-settings.php:1432 classes/class-ip-geo-block-cron.php:434
1523
  #, php-format
1524
  msgid "Last update: %s"
1525
  msgstr "最終更新:%s"
1526
 
1527
+ #: admin/includes/tab-settings.php:1454
1528
  msgid "Auto updating (once a month)"
1529
  msgstr "自動更新(月1回)"
1530
 
1531
+ #: admin/includes/tab-settings.php:1472
1532
  msgid "Download database"
1533
  msgstr "データベースのダウンロード"
1534
 
1535
+ #: admin/includes/tab-settings.php:1480
1536
  msgid "Download now"
1537
  msgstr "今すぐダウンロード"
1538
 
1539
+ #: admin/includes/tab-settings.php:1491
1540
  msgid "Plugin settings"
1541
  msgstr "プラグインの設定"
1542
 
1543
+ #: admin/includes/tab-settings.php:1503
1544
  msgid ""
1545
  "<dfn title=\"Synchronize all settings over the network wide.\">Network wide "
1546
  "settings</dfn>"
1547
  msgstr "<dfn title=\"全ての設定をネットワーク全体で同期させます。\">ネットワーク内で設定を同期</dfn>"
1548
 
1549
+ #: admin/includes/tab-settings.php:1521
1550
  msgid ""
1551
  "<dfn title=\"You can access to the login form with a specific key at "
1552
  "emergency. Please add the generated link to favorites / bookmarks in your "
1556
  "<dfn title=\"緊急時にもログイン可能なリンクを生成します。キー自体は保存されないので、生成したリンクを"
1557
  "ブラウザのお気に入り/ブックマークに追加してください。\">緊急時用ログイン・リンク</dfn>"
1558
 
1559
+ #: admin/includes/tab-settings.php:1537
1560
  msgid ""
1561
  "<dfn title=\"Valid key for Google Maps JavaScript API. Maps Embed API in "
1562
  "iframe can be available without key in case it's empty.\">Google Maps API "
1565
  "<dfn title=\"Google Maps JavaScript API の有効なキー。空欄にするとキーなしの Maps Embed API が使用可"
1566
  "能です。\">Google Maps API キー</dfn>"
1567
 
1568
+ #: admin/includes/tab-settings.php:1553
1569
  msgid "Export / Import settings"
1570
  msgstr "設定のエクスポート、インポート"
1571
 
1572
+ #: admin/includes/tab-settings.php:1560
1573
  msgid "Export settings"
1574
  msgstr "エクスポート"
1575
 
1576
+ #: admin/includes/tab-settings.php:1561
1577
  msgid "Import from the local file"
1578
  msgstr "ローカル・ファイルからインポートします"
1579
 
1580
+ #: admin/includes/tab-settings.php:1561
1581
  msgid "Import settings"
1582
  msgstr "インポート"
1583
 
1584
+ #: admin/includes/tab-settings.php:1569
1585
  msgid "Import pre-defined settings"
1586
  msgstr "プリセットのインポート"
1587
 
1588
+ #: admin/includes/tab-settings.php:1576
1589
  msgid ""
1590
  "Import the default settings to revert to the &#8220;Right after "
1591
  "installing&#8221; state"
1592
  msgstr "インストール直後の状態に戻すための設定値をインポートします"
1593
 
1594
+ #: admin/includes/tab-settings.php:1576
1595
  msgid "Default settings"
1596
  msgstr "初期設定"
1597
 
1598
+ #: admin/includes/tab-settings.php:1577
1599
  msgid ""
1600
  "Import the preferred settings mainly by enabling Zero-day Exploit Prevention "
1601
  "for the &#8220;Back-end target settings&#8221;"
1602
  msgstr "「ゼロデイ攻撃の遮断」など、主に[バックエンドの設定]の推奨設定をインポートします"
1603
 
1604
+ #: admin/includes/tab-settings.php:1577
1605
  msgid "Best for Back-end"
1606
  msgstr "バックエンドの推奨設定"
1607
 
1608
+ #: admin/includes/tab-settings.php:1586
1609
  msgid "Diagnose all DB tables"
1610
  msgstr "全データベース・テーブルの検査"
1611
 
1612
+ #: admin/includes/tab-settings.php:1594
1613
  msgid "Diagnose now"
1614
  msgstr "今すぐ検査"
1615
 
1616
+ #: admin/includes/tab-settings.php:1603
1617
  msgid ""
1618
  "<dfn title=\"When you have some unexpected blocking experiences, please "
1619
  "press the button to find the blocked requests at the end of dumped "
1627
  "org/support/plugin/ip-geo-block\" title=\"[IP Geo Block] Support | WordPress.org\">サポート・フォーラ"
1628
  "ム</a> ]"
1629
 
1630
+ #: admin/includes/tab-settings.php:1610
1631
  msgid "Please copy &amp; paste when submitting your issue to support forum"
1632
  msgstr "フォーラムに問題を投稿する際、コピーして張り付けてください"
1633
 
1634
+ #: admin/includes/tab-settings.php:1610
1635
  msgid "Show information"
1636
  msgstr "情報を表示"
1637
 
1638
+ #: admin/includes/tab-settings.php:1627
1639
  msgid ""
1640
  "While Geolite2 / Maxmind and IP2Location will fetch the local databases, "
1641
  "others will pass an IP address to the 3rd parties' API via HTTP."
1643
  "MaxmindとIP2Locationはローカルのデータベースを検索しますが、他はHTTPを介して外部のAPIにIPアドレスを渡"
1644
  "します。"
1645
 
1646
+ #: admin/includes/tab-settings.php:1628
1647
  msgid ""
1648
  "Please select the appropriate APIs to fit the privacy law / regulation in "
1649
  "your country / region."
1650
  msgstr ""
1651
  "あなたの国/地域におけるプライバシー保護の法規・条例に適合するよう、適切なAPIを選択して下さい。"
1652
 
1653
+ #: admin/includes/tab-settings.php:1637
1654
  #, php-format
1655
  msgid ""
1656
  "Maxmind GeoLite2 databases and APIs need PHP version 5.4.0+ and %sPECL phar "
1659
  "Maxmind GeoLite2 データベースと API には、PHP バージョン 5.4.0 以上と %sPECL phar 2.0.0 以上%sが必要"
1660
  "です。"
1661
 
1662
+ #: admin/includes/tab-settings.php:1645
1663
  #, php-format
1664
  msgid ""
1665
  "Please refer to \"%sLiving with cache plugin%s\" for compatibility with "
1666
  "cache plugins."
1667
+ msgstr "キャッシュ・プラグインとの互換性については、%sこのドキュメント%s を参照して下さい。"
 
1668
 
1669
  #: admin/includes/tab-statistics.php:18
1670
  msgid "Statistics of validation"
1766
  msgid "Please set the proper condition to record IP address in cache."
1767
  msgstr "キャッシュを利用しサイトの応答性を上げるためには、適切な条件を設定して下さい。"
1768
 
1769
+ #: classes/class-ip-geo-block-cron.php:233
1770
  #, php-format
1771
  msgid "Can't lock <code>%s</code>. Please try again after a while."
1772
  msgstr "<code>%s</code> をロック出来ません。パーミッションをチェックして下さい。"
1773
 
1774
+ #: classes/class-ip-geo-block-cron.php:312
1775
  msgid "Your database file is up-to-date."
1776
  msgstr "データベース・ファイルは最新です。"
1777
 
1778
+ #: classes/class-ip-geo-block-cron.php:415
1779
  msgid "gz or zip is not supported on your system."
1780
  msgstr "gz または zip がサポートされていません。"
1781
 
1818
  "again."
1819
  msgstr "%s 用のカラム型が一致しません。一旦このプラグインを無効化し、再度有効化して下さい。"
1820
 
1821
+ #: wp-content/ip-geo-api/ip2location/class-ip2location.php:154
1822
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php:160
1823
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:252
1824
  msgid "Database file does not exist."
1825
  msgstr "データベース・ファイルが見つかりません。"
1826
 
1827
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:158
1828
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:179
1829
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:207
1830
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:228
1831
+ msgid "Update service has already stopped."
1832
+ msgstr "データベースの更新サービスは終了しました。"
1833
+
1834
  #: wp-content/mu-plugins/ip-geo-block-mu.php:72
1835
  #, php-format
1836
  msgid ""
languages/ip-geo-block.mo CHANGED
Binary file
languages/ip-geo-block.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.16\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ip-geo-block\n"
7
- "POT-Creation-Date: 2018-11-01 22:01+0900\n"
8
- "PO-Revision-Date: 2018-11-01 22:03+0900\n"
9
  "Language-Team: \n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -26,167 +26,171 @@ msgid ""
26
  "posted from outside your nation, and also prevents zero-day exploit."
27
  msgstr ""
28
 
29
- #: admin/class-ip-geo-block-admin.php:297
30
  msgid "Are you sure ?"
31
  msgstr ""
32
 
33
- #: admin/class-ip-geo-block-admin.php:298
34
- #: admin/class-ip-geo-block-admin.php:790
35
  msgid "Open a new window"
36
  msgstr ""
37
 
38
- #: admin/class-ip-geo-block-admin.php:299 admin/includes/tab-settings.php:1506
39
  msgid "Generate new link"
40
  msgstr ""
41
 
42
- #: admin/class-ip-geo-block-admin.php:300 admin/includes/tab-settings.php:1507
43
  msgid "Delete current link"
44
  msgstr ""
45
 
46
- #: admin/class-ip-geo-block-admin.php:301
47
  msgid ""
48
  "Please add the following link to favorites / bookmarks in your browser : "
49
  msgstr ""
50
 
51
- #: admin/class-ip-geo-block-admin.php:302
52
  msgid "ajax for logged-in user"
53
  msgstr ""
54
 
55
- #: admin/class-ip-geo-block-admin.php:303
56
  msgid "ajax for non logged-in user"
57
  msgstr ""
58
 
59
- #: admin/class-ip-geo-block-admin.php:304
60
  #, php-format
61
  msgid "[Found: %d]"
62
  msgstr ""
63
 
64
- #: admin/class-ip-geo-block-admin.php:305
65
  #, php-format
66
  msgid "Find and verify `%s` on &#8220;Logs&#8221; tab."
67
  msgstr ""
68
 
69
- #: admin/class-ip-geo-block-admin.php:306
70
  msgid "This feature is available with HTML5 compliant browsers."
71
  msgstr ""
72
 
73
- #: admin/class-ip-geo-block-admin.php:307
74
  msgid "The selected row cannot be found in the table."
75
  msgstr ""
76
 
77
- #: admin/class-ip-geo-block-admin.php:308
78
- #: admin/class-ip-geo-block-admin.php:1568
79
  #, php-format
80
  msgid "An error occurred while executing the ajax command `%s`."
81
  msgstr ""
82
 
83
- #: admin/class-ip-geo-block-admin.php:312
84
  msgid "No data available in table"
85
  msgstr ""
86
 
87
- #: admin/class-ip-geo-block-admin.php:313
88
  msgid "No matching records found"
89
  msgstr ""
90
 
91
- #: admin/class-ip-geo-block-admin.php:314
92
  #: admin/includes/class-admin-ajax.php:107
93
  #: admin/includes/class-admin-ajax.php:240
94
  #: admin/includes/tab-geolocation.php:74
95
  msgid "IP address"
96
  msgstr ""
97
 
98
- #: admin/class-ip-geo-block-admin.php:315
99
  #: admin/includes/class-admin-ajax.php:108
100
  #: admin/includes/class-admin-ajax.php:241
101
  msgid "Code"
102
  msgstr ""
103
 
104
- #: admin/class-ip-geo-block-admin.php:316
105
  #: admin/includes/class-admin-ajax.php:109
106
  #: admin/includes/class-admin-ajax.php:242
107
  msgid "ASN"
108
  msgstr ""
109
 
110
- #: admin/class-ip-geo-block-admin.php:317
111
  #: admin/includes/class-admin-ajax.php:243
112
  msgid "Host name"
113
  msgstr ""
114
 
115
- #: admin/class-ip-geo-block-admin.php:318
116
  #: admin/includes/class-admin-ajax.php:110
117
  #: admin/includes/class-admin-ajax.php:244
118
  msgid "Target"
119
  msgstr ""
120
 
121
- #: admin/class-ip-geo-block-admin.php:319
122
  #: admin/includes/class-admin-ajax.php:245
123
  msgid "Failure / Total"
124
  msgstr ""
125
 
126
- #: admin/class-ip-geo-block-admin.php:320
127
  #: admin/includes/class-admin-ajax.php:246
128
  msgid "Elapsed[sec]"
129
  msgstr ""
130
 
131
- #: admin/class-ip-geo-block-admin.php:321
132
  #: admin/includes/class-admin-ajax.php:106
133
  msgid "Time"
134
  msgstr ""
135
 
136
- #: admin/class-ip-geo-block-admin.php:322
137
  #: admin/includes/class-admin-ajax.php:111
138
  msgid "Result"
139
  msgstr ""
140
 
141
- #: admin/class-ip-geo-block-admin.php:323
142
  #: admin/includes/class-admin-ajax.php:112
143
  msgid "Request"
144
  msgstr ""
145
 
146
- #: admin/class-ip-geo-block-admin.php:324
147
  #: admin/includes/class-admin-ajax.php:113
148
  msgid "User agent"
149
  msgstr ""
150
 
151
- #: admin/class-ip-geo-block-admin.php:325
152
  #: admin/includes/class-admin-ajax.php:114
153
  msgid "HTTP headers"
154
  msgstr ""
155
 
156
- #: admin/class-ip-geo-block-admin.php:326
157
  #: admin/includes/class-admin-ajax.php:115
158
  msgid "$_POST data"
159
  msgstr ""
160
 
161
- #: admin/class-ip-geo-block-admin.php:352
162
  msgid "Contribute on GitHub"
163
  msgstr ""
164
 
165
- #: admin/class-ip-geo-block-admin.php:366
166
- #: admin/class-ip-geo-block-admin.php:483
167
- #: admin/class-ip-geo-block-admin.php:733
 
 
168
  msgid "Settings"
169
  msgstr ""
170
 
 
171
  #: admin/class-ip-geo-block-admin.php:460
172
- #: admin/class-ip-geo-block-admin.php:461
173
  #: admin/class-ip-geo-block-admin.php:471
174
- #: admin/class-ip-geo-block-admin.php:472
175
- #: admin/class-ip-geo-block-admin.php:482
176
- #: admin/class-ip-geo-block-admin.php:492
177
  msgid "IP Geo Block"
178
  msgstr ""
179
 
180
- #: admin/class-ip-geo-block-admin.php:493
181
- #: admin/class-ip-geo-block-admin.php:738
 
 
182
  msgid "Sites list"
183
  msgstr ""
184
 
185
- #: admin/class-ip-geo-block-admin.php:522
186
  msgid "You need WordPress 3.7+."
187
  msgstr ""
188
 
189
- #: admin/class-ip-geo-block-admin.php:526
190
  #, php-format
191
  msgid ""
192
  "Can not load Geolocation API libraries from <code>%s</code>. It seems to "
@@ -195,13 +199,14 @@ msgid ""
195
  "contents of tokkonopapa/WordPress-IP-Geo-API as a zip file\">ZIP file</a> "
196
  "from <a rel=\"noreferrer\" href=\"https://github.com/tokkonopapa/WordPress-"
197
  "IP-Geo-API\" title=\"tokkonopapa/WordPress-IP-Geo-API - GitHub\">WordPress-"
198
- "IP-Geo-API</a>. Please install <code>ip-geo-api</code> with write permission "
199
- "according to <a rel=\"noreferrer\" href=\"https://www.ipgeoblock.com/codex/"
200
- "how-to-fix-permission-troubles.html\" title=\"How can I fix permission "
201
- "troubles? | IP Geo Block\">this instruction</a>."
 
202
  msgstr ""
203
 
204
- #: admin/class-ip-geo-block-admin.php:535
205
  #, php-format
206
  msgid ""
207
  "You should select at least one API at <a href=\"%s\">Geolocation API "
@@ -209,7 +214,7 @@ msgid ""
209
  "expires."
210
  msgstr ""
211
 
212
- #: admin/class-ip-geo-block-admin.php:544
213
  #, php-format
214
  msgid ""
215
  "You should select at least one API for local database at <a href=\"%s"
@@ -217,7 +222,7 @@ msgid ""
217
  "slow down the site."
218
  msgstr ""
219
 
220
- #: admin/class-ip-geo-block-admin.php:555
221
  #, php-format
222
  msgid ""
223
  "Now downloading geolocation databases in background. After a little while, "
@@ -225,24 +230,24 @@ msgid ""
225
  "strong>&#8221; at <a href=\"%s\">Validation rules and behavior</a>."
226
  msgstr ""
227
 
228
- #: admin/class-ip-geo-block-admin.php:561
229
  #, php-format
230
  msgid ""
231
  "The &#8220;<strong>Matching rule</strong>&#8221; is not set properly. Please "
232
  "confirm it at <a href=\"%s\">Validation rules and behavior</a>."
233
  msgstr ""
234
 
235
- #: admin/class-ip-geo-block-admin.php:570
236
  msgid "Local database and matching rule have been updated."
237
  msgstr ""
238
 
239
- #: admin/class-ip-geo-block-admin.php:581
240
  msgid ""
241
  "Once you logout, you will be unable to login again because the number of "
242
  "login attempts reaches the limit."
243
  msgstr ""
244
 
245
- #: admin/class-ip-geo-block-admin.php:583
246
  #, php-format
247
  msgid ""
248
  "Please remove your IP address in &#8220;%1$sStatistics in IP address cache"
@@ -250,24 +255,24 @@ msgid ""
250
  "yourself out."
251
  msgstr ""
252
 
253
- #: admin/class-ip-geo-block-admin.php:594
254
  msgid ""
255
  "Once you logout, you will be unable to login again because your country code "
256
  "or IP address is in the blacklist."
257
  msgstr ""
258
 
259
- #: admin/class-ip-geo-block-admin.php:595
260
  msgid ""
261
  "Once you logout, you will be unable to login again because your country code "
262
  "or IP address is not in the whitelist."
263
  msgstr ""
264
 
265
- #: admin/class-ip-geo-block-admin.php:599
266
  #, php-format
267
  msgid "Please check your &#8220;%sValidation rules and behavior%s&#8221;."
268
  msgstr ""
269
 
270
- #: admin/class-ip-geo-block-admin.php:603
271
  #, php-format
272
  msgid ""
273
  "Please confirm your local geolocation database files exist at &#8220;%sLocal "
@@ -275,7 +280,7 @@ msgid ""
275
  "&#8220;%sStatistics in cache%s&#8221; section."
276
  msgstr ""
277
 
278
- #: admin/class-ip-geo-block-admin.php:617
279
  #, php-format
280
  msgid ""
281
  "Emergency login link is outdated. Please delete it once and generate again "
@@ -283,93 +288,130 @@ msgid ""
283
  "favorites / bookmarks in your browser."
284
  msgstr ""
285
 
286
- #: admin/class-ip-geo-block-admin.php:626
287
  msgid ""
288
  "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php) at &#8220;Validation "
289
  "timing&#8221; is imcompatible with <strong>IP Geo Allow</strong>. Please "
290
  "select &#8220;init&#8221; action hook."
291
  msgstr ""
292
 
293
- #: admin/class-ip-geo-block-admin.php:734
294
  msgid "Statistics"
295
  msgstr ""
296
 
297
- #: admin/class-ip-geo-block-admin.php:735
298
  msgid "Logs"
299
  msgstr ""
300
 
301
- #: admin/class-ip-geo-block-admin.php:736
302
  msgid "Search"
303
  msgstr ""
304
 
305
- #: admin/class-ip-geo-block-admin.php:737
306
  msgid "Attribution"
307
  msgstr ""
308
 
309
- #: admin/class-ip-geo-block-admin.php:754
310
- #: admin/class-ip-geo-block-admin.php:770
311
- msgid "Network"
312
- msgstr ""
313
-
314
- #: admin/class-ip-geo-block-admin.php:783
315
  msgid "Toggle all"
316
  msgstr ""
317
 
318
- #: admin/class-ip-geo-block-admin.php:786
319
  msgid ""
320
  "Independent of &#8220;Privacy and record settings&#8221;, you can see all "
321
  "the requests validated by this plugin in almost real time."
322
  msgstr ""
323
 
324
- #: admin/class-ip-geo-block-admin.php:786 admin/includes/tab-accesslog.php:39
325
  msgid "Live update"
326
  msgstr ""
327
 
328
- #: admin/class-ip-geo-block-admin.php:790
329
  msgid "Open a new window on clicking the link in the chart."
330
  msgstr ""
331
 
332
- #: admin/class-ip-geo-block-admin.php:814
333
  msgid "Thanks for providing these great services for free."
334
  msgstr ""
335
 
336
- #: admin/class-ip-geo-block-admin.php:815
337
  msgid ""
338
  "(Most browsers will redirect you to each site <a href=\"https://www."
339
  "ipgeoblock.com/etc/referer.html\" title=\"Referer Checker\">without referrer "
340
  "when you click the link</a>.)"
341
  msgstr ""
342
 
343
- #: admin/class-ip-geo-block-admin.php:820
344
  msgid "Back to top"
345
  msgstr ""
346
 
347
- #: admin/class-ip-geo-block-admin.php:912
348
  msgid "Enable"
349
  msgstr ""
350
 
351
- #: admin/class-ip-geo-block-admin.php:927
352
  msgid "Select one"
353
  msgstr ""
354
 
355
- #: admin/class-ip-geo-block-admin.php:1346
356
  msgid "You do not have sufficient permissions to access this page."
357
  msgstr ""
358
 
359
- #: admin/class-ip-geo-block-admin.php:1373
360
  #: admin/includes/class-admin-rewrite.php:194
361
- #: classes/class-ip-geo-block-cron.php:218
362
- #: classes/class-ip-geo-block-cron.php:322
363
- #: classes/class-ip-geo-block-cron.php:400
364
- #: classes/class-ip-geo-block-opts.php:469
365
  #, php-format
366
  msgid "Unable to write <code>%s</code>. Please check the permission."
367
  msgstr ""
368
 
369
- #: admin/class-ip-geo-block-admin.php:1403
370
  msgid "Settings saved."
371
  msgstr ""
372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  #: admin/includes/class-admin-ajax.php:72
374
  #: admin/includes/class-admin-ajax.php:75 admin/includes/tab-settings.php:84
375
  #: admin/includes/tab-settings.php:103
@@ -388,8 +430,8 @@ msgid ""
388
  msgstr ""
389
 
390
  #: admin/includes/class-admin-rewrite.php:168
391
- #: classes/class-ip-geo-block-cron.php:213
392
- #: classes/class-ip-geo-block-cron.php:395
393
  #, php-format
394
  msgid "Unable to read <code>%s</code>. Please check the permission."
395
  msgstr ""
@@ -413,23 +455,23 @@ msgstr ""
413
  msgid "Help"
414
  msgstr ""
415
 
416
- #: admin/includes/tab-accesslog.php:55 admin/includes/tab-settings.php:428
417
  msgid "Comment post"
418
  msgstr ""
419
 
420
- #: admin/includes/tab-accesslog.php:56 admin/includes/tab-settings.php:429
421
  msgid "XML-RPC"
422
  msgstr ""
423
 
424
- #: admin/includes/tab-accesslog.php:57 admin/includes/tab-settings.php:430
425
  msgid "Login form"
426
  msgstr ""
427
 
428
- #: admin/includes/tab-accesslog.php:58 admin/includes/tab-settings.php:431
429
  msgid "Admin area"
430
  msgstr ""
431
 
432
- #: admin/includes/tab-accesslog.php:59 admin/includes/tab-settings.php:433
433
  msgid "Public facing pages"
434
  msgstr ""
435
 
@@ -449,68 +491,68 @@ msgstr ""
449
  msgid "Reset"
450
  msgstr ""
451
 
452
- #: admin/includes/tab-accesslog.php:109
453
  msgid "Preset filters"
454
  msgstr ""
455
 
456
- #: admin/includes/tab-accesslog.php:125 admin/includes/tab-statistics.php:238
457
  msgid "Bulk action"
458
  msgstr ""
459
 
460
- #: admin/includes/tab-accesslog.php:136 admin/includes/tab-statistics.php:249
461
  msgid "Remove entries by IP address"
462
  msgstr ""
463
 
464
- #: admin/includes/tab-accesslog.php:137 admin/includes/tab-statistics.php:250
465
  msgid "Add IP address to &#8220;Whitelist&#8221;"
466
  msgstr ""
467
 
468
- #: admin/includes/tab-accesslog.php:138 admin/includes/tab-statistics.php:251
469
  msgid "Add IP address to &#8220;Blacklist&#8221;"
470
  msgstr ""
471
 
472
- #: admin/includes/tab-accesslog.php:139 admin/includes/tab-statistics.php:252
473
  msgid "Add AS number to &#8220;Whitelist&#8221;"
474
  msgstr ""
475
 
476
- #: admin/includes/tab-accesslog.php:140 admin/includes/tab-statistics.php:253
477
  msgid "Add AS number to &#8220;Blacklist&#8221;"
478
  msgstr ""
479
 
480
- #: admin/includes/tab-accesslog.php:142 admin/includes/tab-network.php:56
481
  #: admin/includes/tab-statistics.php:255
482
  msgid "Apply"
483
  msgstr ""
484
 
485
- #: admin/includes/tab-accesslog.php:149 admin/includes/tab-statistics.php:191
486
  msgid "Clear logs"
487
  msgstr ""
488
 
489
- #: admin/includes/tab-accesslog.php:157 admin/includes/tab-statistics.php:167
490
  #: admin/includes/tab-statistics.php:199 admin/includes/tab-statistics.php:269
491
  msgid "Clear all"
492
  msgstr ""
493
 
494
- #: admin/includes/tab-accesslog.php:166
495
  msgid "Export logs"
496
  msgstr ""
497
 
498
- #: admin/includes/tab-accesslog.php:172 admin/includes/tab-settings.php:1538
499
  #: admin/includes/tab-statistics.php:283
500
  msgid "Export to the local file"
501
  msgstr ""
502
 
503
- #: admin/includes/tab-accesslog.php:172 admin/includes/tab-statistics.php:283
504
  msgid "Export csv"
505
  msgstr ""
506
 
507
- #: admin/includes/tab-accesslog.php:198 admin/includes/tab-network.php:112
508
  #: admin/includes/tab-statistics.php:410
509
  #, php-format
510
  msgid "[ %sRecord &#8220;Validation logs&#8221;%s ] is disabled."
511
  msgstr ""
512
 
513
- #: admin/includes/tab-accesslog.php:199 admin/includes/tab-network.php:113
514
  #: admin/includes/tab-statistics.php:411
515
  msgid ""
516
  "Please set the proper condition to record and analyze the validation logs."
@@ -528,7 +570,7 @@ msgstr ""
528
  msgid "Geolocation API"
529
  msgstr ""
530
 
531
- #: admin/includes/tab-geolocation.php:89 admin/includes/tab-settings.php:1083
532
  msgid ""
533
  "<dfn title=\"IP address is always encrypted on recording in Cache and Logs. "
534
  "Moreover, this option replaces the end of IP address with &#8220;***&#8221; "
@@ -662,7 +704,7 @@ msgid ""
662
  "country code</dfn>"
663
  msgstr ""
664
 
665
- #: admin/includes/tab-settings.php:125 admin/includes/tab-settings.php:805
666
  msgid "Matching rule"
667
  msgstr ""
668
 
@@ -758,8 +800,8 @@ msgid ""
758
  "this validation.\">Prevent malicious file uploading</dfn>"
759
  msgstr ""
760
 
761
- #: admin/includes/tab-settings.php:304 admin/includes/tab-settings.php:494
762
- #: admin/includes/tab-settings.php:639 admin/includes/tab-settings.php:1155
763
  msgid "Disable"
764
  msgstr ""
765
 
@@ -771,14 +813,32 @@ msgstr ""
771
  msgid "Verify file extension only"
772
  msgstr ""
773
 
774
- #: admin/includes/tab-settings.php:315
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
775
  #, php-format
776
  msgid ""
777
  "<dfn title=\"You can put your original 403.php and so on into your theme "
778
  "directory.\">Response code</dfn> %s"
779
  msgstr ""
780
 
781
- #: admin/includes/tab-settings.php:344 admin/includes/tab-settings.php:888
782
  msgid ""
783
  "<dfn title=\"Specify the URL for response code 2xx and 3xx. If it is pointed "
784
  "to a public facing page, visitors would not be blocked on the page to "
@@ -787,35 +847,35 @@ msgid ""
787
  "\">Redirect URL</dfn>"
788
  msgstr ""
789
 
790
- #: admin/includes/tab-settings.php:361 admin/includes/tab-settings.php:906
791
  msgid ""
792
  "<dfn title=\"Specify the message for response code 4xx and 5xx.\">Response "
793
  "message</dfn>"
794
  msgstr ""
795
 
796
- #: admin/includes/tab-settings.php:379
797
  msgid "Select when to run the validation."
798
  msgstr ""
799
 
800
- #: admin/includes/tab-settings.php:379
801
  msgid "Validation timing"
802
  msgstr ""
803
 
804
- #: admin/includes/tab-settings.php:390
805
  msgid "&#8220;init&#8221; action hook"
806
  msgstr ""
807
 
808
- #: admin/includes/tab-settings.php:391
809
  msgid "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)"
810
  msgstr ""
811
 
812
- #: admin/includes/tab-settings.php:394
813
  msgid ""
814
  "Validate at &#8220;init&#8221; action hook in the same manner as typical "
815
  "plugins."
816
  msgstr ""
817
 
818
- #: admin/includes/tab-settings.php:395
819
  msgid ""
820
  "Validate at an earlier phase than other typical plugins. It can reduce load "
821
  "on server but has <a rel='noreferrer' href='https://www.ipgeoblock.com/codex/"
@@ -823,129 +883,129 @@ msgid ""
823
  "restrictions</a>."
824
  msgstr ""
825
 
826
- #: admin/includes/tab-settings.php:403
827
  msgid ""
828
  "It enables to simulate the validation rules without actual blocking in order "
829
  "to check the behavior of this plugin. The results can be found on &#8220;"
830
  "Logs&#8221; tab."
831
  msgstr ""
832
 
833
- #: admin/includes/tab-settings.php:403
834
  msgid "Simulation mode"
835
  msgstr ""
836
 
837
- #: admin/includes/tab-settings.php:420
838
  msgid "Back-end target settings"
839
  msgstr ""
840
 
841
- #: admin/includes/tab-settings.php:426
842
  #, php-format
843
  msgid "<dfn title=\"It enables to validate requests to %s.\">%s</dfn>"
844
  msgstr ""
845
 
846
- #: admin/includes/tab-settings.php:432
847
  msgid "Other areas"
848
  msgstr ""
849
 
850
- #: admin/includes/tab-settings.php:433
851
  msgid "public facing pages"
852
  msgstr ""
853
 
854
- #: admin/includes/tab-settings.php:449 admin/includes/tab-settings.php:495
855
- #: admin/includes/tab-settings.php:527 admin/includes/tab-settings.php:533
856
- #: admin/includes/tab-settings.php:798
857
  msgid "Block by country"
858
  msgstr ""
859
 
860
- #: admin/includes/tab-settings.php:459
861
  msgid "The whole will be wrapped by &lt;p&gt; tag. Allowed tags: "
862
  msgstr ""
863
 
864
- #: admin/includes/tab-settings.php:459
865
  msgid "Message on comment form"
866
  msgstr ""
867
 
868
- #: admin/includes/tab-settings.php:472
869
  msgid "None"
870
  msgstr ""
871
 
872
- #: admin/includes/tab-settings.php:473
873
  msgid "Top"
874
  msgstr ""
875
 
876
- #: admin/includes/tab-settings.php:474
877
  msgid "Bottom"
878
  msgstr ""
879
 
880
- #: admin/includes/tab-settings.php:496
881
  msgid "Completely close"
882
  msgstr ""
883
 
884
- #: admin/includes/tab-settings.php:502
885
  msgid "Action to login as a registered user."
886
  msgstr ""
887
 
888
- #: admin/includes/tab-settings.php:502
889
  msgid "Log in"
890
  msgstr ""
891
 
892
- #: admin/includes/tab-settings.php:503
893
  msgid "Action to register new users."
894
  msgstr ""
895
 
896
- #: admin/includes/tab-settings.php:503
897
  msgid "Register"
898
  msgstr ""
899
 
900
- #: admin/includes/tab-settings.php:504
901
  msgid "Action to reset a password to create a new one."
902
  msgstr ""
903
 
904
- #: admin/includes/tab-settings.php:504
905
  msgid "Password Reset"
906
  msgstr ""
907
 
908
- #: admin/includes/tab-settings.php:505
909
  msgid "Action to email a password to a registered user."
910
  msgstr ""
911
 
912
- #: admin/includes/tab-settings.php:505
913
  msgid "Lost Password"
914
  msgstr ""
915
 
916
- #: admin/includes/tab-settings.php:506
917
  msgid ""
918
  "Action to show prompt to enter a password on password protected post and "
919
  "page."
920
  msgstr ""
921
 
922
- #: admin/includes/tab-settings.php:506
923
  msgid "Password protected"
924
  msgstr ""
925
 
926
- #: admin/includes/tab-settings.php:528
927
  msgid ""
928
  "<dfn title=\"Specify the individual action as a blocking target.\">Target "
929
  "actions</dfn>"
930
  msgstr ""
931
 
932
- #: admin/includes/tab-settings.php:534
933
  msgid "Prevent Zero-day Exploit"
934
  msgstr ""
935
 
936
- #: admin/includes/tab-settings.php:538
937
  msgid ""
938
- "It will block a request related to the services for both public facing pages "
939
- "and the dashboard."
940
  msgstr ""
941
 
942
- #: admin/includes/tab-settings.php:539
943
  msgid ""
944
  "Regardless of the country code, it will block a malicious request related to "
945
- "the services only for the dashboard."
946
  msgstr ""
947
 
948
- #: admin/includes/tab-settings.php:545
949
  msgid ""
950
  "This is applied to &#8220;XML-RPC&#8221; and &#8220;Login form&#8221; when "
951
  "&#8220;IP address cache&#8221; in &#8220;Privacy and record settings&#8221; "
@@ -953,23 +1013,23 @@ msgid ""
953
  "cache."
954
  msgstr ""
955
 
956
- #: admin/includes/tab-settings.php:545
957
  msgid "Max failed login attempts per IP address"
958
  msgstr ""
959
 
960
- #: admin/includes/tab-settings.php:586
961
  msgid "admin post for logged-in user"
962
  msgstr ""
963
 
964
- #: admin/includes/tab-settings.php:587
965
  msgid "admin post for non logged-in user"
966
  msgstr ""
967
 
968
- #: admin/includes/tab-settings.php:609
969
  msgid "Admin ajax/post"
970
  msgstr ""
971
 
972
- #: admin/includes/tab-settings.php:623
973
  msgid ""
974
  "Specify the action name (&#8220;action=&hellip;&#8221;) or the page name "
975
  "(&#8220;page=&hellip;&#8221;) to prevent unintended blocking caused by "
@@ -977,33 +1037,33 @@ msgid ""
977
  "Zero-day Exploit&#8221; (for logged-in user)."
978
  msgstr ""
979
 
980
- #: admin/includes/tab-settings.php:623 admin/includes/tab-settings.php:701
981
- #: admin/includes/tab-settings.php:761
982
  msgid "Exceptions"
983
  msgstr ""
984
 
985
- #: admin/includes/tab-settings.php:624
986
  msgid "Toggle with non logged-in user"
987
  msgstr ""
988
 
989
- #: admin/includes/tab-settings.php:627
990
  msgid "Candidate actions/pages"
991
  msgstr ""
992
 
993
- #: admin/includes/tab-settings.php:641
994
  #, php-format
995
  msgid ""
996
  "Regardless of the country code, it will block a malicious request to <code>"
997
  "%s&ctdot;/*.php</code>."
998
  msgstr ""
999
 
1000
- #: admin/includes/tab-settings.php:642
1001
  msgid ""
1002
  "Select the item which causes unintended blocking in order to exclude from "
1003
  "the validation target. Grayed item indicates &#8220;INACTIVE&#8221;."
1004
  msgstr ""
1005
 
1006
- #: admin/includes/tab-settings.php:643
1007
  #, php-format
1008
  msgid ""
1009
  "It configures &#8220;%s&#8221; to validate a direct request to the PHP file "
@@ -1011,37 +1071,37 @@ msgid ""
1011
  "hidden files beginning with a dot by the server's configuration."
1012
  msgstr ""
1013
 
1014
- #: admin/includes/tab-settings.php:644
1015
  msgid "Sorry, but your server type is not supported."
1016
  msgstr ""
1017
 
1018
- #: admin/includes/tab-settings.php:645
1019
  msgid ""
1020
  "You need to click &#8220;Save Changes&#8221; button for imported settings to "
1021
  "take effect."
1022
  msgstr ""
1023
 
1024
- #: admin/includes/tab-settings.php:680 admin/includes/tab-settings.php:740
1025
  msgid "Force to load WP core"
1026
  msgstr ""
1027
 
1028
- #: admin/includes/tab-settings.php:685
1029
  msgid "Plugins area"
1030
  msgstr ""
1031
 
1032
- #: admin/includes/tab-settings.php:745
1033
  msgid "Themes area"
1034
  msgstr ""
1035
 
1036
- #: admin/includes/tab-settings.php:780
1037
  msgid "Front-end target settings"
1038
  msgstr ""
1039
 
1040
- #: admin/includes/tab-settings.php:815
1041
  msgid "Follow &#8220;Validation rules and behavior&#8221;"
1042
  msgstr ""
1043
 
1044
- #: admin/includes/tab-settings.php:857
1045
  #, php-format
1046
  msgid ""
1047
  "<dfn title=\"You can configure a different response code from the Back-end. "
@@ -1049,78 +1109,78 @@ msgid ""
1049
  "\">Response code</dfn> %s"
1050
  msgstr ""
1051
 
1052
- #: admin/includes/tab-settings.php:921
1053
  msgid ""
1054
  "<dfn title=\"Specify the individual page as a blocking target.\">Page</dfn>"
1055
  msgstr ""
1056
 
1057
- #: admin/includes/tab-settings.php:933
1058
  msgid ""
1059
  "<dfn title=\"Specify the individual post type on a single page as a blocking "
1060
  "target.\">Post type</dfn>"
1061
  msgstr ""
1062
 
1063
- #: admin/includes/tab-settings.php:945
1064
  msgid ""
1065
  "<dfn title=\"Specify the individual category on a single page or archive "
1066
  "page as a blocking target.\">Category</dfn>"
1067
  msgstr ""
1068
 
1069
- #: admin/includes/tab-settings.php:957
1070
  msgid ""
1071
  "<dfn title=\"Specify the individual tag on a single page or archive page as "
1072
  "a blocking target.\">Tag</dfn>"
1073
  msgstr ""
1074
 
1075
- #: admin/includes/tab-settings.php:971
1076
  msgid "Specify the validation target on front-end."
1077
  msgstr ""
1078
 
1079
- #: admin/includes/tab-settings.php:971
1080
  msgid "Validation target"
1081
  msgstr ""
1082
 
1083
- #: admin/includes/tab-settings.php:982
1084
  msgid "All requests"
1085
  msgstr ""
1086
 
1087
- #: admin/includes/tab-settings.php:983
1088
  msgid "Specify the targets"
1089
  msgstr ""
1090
 
1091
- #: admin/includes/tab-settings.php:986
1092
  msgid ""
1093
  "Notice that &#8220;Validation timing&#8221; is deferred till &#8220;"
1094
  "wp&#8221; action hook. It means that this feature would not be compatible "
1095
  "with any page caching."
1096
  msgstr ""
1097
 
1098
- #: admin/includes/tab-settings.php:996
1099
  msgid "Specify the name of actions as exception that is invariably blocked."
1100
  msgstr ""
1101
 
1102
- #: admin/includes/tab-settings.php:996
1103
  msgid "Excluded actions"
1104
  msgstr ""
1105
 
1106
- #: admin/includes/tab-settings.php:1012
1107
  msgid ""
1108
  "<dfn title=\"Specify the frequency of request for certain period of time."
1109
  "\">Blocking condition</dfn>"
1110
  msgstr ""
1111
 
1112
- #: admin/includes/tab-settings.php:1014
1113
  #, php-format
1114
  msgid "More than %1$s page view (PV) in %2$s seconds"
1115
  msgstr ""
1116
 
1117
- #: admin/includes/tab-settings.php:1022
1118
  msgid ""
1119
  "<dfn title=\"It will validate the frequency of request.\">Block badly-"
1120
  "behaved bots and crawlers</dfn>"
1121
  msgstr ""
1122
 
1123
- #: admin/includes/tab-settings.php:1039
1124
  msgid ""
1125
  "A part of user agent string and a qualification connected with a separator "
1126
  "that indicates an applicable rule and can be &#8220;:&#8221; (pass) or "
@@ -1130,11 +1190,11 @@ msgid ""
1130
  "qualification&#8221;."
1131
  msgstr ""
1132
 
1133
- #: admin/includes/tab-settings.php:1039
1134
  msgid "UA string and qualification"
1135
  msgstr ""
1136
 
1137
- #: admin/includes/tab-settings.php:1056
1138
  msgid ""
1139
  "It enables to verify the host by reverse DNS lookup which would spend some "
1140
  "server resources. If it is disabled, &#8220;HOST&#8221; and &#8220;"
@@ -1142,28 +1202,28 @@ msgid ""
1142
  "return &#8220;true&#8221;."
1143
  msgstr ""
1144
 
1145
- #: admin/includes/tab-settings.php:1056
1146
  msgid "Reverse DNS lookup"
1147
  msgstr ""
1148
 
1149
- #: admin/includes/tab-settings.php:1075
1150
  msgid "Privacy and record settings"
1151
  msgstr ""
1152
 
1153
- #: admin/includes/tab-settings.php:1098
1154
  msgid ""
1155
  "<dfn title=\"This option restricts not to send IP address to the external "
1156
  "Geolocation APIs.\">Do not send IP address to external APIs</dfn>"
1157
  msgstr ""
1158
 
1159
- #: admin/includes/tab-settings.php:1113
1160
  msgid ""
1161
  "<dfn title=\"This option enables to record the IP address, country code and "
1162
  "failure counter of login attempts into the cache on database to minimize the "
1163
  "impact on site speed.\">Record &#8220;IP address cache&#8221;</dfn>"
1164
  msgstr ""
1165
 
1166
- #: admin/includes/tab-settings.php:1128
1167
  msgid ""
1168
  "<dfn title=\"If user authentication fails consecutively beyond &#8220;Max "
1169
  "number of failed login attempts per IP address&#8221;, subsequent login will "
@@ -1171,174 +1231,174 @@ msgid ""
1171
  "dfn>"
1172
  msgstr ""
1173
 
1174
- #: admin/includes/tab-settings.php:1144
1175
  msgid ""
1176
  "<dfn title=\"This option enables to record the validation logs including IP "
1177
  "addresses.\">Record &#8220;Validation logs&#8221;</dfn>"
1178
  msgstr ""
1179
 
1180
- #: admin/includes/tab-settings.php:1156
1181
  msgid "When blocked"
1182
  msgstr ""
1183
 
1184
- #: admin/includes/tab-settings.php:1157
1185
  msgid "When passed"
1186
  msgstr ""
1187
 
1188
- #: admin/includes/tab-settings.php:1158
1189
  msgid "When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;"
1190
  msgstr ""
1191
 
1192
- #: admin/includes/tab-settings.php:1159
1193
  msgid "Unauthenticated visitor"
1194
  msgstr ""
1195
 
1196
- #: admin/includes/tab-settings.php:1160
1197
  msgid "Authenticated user"
1198
  msgstr ""
1199
 
1200
- #: admin/includes/tab-settings.php:1161
1201
  msgid "All the validation"
1202
  msgstr ""
1203
 
1204
- #: admin/includes/tab-settings.php:1169
1205
  #, php-format
1206
  msgid ""
1207
  "<dfn title=\"The maximum number of entries in the logs is also limited to %d."
1208
  "\">Expiration time [days] for each entry</dfn>"
1209
  msgstr ""
1210
 
1211
- #: admin/includes/tab-settings.php:1186
1212
  msgid ""
1213
  "<dfn title=\"e.g. action, comment, log, pwd, FILES\">$_POST key to record "
1214
  "with value</dfn>"
1215
  msgstr ""
1216
 
1217
- #: admin/includes/tab-settings.php:1205
1218
  msgid "Maximum entries in &#8220;Logs&#8221;"
1219
  msgstr ""
1220
 
1221
- #: admin/includes/tab-settings.php:1222
1222
  msgid ""
1223
  "<dfn title=\"Select SQLite database source.\">Database source of SQLite for "
1224
  "&#8220;Live update&#8221;</dfn>"
1225
  msgstr ""
1226
 
1227
- #: admin/includes/tab-settings.php:1235
1228
  msgid "Ordinary file"
1229
  msgstr ""
1230
 
1231
- #: admin/includes/tab-settings.php:1236
1232
  msgid "In-Memory"
1233
  msgstr ""
1234
 
1235
- #: admin/includes/tab-settings.php:1239
1236
  msgid "PDO_SQLITE driver not available"
1237
  msgstr ""
1238
 
1239
- #: admin/includes/tab-settings.php:1240
1240
  msgid ""
1241
  "It takes a few tens of milliseconds as overhead. It can be safely used "
1242
  "without conflict with other plugins."
1243
  msgstr ""
1244
 
1245
- #: admin/includes/tab-settings.php:1241
1246
  msgid ""
1247
  "It takes a few milliseconds as overhead. There is a possibility of conflict "
1248
  "with other plugins using this method."
1249
  msgstr ""
1250
 
1251
- #: admin/includes/tab-settings.php:1249
1252
  msgid "Reset database source of &#8220;Live update&#8221;"
1253
  msgstr ""
1254
 
1255
- #: admin/includes/tab-settings.php:1257
1256
  msgid "Reset now"
1257
  msgstr ""
1258
 
1259
- #: admin/includes/tab-settings.php:1266 admin/includes/tab-settings.php:1427
1260
  msgid ""
1261
  "Task could not be found in WP-Cron. Please try to deactivate this plugin "
1262
  "once and activate again."
1263
  msgstr ""
1264
 
1265
- #: admin/includes/tab-settings.php:1271
1266
  msgid ""
1267
  "<dfn title=\"This option enables to schedule the WP-Cron event to remove the "
1268
  "expired entries from &#8220;IP address cache&#8221; and &#8220;Validation "
1269
  "logs&#8221;.\">Interval [sec] to cleanup expired entries of IP address</dfn>"
1270
  msgstr ""
1271
 
1272
- #: admin/includes/tab-settings.php:1280 admin/includes/tab-settings.php:1443
1273
  #, php-format
1274
  msgid "Next schedule: %s"
1275
  msgstr ""
1276
 
1277
- #: admin/includes/tab-settings.php:1287
1278
  msgid ""
1279
  "<dfn title=\"This option enables to record the number blocked countries and "
1280
  "the number of blocked requests per day.\">Record &#8220;Statistics of "
1281
  "validation&#8221;</dfn>"
1282
  msgstr ""
1283
 
1284
- #: admin/includes/tab-settings.php:1302
1285
  msgid "Maximum period for &#8220;Statistics&#8221; [days]"
1286
  msgstr ""
1287
 
1288
- #: admin/includes/tab-settings.php:1320
1289
  msgid "Remove all settings and records at uninstallation"
1290
  msgstr ""
1291
 
1292
- #: admin/includes/tab-settings.php:1337
1293
  msgid "Geolocation API settings"
1294
  msgstr ""
1295
 
1296
- #: admin/includes/tab-settings.php:1358
1297
  msgid ""
1298
  "<dfn title=\"IP address cache and local databases are scanned at the top "
1299
  "priority.\">API selection and key settings</dfn>"
1300
  msgstr ""
1301
 
1302
- #: admin/includes/tab-settings.php:1377
1303
  msgid "Timeout for network API [sec]"
1304
  msgstr ""
1305
 
1306
- #: admin/includes/tab-settings.php:1395
1307
  msgid "Local database settings"
1308
  msgstr ""
1309
 
1310
- #: admin/includes/tab-settings.php:1409
1311
  msgid "database"
1312
  msgstr ""
1313
 
1314
- #: admin/includes/tab-settings.php:1410 classes/class-ip-geo-block-cron.php:424
1315
  #, php-format
1316
  msgid "Last update: %s"
1317
  msgstr ""
1318
 
1319
- #: admin/includes/tab-settings.php:1432
1320
  msgid "Auto updating (once a month)"
1321
  msgstr ""
1322
 
1323
- #: admin/includes/tab-settings.php:1450
1324
  msgid "Download database"
1325
  msgstr ""
1326
 
1327
- #: admin/includes/tab-settings.php:1458
1328
  msgid "Download now"
1329
  msgstr ""
1330
 
1331
- #: admin/includes/tab-settings.php:1469
1332
  msgid "Plugin settings"
1333
  msgstr ""
1334
 
1335
- #: admin/includes/tab-settings.php:1481
1336
  msgid ""
1337
  "<dfn title=\"Synchronize all settings over the network wide.\">Network wide "
1338
  "settings</dfn>"
1339
  msgstr ""
1340
 
1341
- #: admin/includes/tab-settings.php:1499
1342
  msgid ""
1343
  "<dfn title=\"You can access to the login form with a specific key at "
1344
  "emergency. Please add the generated link to favorites / bookmarks in your "
@@ -1346,62 +1406,62 @@ msgid ""
1346
  "dfn>"
1347
  msgstr ""
1348
 
1349
- #: admin/includes/tab-settings.php:1515
1350
  msgid ""
1351
  "<dfn title=\"Valid key for Google Maps JavaScript API. Maps Embed API in "
1352
  "iframe can be available without key in case it's empty.\">Google Maps API "
1353
  "key</dfn>"
1354
  msgstr ""
1355
 
1356
- #: admin/includes/tab-settings.php:1531
1357
  msgid "Export / Import settings"
1358
  msgstr ""
1359
 
1360
- #: admin/includes/tab-settings.php:1538
1361
  msgid "Export settings"
1362
  msgstr ""
1363
 
1364
- #: admin/includes/tab-settings.php:1539
1365
  msgid "Import from the local file"
1366
  msgstr ""
1367
 
1368
- #: admin/includes/tab-settings.php:1539
1369
  msgid "Import settings"
1370
  msgstr ""
1371
 
1372
- #: admin/includes/tab-settings.php:1547
1373
  msgid "Import pre-defined settings"
1374
  msgstr ""
1375
 
1376
- #: admin/includes/tab-settings.php:1554
1377
  msgid ""
1378
  "Import the default settings to revert to the &#8220;Right after "
1379
  "installing&#8221; state"
1380
  msgstr ""
1381
 
1382
- #: admin/includes/tab-settings.php:1554
1383
  msgid "Default settings"
1384
  msgstr ""
1385
 
1386
- #: admin/includes/tab-settings.php:1555
1387
  msgid ""
1388
  "Import the preferred settings mainly by enabling Zero-day Exploit Prevention "
1389
  "for the &#8220;Back-end target settings&#8221;"
1390
  msgstr ""
1391
 
1392
- #: admin/includes/tab-settings.php:1555
1393
  msgid "Best for Back-end"
1394
  msgstr ""
1395
 
1396
- #: admin/includes/tab-settings.php:1564
1397
  msgid "Diagnose all DB tables"
1398
  msgstr ""
1399
 
1400
- #: admin/includes/tab-settings.php:1572
1401
  msgid "Diagnose now"
1402
  msgstr ""
1403
 
1404
- #: admin/includes/tab-settings.php:1581
1405
  msgid ""
1406
  "<dfn title=\"When you have some unexpected blocking experiences, please "
1407
  "press the button to find the blocked requests at the end of dumped "
@@ -1411,34 +1471,34 @@ msgid ""
1411
  "\">support forum</a> ]"
1412
  msgstr ""
1413
 
1414
- #: admin/includes/tab-settings.php:1588
1415
  msgid "Please copy &amp; paste when submitting your issue to support forum"
1416
  msgstr ""
1417
 
1418
- #: admin/includes/tab-settings.php:1588
1419
  msgid "Show information"
1420
  msgstr ""
1421
 
1422
- #: admin/includes/tab-settings.php:1605
1423
  msgid ""
1424
  "While Geolite2 / Maxmind and IP2Location will fetch the local databases, "
1425
  "others will pass an IP address to the 3rd parties' API via HTTP."
1426
  msgstr ""
1427
 
1428
- #: admin/includes/tab-settings.php:1606
1429
  msgid ""
1430
  "Please select the appropriate APIs to fit the privacy law / regulation in "
1431
  "your country / region."
1432
  msgstr ""
1433
 
1434
- #: admin/includes/tab-settings.php:1615
1435
  #, php-format
1436
  msgid ""
1437
  "Maxmind GeoLite2 databases and APIs need PHP version 5.4.0+ and %sPECL phar "
1438
  "2.0.0+%s."
1439
  msgstr ""
1440
 
1441
- #: admin/includes/tab-settings.php:1623
1442
  #, php-format
1443
  msgid ""
1444
  "Please refer to \"%sLiving with cache plugin%s\" for compatibility with "
@@ -1545,16 +1605,16 @@ msgstr ""
1545
  msgid "Please set the proper condition to record IP address in cache."
1546
  msgstr ""
1547
 
1548
- #: classes/class-ip-geo-block-cron.php:223
1549
  #, php-format
1550
  msgid "Can't lock <code>%s</code>. Please try again after a while."
1551
  msgstr ""
1552
 
1553
- #: classes/class-ip-geo-block-cron.php:302
1554
  msgid "Your database file is up-to-date."
1555
  msgstr ""
1556
 
1557
- #: classes/class-ip-geo-block-cron.php:405
1558
  msgid "gz or zip is not supported on your system."
1559
  msgstr ""
1560
 
@@ -1590,12 +1650,19 @@ msgid ""
1590
  "again."
1591
  msgstr ""
1592
 
1593
- #: wp-content/ip-geo-api/ip2location/class-ip2location.php:151
1594
- #: wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php:144
1595
- #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:228
1596
  msgid "Database file does not exist."
1597
  msgstr ""
1598
 
 
 
 
 
 
 
 
1599
  #: wp-content/mu-plugins/ip-geo-block-mu.php:72
1600
  #, php-format
1601
  msgid ""
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.17\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ip-geo-block\n"
7
+ "POT-Creation-Date: 2018-12-03 23:01+0900\n"
8
+ "PO-Revision-Date: 2018-12-03 23:35+0900\n"
9
  "Language-Team: \n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
26
  "posted from outside your nation, and also prevents zero-day exploit."
27
  msgstr ""
28
 
29
+ #: admin/class-ip-geo-block-admin.php:296
30
  msgid "Are you sure ?"
31
  msgstr ""
32
 
33
+ #: admin/class-ip-geo-block-admin.php:297
34
+ #: admin/class-ip-geo-block-admin.php:791
35
  msgid "Open a new window"
36
  msgstr ""
37
 
38
+ #: admin/class-ip-geo-block-admin.php:298 admin/includes/tab-settings.php:1528
39
  msgid "Generate new link"
40
  msgstr ""
41
 
42
+ #: admin/class-ip-geo-block-admin.php:299 admin/includes/tab-settings.php:1529
43
  msgid "Delete current link"
44
  msgstr ""
45
 
46
+ #: admin/class-ip-geo-block-admin.php:300
47
  msgid ""
48
  "Please add the following link to favorites / bookmarks in your browser : "
49
  msgstr ""
50
 
51
+ #: admin/class-ip-geo-block-admin.php:301
52
  msgid "ajax for logged-in user"
53
  msgstr ""
54
 
55
+ #: admin/class-ip-geo-block-admin.php:302
56
  msgid "ajax for non logged-in user"
57
  msgstr ""
58
 
59
+ #: admin/class-ip-geo-block-admin.php:303
60
  #, php-format
61
  msgid "[Found: %d]"
62
  msgstr ""
63
 
64
+ #: admin/class-ip-geo-block-admin.php:304
65
  #, php-format
66
  msgid "Find and verify `%s` on &#8220;Logs&#8221; tab."
67
  msgstr ""
68
 
69
+ #: admin/class-ip-geo-block-admin.php:305
70
  msgid "This feature is available with HTML5 compliant browsers."
71
  msgstr ""
72
 
73
+ #: admin/class-ip-geo-block-admin.php:306
74
  msgid "The selected row cannot be found in the table."
75
  msgstr ""
76
 
77
+ #: admin/class-ip-geo-block-admin.php:307
78
+ #: admin/class-ip-geo-block-admin.php:1694
79
  #, php-format
80
  msgid "An error occurred while executing the ajax command `%s`."
81
  msgstr ""
82
 
83
+ #: admin/class-ip-geo-block-admin.php:311
84
  msgid "No data available in table"
85
  msgstr ""
86
 
87
+ #: admin/class-ip-geo-block-admin.php:312
88
  msgid "No matching records found"
89
  msgstr ""
90
 
91
+ #: admin/class-ip-geo-block-admin.php:313
92
  #: admin/includes/class-admin-ajax.php:107
93
  #: admin/includes/class-admin-ajax.php:240
94
  #: admin/includes/tab-geolocation.php:74
95
  msgid "IP address"
96
  msgstr ""
97
 
98
+ #: admin/class-ip-geo-block-admin.php:314
99
  #: admin/includes/class-admin-ajax.php:108
100
  #: admin/includes/class-admin-ajax.php:241
101
  msgid "Code"
102
  msgstr ""
103
 
104
+ #: admin/class-ip-geo-block-admin.php:315
105
  #: admin/includes/class-admin-ajax.php:109
106
  #: admin/includes/class-admin-ajax.php:242
107
  msgid "ASN"
108
  msgstr ""
109
 
110
+ #: admin/class-ip-geo-block-admin.php:316
111
  #: admin/includes/class-admin-ajax.php:243
112
  msgid "Host name"
113
  msgstr ""
114
 
115
+ #: admin/class-ip-geo-block-admin.php:317
116
  #: admin/includes/class-admin-ajax.php:110
117
  #: admin/includes/class-admin-ajax.php:244
118
  msgid "Target"
119
  msgstr ""
120
 
121
+ #: admin/class-ip-geo-block-admin.php:318
122
  #: admin/includes/class-admin-ajax.php:245
123
  msgid "Failure / Total"
124
  msgstr ""
125
 
126
+ #: admin/class-ip-geo-block-admin.php:319
127
  #: admin/includes/class-admin-ajax.php:246
128
  msgid "Elapsed[sec]"
129
  msgstr ""
130
 
131
+ #: admin/class-ip-geo-block-admin.php:320
132
  #: admin/includes/class-admin-ajax.php:106
133
  msgid "Time"
134
  msgstr ""
135
 
136
+ #: admin/class-ip-geo-block-admin.php:321
137
  #: admin/includes/class-admin-ajax.php:111
138
  msgid "Result"
139
  msgstr ""
140
 
141
+ #: admin/class-ip-geo-block-admin.php:322
142
  #: admin/includes/class-admin-ajax.php:112
143
  msgid "Request"
144
  msgstr ""
145
 
146
+ #: admin/class-ip-geo-block-admin.php:323
147
  #: admin/includes/class-admin-ajax.php:113
148
  msgid "User agent"
149
  msgstr ""
150
 
151
+ #: admin/class-ip-geo-block-admin.php:324
152
  #: admin/includes/class-admin-ajax.php:114
153
  msgid "HTTP headers"
154
  msgstr ""
155
 
156
+ #: admin/class-ip-geo-block-admin.php:325
157
  #: admin/includes/class-admin-ajax.php:115
158
  msgid "$_POST data"
159
  msgstr ""
160
 
161
+ #: admin/class-ip-geo-block-admin.php:351
162
  msgid "Contribute on GitHub"
163
  msgstr ""
164
 
165
+ #: admin/class-ip-geo-block-admin.php:365
166
+ #: admin/class-ip-geo-block-admin.php:491
167
+ #: admin/class-ip-geo-block-admin.php:732
168
+ #: admin/class-ip-geo-block-admin.php:752
169
+ #: admin/class-ip-geo-block-admin.php:768
170
  msgid "Settings"
171
  msgstr ""
172
 
173
+ #: admin/class-ip-geo-block-admin.php:459
174
  #: admin/class-ip-geo-block-admin.php:460
175
+ #: admin/class-ip-geo-block-admin.php:470
176
  #: admin/class-ip-geo-block-admin.php:471
177
+ #: admin/class-ip-geo-block-admin.php:480
178
+ #: admin/class-ip-geo-block-admin.php:490
 
179
  msgid "IP Geo Block"
180
  msgstr ""
181
 
182
+ #: admin/class-ip-geo-block-admin.php:481
183
+ #: admin/class-ip-geo-block-admin.php:731
184
+ #: admin/class-ip-geo-block-admin.php:749
185
+ #: admin/class-ip-geo-block-admin.php:766
186
  msgid "Sites list"
187
  msgstr ""
188
 
189
+ #: admin/class-ip-geo-block-admin.php:521
190
  msgid "You need WordPress 3.7+."
191
  msgstr ""
192
 
193
+ #: admin/class-ip-geo-block-admin.php:525
194
  #, php-format
195
  msgid ""
196
  "Can not load Geolocation API libraries from <code>%s</code>. It seems to "
199
  "contents of tokkonopapa/WordPress-IP-Geo-API as a zip file\">ZIP file</a> "
200
  "from <a rel=\"noreferrer\" href=\"https://github.com/tokkonopapa/WordPress-"
201
  "IP-Geo-API\" title=\"tokkonopapa/WordPress-IP-Geo-API - GitHub\">WordPress-"
202
+ "IP-Geo-API</a>. Try to deactivate IP Geo Block once and activate it again, "
203
+ "or install <code>ip-geo-api</code> with write permission according to <a rel="
204
+ "\"noreferrer\" href=\"https://www.ipgeoblock.com/codex/how-to-fix-permission-"
205
+ "troubles.html\" title=\"How can I fix permission troubles? | IP Geo Block"
206
+ "\">this instruction</a>."
207
  msgstr ""
208
 
209
+ #: admin/class-ip-geo-block-admin.php:534
210
  #, php-format
211
  msgid ""
212
  "You should select at least one API at <a href=\"%s\">Geolocation API "
214
  "expires."
215
  msgstr ""
216
 
217
+ #: admin/class-ip-geo-block-admin.php:543
218
  #, php-format
219
  msgid ""
220
  "You should select at least one API for local database at <a href=\"%s"
222
  "slow down the site."
223
  msgstr ""
224
 
225
+ #: admin/class-ip-geo-block-admin.php:554
226
  #, php-format
227
  msgid ""
228
  "Now downloading geolocation databases in background. After a little while, "
230
  "strong>&#8221; at <a href=\"%s\">Validation rules and behavior</a>."
231
  msgstr ""
232
 
233
+ #: admin/class-ip-geo-block-admin.php:560
234
  #, php-format
235
  msgid ""
236
  "The &#8220;<strong>Matching rule</strong>&#8221; is not set properly. Please "
237
  "confirm it at <a href=\"%s\">Validation rules and behavior</a>."
238
  msgstr ""
239
 
240
+ #: admin/class-ip-geo-block-admin.php:569
241
  msgid "Local database and matching rule have been updated."
242
  msgstr ""
243
 
244
+ #: admin/class-ip-geo-block-admin.php:580
245
  msgid ""
246
  "Once you logout, you will be unable to login again because the number of "
247
  "login attempts reaches the limit."
248
  msgstr ""
249
 
250
+ #: admin/class-ip-geo-block-admin.php:582
251
  #, php-format
252
  msgid ""
253
  "Please remove your IP address in &#8220;%1$sStatistics in IP address cache"
255
  "yourself out."
256
  msgstr ""
257
 
258
+ #: admin/class-ip-geo-block-admin.php:593
259
  msgid ""
260
  "Once you logout, you will be unable to login again because your country code "
261
  "or IP address is in the blacklist."
262
  msgstr ""
263
 
264
+ #: admin/class-ip-geo-block-admin.php:594
265
  msgid ""
266
  "Once you logout, you will be unable to login again because your country code "
267
  "or IP address is not in the whitelist."
268
  msgstr ""
269
 
270
+ #: admin/class-ip-geo-block-admin.php:598
271
  #, php-format
272
  msgid "Please check your &#8220;%sValidation rules and behavior%s&#8221;."
273
  msgstr ""
274
 
275
+ #: admin/class-ip-geo-block-admin.php:602
276
  #, php-format
277
  msgid ""
278
  "Please confirm your local geolocation database files exist at &#8220;%sLocal "
280
  "&#8220;%sStatistics in cache%s&#8221; section."
281
  msgstr ""
282
 
283
+ #: admin/class-ip-geo-block-admin.php:616
284
  #, php-format
285
  msgid ""
286
  "Emergency login link is outdated. Please delete it once and generate again "
288
  "favorites / bookmarks in your browser."
289
  msgstr ""
290
 
291
+ #: admin/class-ip-geo-block-admin.php:625
292
  msgid ""
293
  "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php) at &#8220;Validation "
294
  "timing&#8221; is imcompatible with <strong>IP Geo Allow</strong>. Please "
295
  "select &#8220;init&#8221; action hook."
296
  msgstr ""
297
 
298
+ #: admin/class-ip-geo-block-admin.php:733
299
  msgid "Statistics"
300
  msgstr ""
301
 
302
+ #: admin/class-ip-geo-block-admin.php:734
303
  msgid "Logs"
304
  msgstr ""
305
 
306
+ #: admin/class-ip-geo-block-admin.php:735
307
  msgid "Search"
308
  msgstr ""
309
 
310
+ #: admin/class-ip-geo-block-admin.php:736
311
  msgid "Attribution"
312
  msgstr ""
313
 
314
+ #: admin/class-ip-geo-block-admin.php:784
 
 
 
 
 
315
  msgid "Toggle all"
316
  msgstr ""
317
 
318
+ #: admin/class-ip-geo-block-admin.php:787
319
  msgid ""
320
  "Independent of &#8220;Privacy and record settings&#8221;, you can see all "
321
  "the requests validated by this plugin in almost real time."
322
  msgstr ""
323
 
324
+ #: admin/class-ip-geo-block-admin.php:787 admin/includes/tab-accesslog.php:39
325
  msgid "Live update"
326
  msgstr ""
327
 
328
+ #: admin/class-ip-geo-block-admin.php:791
329
  msgid "Open a new window on clicking the link in the chart."
330
  msgstr ""
331
 
332
+ #: admin/class-ip-geo-block-admin.php:815
333
  msgid "Thanks for providing these great services for free."
334
  msgstr ""
335
 
336
+ #: admin/class-ip-geo-block-admin.php:816
337
  msgid ""
338
  "(Most browsers will redirect you to each site <a href=\"https://www."
339
  "ipgeoblock.com/etc/referer.html\" title=\"Referer Checker\">without referrer "
340
  "when you click the link</a>.)"
341
  msgstr ""
342
 
343
+ #: admin/class-ip-geo-block-admin.php:821
344
  msgid "Back to top"
345
  msgstr ""
346
 
347
+ #: admin/class-ip-geo-block-admin.php:913
348
  msgid "Enable"
349
  msgstr ""
350
 
351
+ #: admin/class-ip-geo-block-admin.php:928
352
  msgid "Select one"
353
  msgstr ""
354
 
355
+ #: admin/class-ip-geo-block-admin.php:1363
356
  msgid "You do not have sufficient permissions to access this page."
357
  msgstr ""
358
 
359
+ #: admin/class-ip-geo-block-admin.php:1390
360
  #: admin/includes/class-admin-rewrite.php:194
361
+ #: classes/class-ip-geo-block-cron.php:228
362
+ #: classes/class-ip-geo-block-cron.php:332
363
+ #: classes/class-ip-geo-block-cron.php:410
364
+ #: classes/class-ip-geo-block-opts.php:482
365
  #, php-format
366
  msgid "Unable to write <code>%s</code>. Please check the permission."
367
  msgstr ""
368
 
369
+ #: admin/class-ip-geo-block-admin.php:1424
370
  msgid "Settings saved."
371
  msgstr ""
372
 
373
+ #: admin/class-ip-geo-block-admin.php:1529
374
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:91
375
+ msgid ""
376
+ "<span title=\"Show only passed entries whose country codes are in Whitelist."
377
+ "\">Passed in Whitelist</span>"
378
+ msgstr ""
379
+
380
+ #: admin/class-ip-geo-block-admin.php:1530
381
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:92
382
+ msgid ""
383
+ "<span title=\"Show only passed entries whose country codes are in Blacklist."
384
+ "\">Passed in Blacklist</span>"
385
+ msgstr ""
386
+
387
+ #: admin/class-ip-geo-block-admin.php:1531
388
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:93
389
+ msgid ""
390
+ "<span title=\"Show only passed entries whose country codes are not in either "
391
+ "list.\">Passed not in List</span>"
392
+ msgstr ""
393
+
394
+ #: admin/class-ip-geo-block-admin.php:1532
395
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:94
396
+ msgid ""
397
+ "<span title=\"Show only blocked entries whose country codes are in Whitelist."
398
+ "\">Blocked in Whitelist</span>"
399
+ msgstr ""
400
+
401
+ #: admin/class-ip-geo-block-admin.php:1533
402
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:95
403
+ msgid ""
404
+ "<span title=\"Show only blocked entries whose country codes are in Blacklist."
405
+ "\">Blocked in Blacklist</span>"
406
+ msgstr ""
407
+
408
+ #: admin/class-ip-geo-block-admin.php:1534
409
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:96
410
+ msgid ""
411
+ "<span title=\"Show only blocked entries whose country codes are not in "
412
+ "either list.\">Blocked not in List</span>"
413
+ msgstr ""
414
+
415
  #: admin/includes/class-admin-ajax.php:72
416
  #: admin/includes/class-admin-ajax.php:75 admin/includes/tab-settings.php:84
417
  #: admin/includes/tab-settings.php:103
430
  msgstr ""
431
 
432
  #: admin/includes/class-admin-rewrite.php:168
433
+ #: classes/class-ip-geo-block-cron.php:223
434
+ #: classes/class-ip-geo-block-cron.php:405
435
  #, php-format
436
  msgid "Unable to read <code>%s</code>. Please check the permission."
437
  msgstr ""
455
  msgid "Help"
456
  msgstr ""
457
 
458
+ #: admin/includes/tab-accesslog.php:55 admin/includes/tab-settings.php:450
459
  msgid "Comment post"
460
  msgstr ""
461
 
462
+ #: admin/includes/tab-accesslog.php:56 admin/includes/tab-settings.php:451
463
  msgid "XML-RPC"
464
  msgstr ""
465
 
466
+ #: admin/includes/tab-accesslog.php:57 admin/includes/tab-settings.php:452
467
  msgid "Login form"
468
  msgstr ""
469
 
470
+ #: admin/includes/tab-accesslog.php:58 admin/includes/tab-settings.php:453
471
  msgid "Admin area"
472
  msgstr ""
473
 
474
+ #: admin/includes/tab-accesslog.php:59 admin/includes/tab-settings.php:455
475
  msgid "Public facing pages"
476
  msgstr ""
477
 
491
  msgid "Reset"
492
  msgstr ""
493
 
494
+ #: admin/includes/tab-accesslog.php:117
495
  msgid "Preset filters"
496
  msgstr ""
497
 
498
+ #: admin/includes/tab-accesslog.php:133 admin/includes/tab-statistics.php:238
499
  msgid "Bulk action"
500
  msgstr ""
501
 
502
+ #: admin/includes/tab-accesslog.php:144 admin/includes/tab-statistics.php:249
503
  msgid "Remove entries by IP address"
504
  msgstr ""
505
 
506
+ #: admin/includes/tab-accesslog.php:145 admin/includes/tab-statistics.php:250
507
  msgid "Add IP address to &#8220;Whitelist&#8221;"
508
  msgstr ""
509
 
510
+ #: admin/includes/tab-accesslog.php:146 admin/includes/tab-statistics.php:251
511
  msgid "Add IP address to &#8220;Blacklist&#8221;"
512
  msgstr ""
513
 
514
+ #: admin/includes/tab-accesslog.php:147 admin/includes/tab-statistics.php:252
515
  msgid "Add AS number to &#8220;Whitelist&#8221;"
516
  msgstr ""
517
 
518
+ #: admin/includes/tab-accesslog.php:148 admin/includes/tab-statistics.php:253
519
  msgid "Add AS number to &#8220;Blacklist&#8221;"
520
  msgstr ""
521
 
522
+ #: admin/includes/tab-accesslog.php:150 admin/includes/tab-network.php:56
523
  #: admin/includes/tab-statistics.php:255
524
  msgid "Apply"
525
  msgstr ""
526
 
527
+ #: admin/includes/tab-accesslog.php:157 admin/includes/tab-statistics.php:191
528
  msgid "Clear logs"
529
  msgstr ""
530
 
531
+ #: admin/includes/tab-accesslog.php:165 admin/includes/tab-statistics.php:167
532
  #: admin/includes/tab-statistics.php:199 admin/includes/tab-statistics.php:269
533
  msgid "Clear all"
534
  msgstr ""
535
 
536
+ #: admin/includes/tab-accesslog.php:174
537
  msgid "Export logs"
538
  msgstr ""
539
 
540
+ #: admin/includes/tab-accesslog.php:180 admin/includes/tab-settings.php:1560
541
  #: admin/includes/tab-statistics.php:283
542
  msgid "Export to the local file"
543
  msgstr ""
544
 
545
+ #: admin/includes/tab-accesslog.php:180 admin/includes/tab-statistics.php:283
546
  msgid "Export csv"
547
  msgstr ""
548
 
549
+ #: admin/includes/tab-accesslog.php:206 admin/includes/tab-network.php:112
550
  #: admin/includes/tab-statistics.php:410
551
  #, php-format
552
  msgid "[ %sRecord &#8220;Validation logs&#8221;%s ] is disabled."
553
  msgstr ""
554
 
555
+ #: admin/includes/tab-accesslog.php:207 admin/includes/tab-network.php:113
556
  #: admin/includes/tab-statistics.php:411
557
  msgid ""
558
  "Please set the proper condition to record and analyze the validation logs."
570
  msgid "Geolocation API"
571
  msgstr ""
572
 
573
+ #: admin/includes/tab-geolocation.php:89 admin/includes/tab-settings.php:1105
574
  msgid ""
575
  "<dfn title=\"IP address is always encrypted on recording in Cache and Logs. "
576
  "Moreover, this option replaces the end of IP address with &#8220;***&#8221; "
704
  "country code</dfn>"
705
  msgstr ""
706
 
707
+ #: admin/includes/tab-settings.php:125 admin/includes/tab-settings.php:827
708
  msgid "Matching rule"
709
  msgstr ""
710
 
800
  "this validation.\">Prevent malicious file uploading</dfn>"
801
  msgstr ""
802
 
803
+ #: admin/includes/tab-settings.php:304 admin/includes/tab-settings.php:516
804
+ #: admin/includes/tab-settings.php:661 admin/includes/tab-settings.php:1177
805
  msgid "Disable"
806
  msgstr ""
807
 
813
  msgid "Verify file extension only"
814
  msgstr ""
815
 
816
+ #: admin/includes/tab-settings.php:314
817
+ msgid ""
818
+ "<dfn title=\"Specify the table names to be verified for single site. This "
819
+ "verification will be skipped if empty.\">pre_update_option</dfn>"
820
+ msgstr ""
821
+
822
+ #: admin/includes/tab-settings.php:316
823
+ msgid ""
824
+ "<dfn title=\"Specify the table names to be verified for multisite. This "
825
+ "verification will be skipped if empty.\">pre_update_site_option</dfn>"
826
+ msgstr ""
827
+
828
+ #: admin/includes/tab-settings.php:321
829
+ msgid ""
830
+ "<dfn title=\"It prevents to manipulate metadata in database without admin "
831
+ "privilege.\">Prevent metadata alteration</dfn>"
832
+ msgstr ""
833
+
834
+ #: admin/includes/tab-settings.php:337
835
  #, php-format
836
  msgid ""
837
  "<dfn title=\"You can put your original 403.php and so on into your theme "
838
  "directory.\">Response code</dfn> %s"
839
  msgstr ""
840
 
841
+ #: admin/includes/tab-settings.php:366 admin/includes/tab-settings.php:910
842
  msgid ""
843
  "<dfn title=\"Specify the URL for response code 2xx and 3xx. If it is pointed "
844
  "to a public facing page, visitors would not be blocked on the page to "
847
  "\">Redirect URL</dfn>"
848
  msgstr ""
849
 
850
+ #: admin/includes/tab-settings.php:383 admin/includes/tab-settings.php:928
851
  msgid ""
852
  "<dfn title=\"Specify the message for response code 4xx and 5xx.\">Response "
853
  "message</dfn>"
854
  msgstr ""
855
 
856
+ #: admin/includes/tab-settings.php:401
857
  msgid "Select when to run the validation."
858
  msgstr ""
859
 
860
+ #: admin/includes/tab-settings.php:401
861
  msgid "Validation timing"
862
  msgstr ""
863
 
864
+ #: admin/includes/tab-settings.php:412
865
  msgid "&#8220;init&#8221; action hook"
866
  msgstr ""
867
 
868
+ #: admin/includes/tab-settings.php:413
869
  msgid "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)"
870
  msgstr ""
871
 
872
+ #: admin/includes/tab-settings.php:416
873
  msgid ""
874
  "Validate at &#8220;init&#8221; action hook in the same manner as typical "
875
  "plugins."
876
  msgstr ""
877
 
878
+ #: admin/includes/tab-settings.php:417
879
  msgid ""
880
  "Validate at an earlier phase than other typical plugins. It can reduce load "
881
  "on server but has <a rel='noreferrer' href='https://www.ipgeoblock.com/codex/"
883
  "restrictions</a>."
884
  msgstr ""
885
 
886
+ #: admin/includes/tab-settings.php:425
887
  msgid ""
888
  "It enables to simulate the validation rules without actual blocking in order "
889
  "to check the behavior of this plugin. The results can be found on &#8220;"
890
  "Logs&#8221; tab."
891
  msgstr ""
892
 
893
+ #: admin/includes/tab-settings.php:425
894
  msgid "Simulation mode"
895
  msgstr ""
896
 
897
+ #: admin/includes/tab-settings.php:442
898
  msgid "Back-end target settings"
899
  msgstr ""
900
 
901
+ #: admin/includes/tab-settings.php:448
902
  #, php-format
903
  msgid "<dfn title=\"It enables to validate requests to %s.\">%s</dfn>"
904
  msgstr ""
905
 
906
+ #: admin/includes/tab-settings.php:454
907
  msgid "Other areas"
908
  msgstr ""
909
 
910
+ #: admin/includes/tab-settings.php:455
911
  msgid "public facing pages"
912
  msgstr ""
913
 
914
+ #: admin/includes/tab-settings.php:471 admin/includes/tab-settings.php:517
915
+ #: admin/includes/tab-settings.php:549 admin/includes/tab-settings.php:555
916
+ #: admin/includes/tab-settings.php:820
917
  msgid "Block by country"
918
  msgstr ""
919
 
920
+ #: admin/includes/tab-settings.php:481
921
  msgid "The whole will be wrapped by &lt;p&gt; tag. Allowed tags: "
922
  msgstr ""
923
 
924
+ #: admin/includes/tab-settings.php:481
925
  msgid "Message on comment form"
926
  msgstr ""
927
 
928
+ #: admin/includes/tab-settings.php:494
929
  msgid "None"
930
  msgstr ""
931
 
932
+ #: admin/includes/tab-settings.php:495
933
  msgid "Top"
934
  msgstr ""
935
 
936
+ #: admin/includes/tab-settings.php:496
937
  msgid "Bottom"
938
  msgstr ""
939
 
940
+ #: admin/includes/tab-settings.php:518
941
  msgid "Completely close"
942
  msgstr ""
943
 
944
+ #: admin/includes/tab-settings.php:524
945
  msgid "Action to login as a registered user."
946
  msgstr ""
947
 
948
+ #: admin/includes/tab-settings.php:524
949
  msgid "Log in"
950
  msgstr ""
951
 
952
+ #: admin/includes/tab-settings.php:525
953
  msgid "Action to register new users."
954
  msgstr ""
955
 
956
+ #: admin/includes/tab-settings.php:525
957
  msgid "Register"
958
  msgstr ""
959
 
960
+ #: admin/includes/tab-settings.php:526
961
  msgid "Action to reset a password to create a new one."
962
  msgstr ""
963
 
964
+ #: admin/includes/tab-settings.php:526
965
  msgid "Password Reset"
966
  msgstr ""
967
 
968
+ #: admin/includes/tab-settings.php:527
969
  msgid "Action to email a password to a registered user."
970
  msgstr ""
971
 
972
+ #: admin/includes/tab-settings.php:527
973
  msgid "Lost Password"
974
  msgstr ""
975
 
976
+ #: admin/includes/tab-settings.php:528
977
  msgid ""
978
  "Action to show prompt to enter a password on password protected post and "
979
  "page."
980
  msgstr ""
981
 
982
+ #: admin/includes/tab-settings.php:528
983
  msgid "Password protected"
984
  msgstr ""
985
 
986
+ #: admin/includes/tab-settings.php:550
987
  msgid ""
988
  "<dfn title=\"Specify the individual action as a blocking target.\">Target "
989
  "actions</dfn>"
990
  msgstr ""
991
 
992
+ #: admin/includes/tab-settings.php:556
993
  msgid "Prevent Zero-day Exploit"
994
  msgstr ""
995
 
996
+ #: admin/includes/tab-settings.php:560
997
  msgid ""
998
+ "It will block a request related to the services for both &#8220;non-logged "
999
+ "in user&#8221; and &#8220;logged-in user&#8221;."
1000
  msgstr ""
1001
 
1002
+ #: admin/includes/tab-settings.php:561
1003
  msgid ""
1004
  "Regardless of the country code, it will block a malicious request related to "
1005
+ "the services only for &#8220;logged-in user&#8221;."
1006
  msgstr ""
1007
 
1008
+ #: admin/includes/tab-settings.php:567
1009
  msgid ""
1010
  "This is applied to &#8220;XML-RPC&#8221; and &#8220;Login form&#8221; when "
1011
  "&#8220;IP address cache&#8221; in &#8220;Privacy and record settings&#8221; "
1013
  "cache."
1014
  msgstr ""
1015
 
1016
+ #: admin/includes/tab-settings.php:567
1017
  msgid "Max failed login attempts per IP address"
1018
  msgstr ""
1019
 
1020
+ #: admin/includes/tab-settings.php:608
1021
  msgid "admin post for logged-in user"
1022
  msgstr ""
1023
 
1024
+ #: admin/includes/tab-settings.php:609
1025
  msgid "admin post for non logged-in user"
1026
  msgstr ""
1027
 
1028
+ #: admin/includes/tab-settings.php:631
1029
  msgid "Admin ajax/post"
1030
  msgstr ""
1031
 
1032
+ #: admin/includes/tab-settings.php:645
1033
  msgid ""
1034
  "Specify the action name (&#8220;action=&hellip;&#8221;) or the page name "
1035
  "(&#8220;page=&hellip;&#8221;) to prevent unintended blocking caused by "
1037
  "Zero-day Exploit&#8221; (for logged-in user)."
1038
  msgstr ""
1039
 
1040
+ #: admin/includes/tab-settings.php:645 admin/includes/tab-settings.php:723
1041
+ #: admin/includes/tab-settings.php:783
1042
  msgid "Exceptions"
1043
  msgstr ""
1044
 
1045
+ #: admin/includes/tab-settings.php:646
1046
  msgid "Toggle with non logged-in user"
1047
  msgstr ""
1048
 
1049
+ #: admin/includes/tab-settings.php:649
1050
  msgid "Candidate actions/pages"
1051
  msgstr ""
1052
 
1053
+ #: admin/includes/tab-settings.php:663
1054
  #, php-format
1055
  msgid ""
1056
  "Regardless of the country code, it will block a malicious request to <code>"
1057
  "%s&ctdot;/*.php</code>."
1058
  msgstr ""
1059
 
1060
+ #: admin/includes/tab-settings.php:664
1061
  msgid ""
1062
  "Select the item which causes unintended blocking in order to exclude from "
1063
  "the validation target. Grayed item indicates &#8220;INACTIVE&#8221;."
1064
  msgstr ""
1065
 
1066
+ #: admin/includes/tab-settings.php:665
1067
  #, php-format
1068
  msgid ""
1069
  "It configures &#8220;%s&#8221; to validate a direct request to the PHP file "
1071
  "hidden files beginning with a dot by the server's configuration."
1072
  msgstr ""
1073
 
1074
+ #: admin/includes/tab-settings.php:666
1075
  msgid "Sorry, but your server type is not supported."
1076
  msgstr ""
1077
 
1078
+ #: admin/includes/tab-settings.php:667
1079
  msgid ""
1080
  "You need to click &#8220;Save Changes&#8221; button for imported settings to "
1081
  "take effect."
1082
  msgstr ""
1083
 
1084
+ #: admin/includes/tab-settings.php:702 admin/includes/tab-settings.php:762
1085
  msgid "Force to load WP core"
1086
  msgstr ""
1087
 
1088
+ #: admin/includes/tab-settings.php:707
1089
  msgid "Plugins area"
1090
  msgstr ""
1091
 
1092
+ #: admin/includes/tab-settings.php:767
1093
  msgid "Themes area"
1094
  msgstr ""
1095
 
1096
+ #: admin/includes/tab-settings.php:802
1097
  msgid "Front-end target settings"
1098
  msgstr ""
1099
 
1100
+ #: admin/includes/tab-settings.php:837
1101
  msgid "Follow &#8220;Validation rules and behavior&#8221;"
1102
  msgstr ""
1103
 
1104
+ #: admin/includes/tab-settings.php:879
1105
  #, php-format
1106
  msgid ""
1107
  "<dfn title=\"You can configure a different response code from the Back-end. "
1109
  "\">Response code</dfn> %s"
1110
  msgstr ""
1111
 
1112
+ #: admin/includes/tab-settings.php:943
1113
  msgid ""
1114
  "<dfn title=\"Specify the individual page as a blocking target.\">Page</dfn>"
1115
  msgstr ""
1116
 
1117
+ #: admin/includes/tab-settings.php:955
1118
  msgid ""
1119
  "<dfn title=\"Specify the individual post type on a single page as a blocking "
1120
  "target.\">Post type</dfn>"
1121
  msgstr ""
1122
 
1123
+ #: admin/includes/tab-settings.php:967
1124
  msgid ""
1125
  "<dfn title=\"Specify the individual category on a single page or archive "
1126
  "page as a blocking target.\">Category</dfn>"
1127
  msgstr ""
1128
 
1129
+ #: admin/includes/tab-settings.php:979
1130
  msgid ""
1131
  "<dfn title=\"Specify the individual tag on a single page or archive page as "
1132
  "a blocking target.\">Tag</dfn>"
1133
  msgstr ""
1134
 
1135
+ #: admin/includes/tab-settings.php:993
1136
  msgid "Specify the validation target on front-end."
1137
  msgstr ""
1138
 
1139
+ #: admin/includes/tab-settings.php:993
1140
  msgid "Validation target"
1141
  msgstr ""
1142
 
1143
+ #: admin/includes/tab-settings.php:1004
1144
  msgid "All requests"
1145
  msgstr ""
1146
 
1147
+ #: admin/includes/tab-settings.php:1005
1148
  msgid "Specify the targets"
1149
  msgstr ""
1150
 
1151
+ #: admin/includes/tab-settings.php:1008
1152
  msgid ""
1153
  "Notice that &#8220;Validation timing&#8221; is deferred till &#8220;"
1154
  "wp&#8221; action hook. It means that this feature would not be compatible "
1155
  "with any page caching."
1156
  msgstr ""
1157
 
1158
+ #: admin/includes/tab-settings.php:1018
1159
  msgid "Specify the name of actions as exception that is invariably blocked."
1160
  msgstr ""
1161
 
1162
+ #: admin/includes/tab-settings.php:1018
1163
  msgid "Excluded actions"
1164
  msgstr ""
1165
 
1166
+ #: admin/includes/tab-settings.php:1034
1167
  msgid ""
1168
  "<dfn title=\"Specify the frequency of request for certain period of time."
1169
  "\">Blocking condition</dfn>"
1170
  msgstr ""
1171
 
1172
+ #: admin/includes/tab-settings.php:1036
1173
  #, php-format
1174
  msgid "More than %1$s page view (PV) in %2$s seconds"
1175
  msgstr ""
1176
 
1177
+ #: admin/includes/tab-settings.php:1044
1178
  msgid ""
1179
  "<dfn title=\"It will validate the frequency of request.\">Block badly-"
1180
  "behaved bots and crawlers</dfn>"
1181
  msgstr ""
1182
 
1183
+ #: admin/includes/tab-settings.php:1061
1184
  msgid ""
1185
  "A part of user agent string and a qualification connected with a separator "
1186
  "that indicates an applicable rule and can be &#8220;:&#8221; (pass) or "
1190
  "qualification&#8221;."
1191
  msgstr ""
1192
 
1193
+ #: admin/includes/tab-settings.php:1061
1194
  msgid "UA string and qualification"
1195
  msgstr ""
1196
 
1197
+ #: admin/includes/tab-settings.php:1078
1198
  msgid ""
1199
  "It enables to verify the host by reverse DNS lookup which would spend some "
1200
  "server resources. If it is disabled, &#8220;HOST&#8221; and &#8220;"
1202
  "return &#8220;true&#8221;."
1203
  msgstr ""
1204
 
1205
+ #: admin/includes/tab-settings.php:1078
1206
  msgid "Reverse DNS lookup"
1207
  msgstr ""
1208
 
1209
+ #: admin/includes/tab-settings.php:1097
1210
  msgid "Privacy and record settings"
1211
  msgstr ""
1212
 
1213
+ #: admin/includes/tab-settings.php:1120
1214
  msgid ""
1215
  "<dfn title=\"This option restricts not to send IP address to the external "
1216
  "Geolocation APIs.\">Do not send IP address to external APIs</dfn>"
1217
  msgstr ""
1218
 
1219
+ #: admin/includes/tab-settings.php:1135
1220
  msgid ""
1221
  "<dfn title=\"This option enables to record the IP address, country code and "
1222
  "failure counter of login attempts into the cache on database to minimize the "
1223
  "impact on site speed.\">Record &#8220;IP address cache&#8221;</dfn>"
1224
  msgstr ""
1225
 
1226
+ #: admin/includes/tab-settings.php:1150
1227
  msgid ""
1228
  "<dfn title=\"If user authentication fails consecutively beyond &#8220;Max "
1229
  "number of failed login attempts per IP address&#8221;, subsequent login will "
1231
  "dfn>"
1232
  msgstr ""
1233
 
1234
+ #: admin/includes/tab-settings.php:1166
1235
  msgid ""
1236
  "<dfn title=\"This option enables to record the validation logs including IP "
1237
  "addresses.\">Record &#8220;Validation logs&#8221;</dfn>"
1238
  msgstr ""
1239
 
1240
+ #: admin/includes/tab-settings.php:1178
1241
  msgid "When blocked"
1242
  msgstr ""
1243
 
1244
+ #: admin/includes/tab-settings.php:1179
1245
  msgid "When passed"
1246
  msgstr ""
1247
 
1248
+ #: admin/includes/tab-settings.php:1180
1249
  msgid "When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;"
1250
  msgstr ""
1251
 
1252
+ #: admin/includes/tab-settings.php:1181
1253
  msgid "Unauthenticated visitor"
1254
  msgstr ""
1255
 
1256
+ #: admin/includes/tab-settings.php:1182
1257
  msgid "Authenticated user"
1258
  msgstr ""
1259
 
1260
+ #: admin/includes/tab-settings.php:1183
1261
  msgid "All the validation"
1262
  msgstr ""
1263
 
1264
+ #: admin/includes/tab-settings.php:1191
1265
  #, php-format
1266
  msgid ""
1267
  "<dfn title=\"The maximum number of entries in the logs is also limited to %d."
1268
  "\">Expiration time [days] for each entry</dfn>"
1269
  msgstr ""
1270
 
1271
+ #: admin/includes/tab-settings.php:1208
1272
  msgid ""
1273
  "<dfn title=\"e.g. action, comment, log, pwd, FILES\">$_POST key to record "
1274
  "with value</dfn>"
1275
  msgstr ""
1276
 
1277
+ #: admin/includes/tab-settings.php:1227
1278
  msgid "Maximum entries in &#8220;Logs&#8221;"
1279
  msgstr ""
1280
 
1281
+ #: admin/includes/tab-settings.php:1244
1282
  msgid ""
1283
  "<dfn title=\"Select SQLite database source.\">Database source of SQLite for "
1284
  "&#8220;Live update&#8221;</dfn>"
1285
  msgstr ""
1286
 
1287
+ #: admin/includes/tab-settings.php:1257
1288
  msgid "Ordinary file"
1289
  msgstr ""
1290
 
1291
+ #: admin/includes/tab-settings.php:1258
1292
  msgid "In-Memory"
1293
  msgstr ""
1294
 
1295
+ #: admin/includes/tab-settings.php:1261
1296
  msgid "PDO_SQLITE driver not available"
1297
  msgstr ""
1298
 
1299
+ #: admin/includes/tab-settings.php:1262
1300
  msgid ""
1301
  "It takes a few tens of milliseconds as overhead. It can be safely used "
1302
  "without conflict with other plugins."
1303
  msgstr ""
1304
 
1305
+ #: admin/includes/tab-settings.php:1263
1306
  msgid ""
1307
  "It takes a few milliseconds as overhead. There is a possibility of conflict "
1308
  "with other plugins using this method."
1309
  msgstr ""
1310
 
1311
+ #: admin/includes/tab-settings.php:1271
1312
  msgid "Reset database source of &#8220;Live update&#8221;"
1313
  msgstr ""
1314
 
1315
+ #: admin/includes/tab-settings.php:1279
1316
  msgid "Reset now"
1317
  msgstr ""
1318
 
1319
+ #: admin/includes/tab-settings.php:1288 admin/includes/tab-settings.php:1449
1320
  msgid ""
1321
  "Task could not be found in WP-Cron. Please try to deactivate this plugin "
1322
  "once and activate again."
1323
  msgstr ""
1324
 
1325
+ #: admin/includes/tab-settings.php:1293
1326
  msgid ""
1327
  "<dfn title=\"This option enables to schedule the WP-Cron event to remove the "
1328
  "expired entries from &#8220;IP address cache&#8221; and &#8220;Validation "
1329
  "logs&#8221;.\">Interval [sec] to cleanup expired entries of IP address</dfn>"
1330
  msgstr ""
1331
 
1332
+ #: admin/includes/tab-settings.php:1302 admin/includes/tab-settings.php:1465
1333
  #, php-format
1334
  msgid "Next schedule: %s"
1335
  msgstr ""
1336
 
1337
+ #: admin/includes/tab-settings.php:1309
1338
  msgid ""
1339
  "<dfn title=\"This option enables to record the number blocked countries and "
1340
  "the number of blocked requests per day.\">Record &#8220;Statistics of "
1341
  "validation&#8221;</dfn>"
1342
  msgstr ""
1343
 
1344
+ #: admin/includes/tab-settings.php:1324
1345
  msgid "Maximum period for &#8220;Statistics&#8221; [days]"
1346
  msgstr ""
1347
 
1348
+ #: admin/includes/tab-settings.php:1342
1349
  msgid "Remove all settings and records at uninstallation"
1350
  msgstr ""
1351
 
1352
+ #: admin/includes/tab-settings.php:1359
1353
  msgid "Geolocation API settings"
1354
  msgstr ""
1355
 
1356
+ #: admin/includes/tab-settings.php:1380
1357
  msgid ""
1358
  "<dfn title=\"IP address cache and local databases are scanned at the top "
1359
  "priority.\">API selection and key settings</dfn>"
1360
  msgstr ""
1361
 
1362
+ #: admin/includes/tab-settings.php:1399
1363
  msgid "Timeout for network API [sec]"
1364
  msgstr ""
1365
 
1366
+ #: admin/includes/tab-settings.php:1417
1367
  msgid "Local database settings"
1368
  msgstr ""
1369
 
1370
+ #: admin/includes/tab-settings.php:1431
1371
  msgid "database"
1372
  msgstr ""
1373
 
1374
+ #: admin/includes/tab-settings.php:1432 classes/class-ip-geo-block-cron.php:434
1375
  #, php-format
1376
  msgid "Last update: %s"
1377
  msgstr ""
1378
 
1379
+ #: admin/includes/tab-settings.php:1454
1380
  msgid "Auto updating (once a month)"
1381
  msgstr ""
1382
 
1383
+ #: admin/includes/tab-settings.php:1472
1384
  msgid "Download database"
1385
  msgstr ""
1386
 
1387
+ #: admin/includes/tab-settings.php:1480
1388
  msgid "Download now"
1389
  msgstr ""
1390
 
1391
+ #: admin/includes/tab-settings.php:1491
1392
  msgid "Plugin settings"
1393
  msgstr ""
1394
 
1395
+ #: admin/includes/tab-settings.php:1503
1396
  msgid ""
1397
  "<dfn title=\"Synchronize all settings over the network wide.\">Network wide "
1398
  "settings</dfn>"
1399
  msgstr ""
1400
 
1401
+ #: admin/includes/tab-settings.php:1521
1402
  msgid ""
1403
  "<dfn title=\"You can access to the login form with a specific key at "
1404
  "emergency. Please add the generated link to favorites / bookmarks in your "
1406
  "dfn>"
1407
  msgstr ""
1408
 
1409
+ #: admin/includes/tab-settings.php:1537
1410
  msgid ""
1411
  "<dfn title=\"Valid key for Google Maps JavaScript API. Maps Embed API in "
1412
  "iframe can be available without key in case it's empty.\">Google Maps API "
1413
  "key</dfn>"
1414
  msgstr ""
1415
 
1416
+ #: admin/includes/tab-settings.php:1553
1417
  msgid "Export / Import settings"
1418
  msgstr ""
1419
 
1420
+ #: admin/includes/tab-settings.php:1560
1421
  msgid "Export settings"
1422
  msgstr ""
1423
 
1424
+ #: admin/includes/tab-settings.php:1561
1425
  msgid "Import from the local file"
1426
  msgstr ""
1427
 
1428
+ #: admin/includes/tab-settings.php:1561
1429
  msgid "Import settings"
1430
  msgstr ""
1431
 
1432
+ #: admin/includes/tab-settings.php:1569
1433
  msgid "Import pre-defined settings"
1434
  msgstr ""
1435
 
1436
+ #: admin/includes/tab-settings.php:1576
1437
  msgid ""
1438
  "Import the default settings to revert to the &#8220;Right after "
1439
  "installing&#8221; state"
1440
  msgstr ""
1441
 
1442
+ #: admin/includes/tab-settings.php:1576
1443
  msgid "Default settings"
1444
  msgstr ""
1445
 
1446
+ #: admin/includes/tab-settings.php:1577
1447
  msgid ""
1448
  "Import the preferred settings mainly by enabling Zero-day Exploit Prevention "
1449
  "for the &#8220;Back-end target settings&#8221;"
1450
  msgstr ""
1451
 
1452
+ #: admin/includes/tab-settings.php:1577
1453
  msgid "Best for Back-end"
1454
  msgstr ""
1455
 
1456
+ #: admin/includes/tab-settings.php:1586
1457
  msgid "Diagnose all DB tables"
1458
  msgstr ""
1459
 
1460
+ #: admin/includes/tab-settings.php:1594
1461
  msgid "Diagnose now"
1462
  msgstr ""
1463
 
1464
+ #: admin/includes/tab-settings.php:1603
1465
  msgid ""
1466
  "<dfn title=\"When you have some unexpected blocking experiences, please "
1467
  "press the button to find the blocked requests at the end of dumped "
1471
  "\">support forum</a> ]"
1472
  msgstr ""
1473
 
1474
+ #: admin/includes/tab-settings.php:1610
1475
  msgid "Please copy &amp; paste when submitting your issue to support forum"
1476
  msgstr ""
1477
 
1478
+ #: admin/includes/tab-settings.php:1610
1479
  msgid "Show information"
1480
  msgstr ""
1481
 
1482
+ #: admin/includes/tab-settings.php:1627
1483
  msgid ""
1484
  "While Geolite2 / Maxmind and IP2Location will fetch the local databases, "
1485
  "others will pass an IP address to the 3rd parties' API via HTTP."
1486
  msgstr ""
1487
 
1488
+ #: admin/includes/tab-settings.php:1628
1489
  msgid ""
1490
  "Please select the appropriate APIs to fit the privacy law / regulation in "
1491
  "your country / region."
1492
  msgstr ""
1493
 
1494
+ #: admin/includes/tab-settings.php:1637
1495
  #, php-format
1496
  msgid ""
1497
  "Maxmind GeoLite2 databases and APIs need PHP version 5.4.0+ and %sPECL phar "
1498
  "2.0.0+%s."
1499
  msgstr ""
1500
 
1501
+ #: admin/includes/tab-settings.php:1645
1502
  #, php-format
1503
  msgid ""
1504
  "Please refer to \"%sLiving with cache plugin%s\" for compatibility with "
1605
  msgid "Please set the proper condition to record IP address in cache."
1606
  msgstr ""
1607
 
1608
+ #: classes/class-ip-geo-block-cron.php:233
1609
  #, php-format
1610
  msgid "Can't lock <code>%s</code>. Please try again after a while."
1611
  msgstr ""
1612
 
1613
+ #: classes/class-ip-geo-block-cron.php:312
1614
  msgid "Your database file is up-to-date."
1615
  msgstr ""
1616
 
1617
+ #: classes/class-ip-geo-block-cron.php:415
1618
  msgid "gz or zip is not supported on your system."
1619
  msgstr ""
1620
 
1650
  "again."
1651
  msgstr ""
1652
 
1653
+ #: wp-content/ip-geo-api/ip2location/class-ip2location.php:154
1654
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php:160
1655
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:252
1656
  msgid "Database file does not exist."
1657
  msgstr ""
1658
 
1659
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:158
1660
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:179
1661
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:207
1662
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:228
1663
+ msgid "Update service has already stopped."
1664
+ msgstr ""
1665
+
1666
  #: wp-content/mu-plugins/ip-geo-block-mu.php:72
1667
  #, php-format
1668
  msgid ""
languages/ip-geo-block.pot 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.16\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ip-geo-block\n"
7
- "POT-Creation-Date: 2018-11-01 22:01+0900\n"
8
- "PO-Revision-Date: 2018-11-01 22:01+0900\n"
9
  "Last-Translator: tokkonopapa <tokkonopapa@yahoo.com>\n"
10
  "Language-Team: \n"
11
  "Language: en\n"
@@ -26,167 +26,171 @@ msgid ""
26
  "posted from outside your nation, and also prevents zero-day exploit."
27
  msgstr ""
28
 
29
- #: admin/class-ip-geo-block-admin.php:297
30
  msgid "Are you sure ?"
31
  msgstr ""
32
 
33
- #: admin/class-ip-geo-block-admin.php:298
34
- #: admin/class-ip-geo-block-admin.php:790
35
  msgid "Open a new window"
36
  msgstr ""
37
 
38
- #: admin/class-ip-geo-block-admin.php:299 admin/includes/tab-settings.php:1506
39
  msgid "Generate new link"
40
  msgstr ""
41
 
42
- #: admin/class-ip-geo-block-admin.php:300 admin/includes/tab-settings.php:1507
43
  msgid "Delete current link"
44
  msgstr ""
45
 
46
- #: admin/class-ip-geo-block-admin.php:301
47
  msgid ""
48
  "Please add the following link to favorites / bookmarks in your browser : "
49
  msgstr ""
50
 
51
- #: admin/class-ip-geo-block-admin.php:302
52
  msgid "ajax for logged-in user"
53
  msgstr ""
54
 
55
- #: admin/class-ip-geo-block-admin.php:303
56
  msgid "ajax for non logged-in user"
57
  msgstr ""
58
 
59
- #: admin/class-ip-geo-block-admin.php:304
60
  #, php-format
61
  msgid "[Found: %d]"
62
  msgstr ""
63
 
64
- #: admin/class-ip-geo-block-admin.php:305
65
  #, php-format
66
  msgid "Find and verify `%s` on &#8220;Logs&#8221; tab."
67
  msgstr ""
68
 
69
- #: admin/class-ip-geo-block-admin.php:306
70
  msgid "This feature is available with HTML5 compliant browsers."
71
  msgstr ""
72
 
73
- #: admin/class-ip-geo-block-admin.php:307
74
  msgid "The selected row cannot be found in the table."
75
  msgstr ""
76
 
77
- #: admin/class-ip-geo-block-admin.php:308
78
- #: admin/class-ip-geo-block-admin.php:1568
79
  #, php-format
80
  msgid "An error occurred while executing the ajax command `%s`."
81
  msgstr ""
82
 
83
- #: admin/class-ip-geo-block-admin.php:312
84
  msgid "No data available in table"
85
  msgstr ""
86
 
87
- #: admin/class-ip-geo-block-admin.php:313
88
  msgid "No matching records found"
89
  msgstr ""
90
 
91
- #: admin/class-ip-geo-block-admin.php:314
92
  #: admin/includes/class-admin-ajax.php:107
93
  #: admin/includes/class-admin-ajax.php:240
94
  #: admin/includes/tab-geolocation.php:74
95
  msgid "IP address"
96
  msgstr ""
97
 
98
- #: admin/class-ip-geo-block-admin.php:315
99
  #: admin/includes/class-admin-ajax.php:108
100
  #: admin/includes/class-admin-ajax.php:241
101
  msgid "Code"
102
  msgstr ""
103
 
104
- #: admin/class-ip-geo-block-admin.php:316
105
  #: admin/includes/class-admin-ajax.php:109
106
  #: admin/includes/class-admin-ajax.php:242
107
  msgid "ASN"
108
  msgstr ""
109
 
110
- #: admin/class-ip-geo-block-admin.php:317
111
  #: admin/includes/class-admin-ajax.php:243
112
  msgid "Host name"
113
  msgstr ""
114
 
115
- #: admin/class-ip-geo-block-admin.php:318
116
  #: admin/includes/class-admin-ajax.php:110
117
  #: admin/includes/class-admin-ajax.php:244
118
  msgid "Target"
119
  msgstr ""
120
 
121
- #: admin/class-ip-geo-block-admin.php:319
122
  #: admin/includes/class-admin-ajax.php:245
123
  msgid "Failure / Total"
124
  msgstr ""
125
 
126
- #: admin/class-ip-geo-block-admin.php:320
127
  #: admin/includes/class-admin-ajax.php:246
128
  msgid "Elapsed[sec]"
129
  msgstr ""
130
 
131
- #: admin/class-ip-geo-block-admin.php:321
132
  #: admin/includes/class-admin-ajax.php:106
133
  msgid "Time"
134
  msgstr ""
135
 
136
- #: admin/class-ip-geo-block-admin.php:322
137
  #: admin/includes/class-admin-ajax.php:111
138
  msgid "Result"
139
  msgstr ""
140
 
141
- #: admin/class-ip-geo-block-admin.php:323
142
  #: admin/includes/class-admin-ajax.php:112
143
  msgid "Request"
144
  msgstr ""
145
 
146
- #: admin/class-ip-geo-block-admin.php:324
147
  #: admin/includes/class-admin-ajax.php:113
148
  msgid "User agent"
149
  msgstr ""
150
 
151
- #: admin/class-ip-geo-block-admin.php:325
152
  #: admin/includes/class-admin-ajax.php:114
153
  msgid "HTTP headers"
154
  msgstr ""
155
 
156
- #: admin/class-ip-geo-block-admin.php:326
157
  #: admin/includes/class-admin-ajax.php:115
158
  msgid "$_POST data"
159
  msgstr ""
160
 
161
- #: admin/class-ip-geo-block-admin.php:352
162
  msgid "Contribute on GitHub"
163
  msgstr ""
164
 
165
- #: admin/class-ip-geo-block-admin.php:366
166
- #: admin/class-ip-geo-block-admin.php:483
167
- #: admin/class-ip-geo-block-admin.php:733
 
 
168
  msgid "Settings"
169
  msgstr ""
170
 
 
171
  #: admin/class-ip-geo-block-admin.php:460
172
- #: admin/class-ip-geo-block-admin.php:461
173
  #: admin/class-ip-geo-block-admin.php:471
174
- #: admin/class-ip-geo-block-admin.php:472
175
- #: admin/class-ip-geo-block-admin.php:482
176
- #: admin/class-ip-geo-block-admin.php:492
177
  msgid "IP Geo Block"
178
  msgstr ""
179
 
180
- #: admin/class-ip-geo-block-admin.php:493
181
- #: admin/class-ip-geo-block-admin.php:738
 
 
182
  msgid "Sites list"
183
  msgstr ""
184
 
185
- #: admin/class-ip-geo-block-admin.php:522
186
  msgid "You need WordPress 3.7+."
187
  msgstr ""
188
 
189
- #: admin/class-ip-geo-block-admin.php:526
190
  #, php-format
191
  msgid ""
192
  "Can not load Geolocation API libraries from <code>%s</code>. It seems to "
@@ -195,13 +199,14 @@ msgid ""
195
  "contents of tokkonopapa/WordPress-IP-Geo-API as a zip file\">ZIP file</a> "
196
  "from <a rel=\"noreferrer\" href=\"https://github.com/tokkonopapa/WordPress-"
197
  "IP-Geo-API\" title=\"tokkonopapa/WordPress-IP-Geo-API - GitHub\">WordPress-"
198
- "IP-Geo-API</a>. Please install <code>ip-geo-api</code> with write permission "
199
- "according to <a rel=\"noreferrer\" href=\"https://www.ipgeoblock.com/codex/"
200
- "how-to-fix-permission-troubles.html\" title=\"How can I fix permission "
201
- "troubles? | IP Geo Block\">this instruction</a>."
 
202
  msgstr ""
203
 
204
- #: admin/class-ip-geo-block-admin.php:535
205
  #, php-format
206
  msgid ""
207
  "You should select at least one API at <a href=\"%s\">Geolocation API "
@@ -209,7 +214,7 @@ msgid ""
209
  "expires."
210
  msgstr ""
211
 
212
- #: admin/class-ip-geo-block-admin.php:544
213
  #, php-format
214
  msgid ""
215
  "You should select at least one API for local database at <a href=\"%s"
@@ -217,7 +222,7 @@ msgid ""
217
  "slow down the site."
218
  msgstr ""
219
 
220
- #: admin/class-ip-geo-block-admin.php:555
221
  #, php-format
222
  msgid ""
223
  "Now downloading geolocation databases in background. After a little while, "
@@ -225,24 +230,24 @@ msgid ""
225
  "strong>&#8221; at <a href=\"%s\">Validation rules and behavior</a>."
226
  msgstr ""
227
 
228
- #: admin/class-ip-geo-block-admin.php:561
229
  #, php-format
230
  msgid ""
231
  "The &#8220;<strong>Matching rule</strong>&#8221; is not set properly. Please "
232
  "confirm it at <a href=\"%s\">Validation rules and behavior</a>."
233
  msgstr ""
234
 
235
- #: admin/class-ip-geo-block-admin.php:570
236
  msgid "Local database and matching rule have been updated."
237
  msgstr ""
238
 
239
- #: admin/class-ip-geo-block-admin.php:581
240
  msgid ""
241
  "Once you logout, you will be unable to login again because the number of "
242
  "login attempts reaches the limit."
243
  msgstr ""
244
 
245
- #: admin/class-ip-geo-block-admin.php:583
246
  #, php-format
247
  msgid ""
248
  "Please remove your IP address in &#8220;%1$sStatistics in IP address cache"
@@ -250,24 +255,24 @@ msgid ""
250
  "yourself out."
251
  msgstr ""
252
 
253
- #: admin/class-ip-geo-block-admin.php:594
254
  msgid ""
255
  "Once you logout, you will be unable to login again because your country code "
256
  "or IP address is in the blacklist."
257
  msgstr ""
258
 
259
- #: admin/class-ip-geo-block-admin.php:595
260
  msgid ""
261
  "Once you logout, you will be unable to login again because your country code "
262
  "or IP address is not in the whitelist."
263
  msgstr ""
264
 
265
- #: admin/class-ip-geo-block-admin.php:599
266
  #, php-format
267
  msgid "Please check your &#8220;%sValidation rules and behavior%s&#8221;."
268
  msgstr ""
269
 
270
- #: admin/class-ip-geo-block-admin.php:603
271
  #, php-format
272
  msgid ""
273
  "Please confirm your local geolocation database files exist at &#8220;%sLocal "
@@ -275,7 +280,7 @@ msgid ""
275
  "&#8220;%sStatistics in cache%s&#8221; section."
276
  msgstr ""
277
 
278
- #: admin/class-ip-geo-block-admin.php:617
279
  #, php-format
280
  msgid ""
281
  "Emergency login link is outdated. Please delete it once and generate again "
@@ -283,93 +288,130 @@ msgid ""
283
  "favorites / bookmarks in your browser."
284
  msgstr ""
285
 
286
- #: admin/class-ip-geo-block-admin.php:626
287
  msgid ""
288
  "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php) at &#8220;Validation "
289
  "timing&#8221; is imcompatible with <strong>IP Geo Allow</strong>. Please "
290
  "select &#8220;init&#8221; action hook."
291
  msgstr ""
292
 
293
- #: admin/class-ip-geo-block-admin.php:734
294
  msgid "Statistics"
295
  msgstr ""
296
 
297
- #: admin/class-ip-geo-block-admin.php:735
298
  msgid "Logs"
299
  msgstr ""
300
 
301
- #: admin/class-ip-geo-block-admin.php:736
302
  msgid "Search"
303
  msgstr ""
304
 
305
- #: admin/class-ip-geo-block-admin.php:737
306
  msgid "Attribution"
307
  msgstr ""
308
 
309
- #: admin/class-ip-geo-block-admin.php:754
310
- #: admin/class-ip-geo-block-admin.php:770
311
- msgid "Network"
312
- msgstr ""
313
-
314
- #: admin/class-ip-geo-block-admin.php:783
315
  msgid "Toggle all"
316
  msgstr ""
317
 
318
- #: admin/class-ip-geo-block-admin.php:786
319
  msgid ""
320
  "Independent of &#8220;Privacy and record settings&#8221;, you can see all "
321
  "the requests validated by this plugin in almost real time."
322
  msgstr ""
323
 
324
- #: admin/class-ip-geo-block-admin.php:786 admin/includes/tab-accesslog.php:39
325
  msgid "Live update"
326
  msgstr ""
327
 
328
- #: admin/class-ip-geo-block-admin.php:790
329
  msgid "Open a new window on clicking the link in the chart."
330
  msgstr ""
331
 
332
- #: admin/class-ip-geo-block-admin.php:814
333
  msgid "Thanks for providing these great services for free."
334
  msgstr ""
335
 
336
- #: admin/class-ip-geo-block-admin.php:815
337
  msgid ""
338
  "(Most browsers will redirect you to each site <a href=\"https://www."
339
  "ipgeoblock.com/etc/referer.html\" title=\"Referer Checker\">without referrer "
340
  "when you click the link</a>.)"
341
  msgstr ""
342
 
343
- #: admin/class-ip-geo-block-admin.php:820
344
  msgid "Back to top"
345
  msgstr ""
346
 
347
- #: admin/class-ip-geo-block-admin.php:912
348
  msgid "Enable"
349
  msgstr ""
350
 
351
- #: admin/class-ip-geo-block-admin.php:927
352
  msgid "Select one"
353
  msgstr ""
354
 
355
- #: admin/class-ip-geo-block-admin.php:1346
356
  msgid "You do not have sufficient permissions to access this page."
357
  msgstr ""
358
 
359
- #: admin/class-ip-geo-block-admin.php:1373
360
  #: admin/includes/class-admin-rewrite.php:194
361
- #: classes/class-ip-geo-block-cron.php:218
362
- #: classes/class-ip-geo-block-cron.php:322
363
- #: classes/class-ip-geo-block-cron.php:400
364
- #: classes/class-ip-geo-block-opts.php:469
365
  #, php-format
366
  msgid "Unable to write <code>%s</code>. Please check the permission."
367
  msgstr ""
368
 
369
- #: admin/class-ip-geo-block-admin.php:1403
370
  msgid "Settings saved."
371
  msgstr ""
372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  #: admin/includes/class-admin-ajax.php:72
374
  #: admin/includes/class-admin-ajax.php:75 admin/includes/tab-settings.php:84
375
  #: admin/includes/tab-settings.php:103
@@ -388,8 +430,8 @@ msgid ""
388
  msgstr ""
389
 
390
  #: admin/includes/class-admin-rewrite.php:168
391
- #: classes/class-ip-geo-block-cron.php:213
392
- #: classes/class-ip-geo-block-cron.php:395
393
  #, php-format
394
  msgid "Unable to read <code>%s</code>. Please check the permission."
395
  msgstr ""
@@ -413,23 +455,23 @@ msgstr ""
413
  msgid "Help"
414
  msgstr ""
415
 
416
- #: admin/includes/tab-accesslog.php:55 admin/includes/tab-settings.php:428
417
  msgid "Comment post"
418
  msgstr ""
419
 
420
- #: admin/includes/tab-accesslog.php:56 admin/includes/tab-settings.php:429
421
  msgid "XML-RPC"
422
  msgstr ""
423
 
424
- #: admin/includes/tab-accesslog.php:57 admin/includes/tab-settings.php:430
425
  msgid "Login form"
426
  msgstr ""
427
 
428
- #: admin/includes/tab-accesslog.php:58 admin/includes/tab-settings.php:431
429
  msgid "Admin area"
430
  msgstr ""
431
 
432
- #: admin/includes/tab-accesslog.php:59 admin/includes/tab-settings.php:433
433
  msgid "Public facing pages"
434
  msgstr ""
435
 
@@ -449,68 +491,68 @@ msgstr ""
449
  msgid "Reset"
450
  msgstr ""
451
 
452
- #: admin/includes/tab-accesslog.php:109
453
  msgid "Preset filters"
454
  msgstr ""
455
 
456
- #: admin/includes/tab-accesslog.php:125 admin/includes/tab-statistics.php:238
457
  msgid "Bulk action"
458
  msgstr ""
459
 
460
- #: admin/includes/tab-accesslog.php:136 admin/includes/tab-statistics.php:249
461
  msgid "Remove entries by IP address"
462
  msgstr ""
463
 
464
- #: admin/includes/tab-accesslog.php:137 admin/includes/tab-statistics.php:250
465
  msgid "Add IP address to &#8220;Whitelist&#8221;"
466
  msgstr ""
467
 
468
- #: admin/includes/tab-accesslog.php:138 admin/includes/tab-statistics.php:251
469
  msgid "Add IP address to &#8220;Blacklist&#8221;"
470
  msgstr ""
471
 
472
- #: admin/includes/tab-accesslog.php:139 admin/includes/tab-statistics.php:252
473
  msgid "Add AS number to &#8220;Whitelist&#8221;"
474
  msgstr ""
475
 
476
- #: admin/includes/tab-accesslog.php:140 admin/includes/tab-statistics.php:253
477
  msgid "Add AS number to &#8220;Blacklist&#8221;"
478
  msgstr ""
479
 
480
- #: admin/includes/tab-accesslog.php:142 admin/includes/tab-network.php:56
481
  #: admin/includes/tab-statistics.php:255
482
  msgid "Apply"
483
  msgstr ""
484
 
485
- #: admin/includes/tab-accesslog.php:149 admin/includes/tab-statistics.php:191
486
  msgid "Clear logs"
487
  msgstr ""
488
 
489
- #: admin/includes/tab-accesslog.php:157 admin/includes/tab-statistics.php:167
490
  #: admin/includes/tab-statistics.php:199 admin/includes/tab-statistics.php:269
491
  msgid "Clear all"
492
  msgstr ""
493
 
494
- #: admin/includes/tab-accesslog.php:166
495
  msgid "Export logs"
496
  msgstr ""
497
 
498
- #: admin/includes/tab-accesslog.php:172 admin/includes/tab-settings.php:1538
499
  #: admin/includes/tab-statistics.php:283
500
  msgid "Export to the local file"
501
  msgstr ""
502
 
503
- #: admin/includes/tab-accesslog.php:172 admin/includes/tab-statistics.php:283
504
  msgid "Export csv"
505
  msgstr ""
506
 
507
- #: admin/includes/tab-accesslog.php:198 admin/includes/tab-network.php:112
508
  #: admin/includes/tab-statistics.php:410
509
  #, php-format
510
  msgid "[ %sRecord &#8220;Validation logs&#8221;%s ] is disabled."
511
  msgstr ""
512
 
513
- #: admin/includes/tab-accesslog.php:199 admin/includes/tab-network.php:113
514
  #: admin/includes/tab-statistics.php:411
515
  msgid ""
516
  "Please set the proper condition to record and analyze the validation logs."
@@ -528,7 +570,7 @@ msgstr ""
528
  msgid "Geolocation API"
529
  msgstr ""
530
 
531
- #: admin/includes/tab-geolocation.php:89 admin/includes/tab-settings.php:1083
532
  msgid ""
533
  "<dfn title=\"IP address is always encrypted on recording in Cache and Logs. "
534
  "Moreover, this option replaces the end of IP address with &#8220;***&#8221; "
@@ -662,7 +704,7 @@ msgid ""
662
  "country code</dfn>"
663
  msgstr ""
664
 
665
- #: admin/includes/tab-settings.php:125 admin/includes/tab-settings.php:805
666
  msgid "Matching rule"
667
  msgstr ""
668
 
@@ -758,8 +800,8 @@ msgid ""
758
  "this validation.\">Prevent malicious file uploading</dfn>"
759
  msgstr ""
760
 
761
- #: admin/includes/tab-settings.php:304 admin/includes/tab-settings.php:494
762
- #: admin/includes/tab-settings.php:639 admin/includes/tab-settings.php:1155
763
  msgid "Disable"
764
  msgstr ""
765
 
@@ -771,14 +813,32 @@ msgstr ""
771
  msgid "Verify file extension only"
772
  msgstr ""
773
 
774
- #: admin/includes/tab-settings.php:315
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
775
  #, php-format
776
  msgid ""
777
  "<dfn title=\"You can put your original 403.php and so on into your theme "
778
  "directory.\">Response code</dfn> %s"
779
  msgstr ""
780
 
781
- #: admin/includes/tab-settings.php:344 admin/includes/tab-settings.php:888
782
  msgid ""
783
  "<dfn title=\"Specify the URL for response code 2xx and 3xx. If it is pointed "
784
  "to a public facing page, visitors would not be blocked on the page to "
@@ -787,35 +847,35 @@ msgid ""
787
  "\">Redirect URL</dfn>"
788
  msgstr ""
789
 
790
- #: admin/includes/tab-settings.php:361 admin/includes/tab-settings.php:906
791
  msgid ""
792
  "<dfn title=\"Specify the message for response code 4xx and 5xx.\">Response "
793
  "message</dfn>"
794
  msgstr ""
795
 
796
- #: admin/includes/tab-settings.php:379
797
  msgid "Select when to run the validation."
798
  msgstr ""
799
 
800
- #: admin/includes/tab-settings.php:379
801
  msgid "Validation timing"
802
  msgstr ""
803
 
804
- #: admin/includes/tab-settings.php:390
805
  msgid "&#8220;init&#8221; action hook"
806
  msgstr ""
807
 
808
- #: admin/includes/tab-settings.php:391
809
  msgid "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)"
810
  msgstr ""
811
 
812
- #: admin/includes/tab-settings.php:394
813
  msgid ""
814
  "Validate at &#8220;init&#8221; action hook in the same manner as typical "
815
  "plugins."
816
  msgstr ""
817
 
818
- #: admin/includes/tab-settings.php:395
819
  msgid ""
820
  "Validate at an earlier phase than other typical plugins. It can reduce load "
821
  "on server but has <a rel='noreferrer' href='https://www.ipgeoblock.com/codex/"
@@ -823,129 +883,129 @@ msgid ""
823
  "restrictions</a>."
824
  msgstr ""
825
 
826
- #: admin/includes/tab-settings.php:403
827
  msgid ""
828
  "It enables to simulate the validation rules without actual blocking in order "
829
  "to check the behavior of this plugin. The results can be found on &#8220;"
830
  "Logs&#8221; tab."
831
  msgstr ""
832
 
833
- #: admin/includes/tab-settings.php:403
834
  msgid "Simulation mode"
835
  msgstr ""
836
 
837
- #: admin/includes/tab-settings.php:420
838
  msgid "Back-end target settings"
839
  msgstr ""
840
 
841
- #: admin/includes/tab-settings.php:426
842
  #, php-format
843
  msgid "<dfn title=\"It enables to validate requests to %s.\">%s</dfn>"
844
  msgstr ""
845
 
846
- #: admin/includes/tab-settings.php:432
847
  msgid "Other areas"
848
  msgstr ""
849
 
850
- #: admin/includes/tab-settings.php:433
851
  msgid "public facing pages"
852
  msgstr ""
853
 
854
- #: admin/includes/tab-settings.php:449 admin/includes/tab-settings.php:495
855
- #: admin/includes/tab-settings.php:527 admin/includes/tab-settings.php:533
856
- #: admin/includes/tab-settings.php:798
857
  msgid "Block by country"
858
  msgstr ""
859
 
860
- #: admin/includes/tab-settings.php:459
861
  msgid "The whole will be wrapped by &lt;p&gt; tag. Allowed tags: "
862
  msgstr ""
863
 
864
- #: admin/includes/tab-settings.php:459
865
  msgid "Message on comment form"
866
  msgstr ""
867
 
868
- #: admin/includes/tab-settings.php:472
869
  msgid "None"
870
  msgstr ""
871
 
872
- #: admin/includes/tab-settings.php:473
873
  msgid "Top"
874
  msgstr ""
875
 
876
- #: admin/includes/tab-settings.php:474
877
  msgid "Bottom"
878
  msgstr ""
879
 
880
- #: admin/includes/tab-settings.php:496
881
  msgid "Completely close"
882
  msgstr ""
883
 
884
- #: admin/includes/tab-settings.php:502
885
  msgid "Action to login as a registered user."
886
  msgstr ""
887
 
888
- #: admin/includes/tab-settings.php:502
889
  msgid "Log in"
890
  msgstr ""
891
 
892
- #: admin/includes/tab-settings.php:503
893
  msgid "Action to register new users."
894
  msgstr ""
895
 
896
- #: admin/includes/tab-settings.php:503
897
  msgid "Register"
898
  msgstr ""
899
 
900
- #: admin/includes/tab-settings.php:504
901
  msgid "Action to reset a password to create a new one."
902
  msgstr ""
903
 
904
- #: admin/includes/tab-settings.php:504
905
  msgid "Password Reset"
906
  msgstr ""
907
 
908
- #: admin/includes/tab-settings.php:505
909
  msgid "Action to email a password to a registered user."
910
  msgstr ""
911
 
912
- #: admin/includes/tab-settings.php:505
913
  msgid "Lost Password"
914
  msgstr ""
915
 
916
- #: admin/includes/tab-settings.php:506
917
  msgid ""
918
  "Action to show prompt to enter a password on password protected post and "
919
  "page."
920
  msgstr ""
921
 
922
- #: admin/includes/tab-settings.php:506
923
  msgid "Password protected"
924
  msgstr ""
925
 
926
- #: admin/includes/tab-settings.php:528
927
  msgid ""
928
  "<dfn title=\"Specify the individual action as a blocking target.\">Target "
929
  "actions</dfn>"
930
  msgstr ""
931
 
932
- #: admin/includes/tab-settings.php:534
933
  msgid "Prevent Zero-day Exploit"
934
  msgstr ""
935
 
936
- #: admin/includes/tab-settings.php:538
937
  msgid ""
938
- "It will block a request related to the services for both public facing pages "
939
- "and the dashboard."
940
  msgstr ""
941
 
942
- #: admin/includes/tab-settings.php:539
943
  msgid ""
944
  "Regardless of the country code, it will block a malicious request related to "
945
- "the services only for the dashboard."
946
  msgstr ""
947
 
948
- #: admin/includes/tab-settings.php:545
949
  msgid ""
950
  "This is applied to &#8220;XML-RPC&#8221; and &#8220;Login form&#8221; when "
951
  "&#8220;IP address cache&#8221; in &#8220;Privacy and record settings&#8221; "
@@ -953,23 +1013,23 @@ msgid ""
953
  "cache."
954
  msgstr ""
955
 
956
- #: admin/includes/tab-settings.php:545
957
  msgid "Max failed login attempts per IP address"
958
  msgstr ""
959
 
960
- #: admin/includes/tab-settings.php:586
961
  msgid "admin post for logged-in user"
962
  msgstr ""
963
 
964
- #: admin/includes/tab-settings.php:587
965
  msgid "admin post for non logged-in user"
966
  msgstr ""
967
 
968
- #: admin/includes/tab-settings.php:609
969
  msgid "Admin ajax/post"
970
  msgstr ""
971
 
972
- #: admin/includes/tab-settings.php:623
973
  msgid ""
974
  "Specify the action name (&#8220;action=&hellip;&#8221;) or the page name "
975
  "(&#8220;page=&hellip;&#8221;) to prevent unintended blocking caused by "
@@ -977,33 +1037,33 @@ msgid ""
977
  "Zero-day Exploit&#8221; (for logged-in user)."
978
  msgstr ""
979
 
980
- #: admin/includes/tab-settings.php:623 admin/includes/tab-settings.php:701
981
- #: admin/includes/tab-settings.php:761
982
  msgid "Exceptions"
983
  msgstr ""
984
 
985
- #: admin/includes/tab-settings.php:624
986
  msgid "Toggle with non logged-in user"
987
  msgstr ""
988
 
989
- #: admin/includes/tab-settings.php:627
990
  msgid "Candidate actions/pages"
991
  msgstr ""
992
 
993
- #: admin/includes/tab-settings.php:641
994
  #, php-format
995
  msgid ""
996
  "Regardless of the country code, it will block a malicious request to <code>"
997
  "%s&ctdot;/*.php</code>."
998
  msgstr ""
999
 
1000
- #: admin/includes/tab-settings.php:642
1001
  msgid ""
1002
  "Select the item which causes unintended blocking in order to exclude from "
1003
  "the validation target. Grayed item indicates &#8220;INACTIVE&#8221;."
1004
  msgstr ""
1005
 
1006
- #: admin/includes/tab-settings.php:643
1007
  #, php-format
1008
  msgid ""
1009
  "It configures &#8220;%s&#8221; to validate a direct request to the PHP file "
@@ -1011,37 +1071,37 @@ msgid ""
1011
  "hidden files beginning with a dot by the server's configuration."
1012
  msgstr ""
1013
 
1014
- #: admin/includes/tab-settings.php:644
1015
  msgid "Sorry, but your server type is not supported."
1016
  msgstr ""
1017
 
1018
- #: admin/includes/tab-settings.php:645
1019
  msgid ""
1020
  "You need to click &#8220;Save Changes&#8221; button for imported settings to "
1021
  "take effect."
1022
  msgstr ""
1023
 
1024
- #: admin/includes/tab-settings.php:680 admin/includes/tab-settings.php:740
1025
  msgid "Force to load WP core"
1026
  msgstr ""
1027
 
1028
- #: admin/includes/tab-settings.php:685
1029
  msgid "Plugins area"
1030
  msgstr ""
1031
 
1032
- #: admin/includes/tab-settings.php:745
1033
  msgid "Themes area"
1034
  msgstr ""
1035
 
1036
- #: admin/includes/tab-settings.php:780
1037
  msgid "Front-end target settings"
1038
  msgstr ""
1039
 
1040
- #: admin/includes/tab-settings.php:815
1041
  msgid "Follow &#8220;Validation rules and behavior&#8221;"
1042
  msgstr ""
1043
 
1044
- #: admin/includes/tab-settings.php:857
1045
  #, php-format
1046
  msgid ""
1047
  "<dfn title=\"You can configure a different response code from the Back-end. "
@@ -1049,78 +1109,78 @@ msgid ""
1049
  "\">Response code</dfn> %s"
1050
  msgstr ""
1051
 
1052
- #: admin/includes/tab-settings.php:921
1053
  msgid ""
1054
  "<dfn title=\"Specify the individual page as a blocking target.\">Page</dfn>"
1055
  msgstr ""
1056
 
1057
- #: admin/includes/tab-settings.php:933
1058
  msgid ""
1059
  "<dfn title=\"Specify the individual post type on a single page as a blocking "
1060
  "target.\">Post type</dfn>"
1061
  msgstr ""
1062
 
1063
- #: admin/includes/tab-settings.php:945
1064
  msgid ""
1065
  "<dfn title=\"Specify the individual category on a single page or archive "
1066
  "page as a blocking target.\">Category</dfn>"
1067
  msgstr ""
1068
 
1069
- #: admin/includes/tab-settings.php:957
1070
  msgid ""
1071
  "<dfn title=\"Specify the individual tag on a single page or archive page as "
1072
  "a blocking target.\">Tag</dfn>"
1073
  msgstr ""
1074
 
1075
- #: admin/includes/tab-settings.php:971
1076
  msgid "Specify the validation target on front-end."
1077
  msgstr ""
1078
 
1079
- #: admin/includes/tab-settings.php:971
1080
  msgid "Validation target"
1081
  msgstr ""
1082
 
1083
- #: admin/includes/tab-settings.php:982
1084
  msgid "All requests"
1085
  msgstr ""
1086
 
1087
- #: admin/includes/tab-settings.php:983
1088
  msgid "Specify the targets"
1089
  msgstr ""
1090
 
1091
- #: admin/includes/tab-settings.php:986
1092
  msgid ""
1093
  "Notice that &#8220;Validation timing&#8221; is deferred till &#8220;"
1094
  "wp&#8221; action hook. It means that this feature would not be compatible "
1095
  "with any page caching."
1096
  msgstr ""
1097
 
1098
- #: admin/includes/tab-settings.php:996
1099
  msgid "Specify the name of actions as exception that is invariably blocked."
1100
  msgstr ""
1101
 
1102
- #: admin/includes/tab-settings.php:996
1103
  msgid "Excluded actions"
1104
  msgstr ""
1105
 
1106
- #: admin/includes/tab-settings.php:1012
1107
  msgid ""
1108
  "<dfn title=\"Specify the frequency of request for certain period of time."
1109
  "\">Blocking condition</dfn>"
1110
  msgstr ""
1111
 
1112
- #: admin/includes/tab-settings.php:1014
1113
  #, php-format
1114
  msgid "More than %1$s page view (PV) in %2$s seconds"
1115
  msgstr ""
1116
 
1117
- #: admin/includes/tab-settings.php:1022
1118
  msgid ""
1119
  "<dfn title=\"It will validate the frequency of request.\">Block badly-"
1120
  "behaved bots and crawlers</dfn>"
1121
  msgstr ""
1122
 
1123
- #: admin/includes/tab-settings.php:1039
1124
  msgid ""
1125
  "A part of user agent string and a qualification connected with a separator "
1126
  "that indicates an applicable rule and can be &#8220;:&#8221; (pass) or "
@@ -1130,11 +1190,11 @@ msgid ""
1130
  "qualification&#8221;."
1131
  msgstr ""
1132
 
1133
- #: admin/includes/tab-settings.php:1039
1134
  msgid "UA string and qualification"
1135
  msgstr ""
1136
 
1137
- #: admin/includes/tab-settings.php:1056
1138
  msgid ""
1139
  "It enables to verify the host by reverse DNS lookup which would spend some "
1140
  "server resources. If it is disabled, &#8220;HOST&#8221; and &#8220;"
@@ -1142,28 +1202,28 @@ msgid ""
1142
  "return &#8220;true&#8221;."
1143
  msgstr ""
1144
 
1145
- #: admin/includes/tab-settings.php:1056
1146
  msgid "Reverse DNS lookup"
1147
  msgstr ""
1148
 
1149
- #: admin/includes/tab-settings.php:1075
1150
  msgid "Privacy and record settings"
1151
  msgstr ""
1152
 
1153
- #: admin/includes/tab-settings.php:1098
1154
  msgid ""
1155
  "<dfn title=\"This option restricts not to send IP address to the external "
1156
  "Geolocation APIs.\">Do not send IP address to external APIs</dfn>"
1157
  msgstr ""
1158
 
1159
- #: admin/includes/tab-settings.php:1113
1160
  msgid ""
1161
  "<dfn title=\"This option enables to record the IP address, country code and "
1162
  "failure counter of login attempts into the cache on database to minimize the "
1163
  "impact on site speed.\">Record &#8220;IP address cache&#8221;</dfn>"
1164
  msgstr ""
1165
 
1166
- #: admin/includes/tab-settings.php:1128
1167
  msgid ""
1168
  "<dfn title=\"If user authentication fails consecutively beyond &#8220;Max "
1169
  "number of failed login attempts per IP address&#8221;, subsequent login will "
@@ -1171,174 +1231,174 @@ msgid ""
1171
  "dfn>"
1172
  msgstr ""
1173
 
1174
- #: admin/includes/tab-settings.php:1144
1175
  msgid ""
1176
  "<dfn title=\"This option enables to record the validation logs including IP "
1177
  "addresses.\">Record &#8220;Validation logs&#8221;</dfn>"
1178
  msgstr ""
1179
 
1180
- #: admin/includes/tab-settings.php:1156
1181
  msgid "When blocked"
1182
  msgstr ""
1183
 
1184
- #: admin/includes/tab-settings.php:1157
1185
  msgid "When passed"
1186
  msgstr ""
1187
 
1188
- #: admin/includes/tab-settings.php:1158
1189
  msgid "When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;"
1190
  msgstr ""
1191
 
1192
- #: admin/includes/tab-settings.php:1159
1193
  msgid "Unauthenticated visitor"
1194
  msgstr ""
1195
 
1196
- #: admin/includes/tab-settings.php:1160
1197
  msgid "Authenticated user"
1198
  msgstr ""
1199
 
1200
- #: admin/includes/tab-settings.php:1161
1201
  msgid "All the validation"
1202
  msgstr ""
1203
 
1204
- #: admin/includes/tab-settings.php:1169
1205
  #, php-format
1206
  msgid ""
1207
  "<dfn title=\"The maximum number of entries in the logs is also limited to %d."
1208
  "\">Expiration time [days] for each entry</dfn>"
1209
  msgstr ""
1210
 
1211
- #: admin/includes/tab-settings.php:1186
1212
  msgid ""
1213
  "<dfn title=\"e.g. action, comment, log, pwd, FILES\">$_POST key to record "
1214
  "with value</dfn>"
1215
  msgstr ""
1216
 
1217
- #: admin/includes/tab-settings.php:1205
1218
  msgid "Maximum entries in &#8220;Logs&#8221;"
1219
  msgstr ""
1220
 
1221
- #: admin/includes/tab-settings.php:1222
1222
  msgid ""
1223
  "<dfn title=\"Select SQLite database source.\">Database source of SQLite for "
1224
  "&#8220;Live update&#8221;</dfn>"
1225
  msgstr ""
1226
 
1227
- #: admin/includes/tab-settings.php:1235
1228
  msgid "Ordinary file"
1229
  msgstr ""
1230
 
1231
- #: admin/includes/tab-settings.php:1236
1232
  msgid "In-Memory"
1233
  msgstr ""
1234
 
1235
- #: admin/includes/tab-settings.php:1239
1236
  msgid "PDO_SQLITE driver not available"
1237
  msgstr ""
1238
 
1239
- #: admin/includes/tab-settings.php:1240
1240
  msgid ""
1241
  "It takes a few tens of milliseconds as overhead. It can be safely used "
1242
  "without conflict with other plugins."
1243
  msgstr ""
1244
 
1245
- #: admin/includes/tab-settings.php:1241
1246
  msgid ""
1247
  "It takes a few milliseconds as overhead. There is a possibility of conflict "
1248
  "with other plugins using this method."
1249
  msgstr ""
1250
 
1251
- #: admin/includes/tab-settings.php:1249
1252
  msgid "Reset database source of &#8220;Live update&#8221;"
1253
  msgstr ""
1254
 
1255
- #: admin/includes/tab-settings.php:1257
1256
  msgid "Reset now"
1257
  msgstr ""
1258
 
1259
- #: admin/includes/tab-settings.php:1266 admin/includes/tab-settings.php:1427
1260
  msgid ""
1261
  "Task could not be found in WP-Cron. Please try to deactivate this plugin "
1262
  "once and activate again."
1263
  msgstr ""
1264
 
1265
- #: admin/includes/tab-settings.php:1271
1266
  msgid ""
1267
  "<dfn title=\"This option enables to schedule the WP-Cron event to remove the "
1268
  "expired entries from &#8220;IP address cache&#8221; and &#8220;Validation "
1269
  "logs&#8221;.\">Interval [sec] to cleanup expired entries of IP address</dfn>"
1270
  msgstr ""
1271
 
1272
- #: admin/includes/tab-settings.php:1280 admin/includes/tab-settings.php:1443
1273
  #, php-format
1274
  msgid "Next schedule: %s"
1275
  msgstr ""
1276
 
1277
- #: admin/includes/tab-settings.php:1287
1278
  msgid ""
1279
  "<dfn title=\"This option enables to record the number blocked countries and "
1280
  "the number of blocked requests per day.\">Record &#8220;Statistics of "
1281
  "validation&#8221;</dfn>"
1282
  msgstr ""
1283
 
1284
- #: admin/includes/tab-settings.php:1302
1285
  msgid "Maximum period for &#8220;Statistics&#8221; [days]"
1286
  msgstr ""
1287
 
1288
- #: admin/includes/tab-settings.php:1320
1289
  msgid "Remove all settings and records at uninstallation"
1290
  msgstr ""
1291
 
1292
- #: admin/includes/tab-settings.php:1337
1293
  msgid "Geolocation API settings"
1294
  msgstr ""
1295
 
1296
- #: admin/includes/tab-settings.php:1358
1297
  msgid ""
1298
  "<dfn title=\"IP address cache and local databases are scanned at the top "
1299
  "priority.\">API selection and key settings</dfn>"
1300
  msgstr ""
1301
 
1302
- #: admin/includes/tab-settings.php:1377
1303
  msgid "Timeout for network API [sec]"
1304
  msgstr ""
1305
 
1306
- #: admin/includes/tab-settings.php:1395
1307
  msgid "Local database settings"
1308
  msgstr ""
1309
 
1310
- #: admin/includes/tab-settings.php:1409
1311
  msgid "database"
1312
  msgstr ""
1313
 
1314
- #: admin/includes/tab-settings.php:1410 classes/class-ip-geo-block-cron.php:424
1315
  #, php-format
1316
  msgid "Last update: %s"
1317
  msgstr ""
1318
 
1319
- #: admin/includes/tab-settings.php:1432
1320
  msgid "Auto updating (once a month)"
1321
  msgstr ""
1322
 
1323
- #: admin/includes/tab-settings.php:1450
1324
  msgid "Download database"
1325
  msgstr ""
1326
 
1327
- #: admin/includes/tab-settings.php:1458
1328
  msgid "Download now"
1329
  msgstr ""
1330
 
1331
- #: admin/includes/tab-settings.php:1469
1332
  msgid "Plugin settings"
1333
  msgstr ""
1334
 
1335
- #: admin/includes/tab-settings.php:1481
1336
  msgid ""
1337
  "<dfn title=\"Synchronize all settings over the network wide.\">Network wide "
1338
  "settings</dfn>"
1339
  msgstr ""
1340
 
1341
- #: admin/includes/tab-settings.php:1499
1342
  msgid ""
1343
  "<dfn title=\"You can access to the login form with a specific key at "
1344
  "emergency. Please add the generated link to favorites / bookmarks in your "
@@ -1346,62 +1406,62 @@ msgid ""
1346
  "dfn>"
1347
  msgstr ""
1348
 
1349
- #: admin/includes/tab-settings.php:1515
1350
  msgid ""
1351
  "<dfn title=\"Valid key for Google Maps JavaScript API. Maps Embed API in "
1352
  "iframe can be available without key in case it's empty.\">Google Maps API "
1353
  "key</dfn>"
1354
  msgstr ""
1355
 
1356
- #: admin/includes/tab-settings.php:1531
1357
  msgid "Export / Import settings"
1358
  msgstr ""
1359
 
1360
- #: admin/includes/tab-settings.php:1538
1361
  msgid "Export settings"
1362
  msgstr ""
1363
 
1364
- #: admin/includes/tab-settings.php:1539
1365
  msgid "Import from the local file"
1366
  msgstr ""
1367
 
1368
- #: admin/includes/tab-settings.php:1539
1369
  msgid "Import settings"
1370
  msgstr ""
1371
 
1372
- #: admin/includes/tab-settings.php:1547
1373
  msgid "Import pre-defined settings"
1374
  msgstr ""
1375
 
1376
- #: admin/includes/tab-settings.php:1554
1377
  msgid ""
1378
  "Import the default settings to revert to the &#8220;Right after "
1379
  "installing&#8221; state"
1380
  msgstr ""
1381
 
1382
- #: admin/includes/tab-settings.php:1554
1383
  msgid "Default settings"
1384
  msgstr ""
1385
 
1386
- #: admin/includes/tab-settings.php:1555
1387
  msgid ""
1388
  "Import the preferred settings mainly by enabling Zero-day Exploit Prevention "
1389
  "for the &#8220;Back-end target settings&#8221;"
1390
  msgstr ""
1391
 
1392
- #: admin/includes/tab-settings.php:1555
1393
  msgid "Best for Back-end"
1394
  msgstr ""
1395
 
1396
- #: admin/includes/tab-settings.php:1564
1397
  msgid "Diagnose all DB tables"
1398
  msgstr ""
1399
 
1400
- #: admin/includes/tab-settings.php:1572
1401
  msgid "Diagnose now"
1402
  msgstr ""
1403
 
1404
- #: admin/includes/tab-settings.php:1581
1405
  msgid ""
1406
  "<dfn title=\"When you have some unexpected blocking experiences, please "
1407
  "press the button to find the blocked requests at the end of dumped "
@@ -1411,34 +1471,34 @@ msgid ""
1411
  "\">support forum</a> ]"
1412
  msgstr ""
1413
 
1414
- #: admin/includes/tab-settings.php:1588
1415
  msgid "Please copy &amp; paste when submitting your issue to support forum"
1416
  msgstr ""
1417
 
1418
- #: admin/includes/tab-settings.php:1588
1419
  msgid "Show information"
1420
  msgstr ""
1421
 
1422
- #: admin/includes/tab-settings.php:1605
1423
  msgid ""
1424
  "While Geolite2 / Maxmind and IP2Location will fetch the local databases, "
1425
  "others will pass an IP address to the 3rd parties' API via HTTP."
1426
  msgstr ""
1427
 
1428
- #: admin/includes/tab-settings.php:1606
1429
  msgid ""
1430
  "Please select the appropriate APIs to fit the privacy law / regulation in "
1431
  "your country / region."
1432
  msgstr ""
1433
 
1434
- #: admin/includes/tab-settings.php:1615
1435
  #, php-format
1436
  msgid ""
1437
  "Maxmind GeoLite2 databases and APIs need PHP version 5.4.0+ and %sPECL phar "
1438
  "2.0.0+%s."
1439
  msgstr ""
1440
 
1441
- #: admin/includes/tab-settings.php:1623
1442
  #, php-format
1443
  msgid ""
1444
  "Please refer to \"%sLiving with cache plugin%s\" for compatibility with "
@@ -1545,16 +1605,16 @@ msgstr ""
1545
  msgid "Please set the proper condition to record IP address in cache."
1546
  msgstr ""
1547
 
1548
- #: classes/class-ip-geo-block-cron.php:223
1549
  #, php-format
1550
  msgid "Can't lock <code>%s</code>. Please try again after a while."
1551
  msgstr ""
1552
 
1553
- #: classes/class-ip-geo-block-cron.php:302
1554
  msgid "Your database file is up-to-date."
1555
  msgstr ""
1556
 
1557
- #: classes/class-ip-geo-block-cron.php:405
1558
  msgid "gz or zip is not supported on your system."
1559
  msgstr ""
1560
 
@@ -1590,12 +1650,19 @@ msgid ""
1590
  "again."
1591
  msgstr ""
1592
 
1593
- #: wp-content/ip-geo-api/ip2location/class-ip2location.php:151
1594
- #: wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php:144
1595
- #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:228
1596
  msgid "Database file does not exist."
1597
  msgstr ""
1598
 
 
 
 
 
 
 
 
1599
  #: wp-content/mu-plugins/ip-geo-block-mu.php:72
1600
  #, php-format
1601
  msgid ""
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.17\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ip-geo-block\n"
7
+ "POT-Creation-Date: 2018-12-03 23:01+0900\n"
8
+ "PO-Revision-Date: 2018-12-03 23:02+0900\n"
9
  "Last-Translator: tokkonopapa <tokkonopapa@yahoo.com>\n"
10
  "Language-Team: \n"
11
  "Language: en\n"
26
  "posted from outside your nation, and also prevents zero-day exploit."
27
  msgstr ""
28
 
29
+ #: admin/class-ip-geo-block-admin.php:296
30
  msgid "Are you sure ?"
31
  msgstr ""
32
 
33
+ #: admin/class-ip-geo-block-admin.php:297
34
+ #: admin/class-ip-geo-block-admin.php:791
35
  msgid "Open a new window"
36
  msgstr ""
37
 
38
+ #: admin/class-ip-geo-block-admin.php:298 admin/includes/tab-settings.php:1528
39
  msgid "Generate new link"
40
  msgstr ""
41
 
42
+ #: admin/class-ip-geo-block-admin.php:299 admin/includes/tab-settings.php:1529
43
  msgid "Delete current link"
44
  msgstr ""
45
 
46
+ #: admin/class-ip-geo-block-admin.php:300
47
  msgid ""
48
  "Please add the following link to favorites / bookmarks in your browser : "
49
  msgstr ""
50
 
51
+ #: admin/class-ip-geo-block-admin.php:301
52
  msgid "ajax for logged-in user"
53
  msgstr ""
54
 
55
+ #: admin/class-ip-geo-block-admin.php:302
56
  msgid "ajax for non logged-in user"
57
  msgstr ""
58
 
59
+ #: admin/class-ip-geo-block-admin.php:303
60
  #, php-format
61
  msgid "[Found: %d]"
62
  msgstr ""
63
 
64
+ #: admin/class-ip-geo-block-admin.php:304
65
  #, php-format
66
  msgid "Find and verify `%s` on &#8220;Logs&#8221; tab."
67
  msgstr ""
68
 
69
+ #: admin/class-ip-geo-block-admin.php:305
70
  msgid "This feature is available with HTML5 compliant browsers."
71
  msgstr ""
72
 
73
+ #: admin/class-ip-geo-block-admin.php:306
74
  msgid "The selected row cannot be found in the table."
75
  msgstr ""
76
 
77
+ #: admin/class-ip-geo-block-admin.php:307
78
+ #: admin/class-ip-geo-block-admin.php:1694
79
  #, php-format
80
  msgid "An error occurred while executing the ajax command `%s`."
81
  msgstr ""
82
 
83
+ #: admin/class-ip-geo-block-admin.php:311
84
  msgid "No data available in table"
85
  msgstr ""
86
 
87
+ #: admin/class-ip-geo-block-admin.php:312
88
  msgid "No matching records found"
89
  msgstr ""
90
 
91
+ #: admin/class-ip-geo-block-admin.php:313
92
  #: admin/includes/class-admin-ajax.php:107
93
  #: admin/includes/class-admin-ajax.php:240
94
  #: admin/includes/tab-geolocation.php:74
95
  msgid "IP address"
96
  msgstr ""
97
 
98
+ #: admin/class-ip-geo-block-admin.php:314
99
  #: admin/includes/class-admin-ajax.php:108
100
  #: admin/includes/class-admin-ajax.php:241
101
  msgid "Code"
102
  msgstr ""
103
 
104
+ #: admin/class-ip-geo-block-admin.php:315
105
  #: admin/includes/class-admin-ajax.php:109
106
  #: admin/includes/class-admin-ajax.php:242
107
  msgid "ASN"
108
  msgstr ""
109
 
110
+ #: admin/class-ip-geo-block-admin.php:316
111
  #: admin/includes/class-admin-ajax.php:243
112
  msgid "Host name"
113
  msgstr ""
114
 
115
+ #: admin/class-ip-geo-block-admin.php:317
116
  #: admin/includes/class-admin-ajax.php:110
117
  #: admin/includes/class-admin-ajax.php:244
118
  msgid "Target"
119
  msgstr ""
120
 
121
+ #: admin/class-ip-geo-block-admin.php:318
122
  #: admin/includes/class-admin-ajax.php:245
123
  msgid "Failure / Total"
124
  msgstr ""
125
 
126
+ #: admin/class-ip-geo-block-admin.php:319
127
  #: admin/includes/class-admin-ajax.php:246
128
  msgid "Elapsed[sec]"
129
  msgstr ""
130
 
131
+ #: admin/class-ip-geo-block-admin.php:320
132
  #: admin/includes/class-admin-ajax.php:106
133
  msgid "Time"
134
  msgstr ""
135
 
136
+ #: admin/class-ip-geo-block-admin.php:321
137
  #: admin/includes/class-admin-ajax.php:111
138
  msgid "Result"
139
  msgstr ""
140
 
141
+ #: admin/class-ip-geo-block-admin.php:322
142
  #: admin/includes/class-admin-ajax.php:112
143
  msgid "Request"
144
  msgstr ""
145
 
146
+ #: admin/class-ip-geo-block-admin.php:323
147
  #: admin/includes/class-admin-ajax.php:113
148
  msgid "User agent"
149
  msgstr ""
150
 
151
+ #: admin/class-ip-geo-block-admin.php:324
152
  #: admin/includes/class-admin-ajax.php:114
153
  msgid "HTTP headers"
154
  msgstr ""
155
 
156
+ #: admin/class-ip-geo-block-admin.php:325
157
  #: admin/includes/class-admin-ajax.php:115
158
  msgid "$_POST data"
159
  msgstr ""
160
 
161
+ #: admin/class-ip-geo-block-admin.php:351
162
  msgid "Contribute on GitHub"
163
  msgstr ""
164
 
165
+ #: admin/class-ip-geo-block-admin.php:365
166
+ #: admin/class-ip-geo-block-admin.php:491
167
+ #: admin/class-ip-geo-block-admin.php:732
168
+ #: admin/class-ip-geo-block-admin.php:752
169
+ #: admin/class-ip-geo-block-admin.php:768
170
  msgid "Settings"
171
  msgstr ""
172
 
173
+ #: admin/class-ip-geo-block-admin.php:459
174
  #: admin/class-ip-geo-block-admin.php:460
175
+ #: admin/class-ip-geo-block-admin.php:470
176
  #: admin/class-ip-geo-block-admin.php:471
177
+ #: admin/class-ip-geo-block-admin.php:480
178
+ #: admin/class-ip-geo-block-admin.php:490
 
179
  msgid "IP Geo Block"
180
  msgstr ""
181
 
182
+ #: admin/class-ip-geo-block-admin.php:481
183
+ #: admin/class-ip-geo-block-admin.php:731
184
+ #: admin/class-ip-geo-block-admin.php:749
185
+ #: admin/class-ip-geo-block-admin.php:766
186
  msgid "Sites list"
187
  msgstr ""
188
 
189
+ #: admin/class-ip-geo-block-admin.php:521
190
  msgid "You need WordPress 3.7+."
191
  msgstr ""
192
 
193
+ #: admin/class-ip-geo-block-admin.php:525
194
  #, php-format
195
  msgid ""
196
  "Can not load Geolocation API libraries from <code>%s</code>. It seems to "
199
  "contents of tokkonopapa/WordPress-IP-Geo-API as a zip file\">ZIP file</a> "
200
  "from <a rel=\"noreferrer\" href=\"https://github.com/tokkonopapa/WordPress-"
201
  "IP-Geo-API\" title=\"tokkonopapa/WordPress-IP-Geo-API - GitHub\">WordPress-"
202
+ "IP-Geo-API</a>. Try to deactivate IP Geo Block once and activate it again, "
203
+ "or install <code>ip-geo-api</code> with write permission according to <a rel="
204
+ "\"noreferrer\" href=\"https://www.ipgeoblock.com/codex/how-to-fix-permission-"
205
+ "troubles.html\" title=\"How can I fix permission troubles? | IP Geo Block"
206
+ "\">this instruction</a>."
207
  msgstr ""
208
 
209
+ #: admin/class-ip-geo-block-admin.php:534
210
  #, php-format
211
  msgid ""
212
  "You should select at least one API at <a href=\"%s\">Geolocation API "
214
  "expires."
215
  msgstr ""
216
 
217
+ #: admin/class-ip-geo-block-admin.php:543
218
  #, php-format
219
  msgid ""
220
  "You should select at least one API for local database at <a href=\"%s"
222
  "slow down the site."
223
  msgstr ""
224
 
225
+ #: admin/class-ip-geo-block-admin.php:554
226
  #, php-format
227
  msgid ""
228
  "Now downloading geolocation databases in background. After a little while, "
230
  "strong>&#8221; at <a href=\"%s\">Validation rules and behavior</a>."
231
  msgstr ""
232
 
233
+ #: admin/class-ip-geo-block-admin.php:560
234
  #, php-format
235
  msgid ""
236
  "The &#8220;<strong>Matching rule</strong>&#8221; is not set properly. Please "
237
  "confirm it at <a href=\"%s\">Validation rules and behavior</a>."
238
  msgstr ""
239
 
240
+ #: admin/class-ip-geo-block-admin.php:569
241
  msgid "Local database and matching rule have been updated."
242
  msgstr ""
243
 
244
+ #: admin/class-ip-geo-block-admin.php:580
245
  msgid ""
246
  "Once you logout, you will be unable to login again because the number of "
247
  "login attempts reaches the limit."
248
  msgstr ""
249
 
250
+ #: admin/class-ip-geo-block-admin.php:582
251
  #, php-format
252
  msgid ""
253
  "Please remove your IP address in &#8220;%1$sStatistics in IP address cache"
255
  "yourself out."
256
  msgstr ""
257
 
258
+ #: admin/class-ip-geo-block-admin.php:593
259
  msgid ""
260
  "Once you logout, you will be unable to login again because your country code "
261
  "or IP address is in the blacklist."
262
  msgstr ""
263
 
264
+ #: admin/class-ip-geo-block-admin.php:594
265
  msgid ""
266
  "Once you logout, you will be unable to login again because your country code "
267
  "or IP address is not in the whitelist."
268
  msgstr ""
269
 
270
+ #: admin/class-ip-geo-block-admin.php:598
271
  #, php-format
272
  msgid "Please check your &#8220;%sValidation rules and behavior%s&#8221;."
273
  msgstr ""
274
 
275
+ #: admin/class-ip-geo-block-admin.php:602
276
  #, php-format
277
  msgid ""
278
  "Please confirm your local geolocation database files exist at &#8220;%sLocal "
280
  "&#8220;%sStatistics in cache%s&#8221; section."
281
  msgstr ""
282
 
283
+ #: admin/class-ip-geo-block-admin.php:616
284
  #, php-format
285
  msgid ""
286
  "Emergency login link is outdated. Please delete it once and generate again "
288
  "favorites / bookmarks in your browser."
289
  msgstr ""
290
 
291
+ #: admin/class-ip-geo-block-admin.php:625
292
  msgid ""
293
  "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php) at &#8220;Validation "
294
  "timing&#8221; is imcompatible with <strong>IP Geo Allow</strong>. Please "
295
  "select &#8220;init&#8221; action hook."
296
  msgstr ""
297
 
298
+ #: admin/class-ip-geo-block-admin.php:733
299
  msgid "Statistics"
300
  msgstr ""
301
 
302
+ #: admin/class-ip-geo-block-admin.php:734
303
  msgid "Logs"
304
  msgstr ""
305
 
306
+ #: admin/class-ip-geo-block-admin.php:735
307
  msgid "Search"
308
  msgstr ""
309
 
310
+ #: admin/class-ip-geo-block-admin.php:736
311
  msgid "Attribution"
312
  msgstr ""
313
 
314
+ #: admin/class-ip-geo-block-admin.php:784
 
 
 
 
 
315
  msgid "Toggle all"
316
  msgstr ""
317
 
318
+ #: admin/class-ip-geo-block-admin.php:787
319
  msgid ""
320
  "Independent of &#8220;Privacy and record settings&#8221;, you can see all "
321
  "the requests validated by this plugin in almost real time."
322
  msgstr ""
323
 
324
+ #: admin/class-ip-geo-block-admin.php:787 admin/includes/tab-accesslog.php:39
325
  msgid "Live update"
326
  msgstr ""
327
 
328
+ #: admin/class-ip-geo-block-admin.php:791
329
  msgid "Open a new window on clicking the link in the chart."
330
  msgstr ""
331
 
332
+ #: admin/class-ip-geo-block-admin.php:815
333
  msgid "Thanks for providing these great services for free."
334
  msgstr ""
335
 
336
+ #: admin/class-ip-geo-block-admin.php:816
337
  msgid ""
338
  "(Most browsers will redirect you to each site <a href=\"https://www."
339
  "ipgeoblock.com/etc/referer.html\" title=\"Referer Checker\">without referrer "
340
  "when you click the link</a>.)"
341
  msgstr ""
342
 
343
+ #: admin/class-ip-geo-block-admin.php:821
344
  msgid "Back to top"
345
  msgstr ""
346
 
347
+ #: admin/class-ip-geo-block-admin.php:913
348
  msgid "Enable"
349
  msgstr ""
350
 
351
+ #: admin/class-ip-geo-block-admin.php:928
352
  msgid "Select one"
353
  msgstr ""
354
 
355
+ #: admin/class-ip-geo-block-admin.php:1363
356
  msgid "You do not have sufficient permissions to access this page."
357
  msgstr ""
358
 
359
+ #: admin/class-ip-geo-block-admin.php:1390
360
  #: admin/includes/class-admin-rewrite.php:194
361
+ #: classes/class-ip-geo-block-cron.php:228
362
+ #: classes/class-ip-geo-block-cron.php:332
363
+ #: classes/class-ip-geo-block-cron.php:410
364
+ #: classes/class-ip-geo-block-opts.php:482
365
  #, php-format
366
  msgid "Unable to write <code>%s</code>. Please check the permission."
367
  msgstr ""
368
 
369
+ #: admin/class-ip-geo-block-admin.php:1424
370
  msgid "Settings saved."
371
  msgstr ""
372
 
373
+ #: admin/class-ip-geo-block-admin.php:1529
374
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:91
375
+ msgid ""
376
+ "<span title=\"Show only passed entries whose country codes are in Whitelist."
377
+ "\">Passed in Whitelist</span>"
378
+ msgstr ""
379
+
380
+ #: admin/class-ip-geo-block-admin.php:1530
381
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:92
382
+ msgid ""
383
+ "<span title=\"Show only passed entries whose country codes are in Blacklist."
384
+ "\">Passed in Blacklist</span>"
385
+ msgstr ""
386
+
387
+ #: admin/class-ip-geo-block-admin.php:1531
388
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:93
389
+ msgid ""
390
+ "<span title=\"Show only passed entries whose country codes are not in either "
391
+ "list.\">Passed not in List</span>"
392
+ msgstr ""
393
+
394
+ #: admin/class-ip-geo-block-admin.php:1532
395
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:94
396
+ msgid ""
397
+ "<span title=\"Show only blocked entries whose country codes are in Whitelist."
398
+ "\">Blocked in Whitelist</span>"
399
+ msgstr ""
400
+
401
+ #: admin/class-ip-geo-block-admin.php:1533
402
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:95
403
+ msgid ""
404
+ "<span title=\"Show only blocked entries whose country codes are in Blacklist."
405
+ "\">Blocked in Blacklist</span>"
406
+ msgstr ""
407
+
408
+ #: admin/class-ip-geo-block-admin.php:1534
409
+ #: wp-content/ip-geo-api/drop-in-admin-sample.php:96
410
+ msgid ""
411
+ "<span title=\"Show only blocked entries whose country codes are not in "
412
+ "either list.\">Blocked not in List</span>"
413
+ msgstr ""
414
+
415
  #: admin/includes/class-admin-ajax.php:72
416
  #: admin/includes/class-admin-ajax.php:75 admin/includes/tab-settings.php:84
417
  #: admin/includes/tab-settings.php:103
430
  msgstr ""
431
 
432
  #: admin/includes/class-admin-rewrite.php:168
433
+ #: classes/class-ip-geo-block-cron.php:223
434
+ #: classes/class-ip-geo-block-cron.php:405
435
  #, php-format
436
  msgid "Unable to read <code>%s</code>. Please check the permission."
437
  msgstr ""
455
  msgid "Help"
456
  msgstr ""
457
 
458
+ #: admin/includes/tab-accesslog.php:55 admin/includes/tab-settings.php:450
459
  msgid "Comment post"
460
  msgstr ""
461
 
462
+ #: admin/includes/tab-accesslog.php:56 admin/includes/tab-settings.php:451
463
  msgid "XML-RPC"
464
  msgstr ""
465
 
466
+ #: admin/includes/tab-accesslog.php:57 admin/includes/tab-settings.php:452
467
  msgid "Login form"
468
  msgstr ""
469
 
470
+ #: admin/includes/tab-accesslog.php:58 admin/includes/tab-settings.php:453
471
  msgid "Admin area"
472
  msgstr ""
473
 
474
+ #: admin/includes/tab-accesslog.php:59 admin/includes/tab-settings.php:455
475
  msgid "Public facing pages"
476
  msgstr ""
477
 
491
  msgid "Reset"
492
  msgstr ""
493
 
494
+ #: admin/includes/tab-accesslog.php:117
495
  msgid "Preset filters"
496
  msgstr ""
497
 
498
+ #: admin/includes/tab-accesslog.php:133 admin/includes/tab-statistics.php:238
499
  msgid "Bulk action"
500
  msgstr ""
501
 
502
+ #: admin/includes/tab-accesslog.php:144 admin/includes/tab-statistics.php:249
503
  msgid "Remove entries by IP address"
504
  msgstr ""
505
 
506
+ #: admin/includes/tab-accesslog.php:145 admin/includes/tab-statistics.php:250
507
  msgid "Add IP address to &#8220;Whitelist&#8221;"
508
  msgstr ""
509
 
510
+ #: admin/includes/tab-accesslog.php:146 admin/includes/tab-statistics.php:251
511
  msgid "Add IP address to &#8220;Blacklist&#8221;"
512
  msgstr ""
513
 
514
+ #: admin/includes/tab-accesslog.php:147 admin/includes/tab-statistics.php:252
515
  msgid "Add AS number to &#8220;Whitelist&#8221;"
516
  msgstr ""
517
 
518
+ #: admin/includes/tab-accesslog.php:148 admin/includes/tab-statistics.php:253
519
  msgid "Add AS number to &#8220;Blacklist&#8221;"
520
  msgstr ""
521
 
522
+ #: admin/includes/tab-accesslog.php:150 admin/includes/tab-network.php:56
523
  #: admin/includes/tab-statistics.php:255
524
  msgid "Apply"
525
  msgstr ""
526
 
527
+ #: admin/includes/tab-accesslog.php:157 admin/includes/tab-statistics.php:191
528
  msgid "Clear logs"
529
  msgstr ""
530
 
531
+ #: admin/includes/tab-accesslog.php:165 admin/includes/tab-statistics.php:167
532
  #: admin/includes/tab-statistics.php:199 admin/includes/tab-statistics.php:269
533
  msgid "Clear all"
534
  msgstr ""
535
 
536
+ #: admin/includes/tab-accesslog.php:174
537
  msgid "Export logs"
538
  msgstr ""
539
 
540
+ #: admin/includes/tab-accesslog.php:180 admin/includes/tab-settings.php:1560
541
  #: admin/includes/tab-statistics.php:283
542
  msgid "Export to the local file"
543
  msgstr ""
544
 
545
+ #: admin/includes/tab-accesslog.php:180 admin/includes/tab-statistics.php:283
546
  msgid "Export csv"
547
  msgstr ""
548
 
549
+ #: admin/includes/tab-accesslog.php:206 admin/includes/tab-network.php:112
550
  #: admin/includes/tab-statistics.php:410
551
  #, php-format
552
  msgid "[ %sRecord &#8220;Validation logs&#8221;%s ] is disabled."
553
  msgstr ""
554
 
555
+ #: admin/includes/tab-accesslog.php:207 admin/includes/tab-network.php:113
556
  #: admin/includes/tab-statistics.php:411
557
  msgid ""
558
  "Please set the proper condition to record and analyze the validation logs."
570
  msgid "Geolocation API"
571
  msgstr ""
572
 
573
+ #: admin/includes/tab-geolocation.php:89 admin/includes/tab-settings.php:1105
574
  msgid ""
575
  "<dfn title=\"IP address is always encrypted on recording in Cache and Logs. "
576
  "Moreover, this option replaces the end of IP address with &#8220;***&#8221; "
704
  "country code</dfn>"
705
  msgstr ""
706
 
707
+ #: admin/includes/tab-settings.php:125 admin/includes/tab-settings.php:827
708
  msgid "Matching rule"
709
  msgstr ""
710
 
800
  "this validation.\">Prevent malicious file uploading</dfn>"
801
  msgstr ""
802
 
803
+ #: admin/includes/tab-settings.php:304 admin/includes/tab-settings.php:516
804
+ #: admin/includes/tab-settings.php:661 admin/includes/tab-settings.php:1177
805
  msgid "Disable"
806
  msgstr ""
807
 
813
  msgid "Verify file extension only"
814
  msgstr ""
815
 
816
+ #: admin/includes/tab-settings.php:314
817
+ msgid ""
818
+ "<dfn title=\"Specify the table names to be verified for single site. This "
819
+ "verification will be skipped if empty.\">pre_update_option</dfn>"
820
+ msgstr ""
821
+
822
+ #: admin/includes/tab-settings.php:316
823
+ msgid ""
824
+ "<dfn title=\"Specify the table names to be verified for multisite. This "
825
+ "verification will be skipped if empty.\">pre_update_site_option</dfn>"
826
+ msgstr ""
827
+
828
+ #: admin/includes/tab-settings.php:321
829
+ msgid ""
830
+ "<dfn title=\"It prevents to manipulate metadata in database without admin "
831
+ "privilege.\">Prevent metadata alteration</dfn>"
832
+ msgstr ""
833
+
834
+ #: admin/includes/tab-settings.php:337
835
  #, php-format
836
  msgid ""
837
  "<dfn title=\"You can put your original 403.php and so on into your theme "
838
  "directory.\">Response code</dfn> %s"
839
  msgstr ""
840
 
841
+ #: admin/includes/tab-settings.php:366 admin/includes/tab-settings.php:910
842
  msgid ""
843
  "<dfn title=\"Specify the URL for response code 2xx and 3xx. If it is pointed "
844
  "to a public facing page, visitors would not be blocked on the page to "
847
  "\">Redirect URL</dfn>"
848
  msgstr ""
849
 
850
+ #: admin/includes/tab-settings.php:383 admin/includes/tab-settings.php:928
851
  msgid ""
852
  "<dfn title=\"Specify the message for response code 4xx and 5xx.\">Response "
853
  "message</dfn>"
854
  msgstr ""
855
 
856
+ #: admin/includes/tab-settings.php:401
857
  msgid "Select when to run the validation."
858
  msgstr ""
859
 
860
+ #: admin/includes/tab-settings.php:401
861
  msgid "Validation timing"
862
  msgstr ""
863
 
864
+ #: admin/includes/tab-settings.php:412
865
  msgid "&#8220;init&#8221; action hook"
866
  msgstr ""
867
 
868
+ #: admin/includes/tab-settings.php:413
869
  msgid "&#8220;mu-plugins&#8221; (ip-geo-block-mu.php)"
870
  msgstr ""
871
 
872
+ #: admin/includes/tab-settings.php:416
873
  msgid ""
874
  "Validate at &#8220;init&#8221; action hook in the same manner as typical "
875
  "plugins."
876
  msgstr ""
877
 
878
+ #: admin/includes/tab-settings.php:417
879
  msgid ""
880
  "Validate at an earlier phase than other typical plugins. It can reduce load "
881
  "on server but has <a rel='noreferrer' href='https://www.ipgeoblock.com/codex/"
883
  "restrictions</a>."
884
  msgstr ""
885
 
886
+ #: admin/includes/tab-settings.php:425
887
  msgid ""
888
  "It enables to simulate the validation rules without actual blocking in order "
889
  "to check the behavior of this plugin. The results can be found on &#8220;"
890
  "Logs&#8221; tab."
891
  msgstr ""
892
 
893
+ #: admin/includes/tab-settings.php:425
894
  msgid "Simulation mode"
895
  msgstr ""
896
 
897
+ #: admin/includes/tab-settings.php:442
898
  msgid "Back-end target settings"
899
  msgstr ""
900
 
901
+ #: admin/includes/tab-settings.php:448
902
  #, php-format
903
  msgid "<dfn title=\"It enables to validate requests to %s.\">%s</dfn>"
904
  msgstr ""
905
 
906
+ #: admin/includes/tab-settings.php:454
907
  msgid "Other areas"
908
  msgstr ""
909
 
910
+ #: admin/includes/tab-settings.php:455
911
  msgid "public facing pages"
912
  msgstr ""
913
 
914
+ #: admin/includes/tab-settings.php:471 admin/includes/tab-settings.php:517
915
+ #: admin/includes/tab-settings.php:549 admin/includes/tab-settings.php:555
916
+ #: admin/includes/tab-settings.php:820
917
  msgid "Block by country"
918
  msgstr ""
919
 
920
+ #: admin/includes/tab-settings.php:481
921
  msgid "The whole will be wrapped by &lt;p&gt; tag. Allowed tags: "
922
  msgstr ""
923
 
924
+ #: admin/includes/tab-settings.php:481
925
  msgid "Message on comment form"
926
  msgstr ""
927
 
928
+ #: admin/includes/tab-settings.php:494
929
  msgid "None"
930
  msgstr ""
931
 
932
+ #: admin/includes/tab-settings.php:495
933
  msgid "Top"
934
  msgstr ""
935
 
936
+ #: admin/includes/tab-settings.php:496
937
  msgid "Bottom"
938
  msgstr ""
939
 
940
+ #: admin/includes/tab-settings.php:518
941
  msgid "Completely close"
942
  msgstr ""
943
 
944
+ #: admin/includes/tab-settings.php:524
945
  msgid "Action to login as a registered user."
946
  msgstr ""
947
 
948
+ #: admin/includes/tab-settings.php:524
949
  msgid "Log in"
950
  msgstr ""
951
 
952
+ #: admin/includes/tab-settings.php:525
953
  msgid "Action to register new users."
954
  msgstr ""
955
 
956
+ #: admin/includes/tab-settings.php:525
957
  msgid "Register"
958
  msgstr ""
959
 
960
+ #: admin/includes/tab-settings.php:526
961
  msgid "Action to reset a password to create a new one."
962
  msgstr ""
963
 
964
+ #: admin/includes/tab-settings.php:526
965
  msgid "Password Reset"
966
  msgstr ""
967
 
968
+ #: admin/includes/tab-settings.php:527
969
  msgid "Action to email a password to a registered user."
970
  msgstr ""
971
 
972
+ #: admin/includes/tab-settings.php:527
973
  msgid "Lost Password"
974
  msgstr ""
975
 
976
+ #: admin/includes/tab-settings.php:528
977
  msgid ""
978
  "Action to show prompt to enter a password on password protected post and "
979
  "page."
980
  msgstr ""
981
 
982
+ #: admin/includes/tab-settings.php:528
983
  msgid "Password protected"
984
  msgstr ""
985
 
986
+ #: admin/includes/tab-settings.php:550
987
  msgid ""
988
  "<dfn title=\"Specify the individual action as a blocking target.\">Target "
989
  "actions</dfn>"
990
  msgstr ""
991
 
992
+ #: admin/includes/tab-settings.php:556
993
  msgid "Prevent Zero-day Exploit"
994
  msgstr ""
995
 
996
+ #: admin/includes/tab-settings.php:560
997
  msgid ""
998
+ "It will block a request related to the services for both &#8220;non-logged "
999
+ "in user&#8221; and &#8220;logged-in user&#8221;."
1000
  msgstr ""
1001
 
1002
+ #: admin/includes/tab-settings.php:561
1003
  msgid ""
1004
  "Regardless of the country code, it will block a malicious request related to "
1005
+ "the services only for &#8220;logged-in user&#8221;."
1006
  msgstr ""
1007
 
1008
+ #: admin/includes/tab-settings.php:567
1009
  msgid ""
1010
  "This is applied to &#8220;XML-RPC&#8221; and &#8220;Login form&#8221; when "
1011
  "&#8220;IP address cache&#8221; in &#8220;Privacy and record settings&#8221; "
1013
  "cache."
1014
  msgstr ""
1015
 
1016
+ #: admin/includes/tab-settings.php:567
1017
  msgid "Max failed login attempts per IP address"
1018
  msgstr ""
1019
 
1020
+ #: admin/includes/tab-settings.php:608
1021
  msgid "admin post for logged-in user"
1022
  msgstr ""
1023
 
1024
+ #: admin/includes/tab-settings.php:609
1025
  msgid "admin post for non logged-in user"
1026
  msgstr ""
1027
 
1028
+ #: admin/includes/tab-settings.php:631
1029
  msgid "Admin ajax/post"
1030
  msgstr ""
1031
 
1032
+ #: admin/includes/tab-settings.php:645
1033
  msgid ""
1034
  "Specify the action name (&#8220;action=&hellip;&#8221;) or the page name "
1035
  "(&#8220;page=&hellip;&#8221;) to prevent unintended blocking caused by "
1037
  "Zero-day Exploit&#8221; (for logged-in user)."
1038
  msgstr ""
1039
 
1040
+ #: admin/includes/tab-settings.php:645 admin/includes/tab-settings.php:723
1041
+ #: admin/includes/tab-settings.php:783
1042
  msgid "Exceptions"
1043
  msgstr ""
1044
 
1045
+ #: admin/includes/tab-settings.php:646
1046
  msgid "Toggle with non logged-in user"
1047
  msgstr ""
1048
 
1049
+ #: admin/includes/tab-settings.php:649
1050
  msgid "Candidate actions/pages"
1051
  msgstr ""
1052
 
1053
+ #: admin/includes/tab-settings.php:663
1054
  #, php-format
1055
  msgid ""
1056
  "Regardless of the country code, it will block a malicious request to <code>"
1057
  "%s&ctdot;/*.php</code>."
1058
  msgstr ""
1059
 
1060
+ #: admin/includes/tab-settings.php:664
1061
  msgid ""
1062
  "Select the item which causes unintended blocking in order to exclude from "
1063
  "the validation target. Grayed item indicates &#8220;INACTIVE&#8221;."
1064
  msgstr ""
1065
 
1066
+ #: admin/includes/tab-settings.php:665
1067
  #, php-format
1068
  msgid ""
1069
  "It configures &#8220;%s&#8221; to validate a direct request to the PHP file "
1071
  "hidden files beginning with a dot by the server's configuration."
1072
  msgstr ""
1073
 
1074
+ #: admin/includes/tab-settings.php:666
1075
  msgid "Sorry, but your server type is not supported."
1076
  msgstr ""
1077
 
1078
+ #: admin/includes/tab-settings.php:667
1079
  msgid ""
1080
  "You need to click &#8220;Save Changes&#8221; button for imported settings to "
1081
  "take effect."
1082
  msgstr ""
1083
 
1084
+ #: admin/includes/tab-settings.php:702 admin/includes/tab-settings.php:762
1085
  msgid "Force to load WP core"
1086
  msgstr ""
1087
 
1088
+ #: admin/includes/tab-settings.php:707
1089
  msgid "Plugins area"
1090
  msgstr ""
1091
 
1092
+ #: admin/includes/tab-settings.php:767
1093
  msgid "Themes area"
1094
  msgstr ""
1095
 
1096
+ #: admin/includes/tab-settings.php:802
1097
  msgid "Front-end target settings"
1098
  msgstr ""
1099
 
1100
+ #: admin/includes/tab-settings.php:837
1101
  msgid "Follow &#8220;Validation rules and behavior&#8221;"
1102
  msgstr ""
1103
 
1104
+ #: admin/includes/tab-settings.php:879
1105
  #, php-format
1106
  msgid ""
1107
  "<dfn title=\"You can configure a different response code from the Back-end. "
1109
  "\">Response code</dfn> %s"
1110
  msgstr ""
1111
 
1112
+ #: admin/includes/tab-settings.php:943
1113
  msgid ""
1114
  "<dfn title=\"Specify the individual page as a blocking target.\">Page</dfn>"
1115
  msgstr ""
1116
 
1117
+ #: admin/includes/tab-settings.php:955
1118
  msgid ""
1119
  "<dfn title=\"Specify the individual post type on a single page as a blocking "
1120
  "target.\">Post type</dfn>"
1121
  msgstr ""
1122
 
1123
+ #: admin/includes/tab-settings.php:967
1124
  msgid ""
1125
  "<dfn title=\"Specify the individual category on a single page or archive "
1126
  "page as a blocking target.\">Category</dfn>"
1127
  msgstr ""
1128
 
1129
+ #: admin/includes/tab-settings.php:979
1130
  msgid ""
1131
  "<dfn title=\"Specify the individual tag on a single page or archive page as "
1132
  "a blocking target.\">Tag</dfn>"
1133
  msgstr ""
1134
 
1135
+ #: admin/includes/tab-settings.php:993
1136
  msgid "Specify the validation target on front-end."
1137
  msgstr ""
1138
 
1139
+ #: admin/includes/tab-settings.php:993
1140
  msgid "Validation target"
1141
  msgstr ""
1142
 
1143
+ #: admin/includes/tab-settings.php:1004
1144
  msgid "All requests"
1145
  msgstr ""
1146
 
1147
+ #: admin/includes/tab-settings.php:1005
1148
  msgid "Specify the targets"
1149
  msgstr ""
1150
 
1151
+ #: admin/includes/tab-settings.php:1008
1152
  msgid ""
1153
  "Notice that &#8220;Validation timing&#8221; is deferred till &#8220;"
1154
  "wp&#8221; action hook. It means that this feature would not be compatible "
1155
  "with any page caching."
1156
  msgstr ""
1157
 
1158
+ #: admin/includes/tab-settings.php:1018
1159
  msgid "Specify the name of actions as exception that is invariably blocked."
1160
  msgstr ""
1161
 
1162
+ #: admin/includes/tab-settings.php:1018
1163
  msgid "Excluded actions"
1164
  msgstr ""
1165
 
1166
+ #: admin/includes/tab-settings.php:1034
1167
  msgid ""
1168
  "<dfn title=\"Specify the frequency of request for certain period of time."
1169
  "\">Blocking condition</dfn>"
1170
  msgstr ""
1171
 
1172
+ #: admin/includes/tab-settings.php:1036
1173
  #, php-format
1174
  msgid "More than %1$s page view (PV) in %2$s seconds"
1175
  msgstr ""
1176
 
1177
+ #: admin/includes/tab-settings.php:1044
1178
  msgid ""
1179
  "<dfn title=\"It will validate the frequency of request.\">Block badly-"
1180
  "behaved bots and crawlers</dfn>"
1181
  msgstr ""
1182
 
1183
+ #: admin/includes/tab-settings.php:1061
1184
  msgid ""
1185
  "A part of user agent string and a qualification connected with a separator "
1186
  "that indicates an applicable rule and can be &#8220;:&#8221; (pass) or "
1190
  "qualification&#8221;."
1191
  msgstr ""
1192
 
1193
+ #: admin/includes/tab-settings.php:1061
1194
  msgid "UA string and qualification"
1195
  msgstr ""
1196
 
1197
+ #: admin/includes/tab-settings.php:1078
1198
  msgid ""
1199
  "It enables to verify the host by reverse DNS lookup which would spend some "
1200
  "server resources. If it is disabled, &#8220;HOST&#8221; and &#8220;"
1202
  "return &#8220;true&#8221;."
1203
  msgstr ""
1204
 
1205
+ #: admin/includes/tab-settings.php:1078
1206
  msgid "Reverse DNS lookup"
1207
  msgstr ""
1208
 
1209
+ #: admin/includes/tab-settings.php:1097
1210
  msgid "Privacy and record settings"
1211
  msgstr ""
1212
 
1213
+ #: admin/includes/tab-settings.php:1120
1214
  msgid ""
1215
  "<dfn title=\"This option restricts not to send IP address to the external "
1216
  "Geolocation APIs.\">Do not send IP address to external APIs</dfn>"
1217
  msgstr ""
1218
 
1219
+ #: admin/includes/tab-settings.php:1135
1220
  msgid ""
1221
  "<dfn title=\"This option enables to record the IP address, country code and "
1222
  "failure counter of login attempts into the cache on database to minimize the "
1223
  "impact on site speed.\">Record &#8220;IP address cache&#8221;</dfn>"
1224
  msgstr ""
1225
 
1226
+ #: admin/includes/tab-settings.php:1150
1227
  msgid ""
1228
  "<dfn title=\"If user authentication fails consecutively beyond &#8220;Max "
1229
  "number of failed login attempts per IP address&#8221;, subsequent login will "
1231
  "dfn>"
1232
  msgstr ""
1233
 
1234
+ #: admin/includes/tab-settings.php:1166
1235
  msgid ""
1236
  "<dfn title=\"This option enables to record the validation logs including IP "
1237
  "addresses.\">Record &#8220;Validation logs&#8221;</dfn>"
1238
  msgstr ""
1239
 
1240
+ #: admin/includes/tab-settings.php:1178
1241
  msgid "When blocked"
1242
  msgstr ""
1243
 
1244
+ #: admin/includes/tab-settings.php:1179
1245
  msgid "When passed"
1246
  msgstr ""
1247
 
1248
+ #: admin/includes/tab-settings.php:1180
1249
  msgid "When &#8220;blocked&#8221; or &#8220;passed (not in whitelist)&#8221;"
1250
  msgstr ""
1251
 
1252
+ #: admin/includes/tab-settings.php:1181
1253
  msgid "Unauthenticated visitor"
1254
  msgstr ""
1255
 
1256
+ #: admin/includes/tab-settings.php:1182
1257
  msgid "Authenticated user"
1258
  msgstr ""
1259
 
1260
+ #: admin/includes/tab-settings.php:1183
1261
  msgid "All the validation"
1262
  msgstr ""
1263
 
1264
+ #: admin/includes/tab-settings.php:1191
1265
  #, php-format
1266
  msgid ""
1267
  "<dfn title=\"The maximum number of entries in the logs is also limited to %d."
1268
  "\">Expiration time [days] for each entry</dfn>"
1269
  msgstr ""
1270
 
1271
+ #: admin/includes/tab-settings.php:1208
1272
  msgid ""
1273
  "<dfn title=\"e.g. action, comment, log, pwd, FILES\">$_POST key to record "
1274
  "with value</dfn>"
1275
  msgstr ""
1276
 
1277
+ #: admin/includes/tab-settings.php:1227
1278
  msgid "Maximum entries in &#8220;Logs&#8221;"
1279
  msgstr ""
1280
 
1281
+ #: admin/includes/tab-settings.php:1244
1282
  msgid ""
1283
  "<dfn title=\"Select SQLite database source.\">Database source of SQLite for "
1284
  "&#8220;Live update&#8221;</dfn>"
1285
  msgstr ""
1286
 
1287
+ #: admin/includes/tab-settings.php:1257
1288
  msgid "Ordinary file"
1289
  msgstr ""
1290
 
1291
+ #: admin/includes/tab-settings.php:1258
1292
  msgid "In-Memory"
1293
  msgstr ""
1294
 
1295
+ #: admin/includes/tab-settings.php:1261
1296
  msgid "PDO_SQLITE driver not available"
1297
  msgstr ""
1298
 
1299
+ #: admin/includes/tab-settings.php:1262
1300
  msgid ""
1301
  "It takes a few tens of milliseconds as overhead. It can be safely used "
1302
  "without conflict with other plugins."
1303
  msgstr ""
1304
 
1305
+ #: admin/includes/tab-settings.php:1263
1306
  msgid ""
1307
  "It takes a few milliseconds as overhead. There is a possibility of conflict "
1308
  "with other plugins using this method."
1309
  msgstr ""
1310
 
1311
+ #: admin/includes/tab-settings.php:1271
1312
  msgid "Reset database source of &#8220;Live update&#8221;"
1313
  msgstr ""
1314
 
1315
+ #: admin/includes/tab-settings.php:1279
1316
  msgid "Reset now"
1317
  msgstr ""
1318
 
1319
+ #: admin/includes/tab-settings.php:1288 admin/includes/tab-settings.php:1449
1320
  msgid ""
1321
  "Task could not be found in WP-Cron. Please try to deactivate this plugin "
1322
  "once and activate again."
1323
  msgstr ""
1324
 
1325
+ #: admin/includes/tab-settings.php:1293
1326
  msgid ""
1327
  "<dfn title=\"This option enables to schedule the WP-Cron event to remove the "
1328
  "expired entries from &#8220;IP address cache&#8221; and &#8220;Validation "
1329
  "logs&#8221;.\">Interval [sec] to cleanup expired entries of IP address</dfn>"
1330
  msgstr ""
1331
 
1332
+ #: admin/includes/tab-settings.php:1302 admin/includes/tab-settings.php:1465
1333
  #, php-format
1334
  msgid "Next schedule: %s"
1335
  msgstr ""
1336
 
1337
+ #: admin/includes/tab-settings.php:1309
1338
  msgid ""
1339
  "<dfn title=\"This option enables to record the number blocked countries and "
1340
  "the number of blocked requests per day.\">Record &#8220;Statistics of "
1341
  "validation&#8221;</dfn>"
1342
  msgstr ""
1343
 
1344
+ #: admin/includes/tab-settings.php:1324
1345
  msgid "Maximum period for &#8220;Statistics&#8221; [days]"
1346
  msgstr ""
1347
 
1348
+ #: admin/includes/tab-settings.php:1342
1349
  msgid "Remove all settings and records at uninstallation"
1350
  msgstr ""
1351
 
1352
+ #: admin/includes/tab-settings.php:1359
1353
  msgid "Geolocation API settings"
1354
  msgstr ""
1355
 
1356
+ #: admin/includes/tab-settings.php:1380
1357
  msgid ""
1358
  "<dfn title=\"IP address cache and local databases are scanned at the top "
1359
  "priority.\">API selection and key settings</dfn>"
1360
  msgstr ""
1361
 
1362
+ #: admin/includes/tab-settings.php:1399
1363
  msgid "Timeout for network API [sec]"
1364
  msgstr ""
1365
 
1366
+ #: admin/includes/tab-settings.php:1417
1367
  msgid "Local database settings"
1368
  msgstr ""
1369
 
1370
+ #: admin/includes/tab-settings.php:1431
1371
  msgid "database"
1372
  msgstr ""
1373
 
1374
+ #: admin/includes/tab-settings.php:1432 classes/class-ip-geo-block-cron.php:434
1375
  #, php-format
1376
  msgid "Last update: %s"
1377
  msgstr ""
1378
 
1379
+ #: admin/includes/tab-settings.php:1454
1380
  msgid "Auto updating (once a month)"
1381
  msgstr ""
1382
 
1383
+ #: admin/includes/tab-settings.php:1472
1384
  msgid "Download database"
1385
  msgstr ""
1386
 
1387
+ #: admin/includes/tab-settings.php:1480
1388
  msgid "Download now"
1389
  msgstr ""
1390
 
1391
+ #: admin/includes/tab-settings.php:1491
1392
  msgid "Plugin settings"
1393
  msgstr ""
1394
 
1395
+ #: admin/includes/tab-settings.php:1503
1396
  msgid ""
1397
  "<dfn title=\"Synchronize all settings over the network wide.\">Network wide "
1398
  "settings</dfn>"
1399
  msgstr ""
1400
 
1401
+ #: admin/includes/tab-settings.php:1521
1402
  msgid ""
1403
  "<dfn title=\"You can access to the login form with a specific key at "
1404
  "emergency. Please add the generated link to favorites / bookmarks in your "
1406
  "dfn>"
1407
  msgstr ""
1408
 
1409
+ #: admin/includes/tab-settings.php:1537
1410
  msgid ""
1411
  "<dfn title=\"Valid key for Google Maps JavaScript API. Maps Embed API in "
1412
  "iframe can be available without key in case it's empty.\">Google Maps API "
1413
  "key</dfn>"
1414
  msgstr ""
1415
 
1416
+ #: admin/includes/tab-settings.php:1553
1417
  msgid "Export / Import settings"
1418
  msgstr ""
1419
 
1420
+ #: admin/includes/tab-settings.php:1560
1421
  msgid "Export settings"
1422
  msgstr ""
1423
 
1424
+ #: admin/includes/tab-settings.php:1561
1425
  msgid "Import from the local file"
1426
  msgstr ""
1427
 
1428
+ #: admin/includes/tab-settings.php:1561
1429
  msgid "Import settings"
1430
  msgstr ""
1431
 
1432
+ #: admin/includes/tab-settings.php:1569
1433
  msgid "Import pre-defined settings"
1434
  msgstr ""
1435
 
1436
+ #: admin/includes/tab-settings.php:1576
1437
  msgid ""
1438
  "Import the default settings to revert to the &#8220;Right after "
1439
  "installing&#8221; state"
1440
  msgstr ""
1441
 
1442
+ #: admin/includes/tab-settings.php:1576
1443
  msgid "Default settings"
1444
  msgstr ""
1445
 
1446
+ #: admin/includes/tab-settings.php:1577
1447
  msgid ""
1448
  "Import the preferred settings mainly by enabling Zero-day Exploit Prevention "
1449
  "for the &#8220;Back-end target settings&#8221;"
1450
  msgstr ""
1451
 
1452
+ #: admin/includes/tab-settings.php:1577
1453
  msgid "Best for Back-end"
1454
  msgstr ""
1455
 
1456
+ #: admin/includes/tab-settings.php:1586
1457
  msgid "Diagnose all DB tables"
1458
  msgstr ""
1459
 
1460
+ #: admin/includes/tab-settings.php:1594
1461
  msgid "Diagnose now"
1462
  msgstr ""
1463
 
1464
+ #: admin/includes/tab-settings.php:1603
1465
  msgid ""
1466
  "<dfn title=\"When you have some unexpected blocking experiences, please "
1467
  "press the button to find the blocked requests at the end of dumped "
1471
  "\">support forum</a> ]"
1472
  msgstr ""
1473
 
1474
+ #: admin/includes/tab-settings.php:1610
1475
  msgid "Please copy &amp; paste when submitting your issue to support forum"
1476
  msgstr ""
1477
 
1478
+ #: admin/includes/tab-settings.php:1610
1479
  msgid "Show information"
1480
  msgstr ""
1481
 
1482
+ #: admin/includes/tab-settings.php:1627
1483
  msgid ""
1484
  "While Geolite2 / Maxmind and IP2Location will fetch the local databases, "
1485
  "others will pass an IP address to the 3rd parties' API via HTTP."
1486
  msgstr ""
1487
 
1488
+ #: admin/includes/tab-settings.php:1628
1489
  msgid ""
1490
  "Please select the appropriate APIs to fit the privacy law / regulation in "
1491
  "your country / region."
1492
  msgstr ""
1493
 
1494
+ #: admin/includes/tab-settings.php:1637
1495
  #, php-format
1496
  msgid ""
1497
  "Maxmind GeoLite2 databases and APIs need PHP version 5.4.0+ and %sPECL phar "
1498
  "2.0.0+%s."
1499
  msgstr ""
1500
 
1501
+ #: admin/includes/tab-settings.php:1645
1502
  #, php-format
1503
  msgid ""
1504
  "Please refer to \"%sLiving with cache plugin%s\" for compatibility with "
1605
  msgid "Please set the proper condition to record IP address in cache."
1606
  msgstr ""
1607
 
1608
+ #: classes/class-ip-geo-block-cron.php:233
1609
  #, php-format
1610
  msgid "Can't lock <code>%s</code>. Please try again after a while."
1611
  msgstr ""
1612
 
1613
+ #: classes/class-ip-geo-block-cron.php:312
1614
  msgid "Your database file is up-to-date."
1615
  msgstr ""
1616
 
1617
+ #: classes/class-ip-geo-block-cron.php:415
1618
  msgid "gz or zip is not supported on your system."
1619
  msgstr ""
1620
 
1650
  "again."
1651
  msgstr ""
1652
 
1653
+ #: wp-content/ip-geo-api/ip2location/class-ip2location.php:154
1654
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php:160
1655
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:252
1656
  msgid "Database file does not exist."
1657
  msgstr ""
1658
 
1659
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:158
1660
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:179
1661
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:207
1662
+ #: wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php:228
1663
+ msgid "Update service has already stopped."
1664
+ msgstr ""
1665
+
1666
  #: wp-content/mu-plugins/ip-geo-block-mu.php:72
1667
  #, php-format
1668
  msgid ""
uninstall.php CHANGED
@@ -27,6 +27,7 @@ class IP_Geo_Block_Uninstall {
27
  */
28
  private static function delete_blog_options() {
29
  delete_option( IP_Geo_Block::OPTION_NAME ); // @since 1.2.0
 
30
  IP_Geo_Block_Logs::delete_tables();
31
  }
32
 
27
  */
28
  private static function delete_blog_options() {
29
  delete_option( IP_Geo_Block::OPTION_NAME ); // @since 1.2.0
30
+ delete_option( IP_Geo_Block::OPTION_META ); // @since 3.0.17
31
  IP_Geo_Block_Logs::delete_tables();
32
  }
33
 
wp-content/ip-geo-api/drop-in-admin-sample.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Drop-in for IP Geo Block custom filters for admin
4
+ *
5
+ * This file should be named as `drop-in-admin.php`.
6
+ *
7
+ * @package IP_Geo_Block
8
+ * @author tokkonopapa <tokkonopapa@yahoo.com>
9
+ * @license GPL-3.0
10
+ * @link http://www.ipgeoblock.com/
11
+ * @see http://www.ipgeoblock.com/codex/#filter-hooks
12
+ * @example Use `IP_Geo_Block::add_filter()` instead of `add_filter()`
13
+ */
14
+ class_exists( 'IP_Geo_Block', FALSE ) or die;
15
+
16
+ /**
17
+ * Analyze entries in "Validation logs"
18
+ *
19
+ * @param array $logs An array including each entry where:
20
+ * Array (
21
+ * [0 DB row number] => 154
22
+ * [1 Target ] => comment
23
+ * [2 Time ] => 1534580897
24
+ * [3 IP address ] => 102.177.147.***
25
+ * [4 Country code ] => ZA
26
+ * [5 Result ] => blocked
27
+ * [6 AS number ] => AS328239
28
+ * [7 Request ] => POST[80]:/wp-comments-post.php
29
+ * [8 User agent ] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) ...
30
+ * [9 HTTP headers ] => HTTP_ORIGIN=http://localhost,HTTP_X_FORWARDED_FOR=102.177.147.***
31
+ * [10 $_POST data ] => comment=Hello.,author,email,url,comment_post_ID,comment_parent
32
+ * )
33
+ *
34
+ * And put a mark at "Target"
35
+ * ¹¹: Passed in Whitelist
36
+ * ¹²: Passed in Blacklist
37
+ * ¹³: Passed not in Lists
38
+ * ²¹: Blocked in Whitelist
39
+ * ²²: Blocked in Blacklist
40
+ * ²³: Blocked not in Lists
41
+ */
42
+ function ip_geo_block_logs( $logs ) {
43
+ // Get settings of IP Geo Block
44
+ $settings = IP_Geo_Block::get_option();
45
+
46
+ // White/Black list for back-end
47
+ $white_backend = $settings['white_list'];
48
+ $black_backend = $settings['black_list'];
49
+
50
+ // White/Black list for front-end
51
+ if ( $settings['public']['matching_rule'] < 0 ) {
52
+ // Follow "Validation rule settings"
53
+ $white_frontend = $white_backend;
54
+ $black_frontend = $black_backend;
55
+ } else {
56
+ // Whitelist or Blacklist for "Public facing pages"
57
+ $white_frontend = $settings['public']['white_list'];
58
+ $black_frontend = $settings['public']['black_list'];
59
+ }
60
+
61
+ foreach ( $logs as $key => $log ) {
62
+ // Passed or Blocked
63
+ $mark = IP_Geo_Block::is_passed( $log[5] ) ? '&sup1;' : '&sup2;';
64
+
65
+ // Whitelisted, Blacklisted or N/A
66
+ if ( 'public' === $log[1] ) {
67
+ $mark .= IP_Geo_Block::is_listed( $log[4], $white_frontend ) ? '&sup1;' : (
68
+ IP_Geo_Block::is_listed( $log[4], $black_frontend ) ? '&sup2;' : '&sup3;' );
69
+ } else {
70
+ $mark .= IP_Geo_Block::is_listed( $log[4], $white_backend ) ? '&sup1;' : (
71
+ IP_Geo_Block::is_listed( $log[4], $black_backend ) ? '&sup2;' : '&sup3;' );
72
+ }
73
+
74
+ // Put a mark at "Target"
75
+ $logs[ $key ][1] .= $mark;
76
+ }
77
+
78
+ return $logs;
79
+ }
80
+
81
+ IP_Geo_Block::add_filter( 'ip-geo-block-logs', 'ip_geo_block_logs' );
82
+
83
+ /**
84
+ * Register UI "Preset filters" at "Search in logs"
85
+ *
86
+ * @param array $filters An empty array by default.
87
+ * @return array $filters The array of paired with 'title' and 'value'.
88
+ */
89
+ function ip_geo_block_logs_preset( $filters ) {
90
+ return array(
91
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-happy" >&nbsp;</span>' . __( '<span title="Show only passed entries whose country codes are in Whitelist.">Passed in Whitelist</span>', 'ip-geo-block' ), 'value' => '&sup1;&sup1;' ),
92
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-grin2" >&nbsp;</span>' . __( '<span title="Show only passed entries whose country codes are in Blacklist.">Passed in Blacklist</span>', 'ip-geo-block' ), 'value' => '&sup1;&sup2;' ),
93
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-cool" >&nbsp;</span>' . __( '<span title="Show only passed entries whose country codes are not in either list.">Passed not in List</span>', 'ip-geo-block' ), 'value' => '&sup1;&sup3;' ),
94
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-confused" >&nbsp;</span>' . __( '<span title="Show only blocked entries whose country codes are in Whitelist.">Blocked in Whitelist</span>', 'ip-geo-block' ), 'value' => '&sup2;&sup1;' ),
95
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-confused2">&nbsp;</span>' . __( '<span title="Show only blocked entries whose country codes are in Blacklist.">Blocked in Blacklist</span>', 'ip-geo-block' ), 'value' => '&sup2;&sup2;' ),
96
+ array( 'title' => '<span class="ip-geo-block-icon ip-geo-block-icon-crying" >&nbsp;</span>' . __( '<span title="Show only blocked entries whose country codes are not in either list.">Blocked not in List</span>', 'ip-geo-block' ), 'value' => '&sup2;&sup3;' ),
97
+ );
98
+ }
99
+
100
+ IP_Geo_Block::add_filter( 'ip-geo-block-logs-preset', 'ip_geo_block_logs_preset' );
wp-content/ip-geo-api/ip2location/bcmath.php CHANGED
@@ -33,7 +33,7 @@ else: // extension_loaded('gmp')
33
 
34
  if ( ! function_exists('bcadd') ):
35
  /**
36
- * bcadd Add two arbitrary precision numbers.
37
  * @link https://php.net/manual/en/function.bcadd.php
38
  */
39
  function bcadd($Num1='0',$Num2='0',$Scale=null) {
@@ -89,7 +89,7 @@ endif; // ! function_exists('bcadd')
89
 
90
  if ( ! function_exists('bcsub') ):
91
  /**
92
- * bcsub Subtract one arbitrary precision number from another.
93
  * @link https://php.net/manual/en/function.bcsub.php
94
  */
95
  function bcsub($Num1='0',$Num2='0',$Scale=null) {
@@ -145,7 +145,7 @@ endif; // ! function_exists('bcsub')
145
 
146
  if ( ! function_exists('bcmul') ):
147
  /**
148
- * bcmul Multiply two arbitrary precision numbers.
149
  * @link https://php.net/manual/en/function.bcmul.php
150
  */
151
  function bcmul($Num1='0',$Num2='0') {
@@ -199,7 +199,7 @@ endif; // ! function_exists('bcmul')
199
 
200
  if ( ! function_exists('bcpow') ):
201
  /**
202
- * bcpow Raise an arbitrary precision number to another.
203
  * @link https://php.net/manual/en/function.bcmul.php
204
  */
205
  function bcpow($num, $power) {
33
 
34
  if ( ! function_exists('bcadd') ):
35
  /**
36
+ * bcadd - Add two arbitrary precision numbers.
37
  * @link https://php.net/manual/en/function.bcadd.php
38
  */
39
  function bcadd($Num1='0',$Num2='0',$Scale=null) {
89
 
90
  if ( ! function_exists('bcsub') ):
91
  /**
92
+ * bcsub - Subtract one arbitrary precision number from another.
93
  * @link https://php.net/manual/en/function.bcsub.php
94
  */
95
  function bcsub($Num1='0',$Num2='0',$Scale=null) {
145
 
146
  if ( ! function_exists('bcmul') ):
147
  /**
148
+ * bcmul - Multiply two arbitrary precision numbers.
149
  * @link https://php.net/manual/en/function.bcmul.php
150
  */
151
  function bcmul($Num1='0',$Num2='0') {
199
 
200
  if ( ! function_exists('bcpow') ):
201
  /**
202
+ * bcpow - Raise an arbitrary precision number to another.
203
  * @link https://php.net/manual/en/function.bcmul.php
204
  */
205
  function bcpow($num, $power) {
wp-content/ip-geo-api/ip2location/class-ip2location.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * IP Geo Block API class library for IP2Location
4
  *
5
- * @version 1.1.13
6
  * @author tokkonopapa <tokkonopapa@yahoo.com>
7
  * @license GPL-3.0
8
  * @link https://www.ipgeoblock.com/
@@ -54,7 +54,7 @@ class IP_Geo_Block_API_IP2Location extends IP_Geo_Block_API {
54
  $type = IP_GEO_BLOCK_API_TYPE_IPV4;
55
  $file = apply_filters(
56
  IP_Geo_Block::PLUGIN_NAME . '-ip2location-path',
57
- empty( $settings['IP2Location']['ipv4_path'] ) ?
58
  $this->get_db_dir() . IP_GEO_BLOCK_IP2LOC_IPV4_DAT :
59
  $settings['IP2Location']['ipv4_path']
60
  );
@@ -62,7 +62,7 @@ class IP_Geo_Block_API_IP2Location extends IP_Geo_Block_API {
62
 
63
  elseif ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
64
  $type = IP_GEO_BLOCK_API_TYPE_IPV6;
65
- $file = empty( $settings['IP2Location']['ipv6_path'] ) ?
66
  $this->get_db_dir() . IP_GEO_BLOCK_IP2LOC_IPV6_DAT :
67
  $settings['IP2Location']['ipv6_path'];
68
  }
@@ -146,17 +146,21 @@ class IP_Geo_Block_API_IP2Location extends IP_Geo_Block_API {
146
  }
147
 
148
  public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) {
 
 
 
149
  $db = $options[ $field ];
150
  $dir = $this->get_db_dir();
151
  $msg = __( 'Database file does not exist.', 'ip-geo-block' );
152
 
153
  // IPv4
154
- if ( $db['ipv4_path'] )
155
- $path = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-ip2location-path', $db['ipv4_path'] );
156
- else
157
- $path = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-ip2location-path', $dir . IP_GEO_BLOCK_IP2LOC_IPV4_DAT );
 
158
 
159
- if ( @file_exists( $path ) )
160
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv4_last'] ) );
161
  else
162
  $date = $msg;
@@ -172,19 +176,20 @@ class IP_Geo_Block_API_IP2Location extends IP_Geo_Block_API {
172
  'option' => $option_name,
173
  'field' => $field,
174
  'sub-field' => 'ipv4_path',
175
- 'value' => $path,
176
  'disabled' => TRUE,
177
  'after' => '<br /><p id="ip-geo-block-' . $field . '-ipv4" style="margin-left: 0.2em">' . $date . '</p>',
178
  )
179
  );
180
 
181
  // IPv6
182
- if ( $db['ipv6_path'] )
183
- $path = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-ip2location-path', $db['ipv6_path'] );
184
- else
185
- $path = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-ip2location-path', $dir . IP_GEO_BLOCK_IP2LOC_IPV6_DAT );
 
186
 
187
- if ( @file_exists( $path ) )
188
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv6_last'] ) );
189
  else
190
  $date = $msg;
@@ -200,7 +205,7 @@ class IP_Geo_Block_API_IP2Location extends IP_Geo_Block_API {
200
  'option' => $option_name,
201
  'field' => $field,
202
  'sub-field' => 'ipv6_path',
203
- 'value' => $path,
204
  'disabled' => TRUE,
205
  'after' => '<br /><p id="ip-geo-block-' . $field . '-ipv6" style="margin-left: 0.2em">' . $date . '</p>',
206
  )
2
  /**
3
  * IP Geo Block API class library for IP2Location
4
  *
5
+ * @version 1.1.14
6
  * @author tokkonopapa <tokkonopapa@yahoo.com>
7
  * @license GPL-3.0
8
  * @link https://www.ipgeoblock.com/
54
  $type = IP_GEO_BLOCK_API_TYPE_IPV4;
55
  $file = apply_filters(
56
  IP_Geo_Block::PLUGIN_NAME . '-ip2location-path',
57
+ empty( $settings['IP2Location']['ipv4_path'] ) ?
58
  $this->get_db_dir() . IP_GEO_BLOCK_IP2LOC_IPV4_DAT :
59
  $settings['IP2Location']['ipv4_path']
60
  );
62
 
63
  elseif ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
64
  $type = IP_GEO_BLOCK_API_TYPE_IPV6;
65
+ $file = empty( $settings['IP2Location']['ipv6_path'] ) ?
66
  $this->get_db_dir() . IP_GEO_BLOCK_IP2LOC_IPV6_DAT :
67
  $settings['IP2Location']['ipv6_path'];
68
  }
146
  }
147
 
148
  public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) {
149
+ require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
150
+ $fs = IP_Geo_Block_FS::init( __FILE__ . '(' . __FUNCTION__ . ')' );
151
+
152
  $db = $options[ $field ];
153
  $dir = $this->get_db_dir();
154
  $msg = __( 'Database file does not exist.', 'ip-geo-block' );
155
 
156
  // IPv4
157
+ if ( $dir !== dirname( $db['ipv4_path'] ) . '/' )
158
+ $db['ipv4_path'] = $dir . IP_GEO_BLOCK_IP2LOC_IPV4_DAT;
159
+
160
+ // filter database file
161
+ $db['ipv4_path'] = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-ip2location-path', $db['ipv4_path'] );
162
 
163
+ if ( $fs->exists( $db['ipv4_path'] ) )
164
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv4_last'] ) );
165
  else
166
  $date = $msg;
176
  'option' => $option_name,
177
  'field' => $field,
178
  'sub-field' => 'ipv4_path',
179
+ 'value' => $db['ipv4_path'],
180
  'disabled' => TRUE,
181
  'after' => '<br /><p id="ip-geo-block-' . $field . '-ipv4" style="margin-left: 0.2em">' . $date . '</p>',
182
  )
183
  );
184
 
185
  // IPv6
186
+ if ( $dir !== dirname( $db['ipv6_path'] ) . '/' )
187
+ $db['ipv6_path'] = $dir . IP_GEO_BLOCK_IP2LOC_IPV6_DAT;
188
+
189
+ // filter database file
190
+ $db['ipv6_path'] = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-ip2location-path-ipv6', $db['ipv6_path'] );
191
 
192
+ if ( $fs->exists( $db['ipv6_path'] ) )
193
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv6_last'] ) );
194
  else
195
  $date = $msg;
205
  'option' => $option_name,
206
  'field' => $field,
207
  'sub-field' => 'ipv6_path',
208
+ 'value' => $db['ipv6_path'],
209
  'disabled' => TRUE,
210
  'after' => '<br /><p id="ip-geo-block-' . $field . '-ipv6" style="margin-left: 0.2em">' . $date . '</p>',
211
  )
wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * IP Geo Block API class library for Maxmind
4
  *
5
- * @version 1.1.13
6
  * @author tokkonopapa <tokkonopapa@yahoo.com>
7
  * @license GPL-3.0
8
  * @link https://www.ipgeoblock.com/
@@ -41,10 +41,11 @@ class IP_Geo_Block_API_Geolite2 extends IP_Geo_Block_API {
41
 
42
  private function location_city( $record ) {
43
  return array(
44
- 'countryCode' => $record->isoCode,
45
- 'cityName' => $record->city,
46
- 'latitude' => $record->latitude,
47
- 'longitude' => $record->longitude,
 
48
  );
49
  }
50
 
@@ -62,17 +63,26 @@ class IP_Geo_Block_API_Geolite2 extends IP_Geo_Block_API {
62
  $settings = IP_Geo_Block::get_option();
63
 
64
  if ( empty( $args['ASN'] ) ) {
65
- $file = ! empty( $settings['Maxmind']['ip_path'] ) ? $settings['Maxmind']['ip_path'] : $this->get_db_dir() . IP_GEO_BLOCK_GEOLITE2_DB_IP;
 
 
 
 
 
 
66
  try {
67
  $reader = new GeoIp2\Database\Reader( $file );
68
- $res = $this->location_country( $reader->country( $ip ) );
 
 
 
69
  } catch ( Exception $e ) {
70
  $res = array( 'countryCode' => NULL );
71
  }
72
  }
73
 
74
  else {
75
- $file = ! empty( $settings['Maxmind']['asn_path'] ) ? $settings['Maxmind']['asn_path'] : $this->get_db_dir() . IP_GEO_BLOCK_GEOLITE2_DB_ASN;
76
  try {
77
  $reader = new GeoIp2\Database\Reader( $file );
78
  $res = $this->location_asnumber( $reader->asn( $ip ) );
@@ -86,7 +96,7 @@ class IP_Geo_Block_API_Geolite2 extends IP_Geo_Block_API {
86
 
87
  private function get_db_dir() {
88
  return IP_Geo_Block_Util::slashit( apply_filters(
89
- IP_Geo_Block::PLUGIN_NAME . '-maxmind-dir', dirname( __FILE__ ) . '/GeoLite2'
90
  ) );
91
  }
92
 
@@ -97,9 +107,12 @@ class IP_Geo_Block_API_Geolite2 extends IP_Geo_Block_API {
97
  if ( $dir !== dirname( $db['ip_path'] ) . '/' )
98
  $db['ip_path'] = $dir . IP_GEO_BLOCK_GEOLITE2_DB_IP;
99
 
 
 
 
100
  $res['ip'] = IP_Geo_Block_Util::download_zip(
101
  apply_filters(
102
- IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-ip',
103
  IP_GEO_BLOCK_GEOLITE2_ZIP_IP
104
  ),
105
  $args + array( 'method' => 'GET' ),
@@ -118,7 +131,7 @@ if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] ) ) :
118
 
119
  $res['asn'] = IP_Geo_Block_Util::download_zip(
120
  apply_filters(
121
- IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-asn',
122
  IP_GEO_BLOCK_GEOLITE2_ZIP_ASN
123
  ),
124
  $args + array( 'method' => 'GET' ),
@@ -139,17 +152,21 @@ endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] )
139
  }
140
 
141
  public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) {
 
 
 
142
  $db = $options[ $field ];
143
  $dir = $this->get_db_dir();
144
  $msg = __( 'Database file does not exist.', 'ip-geo-block' );
145
 
146
- // IPv4 and IPv6
147
- if ( $db['ip_path'] )
148
- $path = $db['ip_path'];
149
- else
150
- $path = $dir . IP_GEO_BLOCK_GEOLITE2_DB_IP;
 
151
 
152
- if ( @file_exists( $path ) )
153
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ip_last'] ) );
154
  else
155
  $date = $msg;
@@ -165,7 +182,7 @@ endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] )
165
  'option' => $option_name,
166
  'field' => $field,
167
  'sub-field' => 'ip_path',
168
- 'value' => $path,
169
  'disabled' => TRUE,
170
  'after' => '<br /><p id="ip-geo-block-' . $field . '-ip" style="margin-left: 0.2em">' . $date . '</p>',
171
  )
@@ -174,12 +191,10 @@ endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] )
174
  if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] ) ) :
175
 
176
  // ASN for IPv4 and IPv6
177
- if ( $db['asn_path'] )
178
- $path = $db['asn_path'];
179
- else
180
- $path = $dir . IP_GEO_BLOCK_GEOLITE2_DB_ASN;
181
 
182
- if ( @file_exists( $path ) )
183
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn_last'] ) );
184
  else
185
  $date = $msg;
@@ -195,7 +210,7 @@ if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] ) ) :
195
  'option' => $option_name,
196
  'field' => $field,
197
  'sub-field' => 'asn_path',
198
- 'value' => $path,
199
  'disabled' => TRUE,
200
  'after' => '<br /><p id="ip-geo-block-' . $field . '-asn" style="margin-left: 0.2em">' . $date . '</p>',
201
  )
2
  /**
3
  * IP Geo Block API class library for Maxmind
4
  *
5
+ * @version 1.1.14
6
  * @author tokkonopapa <tokkonopapa@yahoo.com>
7
  * @license GPL-3.0
8
  * @link https://www.ipgeoblock.com/
41
 
42
  private function location_city( $record ) {
43
  return array(
44
+ 'countryCode' => $record->country->isoCode,
45
+ 'countryName' => $record->country->names['en'],
46
+ 'cityName' => $record->city->names['en'],
47
+ 'latitude' => $record->location->latitude,
48
+ 'longitude' => $record->location->longitude,
49
  );
50
  }
51
 
63
  $settings = IP_Geo_Block::get_option();
64
 
65
  if ( empty( $args['ASN'] ) ) {
66
+ $file = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-geolite2-path',
67
+ ( ! empty( $settings['Geolite2']['ip_path'] ) ?
68
+ $settings['Geolite2']['ip_path'] :
69
+ $this->get_db_dir() . IP_GEO_BLOCK_GEOLITE2_DB_IP
70
+ )
71
+ );
72
+
73
  try {
74
  $reader = new GeoIp2\Database\Reader( $file );
75
+ if ( 'GeoLite2-Country' === $reader->metadata()->databaseType )
76
+ $res = $this->location_country( $reader->country( $ip ) );
77
+ else
78
+ $res = $this->location_city( $reader->city( $ip ) );
79
  } catch ( Exception $e ) {
80
  $res = array( 'countryCode' => NULL );
81
  }
82
  }
83
 
84
  else {
85
+ $file = ! empty( $settings['Geolite2']['asn_path'] ) ? $settings['Geolite2']['asn_path'] : $this->get_db_dir() . IP_GEO_BLOCK_GEOLITE2_DB_ASN;
86
  try {
87
  $reader = new GeoIp2\Database\Reader( $file );
88
  $res = $this->location_asnumber( $reader->asn( $ip ) );
96
 
97
  private function get_db_dir() {
98
  return IP_Geo_Block_Util::slashit( apply_filters(
99
+ IP_Geo_Block::PLUGIN_NAME . '-geolite2-dir', dirname( __FILE__ ) . '/GeoLite2'
100
  ) );
101
  }
102
 
107
  if ( $dir !== dirname( $db['ip_path'] ) . '/' )
108
  $db['ip_path'] = $dir . IP_GEO_BLOCK_GEOLITE2_DB_IP;
109
 
110
+ // filter database file
111
+ $db['ip_path'] = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-geolite2-path', $db['ip_path'] );
112
+
113
  $res['ip'] = IP_Geo_Block_Util::download_zip(
114
  apply_filters(
115
+ IP_Geo_Block::PLUGIN_NAME . '-geolite2-zip-ip',
116
  IP_GEO_BLOCK_GEOLITE2_ZIP_IP
117
  ),
118
  $args + array( 'method' => 'GET' ),
131
 
132
  $res['asn'] = IP_Geo_Block_Util::download_zip(
133
  apply_filters(
134
+ IP_Geo_Block::PLUGIN_NAME . '-geolite2-zip-asn',
135
  IP_GEO_BLOCK_GEOLITE2_ZIP_ASN
136
  ),
137
  $args + array( 'method' => 'GET' ),
152
  }
153
 
154
  public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) {
155
+ require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
156
+ $fs = IP_Geo_Block_FS::init( __FILE__ . '(' . __FUNCTION__ . ')' );
157
+
158
  $db = $options[ $field ];
159
  $dir = $this->get_db_dir();
160
  $msg = __( 'Database file does not exist.', 'ip-geo-block' );
161
 
162
+ // IPv4 & IPv6
163
+ if ( $dir !== dirname( $db['ip_path'] ) . '/' )
164
+ $db['ip_path'] = $dir . IP_GEO_BLOCK_GEOLITE2_DB_IP;
165
+
166
+ // filter database file
167
+ $db['ip_path'] = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-geolite2-path', $db['ip_path'] );
168
 
169
+ if ( $fs->exists( $db['ip_path'] ) )
170
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ip_last'] ) );
171
  else
172
  $date = $msg;
182
  'option' => $option_name,
183
  'field' => $field,
184
  'sub-field' => 'ip_path',
185
+ 'value' => $db['ip_path'],
186
  'disabled' => TRUE,
187
  'after' => '<br /><p id="ip-geo-block-' . $field . '-ip" style="margin-left: 0.2em">' . $date . '</p>',
188
  )
191
  if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] ) ) :
192
 
193
  // ASN for IPv4 and IPv6
194
+ if ( $dir !== dirname( $db['asn_path'] ) . '/' )
195
+ $db['asn_path'] = $dir . IP_GEO_BLOCK_GEOLITE2_DB_ASN;
 
 
196
 
197
+ if ( $fs->exists( $db['asn_path'] ) )
198
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn_last'] ) );
199
  else
200
  $date = $msg;
210
  'option' => $option_name,
211
  'field' => $field,
212
  'sub-field' => 'asn_path',
213
+ 'value' => $db['asn_path'],
214
  'disabled' => TRUE,
215
  'after' => '<br /><p id="ip-geo-block-' . $field . '-asn" style="margin-left: 0.2em">' . $date . '</p>',
216
  )
wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * IP Geo Block API class library for Maxmind
4
  *
5
- * @version 1.1.13
6
  * @author tokkonopapa <tokkonopapa@yahoo.com>
7
  * @license GPL-3.0
8
  * @link https://www.ipgeoblock.com/
@@ -125,15 +125,16 @@ class IP_Geo_Block_API_Maxmind extends IP_Geo_Block_API {
125
  ) );
126
  }
127
 
 
 
 
 
 
 
 
128
  public function download( &$db, $args ) {
129
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
130
- $fs = IP_Geo_Block_FS::init( __FILE__ );
131
-
132
- // GeoLite Legacy databases would be stopped to update and download
133
- $available = array(
134
- 'update' => $_SERVER['REQUEST_TIME'] < strtotime( '2018-04-00' ), // April 1, 2018
135
- 'download' => $_SERVER['REQUEST_TIME'] < strtotime( '2019-01-02' ), // January 2, 2019
136
- );
137
 
138
  $dir = $this->get_db_dir();
139
 
@@ -141,7 +142,7 @@ class IP_Geo_Block_API_Maxmind extends IP_Geo_Block_API {
141
  if ( $dir !== dirname( $db['ipv4_path'] ) . '/' )
142
  $db['ipv4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV4_DAT;
143
 
144
- if ( $fs->exists( $db['ipv4_path'] ) ? $available['update'] : $available['download'] ) {
145
  $res['ipv4'] = IP_Geo_Block_Util::download_zip(
146
  apply_filters(
147
  IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-ipv4',
@@ -151,13 +152,18 @@ class IP_Geo_Block_API_Maxmind extends IP_Geo_Block_API {
151
  $db['ipv4_path'],
152
  $db['ipv4_last']
153
  );
 
 
 
 
 
154
  }
155
 
156
  // IPv6
157
  if ( $dir !== dirname( $db['ipv6_path'] ) . '/' )
158
  $db['ipv6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV6_DAT;
159
 
160
- if ( $fs->exists( $db['ipv6_path'] ) ? $available['update'] : $available['download'] ) {
161
  $res['ipv6'] = IP_Geo_Block_Util::download_zip(
162
  apply_filters(
163
  IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-ipv6',
@@ -167,6 +173,11 @@ class IP_Geo_Block_API_Maxmind extends IP_Geo_Block_API {
167
  $db['ipv6_path'],
168
  $db['ipv6_last']
169
  );
 
 
 
 
 
170
  }
171
 
172
  ! empty( $res['ipv4']['filename'] ) and $db['ipv4_path'] = $res['ipv4']['filename'];
@@ -180,7 +191,7 @@ if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) ) :
180
  if ( $dir !== dirname( $db['asn4_path'] ) . '/' )
181
  $db['asn4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN4_DAT;
182
 
183
- if ( $fs->exists( $db['asn4_path'] ) ? $available['update'] : $available['download'] ) {
184
  $res['asn4'] = IP_Geo_Block_Util::download_zip(
185
  apply_filters(
186
  IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-asn4',
@@ -190,13 +201,18 @@ if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) ) :
190
  $db['asn4_path'],
191
  $db['asn4_last']
192
  );
 
 
 
 
 
193
  }
194
 
195
  // ASN for IPv6
196
  if ( $dir !== dirname( $db['asn6_path'] ) . '/' )
197
  $db['asn6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN6_DAT;
198
 
199
- if ( $fs->exists( $db['asn6_path'] ) ? $available['update'] : $available['download'] ) {
200
  $res['asn6'] = IP_Geo_Block_Util::download_zip(
201
  apply_filters(
202
  IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-asn6',
@@ -206,6 +222,11 @@ if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) ) :
206
  $db['asn6_path'],
207
  $db['asn6_last']
208
  );
 
 
 
 
 
209
  }
210
 
211
  ! empty( $res['asn4']['filename'] ) and $db['asn4_path'] = $res['asn4']['filename'];
@@ -223,123 +244,126 @@ endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] )
223
  }
224
 
225
  public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) {
 
 
 
226
  $db = $options[ $field ];
227
  $dir = $this->get_db_dir();
228
  $msg = __( 'Database file does not exist.', 'ip-geo-block' );
229
 
230
  // IPv4
231
- if ( $db['ipv4_path'] )
232
- $path = $db['ipv4_path'];
233
- else
234
- $path = $dir . IP_GEO_BLOCK_MAXMIND_IPV4_DAT;
235
 
236
- if ( @file_exists( $path ) )
237
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv4_last'] ) );
238
  else
239
  $date = $msg;
240
 
241
- add_settings_field(
242
- $option_name . $field . '_ipv4',
243
- "$field $str_path<br />(<a rel='noreferrer' href='" . IP_GEO_BLOCK_MAXMIND_DOWNLOAD . "' title='" . IP_GEO_BLOCK_MAXMIND_IPV4_ZIP . "'>IPv4</a>)",
244
- $callback,
245
- $option_slug,
246
- $section,
247
- array(
248
- 'type' => 'text',
249
- 'option' => $option_name,
250
- 'field' => $field,
251
- 'sub-field' => 'ipv4_path',
252
- 'value' => $path,
253
- 'disabled' => TRUE,
254
- 'after' => '<br /><p id="ip-geo-block-' . $field . '-ipv4" style="margin-left: 0.2em">' . $date . '</p>',
255
- )
256
- );
 
 
257
 
258
  // IPv6
259
- if ( $db['ipv6_path'] )
260
- $path = $db['ipv6_path'];
261
- else
262
- $path = $dir . IP_GEO_BLOCK_MAXMIND_IPV6_DAT;
263
 
264
- if ( @file_exists( $path ) )
265
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv6_last'] ) );
266
  else
267
  $date = $msg;
268
 
269
- add_settings_field(
270
- $option_name . $field . '_ipv6',
271
- "$field $str_path<br />(<a rel='noreferrer' href='" . IP_GEO_BLOCK_MAXMIND_DOWNLOAD . "' title='" . IP_GEO_BLOCK_MAXMIND_IPV6_ZIP . "'>IPv6</a>)",
272
- $callback,
273
- $option_slug,
274
- $section,
275
- array(
276
- 'type' => 'text',
277
- 'option' => $option_name,
278
- 'field' => $field,
279
- 'sub-field' => 'ipv6_path',
280
- 'value' => $path,
281
- 'disabled' => TRUE,
282
- 'after' => '<br /><p id="ip-geo-block-' . $field . '-ipv6" style="margin-left: 0.2em">' . $date . '</p>',
283
- )
284
- );
 
 
285
 
286
  if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) ) :
287
 
288
  // ASN for IPv4
289
- if ( $db['asn4_path'] )
290
- $path = $db['asn4_path'];
291
- else
292
- $path = $dir . IP_GEO_BLOCK_MAXMIND_ASN4_DAT;
293
 
294
- if ( @file_exists( $path ) )
295
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn4_last'] ) );
296
  else
297
  $date = $msg;
298
 
299
- add_settings_field(
300
- $option_name . $field . '_asn4',
301
- "$field $str_path<br />(<a rel='noreferrer' href='" . IP_GEO_BLOCK_MAXMIND_DOWNLOAD . "' title='" . IP_GEO_BLOCK_MAXMIND_ASN4_ZIP . "'>ASN for IPv4</a>)",
302
- $callback,
303
- $option_slug,
304
- $section,
305
- array(
306
- 'type' => 'text',
307
- 'option' => $option_name,
308
- 'field' => $field,
309
- 'sub-field' => 'asn4_path',
310
- 'value' => $path,
311
- 'disabled' => TRUE,
312
- 'after' => '<br /><p id="ip-geo-block-' . $field . '-asn4" style="margin-left: 0.2em">' . $date . '</p>',
313
- )
314
- );
 
 
315
 
316
  // ASN for IPv6
317
- if ( $db['asn6_path'] )
318
- $path = $db['asn6_path'];
319
- else
320
- $path = $dir . IP_GEO_BLOCK_MAXMIND_ASN6_DAT;
321
 
322
- if ( @file_exists( $path ) )
323
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn6_last'] ) );
324
  else
325
  $date = $msg;
326
 
327
- add_settings_field(
328
- $option_name . $field . '_asn6',
329
- "$field $str_path<br />(<a rel='noreferrer' href='" . IP_GEO_BLOCK_MAXMIND_DOWNLOAD . "' title='" . IP_GEO_BLOCK_MAXMIND_ASN6_ZIP . "'>ASN for IPv6</a>)",
330
- $callback,
331
- $option_slug,
332
- $section,
333
- array(
334
- 'type' => 'text',
335
- 'option' => $option_name,
336
- 'field' => $field,
337
- 'sub-field' => 'asn6_path',
338
- 'value' => $path,
339
- 'disabled' => TRUE,
340
- 'after' => '<br /><p id="ip-geo-block-' . $field . '-asn6" style="margin-left: 0.2em">' . $date . '</p>',
341
- )
342
- );
 
 
343
 
344
  endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] )
345
 
2
  /**
3
  * IP Geo Block API class library for Maxmind
4
  *
5
+ * @version 1.1.14
6
  * @author tokkonopapa <tokkonopapa@yahoo.com>
7
  * @license GPL-3.0
8
  * @link https://www.ipgeoblock.com/
125
  ) );
126
  }
127
 
128
+ private function available( $exists ) {
129
+ // GeoLite Legacy databases would be stopped to update and download
130
+ return $exists ?
131
+ $_SERVER['REQUEST_TIME'] < strtotime( '2018-04-01' ): // Update until April 1, 2018
132
+ $_SERVER['REQUEST_TIME'] < strtotime( '2019-01-02' ); // Available until January 2, 2019
133
+ }
134
+
135
  public function download( &$db, $args ) {
136
  require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
137
+ $fs = IP_Geo_Block_FS::init( __FILE__ . '(' . __FUNCTION__ . ')' );
 
 
 
 
 
 
138
 
139
  $dir = $this->get_db_dir();
140
 
142
  if ( $dir !== dirname( $db['ipv4_path'] ) . '/' )
143
  $db['ipv4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV4_DAT;
144
 
145
+ if ( $this->available( $fs->exists( $db['ipv4_path'] ) ) ) {
146
  $res['ipv4'] = IP_Geo_Block_Util::download_zip(
147
  apply_filters(
148
  IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-ipv4',
152
  $db['ipv4_path'],
153
  $db['ipv4_last']
154
  );
155
+ } else {
156
+ $res['ipv4'] = array(
157
+ 'code' => 503,
158
+ 'message' => __( 'Update service has already stopped.', 'ip-geo-block' )
159
+ );
160
  }
161
 
162
  // IPv6
163
  if ( $dir !== dirname( $db['ipv6_path'] ) . '/' )
164
  $db['ipv6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV6_DAT;
165
 
166
+ if ( $this->available( $fs->exists( $db['ipv6_path'] ) ) ) {
167
  $res['ipv6'] = IP_Geo_Block_Util::download_zip(
168
  apply_filters(
169
  IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-ipv6',
173
  $db['ipv6_path'],
174
  $db['ipv6_last']
175
  );
176
+ } else {
177
+ $res['ipv6'] = array(
178
+ 'code' => 503,
179
+ 'message' => __( 'Update service has already stopped.', 'ip-geo-block' )
180
+ );
181
  }
182
 
183
  ! empty( $res['ipv4']['filename'] ) and $db['ipv4_path'] = $res['ipv4']['filename'];
191
  if ( $dir !== dirname( $db['asn4_path'] ) . '/' )
192
  $db['asn4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN4_DAT;
193
 
194
+ if ( $this->available( $fs->exists( $db['asn4_path'] ) ) ) {
195
  $res['asn4'] = IP_Geo_Block_Util::download_zip(
196
  apply_filters(
197
  IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-asn4',
201
  $db['asn4_path'],
202
  $db['asn4_last']
203
  );
204
+ } else {
205
+ $res['asn4'] = array(
206
+ 'code' => 503,
207
+ 'message' => __( 'Update service has already stopped.', 'ip-geo-block' )
208
+ );
209
  }
210
 
211
  // ASN for IPv6
212
  if ( $dir !== dirname( $db['asn6_path'] ) . '/' )
213
  $db['asn6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN6_DAT;
214
 
215
+ if ( $this->available( $fs->exists( $db['asn6_path'] ) ) ) {
216
  $res['asn6'] = IP_Geo_Block_Util::download_zip(
217
  apply_filters(
218
  IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-asn6',
222
  $db['asn6_path'],
223
  $db['asn6_last']
224
  );
225
+ } else {
226
+ $res['asn6'] = array(
227
+ 'code' => 503,
228
+ 'message' => __( 'Update service has already stopped.', 'ip-geo-block' )
229
+ );
230
  }
231
 
232
  ! empty( $res['asn4']['filename'] ) and $db['asn4_path'] = $res['asn4']['filename'];
244
  }
245
 
246
  public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) {
247
+ require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php';
248
+ $fs = IP_Geo_Block_FS::init( __FILE__ . '(' . __FUNCTION__ . ')' );
249
+
250
  $db = $options[ $field ];
251
  $dir = $this->get_db_dir();
252
  $msg = __( 'Database file does not exist.', 'ip-geo-block' );
253
 
254
  // IPv4
255
+ if ( $dir !== dirname( $db['ipv4_path'] ) . '/' )
256
+ $db['ipv4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV4_DAT;
 
 
257
 
258
+ if ( $exists = $fs->exists( $db['ipv4_path'] ) )
259
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv4_last'] ) );
260
  else
261
  $date = $msg;
262
 
263
+ if ( $exists || $this->available( $exists ) ) {
264
+ add_settings_field(
265
+ $option_name . $field . '_ipv4',
266
+ "$field $str_path<br />(<a rel='noreferrer' href='" . IP_GEO_BLOCK_MAXMIND_DOWNLOAD . "' title='" . IP_GEO_BLOCK_MAXMIND_IPV4_ZIP . "'>IPv4</a>)",
267
+ $callback,
268
+ $option_slug,
269
+ $section,
270
+ array(
271
+ 'type' => 'text',
272
+ 'option' => $option_name,
273
+ 'field' => $field,
274
+ 'sub-field' => 'ipv4_path',
275
+ 'value' => $db['ipv4_path'],
276
+ 'disabled' => TRUE,
277
+ 'after' => '<br /><p id="ip-geo-block-' . $field . '-ipv4" style="margin-left: 0.2em">' . $date . '</p>',
278
+ )
279
+ );
280
+ }
281
 
282
  // IPv6
283
+ if ( $dir !== dirname( $db['ipv6_path'] ) . '/' )
284
+ $db['ipv6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV6_DAT;
 
 
285
 
286
+ if ( $exists = $fs->exists( $db['ipv6_path'] ) )
287
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv6_last'] ) );
288
  else
289
  $date = $msg;
290
 
291
+ if ( $exists || $this->available( $exists ) ) {
292
+ add_settings_field(
293
+ $option_name . $field . '_ipv6',
294
+ "$field $str_path<br />(<a rel='noreferrer' href='" . IP_GEO_BLOCK_MAXMIND_DOWNLOAD . "' title='" . IP_GEO_BLOCK_MAXMIND_IPV6_ZIP . "'>IPv6</a>)",
295
+ $callback,
296
+ $option_slug,
297
+ $section,
298
+ array(
299
+ 'type' => 'text',
300
+ 'option' => $option_name,
301
+ 'field' => $field,
302
+ 'sub-field' => 'ipv6_path',
303
+ 'value' => $db['ipv6_path'],
304
+ 'disabled' => TRUE,
305
+ 'after' => '<br /><p id="ip-geo-block-' . $field . '-ipv6" style="margin-left: 0.2em">' . $date . '</p>',
306
+ )
307
+ );
308
+ }
309
 
310
  if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) ) :
311
 
312
  // ASN for IPv4
313
+ if ( $dir !== dirname( $db['asn4_path'] ) . '/' )
314
+ $db['asn4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN4_DAT;
 
 
315
 
316
+ if ( $exists = $fs->exists( $db['asn4_path'] ) )
317
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn4_last'] ) );
318
  else
319
  $date = $msg;
320
 
321
+ if ( $exists || $this->available( $exists ) ) {
322
+ add_settings_field(
323
+ $option_name . $field . '_asn4',
324
+ "$field $str_path<br />(<a rel='noreferrer' href='" . IP_GEO_BLOCK_MAXMIND_DOWNLOAD . "' title='" . IP_GEO_BLOCK_MAXMIND_ASN4_ZIP . "'>ASN for IPv4</a>)",
325
+ $callback,
326
+ $option_slug,
327
+ $section,
328
+ array(
329
+ 'type' => 'text',
330
+ 'option' => $option_name,
331
+ 'field' => $field,
332
+ 'sub-field' => 'asn4_path',
333
+ 'value' => $db['asn4_path'],
334
+ 'disabled' => TRUE,
335
+ 'after' => '<br /><p id="ip-geo-block-' . $field . '-asn4" style="margin-left: 0.2em">' . $date . '</p>',
336
+ )
337
+ );
338
+ }
339
 
340
  // ASN for IPv6
341
+ if ( $dir !== dirname( $db['asn6_path'] ) . '/' )
342
+ $db['asn6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN6_DAT;
 
 
343
 
344
+ if ( $exists = $fs->exists( $db['asn6_path'] ) )
345
  $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn6_last'] ) );
346
  else
347
  $date = $msg;
348
 
349
+ if ( $exists || $this->available( $exists ) ) {
350
+ add_settings_field(
351
+ $option_name . $field . '_asn6',
352
+ "$field $str_path<br />(<a rel='noreferrer' href='" . IP_GEO_BLOCK_MAXMIND_DOWNLOAD . "' title='" . IP_GEO_BLOCK_MAXMIND_ASN6_ZIP . "'>ASN for IPv6</a>)",
353
+ $callback,
354
+ $option_slug,
355
+ $section,
356
+ array(
357
+ 'type' => 'text',
358
+ 'option' => $option_name,
359
+ 'field' => $field,
360
+ 'sub-field' => 'asn6_path',
361
+ 'value' => $db['asn6_path'],
362
+ 'disabled' => TRUE,
363
+ 'after' => '<br /><p id="ip-geo-block-' . $field . '-asn6" style="margin-left: 0.2em">' . $date . '</p>',
364
+ )
365
+ );
366
+ }
367
 
368
  endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] )
369
 
wp-content/ip-geo-api/maxmind/class-maxmind.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * IP Geo Block API class library for Maxmind
4
  *
5
- * @version 1.1.13
6
  * @author tokkonopapa <tokkonopapa@yahoo.com>
7
  * @license GPL-3.0
8
  * @link https://www.ipgeoblock.com/
@@ -10,10 +10,16 @@
10
  */
11
  class_exists( 'IP_Geo_Block_API', FALSE ) or die;
12
 
13
- if ( PHP_VERSION_ID >= 50400 ): // @since PHP 5.2.7 (WordPress 3.7 requires PHP 5.2.4)
 
14
 
15
- require_once dirname( __FILE__ ) . '/class-maxmind-geolite2.php';
 
 
16
 
17
- endif;
 
 
 
18
 
19
- require_once dirname( __FILE__ ) . '/class-maxmind-legacy.php';
2
  /**
3
  * IP Geo Block API class library for Maxmind
4
  *
5
+ * @version 1.1.14
6
  * @author tokkonopapa <tokkonopapa@yahoo.com>
7
  * @license GPL-3.0
8
  * @link https://www.ipgeoblock.com/
10
  */
11
  class_exists( 'IP_Geo_Block_API', FALSE ) or die;
12
 
13
+ function ip_geo_block_setup_maxmind() {
14
+ $path = dirname( __FILE__ );
15
 
16
+ // GeoLite2 requires PHP 5.4+ (WordPress 3.7 requires PHP 5.2.4)
17
+ if ( version_compare( PHP_VERSION, '5.4' ) >= 0 )
18
+ require_once $path . '/class-maxmind-geolite2.php';
19
 
20
+ // GeoLite Legacy
21
+ if ( file_exists( $path . '/class-maxmind-legacy.php' ) )
22
+ require_once $path . '/class-maxmind-legacy.php';
23
+ }
24
 
25
+ ip_geo_block_setup_maxmind();