Spam protection, AntiSpam, FireWall by CleanTalk - Version 5.154

Version Description

Mar 17 2021 = * New: Settings Templates functionality implemented. * New: SFW. Anti-flood protection uses UA lists for filtration. * Fix: Forms. Getting check_js delay removed. * Fix: Forms. Rotation check_js fixed. * Fix: Integration. Newspaper-theme login form protection skipped. * Fix: Integration. Newspaper-theme reset password form protection skipped. * Fix: Forms. Gravity Forms paypal addon processing skipped. * Fix: Exclusion for wpDiscuz - Online Users Addon. * Fix: Remote Calls. Wrapper http_request_rc_to_host() don't get an array * Fix: JS. Modal window fixed. * Fix: JS. Show AJAX result fixed. * Fix: Skip. Save abandoned cart checking skip. * Fix: Skip. SUMODISCOUNT discout request skip. * Fix: Skip. WP eMember login form skip. * Fix: SFW. Do not cache constants added. * Fix: SFW. AC/AF logging fixed.

Download this release

Release Info

Developer Safronik
Plugin Icon 128x128 Spam protection, AntiSpam, FireWall by CleanTalk
Version 5.154
Comparing to
See all releases

Code changes from version 5.153.7 to 5.154

changelog.txt CHANGED
@@ -1,2802 +1,2802 @@
1
- == Changelog ==
2
-
3
- = 5.132.3 December 19 2019 =
4
- * Fix: The disable comments functionality.
5
-
6
- = 5.132.2 December 17 2019 =
7
- * Fix: The disable comments functionality.
8
-
9
- = 5.132.1 December 17 2019 =
10
- * Fix: Fatal PHP error.
11
-
12
- = 5.132 December 17 2019 =
13
- * Fix: PHP 7.4 compability
14
- * New: Settings and description for "disable comments" functionality.
15
- * Mod: WooCommerce settings moved to separate block.
16
- * Minor fixes.
17
- * Spam protection improved.
18
-
19
- = 5.131 December 6 2019 =
20
- * Fix: WooCommerce registration.
21
- * Fix: Auto update on Wordperss Multisite.
22
- * Fix: URLs exceptions validation.
23
- * New: Secuirty improved.
24
- * Spam protection is improved.
25
- * Minor fixes ond improvments.
26
-
27
- = 5.130.1 November 20 2019 =
28
- * Fix: Plugin autoupdate issues.
29
- * FIx: Woocommerce checking.
30
- * Fix: Correct IP detection.
31
- * Fix: CSV export not working after update.
32
- * Fix: QuickForms duplicates issues.
33
-
34
- = 5.130 November 14 2019 =
35
- * Fix: JetPack contact form JS check.
36
- * FIx: Iphorm AJAX form.
37
- * Fix: Paid Memberships Pro fix.
38
- * Fix: Divi theme contact form fix.
39
- * Integration: Paid Memberships Pro.
40
- * Integration: Elementor Pro page builder forms.
41
- * Improved: Compatibility with different server.
42
-
43
- = 5.129.1 November 5 2019 =
44
- * Fix: WooCommerce order detecting.
45
-
46
- = 5.129 October 30 2019 =
47
- * Upd: Localize updated.
48
- * Fix: Direct $_SERVER access replaced.
49
- * Integration: The 7 theme contact form.
50
- * Fix: Minor improvements and bug fixes.
51
- * Mod: Putting site in maintenance mode during plugin update.
52
-
53
- = 5.128.1 October 23 2019 =
54
- * Fix: Fatal error when using buffer output.
55
- * Fix: Translate domain for errors.
56
- * Code: Fix spelling in function name.
57
- * Fix: JS disabled error.
58
- * Upd: Comment edit screen updated.
59
- * Fix: Cleantalk\Arr::search() fixed.
60
-
61
- = 5.128 October 17 2019 =
62
- * Mod: Users check - functionality updated.
63
- * Fix: Users check - dates format updated.
64
- * Mod: Comments check - functionality updated.
65
- * Fix: Comments check - dates format updated.
66
- * Fix: Fields exclusion fixed.
67
- * Fix: Notice fixed.
68
- * Fix: Cleantalk/Antispam/API.
69
- * Fix: Minor improvements and bug fixes.
70
-
71
- = 5.127.4 October 13 2019 =
72
- * Mod: Automatically decrease amount of checked users by one request if an error occurs.
73
- * Fix: Security issue.
74
- * Fix: Static JS key.
75
-
76
- = 5.127.3 October 8 2019 =
77
- * Fix: Errors during registration.
78
-
79
- = 5.127.2 October 8 2019 =
80
- * Integration: SeedProd Coming Soon Page Pro.
81
- * Fix: WooCommerce double reuqests.
82
- * Fix: Static JS key.
83
-
84
- = 5.127.1 October 7 2019 =
85
- * Fix: WPMS settings logic.
86
- * Using default database storage engine for tables.
87
-
88
- = 5.127 September 30 2019 =
89
- * Fix: Delete redirect notice on external forms
90
- * Fix: Storing spam for 15 days.
91
- * Fix: correct DiVi display message.
92
- * Integration: Ultimate Members.
93
- * Mod: Setting "Use static JS key" switched to "Auto" if it was "No". Default is "Auto".
94
- * Mod: Moving White Label option to main site settings.
95
- * New: Use static JS key if cache plugin detected.
96
- * New: Settings for URLs, fields, roles exclusions.
97
- * New: Regular Expressions support in URLs, fields exclusions.
98
- * New: Send validation errors on standard registration form.
99
- * Updater: Move exclusions from global variable to settings.
100
- * Deprecated: IP exclusions.
101
-
102
- = 5.126 September 9 2019 =
103
- * Spam protection improved!
104
- * Integration: Option wheel.
105
- * Mod: Improved Email detection.
106
- * Mod: Improved IP detection.
107
- * Fix: Too large database table with alternative sessions.
108
- * Fix: Exception for WooCommerce AJAX.
109
- * Fix: API key validation.
110
- * Minor fixes.
111
-
112
- = 5.125 August 26 2019 =
113
- * Fix: PHP Notices.
114
- * Fix: Auto update.
115
- * Fix: Displaying protection status for IP license.
116
- * Fix: prevent capturing buffer for XMLRPC requests (check_external functionality).
117
- * Fix: API key validating.
118
- * New: Complete deactivation setting.
119
-
120
- = 5.124.1 August 8 2019 =
121
- * Fix: Error on PHP 5.3.
122
-
123
- = 5.124 August 8 2019 =
124
- * Spam protection improved.
125
- * Fix: SpamFireWall local database counter on Multisite.
126
- * Fix: Caldera Forms integration.
127
- * Fix: Settings "Use AJAX for JS check" description.
128
- * Fix: Formidable integration.
129
- * New: External forms check now independed from JavaScript.
130
- * New: Setting Protect external - capture buffer.
131
- * New: QuForm integration.
132
-
133
- = 5.123 July 25 2019 =
134
- * Fix: Plenty of minor fixes.
135
- * Fix: wpDiscuz integration.
136
- * Fix: Integration with bbPress.
137
- * Fix: New comment email notification.
138
- * New: Follow-Up Emails integration.
139
- * Fix: Woocommerce integration.
140
- * Fix: Spelling.
141
-
142
- = 5.122 July 10 2019 =
143
- * Spam Protection improved.
144
- * Fix: Error while checking account status.
145
- * Fix: Conflict with Elementor Pro.
146
- * Fix: Integration with Ninja Forms.
147
- * Fix: Integration with Formidable.
148
- * New: Detecting mobile devices.
149
- * New: Integration for Easy Forms for Mailchimp.
150
-
151
- = 5.121 June 26 2019 =
152
- * Fix: Translation typos.
153
- * Fix: Woocommerce integration.
154
- * Fix: Catching admin in AJAX queries.
155
- * Mod: Session table (cleantalk_sessions) issue.
156
- * Mod: Spam protection improved.
157
- * Integration: Wilcity theme custom registration validation enabled
158
- * New: Option "Use static JS key".
159
-
160
- = 5.120.2 June 17 2019 =
161
- * Fix: WPForms integration.
162
- * Fix: Translation and spelling.
163
- * Fix: Minor PHP error
164
-
165
- = 5.120.1 June 6 2019 =
166
- * Mod: Description for Search form protection.
167
- * Fix: CSS and JS attachment.
168
- * Fix: Undefined index error.
169
-
170
- = 5.120 June 5 2019 =
171
- * Fix: bbPress false positives.
172
- * Fix: SpamFireWall check condition.
173
- * Fix: SpamFireWall block page.
174
- * Fix: Catch admin action via search form test.
175
- * Fix: Catch admin action (AJAX).
176
- * Mod: Using minified version of JS and CSS.
177
- * Mod: Date format in statistics.
178
-
179
- = 5.119.1 May 30 2019 =
180
- * Fix: Helper class error.
181
-
182
- = 5.119 May 30 2019 =
183
- * Fix: No more second request after registration.
184
- * Fix: Activation hook.
185
- * Fix: Alternative sessions. Clear table.
186
- * Fix: Stop capchuring AJAX requests in admin area.
187
- * Fix: Spelling.
188
- * Fix: Registration cookies set.
189
- * Mod: SFW exdtended die page when testing.
190
- * Mod: User-agent modified.
191
- * New: Test search queries for spam.
192
- * New: Gathering and output statistics.
193
-
194
- = 5.118.4 May 13 2019 =
195
- * Fix: SFW cookie. Set correct domain for subdomains.
196
- * Fix: SFW update.
197
- * Fix: IP detection.
198
- * Fix: Triggering AJAX check in backend.
199
- * Fix: Zero submit time on few forms.
200
-
201
- = 5.118.3 April 29 2019 =
202
- * Fix: Spam statistics in dashboard widget.
203
- * Fix: IP detection.
204
- * Fix: Double check AJAX integrated forms like Ninja Forms.
205
- * Fix: Use url exclusions for AJAX forms.
206
-
207
- = 5.118.2 April 25 2019 =
208
- * Mod: Spam filtration quality improved.
209
- * Mod: Store SFW cookie for 30 days.
210
- * Mod: Server IP added to connection report.
211
- * Fix: spam_stat is not defined.
212
-
213
- = 5.118.1 April 19 2019 =
214
- * Fix: Fatal error.
215
- * Mod: Spam protection improved on registrations.
216
-
217
- = 5.118 April 19 2019 =
218
- * Fix: Cookies on registration page.
219
- * Fix: Update fix.
220
- * Fix: Wordpress built-in API.
221
- * Fix: WooCommerce checkout form.
222
- * Fix: UpdraftPlus. Saving settings.
223
- * Fix: Convert Pro saving settings.
224
- * Fix: UTF-8 Converting.
225
- * Fix: GDPR notice.
226
- * Fix: cleantalk_sessions table size reduced.
227
- * Mod: Localization.
228
- * Mod: Performance improved.
229
- * Mod: SpamFierWall improvments.
230
- * Mod: IP detection improved.
231
- * Mod: JavaScript check rewised.
232
- * New: Setting "Use alternative mechanism for cookies".
233
-
234
- = 5.117.1 April 5 2019 =
235
- * Fix: GDPR notice.
236
- * Fix: noCacheJS localization.
237
- * Fix: Fatal error when updating.
238
-
239
- = 5.117 March 27 2019 =
240
- * New: Update logic runs on all pages.
241
- * New: Integration for Ajax Contact Forms plugin.
242
- * New: Notification for users groups about new comments.
243
- * New: SFW die page. Show browser and page creation time.
244
- * Fix: Huge bug in Cleantalk.php connected with servers changing.
245
- * Fix: Check AJAX requests for logged in users.
246
- * Fix: Deleting debug in JS.
247
- * Fix: Validating settings before saving.
248
-
249
- = 5.116.3 March 14 2019 =
250
- * Fix: "Headers already sent" error.
251
- * Fix: Images paths.
252
- * Fix: IP detection.
253
- * Fix: Skip lost password form check
254
- * Fix: Skip mobile requests (push settings)
255
- * Fix: PHP notice when detecting BuddyPress template.
256
-
257
- = 5.116.2 March 7 2019 =
258
- * Fix: Creating tables in MariaDB.
259
-
260
- = 5.116.1 March 6 2019 =
261
- * Fix: Creating tables in DB.
262
- * Fix: PHP Warning in spam statistics widget.
263
-
264
- = 5.116 March 6 2019 =
265
- * Spam filtration quality improved.
266
- * New: Storing visited URLs.
267
- * New: Check before validation Contact Form 7, Comments, Jetpack comments.
268
- * New: Get validation result for Contact Form 7, Comments, Jetpack comments.
269
- * Fix: ES add subscriber.
270
- * Fix: IP detection.
271
-
272
- = 5.115.2 February 27 2019 =
273
- * Fix: False positives spam detection in WP Forms and Contact Form 7.
274
-
275
- = 5.115.1 February 16 2019 =
276
- * Fix: SpamFireWall's false positives.
277
-
278
- = 5.115 February 14 2019 =
279
- * Fix: Http_only flag for backend cookies.
280
- * Fix: Spam filtration improved.
281
- * New: IP detection improved.
282
- * Fix: SpamFirewall update speeded up.
283
- * New: False positives with caching solutions decreased.
284
- * New: Opportunity to use Wordpress HTTP API to connect with Cloud.
285
-
286
- = 5.114 January 31 2019 =
287
- * New: Setting "Use Wordpress HTTP API" as alternative to CURL. Disabled by default.
288
- * Fix: Formidable: Adding small JS check when adding JS_key.
289
- * Mod: layout of settings page.
290
- * Mod: Banner logic altered.
291
-
292
- = 5.113.2 January 18 2019 =
293
- * Fix: "Settings" link returns to plugin page.
294
-
295
- = 5.113.1 January 17 2019 =
296
- * Fix: Conflict with CityTours theme.
297
- * Fix: Error for Wordpress lower 4.7.
298
- * Add: Spam protection: "Validate email for existence".
299
-
300
- = 5.113 January 16 2019 =
301
- * Fix: Fast and Simple Contact Form.
302
- * Fix: Settings layout.
303
- * Fix: Error with WooCommerce Quickview.
304
- * Fix: Bitrix24 contact form.
305
- * Fix: Request time decreased.
306
- * Fix: Requesting account status when activating for IP licenses.
307
- * Add: Precise AJAX request detection.
308
- * Spam protection improved.
309
-
310
- = 5.112 December 21 2018 =
311
- * Fix: Woocommerce AJAX checkout form.
312
- * Fix: Profile Builder Pro.
313
- * Fix: DB structure improvements for WPMS.
314
- * Spam filtering quality improved.
315
- * Minor fixes.
316
-
317
- = 5.111 December 13 2018 =
318
- * Fix: Double request in JetPack contact form.
319
- * Fix: Email notification about spam registration.
320
- * Fix: Links button for feedback comments.
321
- * Fix: Mail notification about plugin error.
322
- * Fix: Key field output.
323
- * Minor fixes.
324
-
325
- = 5.110 November 29 2018 =
326
- * Integration: BuddyPress ActivityWall spam protection.
327
- * Add: GDPR setting for shortcode.
328
- * Add: Support different BuddyPress templates on activity wall.
329
- * Fix: Admin/moderator checking for validate post data.
330
-
331
- = 5.109 November 15 2018 =
332
- * Fix: Added URL and IP exclusions to Contact Form 7.
333
- * Fix: js error when responseText is not exists
334
- * Fix: Sitename when getting key automatically under WPMS.
335
- * Mod: SpamFireWall is now fully compatible with WPMS.
336
- * Mod: Setting 'Tell others about CleanTalk' was deleted.
337
- * Mod: Protection from spam improved.
338
-
339
- = 5.108.1 November 8 2018 =
340
- * Fix: Errors with integration class.
341
-
342
- = 5.108 November 7 2018 =
343
- * Fix: White label mode.
344
- * Fix: SpamFireWall now can be disabled.
345
- * Fix: Layout.
346
- * Integration: WPForms.
347
- * Add: Message about block for all no integrated AJAX forms.
348
- * Add: Displaying account name near api key.
349
-
350
- = 5.107 October 29 2018 =
351
- * Fix: Ninja Forms integration.
352
- * Fix: Cookie usage.
353
- * Add: Capturing AJAX responses from non integrated forms.
354
- * Spam protection improved.
355
- * Minor fixes.
356
-
357
- = 5.106 October 11 2018 =
358
- * Spam filtration improved.
359
- * New: White Label mode.
360
- * Modification: Warning message about test on SpamFireWall die page.
361
- * Integration: WP Maintenance Mode.
362
- * Fix: S2Member.
363
- * Fix: JavaScript attachments reconsidered.
364
- * Fix: Admin banners layout.
365
- * Fix: Minor layout fixes.
366
-
367
- = 5.105 September 26 2018 =
368
- * Integration: Now bloking spam for QAEngine questions.
369
- * Fix: Async http__request call.
370
- * Fix: Unnecessary get_antispam_report_breif method call.
371
- * Layout: Hide "Do you like Cleantlak?" when key is not ok.
372
- * Layout: Minor fixes.
373
-
374
- = 5.104 September 18 2018 =
375
- * Fix: Error when saving settings.
376
- * Fix: Trying update anti spam plugin for the first installation.
377
- * Fix: Update system.
378
- * Fix: Errors output.
379
- * Fix: Plugin's settings under WPMS.
380
- * Fix: SpamFireWall update.
381
- * Fix: The server change system repaired.
382
- * Mod: Cron saving tasks improved.
383
-
384
- = 5.103.1 September 14 2018 =
385
- * Fix: Error when saving settings.
386
- * Fix: Error when getting key automatically.
387
-
388
- = 5.103 September 13 2018 =
389
- * Fix: Gravity Forms response message.
390
- * Fix: SpamFireWall redirect to 404 page.
391
- * Major anti-spam plugin improvement.
392
- * Recombined setting page.
393
- * Added error notification.
394
- * Mod: S2 Members integration.
395
- * Mod: Improved remote calls.
396
-
397
- = 5.102 August 29 2018 =
398
- * Fix: Users and comments check.
399
- * Fix: Update from 5.70 or previous versions.
400
- * Fix: GDPR public JS-script.
401
- * Fix: Dashboard widget JS scripts attachment.
402
- * Fix: WooCommerce "Place order" action.
403
- * Mod: Notification logic altered.
404
- * Mod: Users check table now has 'Signed up' column.
405
- * Minor fixes.
406
-
407
- = 5.101 August 10 2018 =
408
- * Fix: Set cookie only for non-dashboard pages.
409
- * Fix: Dashboard widget JS error.
410
- * Fix: JavaScript error for some environment.
411
- * Mod: Antispam protection accelerated for some pages.
412
-
413
- = 5.100 July 30 2018 =
414
- * Fix: JavaScript dependencies.
415
-
416
- = 5.99.1 July 17 2018 =
417
- * IP detection fixed and improved.
418
-
419
- = 5.99 July 10 2018 =
420
- * Fix: WooCommerce false positives.
421
- * Fix: SpamFireWall IP detection.
422
- * Minor fixes.
423
-
424
- = 5.98 June 27 2018 =
425
- * Fix: WooCommerce: Theme exclusion.
426
- * Fix: Public GDPR JS code.
427
- * Minor fixes.
428
-
429
- = 5.97 June 7 2018 =
430
- * Fix: Update system.
431
- * Fix: Feedback from public page (admin only).
432
- * Fix: Users and comment check: API error.
433
- * Fix: Too many negative reports. (Too big ct_data option)
434
- * Fix: SpamFireWall: Infinite redirection on the blocking page.
435
- * Minor fixes.
436
-
437
- = 5.96 May 22 2018 =
438
- * Fix: Update system.
439
- * Mod: Reset all counters button in admin bar.
440
- * Mod: GDPR compliance.
441
- * Minor fixes.
442
-
443
- = 5.95.1 May 3 2018 =
444
- * Fix: "Get key automatically" button display logic.
445
- * Fix: PHP notices.
446
-
447
- = 5.95 May 2 2018 =
448
- * Spam filtration improved.
449
- * Fix: Public widget layout.
450
- * Fix: Connection reports output.
451
- * Minor fixes.
452
-
453
- = 5.94 April 23 2018 =
454
- * Mod: Async load option for JS.
455
- * Mod: JS scripts loading is conditional.
456
- * Fix: IP detection.
457
- * Fix: IP detection.
458
- * Fix: Javascript error.
459
-
460
- = 5.93.1 April 9 2018 =
461
- * Fix: Fatal error on PHP 5.5 or lower.
462
-
463
- = 5.93 April 9 2018 =
464
- * Fix: Spam FireWall IP detection.
465
- * Fix: Contact Form 7. False positives.
466
- * Mod: Autoupdate function improved.
467
- * Minor fixes.
468
-
469
- = 5.92.2 March 23 2018 =
470
- * Fix: Error if cURL extension is disabled.
471
-
472
- = 5.92.1 March 23 2018 =
473
- * Fix: Spelling
474
- * Fix: Fatal error if cURL extension is disabled.
475
-
476
- = 5.92 March 22 2018 =
477
- * IP detection improved.
478
- * Fix: SSL connection.
479
- * Fix: False positives spam detection in Contact Form 7.
480
- * Minor fixes.
481
-
482
- = 5.91 March 15 2018 =
483
- * Fix: Errors for PHP compiled without XML support.
484
- * Fix: Spelling and translation.
485
- * Stability increased.
486
- * Minor fixes.
487
-
488
- = 5.90 March 7 2018 =
489
- * Improvement: Better IP recognition in Spam FireWall.
490
- * Fix: Gravity Froms blocking message.
491
- * Security improvments.
492
- * Minor fixes.
493
-
494
- = 5.89 February 21 2018 =
495
- * Improved spam filtration quality.
496
- * Improved compatibility.
497
- * Public widget: Styles and referral link added.
498
- * Dashboard widget: revised and fixed.
499
- * Minor fixes.
500
-
501
- = 5.88 February 12 2018 =
502
- * Integration: ConvertPro.
503
- * Improvement: Search for visitor's names in request.
504
- * Fix: Contact Form 7 message recognition.
505
- * Preparation for the remote plugin update.
506
- * Minor fixes.
507
-
508
- = 5.87 February 2 2018 =
509
- * Filtration quality improved.
510
- * Fix: WP Foto Vote downloading images.
511
- * Fix: Fatal error for unsupported PHP 5.2.
512
- * Fix: Formidable Forms improved spam filtration.
513
-
514
- = 5.86 January 25 2018 =
515
- * Fix: High CPU load with wp-ajax.php.
516
- * Fix: Mailpoet: Newsletter.
517
- * Fix: Gravity: Forms standardization for input fields.
518
- * Fix: ajax hook checks data for contact form.
519
- * Fix: UTF8 character in requests.
520
-
521
- = 5.85 January 11 2018 =
522
- * Fix: Fast Secure contact form spam block message.
523
- * Fix: IP license status.
524
- * Layout: Dashboard widget description altered.
525
-
526
- = 5.84 December 26 2017 =
527
- * Integration: PeepSo contact form
528
- * Repared: Feedback from comments page.
529
- * Fix: mb_* functions used only if exists.
530
- * Fix: Gravity forms: Multi-page form logic repared.
531
- * Fix: Gravity forms: AJAX form logic repared.
532
- * Minor fixes.
533
-
534
- = 5.83.2 December 19 2017 =
535
- * Fix: Error in base class.
536
-
537
- = 5.83.1 December 19 2017 =
538
- * Fix: CDN IP detection.
539
-
540
- = 5.83 December 19 2017 =
541
- * Improving: Stability and compatibility.
542
- * Improving: Spam protection.
543
- * Fix: Comments logic filtration.
544
- * Fix: Admin bar counter.
545
- * Minor errors fixes.
546
-
547
- = 5.82.1 December 7 2017 =
548
- * Fixed minor error with attaching JS and CSS files.
549
-
550
- = 5.82 December 4 2017 =
551
- * Plugin doesn't use PHP sessions anymore.
552
- * Bug fixes.
553
- * Improved update logic.
554
-
555
- = 5.81 November 22 2017 =
556
- * Fixed error with "Show/Hide key" button.
557
- * Slightly improved spam protection for all forms.
558
- * Small errors fixes.
559
-
560
- = 5.80 November 3 2017 =
561
- * Spam protection improved.
562
- * Improved filtration quality for WooCommerce checkout.
563
- * Minor fixes for Spam FireWall.
564
-
565
- = 5.79 October 26 2017 =
566
- * Spam protection improved.
567
- * Fixed issue with existing spam comments check.
568
- * Added posibility to exclude IP from check.
569
- * Minor fixes.
570
-
571
- = 5.78 October 16 2017 =
572
- * Improved compatibility with themes. Changed core functions prefix.
573
- * Fixed issue with WooCommerce checkout.
574
- * Spam protection improved.
575
- * Minor fixes.
576
-
577
- = 5.77 October 2 2017 =
578
- * Connection report's system.
579
- * Integration for CouponXXL Theme.
580
- * Fixed issue with mb_* functions.
581
- * Banners logic updated.
582
-
583
- = 5.76 September 20 2017 =
584
- * Fixed issue with Spam FireWall and caching plugins.
585
- * Banners logic updated.
586
-
587
- = 5.75 September 15 2017 =
588
- * Pause feature for users/comments spam check.
589
- * Improved protection from spam.
590
- * Small fixes.
591
-
592
- = 5.74.2 September 2 2017 =
593
- * Fix for users spam check for PHP 5.3 and lower.
594
-
595
- = 5.74.1 September 2 2017 =
596
- * Fix for the update system and cloud communication.
597
- * Added possibility to check users and comments for spam with a specific date range.
598
-
599
- = 5.74 August 31 2017 =
600
- * Users and comments spam check: Two check types (fast and accurate).
601
- * Fix for WooCommerce checkout test.
602
- * Minor fixes.
603
-
604
- = 5.73 August 11 2017 =
605
- * Fix for spam check for already existed users and comments.
606
- * Spam FireWall updated.
607
- * Layout fix for BT Comments.
608
- * Minor fixes.
609
-
610
- = 5.72 July 27 2017 =
611
- * Improved spam check for existed users and comments.
612
- * Minor fixes.
613
-
614
- = 5.71 July 20 2017 =
615
- * Improved spam protection for external forms.
616
- * Optimization.
617
- * Minor fixes.
618
-
619
- = 5.70.2 July 17 2017 =
620
- * Fix for Spam FireWall for Multisite.
621
-
622
- = 5.70.1 July 17 2017 =
623
- * Fix for Spam FireWall.
624
- * Spam detection improved.
625
-
626
- = 5.70 July 13 2017 =
627
- * New updater logic.
628
- * Self cron system.
629
- * Improved AMP compatibility.
630
- * Optimization.
631
- * Fixed users and comments spam check.
632
- * Fixed layout for Comment's feedback from public page.
633
- * Updated Spam FireWall.
634
- * SFW: Spam FireWall counter now work in real-time.
635
- * SFW: Improved compatibility with different Data Bases.
636
-
637
- = 5.69 July 3 2017 =
638
- * Reviewer - integration.
639
- * Optimization for Users and Comments check for big databases.
640
- * Errors fixes.
641
- * Improved protection from spam.
642
-
643
- = 5.68 June 22 2017 =
644
- * Contact Form for WordPress - Ultimate Form Builder Lite - integration.
645
- * Contact Bank - Contact Forms Builder - integration.
646
- * Smart Forms - integration.
647
- * cformsII - integration.
648
- * Contact Form by Web-Settler - integration.
649
- * Error fixes.
650
-
651
- = 5.67.3 June 9 2017 =
652
- * Fixed JS attachment error.
653
-
654
- = 5.67.2 June 5 2017 =
655
- * Fixed error with IP determination.
656
-
657
- = 5.67.1 June 4 2017 =
658
- * Fixed JS error in 5.67 version.
659
- * Integrations: Enfold theme, Convertplug.
660
- * Links to check for Emails/IP for spam.
661
- * Control comments and feedback about them from public post's page.
662
- * Improved connection stability with cloud service.
663
- * Spam protection improved.
664
- * Other small fixes.
665
-
666
- = 5.67 June 1 2017 =
667
- * Integrations: Enfold theme, Convertplug.
668
- * Links to check for Emails/IP for spam.
669
- * Control comments and feedback about them from public post's page.
670
- * Improved connection stability with cloud service.
671
- * Spam protection improved.
672
- * Other small fixes.
673
-
674
- = 5.66 May 23 2017 =
675
- * Spam protection improved.
676
- * Major fixes for users and comments spam check.
677
- * Added feedback from Wordpress comments list.
678
- * Fix for "internal forms check" option.
679
- * Fixed issue with caching Spam FireWall die page.
680
- * Other small fixes.
681
-
682
- = 5.65 May 16 2017 =
683
- * Fix for PayPal redirecton.
684
- * Fixed issue with empty query for bulk comments test.
685
- * Added protection for Enfold contact form.
686
- * Ninja forms integration.
687
-
688
- = 5.64 April 26 2017 =
689
- * Integration for Facebook registrations.
690
- * Small fixes for WPMS.
691
- * Fix for Activecampaign service.
692
- * Fix for check spam users.
693
- * Fixed rare notice Notice: Undefined index: REQUEST_URI
694
-
695
- = 5.63 April 20 2017 =
696
- * Fix for the dashboard spam stat widget.
697
- * Added translation posibility for all text.
698
-
699
- = 5.62 April 17 2017 =
700
- * Fix for the dashboard spam statistics widget.
701
- * Fix for users spam check.
702
- * Small appearance changes.
703
-
704
- = 5.61 April 6 2017 =
705
- * Improved filtration.
706
- * Additional logic for the form recognizing.
707
- * Integration: Divi Theme Contact Form.
708
- * Fix: Gravity Forms multipages forms.
709
- * Stat Widget: Minor fixes.
710
- * Added possibility to download results of the users check in CSV format.
711
- * Alteration for settings page (footer).
712
-
713
- = 5.60.1 March 29 2017 =
714
- * Fixed error function 'locale_get_display_region' no exists.
715
-
716
- = 5.60 March 29 2017 =
717
- * Added main dashboard widget with spam sctivity stats.
718
- * Mailster - integration.
719
- * Base class updated.
720
-
721
- = 5.59 March 24 2017 =
722
- * Users/comments check fix.
723
- * Plugin's name changed to Anti-Spam by CleanTalk.
724
- * Trial banner is dismissable. Disapear for 24h or till logout.
725
- * Settings modified (Auto testing failed warning).
726
- * Mailing(inactive key) interval increased to 6 hours.
727
-
728
- = 5.58.6 March 16 2017 =
729
- * Fix for Ninja forms (protection updated).
730
- * Fix for QA Theme.
731
- * Fix for RSVP form.
732
- * Setting changes (Spam FireWall).
733
- * Improved debug section.
734
- * Improved gathering data function.
735
- * Minor fixes.
736
-
737
- = 5.58.5 March 6 2017 =
738
- * Minor backend fix.
739
-
740
- = 5.58.4 March 6 2017 =
741
- * Users check fix (redirect after the check).
742
- * Fixed PHP Notice "HTTP_REFERER" is unset.
743
- * Updated Notice logic.
744
-
745
- = 5.58.3 February 28 2017 =
746
- * Bitrix24 Contact form integration.
747
- * Users/comments check fix.
748
- * Spam sorting updated.
749
- * Banner showing logic.
750
-
751
- = 5.58.2 February 17 2017 =
752
- * Cron fix for daily report.
753
-
754
- = 5.58.1 February 16 2017 =
755
- * Minor fixes.
756
-
757
- = 5.58 February 15 2017 =
758
- * Work without access key
759
- * Bitrix24 contact integration
760
- * Issues fixes
761
-
762
- = 5.57.1 February 8 2017 =
763
- * Fix for notice logic.
764
-
765
- = 5.57 February 8 2017 =
766
- * Setting page changes.
767
- * Bug fixes for WooCommerce.
768
- * Spam FireWall filters only GET requests.
769
- * Optimization.
770
- * Minor and major fixes.
771
-
772
- = 5.56.1 January 25 2017 =
773
- * Minor fixes
774
-
775
- = 5.56 January 19 2017 =
776
- * Integrations: MailChimp Premium, Profile Press.
777
- * Changes comments flow.
778
- * FireWall updater fix.
779
- * Users check optimization.
780
-
781
- = 5.55 December 23 2016 =
782
- * Integrations: Caldera Forms, Visual Form Builder.
783
- * Fix for different 'cookies' header names.
784
- * Fixed user deletion.
785
-
786
- = 5.54 December 12 2016 =
787
- * Integrations: AmoForms, Contact Form Clean and Simple.
788
- * Comments check logic refreshed.
789
- * Registration JS error fix.
790
- * Users check fix.
791
- * Fix for translation system.
792
- * Minor fixes.
793
-
794
- = 5.53.1 December 9 2016 =
795
- * Minor layout fixes.
796
-
797
- = 5.53 November 28 2016 =
798
- * Addition warning before deleting users.
799
- * Spam FireWall is enabled by default.
800
- * Usernoise modal feedback / contact form : integration.
801
- * Translations.
802
- * Optimization.
803
- * Fixes.
804
-
805
- = 5.52.1 November 14 2016 =
806
- * Users and comments check: Using new API method.
807
- * Quick Contact From: Integration via "Custom Contact Forms" setting.
808
- * JavaScript filtration improved.
809
- * Translation changes.
810
- * Optimized JavaScript code.
811
-
812
- = 5.51 November 2 2016 =
813
- * Added protection for internal forms
814
- * Immediate spam check for comments and users from WP dashboard
815
- * Optimized code
816
-
817
- = 5.50.1 October 24 2016 =
818
- * Improved filtration in contact forms.
819
- * Spam FireWall: Fixed issue with SFW logs
820
- * Skipping service fields: Fast Secure Contact Froms, QU Forms, Custom Contact Forms
821
-
822
- = 5.50 October 20 2016 =
823
- * Custom contact forms: integration.
824
- * Pirate Forms: integration.
825
- * PHP 7 compatibility: Deleted third-party JSON library and dependences.
826
- * PHP 7 compatibility: Fixed end of lines.
827
- * YOAST Seo: Fixed PHP warnings.
828
- * Spam FireWall: Minor fix for Spam FireWall counter.
829
- * Only admin could access to CleanTalk dashboard (exclude Authors an Editors).
830
- * Improved filtration in contact forms.
831
-
832
- = 5.49.2 October 5 2016 =
833
- * Second Fix for database error. Stable version.
834
-
835
- = 5.49.1 October 5 2016 =
836
- * Fixed database error.
837
-
838
- = 5.49 October 3 2016 =
839
- * Spam FireWall feature: Class upgraded.
840
- * New feature: Delete links from approved comments.
841
- * Settings: Grouped.
842
- * Settings: Altered description fixed spelling mistakes.
843
- * Settings: Added indicator for Spam FireWall.
844
- * Admin bar: Added Spam FireWall counter
845
- * Clean and Simple Contact Form: Direct integration.
846
- * WooCommerce: Don't check password recovery form.
847
- * WooCommerce Wishlists: Issue with check for Google bots.
848
- * JetPack: contact form fix.
849
- * Fixed and created the defaults for all CleanTalk options.
850
- * Fixed spelling mistakes.
851
-
852
- = 5.48 September 15 2016 =
853
- * buddyPress: Added private messages filtering. Doesn't check user if he has 3 or more messages in the "sentbox" and "inbox" folders.
854
- * buddyPress: Added option in settings for private messages check.
855
- * WooCommerce Wishlist: Added check for wishlists.
856
- * Fixed issue with "check all post data" option.
857
- * Improved filtering for Gravity Forms
858
- * Mobile Assistant Connector fix
859
- * Minor fixes.
860
-
861
- = 5.47 September 5 2016 =
862
- * WooCommerce: direct integration for checkout form.
863
- * WooCommerce Sensei: login form fix.
864
- * bbPress: Added the check for topics and comments with stop_words
865
- * bbPress: Skip check for admin in comments and topics
866
- * UserPro: fixes. Request without field "shortcode"
867
- * Contact Form 7: Bug fix.
868
- * Spam FireWall: Optimized logs rotation.
869
- * Updated inner functions (compatibility fix for PHP 5.4+)
870
- * Fixed output of counters (without spamfirewall stats)
871
- * Fixed spelling in settings
872
- * Added "Delete from the list" button in comments spam check page
873
- * Minor fixes.
874
-
875
- = 5.46 August 17 2016 =
876
- * Fixed issue with admin bar links in WP Multi Network mode.
877
- * Added "All time counter" and "Daily counter" into admin bar.
878
- * Added settings to disable counters in admin bar.
879
- * New style for "Get access key manually" button.
880
-
881
- = 5.45.2 August 4 2016 =
882
- * Added Anti-Spam protection for Quick Event Manager.
883
- * Improved bulk spam test for users. Now the plugin does not mark as Spam user, if the user IP address has spam activity more than 30 days ago.
884
- * Fixed bulk spam test for comments. Previous version had a conflict between spam history for IP and Email.
885
- * Minor fix function to get the API key.
886
-
887
- = 5.45.1 July 26 2016 =
888
- * Fixed issue with missed spam messages, subscriptions.
889
- * Improved bulk spam test for comments. Now the plugin will not mark as Spam comments, if a comment sender (IP address) has spam activity more than 30 days ago.
890
-
891
- = 5.45 July 21 2016 =
892
- * Optimized bulk spam comments deletion.
893
- * Turned off JavaScript anti-spam cookies if the option 'Set cookies' is turned off. It helps to avoid issues with Varnish.
894
- * Added links to bulk spam comments&users removal tool.
895
-
896
- = 5.44.1 July 13 2016 =
897
- * Optimized options getting code.
898
- * Added the option 'Protect Logged in users' to do anti-spam tests for submissions by logged in users.
899
-
900
- = 5.43.2 June 30 2016 =
901
- * Optimized anti-spam code for AJAX based contact forms.
902
- * Fixed CSS layout of counters in Admin bar (issue with layout in IE11).
903
-
904
- = 5.43.1 June 23 2016 =
905
- * Added agent version in requests to test a connection between the website and servers.
906
- * Fixed issue with PHP notices in cleantalk-admin.php.
907
-
908
- = 5.43 June 22 2016 =
909
- * Added spam protection for registrations via 'Login with AJAX' plug-in.
910
- * Added a new counter to Admin bar that allows to count spam and approved submissions since last reset.
911
- * Update the code that tests a connection between a website and CleanTalk's servers. New version doesn't generate submissions with email good@cleantalk.org.
912
- * Fixed issue with spam protection for nested forms by Formidable plug-in.
913
-
914
- = 5.42 2016-06-15 =
915
- * Added anti-spam protection for UserPro.
916
- * Improved protection for Formidable forms + Varnish.
917
- * Improved bulk search for spam accounts.
918
- * Fixed spam protection for pages that contain multiple Formidable forms with same HTML ID.
919
- * Optimized PHP code to be compatible with PHP 5.4 and above. The patch has been applied to Formidable forms spam protection.
920
- * Minor fixes in plugin backend.
921
-
922
- = 5.41 2016-05-31 =
923
- * Added HTTP response in plugin response if an network issue was happend.
924
- * Optimized JavaScript anti-spam test for Formidable forms.
925
- * Re-stored the option to auto redirect to plugn settings after plugin activation.
926
- * Updated Spanish, Russian translations.
927
- * Fixed issue with nasted fields in Formidable forms.
928
-
929
- = 5.40.3 2016-05-26 =
930
- * Added option to encrypt (SSL) connection to CleanTalk anti-spam servers.
931
- * Added JSON encoding for AJAX forms.
932
- * Obfuscated private data for Custom contact forms option.
933
- * Optimized bulk users check for spam over blacklists database.
934
- * Fixed issue with lost connection to servers and JavaScript anti-spam test.
935
- * Fixed issue with WordFence and collect_details.
936
-
937
- = 5.40.2 2016-05-11 =
938
- * Improved account status check logic.
939
- * Fixed issue with double anti-spam tests for FastSecure contact forms.
940
- * Fixed issue with nulled JavaScript variables assigned from backend. This issue might me occurred on standart WordPress registration form and with failed JavaScript spam test.
941
- * Fixed issue with session_start() with PHP sessions stored in memcache.
942
-
943
- = 5.40.1 2016-04-28 =
944
- * Fixed issue with Super Socializer.
945
- * Fixed issue with spam filtration for logged in users and Formidable forms.
946
- * Added logging of all submitted fields for FastSecure contact form.
947
-
948
- = 5.40 2016-04-19 =
949
- * Added JSON encoding for posts that were protected via Custom contact forms option. It allows show anti-spam logs in the Dashboard in more comfortable view.
950
- * Minor fix in plugin settings.
951
- * Fixed pagination for bulk users spam test.
952
- * Fixed issue with unknown _SESSION.
953
- * Fixed issue with double Spam FireWall database upload.
954
-
955
- = 5.39.1 2016-04-04 =
956
- * Improved AJAX based anti-spam test with HTTPS backends.
957
- * Added fix to avoid issue with empty ct_info_flag on JavaScript side.
958
- * Added logic to exclude caching for Spam FireWall.
959
- * Removed a condition to skip accounts with 127.0.0.1 IP in spam test for registered acconts.
960
-
961
- = 5.38.1 2016-03-24 =
962
- * Fixed issue with PHP sessions and 'The session id is too long or contains illegal characters'.
963
- * Removed Spam FireWall protection on /feed page.
964
- * Disabled anti-spam tests for AJAX calls if the option 'Custom contact forms' is turned off.
965
- * Added reject notice for spam submissions on Gravity forms with AJAX calls.
966
-
967
- = 5.37.3 2016-03-10 =
968
- * Fixed bug with broken MailPoet previews.
969
- * Fixed bug with broken Geo My WP pop-up windows.
970
- * Fixed issue with mb_convert_encoding() function.
971
- * Removed double JavaScript code in front-end.
972
- * Removed unused variables in anti spam logic.
973
- * Added option 'Set cookies' (turned on by default). If the option turned off, the plugin will not generate cookies, but in this case plugin will not protect some rarely used contact forms. Any way, turn this option off be compatible with Varnish in spam protection for WordPress core comments, registrations and most popular contact forms.
974
- * Added anti-spam protection for Gravity forms via option 'Contact forms' with hook gform_entry_is_spam().
975
-
976
- = 5.36.1 2016-02-05 =
977
- * Fixed bug, when users receive error after logging in
978
- * Improve anti-spam filters for contact forms.
979
-
980
- = 5.36 2016-02-04 =
981
- * Improved JavaScript anti spam protection
982
- * Improvements for avoiding blocking requests from payment systems
983
-
984
- = 5.35 2016-01-14 =
985
- * Added support for IP licensing
986
- * Some anti-spam protection improvements
987
- * Small backend interface fixes
988
-
989
- = 5.34.1 2015-12-17 =
990
- * Fixed trackback antispam protection: improved checking mechanism
991
- * Fixed problem with blocking MailPoet: added exclusions in spam checking algorithm
992
-
993
- = 5.34 2015-12-10 =
994
- * Improved spam checking mechanism
995
- * Added "Collect browser details" option for better antispam protection
996
- * Fixed custom contact forms checking for AJAX requests
997
- * Minor translations fixes
998
-
999
- = 5.33.1 2015-12-04 =
1000
- * Fixed issue with BBPress: restored old user permission checking mechanism
1001
- * Fixed anti-spam comments checking: sometimes get_comments returned wrong comments number
1002
- * Fixed bulk checking: made numeric indexes in users and comments arrays
1003
- * Fixed trackback and pingback checking: removed exception for checking
1004
-
1005
- = 5.33 2015-12-01 =
1006
- * Backend interface fixes
1007
- * Improved Spam FireWall efficiency
1008
- * Improved performance of anti spam checking
1009
-
1010
- = 5.32 2015-11-26 =
1011
- * Added improvements for manual spam detection
1012
- * Fixed errors in backend
1013
- * Fixed bulk users anti spam checking
1014
- * Added indicator for bulk spam checking
1015
- * Added "Get access key automatically" button
1016
-
1017
- = 5.31 2015-11-11 =
1018
- * Improved backend performance
1019
- * Fixed counter of approved/blocked spam attacks
1020
- * Fixed Spam FireWall logging
1021
-
1022
- = 5.30 2015-11-05 =
1023
- * Improved anti-spam checking
1024
- * Optimized performance
1025
- * Fixed blocking email preview in MailPoet
1026
- * Interface fixes
1027
- * WPMU interface fixes
1028
-
1029
- = 5.29 2015-10-27 =
1030
- * Optimized performance
1031
- * Fixed bugs in custom contact forms spam checking
1032
-
1033
- = 5.28.7 2015-10-23 =
1034
- * Optimized PHP sessions creation algorithm. This fix should increase plugin perfomance on hostings without retenion of PHP sessions files.
1035
- * Removed autoredirection to plugin settings after plugin activation.
1036
-
1037
- = 5.28 2015-10-16 =
1038
- * Fixed errors in anti-spam checking
1039
- * Restored options for spam checking registrations and cpmmon contact forms
1040
- * Improved spam protection
1041
- * Fixed problems with AJAX functionality in MailPoet, WooCommerce and other AJAX plugins
1042
-
1043
- = 5.27 2015-10-13 =
1044
- * Improvements in SpamFireWall feature
1045
- * Code optimization
1046
- * Backend interface fixes
1047
-
1048
- = 5.26 2015-10-05 =
1049
- * Added WordPress Language Pack support
1050
- * Removed spam checking for some autorisation plugins
1051
- * New experimental feature: SpamFireWall
1052
-
1053
- = 5.25.2 2015-09-28 =
1054
- * Fixed backend bug
1055
-
1056
- = 5.25.1 2015-09-28 =
1057
- * Added widget with anti-spam stats
1058
- * Added information about blocked spam attacks in admin dashboard and CleanTalk settings
1059
- * Added ability not to check comments for users with 3 or above allowed comments
1060
- * Added an option 'Help others known CleanTalk' to show information for site visitors, that your site is protected from spam by us
1061
- * Some backend interface settings
1062
-
1063
- = 5.24.1 2015-09-16 =
1064
- * Fixed some errors in frontend
1065
- * Fixed access key saving
1066
-
1067
- = 5.24 2015-09-14 =
1068
- * Backend interface fixes
1069
- * Improvement for AJAX JavaScript spam checking
1070
-
1071
- = 5.23 2015-09-01 =
1072
- * Fixed BuddyPress profile search false positivities of anti-spam protection.
1073
- * Some interface fixes of bulk users & comments spam checking
1074
-
1075
- = 5.22 2015-08-26 =
1076
- * Fixed possible XSS issue for anti-spam test on third-party forms.
1077
-
1078
- = 5.21 2015-08-21 =
1079
- * Fixed bug with skipping spam submissions
1080
- * Fixed bug with receiving old user_token for viewing anti-spam stats
1081
- * Small backend fixes
1082
-
1083
- = 5.20 2015-08-15 =
1084
- * Fixed anti-spam stats in admin bar - now stats updates every hour
1085
- * Fixed issue with skipping spam submissions
1086
- * Added some PHP-constants for advanced users - CLEANTALK_AJAX_USE_BUFFER and CLEANTALK_AJAX_USE_FOOTER_HEADER can be defined to true or false in wp-config.php to control method, which will be used for injection of AJAX script.
1087
-
1088
- = 5.19 2015-08-11 =
1089
- * New feature: anti-spam checking for registered users
1090
- * Fixed issue with AJAX JavaScript anti-spam test.
1091
- * Fixed issue with SEO Yoast xml sitemaps and JavaScript anti-spam test.
1092
-
1093
- = 5.18 2015-08-04 =
1094
- * Fixed issue with user_token
1095
- * Added anti-spam API, see our FAQ
1096
-
1097
- = 5.17 2015-07-23 =
1098
- * Fixed infinite redirection after activation
1099
- * Minor backend fixes
1100
-
1101
- = 5.16 2015-07-22 =
1102
- * Fixed external services checking
1103
- * Fixed mass comments deletion
1104
- * Fixed AJAX anti-spam protection
1105
-
1106
- = 5.15 2015-07-16 =
1107
- * New feature: anti-spam protection for forms, that uses external services
1108
-
1109
- = 5.14 2015-07-03 =
1110
- * Added anti-spam protection for some themes and plugins
1111
- * Some backend fixes
1112
-
1113
- = 5.13 2015-06-12 =
1114
- * Closing notification for anti-spam renew
1115
- * Fixed bulk anti spam comment checking
1116
-
1117
- = 5.12 2015-06-01 =
1118
- * Added option for checking all post data for spam
1119
- * Some JavaScript protection improvements
1120
- * Added option for old JavaScript check (without AJAX)
1121
-
1122
- = 5.10 2015-05-25 =
1123
- * Fixed Javascript error on some forms
1124
-
1125
- = 5.9 2015-05-21 =
1126
- * Fixed Javascript error on CF7 and JetPack
1127
- * Some backend and frontent fixes
1128
-
1129
- = 5.8 2015-05-18 =
1130
- * Minor fixes
1131
-
1132
- = 5.7 2015-05-18 =
1133
- * Fixed French translation
1134
- * Fixed protection algorithm
1135
-
1136
- = 5.6 2015-05-11 =
1137
- * Fixed translation
1138
- * Fixed bulk comments anti-spam checking
1139
- * Added option for disabling anti spam stats in adminbar
1140
- * Some security fixes
1141
-
1142
- = 5.5 2015-04-29 =
1143
- * Fixed security issue
1144
- * Some interface fixes
1145
-
1146
- = 5.4 2015-04-27 =
1147
- * Some interface and functionality changes in plugin settings page
1148
- * Added counter for anti-spam stats in admin bar
1149
-
1150
- = 5.3 2015-04-13 =
1151
- * Added anti-spam protection for Divi theme contact forms
1152
- * Added anti-spam protection for MyMail contact forms
1153
- * Added anti-spam protection for MailPoet Newsletters
1154
- * Some interface and functionality changes in backend
1155
-
1156
- = 5.2 2015-04-01 =
1157
- * Added link for anti-spam stats
1158
- * Added WP User Frontend Pro registration form protection
1159
-
1160
- = 5.1 2015-03-24 =
1161
- * Fixed site crash after installing 5.0 on some websites
1162
-
1163
- = 5.0 2015-03-24 =
1164
- * Added bulk comments checking for spam via CleanTalk blacklists
1165
- * Added anti-spam form protection for 'Ajax Login & Register'
1166
- * Fixed JetPack form protection
1167
-
1168
- = 4.24 2015-03-20 =
1169
- * Added immediate spam protection activation.
1170
-
1171
- = 4.22 2015-03-17 =
1172
- * Added button for automatic spam protection key getting.
1173
-
1174
- = 4.21 2015-03-11 =
1175
- * Added license renew notification.
1176
-
1177
- = 4.20 2015-03-03 =
1178
- * Added German, Italian, Polish, Portuguese translations.
1179
- * Minor code fixes.
1180
-
1181
- = 4.19 2015-02-24 =
1182
- * Increased keys lifetime for JS spam test.
1183
-
1184
- = 4.18 2015-02-17 =
1185
- * Fixed bug with comments approvement - moved ct_unmark_red() to cleantalk-admin.php
1186
- * Added PayPal 'payment_status' in skip list.
1187
- * Added Akismet 'spam' status processing.
1188
-
1189
- = 4.17 2015-02-12 =
1190
- * New base class.
1191
- * Divided code to 3 separate files - common, public and admin.
1192
-
1193
- = 4.16 2015-02-05 =
1194
- * New base class.
1195
- * Fixed JetPack spam filters logics.
1196
- * Optimized Formidable, bbPress, BuddyPress spam filters.
1197
-
1198
- = 4.15 2015-01-29 =
1199
- * Support spam test for Contact Form 7 versions before 3.0.0.
1200
- * Fixed global JS-vars for JS spam test.
1201
- * Fixed online notice cookie logics.
1202
- * Optimized spam filters for FSCF, WooCommerce, JetPack.
1203
- * Optimized option getting.
1204
-
1205
- = 4.14 2015-01-19 =
1206
- * Removed deprecated option from comment approvement code.
1207
- * New API key URL.
1208
- * Trimmed API key in admin panel.
1209
- * Added current options to array sended to CleanTalk servers.
1210
- = 4.13 2014-12-29 =
1211
- * Fixed bug with autimatically aprovement not spam comments. Now this option disabled and do not override local WordPress policy.
1212
-
1213
- = 4.12 2014-12-29 =
1214
- * Fixed bug with 'Wrong Access key...' notice in WordPress dashboard.
1215
- * Fixed filtration bug in WordPress dashboard login form.
1216
-
1217
- = 4.11 2014-12-22 =
1218
- * Improved anti-spam protection for custom contact/registration/subscribe forms.
1219
- * Improved anti-spam protection for comments.
1220
- * Accelerated plugin speed for comments, regirstrations and contacts.
1221
- * Added translation to French.
1222
-
1223
- = 4.10 2014-12-10 =
1224
- * Improved anti-spam protection for custom contact/registration/subscribe forms.
1225
- * Option 'Custom contact forms' enabled by default for new setups.
1226
- * Removed settings "Publish relevant comments", "Use encrypted (SSL) connection".
1227
- * Added translation to Danish (thank you for Mikkel at KreativJul.dk).
1228
-
1229
- = 4.9 2014-11-24 =
1230
- * Fixed spam test for Contact Form 7.
1231
-
1232
- = 4.8 2014-11-19 =
1233
- * Improved anti-spam protection for BuddyPress registrations and custom contact forms.
1234
-
1235
- = 4.7 2014-11-16 =
1236
- * Fixed JavaScript spam test for FastSecure contact form.
1237
-
1238
- = 4.6 2014-11-11 =
1239
- * Improved anti-spam protection on BuddyPress registrations.
1240
- * Improved anti-spam protection on contact forms.
1241
- * Removed plugin sign from pending, spam comments. To get details about a comment please use Dashboard at cleantalk.org.
1242
- * Improved Access key validation function.
1243
- * Added protection for bbPress comments via stop list. Stop list function is a list to reject comments by prefiled words. To fill the list please use Dashboard at cleantalk.org.
1244
-
1245
- = 4.5 2014-11-04 =
1246
- * Fixed CF7 JavaScript bug.
1247
- * Fixed rejects in bbPress guests comments.
1248
-
1249
- = 4.4 2014-10-29 =
1250
- * Improved anti-spam JS test for CF7.
1251
- * Fixed 'noscript' text in FaceBook Like preview in Valenti theme.
1252
-
1253
- = 4.2 2014-10-20 =
1254
- * Fixed double checks issue for BuddyPress registrations.
1255
- * Increased timeout limits to find the work server.
1256
-
1257
- = 4.1 2014-10-13 =
1258
- * Optimized code for manual moderation feedback sending.
1259
- * Optimized anti-spam algorithms for comments, contacts and signups.
1260
-
1261
- = 4.0 2014-10-06 =
1262
- * Improved anti-spam protection for custom contact forms.
1263
- * Improved anti-spam protection for registration forms.
1264
-
1265
- = 3.9 2014-10-01 =
1266
- * Did exception to do not break to create new user in WordPress backend.
1267
-
1268
- = 3.8 2014-09-19 =
1269
- * Fixed json_encode() + malformed characters.
1270
- * Fixed JavaScript issue with wpautop().
1271
-
1272
- = 3.6 2014-09-15 =
1273
- * Fixed preg_match() issue for Formidable forms and Custom contact forms.
1274
- * Improved anti-spam protection for Custom contact forms.
1275
-
1276
- = 3.4 2014-09-04 =
1277
- * We've added anti-spam for themes contact forms and any untested contact forms plugins. To use this test enable option "Custom contact forms" in plugin settings.
1278
- * We've added auto rotation for spam comments. Now the plugin removes comments in SPAM folder older then 15 days. This option is enabled by default.
1279
-
1280
- = 3.2 2014-08-27 =
1281
- * Fixed submit_time() logic for failed submits (comments/registrations). Now form fill time resets after every failed submit.
1282
-
1283
- = 3.1 2014-08-19 =
1284
- * Added anti-spam test over senders Cookies.
1285
- * Improved form fill anti-spam test.
1286
- * Improved speed selection of the nearest server to website.
1287
- * Improved anti-spam speed for comments.
1288
- * Relevance anti-spam test disabled by default. To enable test should be used option 'relevance_test'.
1289
-
1290
- = 2.58 2014-08-06 =
1291
- * Added anti-spam protection for signups posted via WooCommerce order form.
1292
- * Improved anti-spam protection for Contact Form 7.
1293
- * Improved anti-spam protection for registrations. Now the plugin looking for JavaScript anti spam test results not only in POST array, but in COOKIES array too. This improvement allows protect signup forms for any untested signups plugins and themes.
1294
- * Updated PHP API. Now the plugin can resolve sender IP for websites behind proxy servers. If the proxy servers uses private IP address.
1295
-
1296
- = 2.57 2014-07-29 =
1297
- * Improved anti-spam protection for comments. The plugin now proccessing website url in the comments form.
1298
- * Fixed sign remove logic for approved comments. Previous version doesn't cut sign for comments approved via AJAX call in WordPress backend.
1299
- * Fixed switching to SSL for comments. Previous version doesn't use secured connection for comments.
1300
-
1301
- = 2.56 2014-07-21 =
1302
- * Fixed account status check logic. Previous version makes unnecessary test API calls when the plugin asks account status check.
1303
-
1304
- = 2.55 2014-07-11 =
1305
- * Fixed bug with account status function. In backend the plugin showed notice 'Please don't forget to disable CAPTCHA if you have it!' on every page.
1306
-
1307
- = 2.54 2014-07-11 =
1308
- * Fixed signup anti-spam protection logic for BuddyPress registrations.
1309
- * Fixed anti-spam protection for JetPack contact form.
1310
- * Changed account status check logic.
1311
-
1312
- = 2.53 2014-06-27 =
1313
- * Fixed anit-spam protection bug for signups.
1314
- * Changed anti-spam functions (comments and signups) priority.
1315
-
1316
- = 2.52 2014-06-25 =
1317
- * Fixed 'Fatal error: Call to a member function get_error_code()' issue with signups via BuddyPress.
1318
-
1319
- = 2.51 2014-06-23 =
1320
- * Added spam protection for registrations via plugin New User Approve by Josh Harrison. If the CleanTalk matched signup as spam this signup will be denied to placing in pending queue.
1321
- * Added option "Use secure (SSL) connection to CleanTalk cloud". If the option enabled plugin will communicate with CleanTalk severs via 128bit encrypted data channel. So, if you have SSL protected webforms on website you can use this option to be sure that visitors personal data safely transmits to CleanTalk servers.
1322
- * Fixed minor bug with loading backend functions.
1323
-
1324
- = 2.49 2014-06-10 =
1325
- * Added spam protection for S2Member Auth.net forms.
1326
- * Added spam protection for multisite signup form.
1327
- * Optimized account status check function.
1328
-
1329
- = 2.46 2014-05-19 =
1330
- * Added: HTML notice about the need to enable JavaScript.
1331
- * Fixed: Fixed pingbacks anti-spam test.
1332
-
1333
- = 2.44 2014-05-12 =
1334
- * Added: Anti-spam protection for S2Member framework.
1335
- * Improved: JavaScript anti-spam test.
1336
- * Improved: Plugin load time for backend and frontend.
1337
- * Fixed: PHP warning mb_convert_encoding()
1338
-
1339
- = 2.42 2014-04-29 =
1340
- * Fixed: JavaScript anti-spam test for comments.
1341
-
1342
- = 2.40 2014-04-25 =
1343
- * New: Fast Secure Contact form support.
1344
- * New: WordPress Landing Pages support
1345
-
1346
- = 2.38 2014-03-27 =
1347
- * Fixed: Registraion form submit time spam test.
1348
-
1349
- = 2.36 2014-03-12 =
1350
- * Reversed to patches from old revisions.
1351
-
1352
- = 2.35 2014-03-12 =
1353
- * New: Notifications about disabled account
1354
- * New: Improved JavaScript spam test.
1355
- * Fixed: Code optimization
1356
- * Fixed: JavaScript test for signups.
1357
-
1358
- = 2.33 2014-02-12 =
1359
- * Fixed: CURLOPT_FOLLOWLOCATION bug at admin notice
1360
-
1361
- = 2.32 2014-02-04 =
1362
- * New: Added notice about automatically approved comment. The notice shows only for first approved comment and only for new commentators (without approved comments) of the blog.
1363
- * New: At WordPress console added banner for notices.
1364
- * Changed: Screenshots updated.
1365
-
1366
- = 2.31 2014-01-24 =
1367
- * New: Added spam protection for JetPack comments
1368
- * Fixed: cURL connection issue "Expect: 100-continue"
1369
-
1370
- = 2.30 2014-01-13 =
1371
- * Changed: Improved servers connection logic.
1372
- * Fixed: Antispam test for Fomidable forms.
1373
-
1374
- = 2.28 2013-12-19 =
1375
- * New: Added protection against spam bots for WooCommerce review form.
1376
- * Fixed: JavaScript anti-spam logic for WooCommerce review form.
1377
-
1378
- = 2.27 2013-12-06 =
1379
- * New: Added protection against spam bots for JetPack Contact form.
1380
- * Fixed: JavaScript anti-spam logic for registrations and Contact form 7.
1381
-
1382
- = 2.25 2013-11-27 =
1383
- * New: Added protection against spam bots for BuddyPress registrations.
1384
- * New: Added protection against spam bots for Contact form 7.
1385
- * New: Added Spanish (es_ES) translation.
1386
-
1387
- = 2.23 2013-11-20 =
1388
- * New: Added automatic training blacklists on spam bot account deletion.
1389
- * New: Added URL to project homepage at plugin options.
1390
- * Changed: Improved anti-spam logic.
1391
-
1392
- = 2.21 2013-11-13 =
1393
- * Changed: WordPress blacklists settings get priority over plugin's anti-spam settings
1394
- * Changed: Disabled management approval comments for regular commentators of the blog. Automatically approved for publication only the comments of the new blog authors.
1395
- * Changed: Removed form submit time test. Imporved JavaScript spam test.
1396
- * Changed: PHP code optimizations
1397
-
1398
- = 2.19 2013-11-08 =
1399
- * New: Antispam protection from spam bots at the registration form
1400
- * Changed: Russian localization for admin panel
1401
- * Changed: PHP code optimizations
1402
-
1403
- = 2.5.18 2013-11-01 =
1404
- * Fixed: Bug with selection of the last comments for post
1405
- * New: Antispam protection for Formidable feedback forms
1406
- * New: Automatic deletion of outdated spam comments
1407
- * New: On/Off option for comments spam filtration
1408
- * Tested with WordPress 3.7.1
1409
-
1410
- = 2.4.15 2013-09-26 =
1411
- * Fixed: Bug with mass comments deletion
1412
- * Changed: Russian localization for admin panel
1413
- * Tested with mulitsite setup (WordPress network or WPMU)
1414
-
1415
- = 2.4.14 2013-08-29 =
1416
- * Changed: Removed feedback requests to the servers for banned (spam) comments.
1417
-
1418
- = 2.4.13 2013-08-19 =
1419
- * Changed: Switched HTTP requests from file_get_contents() to CURL. Added file_get_contens() as backup connection to the servers.
1420
- * Changed: Removed feedback requests for comments moved to trash.
1421
- * Fixed: "Fail connect to servers..." error on hostings with disabled 'allow_url_fopen' PHP option.
1422
-
1423
- = 2.4.12 2013-08-12 =
1424
- * Removed RPC::XML library from plugin.
1425
- * Switched plugin to HTTP+JSON connection with servers.
1426
- * Fixed bug with comments anti-spam tests with non UTF8 codepage.
1427
-
1428
- = 2.4.11 2013-08-02 =
1429
- * Removed spam tests for self-made pingbacks
1430
- * Tested up to WP 3.6
1431
-
1432
- = 2.4.10 2013-07-24 =
1433
- * Fixed warning in PHP 5.4
1434
- * Fixed bug with disabling comments test for Administrators, Authors and Editors
1435
- * "Stop words" settings moved to <a href="http://cleantalk.org/my">Control panel</a> of the service
1436
- * "Response language" settings moved <a href="http://cleantalk.org/my">Control panel</a> of the service
1437
-
1438
- = 2.4.9 =
1439
- * Fixed extra debugging in base class
1440
-
1441
- = 2.4.8 =
1442
- * Enabled convertion to UTF8 for comment and example text
1443
- * Optimized PHP code
1444
-
1445
- = 2.3.8 =
1446
- * Enabled selection the fastest server in the pool
1447
- * Fixed work server in plugin's config
1448
-
1449
- = 2.2.3 =
1450
- * Secured md5 string for JavaScript test
1451
- * Added requests's timestamp to calculate request work time
1452
- * Update base CleanTalk's PHP class
1453
-
1454
- = 2.1.2 =
1455
- * Improved perfomance for processing large comments (over 32kb size)
1456
- * Improved perfomance for bulk operations with comments in Comments panel
1457
- * Added feedback request with URL to approved comment
1458
-
1459
- = 2.0.2 =
1460
- * Fixed bug with JavaScript test and WordPress cache plugins
1461
-
1462
- = 2.0.1 =
1463
- * Added option "Publicate relevant comments" to plugin's options.
1464
- * Added descriptions to plugin options
1465
-
1466
- = 1.5.4 =
1467
- * Fixed HTTP_REFERER transmission to the servers
1468
- * Improved JavaScript spam test
1469
- * Optimized PHP code
1470
-
1471
- = 1.4.4 =
1472
- * Pingback, trackback comments has moved to manual moderataion
1473
- * Added transmission to the serves comment type and URL
1474
- * Post title, body and comments separated into individual data elements
1475
- * Added priority for matched words in the comment with post title
1476
- * Enabled stop words filtration as default option
1477
-
1478
- = 1.3.4 =
1479
- * Removed PHP debugging.
1480
-
1481
- = 1.3.3 =
1482
- * Added notice at admin panel about empty Access key in plugin settings
1483
- * Removed HTTP link to the site project from post page
1484
- * Removed unused options from settings page
1485
- * Tested up to WordPress 3.5
1486
-
1487
- = 1.2.3 =
1488
- * Fixed bug with session_start.
1489
-
1490
- = 1.2.2 =
1491
- * Plugin rename to CleanTalk. Spam prevent plugin
1492
- * Integration Base Class version 0.7
1493
- * Added fast submit check
1494
- * Added check website in form
1495
- * Added feedbacks for change comment status (Not spam, unapprove)
1496
- * Added function move comment in spam folder if CleanTalk say is spam
1497
- * Disable checking for user groups Administrator, Author, Editor
1498
- * Marked red color bad words
1499
-
1500
- = 1.1.2 =
1501
- * Addition: Title of the post attached to the example text in auto publication tool.
1502
- * Tested with WordPress 3.4.1.
1503
-
1504
- = 1.1.1 =
1505
- * HTTP_REFERER bug fixed
1506
-
1507
- = 1.1.1 =
1508
- * Added user locale support, tested up to WP 3.4
1509
-
1510
- = 1.1.0 =
1511
- * First version
1512
-
1513
-
1514
- == Upgrade Notice ==
1515
- = 5.130 November 14 2019 =
1516
- * Fix: JetPack contact form JS check.
1517
- * FIx: Iphorm AJAX form.
1518
- * Fix: Paid Memberships Pro fix.
1519
- * Fix: Divi theme contact form fix.
1520
- * Integration: Paid Memberships Pro.
1521
- * Integration: Elementor Pro page builder forms.
1522
- * Improved: Compatibility with different server.
1523
-
1524
- = 5.129.1 November 5 2019 =
1525
- * Fix: WooCommerce order detecting.
1526
-
1527
- = 5.129 October 30 2019 =
1528
- * Upd: Localize updated.
1529
- * Fix: Direct $_SERVER access replaced.
1530
- * Integration: The 7 theme contact form.
1531
- * Fix: Minor improvements and bug fixes.
1532
- * Mod: Putting site in maintenance mode during plugin update.
1533
-
1534
- = 5.128.1 October 23 2019 =
1535
- * Fix: Fatal error when using buffer output.
1536
- * Fix: Translate domain for errors.
1537
- * Code: Fix spelling in function name.
1538
- * Fix: JS disabled error.
1539
- * Upd: Comment edit screen updated.
1540
- * Fix: Cleantalk\Arr::search() fixed.
1541
-
1542
- = 5.128 October 17 2019 =
1543
- * Mod: Users check - functionality updated.
1544
- * Fix: Users check - dates format updated.
1545
- * Mod: Comments check - functionality updated.
1546
- * Fix: Comments check - dates format updated.
1547
- * Fix: Fields exclusion fixed.
1548
- * Fix: Notice fixed.
1549
- * Fix: Cleantalk/Antispam/API.
1550
- * Fix: Minor improvements and bug fixes.
1551
-
1552
- = 5.127.4 October 13 2019 =
1553
- * Mod: Automatically decrease amount of checked users by one request if an error occurs.
1554
- * Fix: Security issue.
1555
- * Fix: Static JS key.
1556
-
1557
- = 5.127.3 October 8 2019 =
1558
- * Fix: Errors during registration.
1559
-
1560
- = 5.127.2 October 8 2019 =
1561
- * Integration: SeedProd Coming Soon Page Pro.
1562
- * Fix: WooCommerce double reuqests.
1563
- * Fix: Static JS key.
1564
-
1565
- = 5.127.1 October 7 2019 =
1566
- * Fix: WPMS settings logic.
1567
- * Using default database storage engine for tables.
1568
-
1569
- = 5.127 September 30 2019 =
1570
- * Fix: Delete redirect notice on external forms
1571
- * Fix: Storing spam for 15 days.
1572
- * Fix: correct DiVi display message.
1573
- * Integration: Ultimate Members.
1574
- * Mod: Setting "Use static JS key" switched to "Auto" if it was "No". Default is "Auto".
1575
- * Mod: Moving White Label option to main site settings.
1576
- * New: Use static JS key if cache plugin detected.
1577
- * New: Settings for URLs, fields, roles exclusions.
1578
- * New: Regular Expressions support in URLs, fields exclusions.
1579
- * New: Send validation errors on standard registration form.
1580
- * Updater: Move exclusions from global variable to settings.
1581
- * Deprecated: IP exclusions.
1582
-
1583
- = 5.126 September 9 2019 =
1584
- * Spam protection improved!
1585
- * Integration: Option wheel.
1586
- * Mod: Improved Email detection.
1587
- * Mod: Improved IP detection.
1588
- * Fix: Too large database table with alternative sessions.
1589
- * Fix: Exception for WooCommerce AJAX.
1590
- * Fix: API key validation.
1591
- * Minor fixes.
1592
-
1593
- = 5.125 August 26 2019 =
1594
- * Fix: PHP Notices.
1595
- * Fix: Auto update.
1596
- * Fix: Displaying protection status for IP license.
1597
- * Fix: prevent capturing buffer for XMLRPC requests (check_external functionality).
1598
- * Fix: API key validating.
1599
- * New: Complete deactivation setting.
1600
-
1601
- = 5.124.1 August 8 2019 =
1602
- * Fix: Error on PHP 5.3.
1603
-
1604
- = 5.124 August 8 2019 =
1605
- * Spam protection improved.
1606
- * Fix: SpamFireWall local database counter on Multisite.
1607
- * Fix: Caldera Forms integration.
1608
- * Fix: Settings "Use AJAX for JS check" description.
1609
- * Fix: Formidable integration.
1610
- * New: External forms check now independed from JavaScript.
1611
- * New: Setting Protect external - capture buffer.
1612
- * New: QuForm integration.
1613
-
1614
- = 5.123 July 25 2019 =
1615
- * Fix: Plenty of minor fixes.
1616
- * Fix: wpDiscuz integration.
1617
- * Fix: Integration with bbPress.
1618
- * Fix: New comment email notification.
1619
- * New: Follow-Up Emails integration.
1620
- * Fix: Woocommerce integration.
1621
- * Fix: Spelling.
1622
-
1623
- = 5.122 July 10 2019 =
1624
- * Spam Protection improved.
1625
- * Fix: Error while checking account status.
1626
- * Fix: Conflict with Elementor Pro.
1627
- * Fix: Integration with Ninja Forms.
1628
- * Fix: Integration with Formidable.
1629
- * New: Detecting mobile devices.
1630
- * New: Integration for Easy Forms for Mailchimp.
1631
-
1632
- = 5.121 June 26 2019 =
1633
- * Fix: Translation typos.
1634
- * Fix: Woocommerce integration.
1635
- * Fix: Catching admin in AJAX queries.
1636
- * Mod: Session table (cleantalk_sessions) issue.
1637
- * Mod: Spam protection improved.
1638
- * Integration: Wilcity theme custom registration validation enabled
1639
- * New: Option "Use static JS key".
1640
-
1641
- = 5.120.2 June 17 2019 =
1642
- * Fix: WPForms integration.
1643
- * Fix: Translation and spelling.
1644
- * Fix: Minor PHP error
1645
-
1646
- = 5.120.1 June 6 2019 =
1647
- * Mod: Description for Search form protection.
1648
- * Fix: CSS and JS attachment.
1649
- * Fix: Undefined index error.
1650
-
1651
- = 5.120 June 5 2019 =
1652
- * Fix: bbPress false positives.
1653
- * Fix: SpamFireWall check condition.
1654
- * Fix: SpamFireWall block page.
1655
- * Fix: Catch admin action via search form test.
1656
- * Fix: Catch admin action (AJAX).
1657
- * Mod: Using minified version of JS and CSS.
1658
- * Mod: Date format in statistics.
1659
-
1660
-
1661
- = 5.119.1 May 30 2019 =
1662
- * Fix: Helper class error.
1663
-
1664
- = 5.119 May 30 2019 =
1665
- * Fix: No more second request after registration.
1666
- * Fix: Activation hook.
1667
- * Fix: Alternative sessions. Clear table.
1668
- * Fix: Stop capchuring AJAX requests in admin area.
1669
- * Fix: Spelling.
1670
- * Fix: Registration cookies set.
1671
- * Mod: SFW exdtended die page when testing.
1672
- * Mod: User-agent modified.
1673
- * New: Test search queries for spam.
1674
- * New: Gathering and output statistics.
1675
-
1676
- = 5.118.4 May 13 2019 =
1677
- * Fix: SFW cookie. Set correct domain for subdomains.
1678
- * Fix: SFW update.
1679
- * Fix: IP detection.
1680
- * Fix: Triggering AJAX check in backend.
1681
- * Fix: Zero submit time on few forms.
1682
-
1683
- = 5.118.3 April 29 2019 =
1684
- * Fix: Spam statistics in dashboard widget.
1685
- * Fix: IP detection.
1686
- * Fix: Double check AJAX integrated forms like Ninja Forms.
1687
- * Fix: Use url exclusions for AJAX forms.
1688
-
1689
- = 5.118.2 April 25 2019 =
1690
- * Mod: Spam filtration quality improved.
1691
- * Mod: Store SFW cookie for 30 days.
1692
- * Mod: Server IP added to connection report.
1693
- * Fix: spam_stat is not defined.
1694
-
1695
- = 5.118.1 April 19 2019 =
1696
- * Fix: Fatal error.
1697
- * Mod: Spam protection improved on registrations.
1698
-
1699
- = 5.118 April 19 2019 =
1700
- * Fix: Cookies on registration page.
1701
- * Fix: Update fix.
1702
- * Fix: Wordpress built-in API.
1703
- * Fix: WooCommerce checkout form.
1704
- * Fix: UpdraftPlus. Saving settings.
1705
- * Fix: Convert Pro saving settings.
1706
- * Fix: UTF-8 Converting.
1707
- * Fix: GDPR notice.
1708
- * Fix: cleantalk_sessions table size reduced.
1709
- * Mod: Localization.
1710
- * Mod: Performance improved.
1711
- * Mod: SpamFierWall improvments.
1712
- * Mod: IP detection improved.
1713
- * Mod: JavaScript check rewised.
1714
- * New: Setting "Use alternative mechanism for cookies".
1715
-
1716
- = 5.117.1 April 5 2019 =
1717
- * Fix: GDPR notice.
1718
- * Fix: noCacheJS localization.
1719
- * Fix: Fatal error when updating.
1720
-
1721
- = 5.117 March 27 2019 =
1722
- * New: Update logic runs on all pages.
1723
- * New: Integration for Ajax Contact Forms plugin.
1724
- * New: Notification for users groups about new comments.
1725
- * New: SFW die page. Show browser and page creation time.
1726
- * Fix: Huge bug in Cleantalk.php connected with servers changing.
1727
- * Fix: Check AJAX requests for logged in users.
1728
- * Fix: Deleting debug in JS.
1729
- * Fix: Validating settings before saving.
1730
-
1731
- = 5.116.3 March 14 2019 =
1732
- * Fix: "Headers already sent" error.
1733
- * Fix: Images paths.
1734
- * Fix: IP detection.
1735
- * Fix: Skip lost password form check
1736
- * Fix: Skip mobile requests (push settings)
1737
- * Fix: PHP notice when detecting BuddyPress template.
1738
-
1739
- = 5.116.2 March 7 2019 =
1740
- * Fix: Creating tables in MariaDB.
1741
-
1742
- = 5.116.1 March 6 2019 =
1743
- * Fix: Creating tables in DB.
1744
- * Fix: PHP Warning in spam statistics widget.
1745
-
1746
- = 5.116 March 6 2019 =
1747
- * Spam filtration quality improved.
1748
- * New: Storing visited URLs.
1749
- * New: Check before validation Contact Form 7, Comments, Jetpack comments.
1750
- * New: Get validation result for Contact Form 7, Comments, Jetpack comments.
1751
- * Fix: ES add subscriber.
1752
- * Fix: IP detection.
1753
-
1754
- = 5.115.2 February 27 2019 =
1755
- * Fix: False positives spam detection in WP Forms and Contact Form 7.
1756
-
1757
- = 5.115.1 February 16 2019 =
1758
- * Fix: SpamFireWall's false positives.
1759
-
1760
- = 5.115 February 14 2019 =
1761
- * Fix: Http_only flag for backend cookies.
1762
- * Fix: Spam filtration improved.
1763
- * New: IP detection improved.
1764
- * Fix: SpamFirewall update speeded up.
1765
- * New: False positives with caching solutions decreased.
1766
- * New: Opportunity to use Wordpress HTTP API to connect with Cloud.
1767
-
1768
- = 5.114 January 31 2019 =
1769
- * New: Setting "Use Wordpress HTTP API" as alternative to CURL. Disabled by default.
1770
- * Fix: Formidable: Adding small JS check when adding JS_key.
1771
- * Mod: layout of settings page.
1772
- * Mod: Banner logic altered.
1773
-
1774
- = 5.113.2 January 18 2019 =
1775
- * Fix: "Settings" link returns to plugin page.
1776
-
1777
- = 5.113.1 January 17 2019 =
1778
- * Fix: Conflict with CityTours theme.
1779
- * Fix: Error for Wordperss lower 4.7.
1780
- * Add: Spam protection: "Validate email for existance".
1781
-
1782
- = 5.113 January 16 2019 =
1783
- * Fix: Fast and Simple Contact Form.
1784
- * Fix: Settings layout.
1785
- * Fix: Error with WooCommerce Quickview.
1786
- * Fix: Bitrix24 contact form.
1787
- * Fix: Request time decreased.
1788
- * Fix: Requesting account status when activating for IP licenses.
1789
- * Add: Precise AJAX request detection.
1790
- * Spam protection improved.
1791
-
1792
- = 5.112 December 21 2018 =
1793
- * Fix: Woocommerce AJAX checkout form.
1794
- * Fix: Profile Builder Pro.
1795
- * Fix: DB structure improvements for WPMS.
1796
- * Spam filtering quality improved.
1797
- * Minor fixes.
1798
-
1799
- = 5.111 December 13 2018 =
1800
- * Fix: Double request in JetPack contact form.
1801
- * Fix: Email notification about spam registration.
1802
- * Fix: Links button for feedback comments.
1803
- * Fix: Mail notification about plugin error.
1804
- * Fix: Key field output.
1805
- * Minor fixes.
1806
-
1807
- = 5.110 November 29 2018 =
1808
- * Integration: BuddyPress ActivityWall spam protection.
1809
- * Add: Support different BuddyPress templates on activity wall.
1810
- * Fix: Admin/moderator checking for validate post data.
1811
- * Add: GDPR setting for shortcode.
1812
- * Fix: Increase timeout for spam_check_cms to 15.
1813
-
1814
- = 5.109 November 15 2018 =
1815
- * Fix: Added URL and IP exclusions to Contact Form 7.
1816
- * Fix: js error when responseText is not exists
1817
- * Fix: Sitename when getting key automatically under WPMS.
1818
- * Mod: SpamFireWall is now fully compatible with WPMS.
1819
- * Mod: Setting 'Tell others about CleanTalk' was deleted.
1820
- * Mod: Protection from spam improved.
1821
-
1822
- = 5.108.1 November 8 2018 =
1823
- * Fix: Errors with integration class.
1824
-
1825
- = 5.108 November 7 2018 =
1826
- * Fix: White label mode.
1827
- * Fix: SpamFireWall now can be disabled.
1828
- * Fix: Layout.
1829
- * Integration: WPForms.
1830
- * Add: Message about block for all no integrated AJAX forms.
1831
- * Add: Displaying account name near api key.
1832
-
1833
- = 5.107 October 29 2018 =
1834
- * Fix: Ninja Forms integration.
1835
- * Fix: Cookie usage.
1836
- * Add: Capturing AJAX responses from non integrated forms.
1837
- * Spam protection improved.
1838
- * Minor fixes.
1839
-
1840
- = 5.106 October 11 2018 =
1841
- * Spam filtration improved.
1842
- * New: White Label mode.
1843
- * Modification: Warning message about test on SpamFireWall die page.
1844
- * Integration: WP Maintenance Mode.
1845
- * Fix: S2Member.
1846
- * Fix: JavaScript attachments reconsidered.
1847
- * Fix: Admin banners layout.
1848
- * Fix: Minor layout fixes.
1849
-
1850
- = 5.105 September 26 2018 =
1851
- * Integration: Now bloking spam for QAEngine questions.
1852
- * Fix: Async http__request call.
1853
- * Fix: Unnecessary get_antispam_report_breif method call.
1854
- * Layout: Hide "Do you like Cleantlak?" when key is not ok.
1855
- * Layout: Minor fixes.
1856
-
1857
- = 5.104 September 18 2018 =
1858
- * Fix: Error when saving settings.
1859
- * Fix: Trying update plugin plugin for the first installation.
1860
- * Fix: Update system.
1861
- * Fix: Errors output.
1862
- * Fix: Plugin's settings under WPMS.
1863
- * Fix: SpamFireWall update.
1864
- * Fix: The server change system repaired.
1865
- * Mod: Cron saving tasks improved.
1866
-
1867
- = 5.103.1 September 14 2018 =
1868
- * Fix: Error when saving settings.
1869
- * Fix: Error when getting key automatically.
1870
-
1871
- = 5.103 September 13 2018 =
1872
- * Fix: Gravity Forms response message.
1873
- * Fix: SpamFireWall redirect to 404 page.
1874
- * Major anti-spam plugin improvement.
1875
- * Recombined setting page.
1876
- * Added error notification.
1877
- * Mod: S2 Members integration.
1878
- * Mod: Improved remote calls.
1879
-
1880
- = 5.102 August 29 2018 =
1881
- * Fix: Users and comments check.
1882
- * Fix: Update from 5.70 or previous versions.
1883
- * Fix: GDPR public JS-script.
1884
- * Fix: Dashboard widget JS scripts attachment.
1885
- * Fix: WooCommerce "Place order" action.
1886
- * Mod: Notification logic altered.
1887
- * Mod: Users check table now has 'Signed up' column.
1888
- * Minor fixes.
1889
-
1890
- = 5.101 August 10 2018 =
1891
- * Fix: Set cookie only for non-dashboard pages.
1892
- * Fix: Dashboard widget JS error.
1893
- * Fix: JavaScript error for some environment.
1894
- * Mod: Antispam protection accelerated for some pages.
1895
-
1896
- = 5.100 July 30 2018 =
1897
- * Fix: JavaScript dependencies.
1898
-
1899
- = 5.99.1 July 17 2018 =
1900
- * IP detection fixed and improved.
1901
-
1902
- = 5.99 July 10 2018 =
1903
- * Fix: WooCommerce false positives.
1904
- * Fix: SpamFireWall IP detection.
1905
- * Minor fixes.
1906
-
1907
- = 5.98 June 27 2018 =
1908
- * Fix: WooCommerce: Exclusion.
1909
- * Fix: Public GDPR JS code.
1910
- * Minor fixes.
1911
-
1912
- = 5.97 June 7 2018 =
1913
- * Fix: Update system.
1914
- * Fix: Feedback from public page (admin only).
1915
- * Fix: Users and comment check: API error.
1916
- * Fix: Too many negative reports. (Too big ct_data option)
1917
- * Fix: SpamFireWall: Infinite redirection on the blocking page.
1918
- * Minor fixes.
1919
-
1920
- = 5.96 May 22 2018 =
1921
- * Fix: Update system.
1922
- * Mod: Reset all counters button in admin bar.
1923
- * Mod: GDPR compliance.
1924
- * Minor fixes.
1925
-
1926
- = 5.95.1 May 3 2018 =
1927
- * Fix: "Get key automatically" button display logic.
1928
- * Fix: PHP notices.
1929
-
1930
- = 5.95 May 2 2018 =
1931
- * Spam filtration improved.
1932
- * Fix: Public widget layout.
1933
- * Fix: Connection reports output.
1934
- * Minor fixes.
1935
-
1936
- = 5.94 April 23 2018 =
1937
- * Mod: Async load option for JS.
1938
- * Mod: JS scripts loading is conditional.
1939
- * Fix: IP detection.
1940
- * Fix: IP detection.
1941
- * Fix: Javascript error.
1942
-
1943
- = 5.93.1 April 9 2018 =
1944
- * Fix: Fatal error on PHP 5.5 or lower.
1945
-
1946
- = 5.93 April 9 2018 =
1947
- * Fix: SpamFirewall IP detection.
1948
- * Fix: Contact Form 7. False positives.
1949
- * Mod: Autoupdate function improved.
1950
- * Minor fixes.
1951
-
1952
- = 5.92.2 March 23 2018 =
1953
- * Fix: Error if cURL extension is disabled.
1954
-
1955
- = 5.92.1 March 23 2018 =
1956
- * Fix: Spelling
1957
- * Fix: Fatal error if cURL extension is disabled.
1958
-
1959
- = 5.92 March 22 2018 =
1960
- * IP detection improved.
1961
- * Fix: SSL connection.
1962
- * Fix: False positives spam detection in Contact Form 7.
1963
- * Minor fixes.
1964
-
1965
- = 5.91 March 15 2018 =
1966
- * Fix: Errors for PHP compiled without XML support.
1967
- * Fix: Spelling and translation.
1968
- * Stability increased.
1969
- * Minor fixes.
1970
-
1971
- = 5.90 March 7 2018 =
1972
- * Improvement: Better IP recognition in Spam FireWall.
1973
- * Fix: Gravity Froms blocking message.
1974
- * Security improvments.
1975
- * Minor fixes.
1976
-
1977
- = 5.89 February 21 2018 =
1978
- * Improved spam filtration quality.
1979
- * Improved compatibility.
1980
- * Public widget: Styles and referral link added.
1981
- * Dashboard widget: revised and fixed.
1982
- * Minor fixes.
1983
-
1984
- = 5.88 February 12 2018 =
1985
- * Integration: ConvertPro.
1986
- * Improvement: Search for visitor's names in request.
1987
- * Fix: Contact Form 7 message recognition.
1988
- * Preparation for the remote plugin update.
1989
- * Minor fixes.
1990
-
1991
- = 5.87 February 2 2018 =
1992
- * Filtration quality improved.
1993
- * Fix: WP Foto Vote downloading images.
1994
- * Fix: Fatal error for unsupported PHP 5.2.
1995
- * Fix: Formidable Forms improved spam filtration.
1996
-
1997
- = 5.86 January 25 2018 =
1998
- * Fix: High CPU load with wp-ajax.php.
1999
- * Fix: Mailpoet: Newsletter.
2000
- * Fix: Gravity: Forms standardization for input fields.
2001
- * Fix: ajax hook checks data for contact form.
2002
- * Fix: UTF8 character in requests.
2003
-
2004
- = 5.85 January 11 2018 =
2005
- * Fix: Fast Secure contact form spam block message.
2006
- * Fix: IP license status.
2007
- * Layout: Dashboard widget description altered.
2008
-
2009
- = 5.84 December 26 2017 =
2010
- * Integration: PeepSo contact form
2011
- * Repared: Feedback from comments page.
2012
- * Fix: mb_* functions used only if exists.
2013
- * Fix: Gravity forms: Multi-page form logic repared.
2014
- * Fix: Gravity forms: AJAX form logic repared.
2015
- * Minor fixes.
2016
-
2017
- = 5.83.2 December 19 2017 =
2018
- * Fix: Error in base class.
2019
-
2020
- = 5.83.1 December 19 2017 =
2021
- * Fix: CDN IP detection.
2022
-
2023
- = 5.83 December 19 2017 =
2024
- * Improving: Stability and compatibility.
2025
- * Improving: Spam protection.
2026
- * Fix: Comments logic filtration.
2027
- * Fix: Admin bar counter.
2028
- * Minor errors fixes.
2029
-
2030
- = 5.82.1 December 7 2017 =
2031
- * Fixed minor error with attaching JS and CSS files.
2032
-
2033
- = 5.82 December 4 2017 =
2034
- * Plugin doesn't use PHP sessions anymore.
2035
- * Bug fixes.
2036
- * Improved update logic.
2037
-
2038
- = 5.81 November 22 2017 =
2039
- * Fixed error with "Show/Hide key" button.
2040
- * Slightly improved spam protection for all forms.
2041
- * Small errors fixes.
2042
-
2043
- = 5.80 November 3 2017 =
2044
- * Spam protection improved.
2045
- * Improved filtration quality for WooCommerce checkout.
2046
- * Minor fixes for Spam FireWall.
2047
-
2048
- = 5.79 October 26 2017 =
2049
- * Spam protection improved.
2050
- * Fixed issue with existing spam comments check.
2051
- * Added posibility to exclude IP from check.
2052
- * Minor fixes.
2053
-
2054
- = 5.78 October 16 2017 =
2055
- * Improved compatibility with themes. Changed core functions prefix.
2056
- * Fixed issue with WooCommerce checkout.
2057
- * Spam protection improved.
2058
- * Minor fixes.
2059
-
2060
- = 5.77 October 2 2017 =
2061
- * Connection report's system.
2062
- * Integration for CouponXXL Theme.
2063
- * Fixed issue with mb_* functions.
2064
- * Banners logic updated.
2065
-
2066
- = 5.76 September 20 2017 =
2067
- * Fixed issue with Spam FireWall and caching plugins.
2068
- * Banners logic updated.
2069
-
2070
- = 5.75 September 15 2017 =
2071
- * Pause feature for users/comments spam check.
2072
- * Improved protection from spam.
2073
- * Small fixes.
2074
-
2075
- = 5.74.2 September 2 2017 =
2076
- * Fix for users spam check for PHP 5.3 and lower.
2077
-
2078
- = 5.74.1 September 2 2017 =
2079
- * Fix for the update system and cloud communication.
2080
- * Added possibility to check users and comments for spam with a specific date range.
2081
-
2082
- = 5.74 August 31 2017 =
2083
- * Users and comments spam check: Two check types (fast and accurate).
2084
- * Fix for WooCommerce checkout test.
2085
- * Minor fixes.
2086
-
2087
- = 5.73 August 11 2017 =
2088
- * Fix for spam check for already existed users and comments.
2089
- * Spam FireWall updated.
2090
- * Layout fix for BT Comments.
2091
- * Minor fixes.
2092
-
2093
- = 5.72 July 27 2017 =
2094
- * Improved spam check for existed users and comments.
2095
- * Minor fixes.
2096
-
2097
- = 5.71 July 20 2017 =
2098
- * Improved spam protection for external forms.
2099
- * Optimization.
2100
- * Minor fixes.
2101
-
2102
- = 5.70.2 July 17 2017 =
2103
- * Fix for Spam FireWall for Multisite.
2104
-
2105
- = 5.70.1 July 17 2017 =
2106
- * Fix for Spam FireWall.
2107
- * Spam detection improved.
2108
-
2109
- = 5.70 July 13 2017 =
2110
- * New updater logic.
2111
- * Self cron system.
2112
- * Improved AMP compatibility.
2113
- * Optimization.
2114
- * Fixed users and comments spam check.
2115
- * Fixed layout for Comment's feedback from public page.
2116
- * Updated Spam FireWall.
2117
- * SFW: Spam FireWall counter now work in real-time.
2118
- * SFW: Improved compatibility with different Data Bases.
2119
-
2120
- = 5.69 July 3 2017 =
2121
- * Reviewer - integration.
2122
- * Optimization for Users and Comments check for big databases.
2123
- * Errors fixes.
2124
- * Improved protection from spam.
2125
-
2126
- = 5.68 June 22 2017 =
2127
- * Contact Form for WordPress - Ultimate Form Builder Lite - integration.
2128
- * Contact Bank - Contact Forms Builder - integration.
2129
- * Smart Forms - integration.
2130
- * cformsII - integration.
2131
- * Contact Form by Web-Settler - integration.
2132
- * Error fixes.
2133
-
2134
- = 5.67.3 June 9 2017 =
2135
- * Fixed JS attachment error.
2136
-
2137
- = 5.67.2 June 5 2017 =
2138
- * Fixed error with IP determination.
2139
-
2140
- = 5.67.1 June 4 2017 =
2141
- * Fixed JS error in 5.67 version.
2142
- * Integrations: Enfold theme, Convertplug.
2143
- * Links to check for Emails/IP for spam.
2144
- * Control comments and feedback about them from public post's page.
2145
- * Improved connection stability with cloud service.
2146
- * Spam protection improved.
2147
- * Other small fixes.
2148
-
2149
- = 5.67 June 1 2017 =
2150
- * Integrations: Enfold theme, Convertplug.
2151
- * Links to check for Emails/IP for spam.
2152
- * Control comments and feedback about them from public post's page.
2153
- * Improved connection stability with cloud service.
2154
- * Spam protection improved.
2155
- * Other small fixes.
2156
-
2157
- = 5.66 May 23 2017 =
2158
- * Spam protection improved.
2159
- * Major fixes for users and comments spam check.
2160
- * Added feedback from Wordpress comments list.
2161
- * Fix for "internal forms check" option.
2162
- * Fixed issue with caching Spam FireWall die page.
2163
- * Other small fixes.
2164
-
2165
- = 5.65 May 16 2017 =
2166
- * Fix for PayPal redirecton.
2167
- * Fixed issue with empty query for bulk comments test.
2168
- * Added protection for Enfold contact form.
2169
- * Ninja forms integration.
2170
-
2171
- = 5.64 April 26 2017 =
2172
- * Integration for Facebook registrations.
2173
- * Small fixes for WPMS.
2174
- * Fix for Activecampaign service.
2175
- * Fix for check spam users.
2176
- * Fixed rare notice Notice: Undefined index: REQUEST_URI
2177
-
2178
- = 5.63 April 20 2017 =
2179
- * Fix for the dashboard spam stat widget.
2180
- * Added translation posibility for all text.
2181
-
2182
- = 5.62 April 17 2017 =
2183
- * Fix for the dashboard spam statistics widget.
2184
- * Fix for users spam check.
2185
- * Small appearance changes.
2186
-
2187
- = 5.61 April 6 2017 =
2188
- * Improved filtration.
2189
- * Additional logic for the form recognizing.
2190
- * Integration: Divi Theme Contact Form.
2191
- * Fix: Gravity Forms multipages forms.
2192
- * Stat Widget: Minor fixes.
2193
- * Added possibility to download results of the users check in CSV format.
2194
- * Alteration for settings page (footer).
2195
-
2196
- = 5.60.1 March 29 2017 =
2197
- * Fixed error function 'locale_get_display_region' no exists.
2198
-
2199
- = 5.60 March 29 2017 =
2200
- * Added main dashboard widget with spam sctivity stats.
2201
- * Mailster - integration.
2202
- * Base class updated.
2203
-
2204
- = 5.59 March 24 2017 =
2205
- * Users/comments check fix.
2206
- * Plugin's name changed to Anti-Spam by CleanTalk.
2207
- * Trial banner is dismissable. Disapear for 24h or till logout.
2208
- * Settings modified (Auto testing failed warning).
2209
- * Mailing(inactive key) interval increased to 6 hours.
2210
-
2211
- = 5.58.6 March 16 2017 =
2212
- * Fix for Ninja forms (protection updated).
2213
- * Fix for QA Theme.
2214
- * Fix for RSVP form.
2215
- * Setting changes (Spam FireWall).
2216
- * Improved debug section.
2217
- * Improved gathering data function.
2218
- * Minor fixes.
2219
-
2220
- = 5.58.5 March 6 2017 =
2221
- * Minor backend fix.
2222
-
2223
- = 5.58.4 March 6 2017 =
2224
- * Users check fix (redirect after the check).
2225
- * Fixed PHP Notice "HTTP_REFERER" is unset.
2226
- * Updated Notice logic.
2227
-
2228
- = 5.58.3 February 28 2017 =
2229
- * Bitrix24 Contact form integration.
2230
- * Users/comments check fix.
2231
- * Spam sorting updated.
2232
- * Banner showing logic.
2233
-
2234
- = 5.58.2 February 17 2017 =
2235
- * Cron fix for daily report.
2236
-
2237
- = 5.58.1 February 16 2017 =
2238
- * Minor fixes.
2239
-
2240
- = 5.58 February 15 2017 =
2241
- * Work without access key
2242
- * Bitrix24 contact integration
2243
- * Issues fixes
2244
-
2245
- = 5.57.1 February 8 2017 =
2246
- * Fix for notice logic.
2247
-
2248
- = 5.57 February 8 2017 =
2249
- * Setting page changes.
2250
- * Bug fixes for WooCommerce.
2251
- * Spam FireWall filters only GET requests.
2252
- * Optimization.
2253
- * Minor and major fixes.
2254
-
2255
- = 5.56.1 January 25 2017 =
2256
- * Minor fixes
2257
-
2258
- = 5.56 January 19 2017 =
2259
- * Integrations: MailChimp Premium, Profile Press.
2260
- * Changes comments flow.
2261
- * FireWall updater fix.
2262
- * Users check optimization.
2263
-
2264
- = 5.55 December 23 2016 =
2265
- * Integrations: Caldera Forms, Visual Form Builder.
2266
- * Fix for different 'cookies' header names.
2267
- * Fixed user deletion.
2268
-
2269
- = 5.54 December 12 2016 =
2270
- * Integrations: AmoForms, Contact Form Clean and Simple.
2271
- * Comments check logic refreshed.
2272
- * Registration JS error fix.
2273
- * Users check fix.
2274
- * Fix for translation system.
2275
- * Minor fixes.
2276
-
2277
- = 5.53.1 December 9 2016 =
2278
- * Minor layout fixes.
2279
-
2280
- = 5.53 November 28 2016 =
2281
- * Addition warning before deleting users.
2282
- * Spam FireWall is enabled by default.
2283
- * Usernoise modal feedback / contact form : integration.
2284
- * Translations.
2285
- * Optimization.
2286
- * Fixes.
2287
-
2288
- = 5.52.1 November 14 2016 =
2289
- * Users and comments check: Using new API method.
2290
- * Quick Contact From: Integration via "Custom Contact Forms" setting.
2291
- * JavaScript filtration improved.
2292
- * Translation changes.
2293
- * Optimized JavaScript code.
2294
-
2295
- = 5.51 November 2 2016 =
2296
- * Added protection for internal forms
2297
- * Immediate spam check for comments and users from WP dashboard
2298
- * Optimized code
2299
-
2300
- = 5.50.1 October 24 2016 =
2301
- * Improved filtration in contact forms.
2302
- * Spam FireWall: Fixed issue with SFW logs
2303
- * Skipping service fields: Fast Secure Contact Froms, QU Forms, Custom Contact Forms
2304
-
2305
- = 5.50 October 20 2016 =
2306
- * Custom contact forms: integration.
2307
- * Pirate Forms: integration.
2308
- * PHP 7 compatibility: Deleted third-party JSON library and dependences.
2309
- * PHP 7 compatibility: Fixed end of lines.
2310
- * YOAST Seo: Fixed PHP warnings.
2311
- * Spam FireWall: Minor fix for Spam FireWall counter.
2312
- * Only admin could access to CleanTalk dashboard (exclude Authors an Editors).
2313
- * Improved filtration in contact forms.
2314
-
2315
- = 5.49.2 October 5 2016 =
2316
- * Second Fix for database error. Stable version.
2317
-
2318
- = 5.49.1 October 5 2016 =
2319
- * Fixed database error.
2320
-
2321
- = 5.49 October 3 2016 =
2322
- * Spam FireWall feature: Class upgraded.
2323
- * New feature: Delete links from approved comments.
2324
- * Settings: Grouped.
2325
- * Settings: Altered description fixed spelling mistakes.
2326
- * Settings: Added indicator for Spam FireWall.
2327
- * Admin bar: Added Spam FireWall counter
2328
- * Clean and Simple Contact Form: Direct integration.
2329
- * WooCommerce: Don't check password recovery form.
2330
- * WooCommerce Wishlists: Issue with check for Google bots.
2331
- * JetPack: contact form fix.
2332
- * Fixed and created the defaults for all CleanTalk options.
2333
- * Fixed spelling mistakes.
2334
-
2335
- = 5.48 September 15 2016 =
2336
- * buddyPress: Added private messages filtering. Doesn't check user if he has 3 or more messages in the "sentbox" and "inbox" folders.
2337
- * buddyPress: Added option in settings for private messages check.
2338
- * WooCommerce Wishlist: Added check for wishlists.
2339
- * Fixed issue with "check all post data" option.
2340
- * Improved filtering for Gravity Forms
2341
- * Mobile Assistant Connector fix
2342
- * Minor fixes.
2343
-
2344
- = 5.47 September 5 2016 =
2345
- * WooCommerce: direct integration for checkout form.
2346
- * WooCommerce Sensei: login form fix.
2347
- * bbPress: Added the check for topics and comments with stop_words
2348
- * bbPress: Skip check for admin in comments and topics
2349
- * UserPro: fixes. Request without field "shortcode"
2350
- * Contact Form 7: Bug fix.
2351
- * Spam FireWall: Optimized logs rotation.
2352
- * Updated inner functions (compatibility fix for PHP 5.4+)
2353
- * Fixed output of counters (without spamfirewall stats)
2354
- * Fixed spelling in settings
2355
- * Added "Delete from the list" button in comments spam check page
2356
- * Minor fixes.
2357
-
2358
- = 5.46 August 17 2016 =
2359
- * Fixed issue with admin bar links in WP Multi Network mode.
2360
- * Added "All time counter" and "Daily counter" into admin bar.
2361
- * Added settings to disable counters in admin bar.
2362
- * New style for "Get access key manually" button.
2363
-
2364
- = 5.45.2 August 4 2016 =
2365
- * Added Anti-Spam protection for Quick Event Manager.
2366
- * Improved bulk spam test for users. Now the plugin does not mark as Spam user, if the user IP address has spam activity more then 30 days ago.
2367
- * Fixed bulk spam test for comments. Previous version had a conflict between spam history for IP and Email.
2368
- * Minor fix function to get the API key.
2369
-
2370
- = 5.45.1 July 26 2016 =
2371
- * Fixed issue with missed spam messages, subscriptions.
2372
- * Improved bulk spam test for comments. Now the plugin will not mark as Spam comments, if a comment sender (IP address) has spam activity more then 30 days ago.
2373
-
2374
- = 5.45 July 21 2016 =
2375
- * Optimized bulk spam comments deletion.
2376
- * Turned off JavaScript anti-spam cookies if the option 'Set cookies' is turned off. It helps to avoid issues with Varnish.
2377
- * Added links to bulk spam comments&users removal tool.
2378
-
2379
- = 5.44.1 July 13 2016 =
2380
- * Optimized options getting code.
2381
- * Added the option 'Protect Logged in users' to do anti-spam tests for submissions by logged in users.
2382
-
2383
- = 5.43.2 June 30 2016 =
2384
- * Optimized anti-spam code for AJAX based contact forms.
2385
- * Fixed CSS layout of counters in Admin bar (issue with layout in IE11).
2386
-
2387
- = 5.43.1 June 23 2016 =
2388
- * Added agent version in requests to test a connection between the website and servers.
2389
- * Fixed issue with PHP notices in cleantalk-admin.php.
2390
-
2391
- = 5.43 June 22 2016 =
2392
- * Added spam protection for registrations via 'Login with AJAX' plug-in.
2393
- * Added a new counter to Admin bar that allows to count spam and approved submissions since last reset.
2394
- * Update the code that tests a connection between a website and CleanTalk's servers. New version doesn't generate submissions with email good@cleantalk.org.
2395
- * Fixed issue with spam protection for nested forms by Formidable plug-in.
2396
-
2397
- = 5.42 2016-06-15 =
2398
- * Added anti-spam protection for UserPro.
2399
- * Improved protection for Formidable forms + Varnish.
2400
- * Improved bulk search for spam accounts.
2401
- * Fixed spam protection for pages that contain multiple Formidable forms with same HTML ID.
2402
- * Optimized PHP code to be compatible with PHP 5.4 and above. The patch has been applied to Formidable forms spam protection.
2403
- * Minor fixes in plugin backend.
2404
-
2405
- = 5.41 2016-05-31 =
2406
- * Added HTTP response in plugin response if an network issue was happend.
2407
- * Optimized JavaScript anti-spam test for Formidable forms.
2408
- * Re-stored the option to auto redirect to plugn settings after plugin activation.
2409
- * Fixed issue with nasted fields in Formidable forms.
2410
-
2411
- = 5.40.3 2016-05-26 =
2412
- * Added option to encrypt (SSL) connection to CleanTalk anti-spam servers.
2413
- * Added JSON encoding for AJAX forms.
2414
- * Obfuscated private data for Custom contact forms option.
2415
- * Optimized bulk users check for spam over blacklists database.
2416
- * Fixed issue with lost connection to servers and JavaScript anti-spam test.
2417
- * Fixed issue with WordFence and collect_details.
2418
-
2419
- = 5.40.2 2016-05-11 =
2420
- * Improved account status check logic.
2421
- * Fixed issue with double anti-spam tests for FastSecure contact forms.
2422
- * Fixed issue with nulled JavaScript variables assigned from backend. This issue might me occurred on standart WordPress registration form and with failed JavaScript spam test.
2423
- * Fixed issue with session_start() with PHP sessions stored in memcache.
2424
-
2425
- = 5.40.1 2016-04-28 =
2426
- * Fixed issue with Super Socializer.
2427
- * Fixed issue with spam filtration for logged in users and Formidable forms.
2428
- * Added logging of all submitted fields for FastSecure contact form.
2429
-
2430
- = 5.40 2016-04-19 =
2431
- * Added JSON encoding for posts that were protected via Custom contact forms option. It allows show anti-spam logs in the Dashboard in more comfortable view.
2432
- * Minor fix in plugin settings.
2433
- * Fixed pagination for bulk users spam test.
2434
- * Fixed issue with unknown _SESSION.
2435
- * Fixed issue with double Spam FireWall database upload.
2436
-
2437
- = 5.39.1 2016-04-04 =
2438
- * Improved AJAX based anti-spam test with HTTPS backends.
2439
- * Added fix to avoid issue with empty ct_info_flag on JavaScript side.
2440
- * Added logic to exclude caching for Spam FireWall.
2441
- * Removed a condition to skip accounts with 127.0.0.1 IP in spam test for registered acconts.
2442
-
2443
- = 5.38.1 2016-03-24 =
2444
- * Fixed issue with PHP sessions and 'The session id is too long or contains illegal characters'.
2445
- * Removed Spam FireWall protection on /feed page.
2446
- * Disabled anti-spam tests for AJAX calls if the option 'Custom contact forms' is turned off.
2447
- * Added reject notice for spam submissions on Gravity forms with AJAX calls.
2448
-
2449
- = 5.37.3 2016-03-10 =
2450
- * Minor bug fixes. Added an option to support Varnish cache.
2451
-
2452
- = 5.36.1 2016-02-05 =
2453
- * Fixed bug, when users receive error after logging in
2454
-
2455
- = 5.36 2016-02-04 =
2456
- * Improved JavaScript anti spam protection
2457
- * Improvements for avoiding blocking requests from payment systems
2458
-
2459
- = 5.35 2016-01-14 =
2460
- * Added support for IP licensing
2461
- * Some anti-spam protection improvements
2462
- * Small backend interface fixes
2463
-
2464
- = 5.34.1 2015-12-17 =
2465
- * Fixed trackback antispam protection: improved checking mechanism
2466
- * Fixed problem with blocking MailPoet: added exclusions in spam checking algorithm
2467
-
2468
- = 5.34 2015-12-10 =
2469
- * Improved spam checking mechanism
2470
- * Added "Collect browser details" option for better antispam protection
2471
- * Fixed custom contact forms checking
2472
- * Minor translations fixes
2473
-
2474
- = 5.33.1 2015-12-04 =
2475
- * Fixed issue with BBPress
2476
- * Fixed anti-spam comments checking
2477
- * Fixed bulk checking
2478
- * Fixed trackback and pingback checking
2479
-
2480
- = 5.33 2015-12-01 =
2481
- * Backend interface fixes
2482
- * Improved Spam FireWall efficiency
2483
- * Improved performance of anti spam checking
2484
-
2485
- = 5.32 2015-11-26 =
2486
- * Added improvements for manual spam detection
2487
- * Fixed errors in backend
2488
- * Fixed bulk users anti spam checking
2489
- * Added indicator for bulk spam checking
2490
- * Added "Get access key automatically" feature
2491
-
2492
- = 5.31 2015-11-11 =
2493
- * Improved backend performance
2494
- * Fixed counter of approved/blocked spam attacks
2495
- * Fixed Spam Firewall logging
2496
-
2497
- = 5.30 2015-11-05 =
2498
- * Improved anti-spam checking
2499
- * Optimized performance
2500
- * Fixed blocking email preview in MailPoet
2501
- * Interface fixes
2502
- * WPMU interface fixes
2503
-
2504
- = 5.29 2015-10-27 =
2505
- * Optimized performance
2506
- * Fixed bugs in custom contact forms spam checking
2507
-
2508
- = 5.28.7 2015-10-23 =
2509
- * Major backend peromance fix.
2510
-
2511
- = 5.28 2015-10-16 =
2512
- * Fixed errors in anti-spam checking
2513
- * Restored options for spam checking registrations and cpmmon contact forms
2514
- * Improved anti spam defence
2515
- * Fixed problems with AJAX functionality in MailPoet, WooCommerce and other AJAX plugins
2516
-
2517
- = 5.27 2015-10-13 =
2518
- * Improvements in Spam FireWall feature
2519
- * Code optimization
2520
- * Backend interface fixes
2521
-
2522
- = 5.26 2015-10-05 =
2523
- * Added WordPress Language Pack support
2524
- * Removed spam checking for some autorisation plugins
2525
- * New experimental feature: Spam FireWall
2526
-
2527
- = 5.25.2 2015-09-28 =
2528
- * Fixed backend bug
2529
-
2530
- = 5.25.1 2015-09-28 =
2531
- * Added widget with anti-spam stats
2532
- * Added information about blocked spam attacks in admin dashboard and CleanTalk settings
2533
- * Added ability not to check comments for users with 3 or above allowed comments
2534
- * Added an option 'Help others known CleanTalk' to show information for site visitors, that your site is protected from spam by us
2535
- * Some backend interface settings
2536
- * Removed "CleanTalk connection test" query
2537
-
2538
- = 5.24.1 2015-09-16 =
2539
- * Fixed some errors in frontend
2540
- * Fixed access key saving
2541
-
2542
- = 5.24 2015-09-14 =
2543
- * Backend interface fixes
2544
- * Improvement for AJAX JavaScript spam checking
2545
-
2546
- = 5.23 2015-09-01 =
2547
- * Fixed BuddyPress profile search false positivities of anti-spam protection.
2548
- * Some interface fixes of bulk users & comments spam checking
2549
-
2550
- = 5.22 2015-08-26 =
2551
- * Fixed possible XSS issue for anti-spam test on third-party forms.
2552
-
2553
- = 5.21 2015-08-21 =
2554
- * Fixed bug with skipping spam submissions
2555
- * Fixed bug with receiving old user_token for viewing anti-spam stats
2556
- * Small backend fixes
2557
-
2558
- = 5.20 2015-08-15 =
2559
- * Fixed anti-spam stats in admin bar
2560
- * Fixed issue with skipping spam submissions
2561
- * Added some PHP-constants for advanced users
2562
-
2563
- = 5.19 2015-08-11 =
2564
- * New feature: anti-spam checking for registered users
2565
- * Fixed issue with AJAX JavaScript checking
2566
- * Fixed issue with SEO Yoast xml sitemaps.
2567
-
2568
- = 5.18 2015-08-04 =
2569
- * Fixed issue with user_token
2570
- * Added anti-spam API, see our FAQ
2571
-
2572
- = 5.17 2015-07-23 =
2573
- * Fixed infinite redirection after activation
2574
- * Minor backend fixes
2575
-
2576
- = 5.16 2015-07-22 =
2577
- * Fixed external services checking
2578
- * Fixed mass comments deletion
2579
- * Fixed AJAX anti-spam protection
2580
-
2581
- = 5.15 2015-07-16 =
2582
- * New feature: anti-spam protection for forms, that uses external services
2583
-
2584
- = 5.14 2015-07-03 =
2585
- * Added anti-spam protection for some themes and plugins
2586
- * Some backend fixes
2587
-
2588
- = 5.13 2015-06-12 =
2589
- * Closing notification for anti-spam renew
2590
- * Fixed bulk anti spam comment checking
2591
-
2592
- = 5.12 2015-06-01 =
2593
- * Added option for checking all post data for spam
2594
- * Some JavaScript protection improvements
2595
- * Added option for old JavaScript check (without AJAX)
2596
-
2597
- = 5.10 2015-05-25 =
2598
- * Fixed Javascript error on some forms
2599
-
2600
- = 5.9 2015-05-21 =
2601
- * Fixed Javascript error on CF7 and JetPack
2602
- * Some backend and frontent fixes
2603
-
2604
- = 5.8 2015-05-18 =
2605
- * Minor fixes
2606
-
2607
- = 5.7 2015-05-18 =
2608
- * Fixed French translation
2609
- * Fixed protection algorithm
2610
-
2611
- = 5.6 2015-05-11 =
2612
- * Fixed translation
2613
- * Fixed bulk comments anti-spam checking
2614
- * Added option for disabling anti spam stats in adminbar
2615
- * Some security fixes
2616
-
2617
- = 5.5 2015-04-29
2618
- * Fixed security issue
2619
-
2620
- = 5.4 2015-04-27 =
2621
- * Some interface and functionality changes in plugin settings page
2622
- * Added counter for anti-spam stats in admin bar
2623
-
2624
- = 5.3 2015-04-13 =
2625
- * Added anti-spam protection for Divi theme contact forms
2626
- * Added anti-spam protection for MyMail contact forms
2627
- * Added anti-spam protection for MailPoet Newsletters
2628
- * Some interface and functionality changes in backend
2629
-
2630
- = 5.2 2015-04-01 =
2631
- * Added link for anti-spam stats
2632
- * Added WP User Frontend Pro registration form protection
2633
-
2634
- = 5.10 2015-03-24 =
2635
- * Fixed site crash after installing 5.0 on some websites
2636
-
2637
- = 5.00 2015-03-24 =
2638
- * Added bulk comments checking for spam via CleanTalk blacklists
2639
- * Added anti-spam form protection for 'Ajax Login & Register'
2640
- * Fixed JetPack form protection
2641
-
2642
- = 4.24 2015-03-20 =
2643
- Added immediate spam protection activation.
2644
-
2645
- = 4.22 2015-03-17 =
2646
- * Added button for automatic spam protection key getting.
2647
-
2648
- = 4.21 2015-03-11 =
2649
- * Added license renew notification.
2650
-
2651
- = 4.20 2015-03-03 =
2652
- * German, Italian, Polish, Portuguese translations, minor code fixes.
2653
-
2654
- = 4.19 2015-02-24 =
2655
- * Increased JS keys lifetime.
2656
-
2657
- = 4.18 2015-02-17 =
2658
- * Bugfix - fixed bug with comments approvement, PayPal 'payment_status' and Akismet 'spam' status processing.
2659
-
2660
- = 4.17 2015-02-12 =
2661
- * New base class, divided code to 3 separate files - common, public and admin.
2662
-
2663
- = 4.16 2015-02-05 =
2664
- * New base class, fixed JetPack filters logics, optimized Formidable, bbPress, BuddyPress filters.
2665
-
2666
- = 4.15 2015-01-29 =
2667
- * Support of Contact Form 7 versions before 3.0.0, fixed global JS-vars and online notice cookie logics.
2668
-
2669
- = 4.14 2015-01-19 =
2670
- * Removed deprecated option from comment approvement code.
2671
-
2672
- = 4.13 2014-12-29 =
2673
- * Not spam comments auto approvement bug fix.
2674
-
2675
- = 4.12 2014-12-29 =
2676
- * Plugin backend minfor bug fixes.
2677
-
2678
- = 4.11 2014-12-22 =
2679
- * Major changes in spam protection algorithms.
2680
-
2681
- = 4.10 2014-12-10 =
2682
- * Minor improvements for custom contact/registration/subscribe forms.
2683
-
2684
- = 4.9 2014-11-24 =
2685
- * Minor bug fix for Contact form 7.
2686
-
2687
- = 4.8 2014-11-19 =
2688
- * Improved anti-spam protection for BuddyPress registrations and custom contact forms.
2689
-
2690
- = 4.7 2014-11-16 =
2691
- * Fixed JavaScript antispam test for FastSecure contact form.
2692
-
2693
- = 4.6 2014-11-11 =
2694
- * Minor changes in anti-spam logic for BuddyPress registrations, contact forms and bbPress guest posting.
2695
-
2696
- = 4.5 2014-11-04 =
2697
- * Bug fixes for Contact form 7 and bbPress guests posting.
2698
-
2699
- = 4.4 2014-10-29 =
2700
- * Improved JS checking for CF7.
2701
-
2702
- = 4.2 2014-10-20 =
2703
- * Increased plugin perfomance for BuddyPress registrations.
2704
-
2705
- = 4.1 2014-10-13 =
2706
- * Minor anti-spam improvements for contacts, registration and contact forms.
2707
-
2708
- = 4.0 2014-10-06 =
2709
- * Major anti-spam improvements for registration and contact forms.
2710
-
2711
- = 3.9 2014-10-01 =
2712
- * Did exception to do not break to create new user in WordPress backend.
2713
-
2714
- = 3.8 2014-09-19 =
2715
- * Bug fix release. Minor fixes in API class and JavaScript anti-spam test.
2716
-
2717
- = 3.6 2014-09-15 =
2718
- * Minor fixes in anti-spam protection for Formidable and custom contact forms.
2719
-
2720
- = 3.4 2014-09-04 =
2721
- * Spam comments rotation. Custom (themes) contact forms support.
2722
-
2723
- = 3.2 2014-08-27 =
2724
- * Minor changes in spam filtration logic.
2725
-
2726
- = 3.1 2014-08-19 =
2727
- * Major changes for comments antispam logic. Improved plugin speed.
2728
-
2729
- = 2.59 2014-08-14 =
2730
- * Antispam protection for bbPress guests posts. Improvement for JetPack comments and PHP API update.
2731
-
2732
- = 2.58 2014-08-06 =
2733
- * Added anti-spam protection for signups posted via WooCommerce order form.
2734
- * Improved anti-spam protection for Contact Form 7.
2735
- * Improved anti-spam protection for registrations. Now the plugin looking for JavaScript antispam test results not only in POST array, but in COOKIES array too. This improvement allows protect signup forms for any untested signups plugins and themes.
2736
- * Updated PHP API. No the plugin can resolve sender IP for websites behind proxy servers. If the proxy servers uses private IP address.
2737
-
2738
- = 2.57 2014-07-29 =
2739
- * Improved anti-spam protection for comments. The plugin now proccessing website url in the comments form.
2740
- * Fixed sign remove logic for approved comments. Previous version doesn't cut sign for comments approved via AJAX call in WordPress backend.
2741
- * Fixed switching to SSL for comments. Previous version doesn't use secured connection for comments.
2742
-
2743
- = 2.56 2014-07-21 =
2744
- * Fixed account status check logic. Previous version makes unnecessary test API calls when the plugin asks account status check.
2745
-
2746
- = 2.55 2014-07-11 =
2747
- * Fixed bug with account status function. In backend the plugin showed notice 'Please don't forget to disable CAPTCHA if you have it on every page.
2748
-
2749
- = 2.54 2014-07-11 =
2750
- * Fixed signup anti-spam protection logic for BuddyPress registrations.
2751
- * Fixed anti-spam protection for JetPack contact form.
2752
- * Changed account status check logic.
2753
-
2754
- = 2.53 2014-06-27 =
2755
- * Fixed anit-spam protection bug for signups.
2756
- * Changed anti-spam functions (comments and signups) priority.
2757
-
2758
- = 2.52 2014-06-25 =
2759
- * Fixed 'Fatal error: Call to a member function get_error_code()' issue with signups via BuddyPress.
2760
-
2761
- = 2.51 2014-06-23 =
2762
- * Added spam protection for registrations via plugin New User Approve by Josh Harrison. If the CleanTalk matched signup as spam this signup will be denied to placing in pending queue.
2763
- * Added option "Use secure (SSL) connection to CleanTalk cloud". If the option enabled plugin will communicate with CleanTalk severs via 128bit encrypted data channel. So, if you have SSL protected webforms on website you can use this option to be sure that visitors personal data safely transmits to CleanTalk servers.
2764
- * Fixed minor bug with loading backend functions.
2765
-
2766
- = 2.49 2014-06-10 =
2767
- * Added spam protection for S2Member Auth.net forms.
2768
- * Added spam protection for multisite signup form.
2769
- * Optimized account status check function.
2770
-
2771
- = 2.46 2014-05-19 =
2772
- * Added: HTML notice about the need to enable JavaScript.
2773
- * Fixed: Fixed pingbacks anti-spam test.
2774
-
2775
- = 2.44 2014-05-12 =
2776
- * Added: Anti-spam protection for S2Member framework.
2777
- * Improved: Plugin load time for backend and frontend.
2778
- * Improved: JavaScript anti-spam test.
2779
- * Fixed: PHP warning mb_convert_encoding()
2780
-
2781
- = 2.42 2014-04-29 =
2782
- * Fixed: JavaScript anti-spam test for comments.
2783
-
2784
- = 2.38 2014-03-27 =
2785
- * Fixed: Registraion form submit time spam test.
2786
-
2787
- = 2.36 2014-03-12 =
2788
- * Reversed to patches from old revisions.
2789
-
2790
- = 2.35 2014-03-12 =
2791
- * New: Notifications about disabled account
2792
- * New: Improved JavaScript spam test.
2793
- * Fixed: Code optimization
2794
- * Fixed: JavaScript test for signups.
2795
-
2796
- = 2.33 2014-02-12 =
2797
- * Fixed: CURLOPT_FOLLOWLOCATION bug at admin notice
2798
-
2799
- = 2.32 2014-02-04 =
2800
- * New: Added notice about automatically approved comment. The notice shows only for first approved comment and only for new commentators (without approved comments) of the blog.
2801
- * New: At WordPress console added banner for notices.
2802
- * Changed: Screenshots updated.
1
+ == Changelog ==
2
+
3
+ = 5.132.3 December 19 2019 =
4
+ * Fix: The disable comments functionality.
5
+
6
+ = 5.132.2 December 17 2019 =
7
+ * Fix: The disable comments functionality.
8
+
9
+ = 5.132.1 December 17 2019 =
10
+ * Fix: Fatal PHP error.
11
+
12
+ = 5.132 December 17 2019 =
13
+ * Fix: PHP 7.4 compability
14
+ * New: Settings and description for "disable comments" functionality.
15
+ * Mod: WooCommerce settings moved to separate block.
16
+ * Minor fixes.
17
+ * Spam protection improved.
18
+
19
+ = 5.131 December 6 2019 =
20
+ * Fix: WooCommerce registration.
21
+ * Fix: Auto update on Wordperss Multisite.
22
+ * Fix: URLs exceptions validation.
23
+ * New: Secuirty improved.
24
+ * Spam protection is improved.
25
+ * Minor fixes ond improvments.
26
+
27
+ = 5.130.1 November 20 2019 =
28
+ * Fix: Plugin autoupdate issues.
29
+ * FIx: Woocommerce checking.
30
+ * Fix: Correct IP detection.
31
+ * Fix: CSV export not working after update.
32
+ * Fix: QuickForms duplicates issues.
33
+
34
+ = 5.130 November 14 2019 =
35
+ * Fix: JetPack contact form JS check.
36
+ * FIx: Iphorm AJAX form.
37
+ * Fix: Paid Memberships Pro fix.
38
+ * Fix: Divi theme contact form fix.
39
+ * Integration: Paid Memberships Pro.
40
+ * Integration: Elementor Pro page builder forms.
41
+ * Improved: Compatibility with different server.
42
+
43
+ = 5.129.1 November 5 2019 =
44
+ * Fix: WooCommerce order detecting.
45
+
46
+ = 5.129 October 30 2019 =
47
+ * Upd: Localize updated.
48
+ * Fix: Direct $_SERVER access replaced.
49
+ * Integration: The 7 theme contact form.
50
+ * Fix: Minor improvements and bug fixes.
51
+ * Mod: Putting site in maintenance mode during plugin update.
52
+
53
+ = 5.128.1 October 23 2019 =
54
+ * Fix: Fatal error when using buffer output.
55
+ * Fix: Translate domain for errors.
56
+ * Code: Fix spelling in function name.
57
+ * Fix: JS disabled error.
58
+ * Upd: Comment edit screen updated.
59
+ * Fix: Cleantalk\Arr::search() fixed.
60
+
61
+ = 5.128 October 17 2019 =
62
+ * Mod: Users check - functionality updated.
63
+ * Fix: Users check - dates format updated.
64
+ * Mod: Comments check - functionality updated.
65
+ * Fix: Comments check - dates format updated.
66
+ * Fix: Fields exclusion fixed.
67
+ * Fix: Notice fixed.
68
+ * Fix: Cleantalk/Antispam/API.
69
+ * Fix: Minor improvements and bug fixes.
70
+
71
+ = 5.127.4 October 13 2019 =
72
+ * Mod: Automatically decrease amount of checked users by one request if an error occurs.
73
+ * Fix: Security issue.
74
+ * Fix: Static JS key.
75
+
76
+ = 5.127.3 October 8 2019 =
77
+ * Fix: Errors during registration.
78
+
79
+ = 5.127.2 October 8 2019 =
80
+ * Integration: SeedProd Coming Soon Page Pro.
81
+ * Fix: WooCommerce double reuqests.
82
+ * Fix: Static JS key.
83
+
84
+ = 5.127.1 October 7 2019 =
85
+ * Fix: WPMS settings logic.
86
+ * Using default database storage engine for tables.
87
+
88
+ = 5.127 September 30 2019 =
89
+ * Fix: Delete redirect notice on external forms
90
+ * Fix: Storing spam for 15 days.
91
+ * Fix: correct DiVi display message.
92
+ * Integration: Ultimate Members.
93
+ * Mod: Setting "Use static JS key" switched to "Auto" if it was "No". Default is "Auto".
94
+ * Mod: Moving White Label option to main site settings.
95
+ * New: Use static JS key if cache plugin detected.
96
+ * New: Settings for URLs, fields, roles exclusions.
97
+ * New: Regular Expressions support in URLs, fields exclusions.
98
+ * New: Send validation errors on standard registration form.
99
+ * Updater: Move exclusions from global variable to settings.
100
+ * Deprecated: IP exclusions.
101
+
102
+ = 5.126 September 9 2019 =
103
+ * Spam protection improved!
104
+ * Integration: Option wheel.
105
+ * Mod: Improved Email detection.
106
+ * Mod: Improved IP detection.
107
+ * Fix: Too large database table with alternative sessions.
108
+ * Fix: Exception for WooCommerce AJAX.
109
+ * Fix: API key validation.
110
+ * Minor fixes.
111
+
112
+ = 5.125 August 26 2019 =
113
+ * Fix: PHP Notices.
114
+ * Fix: Auto update.
115
+ * Fix: Displaying protection status for IP license.
116
+ * Fix: prevent capturing buffer for XMLRPC requests (check_external functionality).
117
+ * Fix: API key validating.
118
+ * New: Complete deactivation setting.
119
+
120
+ = 5.124.1 August 8 2019 =
121
+ * Fix: Error on PHP 5.3.
122
+
123
+ = 5.124 August 8 2019 =
124
+ * Spam protection improved.
125
+ * Fix: SpamFireWall local database counter on Multisite.
126
+ * Fix: Caldera Forms integration.
127
+ * Fix: Settings "Use AJAX for JS check" description.
128
+ * Fix: Formidable integration.
129
+ * New: External forms check now independed from JavaScript.
130
+ * New: Setting Protect external - capture buffer.
131
+ * New: QuForm integration.
132
+
133
+ = 5.123 July 25 2019 =
134
+ * Fix: Plenty of minor fixes.
135
+ * Fix: wpDiscuz integration.
136
+ * Fix: Integration with bbPress.
137
+ * Fix: New comment email notification.
138
+ * New: Follow-Up Emails integration.
139
+ * Fix: Woocommerce integration.
140
+ * Fix: Spelling.
141
+
142
+ = 5.122 July 10 2019 =
143
+ * Spam Protection improved.
144
+ * Fix: Error while checking account status.
145
+ * Fix: Conflict with Elementor Pro.
146
+ * Fix: Integration with Ninja Forms.
147
+ * Fix: Integration with Formidable.
148
+ * New: Detecting mobile devices.
149
+ * New: Integration for Easy Forms for Mailchimp.
150
+
151
+ = 5.121 June 26 2019 =
152
+ * Fix: Translation typos.
153
+ * Fix: Woocommerce integration.
154
+ * Fix: Catching admin in AJAX queries.
155
+ * Mod: Session table (cleantalk_sessions) issue.
156
+ * Mod: Spam protection improved.
157
+ * Integration: Wilcity theme custom registration validation enabled
158
+ * New: Option "Use static JS key".
159
+
160
+ = 5.120.2 June 17 2019 =
161
+ * Fix: WPForms integration.
162
+ * Fix: Translation and spelling.
163
+ * Fix: Minor PHP error
164
+
165
+ = 5.120.1 June 6 2019 =
166
+ * Mod: Description for Search form protection.
167
+ * Fix: CSS and JS attachment.
168
+ * Fix: Undefined index error.
169
+
170
+ = 5.120 June 5 2019 =
171
+ * Fix: bbPress false positives.
172
+ * Fix: SpamFireWall check condition.
173
+ * Fix: SpamFireWall block page.
174
+ * Fix: Catch admin action via search form test.
175
+ * Fix: Catch admin action (AJAX).
176
+ * Mod: Using minified version of JS and CSS.
177
+ * Mod: Date format in statistics.
178
+
179
+ = 5.119.1 May 30 2019 =
180
+ * Fix: Helper class error.
181
+
182
+ = 5.119 May 30 2019 =
183
+ * Fix: No more second request after registration.
184
+ * Fix: Activation hook.
185
+ * Fix: Alternative sessions. Clear table.
186
+ * Fix: Stop capchuring AJAX requests in admin area.
187
+ * Fix: Spelling.
188
+ * Fix: Registration cookies set.
189
+ * Mod: SFW exdtended die page when testing.
190
+ * Mod: User-agent modified.
191
+ * New: Test search queries for spam.
192
+ * New: Gathering and output statistics.
193
+
194
+ = 5.118.4 May 13 2019 =
195
+ * Fix: SFW cookie. Set correct domain for subdomains.
196
+ * Fix: SFW update.
197
+ * Fix: IP detection.
198
+ * Fix: Triggering AJAX check in backend.
199
+ * Fix: Zero submit time on few forms.
200
+
201
+ = 5.118.3 April 29 2019 =
202
+ * Fix: Spam statistics in dashboard widget.
203
+ * Fix: IP detection.
204
+ * Fix: Double check AJAX integrated forms like Ninja Forms.
205
+ * Fix: Use url exclusions for AJAX forms.
206
+
207
+ = 5.118.2 April 25 2019 =
208
+ * Mod: Spam filtration quality improved.
209
+ * Mod: Store SFW cookie for 30 days.
210
+ * Mod: Server IP added to connection report.
211
+ * Fix: spam_stat is not defined.
212
+
213
+ = 5.118.1 April 19 2019 =
214
+ * Fix: Fatal error.
215
+ * Mod: Spam protection improved on registrations.
216
+
217
+ = 5.118 April 19 2019 =
218
+ * Fix: Cookies on registration page.
219
+ * Fix: Update fix.
220
+ * Fix: Wordpress built-in API.
221
+ * Fix: WooCommerce checkout form.
222
+ * Fix: UpdraftPlus. Saving settings.
223
+ * Fix: Convert Pro saving settings.
224
+ * Fix: UTF-8 Converting.
225
+ * Fix: GDPR notice.
226
+ * Fix: cleantalk_sessions table size reduced.
227
+ * Mod: Localization.
228
+ * Mod: Performance improved.
229
+ * Mod: SpamFierWall improvments.
230
+ * Mod: IP detection improved.
231
+ * Mod: JavaScript check rewised.
232
+ * New: Setting "Use alternative mechanism for cookies".
233
+
234
+ = 5.117.1 April 5 2019 =
235
+ * Fix: GDPR notice.
236
+ * Fix: noCacheJS localization.
237
+ * Fix: Fatal error when updating.
238
+
239
+ = 5.117 March 27 2019 =
240
+ * New: Update logic runs on all pages.
241
+ * New: Integration for Ajax Contact Forms plugin.
242
+ * New: Notification for users groups about new comments.
243
+ * New: SFW die page. Show browser and page creation time.
244
+ * Fix: Huge bug in Cleantalk.php connected with servers changing.
245
+ * Fix: Check AJAX requests for logged in users.
246
+ * Fix: Deleting debug in JS.
247
+ * Fix: Validating settings before saving.
248
+
249
+ = 5.116.3 March 14 2019 =
250
+ * Fix: "Headers already sent" error.
251
+ * Fix: Images paths.
252
+ * Fix: IP detection.
253
+ * Fix: Skip lost password form check
254
+ * Fix: Skip mobile requests (push settings)
255
+ * Fix: PHP notice when detecting BuddyPress template.
256
+
257
+ = 5.116.2 March 7 2019 =
258
+ * Fix: Creating tables in MariaDB.
259
+
260
+ = 5.116.1 March 6 2019 =
261
+ * Fix: Creating tables in DB.
262
+ * Fix: PHP Warning in spam statistics widget.
263
+
264
+ = 5.116 March 6 2019 =
265
+ * Spam filtration quality improved.
266
+ * New: Storing visited URLs.
267
+ * New: Check before validation Contact Form 7, Comments, Jetpack comments.
268
+ * New: Get validation result for Contact Form 7, Comments, Jetpack comments.
269
+ * Fix: ES add subscriber.
270
+ * Fix: IP detection.
271
+
272
+ = 5.115.2 February 27 2019 =
273
+ * Fix: False positives spam detection in WP Forms and Contact Form 7.
274
+
275
+ = 5.115.1 February 16 2019 =
276
+ * Fix: SpamFireWall's false positives.
277
+
278
+ = 5.115 February 14 2019 =
279
+ * Fix: Http_only flag for backend cookies.
280
+ * Fix: Spam filtration improved.
281
+ * New: IP detection improved.
282
+ * Fix: SpamFirewall update speeded up.
283
+ * New: False positives with caching solutions decreased.
284
+ * New: Opportunity to use Wordpress HTTP API to connect with Cloud.
285
+
286
+ = 5.114 January 31 2019 =
287
+ * New: Setting "Use Wordpress HTTP API" as alternative to CURL. Disabled by default.
288
+ * Fix: Formidable: Adding small JS check when adding JS_key.
289
+ * Mod: layout of settings page.
290
+ * Mod: Banner logic altered.
291
+
292
+ = 5.113.2 January 18 2019 =
293
+ * Fix: "Settings" link returns to plugin page.
294
+
295
+ = 5.113.1 January 17 2019 =
296
+ * Fix: Conflict with CityTours theme.
297
+ * Fix: Error for Wordpress lower 4.7.
298
+ * Add: Spam protection: "Validate email for existence".
299
+
300
+ = 5.113 January 16 2019 =
301
+ * Fix: Fast and Simple Contact Form.
302
+ * Fix: Settings layout.
303
+ * Fix: Error with WooCommerce Quickview.
304
+ * Fix: Bitrix24 contact form.
305
+ * Fix: Request time decreased.
306
+ * Fix: Requesting account status when activating for IP licenses.
307
+ * Add: Precise AJAX request detection.
308
+ * Spam protection improved.
309
+
310
+ = 5.112 December 21 2018 =
311
+ * Fix: Woocommerce AJAX checkout form.
312
+ * Fix: Profile Builder Pro.
313
+ * Fix: DB structure improvements for WPMS.
314
+ * Spam filtering quality improved.
315
+ * Minor fixes.
316
+
317
+ = 5.111 December 13 2018 =
318
+ * Fix: Double request in JetPack contact form.
319
+ * Fix: Email notification about spam registration.
320
+ * Fix: Links button for feedback comments.
321
+ * Fix: Mail notification about plugin error.
322
+ * Fix: Key field output.
323
+ * Minor fixes.
324
+
325
+ = 5.110 November 29 2018 =
326
+ * Integration: BuddyPress ActivityWall spam protection.
327
+ * Add: GDPR setting for shortcode.
328
+ * Add: Support different BuddyPress templates on activity wall.
329
+ * Fix: Admin/moderator checking for validate post data.
330
+
331
+ = 5.109 November 15 2018 =
332
+ * Fix: Added URL and IP exclusions to Contact Form 7.
333
+ * Fix: js error when responseText is not exists
334
+ * Fix: Sitename when getting key automatically under WPMS.
335
+ * Mod: SpamFireWall is now fully compatible with WPMS.
336
+ * Mod: Setting 'Tell others about CleanTalk' was deleted.
337
+ * Mod: Protection from spam improved.
338
+
339
+ = 5.108.1 November 8 2018 =
340
+ * Fix: Errors with integration class.
341
+
342
+ = 5.108 November 7 2018 =
343
+ * Fix: White label mode.
344
+ * Fix: SpamFireWall now can be disabled.
345
+ * Fix: Layout.
346
+ * Integration: WPForms.
347
+ * Add: Message about block for all no integrated AJAX forms.
348
+ * Add: Displaying account name near api key.
349
+
350
+ = 5.107 October 29 2018 =
351
+ * Fix: Ninja Forms integration.
352
+ * Fix: Cookie usage.
353
+ * Add: Capturing AJAX responses from non integrated forms.
354
+ * Spam protection improved.
355
+ * Minor fixes.
356
+
357
+ = 5.106 October 11 2018 =
358
+ * Spam filtration improved.
359
+ * New: White Label mode.
360
+ * Modification: Warning message about test on SpamFireWall die page.
361
+ * Integration: WP Maintenance Mode.
362
+ * Fix: S2Member.
363
+ * Fix: JavaScript attachments reconsidered.
364
+ * Fix: Admin banners layout.
365
+ * Fix: Minor layout fixes.
366
+
367
+ = 5.105 September 26 2018 =
368
+ * Integration: Now bloking spam for QAEngine questions.
369
+ * Fix: Async http__request call.
370
+ * Fix: Unnecessary get_antispam_report_breif method call.
371
+ * Layout: Hide "Do you like Cleantlak?" when key is not ok.
372
+ * Layout: Minor fixes.
373
+
374
+ = 5.104 September 18 2018 =
375
+ * Fix: Error when saving settings.
376
+ * Fix: Trying update anti spam plugin for the first installation.
377
+ * Fix: Update system.
378
+ * Fix: Errors output.
379
+ * Fix: Plugin's settings under WPMS.
380
+ * Fix: SpamFireWall update.
381
+ * Fix: The server change system repaired.
382
+ * Mod: Cron saving tasks improved.
383
+
384
+ = 5.103.1 September 14 2018 =
385
+ * Fix: Error when saving settings.
386
+ * Fix: Error when getting key automatically.
387
+
388
+ = 5.103 September 13 2018 =
389
+ * Fix: Gravity Forms response message.
390
+ * Fix: SpamFireWall redirect to 404 page.
391
+ * Major anti-spam plugin improvement.
392
+ * Recombined setting page.
393
+ * Added error notification.
394
+ * Mod: S2 Members integration.
395
+ * Mod: Improved remote calls.
396
+
397
+ = 5.102 August 29 2018 =
398
+ * Fix: Users and comments check.
399
+ * Fix: Update from 5.70 or previous versions.
400
+ * Fix: GDPR public JS-script.
401
+ * Fix: Dashboard widget JS scripts attachment.
402
+ * Fix: WooCommerce "Place order" action.
403
+ * Mod: Notification logic altered.
404
+ * Mod: Users check table now has 'Signed up' column.
405
+ * Minor fixes.
406
+
407
+ = 5.101 August 10 2018 =
408
+ * Fix: Set cookie only for non-dashboard pages.
409
+ * Fix: Dashboard widget JS error.
410
+ * Fix: JavaScript error for some environment.
411
+ * Mod: Antispam protection accelerated for some pages.
412
+
413
+ = 5.100 July 30 2018 =
414
+ * Fix: JavaScript dependencies.
415
+
416
+ = 5.99.1 July 17 2018 =
417
+ * IP detection fixed and improved.
418
+
419
+ = 5.99 July 10 2018 =
420
+ * Fix: WooCommerce false positives.
421
+ * Fix: SpamFireWall IP detection.
422
+ * Minor fixes.
423
+
424
+ = 5.98 June 27 2018 =
425
+ * Fix: WooCommerce: Theme exclusion.
426
+ * Fix: Public GDPR JS code.
427
+ * Minor fixes.
428
+
429
+ = 5.97 June 7 2018 =
430
+ * Fix: Update system.
431
+ * Fix: Feedback from public page (admin only).
432
+ * Fix: Users and comment check: API error.
433
+ * Fix: Too many negative reports. (Too big ct_data option)
434
+ * Fix: SpamFireWall: Infinite redirection on the blocking page.
435
+ * Minor fixes.
436
+
437
+ = 5.96 May 22 2018 =
438
+ * Fix: Update system.
439
+ * Mod: Reset all counters button in admin bar.
440
+ * Mod: GDPR compliance.
441
+ * Minor fixes.
442
+
443
+ = 5.95.1 May 3 2018 =
444
+ * Fix: "Get key automatically" button display logic.
445
+ * Fix: PHP notices.
446
+
447
+ = 5.95 May 2 2018 =
448
+ * Spam filtration improved.
449
+ * Fix: Public widget layout.
450
+ * Fix: Connection reports output.
451
+ * Minor fixes.
452
+
453
+ = 5.94 April 23 2018 =
454
+ * Mod: Async load option for JS.
455
+ * Mod: JS scripts loading is conditional.
456
+ * Fix: IP detection.
457
+ * Fix: IP detection.
458
+ * Fix: Javascript error.
459
+
460
+ = 5.93.1 April 9 2018 =
461
+ * Fix: Fatal error on PHP 5.5 or lower.
462
+
463
+ = 5.93 April 9 2018 =
464
+ * Fix: Spam FireWall IP detection.
465
+ * Fix: Contact Form 7. False positives.
466
+ * Mod: Autoupdate function improved.
467
+ * Minor fixes.
468
+
469
+ = 5.92.2 March 23 2018 =
470
+ * Fix: Error if cURL extension is disabled.
471
+
472
+ = 5.92.1 March 23 2018 =
473
+ * Fix: Spelling
474
+ * Fix: Fatal error if cURL extension is disabled.
475
+
476
+ = 5.92 March 22 2018 =
477
+ * IP detection improved.
478
+ * Fix: SSL connection.
479
+ * Fix: False positives spam detection in Contact Form 7.
480
+ * Minor fixes.
481
+
482
+ = 5.91 March 15 2018 =
483
+ * Fix: Errors for PHP compiled without XML support.
484
+ * Fix: Spelling and translation.
485
+ * Stability increased.
486
+ * Minor fixes.
487
+
488
+ = 5.90 March 7 2018 =
489
+ * Improvement: Better IP recognition in Spam FireWall.
490
+ * Fix: Gravity Froms blocking message.
491
+ * Security improvments.
492
+ * Minor fixes.
493
+
494
+ = 5.89 February 21 2018 =
495
+ * Improved spam filtration quality.
496
+ * Improved compatibility.
497
+ * Public widget: Styles and referral link added.
498
+ * Dashboard widget: revised and fixed.
499
+ * Minor fixes.
500
+
501
+ = 5.88 February 12 2018 =
502
+ * Integration: ConvertPro.
503
+ * Improvement: Search for visitor's names in request.
504
+ * Fix: Contact Form 7 message recognition.
505
+ * Preparation for the remote plugin update.
506
+ * Minor fixes.
507
+
508
+ = 5.87 February 2 2018 =
509
+ * Filtration quality improved.
510
+ * Fix: WP Foto Vote downloading images.
511
+ * Fix: Fatal error for unsupported PHP 5.2.
512
+ * Fix: Formidable Forms improved spam filtration.
513
+
514
+ = 5.86 January 25 2018 =
515
+ * Fix: High CPU load with wp-ajax.php.
516
+ * Fix: Mailpoet: Newsletter.
517
+ * Fix: Gravity: Forms standardization for input fields.
518
+ * Fix: ajax hook checks data for contact form.
519
+ * Fix: UTF8 character in requests.
520
+
521
+ = 5.85 January 11 2018 =
522
+ * Fix: Fast Secure contact form spam block message.
523
+ * Fix: IP license status.
524
+ * Layout: Dashboard widget description altered.
525
+
526
+ = 5.84 December 26 2017 =
527
+ * Integration: PeepSo contact form
528
+ * Repared: Feedback from comments page.
529
+ * Fix: mb_* functions used only if exists.
530
+ * Fix: Gravity forms: Multi-page form logic repared.
531
+ * Fix: Gravity forms: AJAX form logic repared.
532
+ * Minor fixes.
533
+
534
+ = 5.83.2 December 19 2017 =
535
+ * Fix: Error in base class.
536
+
537
+ = 5.83.1 December 19 2017 =
538
+ * Fix: CDN IP detection.
539
+
540
+ = 5.83 December 19 2017 =
541
+ * Improving: Stability and compatibility.
542
+ * Improving: Spam protection.
543
+ * Fix: Comments logic filtration.
544
+ * Fix: Admin bar counter.
545
+ * Minor errors fixes.
546
+
547
+ = 5.82.1 December 7 2017 =
548
+ * Fixed minor error with attaching JS and CSS files.
549
+
550
+ = 5.82 December 4 2017 =
551
+ * Plugin doesn't use PHP sessions anymore.
552
+ * Bug fixes.
553
+ * Improved update logic.
554
+
555
+ = 5.81 November 22 2017 =
556
+ * Fixed error with "Show/Hide key" button.
557
+ * Slightly improved spam protection for all forms.
558
+ * Small errors fixes.
559
+
560
+ = 5.80 November 3 2017 =
561
+ * Spam protection improved.
562
+ * Improved filtration quality for WooCommerce checkout.
563
+ * Minor fixes for Spam FireWall.
564
+
565
+ = 5.79 October 26 2017 =
566
+ * Spam protection improved.
567
+ * Fixed issue with existing spam comments check.
568
+ * Added posibility to exclude IP from check.
569
+ * Minor fixes.
570
+
571
+ = 5.78 October 16 2017 =
572
+ * Improved compatibility with themes. Changed core functions prefix.
573
+ * Fixed issue with WooCommerce checkout.
574
+ * Spam protection improved.
575
+ * Minor fixes.
576
+
577
+ = 5.77 October 2 2017 =
578
+ * Connection report's system.
579
+ * Integration for CouponXXL Theme.
580
+ * Fixed issue with mb_* functions.
581
+ * Banners logic updated.
582
+
583
+ = 5.76 September 20 2017 =
584
+ * Fixed issue with Spam FireWall and caching plugins.
585
+ * Banners logic updated.
586
+
587
+ = 5.75 September 15 2017 =
588
+ * Pause feature for users/comments spam check.
589
+ * Improved protection from spam.
590
+ * Small fixes.
591
+
592
+ = 5.74.2 September 2 2017 =
593
+ * Fix for users spam check for PHP 5.3 and lower.
594
+
595
+ = 5.74.1 September 2 2017 =
596
+ * Fix for the update system and cloud communication.
597
+ * Added possibility to check users and comments for spam with a specific date range.
598
+
599
+ = 5.74 August 31 2017 =
600
+ * Users and comments spam check: Two check types (fast and accurate).
601
+ * Fix for WooCommerce checkout test.
602
+ * Minor fixes.
603
+
604
+ = 5.73 August 11 2017 =
605
+ * Fix for spam check for already existed users and comments.
606
+ * Spam FireWall updated.
607
+ * Layout fix for BT Comments.
608
+ * Minor fixes.
609
+
610
+ = 5.72 July 27 2017 =
611
+ * Improved spam check for existed users and comments.
612
+ * Minor fixes.
613
+
614
+ = 5.71 July 20 2017 =
615
+ * Improved spam protection for external forms.
616
+ * Optimization.
617
+ * Minor fixes.
618
+
619
+ = 5.70.2 July 17 2017 =
620
+ * Fix for Spam FireWall for Multisite.
621
+
622
+ = 5.70.1 July 17 2017 =
623
+ * Fix for Spam FireWall.
624
+ * Spam detection improved.
625
+
626
+ = 5.70 July 13 2017 =
627
+ * New updater logic.
628
+ * Self cron system.
629
+ * Improved AMP compatibility.
630
+ * Optimization.
631
+ * Fixed users and comments spam check.
632
+ * Fixed layout for Comment's feedback from public page.
633
+ * Updated Spam FireWall.
634
+ * SFW: Spam FireWall counter now work in real-time.
635
+ * SFW: Improved compatibility with different Data Bases.
636
+
637
+ = 5.69 July 3 2017 =
638
+ * Reviewer - integration.
639
+ * Optimization for Users and Comments check for big databases.
640
+ * Errors fixes.
641
+ * Improved protection from spam.
642
+
643
+ = 5.68 June 22 2017 =
644
+ * Contact Form for WordPress - Ultimate Form Builder Lite - integration.
645
+ * Contact Bank - Contact Forms Builder - integration.
646
+ * Smart Forms - integration.
647
+ * cformsII - integration.
648
+ * Contact Form by Web-Settler - integration.
649
+ * Error fixes.
650
+
651
+ = 5.67.3 June 9 2017 =
652
+ * Fixed JS attachment error.
653
+
654
+ = 5.67.2 June 5 2017 =
655
+ * Fixed error with IP determination.
656
+
657
+ = 5.67.1 June 4 2017 =
658
+ * Fixed JS error in 5.67 version.
659
+ * Integrations: Enfold theme, Convertplug.
660
+ * Links to check for Emails/IP for spam.
661
+ * Control comments and feedback about them from public post's page.
662
+ * Improved connection stability with cloud service.
663
+ * Spam protection improved.
664
+ * Other small fixes.
665
+
666
+ = 5.67 June 1 2017 =
667
+ * Integrations: Enfold theme, Convertplug.
668
+ * Links to check for Emails/IP for spam.
669
+ * Control comments and feedback about them from public post's page.
670
+ * Improved connection stability with cloud service.
671
+ * Spam protection improved.
672
+ * Other small fixes.
673
+
674
+ = 5.66 May 23 2017 =
675
+ * Spam protection improved.
676
+ * Major fixes for users and comments spam check.
677
+ * Added feedback from Wordpress comments list.
678
+ * Fix for "internal forms check" option.
679
+ * Fixed issue with caching Spam FireWall die page.
680
+ * Other small fixes.
681
+
682
+ = 5.65 May 16 2017 =
683
+ * Fix for PayPal redirecton.
684
+ * Fixed issue with empty query for bulk comments test.
685
+ * Added protection for Enfold contact form.
686
+ * Ninja forms integration.
687
+
688
+ = 5.64 April 26 2017 =
689
+ * Integration for Facebook registrations.
690
+ * Small fixes for WPMS.
691
+ * Fix for Activecampaign service.
692
+ * Fix for check spam users.
693
+ * Fixed rare notice Notice: Undefined index: REQUEST_URI
694
+
695
+ = 5.63 April 20 2017 =
696
+ * Fix for the dashboard spam stat widget.
697
+ * Added translation posibility for all text.
698
+
699
+ = 5.62 April 17 2017 =
700
+ * Fix for the dashboard spam statistics widget.
701
+ * Fix for users spam check.
702
+ * Small appearance changes.
703
+
704
+ = 5.61 April 6 2017 =
705
+ * Improved filtration.
706
+ * Additional logic for the form recognizing.
707
+ * Integration: Divi Theme Contact Form.
708
+ * Fix: Gravity Forms multipages forms.
709
+ * Stat Widget: Minor fixes.
710
+ * Added possibility to download results of the users check in CSV format.
711
+ * Alteration for settings page (footer).
712
+
713
+ = 5.60.1 March 29 2017 =
714
+ * Fixed error function 'locale_get_display_region' no exists.
715
+
716
+ = 5.60 March 29 2017 =
717
+ * Added main dashboard widget with spam sctivity stats.
718
+ * Mailster - integration.
719
+ * Base class updated.
720
+
721
+ = 5.59 March 24 2017 =
722
+ * Users/comments check fix.
723
+ * Plugin's name changed to Anti-Spam by CleanTalk.
724
+ * Trial banner is dismissable. Disapear for 24h or till logout.
725
+ * Settings modified (Auto testing failed warning).
726
+ * Mailing(inactive key) interval increased to 6 hours.
727
+
728
+ = 5.58.6 March 16 2017 =
729
+ * Fix for Ninja forms (protection updated).
730
+ * Fix for QA Theme.
731
+ * Fix for RSVP form.
732
+ * Setting changes (Spam FireWall).
733
+ * Improved debug section.
734
+ * Improved gathering data function.
735
+ * Minor fixes.
736
+
737
+ = 5.58.5 March 6 2017 =
738
+ * Minor backend fix.
739
+
740
+ = 5.58.4 March 6 2017 =
741
+ * Users check fix (redirect after the check).
742
+ * Fixed PHP Notice "HTTP_REFERER" is unset.
743
+ * Updated Notice logic.
744
+
745
+ = 5.58.3 February 28 2017 =
746
+ * Bitrix24 Contact form integration.
747
+ * Users/comments check fix.
748
+ * Spam sorting updated.
749
+ * Banner showing logic.
750
+
751
+ = 5.58.2 February 17 2017 =
752
+ * Cron fix for daily report.
753
+
754
+ = 5.58.1 February 16 2017 =
755
+ * Minor fixes.
756
+
757
+ = 5.58 February 15 2017 =
758
+ * Work without access key
759
+ * Bitrix24 contact integration
760
+ * Issues fixes
761
+
762
+ = 5.57.1 February 8 2017 =
763
+ * Fix for notice logic.
764
+
765
+ = 5.57 February 8 2017 =
766
+ * Setting page changes.
767
+ * Bug fixes for WooCommerce.
768
+ * Spam FireWall filters only GET requests.
769
+ * Optimization.
770
+ * Minor and major fixes.
771
+
772
+ = 5.56.1 January 25 2017 =
773
+ * Minor fixes
774
+
775
+ = 5.56 January 19 2017 =
776
+ * Integrations: MailChimp Premium, Profile Press.
777
+ * Changes comments flow.
778
+ * FireWall updater fix.
779
+ * Users check optimization.
780
+
781
+ = 5.55 December 23 2016 =
782
+ * Integrations: Caldera Forms, Visual Form Builder.
783
+ * Fix for different 'cookies' header names.
784
+ * Fixed user deletion.
785
+
786
+ = 5.54 December 12 2016 =
787
+ * Integrations: AmoForms, Contact Form Clean and Simple.
788
+ * Comments check logic refreshed.
789
+ * Registration JS error fix.
790
+ * Users check fix.
791
+ * Fix for translation system.
792
+ * Minor fixes.
793
+
794
+ = 5.53.1 December 9 2016 =
795
+ * Minor layout fixes.
796
+
797
+ = 5.53 November 28 2016 =
798
+ * Addition warning before deleting users.
799
+ * Spam FireWall is enabled by default.
800
+ * Usernoise modal feedback / contact form : integration.
801
+ * Translations.
802
+ * Optimization.
803
+ * Fixes.
804
+
805
+ = 5.52.1 November 14 2016 =
806
+ * Users and comments check: Using new API method.
807
+ * Quick Contact From: Integration via "Custom Contact Forms" setting.
808
+ * JavaScript filtration improved.
809
+ * Translation changes.
810
+ * Optimized JavaScript code.
811
+
812
+ = 5.51 November 2 2016 =
813
+ * Added protection for internal forms
814
+ * Immediate spam check for comments and users from WP dashboard
815
+ * Optimized code
816
+
817
+ = 5.50.1 October 24 2016 =
818
+ * Improved filtration in contact forms.
819
+ * Spam FireWall: Fixed issue with SFW logs
820
+ * Skipping service fields: Fast Secure Contact Froms, QU Forms, Custom Contact Forms
821
+
822
+ = 5.50 October 20 2016 =
823
+ * Custom contact forms: integration.
824
+ * Pirate Forms: integration.
825
+ * PHP 7 compatibility: Deleted third-party JSON library and dependences.
826
+ * PHP 7 compatibility: Fixed end of lines.
827
+ * YOAST Seo: Fixed PHP warnings.
828
+ * Spam FireWall: Minor fix for Spam FireWall counter.
829
+ * Only admin could access to CleanTalk dashboard (exclude Authors an Editors).
830
+ * Improved filtration in contact forms.
831
+
832
+ = 5.49.2 October 5 2016 =
833
+ * Second Fix for database error. Stable version.
834
+
835
+ = 5.49.1 October 5 2016 =
836
+ * Fixed database error.
837
+
838
+ = 5.49 October 3 2016 =
839
+ * Spam FireWall feature: Class upgraded.
840
+ * New feature: Delete links from approved comments.
841
+ * Settings: Grouped.
842
+ * Settings: Altered description fixed spelling mistakes.
843
+ * Settings: Added indicator for Spam FireWall.
844
+ * Admin bar: Added Spam FireWall counter
845
+ * Clean and Simple Contact Form: Direct integration.
846
+ * WooCommerce: Don't check password recovery form.
847
+ * WooCommerce Wishlists: Issue with check for Google bots.
848
+ * JetPack: contact form fix.
849
+ * Fixed and created the defaults for all CleanTalk options.
850
+ * Fixed spelling mistakes.
851
+
852
+ = 5.48 September 15 2016 =
853
+ * buddyPress: Added private messages filtering. Doesn't check user if he has 3 or more messages in the "sentbox" and "inbox" folders.
854
+ * buddyPress: Added option in settings for private messages check.
855
+ * WooCommerce Wishlist: Added check for wishlists.
856
+ * Fixed issue with "check all post data" option.
857
+ * Improved filtering for Gravity Forms
858
+ * Mobile Assistant Connector fix
859
+ * Minor fixes.
860
+
861
+ = 5.47 September 5 2016 =
862
+ * WooCommerce: direct integration for checkout form.
863
+ * WooCommerce Sensei: login form fix.
864
+ * bbPress: Added the check for topics and comments with stop_words
865
+ * bbPress: Skip check for admin in comments and topics
866
+ * UserPro: fixes. Request without field "shortcode"
867
+ * Contact Form 7: Bug fix.
868
+ * Spam FireWall: Optimized logs rotation.
869
+ * Updated inner functions (compatibility fix for PHP 5.4+)
870
+ * Fixed output of counters (without spamfirewall stats)
871
+ * Fixed spelling in settings
872
+ * Added "Delete from the list" button in comments spam check page
873
+ * Minor fixes.
874
+
875
+ = 5.46 August 17 2016 =
876
+ * Fixed issue with admin bar links in WP Multi Network mode.
877
+ * Added "All time counter" and "Daily counter" into admin bar.
878
+ * Added settings to disable counters in admin bar.
879
+ * New style for "Get access key manually" button.
880
+
881
+ = 5.45.2 August 4 2016 =
882
+ * Added Anti-Spam protection for Quick Event Manager.
883
+ * Improved bulk spam test for users. Now the plugin does not mark as Spam user, if the user IP address has spam activity more than 30 days ago.
884
+ * Fixed bulk spam test for comments. Previous version had a conflict between spam history for IP and Email.
885
+ * Minor fix function to get the API key.
886
+
887
+ = 5.45.1 July 26 2016 =
888
+ * Fixed issue with missed spam messages, subscriptions.
889
+ * Improved bulk spam test for comments. Now the plugin will not mark as Spam comments, if a comment sender (IP address) has spam activity more than 30 days ago.
890
+
891
+ = 5.45 July 21 2016 =
892
+ * Optimized bulk spam comments deletion.
893
+ * Turned off JavaScript anti-spam cookies if the option 'Set cookies' is turned off. It helps to avoid issues with Varnish.
894
+ * Added links to bulk spam comments&users removal tool.
895
+
896
+ = 5.44.1 July 13 2016 =
897
+ * Optimized options getting code.
898
+ * Added the option 'Protect Logged in users' to do anti-spam tests for submissions by logged in users.
899
+
900
+ = 5.43.2 June 30 2016 =
901
+ * Optimized anti-spam code for AJAX based contact forms.
902
+ * Fixed CSS layout of counters in Admin bar (issue with layout in IE11).
903
+
904
+ = 5.43.1 June 23 2016 =
905
+ * Added agent version in requests to test a connection between the website and servers.
906
+ * Fixed issue with PHP notices in cleantalk-admin.php.
907
+
908
+ = 5.43 June 22 2016 =
909
+ * Added spam protection for registrations via 'Login with AJAX' plug-in.
910
+ * Added a new counter to Admin bar that allows to count spam and approved submissions since last reset.
911
+ * Update the code that tests a connection between a website and CleanTalk's servers. New version doesn't generate submissions with email good@cleantalk.org.
912
+ * Fixed issue with spam protection for nested forms by Formidable plug-in.
913
+
914
+ = 5.42 2016-06-15 =
915
+ * Added anti-spam protection for UserPro.
916
+ * Improved protection for Formidable forms + Varnish.
917
+ * Improved bulk search for spam accounts.
918
+ * Fixed spam protection for pages that contain multiple Formidable forms with same HTML ID.
919
+ * Optimized PHP code to be compatible with PHP 5.4 and above. The patch has been applied to Formidable forms spam protection.
920
+ * Minor fixes in plugin backend.
921
+
922
+ = 5.41 2016-05-31 =
923
+ * Added HTTP response in plugin response if an network issue was happend.
924
+ * Optimized JavaScript anti-spam test for Formidable forms.
925
+ * Re-stored the option to auto redirect to plugn settings after plugin activation.
926
+ * Updated Spanish, Russian translations.
927
+ * Fixed issue with nasted fields in Formidable forms.
928
+
929
+ = 5.40.3 2016-05-26 =
930
+ * Added option to encrypt (SSL) connection to CleanTalk anti-spam servers.
931
+ * Added JSON encoding for AJAX forms.
932
+ * Obfuscated private data for Custom contact forms option.
933
+ * Optimized bulk users check for spam over blacklists database.
934
+ * Fixed issue with lost connection to servers and JavaScript anti-spam test.
935
+ * Fixed issue with WordFence and collect_details.
936
+
937
+ = 5.40.2 2016-05-11 =
938
+ * Improved account status check logic.
939
+ * Fixed issue with double anti-spam tests for FastSecure contact forms.
940
+ * Fixed issue with nulled JavaScript variables assigned from backend. This issue might me occurred on standart WordPress registration form and with failed JavaScript spam test.
941
+ * Fixed issue with session_start() with PHP sessions stored in memcache.
942
+
943
+ = 5.40.1 2016-04-28 =
944
+ * Fixed issue with Super Socializer.
945
+ * Fixed issue with spam filtration for logged in users and Formidable forms.
946
+ * Added logging of all submitted fields for FastSecure contact form.
947
+
948
+ = 5.40 2016-04-19 =
949
+ * Added JSON encoding for posts that were protected via Custom contact forms option. It allows show anti-spam logs in the Dashboard in more comfortable view.
950
+ * Minor fix in plugin settings.
951
+ * Fixed pagination for bulk users spam test.
952
+ * Fixed issue with unknown _SESSION.
953
+ * Fixed issue with double Spam FireWall database upload.
954
+
955
+ = 5.39.1 2016-04-04 =
956
+ * Improved AJAX based anti-spam test with HTTPS backends.
957
+ * Added fix to avoid issue with empty ct_info_flag on JavaScript side.
958
+ * Added logic to exclude caching for Spam FireWall.
959
+ * Removed a condition to skip accounts with 127.0.0.1 IP in spam test for registered acconts.
960
+
961
+ = 5.38.1 2016-03-24 =
962
+ * Fixed issue with PHP sessions and 'The session id is too long or contains illegal characters'.
963
+ * Removed Spam FireWall protection on /feed page.
964
+ * Disabled anti-spam tests for AJAX calls if the option 'Custom contact forms' is turned off.
965
+ * Added reject notice for spam submissions on Gravity forms with AJAX calls.
966
+
967
+ = 5.37.3 2016-03-10 =
968
+ * Fixed bug with broken MailPoet previews.
969
+ * Fixed bug with broken Geo My WP pop-up windows.
970
+ * Fixed issue with mb_convert_encoding() function.
971
+ * Removed double JavaScript code in front-end.
972
+ * Removed unused variables in anti spam logic.
973
+ * Added option 'Set cookies' (turned on by default). If the option turned off, the plugin will not generate cookies, but in this case plugin will not protect some rarely used contact forms. Any way, turn this option off be compatible with Varnish in spam protection for WordPress core comments, registrations and most popular contact forms.
974
+ * Added anti-spam protection for Gravity forms via option 'Contact forms' with hook gform_entry_is_spam().
975
+
976
+ = 5.36.1 2016-02-05 =
977
+ * Fixed bug, when users receive error after logging in
978
+ * Improve anti-spam filters for contact forms.
979
+
980
+ = 5.36 2016-02-04 =
981
+ * Improved JavaScript anti spam protection
982
+ * Improvements for avoiding blocking requests from payment systems
983
+
984
+ = 5.35 2016-01-14 =
985
+ * Added support for IP licensing
986
+ * Some anti-spam protection improvements
987
+ * Small backend interface fixes
988
+
989
+ = 5.34.1 2015-12-17 =
990
+ * Fixed trackback antispam protection: improved checking mechanism
991
+ * Fixed problem with blocking MailPoet: added exclusions in spam checking algorithm
992
+
993
+ = 5.34 2015-12-10 =
994
+ * Improved spam checking mechanism
995
+ * Added "Collect browser details" option for better antispam protection
996
+ * Fixed custom contact forms checking for AJAX requests
997
+ * Minor translations fixes
998
+
999
+ = 5.33.1 2015-12-04 =
1000
+ * Fixed issue with BBPress: restored old user permission checking mechanism
1001
+ * Fixed anti-spam comments checking: sometimes get_comments returned wrong comments number
1002
+ * Fixed bulk checking: made numeric indexes in users and comments arrays
1003
+ * Fixed trackback and pingback checking: removed exception for checking
1004
+
1005
+ = 5.33 2015-12-01 =
1006
+ * Backend interface fixes
1007
+ * Improved Spam FireWall efficiency
1008
+ * Improved performance of anti spam checking
1009
+
1010
+ = 5.32 2015-11-26 =
1011
+ * Added improvements for manual spam detection
1012
+ * Fixed errors in backend
1013
+ * Fixed bulk users anti spam checking
1014
+ * Added indicator for bulk spam checking
1015
+ * Added "Get access key automatically" button
1016
+
1017
+ = 5.31 2015-11-11 =
1018
+ * Improved backend performance
1019
+ * Fixed counter of approved/blocked spam attacks
1020
+ * Fixed Spam FireWall logging
1021
+
1022
+ = 5.30 2015-11-05 =
1023
+ * Improved anti-spam checking
1024
+ * Optimized performance
1025
+ * Fixed blocking email preview in MailPoet
1026
+ * Interface fixes
1027
+ * WPMU interface fixes
1028
+
1029
+ = 5.29 2015-10-27 =
1030
+ * Optimized performance
1031
+ * Fixed bugs in custom contact forms spam checking
1032
+
1033
+ = 5.28.7 2015-10-23 =
1034
+ * Optimized PHP sessions creation algorithm. This fix should increase plugin perfomance on hostings without retenion of PHP sessions files.
1035
+ * Removed autoredirection to plugin settings after plugin activation.
1036
+
1037
+ = 5.28 2015-10-16 =
1038
+ * Fixed errors in anti-spam checking
1039
+ * Restored options for spam checking registrations and cpmmon contact forms
1040
+ * Improved spam protection
1041
+ * Fixed problems with AJAX functionality in MailPoet, WooCommerce and other AJAX plugins
1042
+
1043
+ = 5.27 2015-10-13 =
1044
+ * Improvements in SpamFireWall feature
1045
+ * Code optimization
1046
+ * Backend interface fixes
1047
+
1048
+ = 5.26 2015-10-05 =
1049
+ * Added WordPress Language Pack support
1050
+ * Removed spam checking for some autorisation plugins
1051
+ * New experimental feature: SpamFireWall
1052
+
1053
+ = 5.25.2 2015-09-28 =
1054
+ * Fixed backend bug
1055
+
1056
+ = 5.25.1 2015-09-28 =
1057
+ * Added widget with anti-spam stats
1058
+ * Added information about blocked spam attacks in admin dashboard and CleanTalk settings
1059
+ * Added ability not to check comments for users with 3 or above allowed comments
1060
+ * Added an option 'Help others known CleanTalk' to show information for site visitors, that your site is protected from spam by us
1061
+ * Some backend interface settings
1062
+
1063
+ = 5.24.1 2015-09-16 =
1064
+ * Fixed some errors in frontend
1065
+ * Fixed access key saving
1066
+
1067
+ = 5.24 2015-09-14 =
1068
+ * Backend interface fixes
1069
+ * Improvement for AJAX JavaScript spam checking
1070
+
1071
+ = 5.23 2015-09-01 =
1072
+ * Fixed BuddyPress profile search false positivities of anti-spam protection.
1073
+ * Some interface fixes of bulk users & comments spam checking
1074
+
1075
+ = 5.22 2015-08-26 =
1076
+ * Fixed possible XSS issue for anti-spam test on third-party forms.
1077
+
1078
+ = 5.21 2015-08-21 =
1079
+ * Fixed bug with skipping spam submissions
1080
+ * Fixed bug with receiving old user_token for viewing anti-spam stats
1081
+ * Small backend fixes
1082
+
1083
+ = 5.20 2015-08-15 =
1084
+ * Fixed anti-spam stats in admin bar - now stats updates every hour
1085
+ * Fixed issue with skipping spam submissions
1086
+ * Added some PHP-constants for advanced users - CLEANTALK_AJAX_USE_BUFFER and CLEANTALK_AJAX_USE_FOOTER_HEADER can be defined to true or false in wp-config.php to control method, which will be used for injection of AJAX script.
1087
+
1088
+ = 5.19 2015-08-11 =
1089
+ * New feature: anti-spam checking for registered users
1090
+ * Fixed issue with AJAX JavaScript anti-spam test.
1091
+ * Fixed issue with SEO Yoast xml sitemaps and JavaScript anti-spam test.
1092
+
1093
+ = 5.18 2015-08-04 =
1094
+ * Fixed issue with user_token
1095
+ * Added anti-spam API, see our FAQ
1096
+
1097
+ = 5.17 2015-07-23 =
1098
+ * Fixed infinite redirection after activation
1099
+ * Minor backend fixes
1100
+
1101
+ = 5.16 2015-07-22 =
1102
+ * Fixed external services checking
1103
+ * Fixed mass comments deletion
1104
+ * Fixed AJAX anti-spam protection
1105
+
1106
+ = 5.15 2015-07-16 =
1107
+ * New feature: anti-spam protection for forms, that uses external services
1108
+
1109
+ = 5.14 2015-07-03 =
1110
+ * Added anti-spam protection for some themes and plugins
1111
+ * Some backend fixes
1112
+
1113
+ = 5.13 2015-06-12 =
1114
+ * Closing notification for anti-spam renew
1115
+ * Fixed bulk anti spam comment checking
1116
+
1117
+ = 5.12 2015-06-01 =
1118
+ * Added option for checking all post data for spam
1119
+ * Some JavaScript protection improvements
1120
+ * Added option for old JavaScript check (without AJAX)
1121
+
1122
+ = 5.10 2015-05-25 =
1123
+ * Fixed Javascript error on some forms
1124
+
1125
+ = 5.9 2015-05-21 =
1126
+ * Fixed Javascript error on CF7 and JetPack
1127
+ * Some backend and frontent fixes
1128
+
1129
+ = 5.8 2015-05-18 =
1130
+ * Minor fixes
1131
+
1132
+ = 5.7 2015-05-18 =
1133
+ * Fixed French translation
1134
+ * Fixed protection algorithm
1135
+
1136
+ = 5.6 2015-05-11 =
1137
+ * Fixed translation
1138
+ * Fixed bulk comments anti-spam checking
1139
+ * Added option for disabling anti spam stats in adminbar
1140
+ * Some security fixes
1141
+
1142
+ = 5.5 2015-04-29 =
1143
+ * Fixed security issue
1144
+ * Some interface fixes
1145
+
1146
+ = 5.4 2015-04-27 =
1147
+ * Some interface and functionality changes in plugin settings page
1148
+ * Added counter for anti-spam stats in admin bar
1149
+
1150
+ = 5.3 2015-04-13 =
1151
+ * Added anti-spam protection for Divi theme contact forms
1152
+ * Added anti-spam protection for MyMail contact forms
1153
+ * Added anti-spam protection for MailPoet Newsletters
1154
+ * Some interface and functionality changes in backend
1155
+
1156
+ = 5.2 2015-04-01 =
1157
+ * Added link for anti-spam stats
1158
+ * Added WP User Frontend Pro registration form protection
1159
+
1160
+ = 5.1 2015-03-24 =
1161
+ * Fixed site crash after installing 5.0 on some websites
1162
+
1163
+ = 5.0 2015-03-24 =
1164
+ * Added bulk comments checking for spam via CleanTalk blacklists
1165
+ * Added anti-spam form protection for 'Ajax Login & Register'
1166
+ * Fixed JetPack form protection
1167
+
1168
+ = 4.24 2015-03-20 =
1169
+ * Added immediate spam protection activation.
1170
+
1171
+ = 4.22 2015-03-17 =
1172
+ * Added button for automatic spam protection key getting.
1173
+
1174
+ = 4.21 2015-03-11 =
1175
+ * Added license renew notification.
1176
+
1177
+ = 4.20 2015-03-03 =
1178
+ * Added German, Italian, Polish, Portuguese translations.
1179
+ * Minor code fixes.
1180
+
1181
+ = 4.19 2015-02-24 =
1182
+ * Increased keys lifetime for JS spam test.
1183
+
1184
+ = 4.18 2015-02-17 =
1185
+ * Fixed bug with comments approvement - moved ct_unmark_red() to cleantalk-admin.php
1186
+ * Added PayPal 'payment_status' in skip list.
1187
+ * Added Akismet 'spam' status processing.
1188
+
1189
+ = 4.17 2015-02-12 =
1190
+ * New base class.
1191
+ * Divided code to 3 separate files - common, public and admin.
1192
+
1193
+ = 4.16 2015-02-05 =
1194
+ * New base class.
1195
+ * Fixed JetPack spam filters logics.
1196
+ * Optimized Formidable, bbPress, BuddyPress spam filters.
1197
+
1198
+ = 4.15 2015-01-29 =
1199
+ * Support spam test for Contact Form 7 versions before 3.0.0.
1200
+ * Fixed global JS-vars for JS spam test.
1201
+ * Fixed online notice cookie logics.
1202
+ * Optimized spam filters for FSCF, WooCommerce, JetPack.
1203
+ * Optimized option getting.
1204
+
1205
+ = 4.14 2015-01-19 =
1206
+ * Removed deprecated option from comment approvement code.
1207
+ * New API key URL.
1208
+ * Trimmed API key in admin panel.
1209
+ * Added current options to array sended to CleanTalk servers.
1210
+ = 4.13 2014-12-29 =
1211
+ * Fixed bug with autimatically aprovement not spam comments. Now this option disabled and do not override local WordPress policy.
1212
+
1213
+ = 4.12 2014-12-29 =
1214
+ * Fixed bug with 'Wrong Access key...' notice in WordPress dashboard.
1215
+ * Fixed filtration bug in WordPress dashboard login form.
1216
+
1217
+ = 4.11 2014-12-22 =
1218
+ * Improved anti-spam protection for custom contact/registration/subscribe forms.
1219
+ * Improved anti-spam protection for comments.
1220
+ * Accelerated plugin speed for comments, regirstrations and contacts.
1221
+ * Added translation to French.
1222
+
1223
+ = 4.10 2014-12-10 =
1224
+ * Improved anti-spam protection for custom contact/registration/subscribe forms.
1225
+ * Option 'Custom contact forms' enabled by default for new setups.
1226
+ * Removed settings "Publish relevant comments", "Use encrypted (SSL) connection".
1227
+ * Added translation to Danish (thank you for Mikkel at KreativJul.dk).
1228
+
1229
+ = 4.9 2014-11-24 =
1230
+ * Fixed spam test for Contact Form 7.
1231
+
1232
+ = 4.8 2014-11-19 =
1233
+ * Improved anti-spam protection for BuddyPress registrations and custom contact forms.
1234
+
1235
+ = 4.7 2014-11-16 =
1236
+ * Fixed JavaScript spam test for FastSecure contact form.
1237
+
1238
+ = 4.6 2014-11-11 =
1239
+ * Improved anti-spam protection on BuddyPress registrations.
1240
+ * Improved anti-spam protection on contact forms.
1241
+ * Removed plugin sign from pending, spam comments. To get details about a comment please use Dashboard at cleantalk.org.
1242
+ * Improved Access key validation function.
1243
+ * Added protection for bbPress comments via stop list. Stop list function is a list to reject comments by prefiled words. To fill the list please use Dashboard at cleantalk.org.
1244
+
1245
+ = 4.5 2014-11-04 =
1246
+ * Fixed CF7 JavaScript bug.
1247
+ * Fixed rejects in bbPress guests comments.
1248
+
1249
+ = 4.4 2014-10-29 =
1250
+ * Improved anti-spam JS test for CF7.
1251
+ * Fixed 'noscript' text in FaceBook Like preview in Valenti theme.
1252
+
1253
+ = 4.2 2014-10-20 =
1254
+ * Fixed double checks issue for BuddyPress registrations.
1255
+ * Increased timeout limits to find the work server.
1256
+
1257
+ = 4.1 2014-10-13 =
1258
+ * Optimized code for manual moderation feedback sending.
1259
+ * Optimized anti-spam algorithms for comments, contacts and signups.
1260
+
1261
+ = 4.0 2014-10-06 =
1262
+ * Improved anti-spam protection for custom contact forms.
1263
+ * Improved anti-spam protection for registration forms.
1264
+
1265
+ = 3.9 2014-10-01 =
1266
+ * Did exception to do not break to create new user in WordPress backend.
1267
+
1268
+ = 3.8 2014-09-19 =
1269
+ * Fixed json_encode() + malformed characters.
1270
+ * Fixed JavaScript issue with wpautop().
1271
+
1272
+ = 3.6 2014-09-15 =
1273
+ * Fixed preg_match() issue for Formidable forms and Custom contact forms.
1274
+ * Improved anti-spam protection for Custom contact forms.
1275
+
1276
+ = 3.4 2014-09-04 =
1277
+ * We've added anti-spam for themes contact forms and any untested contact forms plugins. To use this test enable option "Custom contact forms" in plugin settings.
1278
+ * We've added auto rotation for spam comments. Now the plugin removes comments in SPAM folder older then 15 days. This option is enabled by default.
1279
+
1280
+ = 3.2 2014-08-27 =
1281
+ * Fixed submit_time() logic for failed submits (comments/registrations). Now form fill time resets after every failed submit.
1282
+
1283
+ = 3.1 2014-08-19 =
1284
+ * Added anti-spam test over senders Cookies.
1285
+ * Improved form fill anti-spam test.
1286
+ * Improved speed selection of the nearest server to website.
1287
+ * Improved anti-spam speed for comments.
1288
+ * Relevance anti-spam test disabled by default. To enable test should be used option 'relevance_test'.
1289
+
1290
+ = 2.58 2014-08-06 =
1291
+ * Added anti-spam protection for signups posted via WooCommerce order form.
1292
+ * Improved anti-spam protection for Contact Form 7.
1293
+ * Improved anti-spam protection for registrations. Now the plugin looking for JavaScript anti spam test results not only in POST array, but in COOKIES array too. This improvement allows protect signup forms for any untested signups plugins and themes.
1294
+ * Updated PHP API. Now the plugin can resolve sender IP for websites behind proxy servers. If the proxy servers uses private IP address.
1295
+
1296
+ = 2.57 2014-07-29 =
1297
+ * Improved anti-spam protection for comments. The plugin now proccessing website url in the comments form.
1298
+ * Fixed sign remove logic for approved comments. Previous version doesn't cut sign for comments approved via AJAX call in WordPress backend.
1299
+ * Fixed switching to SSL for comments. Previous version doesn't use secured connection for comments.
1300
+
1301
+ = 2.56 2014-07-21 =
1302
+ * Fixed account status check logic. Previous version makes unnecessary test API calls when the plugin asks account status check.
1303
+
1304
+ = 2.55 2014-07-11 =
1305
+ * Fixed bug with account status function. In backend the plugin showed notice 'Please don't forget to disable CAPTCHA if you have it!' on every page.
1306
+
1307
+ = 2.54 2014-07-11 =
1308
+ * Fixed signup anti-spam protection logic for BuddyPress registrations.
1309
+ * Fixed anti-spam protection for JetPack contact form.
1310
+ * Changed account status check logic.
1311
+
1312
+ = 2.53 2014-06-27 =
1313
+ * Fixed anit-spam protection bug for signups.
1314
+ * Changed anti-spam functions (comments and signups) priority.
1315
+
1316
+ = 2.52 2014-06-25 =
1317
+ * Fixed 'Fatal error: Call to a member function get_error_code()' issue with signups via BuddyPress.
1318
+
1319
+ = 2.51 2014-06-23 =
1320
+ * Added spam protection for registrations via plugin New User Approve by Josh Harrison. If the CleanTalk matched signup as spam this signup will be denied to placing in pending queue.
1321
+ * Added option "Use secure (SSL) connection to CleanTalk cloud". If the option enabled plugin will communicate with CleanTalk severs via 128bit encrypted data channel. So, if you have SSL protected webforms on website you can use this option to be sure that visitors personal data safely transmits to CleanTalk servers.
1322
+ * Fixed minor bug with loading backend functions.
1323
+
1324
+ = 2.49 2014-06-10 =
1325
+ * Added spam protection for S2Member Auth.net forms.
1326
+ * Added spam protection for multisite signup form.
1327
+ * Optimized account status check function.
1328
+
1329
+ = 2.46 2014-05-19 =
1330
+ * Added: HTML notice about the need to enable JavaScript.
1331
+ * Fixed: Fixed pingbacks anti-spam test.
1332
+
1333
+ = 2.44 2014-05-12 =
1334
+ * Added: Anti-spam protection for S2Member framework.
1335
+ * Improved: JavaScript anti-spam test.
1336
+ * Improved: Plugin load time for backend and frontend.
1337
+ * Fixed: PHP warning mb_convert_encoding()
1338
+
1339
+ = 2.42 2014-04-29 =
1340
+ * Fixed: JavaScript anti-spam test for comments.
1341
+
1342
+ = 2.40 2014-04-25 =
1343
+ * New: Fast Secure Contact form support.
1344
+ * New: WordPress Landing Pages support
1345
+
1346
+ = 2.38 2014-03-27 =
1347
+ * Fixed: Registraion form submit time spam test.
1348
+
1349
+ = 2.36 2014-03-12 =
1350
+ * Reversed to patches from old revisions.
1351
+
1352
+ = 2.35 2014-03-12 =
1353
+ * New: Notifications about disabled account
1354
+ * New: Improved JavaScript spam test.
1355
+ * Fixed: Code optimization
1356
+ * Fixed: JavaScript test for signups.
1357
+
1358
+ = 2.33 2014-02-12 =
1359
+ * Fixed: CURLOPT_FOLLOWLOCATION bug at admin notice
1360
+
1361
+ = 2.32 2014-02-04 =
1362
+ * New: Added notice about automatically approved comment. The notice shows only for first approved comment and only for new commentators (without approved comments) of the blog.
1363
+ * New: At WordPress console added banner for notices.
1364
+ * Changed: Screenshots updated.
1365
+
1366
+ = 2.31 2014-01-24 =
1367
+ * New: Added spam protection for JetPack comments
1368
+ * Fixed: cURL connection issue "Expect: 100-continue"
1369
+
1370
+ = 2.30 2014-01-13 =
1371
+ * Changed: Improved servers connection logic.
1372
+ * Fixed: Antispam test for Fomidable forms.
1373
+
1374
+ = 2.28 2013-12-19 =
1375
+ * New: Added protection against spam bots for WooCommerce review form.
1376
+ * Fixed: JavaScript anti-spam logic for WooCommerce review form.
1377
+
1378
+ = 2.27 2013-12-06 =
1379
+ * New: Added protection against spam bots for JetPack Contact form.
1380
+ * Fixed: JavaScript anti-spam logic for registrations and Contact form 7.
1381
+
1382
+ = 2.25 2013-11-27 =
1383
+ * New: Added protection against spam bots for BuddyPress registrations.
1384
+ * New: Added protection against spam bots for Contact form 7.
1385
+ * New: Added Spanish (es_ES) translation.
1386
+
1387
+ = 2.23 2013-11-20 =
1388
+ * New: Added automatic training blacklists on spam bot account deletion.
1389
+ * New: Added URL to project homepage at plugin options.
1390
+ * Changed: Improved anti-spam logic.
1391
+
1392
+ = 2.21 2013-11-13 =
1393
+ * Changed: WordPress blacklists settings get priority over plugin's anti-spam settings
1394
+ * Changed: Disabled management approval comments for regular commentators of the blog. Automatically approved for publication only the comments of the new blog authors.
1395
+ * Changed: Removed form submit time test. Imporved JavaScript spam test.
1396
+ * Changed: PHP code optimizations
1397
+
1398
+ = 2.19 2013-11-08 =
1399
+ * New: Antispam protection from spam bots at the registration form
1400
+ * Changed: Russian localization for admin panel
1401
+ * Changed: PHP code optimizations
1402
+
1403
+ = 2.5.18 2013-11-01 =
1404
+ * Fixed: Bug with selection of the last comments for post
1405
+ * New: Antispam protection for Formidable feedback forms
1406
+ * New: Automatic deletion of outdated spam comments
1407
+ * New: On/Off option for comments spam filtration
1408
+ * Tested with WordPress 3.7.1
1409
+
1410
+ = 2.4.15 2013-09-26 =
1411
+ * Fixed: Bug with mass comments deletion
1412
+ * Changed: Russian localization for admin panel
1413
+ * Tested with mulitsite setup (WordPress network or WPMU)
1414
+
1415
+ = 2.4.14 2013-08-29 =
1416
+ * Changed: Removed feedback requests to the servers for banned (spam) comments.
1417
+
1418
+ = 2.4.13 2013-08-19 =
1419
+ * Changed: Switched HTTP requests from file_get_contents() to CURL. Added file_get_contens() as backup connection to the servers.
1420
+ * Changed: Removed feedback requests for comments moved to trash.
1421
+ * Fixed: "Fail connect to servers..." error on hostings with disabled 'allow_url_fopen' PHP option.
1422
+
1423
+ = 2.4.12 2013-08-12 =
1424
+ * Removed RPC::XML library from plugin.
1425
+ * Switched plugin to HTTP+JSON connection with servers.
1426
+ * Fixed bug with comments anti-spam tests with non UTF8 codepage.
1427
+
1428
+ = 2.4.11 2013-08-02 =
1429
+ * Removed spam tests for self-made pingbacks
1430
+ * Tested up to WP 3.6
1431
+
1432
+ = 2.4.10 2013-07-24 =
1433
+ * Fixed warning in PHP 5.4
1434
+ * Fixed bug with disabling comments test for Administrators, Authors and Editors
1435
+ * "Stop words" settings moved to <a href="http://cleantalk.org/my">Control panel</a> of the service
1436
+ * "Response language" settings moved <a href="http://cleantalk.org/my">Control panel</a> of the service
1437
+
1438
+ = 2.4.9 =
1439
+ * Fixed extra debugging in base class
1440
+
1441
+ = 2.4.8 =
1442
+ * Enabled convertion to UTF8 for comment and example text
1443
+ * Optimized PHP code
1444
+
1445
+ = 2.3.8 =
1446
+ * Enabled selection the fastest server in the pool
1447
+ * Fixed work server in plugin's config
1448
+
1449
+ = 2.2.3 =
1450
+ * Secured md5 string for JavaScript test
1451
+ * Added requests's timestamp to calculate request work time
1452
+ * Update base CleanTalk's PHP class
1453
+
1454
+ = 2.1.2 =
1455
+ * Improved perfomance for processing large comments (over 32kb size)
1456
+ * Improved perfomance for bulk operations with comments in Comments panel
1457
+ * Added feedback request with URL to approved comment
1458
+
1459
+ = 2.0.2 =
1460
+ * Fixed bug with JavaScript test and WordPress cache plugins
1461
+
1462
+ = 2.0.1 =
1463
+ * Added option "Publicate relevant comments" to plugin's options.
1464
+ * Added descriptions to plugin options
1465
+
1466
+ = 1.5.4 =
1467
+ * Fixed HTTP_REFERER transmission to the servers
1468
+ * Improved JavaScript spam test
1469
+ * Optimized PHP code
1470
+
1471
+ = 1.4.4 =
1472
+ * Pingback, trackback comments has moved to manual moderataion
1473
+ * Added transmission to the serves comment type and URL
1474
+ * Post title, body and comments separated into individual data elements
1475
+ * Added priority for matched words in the comment with post title
1476
+ * Enabled stop words filtration as default option
1477
+
1478
+ = 1.3.4 =
1479
+ * Removed PHP debugging.
1480
+
1481
+ = 1.3.3 =
1482
+ * Added notice at admin panel about empty Access key in plugin settings
1483
+ * Removed HTTP link to the site project from post page
1484
+ * Removed unused options from settings page
1485
+ * Tested up to WordPress 3.5
1486
+
1487
+ = 1.2.3 =
1488
+ * Fixed bug with session_start.
1489
+
1490
+ = 1.2.2 =
1491
+ * Plugin rename to CleanTalk. Spam prevent plugin
1492
+ * Integration Base Class version 0.7
1493
+ * Added fast submit check
1494
+ * Added check website in form
1495
+ * Added feedbacks for change comment status (Not spam, unapprove)
1496
+ * Added function move comment in spam folder if CleanTalk say is spam
1497
+ * Disable checking for user groups Administrator, Author, Editor
1498
+ * Marked red color bad words
1499
+
1500
+ = 1.1.2 =
1501
+ * Addition: Title of the post attached to the example text in auto publication tool.
1502
+ * Tested with WordPress 3.4.1.
1503
+
1504
+ = 1.1.1 =
1505
+ * HTTP_REFERER bug fixed
1506
+
1507
+ = 1.1.1 =
1508
+ * Added user locale support, tested up to WP 3.4
1509
+
1510
+ = 1.1.0 =
1511
+ * First version
1512
+
1513
+
1514
+ == Upgrade Notice ==
1515
+ = 5.130 November 14 2019 =
1516
+ * Fix: JetPack contact form JS check.
1517
+ * FIx: Iphorm AJAX form.
1518
+ * Fix: Paid Memberships Pro fix.
1519
+ * Fix: Divi theme contact form fix.
1520
+ * Integration: Paid Memberships Pro.
1521
+ * Integration: Elementor Pro page builder forms.
1522
+ * Improved: Compatibility with different server.
1523
+
1524
+ = 5.129.1 November 5 2019 =
1525
+ * Fix: WooCommerce order detecting.
1526
+
1527
+ = 5.129 October 30 2019 =
1528
+ * Upd: Localize updated.
1529
+ * Fix: Direct $_SERVER access replaced.
1530
+ * Integration: The 7 theme contact form.
1531
+ * Fix: Minor improvements and bug fixes.
1532
+ * Mod: Putting site in maintenance mode during plugin update.
1533
+
1534
+ = 5.128.1 October 23 2019 =
1535
+ * Fix: Fatal error when using buffer output.
1536
+ * Fix: Translate domain for errors.
1537
+ * Code: Fix spelling in function name.
1538
+ * Fix: JS disabled error.
1539
+ * Upd: Comment edit screen updated.
1540
+ * Fix: Cleantalk\Arr::search() fixed.
1541
+
1542
+ = 5.128 October 17 2019 =
1543
+ * Mod: Users check - functionality updated.
1544
+ * Fix: Users check - dates format updated.
1545
+ * Mod: Comments check - functionality updated.
1546
+ * Fix: Comments check - dates format updated.
1547
+ * Fix: Fields exclusion fixed.
1548
+ * Fix: Notice fixed.
1549
+ * Fix: Cleantalk/Antispam/API.
1550
+ * Fix: Minor improvements and bug fixes.
1551
+
1552
+ = 5.127.4 October 13 2019 =
1553
+ * Mod: Automatically decrease amount of checked users by one request if an error occurs.
1554
+ * Fix: Security issue.
1555
+ * Fix: Static JS key.
1556
+
1557
+ = 5.127.3 October 8 2019 =
1558
+ * Fix: Errors during registration.
1559
+
1560
+ = 5.127.2 October 8 2019 =
1561
+ * Integration: SeedProd Coming Soon Page Pro.
1562
+ * Fix: WooCommerce double reuqests.
1563
+ * Fix: Static JS key.
1564
+
1565
+ = 5.127.1 October 7 2019 =
1566
+ * Fix: WPMS settings logic.
1567
+ * Using default database storage engine for tables.
1568
+
1569
+ = 5.127 September 30 2019 =
1570
+ * Fix: Delete redirect notice on external forms
1571
+ * Fix: Storing spam for 15 days.
1572
+ * Fix: correct DiVi display message.
1573
+ * Integration: Ultimate Members.
1574
+ * Mod: Setting "Use static JS key" switched to "Auto" if it was "No". Default is "Auto".
1575
+ * Mod: Moving White Label option to main site settings.
1576
+ * New: Use static JS key if cache plugin detected.
1577
+ * New: Settings for URLs, fields, roles exclusions.
1578
+ * New: Regular Expressions support in URLs, fields exclusions.
1579
+ * New: Send validation errors on standard registration form.
1580
+ * Updater: Move exclusions from global variable to settings.
1581
+ * Deprecated: IP exclusions.
1582
+
1583
+ = 5.126 September 9 2019 =
1584
+ * Spam protection improved!
1585
+ * Integration: Option wheel.
1586
+ * Mod: Improved Email detection.
1587
+ * Mod: Improved IP detection.
1588
+ * Fix: Too large database table with alternative sessions.
1589
+ * Fix: Exception for WooCommerce AJAX.
1590
+ * Fix: API key validation.
1591
+ * Minor fixes.
1592
+
1593
+ = 5.125 August 26 2019 =
1594
+ * Fix: PHP Notices.
1595
+ * Fix: Auto update.
1596
+ * Fix: Displaying protection status for IP license.
1597
+ * Fix: prevent capturing buffer for XMLRPC requests (check_external functionality).
1598
+ * Fix: API key validating.
1599
+ * New: Complete deactivation setting.
1600
+
1601
+ = 5.124.1 August 8 2019 =
1602
+ * Fix: Error on PHP 5.3.
1603
+
1604
+ = 5.124 August 8 2019 =
1605
+ * Spam protection improved.
1606
+ * Fix: SpamFireWall local database counter on Multisite.
1607
+ * Fix: Caldera Forms integration.
1608
+ * Fix: Settings "Use AJAX for JS check" description.
1609
+ * Fix: Formidable integration.
1610
+ * New: External forms check now independed from JavaScript.
1611
+ * New: Setting Protect external - capture buffer.
1612
+ * New: QuForm integration.
1613
+
1614
+ = 5.123 July 25 2019 =
1615
+ * Fix: Plenty of minor fixes.
1616
+ * Fix: wpDiscuz integration.
1617
+ * Fix: Integration with bbPress.
1618
+ * Fix: New comment email notification.
1619
+ * New: Follow-Up Emails integration.
1620
+ * Fix: Woocommerce integration.
1621
+ * Fix: Spelling.
1622
+
1623
+ = 5.122 July 10 2019 =
1624
+ * Spam Protection improved.
1625
+ * Fix: Error while checking account status.
1626
+ * Fix: Conflict with Elementor Pro.
1627
+ * Fix: Integration with Ninja Forms.
1628
+ * Fix: Integration with Formidable.
1629
+ * New: Detecting mobile devices.
1630
+ * New: Integration for Easy Forms for Mailchimp.
1631
+
1632
+ = 5.121 June 26 2019 =
1633
+ * Fix: Translation typos.
1634
+ * Fix: Woocommerce integration.
1635
+ * Fix: Catching admin in AJAX queries.
1636
+ * Mod: Session table (cleantalk_sessions) issue.
1637
+ * Mod: Spam protection improved.
1638
+ * Integration: Wilcity theme custom registration validation enabled
1639
+ * New: Option "Use static JS key".
1640
+
1641
+ = 5.120.2 June 17 2019 =
1642
+ * Fix: WPForms integration.
1643
+ * Fix: Translation and spelling.
1644
+ * Fix: Minor PHP error
1645
+
1646
+ = 5.120.1 June 6 2019 =
1647
+ * Mod: Description for Search form protection.
1648
+ * Fix: CSS and JS attachment.
1649
+ * Fix: Undefined index error.
1650
+
1651
+ = 5.120 June 5 2019 =
1652
+ * Fix: bbPress false positives.
1653
+ * Fix: SpamFireWall check condition.
1654
+ * Fix: SpamFireWall block page.
1655
+ * Fix: Catch admin action via search form test.
1656
+ * Fix: Catch admin action (AJAX).
1657
+ * Mod: Using minified version of JS and CSS.
1658
+ * Mod: Date format in statistics.
1659
+
1660
+
1661
+ = 5.119.1 May 30 2019 =
1662
+ * Fix: Helper class error.
1663
+
1664
+ = 5.119 May 30 2019 =
1665
+ * Fix: No more second request after registration.
1666
+ * Fix: Activation hook.
1667
+ * Fix: Alternative sessions. Clear table.
1668
+ * Fix: Stop capchuring AJAX requests in admin area.
1669
+ * Fix: Spelling.
1670
+ * Fix: Registration cookies set.
1671
+ * Mod: SFW exdtended die page when testing.
1672
+ * Mod: User-agent modified.
1673
+ * New: Test search queries for spam.
1674
+ * New: Gathering and output statistics.
1675
+
1676
+ = 5.118.4 May 13 2019 =
1677
+ * Fix: SFW cookie. Set correct domain for subdomains.
1678
+ * Fix: SFW update.
1679
+ * Fix: IP detection.
1680
+ * Fix: Triggering AJAX check in backend.
1681
+ * Fix: Zero submit time on few forms.
1682
+
1683
+ = 5.118.3 April 29 2019 =
1684
+ * Fix: Spam statistics in dashboard widget.
1685
+ * Fix: IP detection.
1686
+ * Fix: Double check AJAX integrated forms like Ninja Forms.
1687
+ * Fix: Use url exclusions for AJAX forms.
1688
+
1689
+ = 5.118.2 April 25 2019 =
1690
+ * Mod: Spam filtration quality improved.
1691
+ * Mod: Store SFW cookie for 30 days.
1692
+ * Mod: Server IP added to connection report.
1693
+ * Fix: spam_stat is not defined.
1694
+
1695
+ = 5.118.1 April 19 2019 =
1696
+ * Fix: Fatal error.
1697
+ * Mod: Spam protection improved on registrations.
1698
+
1699
+ = 5.118 April 19 2019 =
1700
+ * Fix: Cookies on registration page.
1701
+ * Fix: Update fix.
1702
+ * Fix: Wordpress built-in API.
1703
+ * Fix: WooCommerce checkout form.
1704
+ * Fix: UpdraftPlus. Saving settings.
1705
+ * Fix: Convert Pro saving settings.
1706
+ * Fix: UTF-8 Converting.
1707
+ * Fix: GDPR notice.
1708
+ * Fix: cleantalk_sessions table size reduced.
1709
+ * Mod: Localization.
1710
+ * Mod: Performance improved.
1711
+ * Mod: SpamFierWall improvments.
1712
+ * Mod: IP detection improved.
1713
+ * Mod: JavaScript check rewised.
1714
+ * New: Setting "Use alternative mechanism for cookies".
1715
+
1716
+ = 5.117.1 April 5 2019 =
1717
+ * Fix: GDPR notice.
1718
+ * Fix: noCacheJS localization.
1719
+ * Fix: Fatal error when updating.
1720
+
1721
+ = 5.117 March 27 2019 =
1722
+ * New: Update logic runs on all pages.
1723
+ * New: Integration for Ajax Contact Forms plugin.
1724
+ * New: Notification for users groups about new comments.
1725
+ * New: SFW die page. Show browser and page creation time.
1726
+ * Fix: Huge bug in Cleantalk.php connected with servers changing.
1727
+ * Fix: Check AJAX requests for logged in users.
1728
+ * Fix: Deleting debug in JS.
1729
+ * Fix: Validating settings before saving.
1730
+
1731
+ = 5.116.3 March 14 2019 =
1732
+ * Fix: "Headers already sent" error.
1733
+ * Fix: Images paths.
1734
+ * Fix: IP detection.
1735
+ * Fix: Skip lost password form check
1736
+ * Fix: Skip mobile requests (push settings)
1737
+ * Fix: PHP notice when detecting BuddyPress template.
1738
+
1739
+ = 5.116.2 March 7 2019 =
1740
+ * Fix: Creating tables in MariaDB.
1741
+
1742
+ = 5.116.1 March 6 2019 =
1743
+ * Fix: Creating tables in DB.
1744
+ * Fix: PHP Warning in spam statistics widget.
1745
+
1746
+ = 5.116 March 6 2019 =
1747
+ * Spam filtration quality improved.
1748
+ * New: Storing visited URLs.
1749
+ * New: Check before validation Contact Form 7, Comments, Jetpack comments.
1750
+ * New: Get validation result for Contact Form 7, Comments, Jetpack comments.
1751
+ * Fix: ES add subscriber.
1752
+ * Fix: IP detection.
1753
+
1754
+ = 5.115.2 February 27 2019 =
1755
+ * Fix: False positives spam detection in WP Forms and Contact Form 7.
1756
+
1757
+ = 5.115.1 February 16 2019 =
1758
+ * Fix: SpamFireWall's false positives.
1759
+
1760
+ = 5.115 February 14 2019 =
1761
+ * Fix: Http_only flag for backend cookies.
1762
+ * Fix: Spam filtration improved.
1763
+ * New: IP detection improved.
1764
+ * Fix: SpamFirewall update speeded up.
1765
+ * New: False positives with caching solutions decreased.
1766
+ * New: Opportunity to use Wordpress HTTP API to connect with Cloud.
1767
+
1768
+ = 5.114 January 31 2019 =
1769
+ * New: Setting "Use Wordpress HTTP API" as alternative to CURL. Disabled by default.
1770
+ * Fix: Formidable: Adding small JS check when adding JS_key.
1771
+ * Mod: layout of settings page.
1772
+ * Mod: Banner logic altered.
1773
+
1774
+ = 5.113.2 January 18 2019 =
1775
+ * Fix: "Settings" link returns to plugin page.
1776
+
1777
+ = 5.113.1 January 17 2019 =
1778
+ * Fix: Conflict with CityTours theme.
1779
+ * Fix: Error for Wordperss lower 4.7.
1780
+ * Add: Spam protection: "Validate email for existance".
1781
+
1782
+ = 5.113 January 16 2019 =
1783
+ * Fix: Fast and Simple Contact Form.
1784
+ * Fix: Settings layout.
1785
+ * Fix: Error with WooCommerce Quickview.
1786
+ * Fix: Bitrix24 contact form.
1787
+ * Fix: Request time decreased.
1788
+ * Fix: Requesting account status when activating for IP licenses.
1789
+ * Add: Precise AJAX request detection.
1790
+ * Spam protection improved.
1791
+
1792
+ = 5.112 December 21 2018 =
1793
+ * Fix: Woocommerce AJAX checkout form.
1794
+ * Fix: Profile Builder Pro.
1795
+ * Fix: DB structure improvements for WPMS.
1796
+ * Spam filtering quality improved.
1797
+ * Minor fixes.
1798
+
1799
+ = 5.111 December 13 2018 =
1800
+ * Fix: Double request in JetPack contact form.
1801
+ * Fix: Email notification about spam registration.
1802
+ * Fix: Links button for feedback comments.
1803
+ * Fix: Mail notification about plugin error.
1804
+ * Fix: Key field output.
1805
+ * Minor fixes.
1806
+
1807
+ = 5.110 November 29 2018 =
1808
+ * Integration: BuddyPress ActivityWall spam protection.
1809
+ * Add: Support different BuddyPress templates on activity wall.
1810
+ * Fix: Admin/moderator checking for validate post data.
1811
+ * Add: GDPR setting for shortcode.
1812
+ * Fix: Increase timeout for spam_check_cms to 15.
1813
+
1814
+ = 5.109 November 15 2018 =
1815
+ * Fix: Added URL and IP exclusions to Contact Form 7.
1816
+ * Fix: js error when responseText is not exists
1817
+ * Fix: Sitename when getting key automatically under WPMS.
1818
+ * Mod: SpamFireWall is now fully compatible with WPMS.
1819
+ * Mod: Setting 'Tell others about CleanTalk' was deleted.
1820
+ * Mod: Protection from spam improved.
1821
+
1822
+ = 5.108.1 November 8 2018 =
1823
+ * Fix: Errors with integration class.
1824
+
1825
+ = 5.108 November 7 2018 =
1826
+ * Fix: White label mode.
1827
+ * Fix: SpamFireWall now can be disabled.
1828
+ * Fix: Layout.
1829
+ * Integration: WPForms.
1830
+ * Add: Message about block for all no integrated AJAX forms.
1831
+ * Add: Displaying account name near api key.
1832
+
1833
+ = 5.107 October 29 2018 =
1834
+ * Fix: Ninja Forms integration.
1835
+ * Fix: Cookie usage.
1836
+ * Add: Capturing AJAX responses from non integrated forms.
1837
+ * Spam protection improved.
1838
+ * Minor fixes.
1839
+
1840
+ = 5.106 October 11 2018 =
1841
+ * Spam filtration improved.
1842
+ * New: White Label mode.
1843
+ * Modification: Warning message about test on SpamFireWall die page.
1844
+ * Integration: WP Maintenance Mode.
1845
+ * Fix: S2Member.
1846
+ * Fix: JavaScript attachments reconsidered.
1847
+ * Fix: Admin banners layout.
1848
+ * Fix: Minor layout fixes.
1849
+
1850
+ = 5.105 September 26 2018 =
1851
+ * Integration: Now bloking spam for QAEngine questions.
1852
+ * Fix: Async http__request call.
1853
+ * Fix: Unnecessary get_antispam_report_breif method call.
1854
+ * Layout: Hide "Do you like Cleantlak?" when key is not ok.
1855
+ * Layout: Minor fixes.
1856
+
1857
+ = 5.104 September 18 2018 =
1858
+ * Fix: Error when saving settings.
1859
+ * Fix: Trying update plugin plugin for the first installation.
1860
+ * Fix: Update system.
1861
+ * Fix: Errors output.
1862
+ * Fix: Plugin's settings under WPMS.
1863
+ * Fix: SpamFireWall update.
1864
+ * Fix: The server change system repaired.
1865
+ * Mod: Cron saving tasks improved.
1866
+
1867
+ = 5.103.1 September 14 2018 =
1868
+ * Fix: Error when saving settings.
1869
+ * Fix: Error when getting key automatically.
1870
+
1871
+ = 5.103 September 13 2018 =
1872
+ * Fix: Gravity Forms response message.
1873
+ * Fix: SpamFireWall redirect to 404 page.
1874
+ * Major anti-spam plugin improvement.
1875
+ * Recombined setting page.
1876
+ * Added error notification.
1877
+ * Mod: S2 Members integration.
1878
+ * Mod: Improved remote calls.
1879
+
1880
+ = 5.102 August 29 2018 =
1881
+ * Fix: Users and comments check.
1882
+ * Fix: Update from 5.70 or previous versions.
1883
+ * Fix: GDPR public JS-script.
1884
+ * Fix: Dashboard widget JS scripts attachment.
1885
+ * Fix: WooCommerce "Place order" action.
1886
+ * Mod: Notification logic altered.
1887
+ * Mod: Users check table now has 'Signed up' column.
1888
+ * Minor fixes.
1889
+
1890
+ = 5.101 August 10 2018 =
1891
+ * Fix: Set cookie only for non-dashboard pages.
1892
+ * Fix: Dashboard widget JS error.
1893
+ * Fix: JavaScript error for some environment.
1894
+ * Mod: Antispam protection accelerated for some pages.
1895
+
1896
+ = 5.100 July 30 2018 =
1897
+ * Fix: JavaScript dependencies.
1898
+
1899
+ = 5.99.1 July 17 2018 =
1900
+ * IP detection fixed and improved.
1901
+
1902
+ = 5.99 July 10 2018 =
1903
+ * Fix: WooCommerce false positives.
1904
+ * Fix: SpamFireWall IP detection.
1905
+ * Minor fixes.
1906
+
1907
+ = 5.98 June 27 2018 =
1908
+ * Fix: WooCommerce: Exclusion.
1909
+ * Fix: Public GDPR JS code.
1910
+ * Minor fixes.
1911
+
1912
+ = 5.97 June 7 2018 =
1913
+ * Fix: Update system.
1914
+ * Fix: Feedback from public page (admin only).
1915
+ * Fix: Users and comment check: API error.
1916
+ * Fix: Too many negative reports. (Too big ct_data option)
1917
+ * Fix: SpamFireWall: Infinite redirection on the blocking page.
1918
+ * Minor fixes.
1919
+
1920
+ = 5.96 May 22 2018 =
1921
+ * Fix: Update system.
1922
+ * Mod: Reset all counters button in admin bar.
1923
+ * Mod: GDPR compliance.
1924
+ * Minor fixes.
1925
+
1926
+ = 5.95.1 May 3 2018 =
1927
+ * Fix: "Get key automatically" button display logic.
1928
+ * Fix: PHP notices.
1929
+
1930
+ = 5.95 May 2 2018 =
1931
+ * Spam filtration improved.
1932
+ * Fix: Public widget layout.
1933
+ * Fix: Connection reports output.
1934
+ * Minor fixes.
1935
+
1936
+ = 5.94 April 23 2018 =
1937
+ * Mod: Async load option for JS.
1938
+ * Mod: JS scripts loading is conditional.
1939
+ * Fix: IP detection.
1940
+ * Fix: IP detection.
1941
+ * Fix: Javascript error.
1942
+
1943
+ = 5.93.1 April 9 2018 =
1944
+ * Fix: Fatal error on PHP 5.5 or lower.
1945
+
1946
+ = 5.93 April 9 2018 =
1947
+ * Fix: SpamFirewall IP detection.
1948
+ * Fix: Contact Form 7. False positives.
1949
+ * Mod: Autoupdate function improved.
1950
+ * Minor fixes.
1951
+
1952
+ = 5.92.2 March 23 2018 =
1953
+ * Fix: Error if cURL extension is disabled.
1954
+
1955
+ = 5.92.1 March 23 2018 =
1956
+ * Fix: Spelling
1957
+ * Fix: Fatal error if cURL extension is disabled.
1958
+
1959
+ = 5.92 March 22 2018 =
1960
+ * IP detection improved.
1961
+ * Fix: SSL connection.
1962
+ * Fix: False positives spam detection in Contact Form 7.
1963
+ * Minor fixes.
1964
+
1965
+ = 5.91 March 15 2018 =
1966
+ * Fix: Errors for PHP compiled without XML support.
1967
+ * Fix: Spelling and translation.
1968
+ * Stability increased.
1969
+ * Minor fixes.
1970
+
1971
+ = 5.90 March 7 2018 =
1972
+ * Improvement: Better IP recognition in Spam FireWall.
1973
+ * Fix: Gravity Froms blocking message.
1974
+ * Security improvments.
1975
+ * Minor fixes.
1976
+
1977
+ = 5.89 February 21 2018 =
1978
+ * Improved spam filtration quality.
1979
+ * Improved compatibility.
1980
+ * Public widget: Styles and referral link added.
1981
+ * Dashboard widget: revised and fixed.
1982
+ * Minor fixes.
1983
+
1984
+ = 5.88 February 12 2018 =
1985
+ * Integration: ConvertPro.
1986
+ * Improvement: Search for visitor's names in request.
1987
+ * Fix: Contact Form 7 message recognition.
1988
+ * Preparation for the remote plugin update.
1989
+ * Minor fixes.
1990
+
1991
+ = 5.87 February 2 2018 =
1992
+ * Filtration quality improved.
1993
+ * Fix: WP Foto Vote downloading images.
1994
+ * Fix: Fatal error for unsupported PHP 5.2.
1995
+ * Fix: Formidable Forms improved spam filtration.
1996
+
1997
+ = 5.86 January 25 2018 =
1998
+ * Fix: High CPU load with wp-ajax.php.
1999
+ * Fix: Mailpoet: Newsletter.
2000
+ * Fix: Gravity: Forms standardization for input fields.
2001
+ * Fix: ajax hook checks data for contact form.
2002
+ * Fix: UTF8 character in requests.
2003
+
2004
+ = 5.85 January 11 2018 =
2005
+ * Fix: Fast Secure contact form spam block message.
2006
+ * Fix: IP license status.
2007
+ * Layout: Dashboard widget description altered.
2008
+
2009
+ = 5.84 December 26 2017 =
2010
+ * Integration: PeepSo contact form
2011
+ * Repared: Feedback from comments page.
2012
+ * Fix: mb_* functions used only if exists.
2013
+ * Fix: Gravity forms: Multi-page form logic repared.
2014
+ * Fix: Gravity forms: AJAX form logic repared.
2015
+ * Minor fixes.
2016
+
2017
+ = 5.83.2 December 19 2017 =
2018
+ * Fix: Error in base class.
2019
+
2020
+ = 5.83.1 December 19 2017 =
2021
+ * Fix: CDN IP detection.
2022
+
2023
+ = 5.83 December 19 2017 =
2024
+ * Improving: Stability and compatibility.
2025
+ * Improving: Spam protection.
2026
+ * Fix: Comments logic filtration.
2027
+ * Fix: Admin bar counter.
2028
+ * Minor errors fixes.
2029
+
2030
+ = 5.82.1 December 7 2017 =
2031
+ * Fixed minor error with attaching JS and CSS files.
2032
+
2033
+ = 5.82 December 4 2017 =
2034
+ * Plugin doesn't use PHP sessions anymore.
2035
+ * Bug fixes.
2036
+ * Improved update logic.
2037
+
2038
+ = 5.81 November 22 2017 =
2039
+ * Fixed error with "Show/Hide key" button.
2040
+ * Slightly improved spam protection for all forms.
2041
+ * Small errors fixes.
2042
+
2043
+ = 5.80 November 3 2017 =
2044
+ * Spam protection improved.
2045
+ * Improved filtration quality for WooCommerce checkout.
2046
+ * Minor fixes for Spam FireWall.
2047
+
2048
+ = 5.79 October 26 2017 =
2049
+ * Spam protection improved.
2050
+ * Fixed issue with existing spam comments check.
2051
+ * Added posibility to exclude IP from check.
2052
+ * Minor fixes.
2053
+
2054
+ = 5.78 October 16 2017 =
2055
+ * Improved compatibility with themes. Changed core functions prefix.
2056
+ * Fixed issue with WooCommerce checkout.
2057
+ * Spam protection improved.
2058
+ * Minor fixes.
2059
+
2060
+ = 5.77 October 2 2017 =
2061
+ * Connection report's system.
2062
+ * Integration for CouponXXL Theme.
2063
+ * Fixed issue with mb_* functions.
2064
+ * Banners logic updated.
2065
+
2066
+ = 5.76 September 20 2017 =
2067
+ * Fixed issue with Spam FireWall and caching plugins.
2068
+ * Banners logic updated.
2069
+
2070
+ = 5.75 September 15 2017 =
2071
+ * Pause feature for users/comments spam check.
2072
+ * Improved protection from spam.
2073
+ * Small fixes.
2074
+
2075
+ = 5.74.2 September 2 2017 =
2076
+ * Fix for users spam check for PHP 5.3 and lower.
2077
+
2078
+ = 5.74.1 September 2 2017 =
2079
+ * Fix for the update system and cloud communication.
2080
+ * Added possibility to check users and comments for spam with a specific date range.
2081
+
2082
+ = 5.74 August 31 2017 =
2083
+ * Users and comments spam check: Two check types (fast and accurate).
2084
+ * Fix for WooCommerce checkout test.
2085
+ * Minor fixes.
2086
+
2087
+ = 5.73 August 11 2017 =
2088
+ * Fix for spam check for already existed users and comments.
2089
+ * Spam FireWall updated.
2090
+ * Layout fix for BT Comments.
2091
+ * Minor fixes.
2092
+
2093
+ = 5.72 July 27 2017 =
2094
+ * Improved spam check for existed users and comments.
2095
+ * Minor fixes.
2096
+
2097
+ = 5.71 July 20 2017 =
2098
+ * Improved spam protection for external forms.
2099
+ * Optimization.
2100
+ * Minor fixes.
2101
+
2102
+ = 5.70.2 July 17 2017 =
2103
+ * Fix for Spam FireWall for Multisite.
2104
+
2105
+ = 5.70.1 July 17 2017 =
2106
+ * Fix for Spam FireWall.
2107
+ * Spam detection improved.
2108
+
2109
+ = 5.70 July 13 2017 =
2110
+ * New updater logic.
2111
+ * Self cron system.
2112
+ * Improved AMP compatibility.
2113
+ * Optimization.
2114
+ * Fixed users and comments spam check.
2115
+ * Fixed layout for Comment's feedback from public page.
2116
+ * Updated Spam FireWall.
2117
+ * SFW: Spam FireWall counter now work in real-time.
2118
+ * SFW: Improved compatibility with different Data Bases.
2119
+
2120
+ = 5.69 July 3 2017 =
2121
+ * Reviewer - integration.
2122
+ * Optimization for Users and Comments check for big databases.
2123
+ * Errors fixes.
2124
+ * Improved protection from spam.
2125
+
2126
+ = 5.68 June 22 2017 =
2127
+ * Contact Form for WordPress - Ultimate Form Builder Lite - integration.
2128
+ * Contact Bank - Contact Forms Builder - integration.
2129
+ * Smart Forms - integration.
2130
+ * cformsII - integration.
2131
+ * Contact Form by Web-Settler - integration.
2132
+ * Error fixes.
2133
+
2134
+ = 5.67.3 June 9 2017 =
2135
+ * Fixed JS attachment error.
2136
+
2137
+ = 5.67.2 June 5 2017 =
2138
+ * Fixed error with IP determination.
2139
+
2140
+ = 5.67.1 June 4 2017 =
2141
+ * Fixed JS error in 5.67 version.
2142
+ * Integrations: Enfold theme, Convertplug.
2143
+ * Links to check for Emails/IP for spam.
2144
+ * Control comments and feedback about them from public post's page.
2145
+ * Improved connection stability with cloud service.
2146
+ * Spam protection improved.
2147
+ * Other small fixes.
2148
+
2149
+ = 5.67 June 1 2017 =
2150
+ * Integrations: Enfold theme, Convertplug.
2151
+ * Links to check for Emails/IP for spam.
2152
+ * Control comments and feedback about them from public post's page.
2153
+ * Improved connection stability with cloud service.
2154
+ * Spam protection improved.
2155
+ * Other small fixes.
2156
+
2157
+ = 5.66 May 23 2017 =
2158
+ * Spam protection improved.
2159
+ * Major fixes for users and comments spam check.
2160
+ * Added feedback from Wordpress comments list.
2161
+ * Fix for "internal forms check" option.
2162
+ * Fixed issue with caching Spam FireWall die page.
2163
+ * Other small fixes.
2164
+
2165
+ = 5.65 May 16 2017 =
2166
+ * Fix for PayPal redirecton.
2167
+ * Fixed issue with empty query for bulk comments test.
2168
+ * Added protection for Enfold contact form.
2169
+ * Ninja forms integration.
2170
+
2171
+ = 5.64 April 26 2017 =
2172
+ * Integration for Facebook registrations.
2173
+ * Small fixes for WPMS.
2174
+ * Fix for Activecampaign service.
2175
+ * Fix for check spam users.
2176
+ * Fixed rare notice Notice: Undefined index: REQUEST_URI
2177
+
2178
+ = 5.63 April 20 2017 =
2179
+ * Fix for the dashboard spam stat widget.
2180
+ * Added translation posibility for all text.
2181
+
2182
+ = 5.62 April 17 2017 =
2183
+ * Fix for the dashboard spam statistics widget.
2184
+ * Fix for users spam check.
2185
+ * Small appearance changes.
2186
+
2187
+ = 5.61 April 6 2017 =
2188
+ * Improved filtration.
2189
+ * Additional logic for the form recognizing.
2190
+ * Integration: Divi Theme Contact Form.
2191
+ * Fix: Gravity Forms multipages forms.
2192
+ * Stat Widget: Minor fixes.
2193
+ * Added possibility to download results of the users check in CSV format.
2194
+ * Alteration for settings page (footer).
2195
+
2196
+ = 5.60.1 March 29 2017 =
2197
+ * Fixed error function 'locale_get_display_region' no exists.
2198
+
2199
+ = 5.60 March 29 2017 =
2200
+ * Added main dashboard widget with spam sctivity stats.
2201
+ * Mailster - integration.
2202
+ * Base class updated.
2203
+
2204
+ = 5.59 March 24 2017 =
2205
+ * Users/comments check fix.
2206
+ * Plugin's name changed to Anti-Spam by CleanTalk.
2207
+ * Trial banner is dismissable. Disapear for 24h or till logout.
2208
+ * Settings modified (Auto testing failed warning).
2209
+ * Mailing(inactive key) interval increased to 6 hours.
2210
+
2211
+ = 5.58.6 March 16 2017 =
2212
+ * Fix for Ninja forms (protection updated).
2213
+ * Fix for QA Theme.
2214
+ * Fix for RSVP form.
2215
+ * Setting changes (Spam FireWall).
2216
+ * Improved debug section.
2217
+ * Improved gathering data function.
2218
+ * Minor fixes.
2219
+
2220
+ = 5.58.5 March 6 2017 =
2221
+ * Minor backend fix.
2222
+
2223
+ = 5.58.4 March 6 2017 =
2224
+ * Users check fix (redirect after the check).
2225
+ * Fixed PHP Notice "HTTP_REFERER" is unset.
2226
+ * Updated Notice logic.
2227
+
2228
+ = 5.58.3 February 28 2017 =
2229
+ * Bitrix24 Contact form integration.
2230
+ * Users/comments check fix.
2231
+ * Spam sorting updated.
2232
+ * Banner showing logic.
2233
+
2234
+ = 5.58.2 February 17 2017 =
2235
+ * Cron fix for daily report.
2236
+
2237
+ = 5.58.1 February 16 2017 =
2238
+ * Minor fixes.
2239
+
2240
+ = 5.58 February 15 2017 =
2241
+ * Work without access key
2242
+ * Bitrix24 contact integration
2243
+ * Issues fixes
2244
+
2245
+ = 5.57.1 February 8 2017 =
2246
+ * Fix for notice logic.
2247
+
2248
+ = 5.57 February 8 2017 =
2249
+ * Setting page changes.
2250
+ * Bug fixes for WooCommerce.
2251
+ * Spam FireWall filters only GET requests.
2252
+ * Optimization.
2253
+ * Minor and major fixes.
2254
+
2255
+ = 5.56.1 January 25 2017 =
2256
+ * Minor fixes
2257
+
2258
+ = 5.56 January 19 2017 =
2259
+ * Integrations: MailChimp Premium, Profile Press.
2260
+ * Changes comments flow.
2261
+ * FireWall updater fix.
2262
+ * Users check optimization.
2263
+
2264
+ = 5.55 December 23 2016 =
2265
+ * Integrations: Caldera Forms, Visual Form Builder.
2266
+ * Fix for different 'cookies' header names.
2267
+ * Fixed user deletion.
2268
+
2269
+ = 5.54 December 12 2016 =
2270
+ * Integrations: AmoForms, Contact Form Clean and Simple.
2271
+ * Comments check logic refreshed.
2272
+ * Registration JS error fix.
2273
+ * Users check fix.
2274
+ * Fix for translation system.
2275
+ * Minor fixes.
2276
+
2277
+ = 5.53.1 December 9 2016 =
2278
+ * Minor layout fixes.
2279
+
2280
+ = 5.53 November 28 2016 =
2281
+ * Addition warning before deleting users.
2282
+ * Spam FireWall is enabled by default.
2283
+ * Usernoise modal feedback / contact form : integration.
2284
+ * Translations.
2285
+ * Optimization.
2286
+ * Fixes.
2287
+
2288
+ = 5.52.1 November 14 2016 =
2289
+ * Users and comments check: Using new API method.
2290
+ * Quick Contact From: Integration via "Custom Contact Forms" setting.
2291
+ * JavaScript filtration improved.
2292
+ * Translation changes.
2293
+ * Optimized JavaScript code.
2294
+
2295
+ = 5.51 November 2 2016 =
2296
+ * Added protection for internal forms
2297
+ * Immediate spam check for comments and users from WP dashboard
2298
+ * Optimized code
2299
+
2300
+ = 5.50.1 October 24 2016 =
2301
+ * Improved filtration in contact forms.
2302
+ * Spam FireWall: Fixed issue with SFW logs
2303
+ * Skipping service fields: Fast Secure Contact Froms, QU Forms, Custom Contact Forms
2304
+
2305
+ = 5.50 October 20 2016 =
2306
+ * Custom contact forms: integration.
2307
+ * Pirate Forms: integration.
2308
+ * PHP 7 compatibility: Deleted third-party JSON library and dependences.
2309
+ * PHP 7 compatibility: Fixed end of lines.
2310
+ * YOAST Seo: Fixed PHP warnings.
2311
+ * Spam FireWall: Minor fix for Spam FireWall counter.
2312
+ * Only admin could access to CleanTalk dashboard (exclude Authors an Editors).
2313
+ * Improved filtration in contact forms.
2314
+
2315
+ = 5.49.2 October 5 2016 =
2316
+ * Second Fix for database error. Stable version.
2317
+
2318
+ = 5.49.1 October 5 2016 =
2319
+ * Fixed database error.
2320
+
2321
+ = 5.49 October 3 2016 =
2322
+ * Spam FireWall feature: Class upgraded.
2323
+ * New feature: Delete links from approved comments.
2324
+ * Settings: Grouped.
2325
+ * Settings: Altered description fixed spelling mistakes.
2326
+ * Settings: Added indicator for Spam FireWall.
2327
+ * Admin bar: Added Spam FireWall counter
2328
+ * Clean and Simple Contact Form: Direct integration.
2329
+ * WooCommerce: Don't check password recovery form.
2330
+ * WooCommerce Wishlists: Issue with check for Google bots.
2331
+ * JetPack: contact form fix.
2332
+ * Fixed and created the defaults for all CleanTalk options.
2333
+ * Fixed spelling mistakes.
2334
+
2335
+ = 5.48 September 15 2016 =
2336
+ * buddyPress: Added private messages filtering. Doesn't check user if he has 3 or more messages in the "sentbox" and "inbox" folders.
2337
+ * buddyPress: Added option in settings for private messages check.
2338
+ * WooCommerce Wishlist: Added check for wishlists.
2339
+ * Fixed issue with "check all post data" option.
2340
+ * Improved filtering for Gravity Forms
2341
+ * Mobile Assistant Connector fix
2342
+ * Minor fixes.
2343
+
2344
+ = 5.47 September 5 2016 =
2345
+ * WooCommerce: direct integration for checkout form.
2346
+ * WooCommerce Sensei: login form fix.
2347
+ * bbPress: Added the check for topics and comments with stop_words
2348
+ * bbPress: Skip check for admin in comments and topics
2349
+ * UserPro: fixes. Request without field "shortcode"
2350
+ * Contact Form 7: Bug fix.
2351
+ * Spam FireWall: Optimized logs rotation.
2352
+ * Updated inner functions (compatibility fix for PHP 5.4+)
2353
+ * Fixed output of counters (without spamfirewall stats)
2354
+ * Fixed spelling in settings
2355
+ * Added "Delete from the list" button in comments spam check page
2356
+ * Minor fixes.
2357
+
2358
+ = 5.46 August 17 2016 =
2359
+ * Fixed issue with admin bar links in WP Multi Network mode.
2360
+ * Added "All time counter" and "Daily counter" into admin bar.
2361
+ * Added settings to disable counters in admin bar.
2362
+ * New style for "Get access key manually" button.
2363
+
2364
+ = 5.45.2 August 4 2016 =
2365
+ * Added Anti-Spam protection for Quick Event Manager.
2366
+ * Improved bulk spam test for users. Now the plugin does not mark as Spam user, if the user IP address has spam activity more then 30 days ago.
2367
+ * Fixed bulk spam test for comments. Previous version had a conflict between spam history for IP and Email.
2368
+ * Minor fix function to get the API key.
2369
+
2370
+ = 5.45.1 July 26 2016 =
2371
+ * Fixed issue with missed spam messages, subscriptions.
2372
+ * Improved bulk spam test for comments. Now the plugin will not mark as Spam comments, if a comment sender (IP address) has spam activity more then 30 days ago.
2373
+
2374
+ = 5.45 July 21 2016 =
2375
+ * Optimized bulk spam comments deletion.
2376
+ * Turned off JavaScript anti-spam cookies if the option 'Set cookies' is turned off. It helps to avoid issues with Varnish.
2377
+ * Added links to bulk spam comments&users removal tool.
2378
+
2379
+ = 5.44.1 July 13 2016 =
2380
+ * Optimized options getting code.
2381
+ * Added the option 'Protect Logged in users' to do anti-spam tests for submissions by logged in users.
2382
+
2383
+ = 5.43.2 June 30 2016 =
2384
+ * Optimized anti-spam code for AJAX based contact forms.
2385
+ * Fixed CSS layout of counters in Admin bar (issue with layout in IE11).
2386
+
2387
+ = 5.43.1 June 23 2016 =
2388
+ * Added agent version in requests to test a connection between the website and servers.
2389
+ * Fixed issue with PHP notices in cleantalk-admin.php.
2390
+
2391
+ = 5.43 June 22 2016 =
2392
+ * Added spam protection for registrations via 'Login with AJAX' plug-in.
2393
+ * Added a new counter to Admin bar that allows to count spam and approved submissions since last reset.
2394
+ * Update the code that tests a connection between a website and CleanTalk's servers. New version doesn't generate submissions with email good@cleantalk.org.
2395
+ * Fixed issue with spam protection for nested forms by Formidable plug-in.
2396
+
2397
+ = 5.42 2016-06-15 =
2398
+ * Added anti-spam protection for UserPro.
2399
+ * Improved protection for Formidable forms + Varnish.
2400
+ * Improved bulk search for spam accounts.
2401
+ * Fixed spam protection for pages that contain multiple Formidable forms with same HTML ID.
2402
+ * Optimized PHP code to be compatible with PHP 5.4 and above. The patch has been applied to Formidable forms spam protection.
2403
+ * Minor fixes in plugin backend.
2404
+
2405
+ = 5.41 2016-05-31 =
2406
+ * Added HTTP response in plugin response if an network issue was happend.
2407
+ * Optimized JavaScript anti-spam test for Formidable forms.
2408
+ * Re-stored the option to auto redirect to plugn settings after plugin activation.
2409
+ * Fixed issue with nasted fields in Formidable forms.
2410
+
2411
+ = 5.40.3 2016-05-26 =
2412
+ * Added option to encrypt (SSL) connection to CleanTalk anti-spam servers.
2413
+ * Added JSON encoding for AJAX forms.
2414
+ * Obfuscated private data for Custom contact forms option.
2415
+ * Optimized bulk users check for spam over blacklists database.
2416
+ * Fixed issue with lost connection to servers and JavaScript anti-spam test.
2417
+ * Fixed issue with WordFence and collect_details.
2418
+
2419
+ = 5.40.2 2016-05-11 =
2420
+ * Improved account status check logic.
2421
+ * Fixed issue with double anti-spam tests for FastSecure contact forms.
2422
+ * Fixed issue with nulled JavaScript variables assigned from backend. This issue might me occurred on standart WordPress registration form and with failed JavaScript spam test.
2423
+ * Fixed issue with session_start() with PHP sessions stored in memcache.
2424
+
2425
+ = 5.40.1 2016-04-28 =
2426
+ * Fixed issue with Super Socializer.
2427
+ * Fixed issue with spam filtration for logged in users and Formidable forms.
2428
+ * Added logging of all submitted fields for FastSecure contact form.
2429
+
2430
+ = 5.40 2016-04-19 =
2431
+ * Added JSON encoding for posts that were protected via Custom contact forms option. It allows show anti-spam logs in the Dashboard in more comfortable view.
2432
+ * Minor fix in plugin settings.
2433
+ * Fixed pagination for bulk users spam test.
2434
+ * Fixed issue with unknown _SESSION.
2435
+ * Fixed issue with double Spam FireWall database upload.
2436
+
2437
+ = 5.39.1 2016-04-04 =
2438
+ * Improved AJAX based anti-spam test with HTTPS backends.
2439
+ * Added fix to avoid issue with empty ct_info_flag on JavaScript side.
2440
+ * Added logic to exclude caching for Spam FireWall.
2441
+ * Removed a condition to skip accounts with 127.0.0.1 IP in spam test for registered acconts.
2442
+
2443
+ = 5.38.1 2016-03-24 =
2444
+ * Fixed issue with PHP sessions and 'The session id is too long or contains illegal characters'.
2445
+ * Removed Spam FireWall protection on /feed page.
2446
+ * Disabled anti-spam tests for AJAX calls if the option 'Custom contact forms' is turned off.
2447
+ * Added reject notice for spam submissions on Gravity forms with AJAX calls.
2448
+
2449
+ = 5.37.3 2016-03-10 =
2450
+ * Minor bug fixes. Added an option to support Varnish cache.
2451
+
2452
+ = 5.36.1 2016-02-05 =
2453
+ * Fixed bug, when users receive error after logging in
2454
+
2455
+ = 5.36 2016-02-04 =
2456
+ * Improved JavaScript anti spam protection
2457
+ * Improvements for avoiding blocking requests from payment systems
2458
+
2459
+ = 5.35 2016-01-14 =
2460
+ * Added support for IP licensing
2461
+ * Some anti-spam protection improvements
2462
+ * Small backend interface fixes
2463
+
2464
+ = 5.34.1 2015-12-17 =
2465
+ * Fixed trackback antispam protection: improved checking mechanism
2466
+ * Fixed problem with blocking MailPoet: added exclusions in spam checking algorithm
2467
+
2468
+ = 5.34 2015-12-10 =
2469
+ * Improved spam checking mechanism
2470
+ * Added "Collect browser details" option for better antispam protection
2471
+ * Fixed custom contact forms checking
2472
+ * Minor translations fixes
2473
+
2474
+ = 5.33.1 2015-12-04 =
2475
+ * Fixed issue with BBPress
2476
+ * Fixed anti-spam comments checking
2477
+ * Fixed bulk checking
2478
+ * Fixed trackback and pingback checking
2479
+
2480
+ = 5.33 2015-12-01 =
2481
+ * Backend interface fixes
2482
+ * Improved Spam FireWall efficiency
2483
+ * Improved performance of anti spam checking
2484
+
2485
+ = 5.32 2015-11-26 =
2486
+ * Added improvements for manual spam detection
2487
+ * Fixed errors in backend
2488
+ * Fixed bulk users anti spam checking
2489
+ * Added indicator for bulk spam checking
2490
+ * Added "Get access key automatically" feature
2491
+
2492
+ = 5.31 2015-11-11 =
2493
+ * Improved backend performance
2494
+ * Fixed counter of approved/blocked spam attacks
2495
+ * Fixed Spam Firewall logging
2496
+
2497
+ = 5.30 2015-11-05 =
2498
+ * Improved anti-spam checking
2499
+ * Optimized performance
2500
+ * Fixed blocking email preview in MailPoet
2501
+ * Interface fixes
2502
+ * WPMU interface fixes
2503
+
2504
+ = 5.29 2015-10-27 =
2505
+ * Optimized performance
2506
+ * Fixed bugs in custom contact forms spam checking
2507
+
2508
+ = 5.28.7 2015-10-23 =
2509
+ * Major backend peromance fix.
2510
+
2511
+ = 5.28 2015-10-16 =
2512
+ * Fixed errors in anti-spam checking
2513
+ * Restored options for spam checking registrations and cpmmon contact forms
2514
+ * Improved anti spam defence
2515
+ * Fixed problems with AJAX functionality in MailPoet, WooCommerce and other AJAX plugins
2516
+
2517
+ = 5.27 2015-10-13 =
2518
+ * Improvements in Spam FireWall feature
2519
+ * Code optimization
2520
+ * Backend interface fixes
2521
+
2522
+ = 5.26 2015-10-05 =
2523
+ * Added WordPress Language Pack support
2524
+ * Removed spam checking for some autorisation plugins
2525
+ * New experimental feature: Spam FireWall
2526
+
2527
+ = 5.25.2 2015-09-28 =
2528
+ * Fixed backend bug
2529
+
2530
+ = 5.25.1 2015-09-28 =
2531
+ * Added widget with anti-spam stats
2532
+ * Added information about blocked spam attacks in admin dashboard and CleanTalk settings
2533
+ * Added ability not to check comments for users with 3 or above allowed comments
2534
+ * Added an option 'Help others known CleanTalk' to show information for site visitors, that your site is protected from spam by us
2535
+ * Some backend interface settings
2536
+ * Removed "CleanTalk connection test" query
2537
+
2538
+ = 5.24.1 2015-09-16 =
2539
+ * Fixed some errors in frontend
2540
+ * Fixed access key saving
2541
+
2542
+ = 5.24 2015-09-14 =
2543
+ * Backend interface fixes
2544
+ * Improvement for AJAX JavaScript spam checking
2545
+
2546
+ = 5.23 2015-09-01 =
2547
+ * Fixed BuddyPress profile search false positivities of anti-spam protection.
2548
+ * Some interface fixes of bulk users & comments spam checking
2549
+
2550
+ = 5.22 2015-08-26 =
2551
+ * Fixed possible XSS issue for anti-spam test on third-party forms.
2552
+
2553
+ = 5.21 2015-08-21 =
2554
+ * Fixed bug with skipping spam submissions
2555
+ * Fixed bug with receiving old user_token for viewing anti-spam stats
2556
+ * Small backend fixes
2557
+
2558
+ = 5.20 2015-08-15 =
2559
+ * Fixed anti-spam stats in admin bar
2560
+ * Fixed issue with skipping spam submissions
2561
+ * Added some PHP-constants for advanced users
2562
+
2563
+ = 5.19 2015-08-11 =
2564
+ * New feature: anti-spam checking for registered users
2565
+ * Fixed issue with AJAX JavaScript checking
2566
+ * Fixed issue with SEO Yoast xml sitemaps.
2567
+
2568
+ = 5.18 2015-08-04 =
2569
+ * Fixed issue with user_token
2570
+ * Added anti-spam API, see our FAQ
2571
+
2572
+ = 5.17 2015-07-23 =
2573
+ * Fixed infinite redirection after activation
2574
+ * Minor backend fixes
2575
+
2576
+ = 5.16 2015-07-22 =
2577
+ * Fixed external services checking
2578
+ * Fixed mass comments deletion
2579
+ * Fixed AJAX anti-spam protection
2580
+
2581
+ = 5.15 2015-07-16 =
2582
+ * New feature: anti-spam protection for forms, that uses external services
2583
+
2584
+ = 5.14 2015-07-03 =
2585
+ * Added anti-spam protection for some themes and plugins
2586
+ * Some backend fixes
2587
+
2588
+ = 5.13 2015-06-12 =
2589
+ * Closing notification for anti-spam renew
2590
+ * Fixed bulk anti spam comment checking
2591
+
2592
+ = 5.12 2015-06-01 =
2593
+ * Added option for checking all post data for spam
2594
+ * Some JavaScript protection improvements
2595
+ * Added option for old JavaScript check (without AJAX)
2596
+
2597
+ = 5.10 2015-05-25 =
2598
+ * Fixed Javascript error on some forms
2599
+
2600
+ = 5.9 2015-05-21 =
2601
+ * Fixed Javascript error on CF7 and JetPack
2602
+ * Some backend and frontent fixes
2603
+
2604
+ = 5.8 2015-05-18 =
2605
+ * Minor fixes
2606
+
2607
+ = 5.7 2015-05-18 =
2608
+ * Fixed French translation
2609
+ * Fixed protection algorithm
2610
+
2611
+ = 5.6 2015-05-11 =
2612
+ * Fixed translation
2613
+ * Fixed bulk comments anti-spam checking
2614
+ * Added option for disabling anti spam stats in adminbar
2615
+ * Some security fixes
2616
+
2617
+ = 5.5 2015-04-29
2618
+ * Fixed security issue
2619
+
2620
+ = 5.4 2015-04-27 =
2621
+ * Some interface and functionality changes in plugin settings page
2622
+ * Added counter for anti-spam stats in admin bar
2623
+
2624
+ = 5.3 2015-04-13 =
2625
+ * Added anti-spam protection for Divi theme contact forms
2626
+ * Added anti-spam protection for MyMail contact forms
2627
+ * Added anti-spam protection for MailPoet Newsletters
2628
+ * Some interface and functionality changes in backend
2629
+
2630
+ = 5.2 2015-04-01 =
2631
+ * Added link for anti-spam stats
2632
+ * Added WP User Frontend Pro registration form protection
2633
+
2634
+ = 5.10 2015-03-24 =
2635
+ * Fixed site crash after installing 5.0 on some websites
2636
+
2637
+ = 5.00 2015-03-24 =
2638
+ * Added bulk comments checking for spam via CleanTalk blacklists
2639
+ * Added anti-spam form protection for 'Ajax Login & Register'
2640
+ * Fixed JetPack form protection
2641
+
2642
+ = 4.24 2015-03-20 =
2643
+ Added immediate spam protection activation.
2644
+
2645
+ = 4.22 2015-03-17 =
2646
+ * Added button for automatic spam protection key getting.
2647
+
2648
+ = 4.21 2015-03-11 =
2649
+ * Added license renew notification.
2650
+
2651
+ = 4.20 2015-03-03 =
2652
+ * German, Italian, Polish, Portuguese translations, minor code fixes.
2653
+
2654
+ = 4.19 2015-02-24 =
2655
+ * Increased JS keys lifetime.
2656
+
2657
+ = 4.18 2015-02-17 =
2658
+ * Bugfix - fixed bug with comments approvement, PayPal 'payment_status' and Akismet 'spam' status processing.
2659
+
2660
+ = 4.17 2015-02-12 =
2661
+ * New base class, divided code to 3 separate files - common, public and admin.
2662
+
2663
+ = 4.16 2015-02-05 =
2664
+ * New base class, fixed JetPack filters logics, optimized Formidable, bbPress, BuddyPress filters.
2665
+
2666
+ = 4.15 2015-01-29 =
2667
+ * Support of Contact Form 7 versions before 3.0.0, fixed global JS-vars and online notice cookie logics.
2668
+
2669
+ = 4.14 2015-01-19 =
2670
+ * Removed deprecated option from comment approvement code.
2671
+
2672
+ = 4.13 2014-12-29 =
2673
+ * Not spam comments auto approvement bug fix.
2674
+
2675
+ = 4.12 2014-12-29 =
2676
+ * Plugin backend minfor bug fixes.
2677
+
2678
+ = 4.11 2014-12-22 =
2679
+ * Major changes in spam protection algorithms.
2680
+
2681
+ = 4.10 2014-12-10 =
2682
+ * Minor improvements for custom contact/registration/subscribe forms.
2683
+
2684
+ = 4.9 2014-11-24 =
2685
+ * Minor bug fix for Contact form 7.
2686
+
2687
+ = 4.8 2014-11-19 =
2688
+ * Improved anti-spam protection for BuddyPress registrations and custom contact forms.
2689
+
2690
+ = 4.7 2014-11-16 =
2691
+ * Fixed JavaScript antispam test for FastSecure contact form.
2692
+
2693
+ = 4.6 2014-11-11 =
2694
+ * Minor changes in anti-spam logic for BuddyPress registrations, contact forms and bbPress guest posting.
2695
+
2696
+ = 4.5 2014-11-04 =
2697
+ * Bug fixes for Contact form 7 and bbPress guests posting.
2698
+
2699
+ = 4.4 2014-10-29 =
2700
+ * Improved JS checking for CF7.
2701
+
2702
+ = 4.2 2014-10-20 =
2703
+ * Increased plugin perfomance for BuddyPress registrations.
2704
+
2705
+ = 4.1 2014-10-13 =
2706
+ * Minor anti-spam improvements for contacts, registration and contact forms.
2707
+
2708
+ = 4.0 2014-10-06 =
2709
+ * Major anti-spam improvements for registration and contact forms.
2710
+
2711
+ = 3.9 2014-10-01 =
2712
+ * Did exception to do not break to create new user in WordPress backend.
2713
+
2714
+ = 3.8 2014-09-19 =
2715
+ * Bug fix release. Minor fixes in API class and JavaScript anti-spam test.
2716
+
2717
+ = 3.6 2014-09-15 =
2718
+ * Minor fixes in anti-spam protection for Formidable and custom contact forms.
2719
+
2720
+ = 3.4 2014-09-04 =
2721
+ * Spam comments rotation. Custom (themes) contact forms support.
2722
+
2723
+ = 3.2 2014-08-27 =
2724
+ * Minor changes in spam filtration logic.
2725
+
2726
+ = 3.1 2014-08-19 =
2727
+ * Major changes for comments antispam logic. Improved plugin speed.
2728
+
2729
+ = 2.59 2014-08-14 =
2730
+ * Antispam protection for bbPress guests posts. Improvement for JetPack comments and PHP API update.
2731
+
2732
+ = 2.58 2014-08-06 =
2733
+ * Added anti-spam protection for signups posted via WooCommerce order form.
2734
+ * Improved anti-spam protection for Contact Form 7.
2735
+ * Improved anti-spam protection for registrations. Now the plugin looking for JavaScript antispam test results not only in POST array, but in COOKIES array too. This improvement allows protect signup forms for any untested signups plugins and themes.
2736
+ * Updated PHP API. No the plugin can resolve sender IP for websites behind proxy servers. If the proxy servers uses private IP address.
2737
+
2738
+ = 2.57 2014-07-29 =
2739
+ * Improved anti-spam protection for comments. The plugin now proccessing website url in the comments form.
2740
+ * Fixed sign remove logic for approved comments. Previous version doesn't cut sign for comments approved via AJAX call in WordPress backend.
2741
+ * Fixed switching to SSL for comments. Previous version doesn't use secured connection for comments.
2742
+
2743
+ = 2.56 2014-07-21 =
2744
+ * Fixed account status check logic. Previous version makes unnecessary test API calls when the plugin asks account status check.
2745
+
2746
+ = 2.55 2014-07-11 =
2747
+ * Fixed bug with account status function. In backend the plugin showed notice 'Please don't forget to disable CAPTCHA if you have it on every page.
2748
+
2749
+ = 2.54 2014-07-11 =
2750
+ * Fixed signup anti-spam protection logic for BuddyPress registrations.
2751
+ * Fixed anti-spam protection for JetPack contact form.
2752
+ * Changed account status check logic.
2753
+
2754
+ = 2.53 2014-06-27 =
2755
+ * Fixed anit-spam protection bug for signups.
2756
+ * Changed anti-spam functions (comments and signups) priority.
2757
+
2758
+ = 2.52 2014-06-25 =
2759
+ * Fixed 'Fatal error: Call to a member function get_error_code()' issue with signups via BuddyPress.
2760
+
2761
+ = 2.51 2014-06-23 =
2762
+ * Added spam protection for registrations via plugin New User Approve by Josh Harrison. If the CleanTalk matched signup as spam this signup will be denied to placing in pending queue.
2763
+ * Added option "Use secure (SSL) connection to CleanTalk cloud". If the option enabled plugin will communicate with CleanTalk severs via 128bit encrypted data channel. So, if you have SSL protected webforms on website you can use this option to be sure that visitors personal data safely transmits to CleanTalk servers.
2764
+ * Fixed minor bug with loading backend functions.
2765
+
2766
+ = 2.49 2014-06-10 =
2767
+ * Added spam protection for S2Member Auth.net forms.
2768
+ * Added spam protection for multisite signup form.
2769
+ * Optimized account status check function.
2770
+
2771
+ = 2.46 2014-05-19 =
2772
+ * Added: HTML notice about the need to enable JavaScript.
2773
+ * Fixed: Fixed pingbacks anti-spam test.
2774
+
2775
+ = 2.44 2014-05-12 =
2776
+ * Added: Anti-spam protection for S2Member framework.
2777
+ * Improved: Plugin load time for backend and frontend.
2778
+ * Improved: JavaScript anti-spam test.
2779
+ * Fixed: PHP warning mb_convert_encoding()
2780
+
2781
+ = 2.42 2014-04-29 =
2782
+ * Fixed: JavaScript anti-spam test for comments.
2783
+
2784
+ = 2.38 2014-03-27 =
2785
+ * Fixed: Registraion form submit time spam test.
2786
+
2787
+ = 2.36 2014-03-12 =
2788
+ * Reversed to patches from old revisions.
2789
+
2790
+ = 2.35 2014-03-12 =
2791
+ * New: Notifications about disabled account
2792
+ * New: Improved JavaScript spam test.
2793
+ * Fixed: Code optimization
2794
+ * Fixed: JavaScript test for signups.
2795
+
2796
+ = 2.33 2014-02-12 =
2797
+ * Fixed: CURLOPT_FOLLOWLOCATION bug at admin notice
2798
+
2799
+ = 2.32 2014-02-04 =
2800
+ * New: Added notice about automatically approved comment. The notice shows only for first approved comment and only for new commentators (without approved comments) of the blog.
2801
+ * New: At WordPress console added banner for notices.
2802
+ * Changed: Screenshots updated.
cleantalk.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Anti-Spam by CleanTalk
4
  Plugin URI: https://cleantalk.org
5
  Description: Max power, all-in-one, no Captcha, premium anti-spam plugin. No comment spam, no registration spam, no contact spam, protects any WordPress forms.
6
- Version: 5.153.7
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: https://cleantalk.org
9
  Text Domain: cleantalk-spam-protect
@@ -82,9 +82,9 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
82
  // Customize \Cleantalk\ApbctWP\State
83
  // Account status
84
 
85
- $apbct->white_label = $apbct->network_settings['white_label'];
86
- $apbct->allow_custom_key = $apbct->network_settings['allow_custom_key'];
87
- $apbct->plugin_name = $apbct->network_settings['white_label__plugin_name'] ? $apbct->network_settings['white_label__plugin_name'] : APBCT_NAME;
88
  $apbct->api_key = !APBCT_WPMS || $apbct->allow_custom_key || $apbct->white_label ? $apbct->settings['apikey'] : $apbct->network_settings['apikey'];
89
  $apbct->key_is_ok = !APBCT_WPMS || $apbct->allow_custom_key || $apbct->white_label ? $apbct->data['key_is_ok'] : $apbct->network_data['key_is_ok'];
90
  $apbct->moderate = !APBCT_WPMS || $apbct->allow_custom_key || $apbct->white_label ? $apbct->data['moderate'] : $apbct->network_data['moderate'];
@@ -101,7 +101,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
101
  }
102
 
103
  // Disabling comments
104
- if($apbct->settings['disable_comments__all'] || $apbct->settings['disable_comments__posts'] || $apbct->settings['disable_comments__pages'] || $apbct->settings['disable_comments__media']){
105
  \Cleantalk\Antispam\DisableComments::getInstance();
106
  }
107
 
@@ -173,7 +173,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
173
  }
174
 
175
  // Facebook
176
- if ($apbct->settings['general_contact_forms_test'] == 1
177
  && (!empty($_POST['action']) && $_POST['action'] == 'fb_intialize')
178
  && !empty($_POST['FB_userdata'])
179
  ){
@@ -255,7 +255,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
255
 
256
  // SpamFireWall check
257
  if( $apbct->plugin_version == APBCT_VERSION && // Do not call with first start
258
- $apbct->settings['spam_firewall'] == 1 &&
259
  apbct_is_get() &&
260
  ! apbct_wp_doing_cron()
261
  ){
@@ -287,7 +287,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
287
  // After plugin loaded - to load locale as described in manual
288
  add_action('plugins_loaded', 'apbct_plugin_loaded' );
289
 
290
- if( !empty($apbct->settings['use_ajax']) &&
291
  ! apbct_is_in_uri( '.xml' ) &&
292
  ! apbct_is_in_uri( '.xsl' ) )
293
  {
@@ -301,21 +301,20 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
301
  require_once( CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-find-spam.php' );
302
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-admin.php');
303
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-settings.php');
304
-
305
- add_action( 'admin_init', 'apbct_admin__init___ajax_actions' );
306
-
307
  if (!(defined( 'DOING_AJAX' ) && DOING_AJAX)){
308
 
309
  add_action('admin_enqueue_scripts', 'apbct_admin__enqueue_scripts');
310
-
311
- add_action('admin_init', 'apbct_admin__init', 1);
312
  add_action('admin_menu', 'apbct_settings_add_page');
313
  add_action('network_admin_menu', 'apbct_settings_add_page');
314
  add_action('admin_notices', 'apbct_admin__notice_message');
315
  add_action('network_admin_notices', 'apbct_admin__notice_message');
316
 
317
  //Show widget only if enables and not IP license
318
- if( $apbct->settings['dashboard_widget__show'] && ! $apbct->moderate_ip )
319
  add_action('wp_dashboard_setup', 'ct_dashboard_statistics_widget' );
320
  }
321
 
@@ -340,7 +339,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
340
  // Check AJAX requests
341
  // if User is not logged in
342
  // if Unknown action or Known action with mandatory check
343
- if( ( ! apbct_is_user_logged_in() || $apbct->settings['protect_logged_in'] == 1) &&
344
  isset( $_POST['action'] ) &&
345
  ( ! in_array( $_POST['action'], $cleantalk_hooked_actions ) || in_array( $_POST['action'], $cleantalk_ajax_actions_to_check ) ) &&
346
  ! array_search( $_POST['action'], array_column( $apbct_active_integrations, 'hook' ) )
@@ -349,7 +348,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
349
  }
350
 
351
  //QAEngine Theme answers
352
- if (intval($apbct->settings['general_contact_forms_test']))
353
  add_filter('et_pre_insert_question', 'ct_ajax_hook', 1, 1); // Questions
354
  add_filter('et_pre_insert_answer', 'ct_ajax_hook', 1, 1); // Answers
355
 
@@ -372,7 +371,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
372
 
373
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-public.php');
374
  //Bitrix24 contact form
375
- if ($apbct->settings['general_contact_forms_test'] == 1 &&
376
  !empty($_POST['your-phone']) &&
377
  !empty($_POST['your-email']) &&
378
  !empty($_POST['your-message'])
@@ -445,7 +444,7 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
445
  }
446
 
447
  // Short code for GDPR
448
- if($apbct->settings['gdpr_enabled'])
449
  add_shortcode('cleantalk_gdpr_form', 'apbct_shrotcode_handler__GDPR_public_notice__form');
450
 
451
  }
@@ -492,11 +491,11 @@ function apbct_sfw__check()
492
  APBCT_TBL_FIREWALL_LOG,
493
  APBCT_TBL_FIREWALL_DATA,
494
  array(
495
- 'sfw_counter' => $apbct->settings['sfw_counter'],
496
  'api_key' => $apbct->api_key,
497
  'apbct' => $apbct,
498
  'cookie_domain' => parse_url( get_option( 'siteurl' ), PHP_URL_HOST ),
499
- 'set_cookies' => $apbct->settings['set_cookies'],
500
  )
501
  ) );
502
 
@@ -626,7 +625,7 @@ function apbct_activation__new_blog($blog_id, $user_id, $domain, $path, $site_id
626
  ct_sfw_update(); // Updating SFW
627
  ct_account_status_check(null, false);
628
 
629
- if (isset($settings['use_settings_template_apply_for_new']) && $settings['use_settings_template_apply_for_new'] == 1) {
630
  update_option('cleantalk_settings', $settings);
631
  }
632
  restore_current_blog();
@@ -650,7 +649,7 @@ function apbct_deactivation( $network ) {
650
  apbct_deactivation__delete_blog_tables();
651
  delete_option('cleantalk_cron'); // Deleting cron entries
652
 
653
- if($apbct->settings['complete_deactivation']){
654
  apbct_deactivation__delete_all_options();
655
  apbct_deactivation__delete_meta();
656
  apbct_deactivation__delete_all_options__in_network();
@@ -665,7 +664,7 @@ function apbct_deactivation( $network ) {
665
  apbct_deactivation__delete_common_tables();
666
  delete_option('cleantalk_cron'); // Deleting cron entries
667
 
668
- if($apbct->settings['complete_deactivation']) {
669
  apbct_deactivation__delete_all_options();
670
  apbct_deactivation__delete_meta();
671
  }
@@ -676,7 +675,7 @@ function apbct_deactivation( $network ) {
676
  apbct_deactivation__delete_common_tables();
677
  delete_option('cleantalk_cron'); // Deleting cron entries
678
 
679
- if($apbct->settings['complete_deactivation']) {
680
  apbct_deactivation__delete_all_options();
681
  apbct_deactivation__delete_meta();
682
  }
@@ -779,12 +778,12 @@ function ct_add_event($event_type)
779
  //Add 1 to counters
780
  if($event_type=='yes'){
781
  $apbct->data['array_accepted'][$current_hour]++;
782
- $apbct->data['all_time_counter']['accepted']++;
783
  $apbct->data['user_counter']['accepted']++;
784
  }
785
  if($event_type=='no'){
786
  $apbct->data['array_blocked'][$current_hour]++;
787
- $apbct->data['all_time_counter']['blocked']++;
788
  $apbct->data['user_counter']['blocked']++;
789
  }
790
 
@@ -835,7 +834,7 @@ function ct_sfw_update( $api_key = '', $immediate = false ){
835
 
836
  $api_key = !empty($apbct->api_key) ? $apbct->api_key : $api_key;
837
 
838
- if( empty( $api_key ) || $apbct->settings['spam_firewall'] != 1 ){
839
  return true;
840
  }
841
 
@@ -909,38 +908,46 @@ function ct_sfw_update( $api_key = '', $immediate = false ){
909
  );
910
  } else {
911
 
912
- $is_first_updating = strpos( $apbct->fw_stats['firewall_updating_id'], 'first' );
913
-
914
- // @todo We have to handle errors here
915
- SFW::delete_main_data_tables( DB::getInstance() );
916
- // @todo We have to handle errors here
917
- SFW::rename_data_tables( DB::getInstance() );
918
-
919
- //Files array is empty update sfw stats
920
- $apbct->data['last_firewall_updated'] = current_time('timestamp'); // Unused
921
- $apbct->save('data'); // Unused
922
- $apbct->fw_stats['firewall_update_percent'] = 0;
923
- $apbct->fw_stats['firewall_updating_id'] = null;
924
- $apbct->save( 'fw_stats' );
925
-
926
- //Files array is empty update sfw time
927
- $apbct->stats['sfw']['entries'] = $wpdb->get_var('SELECT COUNT(*) FROM ' . APBCT_TBL_FIREWALL_DATA );
928
- $apbct->stats['sfw']['last_update_time'] = time();
929
- $apbct->save('stats');
930
-
931
- // Running sfw update once again in 12 min if entries is < 4000
932
- if( $is_first_updating !== false ) {
933
- if( $apbct->stats['sfw']['entries'] < 4000 ) {
934
- wp_schedule_single_event( time() + 720, 'ct_sfw_update' );
 
 
 
 
 
 
 
935
  }
936
- delete_option( 'sfw_sync_first' );
937
- }
938
 
939
- // Delete update errors
940
- $apbct->error_delete( 'sfw_update', 'save_settings' );
 
 
941
 
942
- // REMOVE AND RENAME
943
- return $result;
 
944
 
945
  }
946
  }else
@@ -974,7 +981,7 @@ function ct_sfw_send_logs($api_key = '')
974
  if(
975
  time() - $apbct->stats['sfw']['sending_logs__timestamp'] < 180 ||
976
  empty( $api_key ) ||
977
- $apbct->settings['spam_firewall'] != 1
978
  ){
979
  return true;
980
  }
@@ -1165,9 +1172,9 @@ function apbct_rc__deactivate_plugin($plugin = null){
1165
  if($plugin){
1166
 
1167
  // Switching complete deactivation for security
1168
- if($plugin == 'security-malware-firewall/security-malware-firewall.php' && !empty($_GET['complete_deactivation'])){
1169
  $spbc_settings = get_option('spbc_settings');
1170
- $spbc_settings['complete_deactivation'] = intval($_GET['complete_deactivation']);
1171
  update_option('spbc_settings', $spbc_settings);
1172
  }
1173
 
@@ -1208,9 +1215,9 @@ function apbct_rc__uninstall_plugin($plugin = null){
1208
  if($plugin){
1209
 
1210
  // Switching complete deactivation for security
1211
- if($plugin == 'security-malware-firewall/security-malware-firewall.php' && !empty($_GET['complete_deactivation'])){
1212
  $spbc_settings = get_option('spbc_settings');
1213
- $spbc_settings['complete_deactivation'] = intval($_GET['complete_deactivation']);
1214
  update_option('spbc_settings', $spbc_settings);
1215
  }
1216
 
@@ -1533,7 +1540,7 @@ function apbct_store__urls(){
1533
 
1534
  global $apbct;
1535
 
1536
- if($apbct->settings['store_urls'] && empty($apbct->flags__url_stored) && !headers_sent()){
1537
 
1538
  // URLs HISTORY
1539
  // Get current url
@@ -1542,7 +1549,7 @@ function apbct_store__urls(){
1542
  $current_url = $current_url ? substr($current_url, 0,256) : 'UNKNOWN';
1543
 
1544
  // Get already stored URLs
1545
- $urls = $apbct->settings['store_urls__sessions']
1546
  ? (array)apbct_alt_session__get('apbct_urls')
1547
  : (array)json_decode(filter_input(INPUT_COOKIE, 'apbct_urls'), true);
1548
 
@@ -1553,7 +1560,7 @@ function apbct_store__urls(){
1553
  $urls = count($urls) > 10 ? array_slice($urls, 1, 10) : $urls;
1554
 
1555
  // Saving
1556
- $apbct->settings['store_urls__sessions']
1557
  ? apbct_alt_session__save('apbct_urls', json_encode($urls))
1558
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_urls', json_encode($urls), time()+86400*3, '/', parse_url(get_option('siteurl'),PHP_URL_HOST), false, true, 'Lax');
1559
 
@@ -1563,14 +1570,14 @@ function apbct_store__urls(){
1563
  $new_site_referer = $new_site_referer ? $new_site_referer : 'UNKNOWN';
1564
 
1565
  // Get already stored referer
1566
- $site_referer = $apbct->settings['store_urls__sessions']
1567
  ? apbct_alt_session__get('apbct_site_referer')
1568
  : filter_input(INPUT_COOKIE, 'apbct_site_referer');
1569
 
1570
  // Save if empty
1571
  if( !$site_referer || parse_url($new_site_referer, PHP_URL_HOST) !== apbct_get_server_variable( 'HTTP_HOST' ) ){
1572
 
1573
- $apbct->settings['store_urls__sessions']
1574
  ? apbct_alt_session__save('apbct_site_referer', $new_site_referer)
1575
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_site_referer', $new_site_referer, time()+86400*3, '/', parse_url(get_option('siteurl'),PHP_URL_HOST), false, true, 'Lax');
1576
  }
@@ -1621,11 +1628,11 @@ function apbct_cookie(){
1621
 
1622
  global $apbct;
1623
 
1624
- if($apbct->settings['store_urls__sessions'] || $apbct->settings['set_cookies__sessions'])
1625
  apbct_alt_sessions__remove_old();
1626
 
1627
  if(
1628
- empty($apbct->settings['set_cookies']) || // Do not set cookies if option is disabled (for Varnish cache).
1629
  !empty($apbct->flags__cookies_setuped) || // Cookies already set
1630
  !empty($apbct->headers_sent) // Headers sent
1631
  )
@@ -1652,7 +1659,7 @@ function apbct_cookie(){
1652
  // Submit time
1653
  if(empty($_POST['ct_multipage_form'])){ // Do not start/reset page timer if it is multipage form (Gravitiy forms))
1654
  $apbct_timestamp = time();
1655
- $apbct->settings['set_cookies__sessions']
1656
  ? apbct_alt_session__save('apbct_timestamp', $apbct_timestamp)
1657
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_timestamp', $apbct_timestamp, 0, '/', $domain, false, true, 'Lax' );
1658
  $cookie_test_value['cookies_names'][] = 'apbct_timestamp';
@@ -1661,7 +1668,7 @@ function apbct_cookie(){
1661
 
1662
  // Pervious referer
1663
  if(apbct_get_server_variable( 'HTTP_REFERER' )){
1664
- $apbct->settings['set_cookies__sessions']
1665
  ? apbct_alt_session__save('apbct_prev_referer', apbct_get_server_variable( 'HTTP_REFERER' ))
1666
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_prev_referer', apbct_get_server_variable( 'HTTP_REFERER' ), 0, '/', $domain, false, true, 'Lax' );
1667
  $cookie_test_value['cookies_names'][] = 'apbct_prev_referer';
@@ -1669,12 +1676,12 @@ function apbct_cookie(){
1669
  }
1670
 
1671
  // Landing time
1672
- $site_landing_timestamp = $apbct->settings['set_cookies__sessions']
1673
  ? apbct_alt_session__get('apbct_site_landing_ts')
1674
  : filter_input(INPUT_COOKIE, 'apbct_site_landing_ts');
1675
  if(!$site_landing_timestamp){
1676
  $site_landing_timestamp = time();
1677
- $apbct->settings['set_cookies__sessions']
1678
  ? apbct_alt_session__save('apbct_site_landing_ts', $site_landing_timestamp)
1679
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_site_landing_ts', $site_landing_timestamp, 0, '/', $domain, false, true, 'Lax' );
1680
  }
@@ -1683,13 +1690,13 @@ function apbct_cookie(){
1683
 
1684
  // Page hits
1685
  // Get
1686
- $page_hits = $apbct->settings['set_cookies__sessions']
1687
  ? apbct_alt_session__get('apbct_page_hits')
1688
  : filter_input(INPUT_COOKIE, 'apbct_page_hits');
1689
  // Set / Increase
1690
  $page_hits = intval($page_hits) ? $page_hits + 1 : 1;
1691
 
1692
- $apbct->settings['set_cookies__sessions']
1693
  ? apbct_alt_session__save('apbct_page_hits', $page_hits)
1694
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_page_hits', $page_hits, 0, '/', $domain, false, true, 'Lax' );
1695
 
@@ -1698,7 +1705,7 @@ function apbct_cookie(){
1698
 
1699
  // Cookies test
1700
  $cookie_test_value['check_value'] = md5($cookie_test_value['check_value']);
1701
- if(!$apbct->settings['set_cookies__sessions'])
1702
  \Cleantalk\Common\Helper::apbct_cookie__set('apbct_cookies_test', urlencode(json_encode($cookie_test_value)), 0, '/', $domain, false, true, 'Lax' );
1703
 
1704
  $apbct->flags__cookies_setuped = true;
@@ -1714,7 +1721,7 @@ function apbct_cookies_test()
1714
  {
1715
  global $apbct;
1716
 
1717
- if($apbct->settings['set_cookies__sessions'])
1718
  return 1;
1719
 
1720
  if(isset($_COOKIE['apbct_cookies_test'])){
@@ -1747,7 +1754,7 @@ function apbct_cookies_test()
1747
  function apbct_get_submit_time()
1748
  {
1749
  global $apbct;
1750
- $apbct_timestamp = $apbct->settings['set_cookies__sessions']
1751
  ? apbct_alt_session__get('apbct_timestamp')
1752
  : filter_input(INPUT_COOKIE, 'apbct_timestamp');
1753
  return apbct_cookies_test() == 1 ? time() - (int)$apbct_timestamp : null;
@@ -1814,7 +1821,7 @@ function ct_mail_send_connection_report() {
1814
 
1815
  global $apbct;
1816
 
1817
- if (($apbct->settings['send_connection_reports'] == 1 && $apbct->connection_reports['negative'] > 0) || !empty($_GET['ct_send_connection_report']))
1818
  {
1819
  $to = "welcome@cleantalk.org" ;
1820
  $subject = "Connection report for " . apbct_get_server_variable( 'HTTP_HOST' );
3
  Plugin Name: Anti-Spam by CleanTalk
4
  Plugin URI: https://cleantalk.org
5
  Description: Max power, all-in-one, no Captcha, premium anti-spam plugin. No comment spam, no registration spam, no contact spam, protects any WordPress forms.
6
+ Version: 5.154
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: https://cleantalk.org
9
  Text Domain: cleantalk-spam-protect
82
  // Customize \Cleantalk\ApbctWP\State
83
  // Account status
84
 
85
+ $apbct->white_label = $apbct->network_settings['multisite__white_label'];
86
+ $apbct->allow_custom_key = $apbct->network_settings['multisite__allow_custom_key'];
87
+ $apbct->plugin_name = $apbct->network_settings['multisite__white_label__plugin_name'] ? $apbct->network_settings['multisite__white_label__plugin_name'] : APBCT_NAME;
88
  $apbct->api_key = !APBCT_WPMS || $apbct->allow_custom_key || $apbct->white_label ? $apbct->settings['apikey'] : $apbct->network_settings['apikey'];
89
  $apbct->key_is_ok = !APBCT_WPMS || $apbct->allow_custom_key || $apbct->white_label ? $apbct->data['key_is_ok'] : $apbct->network_data['key_is_ok'];
90
  $apbct->moderate = !APBCT_WPMS || $apbct->allow_custom_key || $apbct->white_label ? $apbct->data['moderate'] : $apbct->network_data['moderate'];
101
  }
102
 
103
  // Disabling comments
104
+ if($apbct->settings['comments__disable_comments__all'] || $apbct->settings['comments__disable_comments__posts'] || $apbct->settings['comments__disable_comments__pages'] || $apbct->settings['comments__disable_comments__media']){
105
  \Cleantalk\Antispam\DisableComments::getInstance();
106
  }
107
 
173
  }
174
 
175
  // Facebook
176
+ if ($apbct->settings['forms__general_contact_forms_test'] == 1
177
  && (!empty($_POST['action']) && $_POST['action'] == 'fb_intialize')
178
  && !empty($_POST['FB_userdata'])
179
  ){
255
 
256
  // SpamFireWall check
257
  if( $apbct->plugin_version == APBCT_VERSION && // Do not call with first start
258
+ $apbct->settings['sfw__enabled'] == 1 &&
259
  apbct_is_get() &&
260
  ! apbct_wp_doing_cron()
261
  ){
287
  // After plugin loaded - to load locale as described in manual
288
  add_action('plugins_loaded', 'apbct_plugin_loaded' );
289
 
290
+ if( !empty($apbct->settings['data__use_ajax']) &&
291
  ! apbct_is_in_uri( '.xml' ) &&
292
  ! apbct_is_in_uri( '.xsl' ) )
293
  {
301
  require_once( CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-find-spam.php' );
302
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-admin.php');
303
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-settings.php');
304
+
305
+ add_action('admin_init', 'apbct_admin__init', 1);
306
+
307
  if (!(defined( 'DOING_AJAX' ) && DOING_AJAX)){
308
 
309
  add_action('admin_enqueue_scripts', 'apbct_admin__enqueue_scripts');
310
+
 
311
  add_action('admin_menu', 'apbct_settings_add_page');
312
  add_action('network_admin_menu', 'apbct_settings_add_page');
313
  add_action('admin_notices', 'apbct_admin__notice_message');
314
  add_action('network_admin_notices', 'apbct_admin__notice_message');
315
 
316
  //Show widget only if enables and not IP license
317
+ if( $apbct->settings['wp__dashboard_widget__show'] && ! $apbct->moderate_ip )
318
  add_action('wp_dashboard_setup', 'ct_dashboard_statistics_widget' );
319
  }
320
 
339
  // Check AJAX requests
340
  // if User is not logged in
341
  // if Unknown action or Known action with mandatory check
342
+ if( ( ! apbct_is_user_logged_in() || $apbct->settings['data__protect_logged_in'] == 1) &&
343
  isset( $_POST['action'] ) &&
344
  ( ! in_array( $_POST['action'], $cleantalk_hooked_actions ) || in_array( $_POST['action'], $cleantalk_ajax_actions_to_check ) ) &&
345
  ! array_search( $_POST['action'], array_column( $apbct_active_integrations, 'hook' ) )
348
  }
349
 
350
  //QAEngine Theme answers
351
+ if (intval($apbct->settings['forms__general_contact_forms_test']))
352
  add_filter('et_pre_insert_question', 'ct_ajax_hook', 1, 1); // Questions
353
  add_filter('et_pre_insert_answer', 'ct_ajax_hook', 1, 1); // Answers
354
 
371
 
372
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-public.php');
373
  //Bitrix24 contact form
374
+ if ($apbct->settings['forms__general_contact_forms_test'] == 1 &&
375
  !empty($_POST['your-phone']) &&
376
  !empty($_POST['your-email']) &&
377
  !empty($_POST['your-message'])
444
  }
445
 
446
  // Short code for GDPR
447
+ if($apbct->settings['gdpr__enabled'])
448
  add_shortcode('cleantalk_gdpr_form', 'apbct_shrotcode_handler__GDPR_public_notice__form');
449
 
450
  }
491
  APBCT_TBL_FIREWALL_LOG,
492
  APBCT_TBL_FIREWALL_DATA,
493
  array(
494
+ 'admin_bar__sfw_counter' => $apbct->settings['admin_bar__sfw_counter'],
495
  'api_key' => $apbct->api_key,
496
  'apbct' => $apbct,
497
  'cookie_domain' => parse_url( get_option( 'siteurl' ), PHP_URL_HOST ),
498
+ 'data__set_cookies' => $apbct->settings['data__set_cookies'],
499
  )
500
  ) );
501
 
625
  ct_sfw_update(); // Updating SFW
626
  ct_account_status_check(null, false);
627
 
628
+ if (isset($settings['multisite__use_settings_template_apply_for_new']) && $settings['multisite__use_settings_template_apply_for_new'] == 1) {
629
  update_option('cleantalk_settings', $settings);
630
  }
631
  restore_current_blog();
649
  apbct_deactivation__delete_blog_tables();
650
  delete_option('cleantalk_cron'); // Deleting cron entries
651
 
652
+ if($apbct->settings['misc__complete_deactivation']){
653
  apbct_deactivation__delete_all_options();
654
  apbct_deactivation__delete_meta();
655
  apbct_deactivation__delete_all_options__in_network();
664
  apbct_deactivation__delete_common_tables();
665
  delete_option('cleantalk_cron'); // Deleting cron entries
666
 
667
+ if($apbct->settings['misc__complete_deactivation']) {
668
  apbct_deactivation__delete_all_options();
669
  apbct_deactivation__delete_meta();
670
  }
675
  apbct_deactivation__delete_common_tables();
676
  delete_option('cleantalk_cron'); // Deleting cron entries
677
 
678
+ if($apbct->settings['misc__complete_deactivation']) {
679
  apbct_deactivation__delete_all_options();
680
  apbct_deactivation__delete_meta();
681
  }
778
  //Add 1 to counters
779
  if($event_type=='yes'){
780
  $apbct->data['array_accepted'][$current_hour]++;
781
+ $apbct->data['admin_bar__all_time_counter']['accepted']++;
782
  $apbct->data['user_counter']['accepted']++;
783
  }
784
  if($event_type=='no'){
785
  $apbct->data['array_blocked'][$current_hour]++;
786
+ $apbct->data['admin_bar__all_time_counter']['blocked']++;
787
  $apbct->data['user_counter']['blocked']++;
788
  }
789
 
834
 
835
  $api_key = !empty($apbct->api_key) ? $apbct->api_key : $api_key;
836
 
837
+ if( empty( $api_key ) || $apbct->settings['sfw__enabled'] != 1 ){
838
  return true;
839
  }
840
 
908
  );
909
  } else {
910
 
911
+ $result = SFW::firewall_update__write_to_db__exclusions( DB::getInstance(), APBCT_TBL_FIREWALL_DATA . '_temp' );
912
+
913
+ if( empty( $result['error'] ) && is_int( $result ) ) {
914
+
915
+ $is_first_updating = strpos( $apbct->fw_stats['firewall_updating_id'], 'first' );
916
+
917
+ // REMOVE AND RENAME
918
+ // @todo We have to handle errors here
919
+ SFW::delete_main_data_tables( DB::getInstance() );
920
+ // @todo We have to handle errors here
921
+ SFW::rename_data_tables( DB::getInstance() );
922
+
923
+ //Files array is empty update sfw stats
924
+ $apbct->data['last_firewall_updated'] = current_time('timestamp'); // Unused
925
+ $apbct->save('data'); // Unused
926
+ $apbct->fw_stats['firewall_update_percent'] = 0;
927
+ $apbct->fw_stats['firewall_updating_id'] = null;
928
+ $apbct->save( 'fw_stats' );
929
+
930
+ //Files array is empty update sfw time
931
+ $apbct->stats['sfw']['entries'] = $wpdb->get_var('SELECT COUNT(*) FROM ' . APBCT_TBL_FIREWALL_DATA );
932
+ $apbct->stats['sfw']['last_update_time'] = time();
933
+ $apbct->save('stats');
934
+
935
+ // Running sfw update once again in 12 min if entries is < 4000
936
+ if( $is_first_updating !== false ) {
937
+ if( $apbct->stats['sfw']['entries'] < 4000 ) {
938
+ wp_schedule_single_event( time() + 720, 'ct_sfw_update' );
939
+ }
940
+ delete_option( 'sfw_sync_first' );
941
  }
 
 
942
 
943
+ // Delete update errors
944
+ $apbct->error_delete( 'sfw_update', 'save_settings' );
945
+
946
+ return $result;
947
 
948
+ } else {
949
+ return array( 'error' => 'SFW_UPDATE: EXCLUSIONS: ' . $result['error'] );
950
+ }
951
 
952
  }
953
  }else
981
  if(
982
  time() - $apbct->stats['sfw']['sending_logs__timestamp'] < 180 ||
983
  empty( $api_key ) ||
984
+ $apbct->settings['sfw__enabled'] != 1
985
  ){
986
  return true;
987
  }
1172
  if($plugin){
1173
 
1174
  // Switching complete deactivation for security
1175
+ if($plugin == 'security-malware-firewall/security-malware-firewall.php' && !empty($_GET['misc__complete_deactivation'])){
1176
  $spbc_settings = get_option('spbc_settings');
1177
+ $spbc_settings['misc__complete_deactivation'] = intval($_GET['misc__complete_deactivation']);
1178
  update_option('spbc_settings', $spbc_settings);
1179
  }
1180
 
1215
  if($plugin){
1216
 
1217
  // Switching complete deactivation for security
1218
+ if($plugin == 'security-malware-firewall/security-malware-firewall.php' && !empty($_GET['misc__complete_deactivation'])){
1219
  $spbc_settings = get_option('spbc_settings');
1220
+ $spbc_settings['misc__complete_deactivation'] = intval($_GET['misc__complete_deactivation']);
1221
  update_option('spbc_settings', $spbc_settings);
1222
  }
1223
 
1540
 
1541
  global $apbct;
1542
 
1543
+ if($apbct->settings['misc__store_urls'] && empty($apbct->flags__url_stored) && !headers_sent()){
1544
 
1545
  // URLs HISTORY
1546
  // Get current url
1549
  $current_url = $current_url ? substr($current_url, 0,256) : 'UNKNOWN';
1550
 
1551
  // Get already stored URLs
1552
+ $urls = $apbct->settings['misc__store_urls__sessions']
1553
  ? (array)apbct_alt_session__get('apbct_urls')
1554
  : (array)json_decode(filter_input(INPUT_COOKIE, 'apbct_urls'), true);
1555
 
1560
  $urls = count($urls) > 10 ? array_slice($urls, 1, 10) : $urls;
1561
 
1562
  // Saving
1563
+ $apbct->settings['misc__store_urls__sessions']
1564
  ? apbct_alt_session__save('apbct_urls', json_encode($urls))
1565
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_urls', json_encode($urls), time()+86400*3, '/', parse_url(get_option('siteurl'),PHP_URL_HOST), false, true, 'Lax');
1566
 
1570
  $new_site_referer = $new_site_referer ? $new_site_referer : 'UNKNOWN';
1571
 
1572
  // Get already stored referer
1573
+ $site_referer = $apbct->settings['misc__store_urls__sessions']
1574
  ? apbct_alt_session__get('apbct_site_referer')
1575
  : filter_input(INPUT_COOKIE, 'apbct_site_referer');
1576
 
1577
  // Save if empty
1578
  if( !$site_referer || parse_url($new_site_referer, PHP_URL_HOST) !== apbct_get_server_variable( 'HTTP_HOST' ) ){
1579
 
1580
+ $apbct->settings['misc__store_urls__sessions']
1581
  ? apbct_alt_session__save('apbct_site_referer', $new_site_referer)
1582
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_site_referer', $new_site_referer, time()+86400*3, '/', parse_url(get_option('siteurl'),PHP_URL_HOST), false, true, 'Lax');
1583
  }
1628
 
1629
  global $apbct;
1630
 
1631
+ if($apbct->settings['misc__store_urls__sessions'] || $apbct->settings['data__set_cookies__sessions'])
1632
  apbct_alt_sessions__remove_old();
1633
 
1634
  if(
1635
+ empty($apbct->settings['data__set_cookies']) || // Do not set cookies if option is disabled (for Varnish cache).
1636
  !empty($apbct->flags__cookies_setuped) || // Cookies already set
1637
  !empty($apbct->headers_sent) // Headers sent
1638
  )
1659
  // Submit time
1660
  if(empty($_POST['ct_multipage_form'])){ // Do not start/reset page timer if it is multipage form (Gravitiy forms))
1661
  $apbct_timestamp = time();
1662
+ $apbct->settings['data__set_cookies__sessions']
1663
  ? apbct_alt_session__save('apbct_timestamp', $apbct_timestamp)
1664
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_timestamp', $apbct_timestamp, 0, '/', $domain, false, true, 'Lax' );
1665
  $cookie_test_value['cookies_names'][] = 'apbct_timestamp';
1668
 
1669
  // Pervious referer
1670
  if(apbct_get_server_variable( 'HTTP_REFERER' )){
1671
+ $apbct->settings['data__set_cookies__sessions']
1672
  ? apbct_alt_session__save('apbct_prev_referer', apbct_get_server_variable( 'HTTP_REFERER' ))
1673
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_prev_referer', apbct_get_server_variable( 'HTTP_REFERER' ), 0, '/', $domain, false, true, 'Lax' );
1674
  $cookie_test_value['cookies_names'][] = 'apbct_prev_referer';
1676
  }
1677
 
1678
  // Landing time
1679
+ $site_landing_timestamp = $apbct->settings['data__set_cookies__sessions']
1680
  ? apbct_alt_session__get('apbct_site_landing_ts')
1681
  : filter_input(INPUT_COOKIE, 'apbct_site_landing_ts');
1682
  if(!$site_landing_timestamp){
1683
  $site_landing_timestamp = time();
1684
+ $apbct->settings['data__set_cookies__sessions']
1685
  ? apbct_alt_session__save('apbct_site_landing_ts', $site_landing_timestamp)
1686
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_site_landing_ts', $site_landing_timestamp, 0, '/', $domain, false, true, 'Lax' );
1687
  }
1690
 
1691
  // Page hits
1692
  // Get
1693
+ $page_hits = $apbct->settings['data__set_cookies__sessions']
1694
  ? apbct_alt_session__get('apbct_page_hits')
1695
  : filter_input(INPUT_COOKIE, 'apbct_page_hits');
1696
  // Set / Increase
1697
  $page_hits = intval($page_hits) ? $page_hits + 1 : 1;
1698
 
1699
+ $apbct->settings['data__set_cookies__sessions']
1700
  ? apbct_alt_session__save('apbct_page_hits', $page_hits)
1701
  : \Cleantalk\Common\Helper::apbct_cookie__set('apbct_page_hits', $page_hits, 0, '/', $domain, false, true, 'Lax' );
1702
 
1705
 
1706
  // Cookies test
1707
  $cookie_test_value['check_value'] = md5($cookie_test_value['check_value']);
1708
+ if(!$apbct->settings['data__set_cookies__sessions'])
1709
  \Cleantalk\Common\Helper::apbct_cookie__set('apbct_cookies_test', urlencode(json_encode($cookie_test_value)), 0, '/', $domain, false, true, 'Lax' );
1710
 
1711
  $apbct->flags__cookies_setuped = true;
1721
  {
1722
  global $apbct;
1723
 
1724
+ if($apbct->settings['data__set_cookies__sessions'])
1725
  return 1;
1726
 
1727
  if(isset($_COOKIE['apbct_cookies_test'])){
1754
  function apbct_get_submit_time()
1755
  {
1756
  global $apbct;
1757
+ $apbct_timestamp = $apbct->settings['data__set_cookies__sessions']
1758
  ? apbct_alt_session__get('apbct_timestamp')
1759
  : filter_input(INPUT_COOKIE, 'apbct_timestamp');
1760
  return apbct_cookies_test() == 1 ? time() - (int)$apbct_timestamp : null;
1821
 
1822
  global $apbct;
1823
 
1824
+ if (($apbct->settings['misc__send_connection_reports'] == 1 && $apbct->connection_reports['negative'] > 0) || !empty($_GET['ct_send_connection_report']))
1825
  {
1826
  $to = "welcome@cleantalk.org" ;
1827
  $subject = "Connection report for " . apbct_get_server_variable( 'HTTP_HOST' );
css/cleantalk-admin-settings-page.min.css CHANGED
@@ -1 +1 @@
1
- .apbct_settings-field_content,.cleantalk_link-auto,.cleantalk_link-manual,.ct-warning-test-failed,.ct_rate_block,.ct_settings_banner,i.animate-spin{display:inline-block}#apbctTopWarning{margin-bottom:5px}#apbctTopWarning h3{margin:10px 0 5px}#apbctTopWarning h4{margin:10px}#apbctTopWarning h4 span{margin-top:5px}.apbct_settings-subtitle{position:relative;top:-15px;margin:0}.apbct_settings-field_wrapper{margin:15px 0}.apbct_settings-field_wrapper--sub{margin-left:30px!important}.apbct_settings__label{margin-right:10px;font-size:17px;vertical-align:text-bottom}.apbct_settings-field_content--radio{width:70%}.apbct_settings-field_title--radio{display:inline-block;margin:0;width:210px;padding-right:10px;font-size:14px;vertical-align:top}.apbct_input_text{min-width:255px;width:400px}.apbct_settings-field--api_key{font-size:14pt}.apbct_settings-long_description---show:hover{color:#aaa;cursor:pointer}.apbct_setting_textarea{min-width:300px}.cleantalk_link{text-decoration:none;font-size:13px;line-height:26px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.cleantalk_link-auto{background:#ccc;border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;height:28px;-webkit-border-radius:2px;border-radius:2px}.cleantalk_link-auto:hover{color:#fff}.cleantalk_link-manual{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;-webkit-border-radius:3px;border-radius:3px;text-align:center}.cleantalk_link-manual:hover{color:#000}.cleantalk_link[disabled=disabled]{background:#5d9db5;color:#000}.apbct_status_icon{vertical-align:text-bottom;margin:0 5px 0 8px}a.ct_support_link{color:#666;margin-right:.5em;font-size:10pt;font-weight:400}.ct-warning-test-failed{position:relative;padding:5px;margin:4px;border:3px solid rgba(240,50,50,1);border-radius:5px;background-color:rgba(255,200,200,1)}.ct_settings_banner{text-align:right;width:100%;margin:1em 0;vertical-align:top}#ct_translate_plugin{margin-left:0}.ct_rate_block{width:370px;margin-right:3em;padding:.8em .8em 15px;text-align:center;border:1px dashed #666}#ct_translate_plugin .apbct_button_rate{margin-bottom:10px}.apbct_long_desc{position:absolute;background:#5a5a5a;min-width:80px;min-height:80px;max-width:500px;padding:10px;color:#fff;z-index:10}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.apbct_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.apbct_long_desc__cancel:hover{color:#fff}.apbct_long_desc__angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.apbct_long_desc__title{color:rgba(120,200,230,1);margin:0}.--hide{display:none}.apbct_preloader_button{height:15px;margin-left:5px;vertical-align:text-top;display:none}
1
+ .apbct_settings-field_content,.cleantalk_link-auto,.cleantalk_link-manual,.ct-warning-test-failed,.ct_rate_block,.ct_settings_banner,i.animate-spin{display:inline-block}#apbctTopWarning{margin-bottom:5px}#apbctTopWarning h3{margin:10px 0 5px}#apbctTopWarning h4{margin:10px}#apbctTopWarning h4 span{margin-top:5px}.apbct_settings-subtitle{position:relative;top:-15px;margin:0}.apbct_settings-field_wrapper{margin:15px 0}.apbct_settings-field_wrapper--sub{margin-left:30px!important}.apbct_settings__label{margin-right:10px;font-size:17px;vertical-align:text-bottom}.apbct_settings-field_content--radio{width:70%}.apbct_settings-field_title--radio{display:inline-block;margin:0;width:210px;padding-right:10px;font-size:14px;vertical-align:top}.apbct_input_text{min-width:255px;width:400px}.apbct_settings-field--api_key{font-size:14pt}.apbct_settings-long_description---show:hover{color:#aaa;cursor:pointer}.apbct_setting_textarea{min-width:300px}.cleantalk_link{text-decoration:none;font-size:13px;line-height:26px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.cleantalk_link-auto{background:#ccc;border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;height:28px;-webkit-border-radius:2px;border-radius:2px}.cleantalk_link-auto:hover{color:#fff}.cleantalk_link-manual{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;-webkit-border-radius:3px;border-radius:3px;text-align:center}.cleantalk_link-manual:hover{color:#000}.cleantalk_link[disabled=disabled]{background:#5d9db5;color:#000}.apbct_status_icon{vertical-align:text-bottom;margin:0 5px 0 8px}a.ct_support_link{color:#666;margin-right:.5em;font-size:10pt;font-weight:400}.ct-warning-test-failed{position:relative;padding:5px;margin:4px;border:3px solid rgba(240,50,50,1);border-radius:5px;background-color:rgba(255,200,200,1)}.ct_settings_banner{text-align:right;width:100%;margin:1em 0;vertical-align:top}#cleantalk-modal-content,.ct_rate_block{text-align:center}#ct_translate_plugin{margin-left:0}.ct_rate_block{width:370px;margin-right:3em;padding:.8em .8em 15px;border:1px dashed #666}#ct_translate_plugin .apbct_button_rate{margin-bottom:10px}.apbct_long_desc{position:absolute;background:#5a5a5a;min-width:80px;min-height:80px;max-width:500px;padding:10px;color:#fff;z-index:10}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.apbct_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.apbct_long_desc__cancel:hover{color:#fff}.apbct_long_desc__angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.apbct_long_desc__title{color:rgba(120,200,230,1);margin:0}.--hide{display:none}.apbct_preloader_button{height:15px;margin-left:5px;vertical-align:text-top;display:none}#cleantalk-modal-content>*{display:block;width:100%}
inc/cleantalk-admin.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  require_once('cleantalk-settings.php');
4
 
5
  // Add buttons to comments list table
@@ -180,21 +182,28 @@ function apbct_admin__init(){
180
 
181
  // Getting key like hoster. Only once!
182
  if(!is_main_site() && $apbct->white_label && ( empty($apbct->api_key) || $apbct->settings['apikey'] == $apbct->network_settings['apikey'] ) ){
183
- $_POST['submit'] = 'get_key_auto';
184
- $settings = apbct_settings__validate(array());
185
- $apbct->api_key = $settings['apikey'];
186
- $apbct->save('settings');
187
- unset($_POST['submit']);
188
-
 
 
189
  }
190
- }
191
 
192
- function apbct_admin__init___ajax_actions(){
193
-
194
  // Settings
195
  add_action('wp_ajax_apbct_settings__get__long_description', 'apbct_settings__get__long_description'); // Long description
196
-
197
  add_action( 'wp_ajax_apbct_sync', 'apbct_settings__sync' );
 
 
 
 
 
 
 
 
198
  }
199
 
200
  /**
@@ -327,7 +336,7 @@ function apbct_admin__enqueue_scripts($hook){
327
  'ct_feedback_msg_whitelisted' => __("The sender has been whitelisted.", 'cleantalk-spam-protect'),
328
  'ct_feedback_msg_blacklisted' => __("The sender has been blacklisted.", 'cleantalk-spam-protect'),
329
  'ct_feedback_msg' => sprintf(__("Feedback has been sent to %sCleanTalk Dashboard%s.", 'cleantalk-spam-protect'), $apbct->user_token ? "<a target='_blank' href=https://cleantalk.org/my?user_token={$apbct->user_token}&cp_mode=antispam>" : '', $apbct->user_token ? "</a>" : ''),
330
- 'ct_show_check_links' => (bool)$apbct->settings['show_check_links'],
331
  'ct_img_src_new_tab' => plugin_dir_url(__FILE__)."images/new_window.gif",
332
  ));
333
  }
@@ -338,7 +347,7 @@ function apbct_admin__enqueue_scripts($hook){
338
  wp_enqueue_script('ct_users_editscreen', plugins_url('/cleantalk-spam-protect/js/cleantalk-users-editscreen.min.js'), array(), APBCT_VERSION);
339
  wp_localize_script( 'ct_users_editscreen', 'ctUsersScreen', array(
340
  'spambutton_text' => __("Find spam-users", 'cleantalk-spam-protect'),
341
- 'ct_show_check_links' => (bool)$apbct->settings['show_check_links'],
342
  'ct_img_src_new_tab' => plugin_dir_url(__FILE__)."images/new_window.gif"
343
  ));
344
  }
@@ -476,7 +485,7 @@ function apbct_admin__admin_bar__add( $wp_admin_bar ) {
476
 
477
  global $apbct;
478
 
479
- if (current_user_can('activate_plugins') && $apbct->settings['show_adminbar'] == 1 && (apbct_api_key__is_correct($apbct->api_key) !== false || (defined('CLEANTALK_SHOW_ADMIN_BAR_FORCE') && CLEANTALK_SHOW_ADMIN_BAR_FORCE))) {
480
 
481
  //Reset or create user counter
482
  if(!empty($_GET['ct_reset_user_counter'])){
@@ -487,8 +496,8 @@ function apbct_admin__admin_bar__add( $wp_admin_bar ) {
487
  }
488
  //Reset or create all counters
489
  if(!empty($_GET['ct_reset_all_counters'])){
490
- $apbct->data['sfw_counter'] = array('all' => 0, 'blocked' => 0);
491
- $apbct->data['all_time_counter'] = array('accepted' => 0, 'blocked' => 0);
492
  $apbct->data['user_counter'] = array('all' => 0, 'accepted' => 0, 'blocked' => 0, 'since' => date('d M'));
493
  $apbct->data['array_accepted'] = array();
494
  $apbct->data['array_blocked'] = array();
@@ -502,22 +511,22 @@ function apbct_admin__admin_bar__add( $wp_admin_bar ) {
502
 
503
  $all_time_counter_str='';
504
  //Don't compile if all time counter disabled
505
- if($apbct->settings['all_time_counter'] == 1){
506
- $all_time_counter=Array('accepted'=>$apbct->data['all_time_counter']['accepted'], 'blocked'=>$apbct->data['all_time_counter']['blocked'], 'all'=>$apbct->data['all_time_counter']['accepted'] + $apbct->data['all_time_counter']['blocked']);
507
  $all_time_counter_str='<span style="color: white;" title="'.__('All / Allowed / Blocked submissions. The number of submissions is being counted since CleanTalk plugin installation.', 'cleantalk-spam-protect').'"><span style="color: white;"> | ' . __('All', 'cleantalk-spam-protect') . ': ' .$all_time_counter['all']. '</span> / <span style="color: green;">' .$all_time_counter['accepted']. '</span> / <span style="color: red;">' .$all_time_counter['blocked']. '</span></span>';
508
  }
509
 
510
  $daily_counter_str='';
511
  //Don't compile if daily counter disabled
512
- if( $apbct->settings['daily_counter'] == 1){
513
  $daily_counter=Array('accepted'=>array_sum($apbct->data['array_accepted']), 'blocked'=>array_sum($apbct->data['array_blocked']), 'all'=>array_sum($apbct->data['array_accepted']) + array_sum($apbct->data['array_blocked']));
514
  //Previous version $daily_counter_str='<span style="color: white;" title="'.__('All / Allowed / Blocked submissions. The number of submissions for past 24 hours. ', 'cleantalk-spam-protect').'"><span style="color: white;"> | Day: ' .$daily_counter['all']. '</span> / <span style="color: green;">' .$daily_counter['accepted']. '</span> / <span style="color: red;">' .$daily_counter['blocked']. '</span></span>';
515
  $daily_counter_str='<span style="color: white;" title="'.__('Allowed / Blocked submissions. The number of submissions for past 24 hours. ', 'cleantalk-spam-protect').'"><span style="color: white;"> | ' . __('Day', 'cleantalk-spam-protect') . ': </span><span style="color: green;">' .$daily_counter['accepted']. '</span> / <span style="color: red;">' .$daily_counter['blocked']. '</span></span>';
516
  }
517
  $sfw_counter_str='';
518
  //Don't compile if SFW counter disabled
519
- if( $apbct->settings['sfw_counter'] == 1 && $apbct->settings['spam_firewall'] == 1){
520
- $sfw_counter=Array('all'=>$apbct->data['sfw_counter']['all'], 'blocked'=>$apbct->data['sfw_counter']['blocked']);
521
  $sfw_counter_str='<span style="color: white;" title="'.__('All / Blocked events. Access attempts regitred by SpamFireWall counted since the last plugin activation.', 'cleantalk-spam-protect').'"><span style="color: white;"> | SpamFireWall: ' .$sfw_counter['all']. '</span> / <span style="color: red;">' .$sfw_counter['blocked']. '</span></span>';
522
  }
523
 
1
  <?php
2
 
3
+ use Cleantalk\ApbctWP\CleantalkSettingsTemplates;
4
+
5
  require_once('cleantalk-settings.php');
6
 
7
  // Add buttons to comments list table
182
 
183
  // Getting key like hoster. Only once!
184
  if(!is_main_site() && $apbct->white_label && ( empty($apbct->api_key) || $apbct->settings['apikey'] == $apbct->network_settings['apikey'] ) ){
185
+ $res = apbct_settings__get_key_auto( true );
186
+ if( isset( $res['auth_key'], $res['user_token'] ) ) {
187
+ $settings = apbct_settings__validate(array(
188
+ 'apikey' => $res['auth_key'],
189
+ ));
190
+ $apbct->api_key = $settings['apikey'];
191
+ $apbct->save('settings');
192
+ }
193
  }
 
194
 
 
 
195
  // Settings
196
  add_action('wp_ajax_apbct_settings__get__long_description', 'apbct_settings__get__long_description'); // Long description
197
+
198
  add_action( 'wp_ajax_apbct_sync', 'apbct_settings__sync' );
199
+
200
+ add_action( 'wp_ajax_apbct_get_key_auto', 'apbct_settings__get_key_auto' );
201
+
202
+ // Settings Templates
203
+ if( ! is_multisite() || is_main_site() || ( ! is_main_site() && $apbct->network_settings['wpms__allow_custom_settings'] ) ) {
204
+ new CleantalkSettingsTemplates( $apbct->api_key );
205
+ }
206
+
207
  }
208
 
209
  /**
336
  'ct_feedback_msg_whitelisted' => __("The sender has been whitelisted.", 'cleantalk-spam-protect'),
337
  'ct_feedback_msg_blacklisted' => __("The sender has been blacklisted.", 'cleantalk-spam-protect'),
338
  'ct_feedback_msg' => sprintf(__("Feedback has been sent to %sCleanTalk Dashboard%s.", 'cleantalk-spam-protect'), $apbct->user_token ? "<a target='_blank' href=https://cleantalk.org/my?user_token={$apbct->user_token}&cp_mode=antispam>" : '', $apbct->user_token ? "</a>" : ''),
339
+ 'ct_show_check_links' => (bool)$apbct->settings['comments__show_check_links'],
340
  'ct_img_src_new_tab' => plugin_dir_url(__FILE__)."images/new_window.gif",
341
  ));
342
  }
347
  wp_enqueue_script('ct_users_editscreen', plugins_url('/cleantalk-spam-protect/js/cleantalk-users-editscreen.min.js'), array(), APBCT_VERSION);
348
  wp_localize_script( 'ct_users_editscreen', 'ctUsersScreen', array(
349
  'spambutton_text' => __("Find spam-users", 'cleantalk-spam-protect'),
350
+ 'ct_show_check_links' => (bool)$apbct->settings['comments__show_check_links'],
351
  'ct_img_src_new_tab' => plugin_dir_url(__FILE__)."images/new_window.gif"
352
  ));
353
  }
485
 
486
  global $apbct;
487
 
488
+ if (current_user_can('activate_plugins') && $apbct->settings['admin_bar__show'] == 1 && (apbct_api_key__is_correct($apbct->api_key) !== false || (defined('CLEANTALK_SHOW_ADMIN_BAR_FORCE') && CLEANTALK_SHOW_ADMIN_BAR_FORCE))) {
489
 
490
  //Reset or create user counter
491
  if(!empty($_GET['ct_reset_user_counter'])){
496
  }
497
  //Reset or create all counters
498
  if(!empty($_GET['ct_reset_all_counters'])){
499
+ $apbct->data['admin_bar__sfw_counter'] = array('all' => 0, 'blocked' => 0);
500
+ $apbct->data['admin_bar__all_time_counter'] = array('accepted' => 0, 'blocked' => 0);
501
  $apbct->data['user_counter'] = array('all' => 0, 'accepted' => 0, 'blocked' => 0, 'since' => date('d M'));
502
  $apbct->data['array_accepted'] = array();
503
  $apbct->data['array_blocked'] = array();
511
 
512
  $all_time_counter_str='';
513
  //Don't compile if all time counter disabled
514
+ if($apbct->settings['admin_bar__all_time_counter'] == 1){
515
+ $all_time_counter=Array('accepted'=>$apbct->data['admin_bar__all_time_counter']['accepted'], 'blocked'=>$apbct->data['admin_bar__all_time_counter']['blocked'], 'all'=>$apbct->data['admin_bar__all_time_counter']['accepted'] + $apbct->data['admin_bar__all_time_counter']['blocked']);
516
  $all_time_counter_str='<span style="color: white;" title="'.__('All / Allowed / Blocked submissions. The number of submissions is being counted since CleanTalk plugin installation.', 'cleantalk-spam-protect').'"><span style="color: white;"> | ' . __('All', 'cleantalk-spam-protect') . ': ' .$all_time_counter['all']. '</span> / <span style="color: green;">' .$all_time_counter['accepted']. '</span> / <span style="color: red;">' .$all_time_counter['blocked']. '</span></span>';
517
  }
518
 
519
  $daily_counter_str='';
520
  //Don't compile if daily counter disabled
521
+ if( $apbct->settings['admin_bar__daily_counter'] == 1){
522
  $daily_counter=Array('accepted'=>array_sum($apbct->data['array_accepted']), 'blocked'=>array_sum($apbct->data['array_blocked']), 'all'=>array_sum($apbct->data['array_accepted']) + array_sum($apbct->data['array_blocked']));
523
  //Previous version $daily_counter_str='<span style="color: white;" title="'.__('All / Allowed / Blocked submissions. The number of submissions for past 24 hours. ', 'cleantalk-spam-protect').'"><span style="color: white;"> | Day: ' .$daily_counter['all']. '</span> / <span style="color: green;">' .$daily_counter['accepted']. '</span> / <span style="color: red;">' .$daily_counter['blocked']. '</span></span>';
524
  $daily_counter_str='<span style="color: white;" title="'.__('Allowed / Blocked submissions. The number of submissions for past 24 hours. ', 'cleantalk-spam-protect').'"><span style="color: white;"> | ' . __('Day', 'cleantalk-spam-protect') . ': </span><span style="color: green;">' .$daily_counter['accepted']. '</span> / <span style="color: red;">' .$daily_counter['blocked']. '</span></span>';
525
  }
526
  $sfw_counter_str='';
527
  //Don't compile if SFW counter disabled
528
+ if( $apbct->settings['admin_bar__sfw_counter'] == 1 && $apbct->settings['sfw__enabled'] == 1){
529
+ $sfw_counter=Array('all'=>$apbct->data['admin_bar__sfw_counter']['all'], 'blocked'=>$apbct->data['admin_bar__sfw_counter']['blocked']);
530
  $sfw_counter_str='<span style="color: white;" title="'.__('All / Blocked events. Access attempts regitred by SpamFireWall counted since the last plugin activation.', 'cleantalk-spam-protect').'"><span style="color: white;"> | SpamFireWall: ' .$sfw_counter['all']. '</span> / <span style="color: red;">' .$sfw_counter['blocked']. '</span></span>';
531
  }
532
 
inc/cleantalk-ajax.php CHANGED
@@ -330,10 +330,10 @@ function ct_ajax_hook($message_obj = false, $additional = false)
330
  );
331
 
332
  // Skip test if
333
- if( !$apbct->settings['general_contact_forms_test'] || // Test disabled
334
  !apbct_is_user_enable($apbct->user) || // User is admin, editor, author
335
  // (function_exists('get_current_user_id') && get_current_user_id() != 0) || // Check with default wp_* function if it's admin
336
- (!$apbct->settings['protect_logged_in'] && ($apbct->user instanceof WP_User) && $apbct->user->ID !== 0 ) || // Logged in user
337
  apbct_exclusions_check__url() || // url exclusions
338
  (isset($_POST['action']) && in_array($_POST['action'], $skip_post)) || // Special params
339
  (isset($_GET['action']) && in_array($_GET['action'], $skip_post)) || // Special params
@@ -418,7 +418,7 @@ function ct_ajax_hook($message_obj = false, $additional = false)
418
  //Woocommerce checkout
419
  if( \Cleantalk\Variables\Post::get( 'action' ) == 'woocommerce_checkout' || \Cleantalk\Variables\Post::get( 'action' ) == 'save_data' ){
420
  $post_info['comment_type'] = 'order';
421
- if( empty( $apbct->settings['wc_checkout_test'] ) ){
422
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
423
  return false;
424
  }
330
  );
331
 
332
  // Skip test if
333
+ if( !$apbct->settings['forms__general_contact_forms_test'] || // Test disabled
334
  !apbct_is_user_enable($apbct->user) || // User is admin, editor, author
335
  // (function_exists('get_current_user_id') && get_current_user_id() != 0) || // Check with default wp_* function if it's admin
336
+ (!$apbct->settings['data__protect_logged_in'] && ($apbct->user instanceof WP_User) && $apbct->user->ID !== 0 ) || // Logged in user
337
  apbct_exclusions_check__url() || // url exclusions
338
  (isset($_POST['action']) && in_array($_POST['action'], $skip_post)) || // Special params
339
  (isset($_GET['action']) && in_array($_GET['action'], $skip_post)) || // Special params
418
  //Woocommerce checkout
419
  if( \Cleantalk\Variables\Post::get( 'action' ) == 'woocommerce_checkout' || \Cleantalk\Variables\Post::get( 'action' ) == 'save_data' ){
420
  $post_info['comment_type'] = 'order';
421
+ if( empty( $apbct->settings['forms__wc_checkout_test'] ) ){
422
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
423
  return false;
424
  }
inc/cleantalk-common.php CHANGED
@@ -173,8 +173,8 @@ function apbct_base_call($params = array(), $reg_flag = false){
173
 
174
  $ct = new Cleantalk();
175
 
176
- $ct->use_bultin_api = $apbct->settings['use_buitin_http_api'] ? true : false;
177
- $ct->ssl_on = $apbct->settings['ssl_on'];
178
  $ct->ssl_path = APBCT_CASERT_PATH;
179
 
180
  // Options store url without shceme because of DB error with ''://'
@@ -368,15 +368,15 @@ function apbct_get_sender_info() {
368
  // Validate cookie from the backend
369
  $cookie_is_ok = apbct_cookies_test();
370
 
371
- $referer_previous = $apbct->settings['set_cookies__sessions']
372
  ? apbct_alt_session__get('apbct_prev_referer')
373
  : filter_input(INPUT_COOKIE, 'apbct_prev_referer');
374
 
375
- $site_landing_ts = $apbct->settings['set_cookies__sessions']
376
  ? apbct_alt_session__get('apbct_site_landing_ts')
377
  : filter_input(INPUT_COOKIE, 'apbct_site_landing_ts');
378
 
379
- $page_hits = $apbct->settings['set_cookies__sessions']
380
  ? apbct_alt_session__get('apbct_page_hits')
381
  : filter_input(INPUT_COOKIE, 'apbct_page_hits');
382
 
@@ -395,11 +395,11 @@ function apbct_get_sender_info() {
395
  : 0
396
  : null;
397
 
398
- $site_referer = $apbct->settings['store_urls__sessions']
399
  ? apbct_alt_session__get('apbct_site_referer')
400
  : filter_input(INPUT_COOKIE, 'apbct_site_referer');
401
 
402
- $urls = $apbct->settings['store_urls__sessions']
403
  ? (array)apbct_alt_session__get('apbct_urls')
404
  : (array)json_decode(filter_input(INPUT_COOKIE, 'apbct_urls'), true);
405
 
@@ -516,13 +516,13 @@ function ct_get_checkjs_value(){
516
  global $apbct;
517
 
518
  // Use static JS keys
519
- if($apbct->settings['use_static_js_key'] == 1){
520
 
521
  $key = hash('sha256', $apbct->api_key.ct_get_admin_email().$apbct->salt);
522
 
523
  // Auto detecting. Detected.
524
  }elseif(
525
- $apbct->settings['use_static_js_key'] == - 1 &&
526
  ( apbct_is_cache_plugins_exists() ||
527
  ( apbct_is_post() && $apbct->data['cache_detected'] == 1 )
528
  )
@@ -530,6 +530,8 @@ function ct_get_checkjs_value(){
530
  $key = hash('sha256', $apbct->api_key.ct_get_admin_email().$apbct->salt);
531
  if( apbct_is_cache_plugins_exists() )
532
  $apbct->data['cache_detected'] = 1;
 
 
533
 
534
  // Using dynamic JS keys
535
  }else{
@@ -567,9 +569,10 @@ function ct_get_checkjs_value(){
567
  }
568
 
569
  $apbct->data['cache_detected'] = 0;
570
- }
571
 
572
- $apbct->saveData();
 
 
573
 
574
  return $key;
575
  }
@@ -725,7 +728,7 @@ function ct_delete_spam_comments() {
725
 
726
  global $apbct;
727
 
728
- if ($apbct->settings['remove_old_spam'] == 1) {
729
  $last_comments = get_comments(array('status' => 'spam', 'number' => 1000, 'order' => 'ASC'));
730
  foreach ($last_comments as $c) {
731
  $comment_date_gmt = strtotime($c->comment_date_gmt);
@@ -1069,7 +1072,7 @@ function apbct_add_async_attribute($tag, $handle, $src) {
1069
  $handle === 'ct_external' ||
1070
  $handle === 'ct_nocache'
1071
  ){
1072
- if( $apbct->settings['async_js'] )
1073
  $tag = str_replace( ' src', ' async="async" src', $tag );
1074
 
1075
  if( class_exists('Cookiebot_WP') )
173
 
174
  $ct = new Cleantalk();
175
 
176
+ $ct->use_bultin_api = $apbct->settings['wp__use_builtin_http_api'] ? true : false;
177
+ $ct->ssl_on = $apbct->settings['data__ssl_on'];
178
  $ct->ssl_path = APBCT_CASERT_PATH;
179
 
180
  // Options store url without shceme because of DB error with ''://'
368
  // Validate cookie from the backend
369
  $cookie_is_ok = apbct_cookies_test();
370
 
371
+ $referer_previous = $apbct->settings['data__set_cookies__sessions']
372
  ? apbct_alt_session__get('apbct_prev_referer')
373
  : filter_input(INPUT_COOKIE, 'apbct_prev_referer');
374
 
375
+ $site_landing_ts = $apbct->settings['data__set_cookies__sessions']
376
  ? apbct_alt_session__get('apbct_site_landing_ts')
377
  : filter_input(INPUT_COOKIE, 'apbct_site_landing_ts');
378
 
379
+ $page_hits = $apbct->settings['data__set_cookies__sessions']
380
  ? apbct_alt_session__get('apbct_page_hits')
381
  : filter_input(INPUT_COOKIE, 'apbct_page_hits');
382
 
395
  : 0
396
  : null;
397
 
398
+ $site_referer = $apbct->settings['misc__store_urls__sessions']
399
  ? apbct_alt_session__get('apbct_site_referer')
400
  : filter_input(INPUT_COOKIE, 'apbct_site_referer');
401
 
402
+ $urls = $apbct->settings['misc__store_urls__sessions']
403
  ? (array)apbct_alt_session__get('apbct_urls')
404
  : (array)json_decode(filter_input(INPUT_COOKIE, 'apbct_urls'), true);
405
 
516
  global $apbct;
517
 
518
  // Use static JS keys
519
+ if($apbct->settings['data__use_static_js_key'] == 1){
520
 
521
  $key = hash('sha256', $apbct->api_key.ct_get_admin_email().$apbct->salt);
522
 
523
  // Auto detecting. Detected.
524
  }elseif(
525
+ $apbct->settings['data__use_static_js_key'] == - 1 &&
526
  ( apbct_is_cache_plugins_exists() ||
527
  ( apbct_is_post() && $apbct->data['cache_detected'] == 1 )
528
  )
530
  $key = hash('sha256', $apbct->api_key.ct_get_admin_email().$apbct->salt);
531
  if( apbct_is_cache_plugins_exists() )
532
  $apbct->data['cache_detected'] = 1;
533
+
534
+ $apbct->saveData();
535
 
536
  // Using dynamic JS keys
537
  }else{
569
  }
570
 
571
  $apbct->data['cache_detected'] = 0;
 
572
 
573
+ $apbct->saveData();
574
+
575
+ }
576
 
577
  return $key;
578
  }
728
 
729
  global $apbct;
730
 
731
+ if ($apbct->settings['comments__remove_old_spam'] == 1) {
732
  $last_comments = get_comments(array('status' => 'spam', 'number' => 1000, 'order' => 'ASC'));
733
  foreach ($last_comments as $c) {
734
  $comment_date_gmt = strtotime($c->comment_date_gmt);
1072
  $handle === 'ct_external' ||
1073
  $handle === 'ct_nocache'
1074
  ){
1075
+ if( $apbct->settings['misc__async_js'] )
1076
  $tag = str_replace( ' src', ' async="async" src', $tag );
1077
 
1078
  if( class_exists('Cookiebot_WP') )
inc/cleantalk-pluggable.php CHANGED
@@ -356,6 +356,14 @@ function apbct_is_skip_request( $ajax = false ) {
356
  /* Here is ajax requests skipping */
357
  /*****************************************/
358
 
 
 
 
 
 
 
 
 
359
  // Bookly Plugin admin actions skip
360
  if( apbct_is_plugin_active( 'bookly-responsive-appointment-booking-tool/main.php' ) &&
361
  isset( $_POST['action'] ) &&
@@ -414,6 +422,31 @@ function apbct_is_skip_request( $ajax = false ) {
414
  ){
415
  return 'jackmail_admin_actions';
416
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
417
 
418
  break;
419
 
@@ -434,6 +467,12 @@ function apbct_is_skip_request( $ajax = false ) {
434
  {
435
  return 'ultimatemember_password_reset';
436
  }
 
 
 
 
 
 
437
 
438
  break;
439
 
@@ -441,3 +480,47 @@ function apbct_is_skip_request( $ajax = false ) {
441
 
442
  return false;
443
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
356
  /* Here is ajax requests skipping */
357
  /*****************************************/
358
 
359
+ // wpDiscuz - Online Users Addon for wpDiscuz
360
+ if(
361
+ apbct_is_plugin_active( 'wpdiscuz-online-users/wpdiscuz-ou.php' ) &&
362
+ Post::get( 'action' ) === 'wouPushNotification'
363
+ ){
364
+ return 'wpdiscuz_online_users__push_notification';
365
+ }
366
+
367
  // Bookly Plugin admin actions skip
368
  if( apbct_is_plugin_active( 'bookly-responsive-appointment-booking-tool/main.php' ) &&
369
  isset( $_POST['action'] ) &&
422
  ){
423
  return 'jackmail_admin_actions';
424
  }
425
+ // Newspaper theme login form
426
+ if ( apbct_is_theme_active( 'Newspaper' ) &&
427
+ isset( $_POST['action'] ) &&
428
+ ( $_POST['action'] == 'td_mod_login' || $_POST['action'] == 'td_mod_remember_pass' ) )
429
+ {
430
+ return 'Newspaper_theme_login_form';
431
+ }
432
+ // Save abandoned cart checking skip
433
+ if ( apbct_is_plugin_active( 'woo-save-abandoned-carts/cartbounty-abandoned-carts.php' ) &&
434
+ Post::get( 'action' ) === 'cartbounty_save' )
435
+ {
436
+ return 'cartbounty_save';
437
+ }
438
+ // SUMODISCOUNT discout request skip
439
+ if ( apbct_is_plugin_active( 'sumodiscounts/sumodiscounts.php' ) &&
440
+ Post::get( 'action' ) === 'fp_apply_discount_for_first_purchase' )
441
+ {
442
+ return 'fp_apply_discount_for_first_purchase';
443
+ }
444
+ // WP eMember login form skip
445
+ if ( apbct_is_plugin_active( 'wp-eMember/wp_eMember.php' ) &&
446
+ Post::get( 'action' ) === 'emember_ajax_login' )
447
+ {
448
+ return 'emember_ajax_login';
449
+ }
450
 
451
  break;
452
 
467
  {
468
  return 'ultimatemember_password_reset';
469
  }
470
+ // UltimateMember password reset skip
471
+ if( apbct_is_plugin_active( 'gravityformspaypal/paypal.php' ) &&
472
+ ( apbct_is_in_uri('page=gf_paypal_ipn') || apbct_is_in_uri('callback=gravityformspaypal') ) )
473
+ {
474
+ return 'gravityformspaypal_processing_skipped';
475
+ }
476
 
477
  break;
478
 
480
 
481
  return false;
482
  }
483
+
484
+ function apbct_get_plugin_options() {
485
+ global $apbct;
486
+ $settings = (array) $apbct->settings;
487
+ // Remove apikey from export
488
+ if( isset( $settings['apikey'] ) ) {
489
+ unset( $settings['apikey'] );
490
+ }
491
+ // Remove misc__debug_ajax from export
492
+ if( isset( $settings['misc__debug_ajax'] ) ) {
493
+ unset( $settings['misc__debug_ajax'] );
494
+ }
495
+ // Remove multisite__white_label__hoster_key from export
496
+ if( isset( $settings['multisite__white_label__hoster_key'] ) ) {
497
+ unset( $settings['multisite__white_label__hoster_key'] );
498
+ }
499
+ // Remove all WPMS from export
500
+ $settings = array_filter( $settings, function( $key ){
501
+ return strpos( $key, 'multisite__' ) === false;
502
+ }, ARRAY_FILTER_USE_KEY );
503
+ return json_encode( $settings, JSON_FORCE_OBJECT );
504
+ }
505
+
506
+ function apbct_set_plugin_options( $template_id, $template_name, $settings ) {
507
+ global $apbct;
508
+ $settings = array_replace( (array) $apbct->settings, $settings );
509
+ $settings = apbct_settings__validate($settings);
510
+ $apbct->settings = $settings;
511
+ $apbct->data['current_settings_template_id'] = $template_id;
512
+ $apbct->data['current_settings_template_name'] = $template_name;
513
+ return $apbct->saveSettings() && $apbct->saveData();
514
+ }
515
+
516
+ function apbct_reset_plugin_options() {
517
+ global $apbct;
518
+ $def_settings = $apbct->def_settings;
519
+ if( isset( $def_settings['apikey'] ) ) {
520
+ unset( $def_settings['apikey'] );
521
+ }
522
+ $settings = array_replace( (array) $apbct->settings, $def_settings );
523
+ $settings = apbct_settings__validate($settings);
524
+ $apbct->settings = $settings;
525
+ return $apbct->saveSettings();
526
+ }
inc/cleantalk-public.php CHANGED
@@ -10,7 +10,7 @@ function apbct_init() {
10
 
11
  //Check internal forms with such "action" http://wordpress.loc/contact-us/some_script.php
12
  if((isset($_POST['action']) && $_POST['action'] == 'ct_check_internal') &&
13
- $apbct->settings['check_internal']
14
  ){
15
  $ct_result = ct_contact_form_validate();
16
  if($ct_result == null){
@@ -33,10 +33,10 @@ function apbct_init() {
33
  add_shortcode( 'et_pb_contact_form', 'ct_contact_form_validate' );
34
  }
35
 
36
- if($apbct->settings['check_external']){
37
 
38
  // Fixing form and directs it this site
39
- if($apbct->settings['check_external__capture_buffer'] && !is_admin() && !apbct_is_ajax() && !apbct_is_post() && apbct_is_user_enable() && !(defined('DOING_CRON') && DOING_CRON) && !(defined('XMLRPC_REQUEST') && XMLRPC_REQUEST)){
40
 
41
  if (defined('CLEANTALK_CAPTURE_BUFFER_SPECIFIC_URL') && is_string(CLEANTALK_CAPTURE_BUFFER_SPECIFIC_URL)) {
42
  $catch_buffer = false;
@@ -94,10 +94,10 @@ function apbct_init() {
94
  }
95
 
96
  //hook for Anonymous Post
97
- if($apbct->settings['general_postdata_test'] == 1 && empty($_POST['ct_checkjs_cf7']))
98
  add_action('wp', 'ct_contact_form_validate_postdata',1);
99
 
100
- if($apbct->settings['general_contact_forms_test'] == 1 && empty($_POST['ct_checkjs_cf7'])){
101
  add_action('CMA_custom_post_type_nav', 'ct_contact_form_validate_postdata',1);
102
  //add_action('init','ct_contact_form_validate',1);
103
  ct_contact_form_validate();
@@ -115,7 +115,7 @@ function apbct_init() {
115
  }*/
116
  }
117
 
118
- if($apbct->settings['general_postdata_test'] == 1 && empty($_POST['ct_checkjs_cf7']))
119
  add_action('CMA_custom_post_type_nav', 'ct_contact_form_validate_postdata',1);
120
 
121
  //add_action('wp_footer','ct_ajaxurl');
@@ -129,10 +129,10 @@ function apbct_init() {
129
  // WooCommerce registration
130
  if(class_exists('WooCommerce')){
131
  add_filter( 'woocommerce_registration_errors', 'ct_registration_errors', 1, 3 );
132
- if ($apbct->settings['wc_checkout_test'] == 1) {
133
  add_filter('woocommerce_checkout_process', 'ct_woocommerce_checkout_check', 1, 3);
134
  }
135
- if( isset($_REQUEST['wc-ajax']) && $_REQUEST['wc-ajax'] == 'checkout' && empty( $apbct->settings['wc_register_from_order'] ) ){
136
  remove_filter( 'woocommerce_registration_errors', 'ct_registration_errors', 1 );
137
  }
138
  }
@@ -307,17 +307,17 @@ function apbct_init() {
307
  add_action('wp_footer', 'apbct_hook__wp_footer', 1);
308
  }
309
 
310
- if ($apbct->settings['protect_logged_in'] != 1 && is_user_logged_in()) {
311
  ct_contact_form_validate();
312
  }
313
 
314
  if (apbct_is_user_enable()) {
315
 
316
- if ($apbct->settings['general_contact_forms_test'] == 1 && !isset($_POST['comment_post_ID']) && !isset($_GET['for'])){
317
  add_action( 'init', 'ct_contact_form_validate', 999 );
318
  }
319
  if( apbct_is_post() &&
320
- $apbct->settings['general_postdata_test'] == 1 &&
321
  !isset($_POST['ct_checkjs_cf7']) &&
322
  !is_admin() &&
323
  !apbct_is_user_role_in(array('administrator', 'moderator'))
@@ -443,13 +443,13 @@ function ct_validate_ccf_submission($value, $field_id, $required){
443
 
444
 
445
  //If the check for contact forms enabled
446
- if(!$apbct->settings['contact_forms_test']) {
447
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
448
  return true;
449
  }
450
 
451
  //If the check for logged in users enabled
452
- if($apbct->settings['protect_logged_in'] == 1 && is_user_logged_in()) {
453
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
454
  return true;
455
  }
@@ -513,7 +513,7 @@ function ct_woocommerce_wishlist_check($args){
513
 
514
  //Protect logged in users
515
  if($args['wishlist_status'])
516
- if($apbct->settings['protect_logged_in'] == 0) {
517
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
518
  return $args;
519
  }
@@ -656,7 +656,7 @@ function apbct_integration__buddyPres__private_msg_check( $bp_message_obj){
656
 
657
  //Check for enabled option
658
  if(
659
- $apbct->settings['bp_private_messages'] == 0 ||
660
  apbct_exclusions_check()
661
  ) {
662
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
@@ -669,7 +669,7 @@ function apbct_integration__buddyPres__private_msg_check( $bp_message_obj){
669
  ? CLEANTALK_CHECK_COMMENTS_NUMBER
670
  : 3;
671
 
672
- if($apbct->settings['check_comments_number']){
673
  $args = array(
674
  'user_id' => $bp_message_obj->sender_id,
675
  'box' => 'sentbox',
@@ -728,7 +728,7 @@ function apbct_integration__buddyPres__private_msg_check( $bp_message_obj){
728
  */
729
  function apbct_forms__search__addField( $form ){
730
  global $apbct;
731
- if($apbct->settings['search_test'] == 1){
732
  $js_filed = ct_add_hidden_fields('ct_checkjs_search_default', true, false, false, false);
733
  $form = str_replace('</form>', $js_filed, $form);
734
  }
@@ -748,8 +748,8 @@ function apbct_forms__search__testSpam( $search ){
748
  if(
749
  empty($search) ||
750
  $cleantalk_executed ||
751
- $apbct->settings['search_test'] == 0 ||
752
- $apbct->settings['protect_logged_in'] != 1 && is_user_logged_in() // Skip processing for logged in users.
753
  ){
754
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
755
  return $search;
@@ -784,8 +784,8 @@ function apbct_search_add_noindex() {
784
 
785
  if(
786
  ! is_search() || // If it is search results
787
- $apbct->settings['search_test'] == 0 ||
788
- $apbct->settings['protect_logged_in'] != 1 && is_user_logged_in() // Skip processing for logged in users.
789
  ){
790
  return ;
791
  }
@@ -830,7 +830,7 @@ function ct_woocommerce_checkout_check() {
830
  )
831
  );
832
 
833
- if( $apbct->settings['wc_register_from_order'] ) {
834
  $cleantalk_executed = false;
835
  }
836
 
@@ -855,7 +855,7 @@ function apbct_form__piratesForm__testSpam(){
855
  global $apbct;
856
 
857
  //Check for enabled option
858
- if( !$apbct->settings['contact_forms_test']) {
859
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
860
  return;
861
  }
@@ -905,7 +905,7 @@ function ct_comment_form($post_id){
905
  return false;
906
  }
907
 
908
- if ( !$apbct->settings['comments_test']) {
909
  return false;
910
  }
911
 
@@ -946,7 +946,7 @@ function ct_add_hidden_fields($field_name = 'ct_checkjs', $return_string = false
946
  $field_id_hash = md5(rand(0, 1000));
947
 
948
  // Using only cookies
949
- if ($cookie_check && $apbct->settings['set_cookies'] == 1) {
950
 
951
  $html = "<script type=\"text/javascript\" " . ( class_exists('Cookiebot_WP') ? 'data-cookieconsent="ignore"' : '' ) . ">
952
  function ctSetCookie___from_backend(c_name, value) {
@@ -956,7 +956,7 @@ function ct_add_hidden_fields($field_name = 'ct_checkjs', $return_string = false
956
  </script>";
957
 
958
  // Using AJAX to get key
959
- }elseif($apbct->settings['use_ajax'] && $ajax){
960
 
961
  // Fix only for wp_footer -> apbct_hook__wp_head__set_cookie__ct_checkjs()
962
  if($no_print)
@@ -967,12 +967,10 @@ function ct_add_hidden_fields($field_name = 'ct_checkjs', $return_string = false
967
  $html = "<input type=\"hidden\" id=\"{$field_id}\" name=\"{$field_name}\" value=\"{$ct_checkjs_def}\" />
968
  <script type=\"text/javascript\" " . ( class_exists('Cookiebot_WP') ? 'data-cookieconsent="ignore"' : '' ) . ">
969
  window.addEventListener(\"DOMContentLoaded\", function () {
970
- setTimeout(function(){
971
- apbct_public_sendAJAX(
972
- {action: \"apbct_js_keys__get\"},
973
- {callback: apbct_js_keys__set_input_value, input_name: \"{$field_id}\",silent: true, no_nonce: true}
974
- );
975
- }, 1000);
976
  });
977
  </script>";
978
 
@@ -1014,7 +1012,7 @@ function apbct_rorm__formidable__footerScripts($fields, $form) {
1014
 
1015
  global $apbct, $ct_checkjs_frm;
1016
 
1017
- if ( !$apbct->settings['contact_forms_test'])
1018
  return false;
1019
 
1020
  $ct_checkjs_key = ct_get_checkjs_value();
@@ -1051,13 +1049,13 @@ function apbct_rorm__formidable__testSpam ( $errors, $form ) {
1051
 
1052
  global $apbct;
1053
 
1054
- if ( !$apbct->settings['contact_forms_test']) {
1055
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1056
  return $errors;
1057
  }
1058
 
1059
  // Skip processing for logged in users.
1060
- if ( !$apbct->settings['protect_logged_in'] && is_user_logged_in()) {
1061
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1062
  return $errors;
1063
  }
@@ -1136,13 +1134,13 @@ function ct_bbp_new_pre_content ($comment) {
1136
 
1137
  global $apbct, $current_user;
1138
 
1139
- if ( !$apbct->settings['comments_test']) {
1140
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1141
  return $comment;
1142
  }
1143
 
1144
  // Skip processing for logged in users and admin.
1145
- if ( !$apbct->settings['protect_logged_in'] && is_user_logged_in() ||
1146
  apbct_exclusions_check()
1147
  ) {
1148
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
@@ -1252,12 +1250,12 @@ function ct_preprocess_comment($comment) {
1252
  global $current_user, $comment_post_id, $ct_comment_done, $ct_jp_comments, $apbct;
1253
 
1254
  // Send email notification for chosen groups of users
1255
- if($apbct->settings['comment_notify'] && !empty($apbct->settings['comment_notify__roles']) && $apbct->data['moderate']){
1256
 
1257
  add_filter('notify_post_author', 'apbct_comment__Wordpress__doNotify', 100, 2);
1258
 
1259
  $users = get_users(array(
1260
- 'role__in' => $apbct->settings['comment_notify__roles'],
1261
  'fileds' => array('user_email')
1262
  ));
1263
 
@@ -1280,7 +1278,7 @@ function ct_preprocess_comment($comment) {
1280
 
1281
  $comments_check_number = defined('CLEANTALK_CHECK_COMMENTS_NUMBER') ? CLEANTALK_CHECK_COMMENTS_NUMBER : 3;
1282
 
1283
- if($apbct->settings['check_comments_number'] && $comment['comment_author_email']){
1284
  $args = array(
1285
  'author_email' => $comment['comment_author_email'],
1286
  'status' => 'approve',
@@ -1295,7 +1293,7 @@ function ct_preprocess_comment($comment) {
1295
  ($comment['comment_type']!='trackback') &&
1296
  (
1297
  apbct_is_user_enable() === false ||
1298
- $apbct->settings['comments_test'] == 0 ||
1299
  $ct_comment_done ||
1300
  (isset($_SERVER['HTTP_REFERER']) && stripos($_SERVER['HTTP_REFERER'],'page=wysija_campaigns&action=editTemplate')!==false) ||
1301
  (isset($is_max_comments) && $is_max_comments) ||
@@ -1445,7 +1443,7 @@ function ct_preprocess_comment($comment) {
1445
  add_action('comment_post', 'ct_die', 999, 2);
1446
  }
1447
 
1448
- if($apbct->settings['remove_comments_links'] == 1){
1449
  $comment['comment_content'] = preg_replace("~(http|https|ftp|ftps)://(.*?)(\s|\n|[,.?!](\s|\n)|$)~", '[Link deleted]', $comment['comment_content']);
1450
  }
1451
 
@@ -1624,8 +1622,8 @@ function apbct_js_test($field_name = 'ct_checkjs', $data = null) {
1624
 
1625
  // Check static key
1626
  if(
1627
- $apbct->settings['use_static_js_key'] == 1 ||
1628
- ( $apbct->settings['use_static_js_key'] == - 1 &&
1629
  ( apbct_is_cache_plugins_exists() ||
1630
  ( apbct_is_post() && isset($apbct->data['cache_detected']) && $apbct->data['cache_detected'] == 1 )
1631
  )
@@ -1765,7 +1763,7 @@ function ct_register_form() {
1765
 
1766
  global $ct_checkjs_register_form, $apbct;
1767
 
1768
- if ($apbct->settings['registrations_test'] == 0) {
1769
  return false;
1770
  }
1771
 
@@ -1797,7 +1795,7 @@ function ct_login_message($message) {
1797
 
1798
  global $errors, $apbct, $apbct_cookie_register_ok_label;
1799
 
1800
- if ($apbct->settings['registrations_test'] != 0){
1801
  if( isset($_GET['checkemail']) && 'registered' == $_GET['checkemail'] ){
1802
  if (isset($_COOKIE[$apbct_cookie_register_ok_label])){
1803
  if(is_wp_error($errors)){
@@ -1948,7 +1946,7 @@ function ct_registration_errors($errors, $sanitized_user_login = null, $user_ema
1948
  return $errors;
1949
  }
1950
 
1951
- if ($apbct->settings['registrations_test'] == 0) {
1952
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1953
  return $errors;
1954
  }
@@ -2125,7 +2123,7 @@ function apbct_registration__UltimateMembers__check( $args ){
2125
 
2126
  global $apbct, $cleantalk_executed;
2127
 
2128
- if ($apbct->settings['registrations_test'] == 0) {
2129
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2130
  return $args;
2131
  }
@@ -2220,7 +2218,7 @@ function ct_grunion_contact_form_field_html($r, $field_label) {
2220
 
2221
  global $ct_checkjs_jpcf, $ct_jpcf_patched, $ct_jpcf_fields, $apbct;
2222
 
2223
- if ($apbct->settings['contact_forms_test'] == 1 && $ct_jpcf_patched === false && preg_match( "/(text|email)/i", $r)) {
2224
 
2225
  // Looking for element name prefix
2226
  $name_patched = false;
@@ -2244,7 +2242,7 @@ function ct_contact_form_is_spam($form) {
2244
 
2245
  global $ct_checkjs_jpcf, $apbct;
2246
 
2247
- if ($apbct->settings['contact_forms_test'] == 0) {
2248
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2249
  return null;
2250
  }
@@ -2292,7 +2290,7 @@ function ct_contact_form_is_spam($form) {
2292
  function ct_contact_form_is_spam_jetpack($is_spam,$form) {
2293
  global $ct_checkjs_jpcf, $apbct;
2294
 
2295
- if ($apbct->settings['contact_forms_test'] == 0) {
2296
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2297
  return null;
2298
  }
@@ -2339,7 +2337,7 @@ function apbct_form__contactForm7__addField($html) {
2339
 
2340
 
2341
 
2342
- if ($apbct->settings['contact_forms_test'] == 0) {
2343
  return $html;
2344
  }
2345
 
@@ -2378,10 +2376,10 @@ function apbct_form__contactForm7__testSpam( $spam, $submission = null ) {
2378
  global $ct_checkjs_cf7, $apbct;
2379
 
2380
  if(
2381
- $apbct->settings['contact_forms_test'] == 0 ||
2382
  $spam == false && WPCF7_VERSION < '3.0.0' ||
2383
  $spam === true && WPCF7_VERSION >= '3.0.0' ||
2384
- $apbct->settings['protect_logged_in'] != 1 && is_user_logged_in() || // Skip processing for logged in users.
2385
  apbct_exclusions_check__url() ||
2386
  apbct_exclusions_check__ip() ||
2387
  isset($apbct->cf7_checked)
@@ -2505,8 +2503,8 @@ function apbct_form__ninjaForms__testSpam() {
2505
  }
2506
 
2507
  if(
2508
- $apbct->settings['contact_forms_test'] == 0
2509
- || ($apbct->settings['protect_logged_in'] != 1 && is_user_logged_in()) // Skip processing for logged in users.
2510
  || apbct_exclusions_check__url()
2511
  ){
2512
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
@@ -2603,8 +2601,8 @@ function apbct_form__seedprod_coming_soon__testSpam() {
2603
  global $apbct;
2604
 
2605
  if(
2606
- $apbct->settings['contact_forms_test'] == 0
2607
- || ($apbct->settings['protect_logged_in'] != 1 && is_user_logged_in()) // Skip processing for logged in users.
2608
  || apbct_exclusions_check__url()
2609
  ){
2610
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
@@ -2685,7 +2683,7 @@ function apbct_form__WPForms__addField($form_data, $some, $title, $description,
2685
 
2686
  global $apbct;
2687
 
2688
- if($apbct->settings['contact_forms_test'] == 1)
2689
  ct_add_hidden_fields('checkjs_wpforms', false);
2690
 
2691
  }
@@ -2756,8 +2754,8 @@ function apbct_form__WPForms__testSpam() {
2756
  global $apbct;
2757
 
2758
  if(
2759
- $apbct->settings['contact_forms_test'] == 0 ||
2760
- $apbct->settings['protect_logged_in'] != 1 && is_user_logged_in() // Skip processing for logged in users.
2761
  ){
2762
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2763
  return;
@@ -2891,7 +2889,7 @@ function ct_si_contact_form_validate($form_errors = array(), $form_id_num = 0) {
2891
  }
2892
 
2893
 
2894
- if ($apbct->settings['contact_forms_test'] == 0) {
2895
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2896
  return $form_errors;
2897
  }
@@ -2966,7 +2964,7 @@ function ct_check_wplp(){
2966
 
2967
  if (!isset($_COOKIE[$ct_wplp_result_label])) {
2968
  // First AJAX submit of WPLP form
2969
- if ($apbct->settings['contact_forms_test'] == 0) {
2970
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2971
  return;
2972
  }
@@ -3052,7 +3050,7 @@ function apbct_form__gravityForms__testSpam($is_spam, $form, $entry) {
3052
  global $apbct, $cleantalk_executed, $ct_gform_is_spam, $ct_gform_response;
3053
 
3054
  if (
3055
- $apbct->settings['contact_forms_test'] == 0 ||
3056
  $cleantalk_executed // Return unchanged result if the submission was already tested.
3057
  ) {
3058
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
@@ -3125,7 +3123,7 @@ function ct_s2member_registration_test($post_key) {
3125
 
3126
  global $apbct;
3127
 
3128
- if ($apbct->settings['registrations_test'] == 0) {
3129
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
3130
  return null;
3131
  }
@@ -3214,8 +3212,8 @@ function apbct_form__elementor_pro__testSpam() {
3214
  global $apbct, $cleantalk_executed;
3215
 
3216
  if(
3217
- $apbct->settings['contact_forms_test'] == 0
3218
- || ($apbct->settings['protect_logged_in'] != 1 && is_user_logged_in()) // Skip processing for logged in users.
3219
  || apbct_exclusions_check__url()
3220
  ){
3221
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
@@ -3264,8 +3262,8 @@ function apbct_form__inevio__testSpam() {
3264
  $theme = wp_get_theme();
3265
  if(
3266
  stripos( $theme->get( 'Name' ), 'INEVIO' ) === false ||
3267
- $apbct->settings['contact_forms_test'] == 0 ||
3268
- ($apbct->settings['protect_logged_in'] != 1 && is_user_logged_in()) || // Skip processing for logged in users.
3269
  apbct_exclusions_check__url()
3270
  ) {
3271
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
@@ -3332,13 +3330,13 @@ function ct_contact_form_validate() {
3332
  isset($_GET['ptype']) && $_GET['ptype']=='login' ||
3333
  isset($_POST['ct_checkjs_register_form']) ||
3334
  (isset($_POST['signup_username']) && isset($_POST['signup_password_confirm']) && isset($_POST['signup_submit']) ) ||
3335
- $apbct->settings['general_contact_forms_test'] == 0 ||
3336
  isset($_POST['bbp_topic_content']) ||
3337
  isset($_POST['bbp_reply_content']) ||
3338
  isset($_POST['fscf_submitted']) ||
3339
  apbct_is_in_uri('/wc-api') ||
3340
  isset($_POST['log']) && isset($_POST['pwd']) && isset($_POST['wp-submit']) ||
3341
- isset($_POST[$ct_checkjs_frm]) && $apbct->settings['contact_forms_test'] == 1 ||// Formidable forms
3342
  ( isset($_POST['comment_post_ID']) && ! isset($_POST['comment-submit'] ) ) || // The comment form && ! DW Question & Answer
3343
  isset($_GET['for']) ||
3344
  (isset($_POST['log'], $_POST['pwd'])) || //WooCommerce Sensei login form fix
@@ -3416,7 +3414,7 @@ function ct_contact_form_validate() {
3416
  }
3417
 
3418
  // Do not execute anti-spam test for logged in users.
3419
- if (isset($_COOKIE[LOGGED_IN_COOKIE]) && $apbct->settings['protect_logged_in'] != 1) {
3420
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
3421
  return null;
3422
  }
@@ -3606,7 +3604,7 @@ function ct_contact_form_validate_postdata() {
3606
  isset($_GET['ptype']) && $_GET['ptype']=='login' ||
3607
  isset($_POST['ct_checkjs_register_form']) ||
3608
  (isset($_POST['signup_username']) && isset($_POST['signup_password_confirm']) && isset($_POST['signup_submit']) ) ||
3609
- $apbct->settings['general_contact_forms_test']==0 ||
3610
  isset($_POST['bbp_topic_content']) ||
3611
  isset($_POST['bbp_reply_content']) ||
3612
  isset($_POST['fscf_submitted']) ||
@@ -3766,7 +3764,7 @@ function ct_enqueue_scripts_public($hook){
3766
  return;
3767
  }
3768
 
3769
- if($apbct->settings['registrations_test'] || $apbct->settings['comments_test'] || $apbct->settings['contact_forms_test'] || $apbct->settings['general_contact_forms_test'] || $apbct->settings['wc_checkout_test'] || $apbct->settings['check_external'] || $apbct->settings['check_internal'] || $apbct->settings['bp_private_messages'] || $apbct->settings['general_postdata_test']){
3770
 
3771
  if( ! $apbct->public_script_loaded ) {
3772
 
@@ -3781,41 +3779,41 @@ function ct_enqueue_scripts_public($hook){
3781
  }
3782
 
3783
  // GDPR script
3784
- if($apbct->settings['gdpr_enabled']){
3785
 
3786
  wp_enqueue_script('ct_public_gdpr', APBCT_URL_PATH.'/js/apbct-public--gdpr.min.js', array('jquery', 'ct_public'), APBCT_VERSION, false /*in header*/);
3787
 
3788
  wp_localize_script('ct_public_gdpr', 'ctPublicGDPR', array(
3789
  'gdpr_forms' => array(),
3790
- 'gdpr_text' => $apbct->settings['gdpr_text'] ? $apbct->settings['gdpr_text'] : __('By using this form you agree with the storage and processing of your data by using the Privacy Policy on this website.', 'cleantalk-spam-protect'),
3791
  ));
3792
  }
3793
 
3794
  }
3795
 
3796
  if(!defined('CLEANTALK_AJAX_USE_FOOTER_HEADER') || (defined('CLEANTALK_AJAX_USE_FOOTER_HEADER') && CLEANTALK_AJAX_USE_FOOTER_HEADER)){
3797
- if($apbct->settings['use_ajax'] && ! apbct_is_in_uri('.xml') && ! apbct_is_in_uri('.xsl')){
3798
  if( ! apbct_is_in_uri('jm-ajax') ){
3799
 
3800
  // Use AJAX for JavaScript check
3801
- if($apbct->settings['use_ajax']){
3802
 
3803
  wp_enqueue_script('ct_nocache', plugins_url('/cleantalk-spam-protect/js/cleantalk_nocache.min.js'), array(), APBCT_VERSION, false /*in header*/);
3804
 
3805
  wp_localize_script('ct_nocache', 'ctNocache', array(
3806
  'ajaxurl' => admin_url('admin-ajax.php'),
3807
- 'info_flag' => $apbct->settings['collect_details'] && $apbct->settings['set_cookies'] ? true : false,
3808
- 'set_cookies_flag' => $apbct->settings['set_cookies'] ? false : true,
3809
  'blog_home' => get_home_url().'/',
3810
  ));
3811
  }
3812
 
3813
  // External forms check
3814
- if($apbct->settings['check_external'])
3815
  wp_enqueue_script('ct_external', plugins_url('/cleantalk-spam-protect/js/cleantalk_external.min.js'), array('jquery'), APBCT_VERSION, false /*in header*/);
3816
 
3817
  // Internal forms check
3818
- if($apbct->settings['check_internal'])
3819
  wp_enqueue_script('ct_internal', plugins_url('/cleantalk-spam-protect/js/cleantalk_internal.min.js'), array('jquery'), APBCT_VERSION, false /*in header*/);
3820
 
3821
  }
@@ -3825,7 +3823,7 @@ function ct_enqueue_scripts_public($hook){
3825
  // Show controls for commentaries
3826
  if(in_array("administrator", $current_user->roles)){
3827
 
3828
- if($apbct->settings['manage_comments_on_public_page']){
3829
 
3830
  $ajax_nonce = wp_create_nonce( "ct_secret_nonce" );
3831
 
@@ -3844,7 +3842,7 @@ function ct_enqueue_scripts_public($hook){
3844
  }
3845
 
3846
  // Debug
3847
- if($apbct->settings['debug_ajax']){
3848
  wp_enqueue_script('ct_debug_js', plugins_url('/cleantalk-spam-protect/js/cleantalk-debug-ajax.min.js'), array('jquery'), APBCT_VERSION, false /*in header*/);
3849
 
3850
  wp_localize_script('ct_debug_js', 'apbctDebug', array(
@@ -3862,7 +3860,7 @@ function ct_wp_list_comments_args($options){
3862
  global $current_user, $apbct;
3863
 
3864
  if(in_array("administrator", $current_user->roles)){
3865
- if($apbct->settings['manage_comments_on_public_page']) {
3866
  $theme = wp_get_theme();
3867
  $apbct->active_theme = $theme->get( 'Name' );
3868
  $options['end-callback'] = 'ct_comments_output';
@@ -3924,7 +3922,7 @@ function ct_comments_output($curr_comment, $param2, $wp_list_comments_args){
3924
  echo "</div>";
3925
 
3926
  // @todo research what such themes and make exception for them
3927
- $ending_tag = $wp_list_comments_args['style'];
3928
  if( in_array( $apbct->active_theme, array( 'Paperio', 'Twenty Twenty' ) ) ){
3929
  $ending_tag = is_null($wp_list_comments_args['style']) ? 'div' : $wp_list_comments_args['style'];
3930
  };
10
 
11
  //Check internal forms with such "action" http://wordpress.loc/contact-us/some_script.php
12
  if((isset($_POST['action']) && $_POST['action'] == 'ct_check_internal') &&
13
+ $apbct->settings['forms__check_internal']
14
  ){
15
  $ct_result = ct_contact_form_validate();
16
  if($ct_result == null){
33
  add_shortcode( 'et_pb_contact_form', 'ct_contact_form_validate' );
34
  }
35
 
36
+ if($apbct->settings['forms__check_external']){
37
 
38
  // Fixing form and directs it this site
39
+ if($apbct->settings['forms__check_external__capture_buffer'] && !is_admin() && !apbct_is_ajax() && !apbct_is_post() && apbct_is_user_enable() && !(defined('DOING_CRON') && DOING_CRON) && !(defined('XMLRPC_REQUEST') && XMLRPC_REQUEST)){
40
 
41
  if (defined('CLEANTALK_CAPTURE_BUFFER_SPECIFIC_URL') && is_string(CLEANTALK_CAPTURE_BUFFER_SPECIFIC_URL)) {
42
  $catch_buffer = false;
94
  }
95
 
96
  //hook for Anonymous Post
97
+ if($apbct->settings['data__general_postdata_test'] == 1 && empty($_POST['ct_checkjs_cf7']))
98
  add_action('wp', 'ct_contact_form_validate_postdata',1);
99
 
100
+ if($apbct->settings['forms__general_contact_forms_test'] == 1 && empty($_POST['ct_checkjs_cf7'])){
101
  add_action('CMA_custom_post_type_nav', 'ct_contact_form_validate_postdata',1);
102
  //add_action('init','ct_contact_form_validate',1);
103
  ct_contact_form_validate();
115
  }*/
116
  }
117
 
118
+ if($apbct->settings['data__general_postdata_test'] == 1 && empty($_POST['ct_checkjs_cf7']))
119
  add_action('CMA_custom_post_type_nav', 'ct_contact_form_validate_postdata',1);
120
 
121
  //add_action('wp_footer','ct_ajaxurl');
129
  // WooCommerce registration
130
  if(class_exists('WooCommerce')){
131
  add_filter( 'woocommerce_registration_errors', 'ct_registration_errors', 1, 3 );
132
+ if ($apbct->settings['forms__wc_checkout_test'] == 1) {
133
  add_filter('woocommerce_checkout_process', 'ct_woocommerce_checkout_check', 1, 3);
134
  }
135
+ if( isset($_REQUEST['wc-ajax']) && $_REQUEST['wc-ajax'] == 'checkout' && empty( $apbct->settings['forms__wc_register_from_order'] ) ){
136
  remove_filter( 'woocommerce_registration_errors', 'ct_registration_errors', 1 );
137
  }
138
  }
307
  add_action('wp_footer', 'apbct_hook__wp_footer', 1);
308
  }
309
 
310
+ if ($apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in()) {
311
  ct_contact_form_validate();
312
  }
313
 
314
  if (apbct_is_user_enable()) {
315
 
316
+ if ($apbct->settings['forms__general_contact_forms_test'] == 1 && !isset($_POST['comment_post_ID']) && !isset($_GET['for'])){
317
  add_action( 'init', 'ct_contact_form_validate', 999 );
318
  }
319
  if( apbct_is_post() &&
320
+ $apbct->settings['data__general_postdata_test'] == 1 &&
321
  !isset($_POST['ct_checkjs_cf7']) &&
322
  !is_admin() &&
323
  !apbct_is_user_role_in(array('administrator', 'moderator'))
443
 
444
 
445
  //If the check for contact forms enabled
446
+ if(!$apbct->settings['forms__contact_forms_test']) {
447
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
448
  return true;
449
  }
450
 
451
  //If the check for logged in users enabled
452
+ if($apbct->settings['data__protect_logged_in'] == 1 && is_user_logged_in()) {
453
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
454
  return true;
455
  }
513
 
514
  //Protect logged in users
515
  if($args['wishlist_status'])
516
+ if($apbct->settings['data__protect_logged_in'] == 0) {
517
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
518
  return $args;
519
  }
656
 
657
  //Check for enabled option
658
  if(
659
+ $apbct->settings['comments__bp_private_messages'] == 0 ||
660
  apbct_exclusions_check()
661
  ) {
662
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
669
  ? CLEANTALK_CHECK_COMMENTS_NUMBER
670
  : 3;
671
 
672
+ if($apbct->settings['comments__check_comments_number']){
673
  $args = array(
674
  'user_id' => $bp_message_obj->sender_id,
675
  'box' => 'sentbox',
728
  */
729
  function apbct_forms__search__addField( $form ){
730
  global $apbct;
731
+ if($apbct->settings['forms__search_test'] == 1){
732
  $js_filed = ct_add_hidden_fields('ct_checkjs_search_default', true, false, false, false);
733
  $form = str_replace('</form>', $js_filed, $form);
734
  }
748
  if(
749
  empty($search) ||
750
  $cleantalk_executed ||
751
+ $apbct->settings['forms__search_test'] == 0 ||
752
+ $apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in() // Skip processing for logged in users.
753
  ){
754
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
755
  return $search;
784
 
785
  if(
786
  ! is_search() || // If it is search results
787
+ $apbct->settings['forms__search_test'] == 0 ||
788
+ $apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in() // Skip processing for logged in users.
789
  ){
790
  return ;
791
  }
830
  )
831
  );
832
 
833
+ if( $apbct->settings['forms__wc_register_from_order'] ) {
834
  $cleantalk_executed = false;
835
  }
836
 
855
  global $apbct;
856
 
857
  //Check for enabled option
858
+ if( !$apbct->settings['forms__contact_forms_test']) {
859
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
860
  return;
861
  }
905
  return false;
906
  }
907
 
908
+ if ( !$apbct->settings['forms__comments_test']) {
909
  return false;
910
  }
911
 
946
  $field_id_hash = md5(rand(0, 1000));
947
 
948
  // Using only cookies
949
+ if ($cookie_check && $apbct->settings['data__set_cookies'] == 1) {
950
 
951
  $html = "<script type=\"text/javascript\" " . ( class_exists('Cookiebot_WP') ? 'data-cookieconsent="ignore"' : '' ) . ">
952
  function ctSetCookie___from_backend(c_name, value) {
956
  </script>";
957
 
958
  // Using AJAX to get key
959
+ }elseif($apbct->settings['data__use_ajax'] && $ajax){
960
 
961
  // Fix only for wp_footer -> apbct_hook__wp_head__set_cookie__ct_checkjs()
962
  if($no_print)
967
  $html = "<input type=\"hidden\" id=\"{$field_id}\" name=\"{$field_name}\" value=\"{$ct_checkjs_def}\" />
968
  <script type=\"text/javascript\" " . ( class_exists('Cookiebot_WP') ? 'data-cookieconsent="ignore"' : '' ) . ">
969
  window.addEventListener(\"DOMContentLoaded\", function () {
970
+ apbct_public_sendAJAX(
971
+ {action: \"apbct_js_keys__get\"},
972
+ {callback: apbct_js_keys__set_input_value, input_name: \"{$field_id}\",silent: true, no_nonce: true}
973
+ );
 
 
974
  });
975
  </script>";
976
 
1012
 
1013
  global $apbct, $ct_checkjs_frm;
1014
 
1015
+ if ( !$apbct->settings['forms__contact_forms_test'])
1016
  return false;
1017
 
1018
  $ct_checkjs_key = ct_get_checkjs_value();
1049
 
1050
  global $apbct;
1051
 
1052
+ if ( !$apbct->settings['forms__contact_forms_test']) {
1053
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1054
  return $errors;
1055
  }
1056
 
1057
  // Skip processing for logged in users.
1058
+ if ( !$apbct->settings['data__protect_logged_in'] && is_user_logged_in()) {
1059
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1060
  return $errors;
1061
  }
1134
 
1135
  global $apbct, $current_user;
1136
 
1137
+ if ( !$apbct->settings['forms__comments_test']) {
1138
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1139
  return $comment;
1140
  }
1141
 
1142
  // Skip processing for logged in users and admin.
1143
+ if ( !$apbct->settings['data__protect_logged_in'] && is_user_logged_in() ||
1144
  apbct_exclusions_check()
1145
  ) {
1146
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1250
  global $current_user, $comment_post_id, $ct_comment_done, $ct_jp_comments, $apbct;
1251
 
1252
  // Send email notification for chosen groups of users
1253
+ if($apbct->settings['wp__comment_notify'] && !empty($apbct->settings['wp__comment_notify__roles']) && $apbct->data['moderate']){
1254
 
1255
  add_filter('notify_post_author', 'apbct_comment__Wordpress__doNotify', 100, 2);
1256
 
1257
  $users = get_users(array(
1258
+ 'role__in' => $apbct->settings['wp__comment_notify__roles'],
1259
  'fileds' => array('user_email')
1260
  ));
1261
 
1278
 
1279
  $comments_check_number = defined('CLEANTALK_CHECK_COMMENTS_NUMBER') ? CLEANTALK_CHECK_COMMENTS_NUMBER : 3;
1280
 
1281
+ if($apbct->settings['comments__check_comments_number'] && $comment['comment_author_email']){
1282
  $args = array(
1283
  'author_email' => $comment['comment_author_email'],
1284
  'status' => 'approve',
1293
  ($comment['comment_type']!='trackback') &&
1294
  (
1295
  apbct_is_user_enable() === false ||
1296
+ $apbct->settings['forms__comments_test'] == 0 ||
1297
  $ct_comment_done ||
1298
  (isset($_SERVER['HTTP_REFERER']) && stripos($_SERVER['HTTP_REFERER'],'page=wysija_campaigns&action=editTemplate')!==false) ||
1299
  (isset($is_max_comments) && $is_max_comments) ||
1443
  add_action('comment_post', 'ct_die', 999, 2);
1444
  }
1445
 
1446
+ if($apbct->settings['comments__remove_comments_links'] == 1){
1447
  $comment['comment_content'] = preg_replace("~(http|https|ftp|ftps)://(.*?)(\s|\n|[,.?!](\s|\n)|$)~", '[Link deleted]', $comment['comment_content']);
1448
  }
1449
 
1622
 
1623
  // Check static key
1624
  if(
1625
+ $apbct->settings['data__use_static_js_key'] == 1 ||
1626
+ ( $apbct->settings['data__use_static_js_key'] == - 1 &&
1627
  ( apbct_is_cache_plugins_exists() ||
1628
  ( apbct_is_post() && isset($apbct->data['cache_detected']) && $apbct->data['cache_detected'] == 1 )
1629
  )
1763
 
1764
  global $ct_checkjs_register_form, $apbct;
1765
 
1766
+ if ($apbct->settings['forms__registrations_test'] == 0) {
1767
  return false;
1768
  }
1769
 
1795
 
1796
  global $errors, $apbct, $apbct_cookie_register_ok_label;
1797
 
1798
+ if ($apbct->settings['forms__registrations_test'] != 0){
1799
  if( isset($_GET['checkemail']) && 'registered' == $_GET['checkemail'] ){
1800
  if (isset($_COOKIE[$apbct_cookie_register_ok_label])){
1801
  if(is_wp_error($errors)){
1946
  return $errors;
1947
  }
1948
 
1949
+ if ($apbct->settings['forms__registrations_test'] == 0) {
1950
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
1951
  return $errors;
1952
  }
2123
 
2124
  global $apbct, $cleantalk_executed;
2125
 
2126
+ if ($apbct->settings['forms__registrations_test'] == 0) {
2127
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2128
  return $args;
2129
  }
2218
 
2219
  global $ct_checkjs_jpcf, $ct_jpcf_patched, $ct_jpcf_fields, $apbct;
2220
 
2221
+ if ($apbct->settings['forms__contact_forms_test'] == 1 && $ct_jpcf_patched === false && preg_match( "/(text|email)/i", $r)) {
2222
 
2223
  // Looking for element name prefix
2224
  $name_patched = false;
2242
 
2243
  global $ct_checkjs_jpcf, $apbct;
2244
 
2245
+ if ($apbct->settings['forms__contact_forms_test'] == 0) {
2246
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2247
  return null;
2248
  }
2290
  function ct_contact_form_is_spam_jetpack($is_spam,$form) {
2291
  global $ct_checkjs_jpcf, $apbct;
2292
 
2293
+ if ($apbct->settings['forms__contact_forms_test'] == 0) {
2294
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2295
  return null;
2296
  }
2337
 
2338
 
2339
 
2340
+ if ($apbct->settings['forms__contact_forms_test'] == 0) {
2341
  return $html;
2342
  }
2343
 
2376
  global $ct_checkjs_cf7, $apbct;
2377
 
2378
  if(
2379
+ $apbct->settings['forms__contact_forms_test'] == 0 ||
2380
  $spam == false && WPCF7_VERSION < '3.0.0' ||
2381
  $spam === true && WPCF7_VERSION >= '3.0.0' ||
2382
+ $apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in() || // Skip processing for logged in users.
2383
  apbct_exclusions_check__url() ||
2384
  apbct_exclusions_check__ip() ||
2385
  isset($apbct->cf7_checked)
2503
  }
2504
 
2505
  if(
2506
+ $apbct->settings['forms__contact_forms_test'] == 0
2507
+ || ($apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in()) // Skip processing for logged in users.
2508
  || apbct_exclusions_check__url()
2509
  ){
2510
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2601
  global $apbct;
2602
 
2603
  if(
2604
+ $apbct->settings['forms__contact_forms_test'] == 0
2605
+ || ($apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in()) // Skip processing for logged in users.
2606
  || apbct_exclusions_check__url()
2607
  ){
2608
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2683
 
2684
  global $apbct;
2685
 
2686
+ if($apbct->settings['forms__contact_forms_test'] == 1)
2687
  ct_add_hidden_fields('checkjs_wpforms', false);
2688
 
2689
  }
2754
  global $apbct;
2755
 
2756
  if(
2757
+ $apbct->settings['forms__contact_forms_test'] == 0 ||
2758
+ $apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in() // Skip processing for logged in users.
2759
  ){
2760
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2761
  return;
2889
  }
2890
 
2891
 
2892
+ if ($apbct->settings['forms__contact_forms_test'] == 0) {
2893
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2894
  return $form_errors;
2895
  }
2964
 
2965
  if (!isset($_COOKIE[$ct_wplp_result_label])) {
2966
  // First AJAX submit of WPLP form
2967
+ if ($apbct->settings['forms__contact_forms_test'] == 0) {
2968
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
2969
  return;
2970
  }
3050
  global $apbct, $cleantalk_executed, $ct_gform_is_spam, $ct_gform_response;
3051
 
3052
  if (
3053
+ $apbct->settings['forms__contact_forms_test'] == 0 ||
3054
  $cleantalk_executed // Return unchanged result if the submission was already tested.
3055
  ) {
3056
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
3123
 
3124
  global $apbct;
3125
 
3126
+ if ($apbct->settings['forms__registrations_test'] == 0) {
3127
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
3128
  return null;
3129
  }
3212
  global $apbct, $cleantalk_executed;
3213
 
3214
  if(
3215
+ $apbct->settings['forms__contact_forms_test'] == 0
3216
+ || ($apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in()) // Skip processing for logged in users.
3217
  || apbct_exclusions_check__url()
3218
  ){
3219
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
3262
  $theme = wp_get_theme();
3263
  if(
3264
  stripos( $theme->get( 'Name' ), 'INEVIO' ) === false ||
3265
+ $apbct->settings['forms__contact_forms_test'] == 0 ||
3266
+ ($apbct->settings['data__protect_logged_in'] != 1 && is_user_logged_in()) || // Skip processing for logged in users.
3267
  apbct_exclusions_check__url()
3268
  ) {
3269
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
3330
  isset($_GET['ptype']) && $_GET['ptype']=='login' ||
3331
  isset($_POST['ct_checkjs_register_form']) ||
3332
  (isset($_POST['signup_username']) && isset($_POST['signup_password_confirm']) && isset($_POST['signup_submit']) ) ||
3333
+ $apbct->settings['forms__general_contact_forms_test'] == 0 ||
3334
  isset($_POST['bbp_topic_content']) ||
3335
  isset($_POST['bbp_reply_content']) ||
3336
  isset($_POST['fscf_submitted']) ||
3337
  apbct_is_in_uri('/wc-api') ||
3338
  isset($_POST['log']) && isset($_POST['pwd']) && isset($_POST['wp-submit']) ||
3339
+ isset($_POST[$ct_checkjs_frm]) && $apbct->settings['forms__contact_forms_test'] == 1 ||// Formidable forms
3340
  ( isset($_POST['comment_post_ID']) && ! isset($_POST['comment-submit'] ) ) || // The comment form && ! DW Question & Answer
3341
  isset($_GET['for']) ||
3342
  (isset($_POST['log'], $_POST['pwd'])) || //WooCommerce Sensei login form fix
3414
  }
3415
 
3416
  // Do not execute anti-spam test for logged in users.
3417
+ if (isset($_COOKIE[LOGGED_IN_COOKIE]) && $apbct->settings['data__protect_logged_in'] != 1) {
3418
  do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, $_POST );
3419
  return null;
3420
  }
3604
  isset($_GET['ptype']) && $_GET['ptype']=='login' ||
3605
  isset($_POST['ct_checkjs_register_form']) ||
3606
  (isset($_POST['signup_username']) && isset($_POST['signup_password_confirm']) && isset($_POST['signup_submit']) ) ||
3607
+ $apbct->settings['forms__general_contact_forms_test']==0 ||
3608
  isset($_POST['bbp_topic_content']) ||
3609
  isset($_POST['bbp_reply_content']) ||
3610
  isset($_POST['fscf_submitted']) ||
3764
  return;
3765
  }
3766
 
3767
+ if($apbct->settings['forms__registrations_test'] || $apbct->settings['forms__comments_test'] || $apbct->settings['forms__contact_forms_test'] || $apbct->settings['forms__general_contact_forms_test'] || $apbct->settings['forms__wc_checkout_test'] || $apbct->settings['forms__check_external'] || $apbct->settings['forms__check_internal'] || $apbct->settings['comments__bp_private_messages'] || $apbct->settings['data__general_postdata_test']){
3768
 
3769
  if( ! $apbct->public_script_loaded ) {
3770
 
3779
  }
3780
 
3781
  // GDPR script
3782
+ if($apbct->settings['gdpr__enabled']){
3783
 
3784
  wp_enqueue_script('ct_public_gdpr', APBCT_URL_PATH.'/js/apbct-public--gdpr.min.js', array('jquery', 'ct_public'), APBCT_VERSION, false /*in header*/);
3785
 
3786
  wp_localize_script('ct_public_gdpr', 'ctPublicGDPR', array(
3787
  'gdpr_forms' => array(),
3788
+ 'gdpr__text' => $apbct->settings['gdpr__text'] ? $apbct->settings['gdpr__text'] : __('By using this form you agree with the storage and processing of your data by using the Privacy Policy on this website.', 'cleantalk-spam-protect'),
3789
  ));
3790
  }
3791
 
3792
  }
3793
 
3794
  if(!defined('CLEANTALK_AJAX_USE_FOOTER_HEADER') || (defined('CLEANTALK_AJAX_USE_FOOTER_HEADER') && CLEANTALK_AJAX_USE_FOOTER_HEADER)){
3795
+ if($apbct->settings['data__use_ajax'] && ! apbct_is_in_uri('.xml') && ! apbct_is_in_uri('.xsl')){
3796
  if( ! apbct_is_in_uri('jm-ajax') ){
3797
 
3798
  // Use AJAX for JavaScript check
3799
+ if($apbct->settings['data__use_ajax']){
3800
 
3801
  wp_enqueue_script('ct_nocache', plugins_url('/cleantalk-spam-protect/js/cleantalk_nocache.min.js'), array(), APBCT_VERSION, false /*in header*/);
3802
 
3803
  wp_localize_script('ct_nocache', 'ctNocache', array(
3804
  'ajaxurl' => admin_url('admin-ajax.php'),
3805
+ 'info_flag' => $apbct->settings['misc__collect_details'] && $apbct->settings['data__set_cookies'] ? true : false,
3806
+ 'set_cookies_flag' => $apbct->settings['data__set_cookies'] ? false : true,
3807
  'blog_home' => get_home_url().'/',
3808
  ));
3809
  }
3810
 
3811
  // External forms check
3812
+ if($apbct->settings['forms__check_external'])
3813
  wp_enqueue_script('ct_external', plugins_url('/cleantalk-spam-protect/js/cleantalk_external.min.js'), array('jquery'), APBCT_VERSION, false /*in header*/);
3814
 
3815
  // Internal forms check
3816
+ if($apbct->settings['forms__check_internal'])
3817
  wp_enqueue_script('ct_internal', plugins_url('/cleantalk-spam-protect/js/cleantalk_internal.min.js'), array('jquery'), APBCT_VERSION, false /*in header*/);
3818
 
3819
  }
3823
  // Show controls for commentaries
3824
  if(in_array("administrator", $current_user->roles)){
3825
 
3826
+ if($apbct->settings['comments__manage_comments_on_public_page']){
3827
 
3828
  $ajax_nonce = wp_create_nonce( "ct_secret_nonce" );
3829
 
3842
  }
3843
 
3844
  // Debug
3845
+ if($apbct->settings['misc__debug_ajax']){
3846
  wp_enqueue_script('ct_debug_js', plugins_url('/cleantalk-spam-protect/js/cleantalk-debug-ajax.min.js'), array('jquery'), APBCT_VERSION, false /*in header*/);
3847
 
3848
  wp_localize_script('ct_debug_js', 'apbctDebug', array(
3860
  global $current_user, $apbct;
3861
 
3862
  if(in_array("administrator", $current_user->roles)){
3863
+ if($apbct->settings['comments__manage_comments_on_public_page']) {
3864
  $theme = wp_get_theme();
3865
  $apbct->active_theme = $theme->get( 'Name' );
3866
  $options['end-callback'] = 'ct_comments_output';
3922
  echo "</div>";
3923
 
3924
  // @todo research what such themes and make exception for them
3925
+ $ending_tag = isset( $wp_list_comments_args['style'] ) ? $wp_list_comments_args['style'] : null ;
3926
  if( in_array( $apbct->active_theme, array( 'Paperio', 'Twenty Twenty' ) ) ){
3927
  $ending_tag = is_null($wp_list_comments_args['style']) ? 'div' : $wp_list_comments_args['style'];
3928
  };
inc/cleantalk-settings.php CHANGED
@@ -98,7 +98,7 @@ function apbct_settings__set_fileds( $fields ){
98
  'html_before' => '<hr>',
99
  'html_after' => '',
100
  'fields' => array(
101
- 'spam_firewall' => array(
102
  'type' => 'checkbox',
103
  'title' => __('SpamFireWall', 'cleantalk-spam-protect'),
104
  'description' => __("This option allows to filter spam bots before they access website. Also reduces CPU usage on hosting server and accelerates pages load time.", 'cleantalk-spam-protect'),
@@ -108,7 +108,7 @@ function apbct_settings__set_fileds( $fields ){
108
  'type' => 'checkbox',
109
  'title' => __('Anti-Crawler', 'cleantalk-spam-protect') . $additional_ac_title,
110
  'class' => 'apbct_settings-field_wrapper--sub',
111
- 'parent' => 'spam_firewall',
112
  'description' => __('Plugin shows SpamFireWall stop page for any bot, except allowed bots (Google, Yahoo and etc).', 'cleantalk-spam-protect')
113
  . '<br>'
114
  . __( 'Anti-Crawler includes blocking bots by the User-Agent. Use Personal lists in the Dashboard to filter specific User-Agents.', 'cleantalk-spam-protect' ),
@@ -130,23 +130,23 @@ function apbct_settings__set_fileds( $fields ){
130
  .'<div id="apbct_settings__davanced_settings" style="display: none;">',
131
  'html_after' => '',
132
  'fields' => array(
133
- 'registrations_test' => array(
134
  'title' => __('Registration Forms', 'cleantalk-spam-protect'),
135
  'description' => __('WordPress, BuddyPress, bbPress, S2Member, WooCommerce.', 'cleantalk-spam-protect'),
136
  ),
137
- 'comments_test' => array(
138
  'title' => __('Comments form', 'cleantalk-spam-protect'),
139
  'description' => __('WordPress, JetPack, WooCommerce.', 'cleantalk-spam-protect'),
140
  ),
141
- 'contact_forms_test' => array(
142
  'title' => __('Contact forms', 'cleantalk-spam-protect'),
143
  'description' => __('Contact Form 7, Formidable forms, JetPack, Fast Secure Contact Form, WordPress Landing Pages, Gravity Forms.', 'cleantalk-spam-protect'),
144
  ),
145
- 'general_contact_forms_test' => array(
146
  'title' => __('Custom contact forms', 'cleantalk-spam-protect'),
147
  'description' => __('Anti spam test for any WordPress themes or contacts forms.', 'cleantalk-spam-protect'),
148
  ),
149
- 'search_test' => array(
150
  'title' => __('Test default Wordpress search form for spam', 'cleantalk-spam-protect'),
151
  'description' => __('Spam protection for Search form.', 'cleantalk-spam-protect')
152
  . (!$apbct->white_label || is_main_site()
@@ -157,18 +157,18 @@ function apbct_settings__set_fileds( $fields ){
157
  : ''
158
  )
159
  ),
160
- 'check_external' => array(
161
  'title' => __('Protect external forms', 'cleantalk-spam-protect'),
162
  'description' => __('Turn this option on to protect forms on your WordPress that send data to third-part servers (like MailChimp).', 'cleantalk-spam-protect'),
163
- 'childrens' => array('check_external__capture_buffer'),
164
  ),
165
- 'check_external__capture_buffer' => array(
166
  'title' => __('Capture buffer', 'cleantalk-spam-protect'),
167
  'description' => __('This setting gives you more sophisticated and strengthened protection for external forms. But it could break plugins which use a buffer like Ninja Forms.', 'cleantalk-spam-protect'),
168
  'class' => 'apbct_settings-field_wrapper--sub',
169
- 'parent' => 'check_external',
170
  ),
171
- 'check_internal' => array(
172
  'title' => __('Protect internal forms', 'cleantalk-spam-protect'),
173
  'description' => __('This option will enable protection for custom (hand-made) AJAX forms with PHP scripts handlers on your WordPress.', 'cleantalk-spam-protect'),
174
  ),
@@ -179,15 +179,15 @@ function apbct_settings__set_fileds( $fields ){
179
  'wc' => array(
180
  'title' => __('WooCommerce', 'cleantalk-spam-protect'),
181
  'fields' => array(
182
- 'wc_checkout_test' => array(
183
  'title' => __('WooCommerce checkout form', 'cleantalk-spam-protect'),
184
  'description' => __('Anti spam test for WooCommerce checkout form.', 'cleantalk-spam-protect'),
185
- 'childrens' => array('wc_register_from_order')
186
  ),
187
- 'wc_register_from_order' => array(
188
  'title' => __('Spam test for registration during checkout', 'cleantalk-spam-protect'),
189
  'description' => __('Enable anti spam test for registration process which during woocommerce\'s checkout.', 'cleantalk-spam-protect'),
190
- 'parent' => 'wc_checkout_test',
191
  'class' => 'apbct_settings-field_wrapper--sub',
192
  'reverse_trigger' => true
193
  ),
@@ -198,55 +198,55 @@ function apbct_settings__set_fileds( $fields ){
198
  'comments_and_messages' => array(
199
  'title' => __('Comments and Messages', 'cleantalk-spam-protect'),
200
  'fields' => array(
201
- 'disable_comments__all' => array(
202
  'title' => __( 'Disable all comments', 'cleantalk-spam-protect'),
203
  'description' => __( 'Disabling comments for all types of content.', 'cleantalk-spam-protect'),
204
  'childrens' => array(
205
- 'disable_comments__posts',
206
- 'disable_comments__pages',
207
- 'disable_comments__media',
208
  ),
209
  'options' => array(
210
  array( 'val' => 1, 'label' => __( 'On' ), 'childrens_enable' => 0, ),
211
  array( 'val' => 0, 'label' => __( 'Off' ), 'childrens_enable' => 1, ),
212
  ),
213
  ),
214
- 'disable_comments__posts' => array(
215
  'title' => __( 'Disable comments for all posts', 'cleantalk-spam-protect'),
216
  'class' => 'apbct_settings-field_wrapper--sub',
217
- 'parent' => 'disable_comments__all',
218
  'reverse_trigger' => true,
219
  ),
220
- 'disable_comments__pages' => array(
221
  'title' => __( 'Disable comments for all pages', 'cleantalk-spam-protect'),
222
  'class' => 'apbct_settings-field_wrapper--sub',
223
- 'parent' => 'disable_comments__all',
224
  'reverse_trigger' => true,
225
  ),
226
- 'disable_comments__media' => array(
227
  'title' => __( 'Disable comments for all media', 'cleantalk-spam-protect'),
228
  'class' => 'apbct_settings-field_wrapper--sub',
229
- 'parent' => 'disable_comments__all',
230
  'reverse_trigger' => true,
231
  ),
232
- 'bp_private_messages' => array(
233
  'title' => __('BuddyPress Private Messages', 'cleantalk-spam-protect'),
234
  'description' => __('Check buddyPress private messages.', 'cleantalk-spam-protect'),
235
  ),
236
- 'remove_old_spam' => array(
237
  'title' => __('Automatically delete spam comments', 'cleantalk-spam-protect'),
238
  'description' => sprintf(__('Delete spam comments older than %d days.', 'cleantalk-spam-protect'), $apbct->data['spam_store_days']),
239
  ),
240
- 'remove_comments_links' => array(
241
  'title' => __('Remove links from approved comments', 'cleantalk-spam-protect'),
242
  'description' => __('Remove links from approved comments. Replace it with "[Link deleted]"', 'cleantalk-spam-protect'),
243
  ),
244
- 'show_check_links' => array(
245
  'title' => __('Show links to check Emails, IPs for spam', 'cleantalk-spam-protect'),
246
  'description' => __('Shows little icon near IP addresses and Emails allowing you to check it via CleanTalk\'s database.', 'cleantalk-spam-protect'),
247
  'display' => !$apbct->white_label,
248
  ),
249
- 'manage_comments_on_public_page' => array(
250
  'title' => __('Manage comments on public pages', 'cleantalk-spam-protect'),
251
  'description' => __('Allows administrators to manage comments on public post\'s pages with small interactive menu.', 'cleantalk-spam-protect'),
252
  'display' => !$apbct->white_label,
@@ -258,19 +258,19 @@ function apbct_settings__set_fileds( $fields ){
258
  'data_processing' => array(
259
  'title' => __('Data Processing', 'cleantalk-spam-protect'),
260
  'fields' => array(
261
- 'protect_logged_in' => array(
262
  'title' => __("Protect logged in Users", 'cleantalk-spam-protect'),
263
  'description' => __('Turn this option on to check for spam any submissions (comments, contact forms and etc.) from registered Users.', 'cleantalk-spam-protect'),
264
  ),
265
- 'check_comments_number' => array(
266
  'title' => __("Don't check trusted user's comments", 'cleantalk-spam-protect'),
267
  'description' => sprintf(__("Don't check comments for users with above %d comments.", 'cleantalk-spam-protect'), defined('CLEANTALK_CHECK_COMMENTS_NUMBER') ? CLEANTALK_CHECK_COMMENTS_NUMBER : 3),
268
  ),
269
- 'use_ajax' => array(
270
  'title' => __('Use AJAX for JavaScript check', 'cleantalk-spam-protect'),
271
  'description' => __('Options helps protect WordPress against spam with any caching plugins. Turn this option on to avoid issues with caching plugins. Turn off this option and SpamFireWall to be compatible with Accelerated mobile pages (AMP).', 'cleantalk-spam-protect'),
272
  ),
273
- 'use_static_js_key' => array(
274
  'title' => __('Use static keys for JS check.', 'cleantalk-spam-protect'),
275
  'description' => __('Could help if you have cache for AJAX requests and you are dealing with false positives. Slightly decreases protection quality. Auto - Static key will be used if caching plugin is spotted.', 'cleantalk-spam-protect'),
276
  'options' => array(
@@ -279,7 +279,7 @@ function apbct_settings__set_fileds( $fields ){
279
  array('val' => -1, 'label' => __('Auto'),),
280
  ),
281
  ),
282
- 'general_postdata_test' => array(
283
  'title' => __('Check all post data', 'cleantalk-spam-protect'),
284
  'description' => __('Check all POST submissions from website visitors. Enable this option if you have spam misses on website.', 'cleantalk-spam-protect')
285
  .(!$apbct->white_label
@@ -288,29 +288,29 @@ function apbct_settings__set_fileds( $fields ){
288
  )
289
  .'<br />' . __('СAUTION! Option can catch POST requests in WordPress backend', 'cleantalk-spam-protect'),
290
  ),
291
- 'set_cookies' => array(
292
  'title' => __("Set cookies", 'cleantalk-spam-protect'),
293
  'description' => __('Turn this option off to deny plugin generates any cookies on website front-end. This option is helpful if you use Varnish. But most of contact forms will not be protected if the option is turned off! <b>Warning: We strongly recommend you to enable this otherwise it could cause false positives spam detection.</b>', 'cleantalk-spam-protect'),
294
- 'childrens' => array('set_cookies__sessions'),
295
  ),
296
- 'set_cookies__sessions' => array(
297
  'title' => __('Use alternative mechanism for cookies', 'cleantalk-spam-protect'),
298
  'description' => __('Doesn\'t use cookie or PHP sessions. Collect data for all types of bots.', 'cleantalk-spam-protect'),
299
- 'parent' => 'set_cookies',
300
  'class' => 'apbct_settings-field_wrapper--sub',
301
  ),
302
- 'ssl_on' => array(
303
  'title' => __("Use SSL", 'cleantalk-spam-protect'),
304
  'description' => __('Turn this option on to use encrypted (SSL) connection with servers.', 'cleantalk-spam-protect'),
305
  ),
306
- 'use_buitin_http_api' => array(
307
  'title' => __("Use Wordpress HTTP API", 'cleantalk-spam-protect'),
308
  'description' => __('Alternative way to connect the Cloud. Use this if you have connection problems.', 'cleantalk-spam-protect'),
309
  ),
310
  'sfw__use_delete_to_clear_table' => array(
311
  'title' => __("Use DELETE SQL-command instead TRUNCATE to clear tables", 'cleantalk-spam-protect'),
312
  'description' => __('Could help if you have blocked SpamFireWall tables in your database.', 'cleantalk-spam-protect'),
313
- 'parent' => 'spam_firewall',
314
  ),
315
  ),
316
  ),
@@ -355,27 +355,27 @@ function apbct_settings__set_fileds( $fields ){
355
  'html_before' => '',
356
  'html_after' => '',
357
  'fields' => array(
358
- 'show_adminbar' => array(
359
  'title' => __('Show statistics in admin bar', 'cleantalk-spam-protect'),
360
  'description' => __('Show/hide icon in top level menu in WordPress backend. The number of submissions is being counted for past 24 hours.', 'cleantalk-spam-protect'),
361
- 'childrens' => array('all_time_counter','daily_counter','sfw_counter'),
362
  ),
363
- 'all_time_counter' => array(
364
  'title' => __('Show All-time counter', 'cleantalk-spam-protect'),
365
  'description' => __('Display all-time requests counter in the admin bar. Counter displays number of requests since plugin installation.', 'cleantalk-spam-protect'),
366
- 'parent' => 'show_adminbar',
367
  'class' => 'apbct_settings-field_wrapper--sub',
368
  ),
369
- 'daily_counter' => array(
370
  'title' => __('Show 24 hours counter', 'cleantalk-spam-protect'),
371
  'description' => __('Display daily requests counter in the admin bar. Counter displays number of requests of the past 24 hours.', 'cleantalk-spam-protect'),
372
- 'parent' => 'show_adminbar',
373
  'class' => 'apbct_settings-field_wrapper--sub',
374
  ),
375
- 'sfw_counter' => array(
376
  'title' => __('SpamFireWall counter', 'cleantalk-spam-protect'),
377
  'description' => __('Display SpamFireWall requests in the admin bar. Counter displays number of requests since plugin installation.', 'cleantalk-spam-protect'),
378
- 'parent' => 'show_adminbar',
379
  'class' => 'apbct_settings-field_wrapper--sub',
380
  ),
381
  ),
@@ -385,57 +385,57 @@ function apbct_settings__set_fileds( $fields ){
385
  'misc' => array(
386
  'html_after' => '</div><br>',
387
  'fields' => array(
388
- 'collect_details' => array(
389
  'type' => 'checkbox',
390
  'title' => __('Collect details about browsers', 'cleantalk-spam-protect'),
391
  'description' => __("Checking this box you allow plugin store information about screen size and browser plugins of website visitors. The option in a beta state.", 'cleantalk-spam-protect'),
392
  ),
393
- 'send_connection_reports' => array(
394
  'type' => 'checkbox',
395
  'title' => __('Send connection reports', 'cleantalk-spam-protect'),
396
  'description' => __("Checking this box you allow plugin to send the information about your connection. The option in a beta state.", 'cleantalk-spam-protect'),
397
  ),
398
- 'async_js' => array(
399
  'type' => 'checkbox',
400
  'title' => __('Async JavaScript loading', 'cleantalk-spam-protect'),
401
  'description' => __('Use async loading for scripts. Warning: This could reduce filtration quality.', 'cleantalk-spam-protect'),
402
  ),
403
- 'gdpr_enabled' => array(
404
  'type' => 'checkbox',
405
  'title' => __('Allow to add GDPR notice via shortcode', 'cleantalk-spam-protect'),
406
  'description' => __(' Adds small checkbox under your website form. To add it you should use the shortcode on the form\'s page: [cleantalk_gdpr_form id="FORM_ID"]', 'cleantalk-spam-protect'),
407
- 'childrens' => array('gdpr_text'),
408
  ),
409
- 'gdpr_text' => array(
410
  'type' => 'text',
411
  'title' => __('GDPR text notice', 'cleantalk-spam-protect'),
412
  'description' => __('This text will be added as a description to the GDPR checkbox.', 'cleantalk-spam-protect'),
413
- 'parent' => 'gdpr_enabled',
414
  'class' => 'apbct_settings-field_wrapper--sub',
415
  ),
416
- 'store_urls' => array(
417
  'type' => 'checkbox',
418
  'title' => __('Store visited URLs', 'cleantalk-spam-protect'),
419
  'description' => __("Plugin stores last 10 visited URLs (HTTP REFFERERS) before visitor submits form on the site. You can see stored visited URLS for each visitor in your Dashboard. Turn the option on to improve Anti-Spam protection.", 'cleantalk-spam-protect'),
420
- 'childrens' => array('store_urls__sessions'),
421
  ),
422
- 'store_urls__sessions' => array(
423
  'type' => 'checkbox',
424
  'title' => __('Use cookies less sessions', 'cleantalk-spam-protect'),
425
  'description' => __('Doesn\'t use cookie or PHP sessions. Collect data for all types of bots.', 'cleantalk-spam-protect'),
426
- 'parent' => 'store_urls',
427
  'class' => 'apbct_settings-field_wrapper--sub',
428
  ),
429
- 'comment_notify' => array(
430
  'type' => 'checkbox',
431
  'title' => __('Notify users with selected roles about new approved comments. Hold CTRL to select multiple roles.', 'cleantalk-spam-protect'),
432
  'description' => sprintf(__("If enabled, overrides similar Wordpress %sdiscussion settings%s.", 'cleantalk-spam-protect'), '<a href="options-discussion.php">','</a>'),
433
- 'childrens' => array('comment_notify__roles'),
434
  ),
435
- 'comment_notify__roles' => array(
436
  'type' => 'select',
437
  'multiple' => true,
438
- 'parent' => 'comment_notify',
439
  'options_callback' => 'apbct_get_all_roles',
440
  'options_callback_params' => array(true),
441
  'class' => 'apbct_settings-field_wrapper--sub',
@@ -444,7 +444,7 @@ function apbct_settings__set_fileds( $fields ){
444
  'type' => 'checkbox',
445
  'title' => __('Anti-Flood', 'cleantalk-spam-protect'),
446
  'class' => 'apbct_settings-field_wrapper',
447
- 'parent' => 'spam_firewall',
448
  'childrens' => array('sfw__anti_flood__view_limit',),
449
  'description' => __('Shows the SpamFireWall page for bots trying to crawl your site. Look at the page limit setting below.', 'cleantalk-spam-protect'),
450
  ),
@@ -455,11 +455,11 @@ function apbct_settings__set_fileds( $fields ){
455
  'parent' => 'sfw__anti_flood',
456
  'description' => __('Count of page view per 1 minute before plugin shows SpamFireWall page. SpamFireWall page active for 30 second after that valid visitor (with JavaScript) passes the page to the demanded page of the site.', 'cleantalk-spam-protect'),
457
  ),
458
- 'dashboard_widget__show' => array(
459
  'type' => 'checkbox',
460
  'title' => __('Show Dashboard Widget', 'cleantalk-spam-protect'),
461
  ),
462
- 'complete_deactivation' => array(
463
  'type' => 'checkbox',
464
  'title' => __('Complete deactivation', 'cleantalk-spam-protect'),
465
  'description' => __('Leave no trace in the system after deactivation.', 'cleantalk-spam-protect'),
@@ -477,33 +477,33 @@ function apbct_settings__set_fileds__network( $fields ){
477
  $additional_fields = array(
478
  'main' => array(
479
  'fields' => array(
480
- 'white_label' => array(
481
  'type' => 'checkbox',
482
  'title' => __('Enable White Label Mode', 'cleantalk-spam-protect'),
483
  'description' => sprintf(__("Learn more information %shere%s.", 'cleantalk-spam-protect'), '<a target="_blank" href="https://cleantalk.org/ru/help/hosting-white-label">', '</a>'),
484
- 'childrens' => array( 'white_label__hoster_key', 'white_label__plugin_name', 'allow_custom_key', ),
485
  'disabled' => defined('CLEANTALK_ACCESS_KEY'),
486
  'network' => true,
487
  ),
488
- 'white_label__hoster_key' => array(
489
  'title' => __('Hoster API Key', 'cleantalk-spam-protect'),
490
  'description' => sprintf(__("You can get it in %sCleantalk's Control Panel%s", 'cleantalk-spam-protect'), '<a target="_blank" href="https://cleantalk.org/my/profile">', '</a>'),
491
  'type' => 'text',
492
- 'parent' => 'white_label',
493
  'class' => 'apbct_settings-field_wrapper--sub',
494
  'network' => true,
495
  'required' => true,
496
  ),
497
- 'white_label__plugin_name' => array(
498
  'title' => __('Plugin name', 'cleantalk-spam-protect'),
499
  'description' => sprintf(__("Specify plugin name. Leave empty for deafult %sAntispam by Cleantalk%s", 'cleantalk-spam-protect'), '<b>', '</b>'),
500
  'type' => 'text',
501
- 'parent' => 'white_label',
502
  'class' => 'apbct_settings-field_wrapper--sub',
503
  'network' => true,
504
  'required' => true,
505
  ),
506
- 'allow_custom_key' => array(
507
  'type' => 'checkbox',
508
  'title' => __('Allow users to use other key', 'cleantalk-spam-protect'),
509
  'description' => __('Allow users to use different Access key in their plugin settings on child blogs. They could use different CleanTalk account.', 'cleantalk-spam-protect')
@@ -516,47 +516,47 @@ function apbct_settings__set_fileds__network( $fields ){
516
  : ''
517
  ),
518
  'display' => APBCT_WPMS && is_main_site(),
519
- 'disabled' => $apbct->network_settings['white_label'],
520
  'network' => true,
521
  ),
522
- 'allow_custom_settings' => array(
523
  'type' => 'checkbox',
524
  'title' => __('Allow users to manage plugin settings', 'cleantalk-spam-protect'),
525
  'description' => __('Allow to change settings on child sites.', 'cleantalk-spam-protect'),
526
  'display' => APBCT_WPMS && is_main_site(),
527
  'network' => true,
528
  ),
529
- 'use_settings_template' => array(
530
  'type' => 'checkbox',
531
  'title' => __('Use settings template', 'cleantalk-spam-protect'),
532
  'description' => __("Use the current settings template for child sites.", 'cleantalk-spam-protect'),
533
- 'childrens' => array( 'use_settings_template_apply_for_new', 'use_settings_template_apply_for_current'),
534
  'network' => true,
535
  ),
536
- 'use_settings_template_apply_for_new' => array(
537
  'type' => 'checkbox',
538
  'title' => __('Apply for newly added sites.', 'cleantalk-spam-protect'),
539
  'description' => __("The newly added site will have the same preset settings template.", 'cleantalk-spam-protect'),
540
- 'parent' => 'use_settings_template',
541
  'class' => 'apbct_settings-field_wrapper--sub',
542
  'network' => true,
543
  ),
544
- 'use_settings_template_apply_for_current' => array(
545
  'type' => 'checkbox',
546
  'title' => __('Apply for current sites.', 'cleantalk-spam-protect'),
547
  'description' => __("Apply current settings template for selected sites.", 'cleantalk-spam-protect'),
548
- 'parent' => 'use_settings_template',
549
- 'childrens' => array( 'use_settings_template_apply_for_current_list_sites'),
550
  'class' => 'apbct_settings-field_wrapper--sub',
551
  'network' => true,
552
  ),
553
- 'use_settings_template_apply_for_current_list_sites' => array(
554
  'type' => 'select',
555
  'multiple' => true,
556
  'options_callback' => 'apbct_get_all_child_domains',
557
  'options_callback_params' => array(true),
558
  'class' => 'apbct_settings-field_wrapper--sub',
559
- 'parent' => 'use_settings_template_apply_for_current',
560
  'description' => __('Sites to apply settings. Hold CTRL to select multiple sites.', 'cleantalk-spam-protect'),
561
  'network' => true,
562
  ),
@@ -642,7 +642,7 @@ function apbct_settings__add_groups_and_fields( $fields ){
642
  function apbct_settings__display() {
643
 
644
  global $apbct;
645
-
646
  // Title
647
  echo '<h2 class="apbct_settings-title">'.__($apbct->plugin_name, 'cleantalk-spam-protect').'</h2>';
648
 
@@ -913,10 +913,10 @@ function apbct_settings__field__state(){
913
 
914
  print '<h2>'.__('Protection is active', 'cleantalk-spam-protect').'</h2>';
915
 
916
- echo '<img class="apbct_status_icon" src="'.($apbct->settings['registrations_test'] == 1 ? $img : $img_no).'"/>'.__('Registration forms', 'cleantalk-spam-protect');
917
- echo '<img class="apbct_status_icon" src="'.($apbct->settings['comments_test'] == 1 ? $img : $img_no).'"/>'.__('Comments forms', 'cleantalk-spam-protect');
918
- echo '<img class="apbct_status_icon" src="'.($apbct->settings['contact_forms_test'] == 1 ? $img : $img_no).'"/>'.__('Contact forms', 'cleantalk-spam-protect');
919
- echo '<img class="apbct_status_icon" src="'.($apbct->settings['general_contact_forms_test'] == 1 ? $img : $img_no).'"/>'.__('Custom contact forms', 'cleantalk-spam-protect');
920
  if(!$apbct->white_label || is_main_site())
921
  echo '<img class="apbct_status_icon" src="'.($apbct->data['moderate'] == 1 ? $img : $img_no).'"/>'
922
  .'<a style="color: black" href="https://blog.cleantalk.org/real-time-email-address-existence-validation/">'.__('Validate email for existence', 'cleantalk-spam-protect').'</a>';
@@ -928,10 +928,9 @@ function apbct_settings__field__state(){
928
 
929
  // WooCommerce
930
  if(class_exists('WooCommerce'))
931
- echo '<img class="apbct_status_icon" src="'.($apbct->settings['wc_checkout_test'] == 1 ? $img : $img_no).'"/>'.__('WooCommerce checkout form', 'cleantalk-spam-protect');
932
-
933
- if($apbct->moderate_ip)
934
- print "<br /><br />The anti-spam service is paid by your hosting provider. License #".$apbct->data['ip_license'].".<br />";
935
 
936
  print "</div>";
937
  }
@@ -988,11 +987,13 @@ function apbct_settings__field__apikey(){
988
  }else{
989
 
990
  echo '<br /><br />';
991
-
992
  // Auto get key
993
  if(!$apbct->ip_license){
994
- echo '<button class="cleantalk_link cleantalk_link-manual apbct_setting---get_key_auto" name="submit" type="submit" value="get_key_auto">'
995
  .__('Get Access Key Automatically', 'cleantalk-spam-protect')
 
 
996
  .'</button>';
997
  echo '<input type="hidden" id="ct_admin_timezone" name="ct_admin_timezone" value="null" />';
998
  echo '<br />';
@@ -1131,11 +1132,11 @@ function apbct_settings__field__statistics() {
1131
  . ' name="submit"'
1132
  . ' class="cleantalk_link cleantalk_link-manual"'
1133
  . ' value="ct_send_connection_report"'
1134
- . (!$apbct->settings['send_connection_reports'] ? ' disabled="disabled"' : '')
1135
  . '>'
1136
  .__('Send report', 'cleantalk-spam-protect')
1137
  .'</button>';
1138
- if (!$apbct->settings['send_connection_reports']){
1139
  echo '<br><br>';
1140
  _e('Please, enable "Send connection reports" setting to be able to send reports', 'cleantalk-spam-protect');
1141
  }
@@ -1147,6 +1148,7 @@ function apbct_settings__field__statistics() {
1147
  echo 'Plugin version: ' . APBCT_VERSION;
1148
 
1149
  echo '</div>';
 
1150
  }
1151
  function apbct_get_all_child_domains($except_main_site = false) {
1152
  global $wpdb;
@@ -1198,7 +1200,7 @@ function apbct_settings__field__draw($params = array()){
1198
  $disabled = $params['parent'] && !$value_parent ? ' disabled="disabled"' : ''; // Strait
1199
  $disabled = $params['parent'] && $params['reverse_trigger'] && !$value_parent ? ' disabled="disabled"' : $disabled; // Reverse logic
1200
  $disabled = $params['disabled'] ? ' disabled="disabled"' : $disabled; // Direct disable from params
1201
- $disabled = ! is_main_site() && $apbct->network_settings && ! $apbct->network_settings['allow_custom_settings'] ? ' disabled="disabled"' : $disabled; // Disabled by super admin on sub-sites
1202
 
1203
  $childrens = $params['childrens'] ? 'apbct_setting---' . implode(",apbct_setting---",$params['childrens']) : '';
1204
  $hide = $params['hide'] ? implode(",",$params['hide']) : '';
@@ -1377,7 +1379,7 @@ function apbct_settings__validate($settings) {
1377
  global $apbct;
1378
 
1379
  // If user is not allowed to manage settings. Get settings from the storage
1380
- if( ! is_main_site() && ( ! $apbct->network_settings['allow_custom_settings'] ) ){
1381
  foreach ($apbct->settings as $key => $setting){
1382
  $settings[ $key ] = $setting;
1383
  }
@@ -1403,54 +1405,7 @@ function apbct_settings__validate($settings) {
1403
  $settings['sfw__anti_flood__view_limit'] = floor( intval( $settings['sfw__anti_flood__view_limit'] ) );
1404
  $settings['sfw__anti_flood__view_limit'] = ( $settings['sfw__anti_flood__view_limit'] == 0 ? 20 : $settings['sfw__anti_flood__view_limit'] ); // Default if 0 passed
1405
  $settings['sfw__anti_flood__view_limit'] = ( $settings['sfw__anti_flood__view_limit'] < 5 ? 5 : $settings['sfw__anti_flood__view_limit'] ); //
1406
-
1407
- // Auto getting key
1408
- if (isset($_POST['submit']) && $_POST['submit'] == 'get_key_auto'){
1409
-
1410
- $website = parse_url(get_option('siteurl'), PHP_URL_HOST).parse_url(get_option('siteurl'), PHP_URL_PATH);
1411
- $platform = 'wordpress';
1412
- $user_ip = \Cleantalk\ApbctWP\Helper::ip__get('real', false);
1413
- $timezone = filter_input(INPUT_POST, 'ct_admin_timezone');
1414
- $language = apbct_get_server_variable( 'HTTP_ACCEPT_LANGUAGE' );
1415
- $wpms = APBCT_WPMS && defined('SUBDOMAIN_INSTALL') && !SUBDOMAIN_INSTALL ? true : false;
1416
- $white_label = $apbct->network_settings['white_label'] ? 1 : 0;
1417
- $hoster_api_key = $apbct->network_settings['white_label__hoster_key'] ? $apbct->network_settings['white_label__hoster_key'] : '';
1418
-
1419
- $result = \Cleantalk\ApbctWP\API::method__get_api_key(
1420
- ! is_main_site() && $apbct->white_label ? 'anti-spam-hosting' : 'antispam',
1421
- ct_get_admin_email(),
1422
- $website,
1423
- $platform,
1424
- $timezone,
1425
- $language,
1426
- $user_ip,
1427
- $wpms,
1428
- $white_label,
1429
- $hoster_api_key
1430
- );
1431
-
1432
- if(empty($result['error'])){
1433
-
1434
- if(isset($result['user_token'])){
1435
- $apbct->data['user_token'] = $result['user_token'];
1436
- }
1437
-
1438
- if(!empty($result['auth_key'])){
1439
- $settings['apikey'] = $result['auth_key'];
1440
- }
1441
-
1442
- }else{
1443
- $apbct->error_add(
1444
- 'key_get',
1445
- $result['error']
1446
- . ($apbct->white_label
1447
- ? ' <button name="submit" type="submit" class="cleantalk_link cleantalk_link-manual" value="get_key_auto">'
1448
- : ''
1449
- )
1450
- );
1451
- }
1452
- }
1453
-
1454
  // Validating API key
1455
  $settings['apikey'] = strpos($settings['apikey'], '*') === false ? $settings['apikey'] : $apbct->settings['apikey'];
1456
 
@@ -1460,7 +1415,7 @@ function apbct_settings__validate($settings) {
1460
  $settings['apikey'] = defined( 'CLEANTALK_ACCESS_KEY') ? CLEANTALK_ACCESS_KEY : $settings['apikey'];
1461
  $settings['apikey'] = ! is_main_site() && $apbct->white_label ? $apbct->settings['apikey'] : $settings['apikey'];
1462
  $settings['apikey'] = is_main_site() || $apbct->allow_custom_key || $apbct->white_label ? $settings['apikey'] : $apbct->network_settings['apikey'];
1463
- $settings['apikey'] = is_main_site() || !$settings['white_label'] ? $settings['apikey'] : $apbct->settings['apikey'];
1464
 
1465
  // Sanitize setting values
1466
  foreach ($settings as &$setting ){
@@ -1486,17 +1441,17 @@ function apbct_settings__validate($settings) {
1486
  // WPMS Logic.
1487
  if(APBCT_WPMS && is_main_site()){
1488
  $network_settings = array(
1489
- 'allow_custom_key' => $settings['allow_custom_key'],
1490
- 'allow_custom_settings' => $settings['allow_custom_settings'],
1491
- 'white_label' => $settings['white_label'],
1492
- 'white_label__hoster_key' => $settings['white_label__hoster_key'],
1493
- 'white_label__plugin_name' => $settings['white_label__plugin_name'],
1494
- 'use_settings_template' => $settings['use_settings_template'],
1495
- 'use_settings_template_apply_for_new' => $settings['use_settings_template_apply_for_new'],
1496
- 'use_settings_template_apply_for_current' => $settings['use_settings_template_apply_for_current'],
1497
- 'use_settings_template_apply_for_current_list_sites' => $settings['use_settings_template_apply_for_current_list_sites'],
1498
  );
1499
- unset( $settings['allow_custom_key'], $settings['white_label'], $settings['white_label__hoster_key'], $settings['white_label__plugin_name'] );
1500
  }
1501
 
1502
  // Drop debug data
@@ -1533,8 +1488,8 @@ function apbct_settings__validate($settings) {
1533
  'service_id' => $apbct->data['service_id'],
1534
  );
1535
  $apbct->saveNetworkData();
1536
- if (isset($settings['use_settings_template_apply_for_current_list_sites']) && !empty($settings['use_settings_template_apply_for_current_list_sites'])) {
1537
- apbct_update_blogs_options($settings['use_settings_template_apply_for_current_list_sites'], $settings);
1538
  }
1539
  }
1540
  if(!$apbct->white_label && !is_main_site() && !$apbct->allow_custom_key){
@@ -1543,8 +1498,8 @@ function apbct_settings__validate($settings) {
1543
  }
1544
 
1545
  // Alt sessions table clearing
1546
- if( empty( $settings['set_cookies__sessions'] ) ) {
1547
- if( empty( $settings['store_urls__sessions'] ) ) {
1548
  apbct_alt_sessions__clear();
1549
  } else {
1550
  apbct_alt_sessions__clear( false );
@@ -1580,7 +1535,7 @@ function apbct_settings__sync( $direct_call = false ){
1580
  $apbct->error_delete( 'key_invalid key_get', 'save' );
1581
 
1582
  // SFW actions
1583
- if( $apbct->settings['spam_firewall'] == 1 ){
1584
 
1585
  if( get_option( 'sfw_update_first' ) ) {
1586
  add_option( 'sfw_sync_first', true );
@@ -1625,8 +1580,8 @@ function apbct_settings__sync( $direct_call = false ){
1625
  'service_id' => $apbct->data['service_id'],
1626
  );
1627
  $apbct->saveNetworkData();
1628
- if (isset($settings['use_settings_template_apply_for_current_list_sites']) && !empty($settings['use_settings_template_apply_for_current_list_sites'])) {
1629
- apbct_update_blogs_options($settings['use_settings_template_apply_for_current_list_sites'], $settings);
1630
  }
1631
  }
1632
  if(!$apbct->white_label && !is_main_site() && !$apbct->allow_custom_key){
@@ -1668,6 +1623,90 @@ function apbct_settings__sync( $direct_call = false ){
1668
  die( json_encode( $out ) );
1669
  }
1670
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1671
  function apbct_update_blogs_options ($blog_names = array(), $settings) {
1672
  global $wpdb;
1673
 
@@ -1759,15 +1798,15 @@ function apbct_settings__get__long_description(){
1759
  $setting_id = $_POST['setting_id'] ? $_POST['setting_id'] : '';
1760
 
1761
  $descriptions = array(
1762
- 'white_label' => array(
1763
  'title' => __( 'XSS check', 'cleantalk-spam-protect'),
1764
  'desc' => __( 'Cross-Site Scripting (XSS) — prevents malicious code to be executed/sent to any user. As a result malicious scripts can not get access to the cookie files, session tokens and any other confidential information browsers use and store. Such scripts can even overwrite content of HTML pages. CleanTalk WAF monitors for patterns of these parameters and block them.', 'cleantalk-spam-protect'),
1765
  ),
1766
- 'white_label__hoster_key' => array(
1767
  'title' => __( 'SQL-injection check', 'cleantalk-spam-protect'),
1768
  'desc' => __( 'SQL Injection — one of the most popular ways to hack websites and programs that work with databases. It is based on injection of a custom SQL code into database queries. It could transmit data through GET, POST requests or cookie files in an SQL code. If a website is vulnerable and execute such injections then it would allow attackers to apply changes to the website\'s MySQL database.', 'cleantalk-spam-protect'),
1769
  ),
1770
- 'white_label__plugin_name' => array(
1771
  'title' => __( 'Check uploaded files', 'cleantalk-spam-protect'),
1772
  'desc' => __( 'The option checks each uploaded file to a website for malicious code. If it\'s possible for visitors to upload files to a website, for instance a work resume, then attackers could abuse it and upload an infected file to execute it later and get access to your website.', 'cleantalk-spam-protect'),
1773
  ),
98
  'html_before' => '<hr>',
99
  'html_after' => '',
100
  'fields' => array(
101
+ 'sfw__enabled' => array(
102
  'type' => 'checkbox',
103
  'title' => __('SpamFireWall', 'cleantalk-spam-protect'),
104
  'description' => __("This option allows to filter spam bots before they access website. Also reduces CPU usage on hosting server and accelerates pages load time.", 'cleantalk-spam-protect'),
108
  'type' => 'checkbox',
109
  'title' => __('Anti-Crawler', 'cleantalk-spam-protect') . $additional_ac_title,
110
  'class' => 'apbct_settings-field_wrapper--sub',
111
+ 'parent' => 'sfw__enabled',
112
  'description' => __('Plugin shows SpamFireWall stop page for any bot, except allowed bots (Google, Yahoo and etc).', 'cleantalk-spam-protect')
113
  . '<br>'
114
  . __( 'Anti-Crawler includes blocking bots by the User-Agent. Use Personal lists in the Dashboard to filter specific User-Agents.', 'cleantalk-spam-protect' ),
130
  .'<div id="apbct_settings__davanced_settings" style="display: none;">',
131
  'html_after' => '',
132
  'fields' => array(
133
+ 'forms__registrations_test' => array(
134
  'title' => __('Registration Forms', 'cleantalk-spam-protect'),
135
  'description' => __('WordPress, BuddyPress, bbPress, S2Member, WooCommerce.', 'cleantalk-spam-protect'),
136
  ),
137
+ 'forms__comments_test' => array(
138
  'title' => __('Comments form', 'cleantalk-spam-protect'),
139
  'description' => __('WordPress, JetPack, WooCommerce.', 'cleantalk-spam-protect'),
140
  ),
141
+ 'forms__contact_forms_test' => array(
142
  'title' => __('Contact forms', 'cleantalk-spam-protect'),
143
  'description' => __('Contact Form 7, Formidable forms, JetPack, Fast Secure Contact Form, WordPress Landing Pages, Gravity Forms.', 'cleantalk-spam-protect'),
144
  ),
145
+ 'forms__general_contact_forms_test' => array(
146
  'title' => __('Custom contact forms', 'cleantalk-spam-protect'),
147
  'description' => __('Anti spam test for any WordPress themes or contacts forms.', 'cleantalk-spam-protect'),
148
  ),
149
+ 'forms__search_test' => array(
150
  'title' => __('Test default Wordpress search form for spam', 'cleantalk-spam-protect'),
151
  'description' => __('Spam protection for Search form.', 'cleantalk-spam-protect')
152
  . (!$apbct->white_label || is_main_site()
157
  : ''
158
  )
159
  ),
160
+ 'forms__check_external' => array(
161
  'title' => __('Protect external forms', 'cleantalk-spam-protect'),
162
  'description' => __('Turn this option on to protect forms on your WordPress that send data to third-part servers (like MailChimp).', 'cleantalk-spam-protect'),
163
+ 'childrens' => array('forms__check_external__capture_buffer'),
164
  ),
165
+ 'forms__check_external__capture_buffer' => array(
166
  'title' => __('Capture buffer', 'cleantalk-spam-protect'),
167
  'description' => __('This setting gives you more sophisticated and strengthened protection for external forms. But it could break plugins which use a buffer like Ninja Forms.', 'cleantalk-spam-protect'),
168
  'class' => 'apbct_settings-field_wrapper--sub',
169
+ 'parent' => 'forms__check_external',
170
  ),
171
+ 'forms__check_internal' => array(
172
  'title' => __('Protect internal forms', 'cleantalk-spam-protect'),
173
  'description' => __('This option will enable protection for custom (hand-made) AJAX forms with PHP scripts handlers on your WordPress.', 'cleantalk-spam-protect'),
174
  ),
179
  'wc' => array(
180
  'title' => __('WooCommerce', 'cleantalk-spam-protect'),
181
  'fields' => array(
182
+ 'forms__wc_checkout_test' => array(
183
  'title' => __('WooCommerce checkout form', 'cleantalk-spam-protect'),
184
  'description' => __('Anti spam test for WooCommerce checkout form.', 'cleantalk-spam-protect'),
185
+ 'childrens' => array('forms__wc_register_from_order')
186
  ),
187
+ 'forms__wc_register_from_order' => array(
188
  'title' => __('Spam test for registration during checkout', 'cleantalk-spam-protect'),
189
  'description' => __('Enable anti spam test for registration process which during woocommerce\'s checkout.', 'cleantalk-spam-protect'),
190
+ 'parent' => 'forms__wc_checkout_test',
191
  'class' => 'apbct_settings-field_wrapper--sub',
192
  'reverse_trigger' => true
193
  ),
198
  'comments_and_messages' => array(
199
  'title' => __('Comments and Messages', 'cleantalk-spam-protect'),
200
  'fields' => array(
201
+ 'comments__disable_comments__all' => array(
202
  'title' => __( 'Disable all comments', 'cleantalk-spam-protect'),
203
  'description' => __( 'Disabling comments for all types of content.', 'cleantalk-spam-protect'),
204
  'childrens' => array(
205
+ 'comments__disable_comments__posts',
206
+ 'comments__disable_comments__pages',
207
+ 'comments__disable_comments__media',
208
  ),
209
  'options' => array(
210
  array( 'val' => 1, 'label' => __( 'On' ), 'childrens_enable' => 0, ),
211
  array( 'val' => 0, 'label' => __( 'Off' ), 'childrens_enable' => 1, ),
212
  ),
213
  ),
214
+ 'comments__disable_comments__posts' => array(
215
  'title' => __( 'Disable comments for all posts', 'cleantalk-spam-protect'),
216
  'class' => 'apbct_settings-field_wrapper--sub',
217
+ 'parent' => 'comments__disable_comments__all',
218
  'reverse_trigger' => true,
219
  ),
220
+ 'comments__disable_comments__pages' => array(
221
  'title' => __( 'Disable comments for all pages', 'cleantalk-spam-protect'),
222
  'class' => 'apbct_settings-field_wrapper--sub',
223
+ 'parent' => 'comments__disable_comments__all',
224
  'reverse_trigger' => true,
225
  ),
226
+ 'comments__disable_comments__media' => array(
227
  'title' => __( 'Disable comments for all media', 'cleantalk-spam-protect'),
228
  'class' => 'apbct_settings-field_wrapper--sub',
229
+ 'parent' => 'comments__disable_comments__all',
230
  'reverse_trigger' => true,
231
  ),
232
+ 'comments__bp_private_messages' => array(
233
  'title' => __('BuddyPress Private Messages', 'cleantalk-spam-protect'),
234
  'description' => __('Check buddyPress private messages.', 'cleantalk-spam-protect'),
235
  ),
236
+ 'comments__remove_old_spam' => array(
237
  'title' => __('Automatically delete spam comments', 'cleantalk-spam-protect'),
238
  'description' => sprintf(__('Delete spam comments older than %d days.', 'cleantalk-spam-protect'), $apbct->data['spam_store_days']),
239
  ),
240
+ 'comments__remove_comments_links' => array(
241
  'title' => __('Remove links from approved comments', 'cleantalk-spam-protect'),
242
  'description' => __('Remove links from approved comments. Replace it with "[Link deleted]"', 'cleantalk-spam-protect'),
243
  ),
244
+ 'comments__show_check_links' => array(
245
  'title' => __('Show links to check Emails, IPs for spam', 'cleantalk-spam-protect'),
246
  'description' => __('Shows little icon near IP addresses and Emails allowing you to check it via CleanTalk\'s database.', 'cleantalk-spam-protect'),
247
  'display' => !$apbct->white_label,
248
  ),
249
+ 'comments__manage_comments_on_public_page' => array(
250
  'title' => __('Manage comments on public pages', 'cleantalk-spam-protect'),
251
  'description' => __('Allows administrators to manage comments on public post\'s pages with small interactive menu.', 'cleantalk-spam-protect'),
252
  'display' => !$apbct->white_label,
258
  'data_processing' => array(
259
  'title' => __('Data Processing', 'cleantalk-spam-protect'),
260
  'fields' => array(
261
+ 'data__protect_logged_in' => array(
262
  'title' => __("Protect logged in Users", 'cleantalk-spam-protect'),
263
  'description' => __('Turn this option on to check for spam any submissions (comments, contact forms and etc.) from registered Users.', 'cleantalk-spam-protect'),
264
  ),
265
+ 'comments__check_comments_number' => array(
266
  'title' => __("Don't check trusted user's comments", 'cleantalk-spam-protect'),
267
  'description' => sprintf(__("Don't check comments for users with above %d comments.", 'cleantalk-spam-protect'), defined('CLEANTALK_CHECK_COMMENTS_NUMBER') ? CLEANTALK_CHECK_COMMENTS_NUMBER : 3),
268
  ),
269
+ 'data__use_ajax' => array(
270
  'title' => __('Use AJAX for JavaScript check', 'cleantalk-spam-protect'),
271
  'description' => __('Options helps protect WordPress against spam with any caching plugins. Turn this option on to avoid issues with caching plugins. Turn off this option and SpamFireWall to be compatible with Accelerated mobile pages (AMP).', 'cleantalk-spam-protect'),
272
  ),
273
+ 'data__use_static_js_key' => array(
274
  'title' => __('Use static keys for JS check.', 'cleantalk-spam-protect'),
275
  'description' => __('Could help if you have cache for AJAX requests and you are dealing with false positives. Slightly decreases protection quality. Auto - Static key will be used if caching plugin is spotted.', 'cleantalk-spam-protect'),
276
  'options' => array(
279
  array('val' => -1, 'label' => __('Auto'),),
280
  ),
281
  ),
282
+ 'data__general_postdata_test' => array(
283
  'title' => __('Check all post data', 'cleantalk-spam-protect'),
284
  'description' => __('Check all POST submissions from website visitors. Enable this option if you have spam misses on website.', 'cleantalk-spam-protect')
285
  .(!$apbct->white_label
288
  )
289
  .'<br />' . __('СAUTION! Option can catch POST requests in WordPress backend', 'cleantalk-spam-protect'),
290
  ),
291
+ 'data__set_cookies' => array(
292
  'title' => __("Set cookies", 'cleantalk-spam-protect'),
293
  'description' => __('Turn this option off to deny plugin generates any cookies on website front-end. This option is helpful if you use Varnish. But most of contact forms will not be protected if the option is turned off! <b>Warning: We strongly recommend you to enable this otherwise it could cause false positives spam detection.</b>', 'cleantalk-spam-protect'),
294
+ 'childrens' => array('data__set_cookies__sessions'),
295
  ),
296
+ 'data__set_cookies__sessions' => array(
297
  'title' => __('Use alternative mechanism for cookies', 'cleantalk-spam-protect'),
298
  'description' => __('Doesn\'t use cookie or PHP sessions. Collect data for all types of bots.', 'cleantalk-spam-protect'),
299
+ 'parent' => 'data__set_cookies',
300
  'class' => 'apbct_settings-field_wrapper--sub',
301
  ),
302
+ 'data__ssl_on' => array(
303
  'title' => __("Use SSL", 'cleantalk-spam-protect'),
304
  'description' => __('Turn this option on to use encrypted (SSL) connection with servers.', 'cleantalk-spam-protect'),
305
  ),
306
+ 'wp__use_builtin_http_api' => array(
307
  'title' => __("Use Wordpress HTTP API", 'cleantalk-spam-protect'),
308
  'description' => __('Alternative way to connect the Cloud. Use this if you have connection problems.', 'cleantalk-spam-protect'),
309
  ),
310
  'sfw__use_delete_to_clear_table' => array(
311
  'title' => __("Use DELETE SQL-command instead TRUNCATE to clear tables", 'cleantalk-spam-protect'),
312
  'description' => __('Could help if you have blocked SpamFireWall tables in your database.', 'cleantalk-spam-protect'),
313
+ 'parent' => 'sfw__enabled',
314
  ),
315
  ),
316
  ),
355
  'html_before' => '',
356
  'html_after' => '',
357
  'fields' => array(
358
+ 'admin_bar__show' => array(
359
  'title' => __('Show statistics in admin bar', 'cleantalk-spam-protect'),
360
  'description' => __('Show/hide icon in top level menu in WordPress backend. The number of submissions is being counted for past 24 hours.', 'cleantalk-spam-protect'),
361
+ 'childrens' => array('admin_bar__all_time_counter','admin_bar__daily_counter','admin_bar__sfw_counter'),
362
  ),
363
+ 'admin_bar__all_time_counter' => array(
364
  'title' => __('Show All-time counter', 'cleantalk-spam-protect'),
365
  'description' => __('Display all-time requests counter in the admin bar. Counter displays number of requests since plugin installation.', 'cleantalk-spam-protect'),
366
+ 'parent' => 'admin_bar__show',
367
  'class' => 'apbct_settings-field_wrapper--sub',
368
  ),
369
+ 'admin_bar__daily_counter' => array(
370
  'title' => __('Show 24 hours counter', 'cleantalk-spam-protect'),
371
  'description' => __('Display daily requests counter in the admin bar. Counter displays number of requests of the past 24 hours.', 'cleantalk-spam-protect'),
372
+ 'parent' => 'admin_bar__show',
373
  'class' => 'apbct_settings-field_wrapper--sub',
374
  ),
375
+ 'admin_bar__sfw_counter' => array(
376
  'title' => __('SpamFireWall counter', 'cleantalk-spam-protect'),
377
  'description' => __('Display SpamFireWall requests in the admin bar. Counter displays number of requests since plugin installation.', 'cleantalk-spam-protect'),
378
+ 'parent' => 'admin_bar__show',
379
  'class' => 'apbct_settings-field_wrapper--sub',
380
  ),
381
  ),
385
  'misc' => array(
386
  'html_after' => '</div><br>',
387
  'fields' => array(
388
+ 'misc__collect_details' => array(
389
  'type' => 'checkbox',
390
  'title' => __('Collect details about browsers', 'cleantalk-spam-protect'),
391
  'description' => __("Checking this box you allow plugin store information about screen size and browser plugins of website visitors. The option in a beta state.", 'cleantalk-spam-protect'),
392
  ),
393
+ 'misc__send_connection_reports' => array(
394
  'type' => 'checkbox',
395
  'title' => __('Send connection reports', 'cleantalk-spam-protect'),
396
  'description' => __("Checking this box you allow plugin to send the information about your connection. The option in a beta state.", 'cleantalk-spam-protect'),
397
  ),
398
+ 'misc__async_js' => array(
399
  'type' => 'checkbox',
400
  'title' => __('Async JavaScript loading', 'cleantalk-spam-protect'),
401
  'description' => __('Use async loading for scripts. Warning: This could reduce filtration quality.', 'cleantalk-spam-protect'),
402
  ),
403
+ 'gdpr__enabled' => array(
404
  'type' => 'checkbox',
405
  'title' => __('Allow to add GDPR notice via shortcode', 'cleantalk-spam-protect'),
406
  'description' => __(' Adds small checkbox under your website form. To add it you should use the shortcode on the form\'s page: [cleantalk_gdpr_form id="FORM_ID"]', 'cleantalk-spam-protect'),
407
+ 'childrens' => array('gdpr__text'),
408
  ),
409
+ 'gdpr__text' => array(
410
  'type' => 'text',
411
  'title' => __('GDPR text notice', 'cleantalk-spam-protect'),
412
  'description' => __('This text will be added as a description to the GDPR checkbox.', 'cleantalk-spam-protect'),
413
+ 'parent' => 'gdpr__enabled',
414
  'class' => 'apbct_settings-field_wrapper--sub',
415
  ),
416
+ 'misc__store_urls' => array(
417
  'type' => 'checkbox',
418
  'title' => __('Store visited URLs', 'cleantalk-spam-protect'),
419
  'description' => __("Plugin stores last 10 visited URLs (HTTP REFFERERS) before visitor submits form on the site. You can see stored visited URLS for each visitor in your Dashboard. Turn the option on to improve Anti-Spam protection.", 'cleantalk-spam-protect'),
420
+ 'childrens' => array('misc__store_urls__sessions'),
421
  ),
422
+ 'misc__store_urls__sessions' => array(
423
  'type' => 'checkbox',
424
  'title' => __('Use cookies less sessions', 'cleantalk-spam-protect'),
425
  'description' => __('Doesn\'t use cookie or PHP sessions. Collect data for all types of bots.', 'cleantalk-spam-protect'),
426
+ 'parent' => 'misc__store_urls',
427
  'class' => 'apbct_settings-field_wrapper--sub',
428
  ),
429
+ 'wp__comment_notify' => array(
430
  'type' => 'checkbox',
431
  'title' => __('Notify users with selected roles about new approved comments. Hold CTRL to select multiple roles.', 'cleantalk-spam-protect'),
432
  'description' => sprintf(__("If enabled, overrides similar Wordpress %sdiscussion settings%s.", 'cleantalk-spam-protect'), '<a href="options-discussion.php">','</a>'),
433
+ 'childrens' => array('wp__comment_notify__roles'),
434
  ),
435
+ 'wp__comment_notify__roles' => array(
436
  'type' => 'select',
437
  'multiple' => true,
438
+ 'parent' => 'wp__comment_notify',
439
  'options_callback' => 'apbct_get_all_roles',
440
  'options_callback_params' => array(true),
441
  'class' => 'apbct_settings-field_wrapper--sub',
444
  'type' => 'checkbox',
445
  'title' => __('Anti-Flood', 'cleantalk-spam-protect'),
446
  'class' => 'apbct_settings-field_wrapper',
447
+ 'parent' => 'sfw__enabled',
448
  'childrens' => array('sfw__anti_flood__view_limit',),
449
  'description' => __('Shows the SpamFireWall page for bots trying to crawl your site. Look at the page limit setting below.', 'cleantalk-spam-protect'),
450
  ),
455
  'parent' => 'sfw__anti_flood',
456
  'description' => __('Count of page view per 1 minute before plugin shows SpamFireWall page. SpamFireWall page active for 30 second after that valid visitor (with JavaScript) passes the page to the demanded page of the site.', 'cleantalk-spam-protect'),
457
  ),
458
+ 'wp__dashboard_widget__show' => array(
459
  'type' => 'checkbox',
460
  'title' => __('Show Dashboard Widget', 'cleantalk-spam-protect'),
461
  ),
462
+ 'misc__complete_deactivation' => array(
463
  'type' => 'checkbox',
464
  'title' => __('Complete deactivation', 'cleantalk-spam-protect'),
465
  'description' => __('Leave no trace in the system after deactivation.', 'cleantalk-spam-protect'),
477
  $additional_fields = array(
478
  'main' => array(
479
  'fields' => array(
480
+ 'multisite__white_label' => array(
481
  'type' => 'checkbox',
482
  'title' => __('Enable White Label Mode', 'cleantalk-spam-protect'),
483
  'description' => sprintf(__("Learn more information %shere%s.", 'cleantalk-spam-protect'), '<a target="_blank" href="https://cleantalk.org/ru/help/hosting-white-label">', '</a>'),
484
+ 'childrens' => array( 'multisite__white_label__hoster_key', 'multisite__white_label__plugin_name', 'multisite__allow_custom_key', ),
485
  'disabled' => defined('CLEANTALK_ACCESS_KEY'),
486
  'network' => true,
487
  ),
488
+ 'multisite__white_label__hoster_key' => array(
489
  'title' => __('Hoster API Key', 'cleantalk-spam-protect'),
490
  'description' => sprintf(__("You can get it in %sCleantalk's Control Panel%s", 'cleantalk-spam-protect'), '<a target="_blank" href="https://cleantalk.org/my/profile">', '</a>'),
491
  'type' => 'text',
492
+ 'parent' => 'multisite__white_label',
493
  'class' => 'apbct_settings-field_wrapper--sub',
494
  'network' => true,
495
  'required' => true,
496
  ),
497
+ 'multisite__white_label__plugin_name' => array(
498
  'title' => __('Plugin name', 'cleantalk-spam-protect'),
499
  'description' => sprintf(__("Specify plugin name. Leave empty for deafult %sAntispam by Cleantalk%s", 'cleantalk-spam-protect'), '<b>', '</b>'),
500
  'type' => 'text',
501
+ 'parent' => 'multisite__white_label',
502
  'class' => 'apbct_settings-field_wrapper--sub',
503
  'network' => true,
504
  'required' => true,
505
  ),
506
+ 'multisite__allow_custom_key' => array(
507
  'type' => 'checkbox',
508
  'title' => __('Allow users to use other key', 'cleantalk-spam-protect'),
509
  'description' => __('Allow users to use different Access key in their plugin settings on child blogs. They could use different CleanTalk account.', 'cleantalk-spam-protect')
516
  : ''
517
  ),
518
  'display' => APBCT_WPMS && is_main_site(),
519
+ 'disabled' => $apbct->network_settings['multisite__white_label'],
520
  'network' => true,
521
  ),
522
+ 'multisite__allow_custom_settings' => array(
523
  'type' => 'checkbox',
524
  'title' => __('Allow users to manage plugin settings', 'cleantalk-spam-protect'),
525
  'description' => __('Allow to change settings on child sites.', 'cleantalk-spam-protect'),
526
  'display' => APBCT_WPMS && is_main_site(),
527
  'network' => true,
528
  ),
529
+ 'multisite__use_settings_template' => array(
530
  'type' => 'checkbox',
531
  'title' => __('Use settings template', 'cleantalk-spam-protect'),
532
  'description' => __("Use the current settings template for child sites.", 'cleantalk-spam-protect'),
533
+ 'childrens' => array( 'multisite__use_settings_template_apply_for_new', 'multisite__use_settings_template_apply_for_current'),
534
  'network' => true,
535
  ),
536
+ 'multisite__use_settings_template_apply_for_new' => array(
537
  'type' => 'checkbox',
538
  'title' => __('Apply for newly added sites.', 'cleantalk-spam-protect'),
539
  'description' => __("The newly added site will have the same preset settings template.", 'cleantalk-spam-protect'),
540
+ 'parent' => 'multisite__use_settings_template',
541
  'class' => 'apbct_settings-field_wrapper--sub',
542
  'network' => true,
543
  ),
544
+ 'multisite__use_settings_template_apply_for_current' => array(
545
  'type' => 'checkbox',
546
  'title' => __('Apply for current sites.', 'cleantalk-spam-protect'),
547
  'description' => __("Apply current settings template for selected sites.", 'cleantalk-spam-protect'),
548
+ 'parent' => 'multisite__use_settings_template',
549
+ 'childrens' => array( 'multisite__use_settings_template_apply_for_current_list_sites'),
550
  'class' => 'apbct_settings-field_wrapper--sub',
551
  'network' => true,
552
  ),
553
+ 'multisite__use_settings_template_apply_for_current_list_sites' => array(
554
  'type' => 'select',
555
  'multiple' => true,
556
  'options_callback' => 'apbct_get_all_child_domains',
557
  'options_callback_params' => array(true),
558
  'class' => 'apbct_settings-field_wrapper--sub',
559
+ 'parent' => 'multisite__use_settings_template_apply_for_current',
560
  'description' => __('Sites to apply settings. Hold CTRL to select multiple sites.', 'cleantalk-spam-protect'),
561
  'network' => true,
562
  ),
642
  function apbct_settings__display() {
643
 
644
  global $apbct;
645
+
646
  // Title
647
  echo '<h2 class="apbct_settings-title">'.__($apbct->plugin_name, 'cleantalk-spam-protect').'</h2>';
648
 
913
 
914
  print '<h2>'.__('Protection is active', 'cleantalk-spam-protect').'</h2>';
915
 
916
+ echo '<img class="apbct_status_icon" src="'.($apbct->settings['forms__registrations_test'] == 1 ? $img : $img_no).'"/>'.__('Registration forms', 'cleantalk-spam-protect');
917
+ echo '<img class="apbct_status_icon" src="'.($apbct->settings['forms__comments_test'] == 1 ? $img : $img_no).'"/>'.__('Comments forms', 'cleantalk-spam-protect');
918
+ echo '<img class="apbct_status_icon" src="'.($apbct->settings['forms__contact_forms_test'] == 1 ? $img : $img_no).'"/>'.__('Contact forms', 'cleantalk-spam-protect');
919
+ echo '<img class="apbct_status_icon" src="'.($apbct->settings['forms__general_contact_forms_test'] == 1 ? $img : $img_no).'"/>'.__('Custom contact forms', 'cleantalk-spam-protect');
920
  if(!$apbct->white_label || is_main_site())
921
  echo '<img class="apbct_status_icon" src="'.($apbct->data['moderate'] == 1 ? $img : $img_no).'"/>'
922
  .'<a style="color: black" href="https://blog.cleantalk.org/real-time-email-address-existence-validation/">'.__('Validate email for existence', 'cleantalk-spam-protect').'</a>';
928
 
929
  // WooCommerce
930
  if(class_exists('WooCommerce'))
931
+ echo '<img class="apbct_status_icon" src="'.($apbct->settings['forms__wc_checkout_test'] == 1 ? $img : $img_no).'"/>'.__('WooCommerce checkout form', 'cleantalk-spam-protect');
932
+ if($apbct->moderate_ip)
933
+ print "<br /><br />The anti-spam service is paid by your hosting provider. License #".$apbct->data['ip_license'].".<br />";
 
934
 
935
  print "</div>";
936
  }
987
  }else{
988
 
989
  echo '<br /><br />';
990
+
991
  // Auto get key
992
  if(!$apbct->ip_license){
993
+ echo '<button class="cleantalk_link cleantalk_link-manual apbct_setting---get_key_auto" id="apbct_button__get_key_auto" name="submit" type="button" value="get_key_auto">'
994
  .__('Get Access Key Automatically', 'cleantalk-spam-protect')
995
+ . '<img style="margin-left: 10px;" class="apbct_preloader_button" src="' . APBCT_URL_PATH . '/inc/images/preloader2.gif" />'
996
+ . '<img style="margin-left: 10px;" class="apbct_success --hide" src="' . APBCT_URL_PATH . '/inc/images/yes.png" />'
997
  .'</button>';
998
  echo '<input type="hidden" id="ct_admin_timezone" name="ct_admin_timezone" value="null" />';
999
  echo '<br />';
1132
  . ' name="submit"'
1133
  . ' class="cleantalk_link cleantalk_link-manual"'
1134
  . ' value="ct_send_connection_report"'
1135
+ . (!$apbct->settings['misc__send_connection_reports'] ? ' disabled="disabled"' : '')
1136
  . '>'
1137
  .__('Send report', 'cleantalk-spam-protect')
1138
  .'</button>';
1139
+ if (!$apbct->settings['misc__send_connection_reports']){
1140
  echo '<br><br>';
1141
  _e('Please, enable "Send connection reports" setting to be able to send reports', 'cleantalk-spam-protect');
1142
  }
1148
  echo 'Plugin version: ' . APBCT_VERSION;
1149
 
1150
  echo '</div>';
1151
+
1152
  }
1153
  function apbct_get_all_child_domains($except_main_site = false) {
1154
  global $wpdb;
1200
  $disabled = $params['parent'] && !$value_parent ? ' disabled="disabled"' : ''; // Strait
1201
  $disabled = $params['parent'] && $params['reverse_trigger'] && !$value_parent ? ' disabled="disabled"' : $disabled; // Reverse logic
1202
  $disabled = $params['disabled'] ? ' disabled="disabled"' : $disabled; // Direct disable from params
1203
+ $disabled = ! is_main_site() && $apbct->network_settings && ! $apbct->network_settings['multisite__allow_custom_settings'] ? ' disabled="disabled"' : $disabled; // Disabled by super admin on sub-sites
1204
 
1205
  $childrens = $params['childrens'] ? 'apbct_setting---' . implode(",apbct_setting---",$params['childrens']) : '';
1206
  $hide = $params['hide'] ? implode(",",$params['hide']) : '';
1379
  global $apbct;
1380
 
1381
  // If user is not allowed to manage settings. Get settings from the storage
1382
+ if( ! is_main_site() && ( ! $apbct->network_settings['multisite__allow_custom_settings'] ) ){
1383
  foreach ($apbct->settings as $key => $setting){
1384
  $settings[ $key ] = $setting;
1385
  }
1405
  $settings['sfw__anti_flood__view_limit'] = floor( intval( $settings['sfw__anti_flood__view_limit'] ) );
1406
  $settings['sfw__anti_flood__view_limit'] = ( $settings['sfw__anti_flood__view_limit'] == 0 ? 20 : $settings['sfw__anti_flood__view_limit'] ); // Default if 0 passed
1407
  $settings['sfw__anti_flood__view_limit'] = ( $settings['sfw__anti_flood__view_limit'] < 5 ? 5 : $settings['sfw__anti_flood__view_limit'] ); //
1408
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1409
  // Validating API key
1410
  $settings['apikey'] = strpos($settings['apikey'], '*') === false ? $settings['apikey'] : $apbct->settings['apikey'];
1411
 
1415
  $settings['apikey'] = defined( 'CLEANTALK_ACCESS_KEY') ? CLEANTALK_ACCESS_KEY : $settings['apikey'];
1416
  $settings['apikey'] = ! is_main_site() && $apbct->white_label ? $apbct->settings['apikey'] : $settings['apikey'];
1417
  $settings['apikey'] = is_main_site() || $apbct->allow_custom_key || $apbct->white_label ? $settings['apikey'] : $apbct->network_settings['apikey'];
1418
+ $settings['apikey'] = is_main_site() || !$settings['multisite__white_label'] ? $settings['apikey'] : $apbct->settings['apikey'];
1419
 
1420
  // Sanitize setting values
1421
  foreach ($settings as &$setting ){
1441
  // WPMS Logic.
1442
  if(APBCT_WPMS && is_main_site()){
1443
  $network_settings = array(
1444
+ 'multisite__allow_custom_key' => $settings['multisite__allow_custom_key'],
1445
+ 'multisite__allow_custom_settings' => $settings['multisite__allow_custom_settings'],
1446
+ 'multisite__white_label' => $settings['multisite__white_label'],
1447
+ 'multisite__white_label__hoster_key' => $settings['multisite__white_label__hoster_key'],
1448
+ 'multisite__white_label__plugin_name' => $settings['multisite__white_label__plugin_name'],
1449
+ 'multisite__use_settings_template' => $settings['multisite__use_settings_template'],
1450
+ 'multisite__use_settings_template_apply_for_new' => $settings['multisite__use_settings_template_apply_for_new'],
1451
+ 'multisite__use_settings_template_apply_for_current' => $settings['multisite__use_settings_template_apply_for_current'],
1452
+ 'multisite__use_settings_template_apply_for_current_list_sites' => $settings['multisite__use_settings_template_apply_for_current_list_sites'],
1453
  );
1454
+ unset( $settings['multisite__allow_custom_key'], $settings['multisite__white_label'], $settings['multisite__white_label__hoster_key'], $settings['multisite__white_label__plugin_name'] );
1455
  }
1456
 
1457
  // Drop debug data
1488
  'service_id' => $apbct->data['service_id'],
1489
  );
1490
  $apbct->saveNetworkData();
1491
+ if (isset($settings['multisite__use_settings_template_apply_for_current_list_sites']) && !empty($settings['multisite__use_settings_template_apply_for_current_list_sites'])) {
1492
+ apbct_update_blogs_options($settings['multisite__use_settings_template_apply_for_current_list_sites'], $settings);
1493
  }
1494
  }
1495
  if(!$apbct->white_label && !is_main_site() && !$apbct->allow_custom_key){
1498
  }
1499
 
1500
  // Alt sessions table clearing
1501
+ if( empty( $settings['data__set_cookies__sessions'] ) ) {
1502
+ if( empty( $settings['misc__store_urls__sessions'] ) ) {
1503
  apbct_alt_sessions__clear();
1504
  } else {
1505
  apbct_alt_sessions__clear( false );
1535
  $apbct->error_delete( 'key_invalid key_get', 'save' );
1536
 
1537
  // SFW actions
1538
+ if( $apbct->settings['sfw__enabled'] == 1 ){
1539
 
1540
  if( get_option( 'sfw_update_first' ) ) {
1541
  add_option( 'sfw_sync_first', true );
1580
  'service_id' => $apbct->data['service_id'],
1581
  );
1582
  $apbct->saveNetworkData();
1583
+ if (isset($settings['multisite__use_settings_template_apply_for_current_list_sites']) && !empty($settings['multisite__use_settings_template_apply_for_current_list_sites'])) {
1584
+ apbct_update_blogs_options($settings['multisite__use_settings_template_apply_for_current_list_sites'], $settings);
1585
  }
1586
  }
1587
  if(!$apbct->white_label && !is_main_site() && !$apbct->allow_custom_key){
1623
  die( json_encode( $out ) );
1624
  }
1625
 
1626
+ function apbct_settings__get_key_auto( $direct_call = false ) {
1627
+
1628
+ if( ! $direct_call )
1629
+ check_ajax_referer('ct_secret_nonce' );
1630
+
1631
+ global $apbct;
1632
+
1633
+ $website = parse_url(get_option('siteurl'), PHP_URL_HOST).parse_url(get_option('siteurl'), PHP_URL_PATH);
1634
+ $platform = 'wordpress';
1635
+ $user_ip = \Cleantalk\ApbctWP\Helper::ip__get(array('real'), false);
1636
+ $timezone = filter_input(INPUT_POST, 'ct_admin_timezone');
1637
+ $language = apbct_get_server_variable( 'HTTP_ACCEPT_LANGUAGE' );
1638
+ $wpms = APBCT_WPMS && defined('SUBDOMAIN_INSTALL') && !SUBDOMAIN_INSTALL ? true : false;
1639
+ $white_label = $apbct->network_settings['multisite__white_label'] ? 1 : 0;
1640
+ $hoster_api_key = $apbct->network_settings['multisite__white_label__hoster_key'] ? $apbct->network_settings['multisite__white_label__hoster_key'] : '';
1641
+
1642
+ $result = \Cleantalk\ApbctWP\API::method__get_api_key(
1643
+ ! is_main_site() && $apbct->white_label ? 'anti-spam-hosting' : 'antispam',
1644
+ ct_get_admin_email(),
1645
+ $website,
1646
+ $platform,
1647
+ $timezone,
1648
+ $language,
1649
+ $user_ip,
1650
+ $wpms,
1651
+ $white_label,
1652
+ $hoster_api_key
1653
+ );
1654
+
1655
+ if(empty($result['error'])){
1656
+
1657
+ if(isset($result['user_token'])){
1658
+ $apbct->data['user_token'] = $result['user_token'];
1659
+ }
1660
+
1661
+ if(!empty($result['auth_key'])){
1662
+ // @ToDo we have to sanitize only api key. Not need to sanitize every settings here.
1663
+ $settings = apbct_settings__validate(array(
1664
+ 'apikey' => $result['auth_key'],
1665
+ ));
1666
+ $apbct->settings['apikey'] = $settings['apikey'];
1667
+ }
1668
+
1669
+ $templates = \Cleantalk\ApbctWP\CleantalkSettingsTemplates::get_options_template( $result['auth_key'] );
1670
+
1671
+ if( ! empty( $templates ) ) {
1672
+ $templatesObj = new \Cleantalk\ApbctWP\CleantalkSettingsTemplates( $result['auth_key'] );
1673
+ $out = array(
1674
+ 'success' => true,
1675
+ 'getTemplates' => $templatesObj->getHtmlContent( true ),
1676
+ );
1677
+ } else {
1678
+ $out = array(
1679
+ 'success' => true,
1680
+ 'reload' => true,
1681
+ );
1682
+ }
1683
+
1684
+ }else{
1685
+ $apbct->error_add(
1686
+ 'key_get',
1687
+ $result['error']
1688
+ . ($apbct->white_label
1689
+ ? ' <button name="submit" type="button" id="apbct_button__get_key_auto" class="cleantalk_link cleantalk_link-manual" value="get_key_auto">'
1690
+ : ''
1691
+ )
1692
+ );
1693
+ $apbct->saveErrors();
1694
+ $out = array(
1695
+ 'success' => true,
1696
+ 'reload' => false,
1697
+ );
1698
+ }
1699
+
1700
+ $apbct->saveSettings();
1701
+ $apbct->saveData();
1702
+
1703
+ if( $direct_call ) {
1704
+ return $result;
1705
+ } else {
1706
+ die( json_encode( $out ) );
1707
+ }
1708
+ }
1709
+
1710
  function apbct_update_blogs_options ($blog_names = array(), $settings) {
1711
  global $wpdb;
1712
 
1798
  $setting_id = $_POST['setting_id'] ? $_POST['setting_id'] : '';
1799
 
1800
  $descriptions = array(
1801
+ 'multisite__white_label' => array(
1802
  'title' => __( 'XSS check', 'cleantalk-spam-protect'),
1803
  'desc' => __( 'Cross-Site Scripting (XSS) — prevents malicious code to be executed/sent to any user. As a result malicious scripts can not get access to the cookie files, session tokens and any other confidential information browsers use and store. Such scripts can even overwrite content of HTML pages. CleanTalk WAF monitors for patterns of these parameters and block them.', 'cleantalk-spam-protect'),
1804
  ),
1805
+ 'multisite__white_label__hoster_key' => array(
1806
  'title' => __( 'SQL-injection check', 'cleantalk-spam-protect'),
1807
  'desc' => __( 'SQL Injection — one of the most popular ways to hack websites and programs that work with databases. It is based on injection of a custom SQL code into database queries. It could transmit data through GET, POST requests or cookie files in an SQL code. If a website is vulnerable and execute such injections then it would allow attackers to apply changes to the website\'s MySQL database.', 'cleantalk-spam-protect'),
1808
  ),
1809
+ 'multisite__white_label__plugin_name' => array(
1810
  'title' => __( 'Check uploaded files', 'cleantalk-spam-protect'),
1811
  'desc' => __( 'The option checks each uploaded file to a website for malicious code. If it\'s possible for visitors to upload files to a website, for instance a work resume, then attackers could abuse it and upload an infected file to execute it later and get access to your website.', 'cleantalk-spam-protect'),
1812
  ),
inc/cleantalk-updater.php CHANGED
@@ -171,8 +171,8 @@ function apbct_update_to_5_116_0(){
171
 
172
  global $apbct, $wpdb;
173
 
174
- $apbct->settings['store_urls'] = 0;
175
- $apbct->settings['store_urls__sessions'] = 0;
176
  $apbct->saveSettings();
177
 
178
  $wpdb->query('CREATE TABLE IF NOT EXISTS `'. APBCT_TBL_SESSIONS .'` (
@@ -292,8 +292,8 @@ function apbct_update_to_5_124_0(){
292
  function apbct_update_to_5_126_0(){
293
  global $apbct;
294
  // Enable storing URLs
295
- $apbct->settings['store_urls'] = 1;
296
- $apbct->settings['store_urls__sessions'] = 1;
297
  $apbct->saveSettings();
298
  }
299
 
@@ -345,10 +345,10 @@ function apbct_update_to_5_127_0(){
345
  switch_to_blog( $blog );
346
 
347
  $settings = get_option( 'cleantalk_settings' );
348
- if( isset( $settings['use_static_js_key'] ) ){
349
- $settings['use_static_js_key'] = $settings['use_static_js_key'] === 0
350
  ? - 1
351
- : $settings['use_static_js_key'];
352
  update_option( 'cleantalk_settings', $settings );
353
 
354
  $data = get_option( 'cleantalk_data' );
@@ -361,13 +361,13 @@ function apbct_update_to_5_127_0(){
361
 
362
  if( defined( 'APBCT_WHITELABEL' ) ){
363
  $apbct->network_settings = array(
364
- 'white_label' => defined( 'APBCT_WHITELABEL' ) && APBCT_WHITELABEL == true ? 1 : 0,
365
- 'white_label__hoster_key' => defined( 'APBCT_HOSTER_API_KEY' ) ? APBCT_HOSTER_API_KEY : '',
366
- 'white_label__plugin_name' => defined( 'APBCT_WHITELABEL_NAME' ) ? APBCT_WHITELABEL_NAME : APBCT_NAME,
367
  );
368
  }elseif( defined( 'CLEANTALK_ACCESS_KEY' ) ){
369
  $apbct->network_settings = array(
370
- 'allow_custom_key' => 0,
371
  'apikey' => CLEANTALK_ACCESS_KEY,
372
  );
373
  }
@@ -375,9 +375,9 @@ function apbct_update_to_5_127_0(){
375
  }
376
  }else{
377
  // Switch use_static_js_key to Auto if it was disabled
378
- $apbct->settings['use_static_js_key'] = $apbct->settings['use_static_js_key'] === 0
379
  ? -1
380
- : $apbct->settings['use_static_js_key'];
381
  $apbct->saveSettings();
382
  }
383
  }
@@ -386,11 +386,11 @@ function apbct_update_to_5_127_1(){
386
  if(APBCT_WPMS && is_main_site()){
387
  global $apbct;
388
  $network_settings = get_site_option( 'cleantalk_network_settings' );
389
- if( $network_settings !== false && empty( $network_settings['allow_custom_key'] ) && empty( $network_settings['white_label'] ) ){
390
- $network_settings['allow_custom_key'] = 1;
391
  update_site_option( 'cleantalk_network_settings', $network_settings );
392
  }
393
- if( $network_settings !== false && $network_settings['white_label'] == 1 && $apbct->data['moderate'] == 0 ){
394
  ct_account_status_check( $network_settings['apikey'] ? $network_settings['apikey'] : $apbct->settings['apikey'], false);
395
  }
396
  }
@@ -468,7 +468,7 @@ function apbct_update_to_5_138_0() {
468
  apbct_activation__create_tables($sqls);
469
 
470
  // Getting key
471
- $settings = $net_settings['allow_custom_key']
472
  ? get_option('cleantalk_settings')
473
  : $main_blog_settings;
474
 
@@ -480,7 +480,7 @@ function apbct_update_to_5_138_0() {
480
  $result = \Cleantalk\ApbctWP\API::method__notice_paid_till(
481
  $settings['api_key'],
482
  preg_replace('/http[s]?:\/\//', '', get_option('siteurl'), 1),
483
- ! is_main_site() && $net_settings['white_label'] ? 'anti-spam-hosting' : 'antispam'
484
  );
485
 
486
  if( empty( $result['error'] ) || ! empty( $result['valid'] ) ){
@@ -748,4 +748,145 @@ function apbct_update_to_5_153_4(){
748
  $apbct->stats['sfw']['sending_logs__timestamp'] = 0;
749
  $apbct->save('stats');
750
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
751
  }
171
 
172
  global $apbct, $wpdb;
173
 
174
+ $apbct->settings['misc__store_urls'] = 0;
175
+ $apbct->settings['misc__store_urls__sessions'] = 0;
176
  $apbct->saveSettings();
177
 
178
  $wpdb->query('CREATE TABLE IF NOT EXISTS `'. APBCT_TBL_SESSIONS .'` (
292
  function apbct_update_to_5_126_0(){
293
  global $apbct;
294
  // Enable storing URLs
295
+ $apbct->settings['misc__store_urls'] = 1;
296
+ $apbct->settings['misc__store_urls__sessions'] = 1;
297
  $apbct->saveSettings();
298
  }
299
 
345
  switch_to_blog( $blog );
346
 
347
  $settings = get_option( 'cleantalk_settings' );
348
+ if( isset( $settings['data__use_static_js_key'] ) ){
349
+ $settings['data__use_static_js_key'] = $settings['data__use_static_js_key'] === 0
350
  ? - 1
351
+ : $settings['data__use_static_js_key'];
352
  update_option( 'cleantalk_settings', $settings );
353
 
354
  $data = get_option( 'cleantalk_data' );
361
 
362
  if( defined( 'APBCT_WHITELABEL' ) ){
363
  $apbct->network_settings = array(
364
+ 'multisite__white_label' => defined( 'APBCT_WHITELABEL' ) && APBCT_WHITELABEL == true ? 1 : 0,
365
+ 'multisite__white_label__hoster_key' => defined( 'APBCT_HOSTER_API_KEY' ) ? APBCT_HOSTER_API_KEY : '',
366
+ 'multisite__white_label__plugin_name' => defined( 'APBCT_WHITELABEL_NAME' ) ? APBCT_WHITELABEL_NAME : APBCT_NAME,
367
  );
368
  }elseif( defined( 'CLEANTALK_ACCESS_KEY' ) ){
369
  $apbct->network_settings = array(
370
+ 'multisite__allow_custom_key' => 0,
371
  'apikey' => CLEANTALK_ACCESS_KEY,
372
  );
373
  }
375
  }
376
  }else{
377
  // Switch use_static_js_key to Auto if it was disabled
378
+ $apbct->settings['data__use_static_js_key'] = $apbct->settings['data__use_static_js_key'] === 0
379
  ? -1
380
+ : $apbct->settings['data__use_static_js_key'];
381
  $apbct->saveSettings();
382
  }
383
  }
386
  if(APBCT_WPMS && is_main_site()){
387
  global $apbct;
388
  $network_settings = get_site_option( 'cleantalk_network_settings' );
389
+ if( $network_settings !== false && empty( $network_settings['multisite__allow_custom_key'] ) && empty( $network_settings['multisite__white_label'] ) ){
390
+ $network_settings['multisite__allow_custom_key'] = 1;
391
  update_site_option( 'cleantalk_network_settings', $network_settings );
392
  }
393
+ if( $network_settings !== false && $network_settings['multisite__white_label'] == 1 && $apbct->data['moderate'] == 0 ){
394
  ct_account_status_check( $network_settings['apikey'] ? $network_settings['apikey'] : $apbct->settings['apikey'], false);
395
  }
396
  }
468
  apbct_activation__create_tables($sqls);
469
 
470
  // Getting key
471
+ $settings = $net_settings['multisite__allow_custom_key']
472
  ? get_option('cleantalk_settings')
473
  : $main_blog_settings;
474
 
480
  $result = \Cleantalk\ApbctWP\API::method__notice_paid_till(
481
  $settings['api_key'],
482
  preg_replace('/http[s]?:\/\//', '', get_option('siteurl'), 1),
483
+ ! is_main_site() && $net_settings['multisite__white_label'] ? 'anti-spam-hosting' : 'antispam'
484
  );
485
 
486
  if( empty( $result['error'] ) || ! empty( $result['valid'] ) ){
748
  $apbct->stats['sfw']['sending_logs__timestamp'] = 0;
749
  $apbct->save('stats');
750
 
751
+ }
752
+
753
+ function apbct_update_to_5_154_0(){
754
+
755
+ global $apbct, $wpdb;
756
+
757
+ // Old setting name => New setting name
758
+ $keys_map = array(
759
+ 'spam_firewall' => 'sfw__enabled',
760
+ 'registrations_test' => 'forms__registrations_test',
761
+ 'comments_test' => 'forms__comments_test',
762
+ 'contact_forms_test' => 'forms__contact_forms_test',
763
+ 'general_contact_forms_test' => 'forms__general_contact_forms_test',
764
+ 'wc_checkout_test' => 'forms__wc_checkout_test',
765
+ 'wc_register_from_order' => 'forms__wc_register_from_order',
766
+ 'search_test' => 'forms__search_test',
767
+ 'check_external' => 'forms__check_external',
768
+ 'check_external__capture_buffer' => 'forms__check_external__capture_buffer',
769
+ 'check_internal' => 'forms__check_internal',
770
+ 'disable_comments__all' => 'comments__disable_comments__all',
771
+ 'disable_comments__posts' => 'comments__disable_comments__posts',
772
+ 'disable_comments__pages' => 'comments__disable_comments__pages',
773
+ 'disable_comments__media' => 'comments__disable_comments__media',
774
+ 'bp_private_messages' => 'comments__bp_private_messages',
775
+ 'check_comments_number' => 'comments__check_comments_number',
776
+ 'remove_old_spam' => 'comments__remove_old_spam',
777
+ 'remove_comments_links' => 'comments__remove_comments_links',
778
+ 'show_check_links' => 'comments__show_check_links',
779
+ 'manage_comments_on_public_page' => 'comments__manage_comments_on_public_page',
780
+ 'protect_logged_in' => 'data__protect_logged_in',
781
+ 'use_ajax' => 'data__use_ajax',
782
+ 'use_static_js_key' => 'data__use_static_js_key',
783
+ 'general_postdata_test' => 'data__general_postdata_test',
784
+ 'set_cookies' => 'data__set_cookies',
785
+ 'set_cookies__sessions' => 'data__set_cookies__sessions',
786
+ 'ssl_on' => 'data__ssl_on',
787
+ 'show_adminbar' => 'admin_bar__show',
788
+ 'all_time_counter' => 'admin_bar__all_time_counter',
789
+ 'daily_counter' => 'admin_bar__daily_counter',
790
+ 'sfw_counter' => 'admin_bar__sfw_counter',
791
+ 'gdpr_enabled' => 'gdpr__enabled',
792
+ 'gdpr_text' => 'gdpr__text',
793
+ 'collect_details' => 'misc__collect_details',
794
+ 'send_connection_reports' => 'misc__send_connection_reports',
795
+ 'async_js' => 'misc__async_js',
796
+ 'debug_ajax' => 'misc__debug_ajax',
797
+ 'store_urls' => 'misc__store_urls',
798
+ 'store_urls__sessions' => 'misc__store_urls__sessions',
799
+ 'complete_deactivation' => 'misc__complete_deactivation',
800
+ 'use_buitin_http_api' => 'wp__use_builtin_http_api',
801
+ 'comment_notify' => 'wp__comment_notify',
802
+ 'comment_notify__roles' => 'wp__comment_notify__roles',
803
+ 'dashboard_widget__show' => 'wp__dashboard_widget__show',
804
+ 'allow_custom_key' => 'multisite__allow_custom_key',
805
+ 'allow_custom_settings' => 'multisite__allow_custom_settings',
806
+ 'white_label' => 'multisite__white_label',
807
+ 'white_label__hoster_key' => 'multisite__white_label__hoster_key',
808
+ 'white_label__plugin_name' => 'multisite__white_label__plugin_name',
809
+ 'use_settings_template' => 'multisite__use_settings_template',
810
+ 'use_settings_template_apply_for_new' => 'multisite__use_settings_template_apply_for_new',
811
+ 'use_settings_template_apply_for_current' => 'multisite__use_settings_template_apply_for_current',
812
+ 'use_settings_template_apply_for_current_list_sites' => 'multisite__use_settings_template_apply_for_current_list_sites',
813
+ );
814
+
815
+ if( is_multisite() ){
816
+
817
+ $network_settings = get_site_option( 'cleantalk_network_settings' );
818
+
819
+ if( $network_settings ) {
820
+ // replacing old key to new keys
821
+ foreach( $network_settings as $key => $value ){
822
+ if( array_key_exists( $key, $keys_map ) ) {
823
+ $_network_settings[$keys_map[$key]] = $value;
824
+ } else {
825
+ $_network_settings[$key] = $value;
826
+ }
827
+ }
828
+ update_site_option( 'cleantalk_network_settings', $_network_settings );
829
+ }
830
+
831
+ $initial_blog = get_current_blog_id();
832
+ $blogs = array_keys( $wpdb->get_results( 'SELECT blog_id FROM '. $wpdb->blogs, OBJECT_K ) );
833
+ foreach ( $blogs as $blog ) {
834
+ switch_to_blog( $blog );
835
+
836
+ $settings = get_option( 'cleantalk_settings' );
837
+
838
+ if( $settings ) {
839
+ // replacing old key to new keys
840
+ foreach( $settings as $key => $value ){
841
+ if( array_key_exists( $key, $keys_map ) ) {
842
+ $_settings[$keys_map[$key]] = $value;
843
+ } else {
844
+ $_settings[$key] = $value;
845
+ }
846
+ }
847
+ update_option( 'cleantalk_settings', $_settings );
848
+ }
849
+
850
+ }
851
+ switch_to_blog( $initial_blog );
852
+
853
+ } else {
854
+
855
+ $apbct->data['current_settings_template_id'] = null;
856
+ $apbct->data['current_settings_template_name'] = null;
857
+ $apbct->saveData();
858
+
859
+ $settings = (array) $apbct->settings;
860
+
861
+ if( $settings ) {
862
+ // replacing old key to new keys
863
+ foreach( $settings as $key => $value ){
864
+ if( array_key_exists( $key, $keys_map ) ) {
865
+ $_settings[$keys_map[$key]] = $value;
866
+ } else {
867
+ $_settings[$key] = $value;
868
+ }
869
+ }
870
+
871
+ $apbct->settings = $_settings;
872
+ $apbct->saveSettings();
873
+ }
874
+
875
+ }
876
+
877
+ $sqls[] = 'DROP TABLE IF EXISTS `%scleantalk_sfw_logs`;';
878
+
879
+ $sqls[] = 'CREATE TABLE IF NOT EXISTS `%scleantalk_sfw_logs` (
880
+ `id` VARCHAR(40) NOT NULL,
881
+ `ip` VARCHAR(15) NOT NULL,
882
+ `status` ENUM(\'PASS_SFW\',\'DENY_SFW\',\'PASS_SFW__BY_WHITELIST\',\'PASS_SFW__BY_COOKIE\',\'DENY_ANTICRAWLER\',\'PASS_ANTICRAWLER\',\'DENY_ANTICRAWLER_UA\',\'PASS_ANTICRAWLER_UA\',\'DENY_ANTIFLOOD\',\'PASS_ANTIFLOOD\',\'DENY_ANTIFLOOD_UA\',\'PASS_ANTIFLOOD_UA\') NULL DEFAULT NULL,
883
+ `all_entries` INT NOT NULL,
884
+ `blocked_entries` INT NOT NULL,
885
+ `entries_timestamp` INT NOT NULL,
886
+ `ua_id` INT(11) NULL DEFAULT NULL,
887
+ `ua_name` VARCHAR(1024) NOT NULL,
888
+ PRIMARY KEY (`id`));';
889
+
890
+ apbct_activation__create_tables( $sqls, $apbct->db_prefix );
891
+
892
  }
js/apbct-public.min.js CHANGED
@@ -1,2 +1,2 @@
1
- function ctSetCookie(e,t){document.cookie=e+"="+encodeURIComponent(t)+"; path=/; samesite=lax"}function apbct_collect_visible_fields(e){var t,n=[],o="",i=0,a=[];for(t in e.elements)isNaN(+t)||(n[t]=e.elements[t]);return(n=n.filter(function(e){return"none"!==getComputedStyle(e).display&&"hidden"!==getComputedStyle(e).visibility&&"0"!==getComputedStyle(e).opacity&&"hidden"!==e.getAttribute("type")&&"submit"!==e.getAttribute("type")&&null!==e.getAttribute("name")&&-1===a.indexOf(e.getAttribute("name"))&&(i++,-1===["radio","checkbox"].indexOf(e.getAttribute("type"))||(a.push(e.getAttribute("name")),!1))})).forEach(function(e,t,n){o+=" "+e.getAttribute("name")}),{visible_fields:o=o.trim(),visible_fields_count:i}}function apbct_visible_fields_set_cookie(e){e="object"==typeof e&&null!==e?e:{};ctSetCookie("apbct_visible_fields",JSON.stringify(e))}function apbct_js_keys__set_input_value(e,t,n,o){var i;null!==document.getElementById(n.input_name)&&(i=document.getElementById(n.input_name).value,document.getElementById(n.input_name).value=document.getElementById(n.input_name).value.replace(i,e.js_key))}function apbct_public_sendAJAX(t,n,o){var i=n.callback||null,a=n.callback_context||null,c=n.callback_params||null,e=n.async||!0,s=n.notJson||null,l=n.timeout||15e3,o=o||null,r=n.button||null,u=n.spinner||null,p=n.progressbar||null,d=n.silent||null,m=n.no_nonce||null;"string"==typeof t?t=(t=!m?t+"&_ajax_nonce="+ctPublic._ajax_nonce:t)+"&no_cache="+Math.random():(m||(t._ajax_nonce=ctPublic._ajax_nonce),t.no_cache=Math.random()),r&&(r.setAttribute("disabled","disabled"),r.style.cursor="not-allowed"),u&&jQuery(u).css("display","inline"),jQuery.ajax({type:"POST",url:ctPublic._ajax_url,data:t,async:e,success:function(e){r&&(r.removeAttribute("disabled"),r.style.cursor="pointer"),u&&jQuery(u).css("display","none"),(e=!s?JSON.parse(e):e).error?(setTimeout(function(){p&&p.fadeOut("slow")},1e3),alert("Error happens: "+(e.error||"Unkown"))):i&&(c?i.apply(a,c.concat(e,t,n,o)):i(e,t,n,o))},error:function(e,t,n){r&&(r.removeAttribute("disabled"),r.style.cursor="pointer"),u&&jQuery(u).css("display","none"),n&&!d&&(console.log("APBCT_AJAX_ERROR"),console.log(e),console.log(t),console.log("Anti-spam by Cleantalk plugin error: "+n+"Please, contact Cleantalk tech support https://wordpress.org/support/plugin/cleantalk-spam-protect/"),alert("Anti-spam by Cleantalk plugin error: "+n+"Please, contact Cleantalk tech support https://wordpress.org/support/plugin/cleantalk-spam-protect/"))},timeout:l})}!function(){var e=new Date,t=(new Date).getTime(),n=!0,o=[],i=0;function a(e,t,n){"function"==typeof window.addEventListener?e.addEventListener(t,n):e.attachEvent(t,n)}function c(e,t,n){"function"==typeof window.removeEventListener?e.removeEventListener(t,n):e.detachEvent(t,n)}ctSetCookie("ct_ps_timestamp",Math.floor((new Date).getTime()/1e3)),ctSetCookie("ct_fkp_timestamp","0"),ctSetCookie("ct_pointer_data","0"),ctSetCookie("ct_timezone","0"),setTimeout(function(){ctSetCookie("ct_timezone",e.getTimezoneOffset()/60*-1)},1e3);var s=function(e){ctSetCookie("ct_fkp_timestamp",Math.floor((new Date).getTime()/1e3)),c(window,"mousedown",s),c(window,"keydown",s)},l=setInterval(function(){n=!0},150),r=setInterval(function(){ctSetCookie("ct_pointer_data",JSON.stringify(o))},1200),u=function(e){!0===n&&(o.push([Math.round(e.clientY),Math.round(e.clientX),Math.round((new Date).getTime()-t)]),n=!1,50<=++i&&(c(window,"mousemove",u),clearInterval(l),clearInterval(r)))};a(window,"mousemove",u),a(window,"mousedown",s),a(window,"keydown",s),a(window,"DOMContentLoaded",function(){ctSetCookie("apbct_visible_fields",0),setTimeout(function(){for(var e={},t=0;t<document.forms.length;t++){var n=document.forms[t];n.classList.contains("slp_search_form")||n.parentElement.classList.contains("mec-booking")||-1!==n.action.toString().indexOf("activehosted.com")||n.id&&"caspioform"==n.id||n.name.classList&&n.name.classList.contains("tinkoffPayRow")||(e[t]=apbct_collect_visible_fields(n),n.onsubmit_prev=n.onsubmit,n.onsubmit=function(e){var t={};t[0]=apbct_collect_visible_fields(this),apbct_visible_fields_set_cookie(t),e.target.onsubmit_prev instanceof Function&&setTimeout(function(){e.target.onsubmit_prev.call(e.target,e)},500)})}apbct_visible_fields_set_cookie(e)},1e3)})}();var accessor=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"responseText");Object.defineProperty(XMLHttpRequest.prototype,"responseText",{get:function(){return apbct_showBlockedResponse(this.response),accessor.get.call(this)},configurable:!0}),apbct_parseJSON=function(e){try{var t=JSON.parse(e)}catch(e){return!1}return t},apbct_showBlockedResponse=function(e){var t;return(e=apbct_parseJSON(e))&&void 0!==e.apbct&&(e=e.apbct).blocked&&(document.dispatchEvent(new CustomEvent("apbctAjaxBockAlert",{bubbles:!0,detail:{message:e.comment}})),(t=document.createElement("div")).setAttribute("id","apbct-result"),t.style.display="none",t.innerHTML=e.comment,document.body.append(t),cleantalkModal.open("apbct-result"),1==+e.stop_script&&window.stop()),!0};
2
  //# sourceMappingURL=apbct-public.min.js.map
1
+ function ctSetCookie(e,t){document.cookie=e+"="+encodeURIComponent(t)+"; path=/; samesite=lax"}function apbct_collect_visible_fields(e){var t=[],o="",n=0,i=[];for(var a in e.elements)isNaN(+a)||(t[a]=e.elements[a]);return(t=t.filter(function(e){return"none"!==getComputedStyle(e).display&&"hidden"!==getComputedStyle(e).visibility&&"0"!==getComputedStyle(e).opacity&&"hidden"!==e.getAttribute("type")&&"submit"!==e.getAttribute("type")&&null!==e.getAttribute("name")&&-1===i.indexOf(e.getAttribute("name"))&&(n++,-1===["radio","checkbox"].indexOf(e.getAttribute("type"))||(i.push(e.getAttribute("name")),!1))})).forEach(function(e,t,n){o+=" "+e.getAttribute("name")}),{visible_fields:o=o.trim(),visible_fields_count:n}}function apbct_visible_fields_set_cookie(e){var t="object"==typeof e&&null!==e?e:{};ctSetCookie("apbct_visible_fields",JSON.stringify(t))}function apbct_js_keys__set_input_value(e,t,n,o){var i;null!==document.getElementById(n.input_name)&&(i=document.getElementById(n.input_name).value,document.getElementById(n.input_name).value=document.getElementById(n.input_name).value.replace(i,e.js_key))}function apbct_public_sendAJAX(t,n,o){var i=n.callback||null,a=n.callback_context||null,c=n.callback_params||null,e=n.async||!0,s=n.notJson||null,l=n.timeout||15e3,o=o||null,r=n.button||null,u=n.spinner||null,p=n.progressbar||null,d=n.silent||null,m=n.no_nonce||null;"string"==typeof t?(m||(t=t+"&_ajax_nonce="+ctPublic._ajax_nonce),t=t+"&no_cache="+Math.random()):(m||(t._ajax_nonce=ctPublic._ajax_nonce),t.no_cache=Math.random()),r&&(r.setAttribute("disabled","disabled"),r.style.cursor="not-allowed"),u&&jQuery(u).css("display","inline"),jQuery.ajax({type:"POST",url:ctPublic._ajax_url,data:t,async:e,success:function(e){r&&(r.removeAttribute("disabled"),r.style.cursor="pointer"),u&&jQuery(u).css("display","none"),s||(e=JSON.parse(e)),e.error?(setTimeout(function(){p&&p.fadeOut("slow")},1e3),alert("Error happens: "+(e.error||"Unkown"))):i&&(c?i.apply(a,c.concat(e,t,n,o)):i(e,t,n,o))},error:function(e,t,n){r&&(r.removeAttribute("disabled"),r.style.cursor="pointer"),u&&jQuery(u).css("display","none"),n&&!d&&(console.log("APBCT_AJAX_ERROR"),console.log(e),console.log(t),console.log("Anti-spam by Cleantalk plugin error: "+n+"Please, contact Cleantalk tech support https://wordpress.org/support/plugin/cleantalk-spam-protect/"),alert("Anti-spam by Cleantalk plugin error: "+n+"Please, contact Cleantalk tech support https://wordpress.org/support/plugin/cleantalk-spam-protect/"))},timeout:l})}!function(){var e=new Date,t=(new Date).getTime(),n=!0,o=[],i=0;function a(e,t,n){"function"==typeof window.addEventListener?e.addEventListener(t,n):e.attachEvent(t,n)}function c(e,t,n){"function"==typeof window.removeEventListener?e.removeEventListener(t,n):e.detachEvent(t,n)}ctSetCookie("ct_ps_timestamp",Math.floor((new Date).getTime()/1e3)),ctSetCookie("ct_fkp_timestamp","0"),ctSetCookie("ct_pointer_data","0"),ctSetCookie("ct_timezone","0"),setTimeout(function(){ctSetCookie("ct_timezone",e.getTimezoneOffset()/60*-1)},1e3);var s=function(){ctSetCookie("ct_fkp_timestamp",Math.floor((new Date).getTime()/1e3)),c(window,"mousedown",s),c(window,"keydown",s)},l=setInterval(function(){n=!0},150),r=setInterval(function(){ctSetCookie("ct_pointer_data",JSON.stringify(o))},1200),u=function(e){!0===n&&(o.push([Math.round(e.clientY),Math.round(e.clientX),Math.round((new Date).getTime()-t)]),n=!1,50<=++i&&(c(window,"mousemove",u),clearInterval(l),clearInterval(r)))};a(window,"mousemove",u),a(window,"mousedown",s),a(window,"keydown",s),a(window,"DOMContentLoaded",function(){ctSetCookie("apbct_visible_fields",0),setTimeout(function(){for(var e={},t=0;t<document.forms.length;t++){var n=document.forms[t];n.classList.contains("slp_search_form")||n.parentElement.classList.contains("mec-booking")||-1!==n.action.toString().indexOf("activehosted.com")||n.id&&"caspioform"==n.id||n.name.classList&&n.name.classList.contains("tinkoffPayRow")||(e[t]=apbct_collect_visible_fields(n),n.onsubmit_prev=n.onsubmit,n.onsubmit=function(e){var t={};t[0]=apbct_collect_visible_fields(this),apbct_visible_fields_set_cookie(t),e.target.onsubmit_prev instanceof Function&&setTimeout(function(){e.target.onsubmit_prev.call(e.target,e)},500)})}apbct_visible_fields_set_cookie(e)},1e3)})}();var accessor=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"responseText");Object.defineProperty(XMLHttpRequest.prototype,"responseText",{get:function(){return apbct_showBlockedResponse(this.response),accessor.get.call(this)},configurable:!0}),apbct_parseJSON=function(e){try{var t=JSON.parse(e)}catch(e){return!1}return t},apbct_showBlockedResponse=function(e){return(e=apbct_parseJSON(e))&&void 0!==e.apbct&&(e=e.apbct).blocked&&(document.dispatchEvent(new CustomEvent("apbctAjaxBockAlert",{bubbles:!0,detail:{message:e.comment}})),cleantalkModal.loaded=e.comment,cleantalkModal.open(),1==+e.stop_script&&window.stop()),!0};
2
  //# sourceMappingURL=apbct-public.min.js.map
js/apbct-public.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"apbct-public.min.js","sources":["apbct-public.js"],"sourcesContent":["(function() {\n\n\tvar ct_date = new Date(),\n\t\tctTimeMs = new Date().getTime(),\n\t\tctMouseEventTimerFlag = true, //Reading interval flag\n\t\tctMouseData = [],\n\t\tctMouseDataCounter = 0;\n\n\tfunction apbct_attach_event_handler(elem, event, callback){\n\t\tif(typeof window.addEventListener === \"function\") elem.addEventListener(event, callback);\n\t\telse elem.attachEvent(event, callback);\n\t}\n\n\tfunction apbct_remove_event_handler(elem, event, callback){\n\t\tif(typeof window.removeEventListener === \"function\") elem.removeEventListener(event, callback);\n\t\telse elem.detachEvent(event, callback);\n\t}\n\n\tctSetCookie(\"ct_ps_timestamp\", Math.floor(new Date().getTime()/1000));\n\tctSetCookie(\"ct_fkp_timestamp\", \"0\");\n\tctSetCookie(\"ct_pointer_data\", \"0\");\n\tctSetCookie(\"ct_timezone\", \"0\");\n\n\tsetTimeout(function(){\n\t\tctSetCookie(\"ct_timezone\", ct_date.getTimezoneOffset()/60*(-1));\n\t},1000);\n\n\t//Writing first key press timestamp\n\tvar ctFunctionFirstKey = function output(event){\n\t\tvar KeyTimestamp = Math.floor(new Date().getTime()/1000);\n\t\tctSetCookie(\"ct_fkp_timestamp\", KeyTimestamp);\n\t\tctKeyStopStopListening();\n\t};\n\n\t//Reading interval\n\tvar ctMouseReadInterval = setInterval(function(){\n\t\tctMouseEventTimerFlag = true;\n\t}, 150);\n\n\t//Writting interval\n\tvar ctMouseWriteDataInterval = setInterval(function(){\n\t\tctSetCookie(\"ct_pointer_data\", JSON.stringify(ctMouseData));\n\t}, 1200);\n\n\t//Logging mouse position each 150 ms\n\tvar ctFunctionMouseMove = function output(event){\n\t\tif(ctMouseEventTimerFlag === true){\n\n\t\t\tctMouseData.push([\n\t\t\t\tMath.round(event.clientY),\n\t\t\t\tMath.round(event.clientX),\n\t\t\t\tMath.round(new Date().getTime() - ctTimeMs)\n\t\t\t]);\n\n\t\t\tctMouseDataCounter++;\n\t\t\tctMouseEventTimerFlag = false;\n\t\t\tif(ctMouseDataCounter >= 50){\n\t\t\t\tctMouseStopData();\n\t\t\t}\n\t\t}\n\t};\n\n\t//Stop mouse observing function\n\tfunction ctMouseStopData(){\n\t\tapbct_remove_event_handler(window, \"mousemove\", ctFunctionMouseMove);\n\t\tclearInterval(ctMouseReadInterval);\n\t\tclearInterval(ctMouseWriteDataInterval);\n\t}\n\n\t//Stop key listening function\n\tfunction ctKeyStopStopListening(){\n\t\tapbct_remove_event_handler(window, \"mousedown\", ctFunctionFirstKey);\n\t\tapbct_remove_event_handler(window, \"keydown\", ctFunctionFirstKey);\n\t}\n\n\tapbct_attach_event_handler(window, \"mousemove\", ctFunctionMouseMove);\n\tapbct_attach_event_handler(window, \"mousedown\", ctFunctionFirstKey);\n\tapbct_attach_event_handler(window, \"keydown\", ctFunctionFirstKey);\n\n\t// Ready function\n\tfunction apbct_ready(){\n\n\t\tctSetCookie(\"apbct_visible_fields\", 0);\n\n\t\tsetTimeout(function(){\n\n\t\t\tvar visible_fields_collection = {};\n\n\t\t\tfor(var i = 0; i < document.forms.length; i++){\n\t\t\t\tvar form = document.forms[i];\n\n\t\t\t\t//Exclusion for forms\n\t\t\t\tif (\n\t\t\t\t\tform.classList.contains('slp_search_form') || //StoreLocatorPlus form\n\t\t\t\t\tform.parentElement.classList.contains('mec-booking') ||\n\t\t\t\t\tform.action.toString().indexOf('activehosted.com') !== -1 || // Active Campaign\n\t\t\t\t\t(form.id && form.id == 'caspioform') || //Caspio Form\n\t\t\t\t\tform.name.classList && form.name.classList.contains('tinkoffPayRow') //TinkoffPayForm\n\t\t\t\t)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvisible_fields_collection[i] = apbct_collect_visible_fields( form );\n\n\t\t\t\tform.onsubmit_prev = form.onsubmit;\n\t\t\t\tform.onsubmit = function (event) {\n\n\t\t\t\t\tvar visible_fields = {};\n\t\t\t\t\tvisible_fields[0] = apbct_collect_visible_fields(this);\n\t\t\t\t\tapbct_visible_fields_set_cookie( visible_fields );\n\n\t\t\t\t\t// Call previous submit action\n\t\t\t\t\tif (event.target.onsubmit_prev instanceof Function) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tevent.target.onsubmit_prev.call(event.target, event);\n\t\t\t\t\t\t}, 500);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tapbct_visible_fields_set_cookie( visible_fields_collection );\n\n\t\t}, 1000);\n\t}\n\tapbct_attach_event_handler(window, \"DOMContentLoaded\", apbct_ready);\n\n}());\n\nfunction ctSetCookie(c_name, value) {\n\tdocument.cookie = c_name + \"=\" + encodeURIComponent(value) + \"; path=/; samesite=lax\";\n}\n\nfunction apbct_collect_visible_fields( form ) {\n\n\t// Get only fields\n\tvar inputs = [],\n\t\tinputs_visible = '',\n\t\tinputs_visible_count = 0,\n\t\tinputs_with_duplicate_names = [];\n\n\tfor(var key in form.elements){\n\t\tif(!isNaN(+key))\n\t\t\tinputs[key] = form.elements[key];\n\t}\n\n\t// Filter fields\n\tinputs = inputs.filter(function(elem){\n\n\t\t// Filter fields\n\t\tif( getComputedStyle(elem).display === \"none\" || // hidden\n\t\t\tgetComputedStyle(elem).visibility === \"hidden\" || // hidden\n\t\t\tgetComputedStyle(elem).opacity === \"0\" || // hidden\n\t\t\telem.getAttribute(\"type\") === \"hidden\" || // type == hidden\n\t\t\telem.getAttribute(\"type\") === \"submit\" || // type == submit\n\t\t\t//elem.value === \"\" || // empty value\n\t\t\telem.getAttribute('name') === null ||\n\t\t\tinputs_with_duplicate_names.indexOf( elem.getAttribute('name') ) !== -1 // name already added\n\t\t){\n\t\t\treturn false;\n\t\t}\n\n\t\t// Visible fields count\n\t\tinputs_visible_count++;\n\n\t\t// Filter inputs with same names for type == radio\n\t\tif( -1 !== ['radio', 'checkbox'].indexOf( elem.getAttribute(\"type\") )){\n\t\t\tinputs_with_duplicate_names.push( elem.getAttribute('name') );\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\t// Visible fields\n\tinputs.forEach(function(elem, i, elements){\n\t\tinputs_visible += \" \" + elem.getAttribute(\"name\");\n\t});\n\tinputs_visible = inputs_visible.trim();\n\n\treturn {\n\t\tvisible_fields : inputs_visible,\n\t\tvisible_fields_count : inputs_visible_count,\n\t}\n\n}\n\nfunction apbct_visible_fields_set_cookie( visible_fields_collection ) {\n\n\tvar collection = typeof visible_fields_collection === 'object' && visible_fields_collection !== null ? visible_fields_collection : {};\n\n\tctSetCookie(\"apbct_visible_fields\", JSON.stringify( collection ) );\n\n}\n\nfunction apbct_js_keys__set_input_value(result, data, params, obj){\n\tif (document.getElementById(params.input_name) !== null) {\n\t\tvar ct_input_value = document.getElementById(params.input_name).value;\n\t\tdocument.getElementById(params.input_name).value = document.getElementById(params.input_name).value.replace(ct_input_value, result.js_key);\n\t}\n}\nfunction apbct_public_sendAJAX(data, params, obj){\n\n\t// Default params\n\tvar callback = params.callback || null;\n\tvar callback_context = params.callback_context || null;\n\tvar callback_params = params.callback_params || null;\n\tvar async = params.async || true;\n\tvar notJson = params.notJson || null;\n\tvar timeout = params.timeout || 15000;\n\tvar obj = obj || null;\n\tvar button = params.button || null;\n\tvar spinner = params.spinner || null;\n\tvar progressbar = params.progressbar || null;\n\tvar silent = params.silent || null;\n\tvar no_nonce = params.no_nonce || null;\n\n\tif(typeof (data) === 'string') {\n\t\tif( ! no_nonce )\n\t\t\tdata = data + '&_ajax_nonce=' + ctPublic._ajax_nonce;\n\t\tdata = data + '&no_cache=' + Math.random()\n\t} else {\n\t\tif( ! no_nonce )\n\t\t\tdata._ajax_nonce = ctPublic._ajax_nonce;\n\t\tdata.no_cache = Math.random();\n\t}\n\t// Button and spinner\n\tif(button) {button.setAttribute('disabled', 'disabled'); button.style.cursor = 'not-allowed'; }\n\tif(spinner) jQuery(spinner).css('display', 'inline');\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\turl: ctPublic._ajax_url,\n\t\tdata: data,\n\t\tasync: async,\n\t\tsuccess: function(result){\n\t\t\tif(button){ button.removeAttribute('disabled'); button.style.cursor = 'pointer'; }\n\t\t\tif(spinner) jQuery(spinner).css('display', 'none');\n\t\t\tif(!notJson) result = JSON.parse(result);\n\t\t\tif(result.error){\n\t\t\t\tsetTimeout(function(){ if(progressbar) progressbar.fadeOut('slow'); }, 1000);\n\t\t\t\talert('Error happens: ' + (result.error || 'Unkown'));\n\t\t\t}else{\n\t\t\t\tif(callback) {\n\t\t\t\t\tif (callback_params)\n\t\t\t\t\t\tcallback.apply( callback_context, callback_params.concat( result, data, params, obj ) );\n\t\t\t\t\telse\n\t\t\t\t\t\tcallback(result, data, params, obj);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\terror: function(jqXHR, textStatus, errorThrown){\n\t\t\tif(button){ button.removeAttribute('disabled'); button.style.cursor = 'pointer'; }\n\t\t\tif(spinner) jQuery(spinner).css('display', 'none');\n\t\t\tif( errorThrown && ! silent ) {\n\t\t\t\tconsole.log('APBCT_AJAX_ERROR');\n\t\t\t\tconsole.log(jqXHR);\n\t\t\t\tconsole.log(textStatus);\n\t\t\t\tconsole.log('Anti-spam by Cleantalk plugin error: ' + errorThrown + 'Please, contact Cleantalk tech support https://wordpress.org/support/plugin/cleantalk-spam-protect/');\n\t\t\t\talert('Anti-spam by Cleantalk plugin error: ' + errorThrown + 'Please, contact Cleantalk tech support https://wordpress.org/support/plugin/cleantalk-spam-protect/');\n\t\t\t}\n\t\t},\n\t\ttimeout: timeout,\n\t});\n}\n\n// Capturing responses and output block message for unknown AJAX forms\nvar accessor = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'responseText');\nObject.defineProperty(XMLHttpRequest.prototype, 'responseText', {\n\n\tget: function(){\n\t\tapbct_showBlockedResponse( this.response );\n\t\treturn accessor.get.call(this);\n\t},\n\tconfigurable: true\n\n});\n\napbct_parseJSON = function( string ){\n\ttry{\n\t\tvar result = JSON.parse( string );\n\t}catch( e ){\n\t\treturn false;\n\t}\n\treturn result;\n};\n\napbct_showBlockedResponse = function( response ){\n\n\tvar response = apbct_parseJSON( response );\n\n\tif ( response && typeof response.apbct !== 'undefined' ) {\n\t\tresponse = response.apbct;\n\t\tif (response.blocked) {\n\t\t\tdocument.dispatchEvent(\n\t\t\t\tnew CustomEvent( \"apbctAjaxBockAlert\", {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: { message: response.comment }\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\t// Create hidden element contains result.\n\t\t\tvar apbct_result = document.createElement( 'div' );\n\t\t\tapbct_result.setAttribute( 'id', 'apbct-result' );\n\t\t\tapbct_result.style.display = 'none';\n\t\t\tapbct_result.innerHTML = response.comment;\n\t\t\tdocument.body.append( apbct_result );\n\n\t\t\t// Show the element\n\t\t\tcleantalkModal.open('apbct-result');\n\n\t\t\tif(+response.stop_script == 1)\n\t\t\t\twindow.stop();\n\t\t}\n\t}\n\n\treturn true;\n\n};"],"names":["ctSetCookie","c_name","value","document","cookie","encodeURIComponent","apbct_collect_visible_fields","form","key","inputs","inputs_visible","inputs_visible_count","inputs_with_duplicate_names","elements","isNaN","filter","elem","getComputedStyle","display","visibility","opacity","getAttribute","indexOf","push","forEach","i","visible_fields","trim","visible_fields_count","apbct_visible_fields_set_cookie","visible_fields_collection","collection","JSON","stringify","apbct_js_keys__set_input_value","result","data","params","obj","ct_input_value","getElementById","input_name","replace","js_key","apbct_public_sendAJAX","callback","callback_context","callback_params","async","notJson","timeout","button","spinner","progressbar","silent","no_nonce","ctPublic","_ajax_nonce","Math","random","no_cache","setAttribute","style","cursor","jQuery","css","ajax","type","url","_ajax_url","success","removeAttribute","parse","error","setTimeout","fadeOut","alert","apply","concat","jqXHR","textStatus","errorThrown","console","log","ct_date","Date","ctTimeMs","getTime","ctMouseEventTimerFlag","ctMouseData","ctMouseDataCounter","apbct_attach_event_handler","event","window","addEventListener","attachEvent","apbct_remove_event_handler","removeEventListener","detachEvent","floor","getTimezoneOffset","ctFunctionFirstKey","ctMouseReadInterval","setInterval","ctMouseWriteDataInterval","ctFunctionMouseMove","round","clientY","clientX","clearInterval","forms","length","classList","contains","parentElement","action","toString","id","name","onsubmit_prev","onsubmit","this","target","Function","call","accessor","Object","getOwnPropertyDescriptor","XMLHttpRequest","prototype","defineProperty","get","apbct_showBlockedResponse","response","configurable","apbct_parseJSON","string","e","apbct_result","apbct","blocked","dispatchEvent","CustomEvent","bubbles","detail","message","comment","createElement","innerHTML","body","append","cleantalkModal","open","stop_script","stop"],"mappings":"AA+HA,SAASA,YAAYC,EAAQC,GAC5BC,SAASC,OAASH,EAAS,IAAMI,mBAAmBH,GAAS,yBAG9D,SAASI,6BAA8BC,GAGtC,IAKQC,EALJC,EAAS,GACZC,EAAiB,GACjBC,EAAuB,EACvBC,EAA8B,GAE/B,IAAQJ,KAAOD,EAAKM,SACfC,OAAON,KACVC,EAAOD,GAAOD,EAAKM,SAASL,IAqC9B,OAjCAC,EAASA,EAAOM,OAAO,SAASC,GAG/B,MAA0C,SAAtCC,iBAAiBD,GAAME,SACY,WAAtCD,iBAAiBD,GAAMG,YACe,MAAtCF,iBAAiBD,GAAMI,SACe,WAAtCJ,EAAKK,aAAa,SACoB,WAAtCL,EAAKK,aAAa,SAEoB,OAAtCL,EAAKK,aAAa,UACoD,IAAtET,EAA4BU,QAASN,EAAKK,aAAa,WAMxDV,KAGK,IAAM,CAAC,QAAS,YAAYW,QAASN,EAAKK,aAAa,WAC3DT,EAA4BW,KAAMP,EAAKK,aAAa,UAC7C,OAOFG,QAAQ,SAASR,EAAMS,EAAGZ,GAChCH,GAAkB,IAAMM,EAAKK,aAAa,UAIpC,CACNK,eAHDhB,EAAiBA,EAAeiB,OAI/BC,qBAAuBjB,GAKzB,SAASkB,gCAAiCC,GAErCC,EAAkD,iBAA9BD,GAAwE,OAA9BA,EAAsCA,EAA4B,GAEpI9B,YAAY,uBAAwBgC,KAAKC,UAAWF,IAIrD,SAASG,+BAA+BC,EAAQC,EAAMC,EAAQC,GAC7D,IACKC,EAD8C,OAA/CpC,SAASqC,eAAeH,EAAOI,cAC9BF,EAAiBpC,SAASqC,eAAeH,EAAOI,YAAYvC,MAChEC,SAASqC,eAAeH,EAAOI,YAAYvC,MAAQC,SAASqC,eAAeH,EAAOI,YAAYvC,MAAMwC,QAAQH,EAAgBJ,EAAOQ,SAGrI,SAASC,sBAAsBR,EAAMC,EAAQC,GAG5C,IAAIO,EAAcR,EAAOQ,UAAe,KACpCC,EAAmBT,EAAOS,kBAAoB,KAC9CC,EAAkBV,EAAOU,iBAAmB,KAC5CC,EAAQX,EAAOW,QAAS,EACxBC,EAAcZ,EAAOY,SAAe,KACpCC,EAAcb,EAAOa,SAAe,KACpCZ,EAAcA,GAAsB,KACpCa,EAAcd,EAAOc,QAAe,KACpCC,EAAcf,EAAOe,SAAe,KACpCC,EAAchB,EAAOgB,aAAe,KACpCC,EAAcjB,EAAOiB,QAAe,KACpCC,EAAclB,EAAOkB,UAAe,KAEnB,iBAAX,EAGTnB,GADCA,GADKmB,EACEnB,EAAO,gBAAkBoB,SAASC,YACnCrB,GAAO,aAAesB,KAAKC,UAE5BJ,IACLnB,EAAKqB,YAAcD,SAASC,aAC7BrB,EAAKwB,SAAWF,KAAKC,UAGnBR,IAAUA,EAAOU,aAAa,WAAY,YAAaV,EAAOW,MAAMC,OAAS,eAC7EX,GAASY,OAAOZ,GAASa,IAAI,UAAW,UAE3CD,OAAOE,KAAK,CACXC,KAAM,OACNC,IAAKZ,SAASa,UACdjC,KAAMA,EACNY,MAAOA,EACPsB,QAAS,SAASnC,GACdgB,IAAUA,EAAOoB,gBAAgB,YAAapB,EAAOW,MAAMC,OAAS,WACpEX,GAAUY,OAAOZ,GAASa,IAAI,UAAW,SAC/B9B,GAATc,EAAkBjB,KAAKwC,MAAMrC,GAC9BA,GAAOsC,OACTC,WAAW,WAAerB,GAAaA,EAAYsB,QAAQ,SAAY,KACvEC,MAAM,mBAAqBzC,EAAOsC,OAAS,YAExC5B,IACEE,EACHF,EAASgC,MAAO/B,EAAkBC,EAAgB+B,OAAQ3C,EAAQC,EAAMC,EAAQC,IAEhFO,EAASV,EAAQC,EAAMC,EAAQC,KAInCmC,MAAO,SAASM,EAAOC,EAAYC,GAC/B9B,IAAUA,EAAOoB,gBAAgB,YAAapB,EAAOW,MAAMC,OAAS,WACpEX,GAASY,OAAOZ,GAASa,IAAI,UAAW,QACvCgB,IAAiB3B,IACpB4B,QAAQC,IAAI,oBACZD,QAAQC,IAAIJ,GACZG,QAAQC,IAAIH,GACZE,QAAQC,IAAI,wCAA0CF,EAAc,uGACpEL,MAAM,wCAA0CK,EAAc,yGAGhE/B,QAASA,KApQV,WAEA,IAAIkC,EAAU,IAAIC,KACjBC,GAAW,IAAID,MAAOE,UACtBC,GAAwB,EACxBC,EAAc,GACdC,EAAqB,EAEtB,SAASC,EAA2B3E,EAAM4E,EAAO/C,GACV,mBAA5BgD,OAAOC,iBAAiC9E,EAAK8E,iBAAiBF,EAAO/C,GAC7B7B,EAAK+E,YAAYH,EAAO/C,GAG3E,SAASmD,EAA2BhF,EAAM4E,EAAO/C,GACP,mBAA/BgD,OAAOI,oBAAoCjF,EAAKiF,oBAAoBL,EAAO/C,GAChC7B,EAAKkF,YAAYN,EAAO/C,GAG9E7C,YAAY,kBAAmB0D,KAAKyC,OAAM,IAAId,MAAOE,UAAU,MAC/DvF,YAAY,mBAAoB,KAChCA,YAAY,kBAAmB,KAC/BA,YAAY,cAAe,KAE3B0E,WAAW,WACV1E,YAAY,cAAeoF,EAAQgB,oBAAoB,IAAK,IAC3D,KAGF,IAAIC,EAAqB,SAAgBT,GAExC5F,YAAY,mBADO0D,KAAKyC,OAAM,IAAId,MAAOE,UAAU,MA0CnDS,EAA2BH,OAAQ,YAAaQ,GAChDL,EAA2BH,OAAQ,UAAWQ,IArC3CC,EAAsBC,YAAY,WACrCf,GAAwB,GACtB,KAGCgB,EAA2BD,YAAY,WAC1CvG,YAAY,kBAAmBgC,KAAKC,UAAUwD,KAC5C,MAGCgB,EAAsB,SAAgBb,IACZ,IAA1BJ,IAEFC,EAAYlE,KAAK,CAChBmC,KAAKgD,MAAMd,EAAMe,SACjBjD,KAAKgD,MAAMd,EAAMgB,SACjBlD,KAAKgD,OAAM,IAAIrB,MAAOE,UAAYD,KAInCE,GAAwB,EACC,MAFzBE,IAUDM,EAA2BH,OAAQ,YAAaY,GAChDI,cAAcP,GACdO,cAAcL,MASfb,EAA2BE,OAAQ,YAAaY,GAChDd,EAA2BE,OAAQ,YAAaQ,GAChDV,EAA2BE,OAAQ,UAAWQ,GA8C9CV,EAA2BE,OAAQ,mBA3CnC,WAEC7F,YAAY,uBAAwB,GAEpC0E,WAAW,WAIV,IAFA,IAAI5C,EAA4B,GAExBL,EAAI,EAAGA,EAAItB,SAAS2G,MAAMC,OAAQtF,IAAI,CAC7C,IAAIlB,EAAOJ,SAAS2G,MAAMrF,GAIzBlB,EAAKyG,UAAUC,SAAS,oBACxB1G,EAAK2G,cAAcF,UAAUC,SAAS,iBACkB,IAAxD1G,EAAK4G,OAAOC,WAAW9F,QAAQ,qBAC9Bf,EAAK8G,IAAiB,cAAX9G,EAAK8G,IACjB9G,EAAK+G,KAAKN,WAAazG,EAAK+G,KAAKN,UAAUC,SAAS,mBAIrDnF,EAA0BL,GAAKnB,6BAA8BC,GAE7DA,EAAKgH,cAAgBhH,EAAKiH,SAC1BjH,EAAKiH,SAAW,SAAU5B,GAEzB,IAAIlE,EAAiB,GACrBA,EAAe,GAAKpB,6BAA6BmH,MACjD5F,gCAAiCH,GAG7BkE,EAAM8B,OAAOH,yBAAyBI,UACzCjD,WAAW,WACVkB,EAAM8B,OAAOH,cAAcK,KAAKhC,EAAM8B,OAAQ9B,IAC5C,OAKN/D,gCAAiCC,IAE/B,OAzHL,GAyQA,IAAI+F,SAAWC,OAAOC,yBAAyBC,eAAeC,UAAW,gBACzEH,OAAOI,eAAeF,eAAeC,UAAW,eAAgB,CAE/DE,IAAK,WAEJ,OADAC,0BAA2BX,KAAKY,UACzBR,SAASM,IAAIP,KAAKH,OAE1Ba,cAAc,IAIfC,gBAAkB,SAAUC,GAC3B,IACC,IAAIrG,EAASH,KAAKwC,MAAOgE,GACzB,MAAOC,GACP,OAAO,EAER,OAAOtG,GAGRiG,0BAA4B,SAAUC,GAErC,IAaMK,EAcN,OA3BIL,EAAWE,gBAAiBF,UAEW,IAAnBA,EAASM,QAChCN,EAAWA,EAASM,OACPC,UACZzI,SAAS0I,cACR,IAAIC,YAAa,qBAAsB,CACtCC,SAAS,EACTC,OAAQ,CAAEC,QAASZ,EAASa,aAK1BR,EAAevI,SAASgJ,cAAe,QAC9BtF,aAAc,KAAM,gBACjC6E,EAAa5E,MAAM5C,QAAU,OAC7BwH,EAAaU,UAAYf,EAASa,QAClC/I,SAASkJ,KAAKC,OAAQZ,GAGtBa,eAAeC,KAAK,gBAEQ,IAAxBnB,EAASoB,aACZ5D,OAAO6D,SAIH"}
1
+ {"version":3,"file":"apbct-public.min.js","sources":["apbct-public.js"],"sourcesContent":["(function() {\n\n\tvar ct_date = new Date(),\n\t\tctTimeMs = new Date().getTime(),\n\t\tctMouseEventTimerFlag = true, //Reading interval flag\n\t\tctMouseData = [],\n\t\tctMouseDataCounter = 0;\n\n\tfunction apbct_attach_event_handler(elem, event, callback){\n\t\tif(typeof window.addEventListener === \"function\") elem.addEventListener(event, callback);\n\t\telse elem.attachEvent(event, callback);\n\t}\n\n\tfunction apbct_remove_event_handler(elem, event, callback){\n\t\tif(typeof window.removeEventListener === \"function\") elem.removeEventListener(event, callback);\n\t\telse elem.detachEvent(event, callback);\n\t}\n\n\tctSetCookie(\"ct_ps_timestamp\", Math.floor(new Date().getTime()/1000));\n\tctSetCookie(\"ct_fkp_timestamp\", \"0\");\n\tctSetCookie(\"ct_pointer_data\", \"0\");\n\tctSetCookie(\"ct_timezone\", \"0\");\n\n\tsetTimeout(function(){\n\t\tctSetCookie(\"ct_timezone\", ct_date.getTimezoneOffset()/60*(-1));\n\t},1000);\n\n\t//Writing first key press timestamp\n\tvar ctFunctionFirstKey = function output(event){\n\t\tvar KeyTimestamp = Math.floor(new Date().getTime()/1000);\n\t\tctSetCookie(\"ct_fkp_timestamp\", KeyTimestamp);\n\t\tctKeyStopStopListening();\n\t};\n\n\t//Reading interval\n\tvar ctMouseReadInterval = setInterval(function(){\n\t\tctMouseEventTimerFlag = true;\n\t}, 150);\n\n\t//Writting interval\n\tvar ctMouseWriteDataInterval = setInterval(function(){\n\t\tctSetCookie(\"ct_pointer_data\", JSON.stringify(ctMouseData));\n\t}, 1200);\n\n\t//Logging mouse position each 150 ms\n\tvar ctFunctionMouseMove = function output(event){\n\t\tif(ctMouseEventTimerFlag === true){\n\n\t\t\tctMouseData.push([\n\t\t\t\tMath.round(event.clientY),\n\t\t\t\tMath.round(event.clientX),\n\t\t\t\tMath.round(new Date().getTime() - ctTimeMs)\n\t\t\t]);\n\n\t\t\tctMouseDataCounter++;\n\t\t\tctMouseEventTimerFlag = false;\n\t\t\tif(ctMouseDataCounter >= 50){\n\t\t\t\tctMouseStopData();\n\t\t\t}\n\t\t}\n\t};\n\n\t//Stop mouse observing function\n\tfunction ctMouseStopData(){\n\t\tapbct_remove_event_handler(window, \"mousemove\", ctFunctionMouseMove);\n\t\tclearInterval(ctMouseReadInterval);\n\t\tclearInterval(ctMouseWriteDataInterval);\n\t}\n\n\t//Stop key listening function\n\tfunction ctKeyStopStopListening(){\n\t\tapbct_remove_event_handler(window, \"mousedown\", ctFunctionFirstKey);\n\t\tapbct_remove_event_handler(window, \"keydown\", ctFunctionFirstKey);\n\t}\n\n\tapbct_attach_event_handler(window, \"mousemove\", ctFunctionMouseMove);\n\tapbct_attach_event_handler(window, \"mousedown\", ctFunctionFirstKey);\n\tapbct_attach_event_handler(window, \"keydown\", ctFunctionFirstKey);\n\n\t// Ready function\n\tfunction apbct_ready(){\n\n\t\tctSetCookie(\"apbct_visible_fields\", 0);\n\n\t\tsetTimeout(function(){\n\n\t\t\tvar visible_fields_collection = {};\n\n\t\t\tfor(var i = 0; i < document.forms.length; i++){\n\t\t\t\tvar form = document.forms[i];\n\n\t\t\t\t//Exclusion for forms\n\t\t\t\tif (\n\t\t\t\t\tform.classList.contains('slp_search_form') || //StoreLocatorPlus form\n\t\t\t\t\tform.parentElement.classList.contains('mec-booking') ||\n\t\t\t\t\tform.action.toString().indexOf('activehosted.com') !== -1 || // Active Campaign\n\t\t\t\t\t(form.id && form.id == 'caspioform') || //Caspio Form\n\t\t\t\t\tform.name.classList && form.name.classList.contains('tinkoffPayRow') //TinkoffPayForm\n\t\t\t\t)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvisible_fields_collection[i] = apbct_collect_visible_fields( form );\n\n\t\t\t\tform.onsubmit_prev = form.onsubmit;\n\t\t\t\tform.onsubmit = function (event) {\n\n\t\t\t\t\tvar visible_fields = {};\n\t\t\t\t\tvisible_fields[0] = apbct_collect_visible_fields(this);\n\t\t\t\t\tapbct_visible_fields_set_cookie( visible_fields );\n\n\t\t\t\t\t// Call previous submit action\n\t\t\t\t\tif (event.target.onsubmit_prev instanceof Function) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tevent.target.onsubmit_prev.call(event.target, event);\n\t\t\t\t\t\t}, 500);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tapbct_visible_fields_set_cookie( visible_fields_collection );\n\n\t\t}, 1000);\n\t}\n\tapbct_attach_event_handler(window, \"DOMContentLoaded\", apbct_ready);\n\n}());\n\nfunction ctSetCookie(c_name, value) {\n\tdocument.cookie = c_name + \"=\" + encodeURIComponent(value) + \"; path=/; samesite=lax\";\n}\n\nfunction apbct_collect_visible_fields( form ) {\n\n\t// Get only fields\n\tvar inputs = [],\n\t\tinputs_visible = '',\n\t\tinputs_visible_count = 0,\n\t\tinputs_with_duplicate_names = [];\n\n\tfor(var key in form.elements){\n\t\tif(!isNaN(+key))\n\t\t\tinputs[key] = form.elements[key];\n\t}\n\n\t// Filter fields\n\tinputs = inputs.filter(function(elem){\n\n\t\t// Filter fields\n\t\tif( getComputedStyle(elem).display === \"none\" || // hidden\n\t\t\tgetComputedStyle(elem).visibility === \"hidden\" || // hidden\n\t\t\tgetComputedStyle(elem).opacity === \"0\" || // hidden\n\t\t\telem.getAttribute(\"type\") === \"hidden\" || // type == hidden\n\t\t\telem.getAttribute(\"type\") === \"submit\" || // type == submit\n\t\t\t//elem.value === \"\" || // empty value\n\t\t\telem.getAttribute('name') === null ||\n\t\t\tinputs_with_duplicate_names.indexOf( elem.getAttribute('name') ) !== -1 // name already added\n\t\t){\n\t\t\treturn false;\n\t\t}\n\n\t\t// Visible fields count\n\t\tinputs_visible_count++;\n\n\t\t// Filter inputs with same names for type == radio\n\t\tif( -1 !== ['radio', 'checkbox'].indexOf( elem.getAttribute(\"type\") )){\n\t\t\tinputs_with_duplicate_names.push( elem.getAttribute('name') );\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\t// Visible fields\n\tinputs.forEach(function(elem, i, elements){\n\t\tinputs_visible += \" \" + elem.getAttribute(\"name\");\n\t});\n\tinputs_visible = inputs_visible.trim();\n\n\treturn {\n\t\tvisible_fields : inputs_visible,\n\t\tvisible_fields_count : inputs_visible_count,\n\t}\n\n}\n\nfunction apbct_visible_fields_set_cookie( visible_fields_collection ) {\n\n\tvar collection = typeof visible_fields_collection === 'object' && visible_fields_collection !== null ? visible_fields_collection : {};\n\n\tctSetCookie(\"apbct_visible_fields\", JSON.stringify( collection ) );\n\n}\n\nfunction apbct_js_keys__set_input_value(result, data, params, obj){\n\tif (document.getElementById(params.input_name) !== null) {\n\t\tvar ct_input_value = document.getElementById(params.input_name).value;\n\t\tdocument.getElementById(params.input_name).value = document.getElementById(params.input_name).value.replace(ct_input_value, result.js_key);\n\t}\n}\nfunction apbct_public_sendAJAX(data, params, obj){\n\n\t// Default params\n\tvar callback = params.callback || null;\n\tvar callback_context = params.callback_context || null;\n\tvar callback_params = params.callback_params || null;\n\tvar async = params.async || true;\n\tvar notJson = params.notJson || null;\n\tvar timeout = params.timeout || 15000;\n\tvar obj = obj || null;\n\tvar button = params.button || null;\n\tvar spinner = params.spinner || null;\n\tvar progressbar = params.progressbar || null;\n\tvar silent = params.silent || null;\n\tvar no_nonce = params.no_nonce || null;\n\n\tif(typeof (data) === 'string') {\n\t\tif( ! no_nonce )\n\t\t\tdata = data + '&_ajax_nonce=' + ctPublic._ajax_nonce;\n\t\tdata = data + '&no_cache=' + Math.random()\n\t} else {\n\t\tif( ! no_nonce )\n\t\t\tdata._ajax_nonce = ctPublic._ajax_nonce;\n\t\tdata.no_cache = Math.random();\n\t}\n\t// Button and spinner\n\tif(button) {button.setAttribute('disabled', 'disabled'); button.style.cursor = 'not-allowed'; }\n\tif(spinner) jQuery(spinner).css('display', 'inline');\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\turl: ctPublic._ajax_url,\n\t\tdata: data,\n\t\tasync: async,\n\t\tsuccess: function(result){\n\t\t\tif(button){ button.removeAttribute('disabled'); button.style.cursor = 'pointer'; }\n\t\t\tif(spinner) jQuery(spinner).css('display', 'none');\n\t\t\tif(!notJson) result = JSON.parse(result);\n\t\t\tif(result.error){\n\t\t\t\tsetTimeout(function(){ if(progressbar) progressbar.fadeOut('slow'); }, 1000);\n\t\t\t\talert('Error happens: ' + (result.error || 'Unkown'));\n\t\t\t}else{\n\t\t\t\tif(callback) {\n\t\t\t\t\tif (callback_params)\n\t\t\t\t\t\tcallback.apply( callback_context, callback_params.concat( result, data, params, obj ) );\n\t\t\t\t\telse\n\t\t\t\t\t\tcallback(result, data, params, obj);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\terror: function(jqXHR, textStatus, errorThrown){\n\t\t\tif(button){ button.removeAttribute('disabled'); button.style.cursor = 'pointer'; }\n\t\t\tif(spinner) jQuery(spinner).css('display', 'none');\n\t\t\tif( errorThrown && ! silent ) {\n\t\t\t\tconsole.log('APBCT_AJAX_ERROR');\n\t\t\t\tconsole.log(jqXHR);\n\t\t\t\tconsole.log(textStatus);\n\t\t\t\tconsole.log('Anti-spam by Cleantalk plugin error: ' + errorThrown + 'Please, contact Cleantalk tech support https://wordpress.org/support/plugin/cleantalk-spam-protect/');\n\t\t\t\talert('Anti-spam by Cleantalk plugin error: ' + errorThrown + 'Please, contact Cleantalk tech support https://wordpress.org/support/plugin/cleantalk-spam-protect/');\n\t\t\t}\n\t\t},\n\t\ttimeout: timeout,\n\t});\n}\n\n// Capturing responses and output block message for unknown AJAX forms\nvar accessor = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'responseText');\nObject.defineProperty(XMLHttpRequest.prototype, 'responseText', {\n\n\tget: function(){\n\t\tapbct_showBlockedResponse( this.response );\n\t\treturn accessor.get.call(this);\n\t},\n\tconfigurable: true\n\n});\n\napbct_parseJSON = function( string ){\n\ttry{\n\t\tvar result = JSON.parse( string );\n\t}catch( e ){\n\t\treturn false;\n\t}\n\treturn result;\n};\n\napbct_showBlockedResponse = function( response ){\n\n\tvar response = apbct_parseJSON( response );\n\n\tif ( response && typeof response.apbct !== 'undefined' ) {\n\t\tresponse = response.apbct;\n\t\tif (response.blocked) {\n\t\t\tdocument.dispatchEvent(\n\t\t\t\tnew CustomEvent( \"apbctAjaxBockAlert\", {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: { message: response.comment }\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\t// Show the result by modal\n\t\t\tcleantalkModal.loaded = response.comment;\n\t\t\tcleantalkModal.open();\n\n\t\t\tif(+response.stop_script == 1)\n\t\t\t\twindow.stop();\n\t\t}\n\t}\n\n\treturn true;\n\n};"],"names":["ctSetCookie","c_name","value","document","cookie","encodeURIComponent","apbct_collect_visible_fields","form","inputs","inputs_visible","inputs_visible_count","inputs_with_duplicate_names","key","elements","isNaN","filter","elem","getComputedStyle","display","visibility","opacity","getAttribute","indexOf","push","forEach","i","visible_fields","trim","visible_fields_count","apbct_visible_fields_set_cookie","visible_fields_collection","collection","JSON","stringify","apbct_js_keys__set_input_value","result","data","params","obj","ct_input_value","getElementById","input_name","replace","js_key","apbct_public_sendAJAX","callback","callback_context","callback_params","async","notJson","timeout","button","spinner","progressbar","silent","no_nonce","ctPublic","_ajax_nonce","Math","random","no_cache","setAttribute","style","cursor","jQuery","css","ajax","type","url","_ajax_url","success","removeAttribute","parse","error","setTimeout","fadeOut","alert","apply","concat","jqXHR","textStatus","errorThrown","console","log","ct_date","Date","ctTimeMs","getTime","ctMouseEventTimerFlag","ctMouseData","ctMouseDataCounter","apbct_attach_event_handler","event","window","addEventListener","attachEvent","apbct_remove_event_handler","removeEventListener","detachEvent","floor","getTimezoneOffset","ctFunctionFirstKey","ctMouseReadInterval","setInterval","ctMouseWriteDataInterval","ctFunctionMouseMove","round","clientY","clientX","clearInterval","forms","length","classList","contains","parentElement","action","toString","id","name","onsubmit_prev","onsubmit","this","target","Function","call","accessor","Object","getOwnPropertyDescriptor","XMLHttpRequest","prototype","defineProperty","get","apbct_showBlockedResponse","response","configurable","apbct_parseJSON","string","e","apbct","blocked","dispatchEvent","CustomEvent","bubbles","detail","message","comment","cleantalkModal","loaded","open","stop_script","stop"],"mappings":"AA+HA,SAASA,YAAYC,EAAQC,GAC5BC,SAASC,OAASH,EAAS,IAAMI,mBAAmBH,GAAS,yBAG9D,SAASI,6BAA8BC,GAGtC,IAAIC,EAAS,GACZC,EAAiB,GACjBC,EAAuB,EACvBC,EAA8B,GAE/B,IAAI,IAAIC,KAAOL,EAAKM,SACfC,OAAOF,KACVJ,EAAOI,GAAOL,EAAKM,SAASD,IAqC9B,OAjCAJ,EAASA,EAAOO,OAAO,SAASC,GAG/B,MAA0C,SAAtCC,iBAAiBD,GAAME,SACY,WAAtCD,iBAAiBD,GAAMG,YACe,MAAtCF,iBAAiBD,GAAMI,SACe,WAAtCJ,EAAKK,aAAa,SACoB,WAAtCL,EAAKK,aAAa,SAEoB,OAAtCL,EAAKK,aAAa,UACoD,IAAtEV,EAA4BW,QAASN,EAAKK,aAAa,WAMxDX,KAGK,IAAM,CAAC,QAAS,YAAYY,QAASN,EAAKK,aAAa,WAC3DV,EAA4BY,KAAMP,EAAKK,aAAa,UAC7C,OAOFG,QAAQ,SAASR,EAAMS,EAAGZ,GAChCJ,GAAkB,IAAMO,EAAKK,aAAa,UAIpC,CACNK,eAHDjB,EAAiBA,EAAekB,OAI/BC,qBAAuBlB,GAKzB,SAASmB,gCAAiCC,GAEzC,IAAIC,EAAkD,iBAA9BD,GAAwE,OAA9BA,EAAsCA,EAA4B,GAEpI9B,YAAY,uBAAwBgC,KAAKC,UAAWF,IAIrD,SAASG,+BAA+BC,EAAQC,EAAMC,EAAQC,GAC7D,IACKC,EAD8C,OAA/CpC,SAASqC,eAAeH,EAAOI,cAC9BF,EAAiBpC,SAASqC,eAAeH,EAAOI,YAAYvC,MAChEC,SAASqC,eAAeH,EAAOI,YAAYvC,MAAQC,SAASqC,eAAeH,EAAOI,YAAYvC,MAAMwC,QAAQH,EAAgBJ,EAAOQ,SAGrI,SAASC,sBAAsBR,EAAMC,EAAQC,GAG5C,IAAIO,EAAcR,EAAOQ,UAAe,KACpCC,EAAmBT,EAAOS,kBAAoB,KAC9CC,EAAkBV,EAAOU,iBAAmB,KAC5CC,EAAQX,EAAOW,QAAS,EACxBC,EAAcZ,EAAOY,SAAe,KACpCC,EAAcb,EAAOa,SAAe,KACpCZ,EAAcA,GAAsB,KACpCa,EAAcd,EAAOc,QAAe,KACpCC,EAAcf,EAAOe,SAAe,KACpCC,EAAchB,EAAOgB,aAAe,KACpCC,EAAcjB,EAAOiB,QAAe,KACpCC,EAAclB,EAAOkB,UAAe,KAEnB,iBAAX,GACHA,IACLnB,EAAOA,EAAO,gBAAkBoB,SAASC,aAC1CrB,EAAOA,EAAO,aAAesB,KAAKC,WAE5BJ,IACLnB,EAAKqB,YAAcD,SAASC,aAC7BrB,EAAKwB,SAAWF,KAAKC,UAGnBR,IAAUA,EAAOU,aAAa,WAAY,YAAaV,EAAOW,MAAMC,OAAS,eAC7EX,GAASY,OAAOZ,GAASa,IAAI,UAAW,UAE3CD,OAAOE,KAAK,CACXC,KAAM,OACNC,IAAKZ,SAASa,UACdjC,KAAMA,EACNY,MAAOA,EACPsB,QAAS,SAASnC,GACdgB,IAAUA,EAAOoB,gBAAgB,YAAapB,EAAOW,MAAMC,OAAS,WACpEX,GAAUY,OAAOZ,GAASa,IAAI,UAAW,QACxChB,IAASd,EAASH,KAAKwC,MAAMrC,IAC9BA,EAAOsC,OACTC,WAAW,WAAerB,GAAaA,EAAYsB,QAAQ,SAAY,KACvEC,MAAM,mBAAqBzC,EAAOsC,OAAS,YAExC5B,IACEE,EACHF,EAASgC,MAAO/B,EAAkBC,EAAgB+B,OAAQ3C,EAAQC,EAAMC,EAAQC,IAEhFO,EAASV,EAAQC,EAAMC,EAAQC,KAInCmC,MAAO,SAASM,EAAOC,EAAYC,GAC/B9B,IAAUA,EAAOoB,gBAAgB,YAAapB,EAAOW,MAAMC,OAAS,WACpEX,GAASY,OAAOZ,GAASa,IAAI,UAAW,QACvCgB,IAAiB3B,IACpB4B,QAAQC,IAAI,oBACZD,QAAQC,IAAIJ,GACZG,QAAQC,IAAIH,GACZE,QAAQC,IAAI,wCAA0CF,EAAc,uGACpEL,MAAM,wCAA0CK,EAAc,yGAGhE/B,QAASA,KApQV,WAEA,IAAIkC,EAAU,IAAIC,KACjBC,GAAW,IAAID,MAAOE,UACtBC,GAAwB,EACxBC,EAAc,GACdC,EAAqB,EAEtB,SAASC,EAA2B3E,EAAM4E,EAAO/C,GACV,mBAA5BgD,OAAOC,iBAAiC9E,EAAK8E,iBAAiBF,EAAO/C,GAC7B7B,EAAK+E,YAAYH,EAAO/C,GAG3E,SAASmD,EAA2BhF,EAAM4E,EAAO/C,GACP,mBAA/BgD,OAAOI,oBAAoCjF,EAAKiF,oBAAoBL,EAAO/C,GAChC7B,EAAKkF,YAAYN,EAAO/C,GAG9E7C,YAAY,kBAAmB0D,KAAKyC,OAAM,IAAId,MAAOE,UAAU,MAC/DvF,YAAY,mBAAoB,KAChCA,YAAY,kBAAmB,KAC/BA,YAAY,cAAe,KAE3B0E,WAAW,WACV1E,YAAY,cAAeoF,EAAQgB,oBAAoB,IAAK,IAC3D,KAGF,IAAIC,EAAqB,WAExBrG,YAAY,mBADO0D,KAAKyC,OAAM,IAAId,MAAOE,UAAU,MA0CnDS,EAA2BH,OAAQ,YAAaQ,GAChDL,EAA2BH,OAAQ,UAAWQ,IArC3CC,EAAsBC,YAAY,WACrCf,GAAwB,GACtB,KAGCgB,EAA2BD,YAAY,WAC1CvG,YAAY,kBAAmBgC,KAAKC,UAAUwD,KAC5C,MAGCgB,EAAsB,SAAgBb,IACZ,IAA1BJ,IAEFC,EAAYlE,KAAK,CAChBmC,KAAKgD,MAAMd,EAAMe,SACjBjD,KAAKgD,MAAMd,EAAMgB,SACjBlD,KAAKgD,OAAM,IAAIrB,MAAOE,UAAYD,KAInCE,GAAwB,EACC,MAFzBE,IAUDM,EAA2BH,OAAQ,YAAaY,GAChDI,cAAcP,GACdO,cAAcL,MASfb,EAA2BE,OAAQ,YAAaY,GAChDd,EAA2BE,OAAQ,YAAaQ,GAChDV,EAA2BE,OAAQ,UAAWQ,GA8C9CV,EAA2BE,OAAQ,mBA3CnC,WAEC7F,YAAY,uBAAwB,GAEpC0E,WAAW,WAIV,IAFA,IAAI5C,EAA4B,GAExBL,EAAI,EAAGA,EAAItB,SAAS2G,MAAMC,OAAQtF,IAAI,CAC7C,IAAIlB,EAAOJ,SAAS2G,MAAMrF,GAIzBlB,EAAKyG,UAAUC,SAAS,oBACxB1G,EAAK2G,cAAcF,UAAUC,SAAS,iBACkB,IAAxD1G,EAAK4G,OAAOC,WAAW9F,QAAQ,qBAC9Bf,EAAK8G,IAAiB,cAAX9G,EAAK8G,IACjB9G,EAAK+G,KAAKN,WAAazG,EAAK+G,KAAKN,UAAUC,SAAS,mBAIrDnF,EAA0BL,GAAKnB,6BAA8BC,GAE7DA,EAAKgH,cAAgBhH,EAAKiH,SAC1BjH,EAAKiH,SAAW,SAAU5B,GAEzB,IAAIlE,EAAiB,GACrBA,EAAe,GAAKpB,6BAA6BmH,MACjD5F,gCAAiCH,GAG7BkE,EAAM8B,OAAOH,yBAAyBI,UACzCjD,WAAW,WACVkB,EAAM8B,OAAOH,cAAcK,KAAKhC,EAAM8B,OAAQ9B,IAC5C,OAKN/D,gCAAiCC,IAE/B,OAzHL,GAyQA,IAAI+F,SAAWC,OAAOC,yBAAyBC,eAAeC,UAAW,gBACzEH,OAAOI,eAAeF,eAAeC,UAAW,eAAgB,CAE/DE,IAAK,WAEJ,OADAC,0BAA2BX,KAAKY,UACzBR,SAASM,IAAIP,KAAKH,OAE1Ba,cAAc,IAIfC,gBAAkB,SAAUC,GAC3B,IACC,IAAIrG,EAASH,KAAKwC,MAAOgE,GACzB,MAAOC,GACP,OAAO,EAER,OAAOtG,GAGRiG,0BAA4B,SAAUC,GAuBrC,OArBIA,EAAWE,gBAAiBF,UAEW,IAAnBA,EAASK,QAChCL,EAAWA,EAASK,OACPC,UACZxI,SAASyI,cACR,IAAIC,YAAa,qBAAsB,CACtCC,SAAS,EACTC,OAAQ,CAAEC,QAASX,EAASY,YAK9BC,eAAeC,OAASd,EAASY,QACjCC,eAAeE,OAEa,IAAxBf,EAASgB,aACZxD,OAAOyD,SAIH"}
js/cleantalk-admin-settings-page.min.js CHANGED
@@ -1,2 +1,2 @@
1
- function apbct_banner_check(){var a=setInterval(function(){apbct_admin_sendAJAX({action:"apbct_settings__check_renew_banner"},{callback:function(e,t,n,c){e.close_renew_banner&&(jQuery("#apbct_renew_notice").length&&jQuery("#apbct_renew_notice").hide("slow"),jQuery("#apbct_trial_notice").length&&jQuery("#apbct_trial_notice").hide("slow"),clearInterval(a))}})},9e5)}function apbct_get_elems(e){for(var t,n=0,c=(e=e.split(",")).length;n<c;n++)t=jQuery("#"+e[n]),e[n]=0===t.length?jQuery("."+e[n]):t;return e}function apbct_get_elems__native(e){"string"==typeof e&&(e=e.split(","));var a=[];return e.forEach(function(e,t,n){var c=document.getElementById(e);if(null===c){if(null!==(c=document.getElementsByClassName(e))&&0!==c.length)for(key in c)0<=+key&&a.push(c[key])}else a.push(c[key])}),a}function apbct_show_hide_elem(e){for(var t=0,n=(e=apbct_get_elems(e)).length;t<n;t++)e[t].each(function(e,t){var n=(t=jQuery(t)).next("label")||t.prev("label")||null;t.is(":visible")?(t.hide(),n&&n.hide()):(t.show(),n&&n.show())})}function apbctSettingsDependencies(e,a){a=isNaN(a)?null:a,apbct_get_elems__native(e).forEach(function(e,t,n){console.log(e.getAttribute("id"));if(null===a&&(a=null===e.getAttribute("disabled")?0:1),1===a?e.removeAttribute("disabled"):e.setAttribute("disabled","disabled"),null!==e.getAttribute("apbct_children")){var c=apbctSettingsDependencies_getState(e)&&a;null!==c&&apbctSettingsDependencies(e.getAttribute("apbct_children"),c)}})}function apbctSettingsDependencies_getState(e){var t;switch(e.getAttribute("type")){case"checkbox":t=+e.checked;break;case"radio":t=+(1==+e.getAttribute("value"));break;default:t=null}return t}function apbct_settings__showDescription(e,t){var a=function(e){void 0!==e&&(0!=jQuery(e.target).parent(".apbct_long_desc").length&&!jQuery(e.target).hasClass("apbct_long_desc__cancel")||jQuery(e.target).hasClass("apbct_long_description__show"))||(jQuery(".apbct_long_desc").remove(),jQuery(document).off("click",a))};a(),e.after("<div id='apbct_long_desc__"+t+"' class='apbct_long_desc'></div>");var n=jQuery("#apbct_long_desc__"+t);n.append("<i class='icon-spin1 animate-spin'></i>").append("<div class='apbct_long_desc__angle'></div>").css({top:e.position().top-5,left:e.position().left+25}),apbct_admin_sendAJAX({action:"apbct_settings__get_description",setting_id:t},{spinner:n.children("img"),callback:function(e,t,n,c){c.empty().append("<div class='apbct_long_desc__angle'></div>").append("<i class='apbct_long_desc__cancel icon-cancel'></i>").append("<h3 class='apbct_long_desc__title'>"+e.title+"</h3>").append("<p>"+e.desc+"</p>"),jQuery(document).on("click",a)}},n)}jQuery(document).ready(function(){document.getElementsByClassName("apbct_settings-title")[0]&&"rtl"===getComputedStyle(document.getElementsByClassName("apbct_settings-title")[0]).direction&&jQuery(".apbct_switchers").css("text-align","right"),jQuery("#apbct_showApiKey").on("click",function(){jQuery(".apbct_setting---apikey").val(jQuery(".apbct_setting---apikey").attr("key")),jQuery(".apbct_setting---apikey+div").show(),jQuery(this).fadeOut(300)});var e=new Date;jQuery("#ct_admin_timezone").val(e.getTimezoneOffset()/60*-1),jQuery("#apbct_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:+jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery("#apbct_button__sync").on("click",function(){apbct_admin_sendAJAX({action:"apbct_sync"},{timeout:25e3,button:document.getElementById("apbct_button__sync"),spinner:jQuery("#apbct_button__sync .apbct_preloader_button"),callback:function(e,t,n,c){jQuery(".apbct_success").show(300),setTimeout(function(){jQuery(".apbct_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),ctSettingsPage.key_changed&&jQuery("#apbct_button__sync").click(),jQuery(document).on("click",".apbct_settings-long_description---show",function(){self=jQuery(this),apbct_settings__showDescription(self,self.attr("setting"))}),(jQuery("#apbct_renew_notice").length||jQuery("#apbct_trial_notice").length)&&apbct_banner_check()});
2
  //# sourceMappingURL=cleantalk-admin-settings-page.min.js.map
1
+ function apbct_banner_check(){var c=setInterval(function(){apbct_admin_sendAJAX({action:"apbct_settings__check_renew_banner"},{callback:function(t,e,n,a){t.close_renew_banner&&(jQuery("#apbct_renew_notice").length&&jQuery("#apbct_renew_notice").hide("slow"),jQuery("#apbct_trial_notice").length&&jQuery("#apbct_trial_notice").hide("slow"),clearInterval(c))}})},9e5)}function apbct_get_elems(t){for(var e,n=0,a=(t=t.split(",")).length;n<a;n++)e=jQuery("#"+t[n]),t[n]=0===e.length?jQuery("."+t[n]):e;return t}function apbct_get_elems__native(t){"string"==typeof t&&(t=t.split(","));var c=[];return t.forEach(function(t,e,n){var a=document.getElementById(t);if(null===a){if(null!==(a=document.getElementsByClassName(t))&&0!==a.length)for(key in a)0<=+key&&c.push(a[key])}else c.push(a[key])}),c}function apbct_show_hide_elem(t){for(var e=0,n=(t=apbct_get_elems(t)).length;e<n;e++)t[e].each(function(t,e){var n=(e=jQuery(e)).next("label")||e.prev("label")||null;e.is(":visible")?(e.hide(),n&&n.hide()):(e.show(),n&&n.show())})}function apbctSettingsDependencies(t,c){c=isNaN(c)?null:c,apbct_get_elems__native(t).forEach(function(t,e,n){console.log(t.getAttribute("id"));var a;null===c&&(c=null===t.getAttribute("disabled")?0:1),1===c?t.removeAttribute("disabled"):t.setAttribute("disabled","disabled"),null===t.getAttribute("apbct_children")||null!==(a=apbctSettingsDependencies_getState(t)&&c)&&apbctSettingsDependencies(t.getAttribute("apbct_children"),a)})}function apbctSettingsDependencies_getState(t){var e;switch(t.getAttribute("type")){case"checkbox":e=+t.checked;break;case"radio":e=+(1==+t.getAttribute("value"));break;default:e=null}return e}function apbct_settings__showDescription(t,e){var c=function(t){void 0!==t&&(0!=jQuery(t.target).parent(".apbct_long_desc").length&&!jQuery(t.target).hasClass("apbct_long_desc__cancel")||jQuery(t.target).hasClass("apbct_long_description__show"))||(jQuery(".apbct_long_desc").remove(),jQuery(document).off("click",c))};c(),t.after("<div id='apbct_long_desc__"+e+"' class='apbct_long_desc'></div>");var n=jQuery("#apbct_long_desc__"+e);n.append("<i class='icon-spin1 animate-spin'></i>").append("<div class='apbct_long_desc__angle'></div>").css({top:t.position().top-5,left:t.position().left+25}),apbct_admin_sendAJAX({action:"apbct_settings__get_description",setting_id:e},{spinner:n.children("img"),callback:function(t,e,n,a){a.empty().append("<div class='apbct_long_desc__angle'></div>").append("<i class='apbct_long_desc__cancel icon-cancel'></i>").append("<h3 class='apbct_long_desc__title'>"+t.title+"</h3>").append("<p>"+t.desc+"</p>"),jQuery(document).on("click",c)}},n)}jQuery(document).ready(function(){document.getElementsByClassName("apbct_settings-title")[0]&&"rtl"===getComputedStyle(document.getElementsByClassName("apbct_settings-title")[0]).direction&&jQuery(".apbct_switchers").css("text-align","right"),jQuery("#apbct_showApiKey").on("click",function(){jQuery(".apbct_setting---apikey").val(jQuery(".apbct_setting---apikey").attr("key")),jQuery(".apbct_setting---apikey+div").show(),jQuery(this).fadeOut(300)});var t=new Date;jQuery("#ct_admin_timezone").val(t.getTimezoneOffset()/60*-1),jQuery("#apbct_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:+jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery("#apbct_button__get_key_auto").on("click",function(){apbct_admin_sendAJAX({action:"apbct_get_key_auto"},{timeout:25e3,button:document.getElementById("apbct_button__get_key_auto"),spinner:jQuery("#apbct_button__get_key_auto .apbct_preloader_button"),callback:function(t,e,n,a){jQuery("#apbct_button__get_key_auto .apbct_success").show(300),setTimeout(function(){jQuery("#apbct_button__get_key_auto .apbct_success").hide(300)},2e3),t.reload&&document.location.reload(),t.getTemplates&&(cleantalkModal.loaded=t.getTemplates,cleantalkModal.open(),document.addEventListener("cleantalkModalClosed",function(t){document.location.reload()}))}})}),jQuery(document).on("click","#apbct_settings_templates_import_button",function(){jQuery("#apbct-ajax-result").remove();var t,c,e=jQuery("option:selected",jQuery("#apbct_settings_templates_import"));jQuery("#apbct_settings_templates_import_name").css("border-color","inherit"),void 0!==e.data("id")?(t={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},c=this,apbct_admin_sendAJAX({action:"settings_templates_import",data:t},{timeout:25e3,button:c,spinner:jQuery("#apbct_settings_templates_import_button .apbct_preloader_button"),notJson:!0,callback:function(t,e,n,a){t.success?(jQuery("<p id='apbct-ajax-result' class='success'>"+t.data+"</p>").insertAfter(jQuery(c)),jQuery("#apbct_settings_templates_import_button .apbct_success").show(300),setTimeout(function(){jQuery("#apbct_settings_templates_import_button .apbct_success").hide(300)},2e3),document.addEventListener("cleantalkModalClosed",function(t){document.location.reload()}),setTimeout(function(){cleantalkModal.close()},2e3)):jQuery("<p id='apbct-ajax-result' class='error'>"+t.data+"</p>").insertAfter(jQuery(c))}})):console.log('Attribute "data-id" not set for the option.')}),jQuery(document).on("click","#apbct_settings_templates_export_button",function(){jQuery("#apbct-ajax-result").remove();var t=jQuery("option:selected",jQuery("#apbct_settings_templates_export")),e=jQuery("#apbct_settings_templates_export_name");if(e.css("border-color","inherit"),void 0!==t.data("id")){if("new_template"===t.data("id")){var n=e.val();if(""===n)return void e.css("border-color","red");var a={template_name:n}}else a={template_id:t.data("id")};var c=this;apbct_admin_sendAJAX({action:"settings_templates_export",data:a},{timeout:25e3,button:c,spinner:jQuery("#apbct_settings_templates_export_button .apbct_preloader_button"),notJson:!0,callback:function(t,e,n,a){t.success?(jQuery("<p id='apbct-ajax-result' class='success'>"+t.data+"</p>").insertAfter(jQuery(c)),jQuery("#apbct_settings_templates_export_button .apbct_success").show(300),setTimeout(function(){jQuery("#apbct_settings_templates_export_button .apbct_success").hide(300)},2e3),document.addEventListener("cleantalkModalClosed",function(t){document.location.reload()}),setTimeout(function(){cleantalkModal.close()},2e3)):jQuery("<p id='apbct-ajax-result' class='error'>"+t.data+"</p>").insertAfter(jQuery(c))}})}else console.log('Attribute "data-id" not set for the option.')}),jQuery(document).on("click","#apbct_settings_templates_reset_button",function(){var c=this;apbct_admin_sendAJAX({action:"settings_templates_reset"},{timeout:25e3,button:c,spinner:jQuery("#apbct_settings_templates_reset_button .apbct_preloader_button"),notJson:!0,callback:function(t,e,n,a){t.success?(jQuery("<p id='apbct-ajax-result' class='success'>"+t.data+"</p>").insertAfter(jQuery(c)),jQuery("#apbct_settings_templates_reset_button .apbct_success").show(300),setTimeout(function(){jQuery("#apbct_settings_templates_reset_button .apbct_success").hide(300)},2e3),document.addEventListener("cleantalkModalClosed",function(t){document.location.reload()}),setTimeout(function(){cleantalkModal.close()},2e3)):jQuery("<p id='apbct-ajax-result' class='error'>"+t.data+"</p>").insertAfter(jQuery(c))}})}),jQuery("#apbct_button__sync").on("click",function(){apbct_admin_sendAJAX({action:"apbct_sync"},{timeout:25e3,button:document.getElementById("apbct_button__sync"),spinner:jQuery("#apbct_button__sync .apbct_preloader_button"),callback:function(t,e,n,a){jQuery(".apbct_success").show(300),setTimeout(function(){jQuery(".apbct_success").hide(300)},2e3),t.reload&&document.location.reload()}})}),ctSettingsPage.key_changed&&jQuery("#apbct_button__sync").click(),jQuery(document).on("click",".apbct_settings-long_description---show",function(){self=jQuery(this),apbct_settings__showDescription(self,self.attr("setting"))}),(jQuery("#apbct_renew_notice").length||jQuery("#apbct_trial_notice").length)&&apbct_banner_check(),jQuery(document).on("change","#apbct_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#apbct_settings_templates_export_name").show():jQuery(this).parent().parent().find("#apbct_settings_templates_export_name").hide()})});
2
  //# sourceMappingURL=cleantalk-admin-settings-page.min.js.map
js/cleantalk-admin-settings-page.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["cleantalk-admin-settings-page.js"],"names":["apbct_banner_check","bannerChecker","setInterval","apbct_admin_sendAJAX","action","callback","result","data","params","obj","close_renew_banner","jQuery","length","hide","clearInterval","apbct_get_elems","elems","tmp","i","len","split","apbct_get_elems__native","out","forEach","elem","arr","document","getElementById","getElementsByClassName","key","push","apbct_show_hide_elem","each","label","next","prev","is","show","apbctSettingsDependencies","ids","enable","isNaN","console","log","getAttribute","removeAttribute","setAttribute","state","apbctSettingsDependencies_getState","checked","apbct_settings__showDescription","setting_id","remove_desc_func","e","target","parent","hasClass","remove","off","after","append","css","top","position","left","spinner","children","empty","title","desc","on","ready","getComputedStyle","direction","val","attr","this","fadeOut","d","Date","getTimezoneOffset","dialog","modal","my","at","of","window","width","height","draggable","resizable","closeText","timeout","button","setTimeout","reload","location","ctSettingsPage","key_changed","click","self"],"mappings":"AAoEA,SAASA,qBACR,IAAIC,EAAgBC,YAAa,WAChCC,qBACC,CAACC,OAAQ,sCACT,CACCC,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACpCH,EAAOI,qBACNC,OAAO,uBAAuBC,QACjCD,OAAO,uBAAuBE,KAAK,QAChCF,OAAO,uBAAuBC,QACjCD,OAAO,uBAAuBE,KAAK,QACpCC,cAAcb,QAKhB,KAUJ,SAASc,gBAAgBC,GAErB,IAAK,IAA6BC,EAAzBC,EAAE,EAAGC,GADdH,EAAQA,EAAMI,MAAM,MACMR,OAAaM,EAAIC,EAAKD,IAC5CD,EAAMN,OAAO,IAAIK,EAAME,IACvBF,EAAME,GAAoB,IAAfD,EAAIL,OAAeD,OAAO,IAAIK,EAAME,IAAMD,EAEzD,OAAOD,EAUX,SAASK,wBAAwBL,GAGZ,iBAAVA,IACTA,EAAQA,EAAMI,MAAM,MAErB,IAAIE,EAAM,GAuBV,OArBAN,EAAMO,QAAQ,SAASC,EAAMN,EAAGO,GAG/B,IAAIR,EAAMS,SAASC,eAAeH,GAClC,GAAY,OAARP,GAQJ,GAAY,QADZA,EAAMS,SAASE,uBAAuBJ,KACJ,IAAdP,EAAIL,OACvB,IAAIiB,OAAOZ,EACE,IAAPY,KACJP,EAAIQ,KAAMb,EAAIY,WAVhBP,EAAIQ,KAAMb,EAAIY,QAgBTP,EAGR,SAASS,qBAAqBf,GAE1B,IAAK,IAAIE,EAAE,EAAGC,GADjBH,EAAQD,gBAAgBC,IACKJ,OAAQM,EAAIC,EAAKD,IACvCF,EAAME,GAAGc,KAAK,SAAUd,EAAGM,GAEvB,IAAIS,GADJT,EAAOb,OAAOa,IACGU,KAAK,UAAYV,EAAKW,KAAK,UAAY,KACpDX,EAAKY,GAAG,aACRZ,EAAKX,OACDoB,GAAOA,EAAMpB,SAEjBW,EAAKa,OACDJ,GAAOA,EAAMI,UAajC,SAASC,0BAA0BC,EAAKC,GAGvCA,EAAWC,MAAMD,GAAmB,KAATA,EAGfnB,wBAAyBkB,GAE/BhB,QAAQ,SAASC,EAAMN,EAAGO,GAE/BiB,QAAQC,IAAKnB,EAAKoB,aAAa,OAW/B,GALc,OAAXJ,IACFA,EAA2C,OAAlChB,EAAKoB,aAAa,YAAuB,EAAI,GAE5C,IAAXJ,EANyBhB,EAAKqB,gBAAgB,YADlBrB,EAAKsB,aAAa,WAAY,YASd,OAAxCtB,EAAKoB,aAAa,kBAA2B,CAChD,IAAIG,EAAQC,mCAAoCxB,IAAUgB,EAC5C,OAAVO,GACHT,0BAA2Bd,EAAKoB,aAAa,kBAAmBG,MAOpE,SAASC,mCAAoCxB,GAE5C,IAAIuB,EAEJ,OAASvB,EAAKoB,aAAc,SAC3B,IAAK,WACJG,GAASvB,EAAKyB,QACd,MACD,IAAK,QACJF,IAA0C,IAA/BvB,EAAKoB,aAAa,UAC7B,MACD,QACCG,EAAQ,KAGV,OAAOA,EAGR,SAASG,gCAAgCjB,EAAOkB,GAE/C,IAAIC,EAAmB,SAASC,QACf,IAANA,IAA6E,GAAtD1C,OAAO0C,EAAEC,QAAQC,OAAO,oBAAoB3C,SAAeD,OAAO0C,EAAEC,QAAQE,SAAS,4BAAgC7C,OAAO0C,EAAEC,QAAQE,SAAS,mCAC/K7C,OAAO,oBAAoB8C,SAC3B9C,OAAOe,UAAUgC,IAAI,QAASN,KAIhCA,IAEAnB,EAAM0B,MAAM,6BAA6BR,EAAW,oCACpD,IAAI1C,EAAME,OAAO,qBAAqBwC,GACtC1C,EAAImD,OAAO,2CACTA,OAAO,8CACPC,IAAI,CACJC,IAAK7B,EAAM8B,WAAWD,IAAM,EAC5BE,KAAM/B,EAAM8B,WAAWC,KAAO,KAIhC7D,qBACC,CAACC,OAAQ,kCAAmC+C,WAAYA,GACxD,CACCc,QAASxD,EAAIyD,SAAS,OACtB7D,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GAExCA,EAAI0D,QACFP,OAAO,8CACPA,OAAO,uDACPA,OAAO,sCAAsCtD,EAAO8D,MAAM,SAC1DR,OAAO,MAAMtD,EAAO+D,KAAK,QAE3B1D,OAAOe,UAAU4C,GAAG,QAASlB,KAG/B3C,GA3PFE,OAAOe,UAAU6C,MAAM,WAGnB7C,SAASE,uBAAuB,wBAAwB,IACoC,QAA3F4C,iBAAiB9C,SAASE,uBAAuB,wBAAwB,IAAI6C,WAC/E9D,OAAO,oBAAoBkD,IAAI,aAAc,SAK5ClD,OAAO,qBAAqB2D,GAAG,QAAS,WACpC3D,OAAO,2BAA2B+D,IAAI/D,OAAO,2BAA2BgE,KAAK,QAC7EhE,OAAO,+BAA+B0B,OACtC1B,OAAOiE,MAAMC,QAAQ,OAG5B,IAAIC,EAAI,IAAIC,KACZpE,OAAO,sBAAsB+D,IAAII,EAAEE,oBAAoB,IAAK,GAG5DrE,OAAO,0BAA0B2D,GAAG,QAAS,WAC5C3D,OAAO,gBAAgBsE,OAAO,CAC7BC,OAAM,EACN7C,MAAM,EACN0B,SAAU,CAAEoB,GAAI,SAAUC,GAAI,SAAUC,GAAIC,QAC5CC,OAAS5E,OAAO,WAAW4E,QAAU,IAAM,GAC3CC,OAAQ,OACRpB,MAAO,kBACPqB,WAAW,EACXC,WAAW,EACXC,UAAW,YAKbhF,OAAO,uBAAuB2D,GAAG,QAAS,WACzCnE,qBACC,CAACC,OAAQ,cACT,CACCwF,QAAS,KACTC,OAAQnE,SAASC,eAAe,sBAChCsC,QAAStD,OAAO,+CAChBN,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACxCE,OAAO,kBAAkB0B,KAAK,KAC9ByD,WAAW,WAAWnF,OAAO,kBAAkBE,KAAK,MAAQ,KACzDP,EAAOyF,QACTrE,SAASsE,SAASD,cAMnBE,eAAeC,aAClBvF,OAAO,uBAAuBwF,QAE/BxF,OAAOe,UAAU4C,GAAG,QAAS,0CAA2C,WACvE8B,KAAOzF,OAAOiE,MACd1B,gCAAgCkD,KAAMA,KAAKzB,KAAK,eAG7ChE,OAAO,uBAAuBC,QAAUD,OAAO,uBAAuBC,SACzEZ","file":"cleantalk-admin-settings-page.min.js","sourcesContent":["jQuery(document).ready(function(){\n\n\t// Crunch for Right to Left direction languages\n\tif(document.getElementsByClassName('apbct_settings-title')[0]) {\n\t\tif(getComputedStyle(document.getElementsByClassName('apbct_settings-title')[0]).direction === 'rtl'){\n\t\t\tjQuery('.apbct_switchers').css('text-align', 'right');\n\t\t}\n\t}\n\n\t// Show/Hide access key\n jQuery('#apbct_showApiKey').on('click', function(){\n jQuery('.apbct_setting---apikey').val(jQuery('.apbct_setting---apikey').attr('key'));\n jQuery('.apbct_setting---apikey+div').show();\n jQuery(this).fadeOut(300);\n });\n\n\tvar d = new Date();\n\tjQuery('#ct_admin_timezone').val(d.getTimezoneOffset()/60*(-1));\n\t\n\t// GDPR modal window\n\tjQuery('#apbct_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Sync button\n\tjQuery('#apbct_button__sync').on('click', function(){\n\t\tapbct_admin_sendAJAX(\n\t\t\t{action: 'apbct_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('apbct_button__sync' ),\n\t\t\t\tspinner: jQuery('#apbct_button__sync .apbct_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('.apbct_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('.apbct_success').hide(300);}, 2000)\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( ctSettingsPage.key_changed )\n\t\tjQuery('#apbct_button__sync').click();\n\n\tjQuery(document).on('click', '.apbct_settings-long_description---show', function(){\n\t\tself = jQuery(this);\n\t\tapbct_settings__showDescription(self, self.attr('setting'));\n\t});\n\n\tif (jQuery('#apbct_renew_notice').length || jQuery('#apbct_trial_notice').length) \n\t\tapbct_banner_check();\n\t\n});\n\n/**\n * Checking current account status for renew notice\n */\nfunction apbct_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tapbct_admin_sendAJAX(\n\t\t\t{action: 'apbct_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#apbct_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#apbct_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#apbct_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#apbct_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 900000);\n}\n\n/**\n * Select elems like #{selector} or .{selector}\n * Selector passed in string separated by ,\n *\n * @param elems\n * @returns {*}\n */\nfunction apbct_get_elems(elems){\n elems = elems.split(',');\n for( var i=0, len = elems.length, tmp; i < len; i++){\n tmp = jQuery('#'+elems[i]);\n elems[i] = tmp.length === 0 ? jQuery('.'+elems[i]) : tmp;\n }\n return elems;\n}\n\n/**\n * Select elems like #{selector} or .{selector}\n * Selector could be passed in a string ( separated by comma ) or in array ( [ elem1, elem2, ... ] )\n *\n * @param elems string|array\n * @returns array\n */\nfunction apbct_get_elems__native(elems){\n\n\t// Make array from a string\n\tif(typeof elems === 'string')\n\t\telems = elems.split(',');\n\n\tvar out = [];\n\n\telems.forEach(function(elem, i, arr) {\n\n\t\t// try to get elements with such IDs\n\t\tvar tmp = document.getElementById(elem);\n\t\tif (tmp !== null){\n\t\t\tout.push( tmp[key] );\n\t\t\treturn;\n\t\t}\n\n\t\t// try to get elements with such class name\n\t\t// write each elem from collection to new element of output array\n\t\ttmp = document.getElementsByClassName(elem);\n\t\tif (tmp !== null && tmp.length !==0 ){\n\t\t\tfor(key in tmp){\n\t\t\t\tif( +key >= 0 ){\n\t\t\t\t\tout.push( tmp[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn out;\n}\n\nfunction apbct_show_hide_elem(elems){\n\telems = apbct_get_elems(elems);\n for( var i=0, len = elems.length; i < len; i++){\n elems[i].each(function (i, elem) {\n elem = jQuery(elem);\n var label = elem.next('label') || elem.prev('label') || null;\n if (elem.is(\":visible\")) {\n elem.hide();\n if (label) label.hide();\n } else {\n elem.show();\n if (label) label.show();\n }\n });\n }\n}\n\n/**\n * Settings dependences. Switch|toggle depended elements state (disabled|enabled)\n * Recieve list of selectors ( without class mark (.) or id mark (#) )\n *\n * @param ids string|array Selectors\n * @param enable\n */\nfunction apbctSettingsDependencies(ids, enable){\n\n\n\tenable = ! isNaN(enable) ? enable : null;\n\n\t// Get elements\n\tvar elems = apbct_get_elems__native( ids );\n\n\telems.forEach(function(elem, i, arr){\n\n\t\tconsole.log( elem.getAttribute('id') );\n\n\t\tvar do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\n\t\t// Set defined state\n\t\tif(enable === null) // Set\n\t\t\tenable = elem.getAttribute('disabled') === null ? 0 : 1;\n\n\t\tenable === 1 ? do_enable() : do_disable();\n\n\t\tif( elem.getAttribute('apbct_children') !== null){\n\t\t\tvar state = apbctSettingsDependencies_getState( elem ) && enable;\n\t\t\tif( state !== null ) {\n\t\t\t\tapbctSettingsDependencies( elem.getAttribute('apbct_children'), state );\n\t\t\t}\n\t\t}\n\n\t});\n}\n\nfunction apbctSettingsDependencies_getState( elem ){\n\n\tvar state;\n\n\tswitch ( elem.getAttribute( 'type' ) ){\n\t\tcase 'checkbox':\n\t\t\tstate = +elem.checked;\n\t\t\tbreak;\n\t\tcase 'radio':\n\t\t\tstate = +(+elem.getAttribute('value') === 1);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstate = null;\n\t}\n\n\treturn state;\n}\n\nfunction apbct_settings__showDescription(label, setting_id){\n\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.apbct_long_desc').length == 0 || jQuery(e.target).hasClass('apbct_long_desc__cancel')) && !jQuery(e.target).hasClass('apbct_long_description__show'))){\n\t\t\tjQuery('.apbct_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tlabel.after(\"<div id='apbct_long_desc__\"+setting_id+\"' class='apbct_long_desc'></div>\");\n\tvar obj = jQuery('#apbct_long_desc__'+setting_id);\n\tobj.append(\"<i class='icon-spin1 animate-spin'></i>\")\n\t\t.append(\"<div class='apbct_long_desc__angle'></div>\")\n\t\t.css({\n\t\t\ttop: label.position().top - 5,\n\t\t\tleft: label.position().left + 25\n\t\t});\n\n\n\tapbct_admin_sendAJAX(\n\t\t{action: 'apbct_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"<div class='apbct_long_desc__angle'></div>\")\n\t\t\t\t\t.append(\"<i class='apbct_long_desc__cancel icon-cancel'></i>\")\n\t\t\t\t\t.append(\"<h3 class='apbct_long_desc__title'>\"+result.title+\"</h3>\")\n\t\t\t\t\t.append(\"<p>\"+result.desc+\"</p>\");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}"]}
1
+ {"version":3,"file":"cleantalk-admin-settings-page.min.js","sources":["cleantalk-admin-settings-page.js"],"sourcesContent":["jQuery(document).ready(function(){\n\n\t// Crunch for Right to Left direction languages\n\tif(document.getElementsByClassName('apbct_settings-title')[0]) {\n\t\tif(getComputedStyle(document.getElementsByClassName('apbct_settings-title')[0]).direction === 'rtl'){\n\t\t\tjQuery('.apbct_switchers').css('text-align', 'right');\n\t\t}\n\t}\n\n\t// Show/Hide access key\n jQuery('#apbct_showApiKey').on('click', function(){\n jQuery('.apbct_setting---apikey').val(jQuery('.apbct_setting---apikey').attr('key'));\n jQuery('.apbct_setting---apikey+div').show();\n jQuery(this).fadeOut(300);\n });\n\n\tvar d = new Date();\n\tjQuery('#ct_admin_timezone').val(d.getTimezoneOffset()/60*(-1));\n\t\n\t// GDPR modal window\n\tjQuery('#apbct_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Key KEY automatically\n\tjQuery('#apbct_button__get_key_auto').on('click', function(){\n\t\tapbct_admin_sendAJAX(\n\t\t\t{action: 'apbct_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('apbct_button__get_key_auto' ),\n\t\t\t\tspinner: jQuery('#apbct_button__get_key_auto .apbct_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#apbct_button__get_key_auto .apbct_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#apbct_button__get_key_auto .apbct_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tcleantalkModal.loaded = result.getTemplates;\n\t\t\t\t\t\tcleantalkModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"cleantalkModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#apbct_settings_templates_import_button', function(){\n\t\tjQuery('#apbct-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#apbct_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#apbct_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tapbct_admin_sendAJAX(\n\t\t\t{action: 'settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#apbct_settings_templates_import_button .apbct_preloader_button' ),\n\t\t\t\tnotJson: true,\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"<p id='apbct-ajax-result' class='success'>\" + result.data + \"</p>\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#apbct_settings_templates_import_button .apbct_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#apbct_settings_templates_import_button .apbct_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"cleantalkModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){cleantalkModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"<p id='apbct-ajax-result' class='error'>\" + result.data + \"</p>\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#apbct_settings_templates_export_button', function(){\n\t\tjQuery('#apbct-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#apbct_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#apbct_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tapbct_admin_sendAJAX(\n\t\t\t{action: 'settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#apbct_settings_templates_export_button .apbct_preloader_button' ),\n\t\t\t\tnotJson: true,\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"<p id='apbct-ajax-result' class='success'>\" + result.data + \"</p>\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#apbct_settings_templates_export_button .apbct_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#apbct_settings_templates_export_button .apbct_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"cleantalkModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){cleantalkModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"<p id='apbct-ajax-result' class='error'>\" + result.data + \"</p>\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#apbct_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tapbct_admin_sendAJAX(\n\t\t\t{action: 'settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#apbct_settings_templates_reset_button .apbct_preloader_button' ),\n\t\t\t\tnotJson: true,\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"<p id='apbct-ajax-result' class='success'>\" + result.data + \"</p>\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#apbct_settings_templates_reset_button .apbct_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#apbct_settings_templates_reset_button .apbct_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"cleantalkModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){cleantalkModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"<p id='apbct-ajax-result' class='error'>\" + result.data + \"</p>\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Sync button\n\tjQuery('#apbct_button__sync').on('click', function(){\n\t\tapbct_admin_sendAJAX(\n\t\t\t{action: 'apbct_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('apbct_button__sync' ),\n\t\t\t\tspinner: jQuery('#apbct_button__sync .apbct_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('.apbct_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('.apbct_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( ctSettingsPage.key_changed )\n\t\tjQuery('#apbct_button__sync').click();\n\n\tjQuery(document).on('click', '.apbct_settings-long_description---show', function(){\n\t\tself = jQuery(this);\n\t\tapbct_settings__showDescription(self, self.attr('setting'));\n\t});\n\n\tif (jQuery('#apbct_renew_notice').length || jQuery('#apbct_trial_notice').length) \n\t\tapbct_banner_check();\n\n\tjQuery(document).on('change', '#apbct_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#apbct_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#apbct_settings_templates_export_name').hide();\n\t\t}\n\t});\n\t\n});\n\n/**\n * Checking current account status for renew notice\n */\nfunction apbct_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tapbct_admin_sendAJAX(\n\t\t\t{action: 'apbct_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#apbct_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#apbct_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#apbct_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#apbct_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 900000);\n}\n\n/**\n * Select elems like #{selector} or .{selector}\n * Selector passed in string separated by ,\n *\n * @param elems\n * @returns {*}\n */\nfunction apbct_get_elems(elems){\n elems = elems.split(',');\n for( var i=0, len = elems.length, tmp; i < len; i++){\n tmp = jQuery('#'+elems[i]);\n elems[i] = tmp.length === 0 ? jQuery('.'+elems[i]) : tmp;\n }\n return elems;\n}\n\n/**\n * Select elems like #{selector} or .{selector}\n * Selector could be passed in a string ( separated by comma ) or in array ( [ elem1, elem2, ... ] )\n *\n * @param elems string|array\n * @returns array\n */\nfunction apbct_get_elems__native(elems){\n\n\t// Make array from a string\n\tif(typeof elems === 'string')\n\t\telems = elems.split(',');\n\n\tvar out = [];\n\n\telems.forEach(function(elem, i, arr) {\n\n\t\t// try to get elements with such IDs\n\t\tvar tmp = document.getElementById(elem);\n\t\tif (tmp !== null){\n\t\t\tout.push( tmp[key] );\n\t\t\treturn;\n\t\t}\n\n\t\t// try to get elements with such class name\n\t\t// write each elem from collection to new element of output array\n\t\ttmp = document.getElementsByClassName(elem);\n\t\tif (tmp !== null && tmp.length !==0 ){\n\t\t\tfor(key in tmp){\n\t\t\t\tif( +key >= 0 ){\n\t\t\t\t\tout.push( tmp[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn out;\n}\n\nfunction apbct_show_hide_elem(elems){\n\telems = apbct_get_elems(elems);\n for( var i=0, len = elems.length; i < len; i++){\n elems[i].each(function (i, elem) {\n elem = jQuery(elem);\n var label = elem.next('label') || elem.prev('label') || null;\n if (elem.is(\":visible\")) {\n elem.hide();\n if (label) label.hide();\n } else {\n elem.show();\n if (label) label.show();\n }\n });\n }\n}\n\n/**\n * Settings dependences. Switch|toggle depended elements state (disabled|enabled)\n * Recieve list of selectors ( without class mark (.) or id mark (#) )\n *\n * @param ids string|array Selectors\n * @param enable\n */\nfunction apbctSettingsDependencies(ids, enable){\n\n\n\tenable = ! isNaN(enable) ? enable : null;\n\n\t// Get elements\n\tvar elems = apbct_get_elems__native( ids );\n\n\telems.forEach(function(elem, i, arr){\n\n\t\tconsole.log( elem.getAttribute('id') );\n\n\t\tvar do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\n\t\t// Set defined state\n\t\tif(enable === null) // Set\n\t\t\tenable = elem.getAttribute('disabled') === null ? 0 : 1;\n\n\t\tenable === 1 ? do_enable() : do_disable();\n\n\t\tif( elem.getAttribute('apbct_children') !== null){\n\t\t\tvar state = apbctSettingsDependencies_getState( elem ) && enable;\n\t\t\tif( state !== null ) {\n\t\t\t\tapbctSettingsDependencies( elem.getAttribute('apbct_children'), state );\n\t\t\t}\n\t\t}\n\n\t});\n}\n\nfunction apbctSettingsDependencies_getState( elem ){\n\n\tvar state;\n\n\tswitch ( elem.getAttribute( 'type' ) ){\n\t\tcase 'checkbox':\n\t\t\tstate = +elem.checked;\n\t\t\tbreak;\n\t\tcase 'radio':\n\t\t\tstate = +(+elem.getAttribute('value') === 1);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstate = null;\n\t}\n\n\treturn state;\n}\n\nfunction apbct_settings__showDescription(label, setting_id){\n\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.apbct_long_desc').length == 0 || jQuery(e.target).hasClass('apbct_long_desc__cancel')) && !jQuery(e.target).hasClass('apbct_long_description__show'))){\n\t\t\tjQuery('.apbct_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tlabel.after(\"<div id='apbct_long_desc__\"+setting_id+\"' class='apbct_long_desc'></div>\");\n\tvar obj = jQuery('#apbct_long_desc__'+setting_id);\n\tobj.append(\"<i class='icon-spin1 animate-spin'></i>\")\n\t\t.append(\"<div class='apbct_long_desc__angle'></div>\")\n\t\t.css({\n\t\t\ttop: label.position().top - 5,\n\t\t\tleft: label.position().left + 25\n\t\t});\n\n\n\tapbct_admin_sendAJAX(\n\t\t{action: 'apbct_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"<div class='apbct_long_desc__angle'></div>\")\n\t\t\t\t\t.append(\"<i class='apbct_long_desc__cancel icon-cancel'></i>\")\n\t\t\t\t\t.append(\"<h3 class='apbct_long_desc__title'>\"+result.title+\"</h3>\")\n\t\t\t\t\t.append(\"<p>\"+result.desc+\"</p>\");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}"],"names":["apbct_banner_check","bannerChecker","setInterval","apbct_admin_sendAJAX","action","callback","result","data","params","obj","close_renew_banner","jQuery","length","hide","clearInterval","apbct_get_elems","elems","tmp","i","len","split","apbct_get_elems__native","out","forEach","elem","arr","document","getElementById","getElementsByClassName","key","push","apbct_show_hide_elem","each","label","next","prev","is","show","apbctSettingsDependencies","ids","enable","isNaN","console","log","getAttribute","state","removeAttribute","setAttribute","apbctSettingsDependencies_getState","checked","apbct_settings__showDescription","setting_id","remove_desc_func","e","target","parent","hasClass","remove","off","after","append","css","top","position","left","spinner","children","empty","title","desc","on","ready","getComputedStyle","direction","val","attr","this","fadeOut","d","Date","getTimezoneOffset","dialog","modal","my","at","of","window","width","height","draggable","resizable","closeText","timeout","button","setTimeout","reload","location","getTemplates","cleantalkModal","loaded","open","addEventListener","optionSelected","template_id","template_name","settings","notJson","success","insertAfter","close","templateNameInput","templateName","ctSettingsPage","key_changed","click","self","find"],"mappings":"AA0NA,SAASA,qBACR,IAAIC,EAAgBC,YAAa,WAChCC,qBACC,CAACC,OAAQ,sCACT,CACCC,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACpCH,EAAOI,qBACNC,OAAO,uBAAuBC,QACjCD,OAAO,uBAAuBE,KAAK,QAChCF,OAAO,uBAAuBC,QACjCD,OAAO,uBAAuBE,KAAK,QACpCC,cAAcb,QAKhB,KAUJ,SAASc,gBAAgBC,GAErB,IAAK,IAA6BC,EAAzBC,EAAE,EAAGC,GADdH,EAAQA,EAAMI,MAAM,MACMR,OAAaM,EAAIC,EAAKD,IAC5CD,EAAMN,OAAO,IAAIK,EAAME,IACvBF,EAAME,GAAoB,IAAfD,EAAIL,OAAeD,OAAO,IAAIK,EAAME,IAAMD,EAEzD,OAAOD,EAUX,SAASK,wBAAwBL,GAGZ,iBAAVA,IACTA,EAAQA,EAAMI,MAAM,MAErB,IAAIE,EAAM,GAuBV,OArBAN,EAAMO,QAAQ,SAASC,EAAMN,EAAGO,GAG/B,IAAIR,EAAMS,SAASC,eAAeH,GAClC,GAAY,OAARP,GAQJ,GAAY,QADZA,EAAMS,SAASE,uBAAuBJ,KACJ,IAAdP,EAAIL,OACvB,IAAIiB,OAAOZ,EACE,IAAPY,KACJP,EAAIQ,KAAMb,EAAIY,WAVhBP,EAAIQ,KAAMb,EAAIY,QAgBTP,EAGR,SAASS,qBAAqBf,GAE1B,IAAK,IAAIE,EAAE,EAAGC,GADjBH,EAAQD,gBAAgBC,IACKJ,OAAQM,EAAIC,EAAKD,IACvCF,EAAME,GAAGc,KAAK,SAAUd,EAAGM,GAEvB,IAAIS,GADJT,EAAOb,OAAOa,IACGU,KAAK,UAAYV,EAAKW,KAAK,UAAY,KACpDX,EAAKY,GAAG,aACRZ,EAAKX,OACDoB,GAAOA,EAAMpB,SAEjBW,EAAKa,OACDJ,GAAOA,EAAMI,UAajC,SAASC,0BAA0BC,EAAKC,GAGvCA,EAAWC,MAAMD,GAAmB,KAATA,EAGfnB,wBAAyBkB,GAE/BhB,QAAQ,SAASC,EAAMN,EAAGO,GAE/BiB,QAAQC,IAAKnB,EAAKoB,aAAa,OAE/B,IAUKC,EANS,OAAXL,IACFA,EAA2C,OAAlChB,EAAKoB,aAAa,YAAuB,EAAI,GAE5C,IAAXJ,EANyBhB,EAAKsB,gBAAgB,YADlBtB,EAAKuB,aAAa,WAAY,YASd,OAAxCvB,EAAKoB,aAAa,mBAEP,QADVC,EAAQG,mCAAoCxB,IAAUgB,IAEzDF,0BAA2Bd,EAAKoB,aAAa,kBAAmBC,KAOpE,SAASG,mCAAoCxB,GAE5C,IAAIqB,EAEJ,OAASrB,EAAKoB,aAAc,SAC3B,IAAK,WACJC,GAASrB,EAAKyB,QACd,MACD,IAAK,QACJJ,IAA0C,IAA/BrB,EAAKoB,aAAa,UAC7B,MACD,QACCC,EAAQ,KAGV,OAAOA,EAGR,SAASK,gCAAgCjB,EAAOkB,GAE/C,IAAIC,EAAmB,SAASC,QACf,IAANA,IAA6E,GAAtD1C,OAAO0C,EAAEC,QAAQC,OAAO,oBAAoB3C,SAAeD,OAAO0C,EAAEC,QAAQE,SAAS,4BAAgC7C,OAAO0C,EAAEC,QAAQE,SAAS,mCAC/K7C,OAAO,oBAAoB8C,SAC3B9C,OAAOe,UAAUgC,IAAI,QAASN,KAIhCA,IAEAnB,EAAM0B,MAAM,6BAA6BR,EAAW,oCACpD,IAAI1C,EAAME,OAAO,qBAAqBwC,GACtC1C,EAAImD,OAAO,2CACTA,OAAO,8CACPC,IAAI,CACJC,IAAK7B,EAAM8B,WAAWD,IAAM,EAC5BE,KAAM/B,EAAM8B,WAAWC,KAAO,KAIhC7D,qBACC,CAACC,OAAQ,kCAAmC+C,WAAYA,GACxD,CACCc,QAASxD,EAAIyD,SAAS,OACtB7D,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GAExCA,EAAI0D,QACFP,OAAO,8CACPA,OAAO,uDACPA,OAAO,sCAAsCtD,EAAO8D,MAAM,SAC1DR,OAAO,MAAMtD,EAAO+D,KAAK,QAE3B1D,OAAOe,UAAU4C,GAAG,QAASlB,KAG/B3C,GAjZFE,OAAOe,UAAU6C,MAAM,WAGnB7C,SAASE,uBAAuB,wBAAwB,IACoC,QAA3F4C,iBAAiB9C,SAASE,uBAAuB,wBAAwB,IAAI6C,WAC/E9D,OAAO,oBAAoBkD,IAAI,aAAc,SAK5ClD,OAAO,qBAAqB2D,GAAG,QAAS,WACpC3D,OAAO,2BAA2B+D,IAAI/D,OAAO,2BAA2BgE,KAAK,QAC7EhE,OAAO,+BAA+B0B,OACtC1B,OAAOiE,MAAMC,QAAQ,OAG5B,IAAIC,EAAI,IAAIC,KACZpE,OAAO,sBAAsB+D,IAAII,EAAEE,oBAAoB,IAAK,GAG5DrE,OAAO,0BAA0B2D,GAAG,QAAS,WAC5C3D,OAAO,gBAAgBsE,OAAO,CAC7BC,OAAM,EACN7C,MAAM,EACN0B,SAAU,CAAEoB,GAAI,SAAUC,GAAI,SAAUC,GAAIC,QAC5CC,OAAS5E,OAAO,WAAW4E,QAAU,IAAM,GAC3CC,OAAQ,OACRpB,MAAO,kBACPqB,WAAW,EACXC,WAAW,EACXC,UAAW,YAKbhF,OAAO,+BAA+B2D,GAAG,QAAS,WACjDnE,qBACC,CAACC,OAAQ,sBACT,CACCwF,QAAS,KACTC,OAAQnE,SAASC,eAAe,8BAChCsC,QAAStD,OAAO,uDAChBN,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACxCE,OAAO,8CAA8C0B,KAAK,KAC1DyD,WAAW,WAAWnF,OAAO,8CAA8CE,KAAK,MAAQ,KACrFP,EAAOyF,QACTrE,SAASsE,SAASD,SAChBzF,EAAO2F,eACTC,eAAeC,OAAS7F,EAAO2F,aAC/BC,eAAeE,OACf1E,SAAS2E,iBAAiB,uBAAwB,SAAUhD,GAC3D3B,SAASsE,SAASD,iBASxBpF,OAAQe,UAAW4C,GAAG,QAAS,0CAA2C,WACzE3D,OAAO,sBAAsB8C,SAC7B,IAOIlD,EAKAsF,EAZAS,EAAiB3F,OAAO,kBAAmBA,OAAO,qCAC9BA,OAAO,yCACbkD,IAAI,eAAgB,gBACG,IAA9ByC,EAAe/F,KAAK,OAI3BA,EAAO,CACVgG,YAAgBD,EAAe/F,KAAK,MACpCiG,cAAkBF,EAAe/F,KAAK,QACtCkG,SAAaH,EAAe/F,KAAK,aAE9BsF,EAASjB,KACbzE,qBACC,CAACC,OAAQ,4BAA6BG,KAAMA,GAC5C,CACCqF,QAAS,KACTC,OAAQA,EACR5B,QAAStD,OAAO,mEAChB+F,SAAS,EACTrG,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACrCH,EAAOqG,SACThG,OAAQ,6CAA+CL,EAAOC,KAAO,QAASqG,YAAajG,OAAOkF,IAClGlF,OAAO,0DAA0D0B,KAAK,KACtEyD,WAAW,WAAWnF,OAAO,0DAA0DE,KAAK,MAAQ,KACpGa,SAAS2E,iBAAiB,uBAAwB,SAAUhD,GAC3D3B,SAASsE,SAASD,WAEnBD,WAAW,WAAWI,eAAeW,SAAU,MAE/ClG,OAAQ,2CAA6CL,EAAOC,KAAO,QAASqG,YAAajG,OAAOkF,QA1BnGnD,QAAQC,IAAK,iDAkCfhC,OAAQe,UAAW4C,GAAG,QAAS,0CAA2C,WACzE3D,OAAO,sBAAsB8C,SAC7B,IAAI6C,EAAiB3F,OAAO,kBAAmBA,OAAO,qCAClDmG,EAAoBnG,OAAO,yCAE/B,GADAmG,EAAkBjD,IAAI,eAAgB,gBACG,IAA9ByC,EAAe/F,KAAK,MAA/B,CAIA,GAAkC,iBAA9B+F,EAAe/F,KAAK,MAA2B,CAClD,IAAIwG,EAAeD,EAAkBpC,MACrC,GAAqB,KAAjBqC,EAEH,YADAD,EAAkBjD,IAAI,eAAgB,OAGvC,IAAItD,EAAO,CACViG,cAAkBO,QAGfxG,EAAO,CACVgG,YAAgBD,EAAe/F,KAAK,OAGtC,IAAIsF,EAASjB,KACbzE,qBACC,CAACC,OAAQ,4BAA6BG,KAAMA,GAC5C,CACCqF,QAAS,KACTC,OAAQA,EACR5B,QAAStD,OAAO,mEAChB+F,SAAS,EACTrG,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACrCH,EAAOqG,SACThG,OAAQ,6CAA+CL,EAAOC,KAAO,QAASqG,YAAajG,OAAOkF,IAClGlF,OAAO,0DAA0D0B,KAAK,KACtEyD,WAAW,WAAWnF,OAAO,0DAA0DE,KAAK,MAAQ,KACpGa,SAAS2E,iBAAiB,uBAAwB,SAAUhD,GAC3D3B,SAASsE,SAASD,WAEnBD,WAAW,WAAWI,eAAeW,SAAU,MAE/ClG,OAAQ,2CAA6CL,EAAOC,KAAO,QAASqG,YAAajG,OAAOkF,YAnCnGnD,QAAQC,IAAK,iDA2CfhC,OAAQe,UAAW4C,GAAG,QAAS,yCAA0C,WACxE,IAAIuB,EAASjB,KACbzE,qBACC,CAACC,OAAQ,4BACT,CACCwF,QAAS,KACTC,OAAQA,EACR5B,QAAStD,OAAO,kEAChB+F,SAAS,EACTrG,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACrCH,EAAOqG,SACThG,OAAQ,6CAA+CL,EAAOC,KAAO,QAASqG,YAAajG,OAAOkF,IAClGlF,OAAO,yDAAyD0B,KAAK,KACrEyD,WAAW,WAAWnF,OAAO,yDAAyDE,KAAK,MAAQ,KACnGa,SAAS2E,iBAAiB,uBAAwB,SAAUhD,GAC3D3B,SAASsE,SAASD,WAEnBD,WAAW,WAAWI,eAAeW,SAAU,MAE/ClG,OAAQ,2CAA6CL,EAAOC,KAAO,QAASqG,YAAajG,OAAOkF,SAQrGlF,OAAO,uBAAuB2D,GAAG,QAAS,WACzCnE,qBACC,CAACC,OAAQ,cACT,CACCwF,QAAS,KACTC,OAAQnE,SAASC,eAAe,sBAChCsC,QAAStD,OAAO,+CAChBN,SAAU,SAASC,EAAQC,EAAMC,EAAQC,GACxCE,OAAO,kBAAkB0B,KAAK,KAC9ByD,WAAW,WAAWnF,OAAO,kBAAkBE,KAAK,MAAQ,KACzDP,EAAOyF,QACTrE,SAASsE,SAASD,cAMnBiB,eAAeC,aAClBtG,OAAO,uBAAuBuG,QAE/BvG,OAAOe,UAAU4C,GAAG,QAAS,0CAA2C,WACvE6C,KAAOxG,OAAOiE,MACd1B,gCAAgCiE,KAAMA,KAAKxC,KAAK,eAG7ChE,OAAO,uBAAuBC,QAAUD,OAAO,uBAAuBC,SACzEZ,qBAEDW,OAAOe,UAAU4C,GAAG,SAAU,mCAAmC,WAE7B,iBADd3D,OAAO,kBAAmBiE,MAC3BrE,KAAK,MACxBI,OAAOiE,MAAMrB,SAASA,SAAS6D,KAAK,yCAAyC/E,OAE7E1B,OAAOiE,MAAMrB,SAASA,SAAS6D,KAAK,yCAAyCvG"}
js/cleantalk-modal.min.js CHANGED
@@ -1,2 +1,2 @@
1
- cleantalkModal={open:function(e){function t(){var e="";for(key in this.styles)e+=key+":"+this.styles[key]+";";return e}var o={styles:{"z-index":"9999",position:"fixed",top:"0",left:"0",width:"100%",height:"100%",background:"rgba(0,0,0,0.5)",display:"flex","justify-content":"center","align-items":"center"},toString:t},a={styles:{position:"relative",padding:"30px",background:"#FFF",border:"1px solid rgba(0,0,0,0.75)","border-radius":"4px","box-shadow":"7px 7px 5px 0px rgba(50,50,50,0.75)"},toString:t},l={styles:{position:"absolute",background:"#FFF",width:"20px",height:"20px",border:"2px solid rgba(0,0,0,0.75)","border-radius":"15px",cursor:"pointer",top:"-8px",right:"-8px"},toString:t},n={styles:{content:'""',display:"block",position:"absolute",background:"#000","border-radius":"1px",width:"2px",height:"16px",top:"2px",left:"9px",transform:"rotate(45deg)"},toString:t},d={styles:{content:'""',display:"block",position:"absolute",background:"#000","border-radius":"1px",width:"2px",height:"16px",top:"2px",left:"9px",transform:"rotate(-45deg)"},toString:t},r={styles:{overflow:"hidden"},toString:t},i=document.createElement("style");i.setAttribute("id","cleantalk-modal-styles"),i.innerHTML="body.cleantalk-modal-opened{"+r+"}",i.innerHTML+="#cleantalk-modal{"+o+"}",i.innerHTML+="#cleantalk-modal-close{"+l+"}",i.innerHTML+="#cleantalk-modal-close:before{"+n+"}",i.innerHTML+="#cleantalk-modal-close:after{"+d+"}",document.body.append(i);var s=document.createElement("div");s.setAttribute("id","cleantalk-modal"),document.body.append(s),document.body.classList.add("cleantalk-modal-opened");var c=document.getElementById(e).cloneNode(!0);c.removeAttribute("id"),c.removeAttribute("class"),c.removeAttribute("style"),c.setAttribute("style",a),s.append(c);var p=document.createElement("div");p.setAttribute("id","cleantalk-modal-close"),c.append(p)},close:function(){document.body.classList.remove("cleantalk-modal-opened"),document.getElementById("cleantalk-modal").remove(),document.getElementById("cleantalk-modal-styles").remove()}},document.addEventListener("click",function(e){(e.target&&"cleantalk-modal"===e.target.id||"cleantalk-modal-close"===e.target.id)&&cleantalkModal.close()});
2
  //# sourceMappingURL=cleantalk-modal.min.js.map
1
+ cleantalkModal={loaded:!1,loading:!1,opened:!1,opening:!1,load:function(e){this.loaded||(this.loading=!0,callback=function(e,t,a,n){cleantalkModal.loading=!1,cleantalkModal.loaded=e,document.dispatchEvent(new CustomEvent("cleantalkModalContentLoaded",{bubbles:!0}))},("function"==typeof apbct_admin_sendAJAX?apbct_admin_sendAJAX:apbct_public_sendAJAX)({action:e},{callback:callback,notJson:!0}))},open:function(){function e(){var e="";for(key in this.styles)e+=key+":"+this.styles[key]+";";return e}var t={styles:{"z-index":"9999",position:"fixed",top:"0",left:"0",width:"100%",height:"100%",background:"rgba(0,0,0,0.5)",display:"flex","justify-content":"center","align-items":"center"},toString:e},a={styles:{position:"relative",padding:"30px",background:"#FFF",border:"1px solid rgba(0,0,0,0.75)","border-radius":"4px","box-shadow":"7px 7px 5px 0px rgba(50,50,50,0.75)"},toString:e},n={styles:{position:"absolute",background:"#FFF",width:"20px",height:"20px",border:"2px solid rgba(0,0,0,0.75)","border-radius":"15px",cursor:"pointer",top:"-8px",right:"-8px"},toString:e},o={styles:{content:'""',display:"block",position:"absolute",background:"#000","border-radius":"1px",width:"2px",height:"16px",top:"2px",left:"9px",transform:"rotate(45deg)"},toString:e},l={styles:{content:'""',display:"block",position:"absolute",background:"#000","border-radius":"1px",width:"2px",height:"16px",top:"2px",left:"9px",transform:"rotate(-45deg)"},toString:e},d={styles:{overflow:"hidden"},toString:e},i=document.createElement("style");i.setAttribute("id","cleantalk-modal-styles"),i.innerHTML="body.cleantalk-modal-opened{"+d+"}",i.innerHTML+="#cleantalk-modal-overlay{"+t+"}",i.innerHTML+="#cleantalk-modal-close{"+n+"}",i.innerHTML+="#cleantalk-modal-close:before{"+o+"}",i.innerHTML+="#cleantalk-modal-close:after{"+l+"}",document.body.append(i);var c=document.createElement("div");c.setAttribute("id","cleantalk-modal-overlay"),document.body.append(c),document.body.classList.add("cleantalk-modal-opened");var r=document.createElement("div");r.setAttribute("id","cleantalk-modal-inner"),r.setAttribute("style",a),c.append(r);var s=document.createElement("div");s.setAttribute("id","cleantalk-modal-close"),r.append(s);var p=document.createElement("div");this.loaded?p.innerHTML=this.loaded:(p.innerHTML="Loading...",this.load("get_options_template")),p.setAttribute("id","cleantalk-modal-content"),r.append(p),this.opened=!0},close:function(){document.body.classList.remove("cleantalk-modal-opened"),document.getElementById("cleantalk-modal-overlay").remove(),document.getElementById("cleantalk-modal-styles").remove(),document.dispatchEvent(new CustomEvent("cleantalkModalClosed",{bubbles:!0}))}},document.addEventListener("click",function(e){(e.target&&"cleantalk-modal-overlay"===e.target.id||"cleantalk-modal-close"===e.target.id)&&cleantalkModal.close()}),document.addEventListener("cleantalkModalContentLoaded",function(e){cleantalkModal.opened&&cleantalkModal.loaded&&(document.getElementById("cleantalk-modal-content").innerHTML=cleantalkModal.loaded)});
2
  //# sourceMappingURL=cleantalk-modal.min.js.map
js/cleantalk-modal.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cleantalk-modal.min.js","sources":["cleantalk-modal.js"],"sourcesContent":["/* Cleantalk Modal object */\ncleantalkModal = {\n\n open: function ( elementIdToShow ) {\n /* Cleantalk Modal CSS start */\n var renderCss = function () {\n var cssStr = '';\n for ( key in this.styles ) {\n cssStr += key + ':' + this.styles[key] + ';';\n }\n return cssStr;\n };\n var overlayCss = {\n styles: {\n \"z-index\": \"9999\",\n \"position\": \"fixed\",\n \"top\": \"0\",\n \"left\": \"0\",\n \"width\": \"100%\",\n \"height\": \"100%\",\n \"background\": \"rgba(0,0,0,0.5)\",\n \"display\": \"flex\",\n \"justify-content\" : \"center\",\n \"align-items\" : \"center\",\n },\n toString: renderCss\n };\n var innerCss = {\n styles: {\n \"position\" : \"relative\",\n \"padding\" : \"30px\",\n \"background\" : \"#FFF\",\n \"border\" : \"1px solid rgba(0,0,0,0.75)\",\n \"border-radius\" : \"4px\",\n \"box-shadow\" : \"7px 7px 5px 0px rgba(50,50,50,0.75)\",\n },\n toString: renderCss\n };\n var closeCss = {\n styles: {\n \"position\" : \"absolute\",\n \"background\" : \"#FFF\",\n \"width\" : \"20px\",\n \"height\" : \"20px\",\n \"border\" : \"2px solid rgba(0,0,0,0.75)\",\n \"border-radius\" : \"15px\",\n \"cursor\" : \"pointer\",\n \"top\" : \"-8px\",\n \"right\" : \"-8px\",\n },\n toString: renderCss\n };\n var closeCssBefore = {\n styles: {\n \"content\" : \"\\\"\\\"\",\n \"display\" : \"block\",\n \"position\" : \"absolute\",\n \"background\" : \"#000\",\n \"border-radius\" : \"1px\",\n \"width\" : \"2px\",\n \"height\" : \"16px\",\n \"top\" : \"2px\",\n \"left\" : \"9px\",\n \"transform\" : \"rotate(45deg)\",\n },\n toString: renderCss\n };\n var closeCssAfter = {\n styles: {\n \"content\" : \"\\\"\\\"\",\n \"display\" : \"block\",\n \"position\" : \"absolute\",\n \"background\" : \"#000\",\n \"border-radius\" : \"1px\",\n \"width\" : \"2px\",\n \"height\" : \"16px\",\n \"top\" : \"2px\",\n \"left\" : \"9px\",\n \"transform\" : \"rotate(-45deg)\",\n },\n toString: renderCss\n };\n var bodyCss = {\n styles: {\n \"overflow\" : \"hidden\",\n },\n toString: renderCss\n };\n var cleantalkModalStyle = document.createElement( 'style' );\n cleantalkModalStyle.setAttribute( 'id', 'cleantalk-modal-styles' );\n cleantalkModalStyle.innerHTML = 'body.cleantalk-modal-opened{' + bodyCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal{' + overlayCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close{' + closeCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:before{' + closeCssBefore + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:after{' + closeCssAfter + '}';\n document.body.append( cleantalkModalStyle );\n /* Cleantalk Modal CSS end */\n\n var overlay = document.createElement( 'div' );\n overlay.setAttribute( 'id', 'cleantalk-modal' );\n document.body.append( overlay );\n\n document.body.classList.add( 'cleantalk-modal-opened' );\n\n var inner = document.getElementById( elementIdToShow ).cloneNode( true );\n inner.removeAttribute( 'id' );\n inner.removeAttribute( 'class' );\n inner.removeAttribute( 'style' );\n inner.setAttribute( 'style', innerCss );\n overlay.append( inner );\n\n var close = document.createElement( 'div' );\n close.setAttribute( 'id', 'cleantalk-modal-close' );\n inner.append( close );\n },\n\n close: function () {\n document.body.classList.remove( 'cleantalk-modal-opened' );\n document.getElementById( 'cleantalk-modal' ).remove();\n document.getElementById( 'cleantalk-modal-styles' ).remove();\n }\n\n};\n\n/* Cleantalk Modal helpers */\ndocument.addEventListener('click',function( e ){\n if( e.target && e.target.id === 'cleantalk-modal' || e.target.id === 'cleantalk-modal-close' ){\n cleantalkModal.close();\n }\n});"],"names":["cleantalkModal","open","elementIdToShow","renderCss","cssStr","key","this","styles","overlayCss","z-index","position","top","left","width","height","background","display","justify-content","align-items","toString","innerCss","padding","border","border-radius","box-shadow","closeCss","cursor","right","closeCssBefore","content","transform","closeCssAfter","bodyCss","overflow","cleantalkModalStyle","document","createElement","setAttribute","innerHTML","body","append","overlay","classList","add","inner","getElementById","cloneNode","removeAttribute","close","remove","addEventListener","e","target","id"],"mappings":"AACAA,eAAiB,CAEbC,KAAM,SAAWC,GAEG,SAAZC,IACA,IAAIC,EAAS,GACb,IAAMC,OAAOC,KAAKC,OACdH,GAAUC,IAAM,IAAMC,KAAKC,OAAOF,KAAO,IAE7C,OAAOD,EALX,IAOII,EAAa,CACbD,OAAQ,CACJE,UAAW,OACXC,SAAY,QACZC,IAAO,IACPC,KAAQ,IACRC,MAAS,OACTC,OAAU,OACVC,WAAc,kBACdC,QAAW,OACXC,kBAAoB,SACpBC,cAAgB,UAEpBC,SAAUhB,GAEViB,EAAW,CACXb,OAAQ,CACJG,SAAa,WACbW,QAAY,OACZN,WAAe,OACfO,OAAW,6BACXC,gBAAkB,MAClBC,aAAe,uCAEnBL,SAAUhB,GAEVsB,EAAW,CACXlB,OAAQ,CACJG,SAAa,WACbK,WAAe,OACfF,MAAU,OACVC,OAAW,OACXQ,OAAW,6BACXC,gBAAkB,OAClBG,OAAW,UACXf,IAAQ,OACRgB,MAAU,QAEdR,SAAUhB,GAEVyB,EAAiB,CACjBrB,OAAQ,CACJsB,QAAY,KACZb,QAAY,QACZN,SAAa,WACbK,WAAe,OACfQ,gBAAkB,MAClBV,MAAU,MACVC,OAAW,OACXH,IAAQ,MACRC,KAAS,MACTkB,UAAc,iBAElBX,SAAUhB,GAEV4B,EAAgB,CAChBxB,OAAQ,CACJsB,QAAY,KACZb,QAAY,QACZN,SAAa,WACbK,WAAe,OACfQ,gBAAkB,MAClBV,MAAU,MACVC,OAAW,OACXH,IAAQ,MACRC,KAAS,MACTkB,UAAc,kBAElBX,SAAUhB,GAEV6B,EAAU,CACVzB,OAAQ,CACJ0B,SAAa,UAEjBd,SAAUhB,GAEV+B,EAAsBC,SAASC,cAAe,SAClDF,EAAoBG,aAAc,KAAM,0BACxCH,EAAoBI,UAAY,+BAAiCN,EAAU,IAC3EE,EAAoBI,WAAa,oBAAsB9B,EAAa,IACpE0B,EAAoBI,WAAa,0BAA4Bb,EAAW,IACxES,EAAoBI,WAAa,iCAAmCV,EAAiB,IACrFM,EAAoBI,WAAa,gCAAkCP,EAAgB,IACnFI,SAASI,KAAKC,OAAQN,GAGtB,IAAIO,EAAUN,SAASC,cAAe,OACtCK,EAAQJ,aAAc,KAAM,mBAC5BF,SAASI,KAAKC,OAAQC,GAEtBN,SAASI,KAAKG,UAAUC,IAAK,0BAE7B,IAAIC,EAAQT,SAASU,eAAgB3C,GAAkB4C,WAAW,GAClEF,EAAMG,gBAAiB,MACvBH,EAAMG,gBAAiB,SACvBH,EAAMG,gBAAiB,SACvBH,EAAMP,aAAc,QAASjB,GAC7BqB,EAAQD,OAAQI,GAEhB,IAAII,EAAQb,SAASC,cAAe,OACpCY,EAAMX,aAAc,KAAM,yBAC1BO,EAAMJ,OAAQQ,IAGlBA,MAAO,WACHb,SAASI,KAAKG,UAAUO,OAAQ,0BAChCd,SAASU,eAAgB,mBAAoBI,SAC7Cd,SAASU,eAAgB,0BAA2BI,WAM5Dd,SAASe,iBAAiB,QAAQ,SAAUC,IACpCA,EAAEC,QAA0B,oBAAhBD,EAAEC,OAAOC,IAA4C,0BAAhBF,EAAEC,OAAOC,KAC1DrD,eAAegD"}
1
+ {"version":3,"file":"cleantalk-modal.min.js","sources":["cleantalk-modal.js"],"sourcesContent":["/* Cleantalk Modal object */\ncleantalkModal = {\n\n // Flags\n loaded: false,\n loading: false,\n opened: false,\n opening: false,\n\n // Methods\n load: function( action ) {\n if( ! this.loaded ) {\n this.loading = true;\n callback = function( result, data, params, obj ) {\n cleantalkModal.loading = false;\n cleantalkModal.loaded = result;\n document.dispatchEvent(\n new CustomEvent( \"cleantalkModalContentLoaded\", {\n bubbles: true,\n } )\n );\n };\n if( typeof apbct_admin_sendAJAX === \"function\" ) {\n apbct_admin_sendAJAX( { 'action' : action }, { 'callback': callback, 'notJson': true } );\n } else {\n apbct_public_sendAJAX( { 'action' : action }, { 'callback': callback, 'notJson': true } );\n }\n\n }\n },\n\n open: function () {\n /* Cleantalk Modal CSS start */\n var renderCss = function () {\n var cssStr = '';\n for ( key in this.styles ) {\n cssStr += key + ':' + this.styles[key] + ';';\n }\n return cssStr;\n };\n var overlayCss = {\n styles: {\n \"z-index\": \"9999\",\n \"position\": \"fixed\",\n \"top\": \"0\",\n \"left\": \"0\",\n \"width\": \"100%\",\n \"height\": \"100%\",\n \"background\": \"rgba(0,0,0,0.5)\",\n \"display\": \"flex\",\n \"justify-content\" : \"center\",\n \"align-items\" : \"center\",\n },\n toString: renderCss\n };\n var innerCss = {\n styles: {\n \"position\" : \"relative\",\n \"padding\" : \"30px\",\n \"background\" : \"#FFF\",\n \"border\" : \"1px solid rgba(0,0,0,0.75)\",\n \"border-radius\" : \"4px\",\n \"box-shadow\" : \"7px 7px 5px 0px rgba(50,50,50,0.75)\",\n },\n toString: renderCss\n };\n var closeCss = {\n styles: {\n \"position\" : \"absolute\",\n \"background\" : \"#FFF\",\n \"width\" : \"20px\",\n \"height\" : \"20px\",\n \"border\" : \"2px solid rgba(0,0,0,0.75)\",\n \"border-radius\" : \"15px\",\n \"cursor\" : \"pointer\",\n \"top\" : \"-8px\",\n \"right\" : \"-8px\",\n },\n toString: renderCss\n };\n var closeCssBefore = {\n styles: {\n \"content\" : \"\\\"\\\"\",\n \"display\" : \"block\",\n \"position\" : \"absolute\",\n \"background\" : \"#000\",\n \"border-radius\" : \"1px\",\n \"width\" : \"2px\",\n \"height\" : \"16px\",\n \"top\" : \"2px\",\n \"left\" : \"9px\",\n \"transform\" : \"rotate(45deg)\",\n },\n toString: renderCss\n };\n var closeCssAfter = {\n styles: {\n \"content\" : \"\\\"\\\"\",\n \"display\" : \"block\",\n \"position\" : \"absolute\",\n \"background\" : \"#000\",\n \"border-radius\" : \"1px\",\n \"width\" : \"2px\",\n \"height\" : \"16px\",\n \"top\" : \"2px\",\n \"left\" : \"9px\",\n \"transform\" : \"rotate(-45deg)\",\n },\n toString: renderCss\n };\n var bodyCss = {\n styles: {\n \"overflow\" : \"hidden\",\n },\n toString: renderCss\n };\n var cleantalkModalStyle = document.createElement( 'style' );\n cleantalkModalStyle.setAttribute( 'id', 'cleantalk-modal-styles' );\n cleantalkModalStyle.innerHTML = 'body.cleantalk-modal-opened{' + bodyCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-overlay{' + overlayCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close{' + closeCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:before{' + closeCssBefore + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:after{' + closeCssAfter + '}';\n document.body.append( cleantalkModalStyle );\n /* Cleantalk Modal CSS end */\n\n var overlay = document.createElement( 'div' );\n overlay.setAttribute( 'id', 'cleantalk-modal-overlay' );\n document.body.append( overlay );\n\n document.body.classList.add( 'cleantalk-modal-opened' );\n\n var inner = document.createElement( 'div' );\n inner.setAttribute( 'id', 'cleantalk-modal-inner' );\n inner.setAttribute( 'style', innerCss );\n overlay.append( inner );\n\n var close = document.createElement( 'div' );\n close.setAttribute( 'id', 'cleantalk-modal-close' );\n inner.append( close );\n\n var content = document.createElement( 'div' );\n if ( this.loaded ) {\n content.innerHTML = this.loaded;\n } else {\n content.innerHTML = 'Loading...';\n // @ToDo Here is hardcoded parameter. Have to get this from a 'data-' attribute.\n this.load( 'get_options_template' );\n }\n content.setAttribute( 'id', 'cleantalk-modal-content' );\n inner.append( content );\n\n this.opened = true;\n },\n\n close: function () {\n document.body.classList.remove( 'cleantalk-modal-opened' );\n document.getElementById( 'cleantalk-modal-overlay' ).remove();\n document.getElementById( 'cleantalk-modal-styles' ).remove();\n document.dispatchEvent(\n new CustomEvent( \"cleantalkModalClosed\", {\n bubbles: true,\n } )\n );\n }\n\n};\n\n/* Cleantalk Modal helpers */\ndocument.addEventListener('click',function( e ){\n if( e.target && e.target.id === 'cleantalk-modal-overlay' || e.target.id === 'cleantalk-modal-close' ){\n cleantalkModal.close();\n }\n});\ndocument.addEventListener(\"cleantalkModalContentLoaded\", function( e ) {\n if( cleantalkModal.opened && cleantalkModal.loaded ) {\n document.getElementById( 'cleantalk-modal-content' ).innerHTML = cleantalkModal.loaded;\n }\n});"],"names":["cleantalkModal","loaded","loading","opened","opening","load","action","this","callback","result","data","params","obj","document","dispatchEvent","CustomEvent","bubbles","apbct_admin_sendAJAX","apbct_public_sendAJAX","notJson","open","renderCss","cssStr","key","styles","overlayCss","z-index","position","top","left","width","height","background","display","justify-content","align-items","toString","innerCss","padding","border","border-radius","box-shadow","closeCss","cursor","right","closeCssBefore","content","transform","closeCssAfter","bodyCss","overflow","cleantalkModalStyle","createElement","setAttribute","innerHTML","body","append","overlay","classList","add","inner","close","remove","getElementById","addEventListener","e","target","id"],"mappings":"AACAA,eAAiB,CAGbC,QAAQ,EACRC,SAAS,EACTC,QAAQ,EACRC,SAAS,EAGTC,KAAM,SAAUC,GACNC,KAAKN,SACPM,KAAKL,SAAU,EACfM,SAAW,SAAUC,EAAQC,EAAMC,EAAQC,GACvCZ,eAAeE,SAAU,EACzBF,eAAeC,OAASQ,EACxBI,SAASC,cACL,IAAIC,YAAa,8BAA+B,CAC5CC,SAAS,OAIe,mBAAzBC,qBACPA,qBAEAC,uBAFsB,CAAEZ,OAAWA,GAAU,CAAEE,SAAYA,SAAUW,SAAW,MAQ5FC,KAAM,WAEc,SAAZC,IACA,IAAIC,EAAS,GACb,IAAMC,OAAOhB,KAAKiB,OACdF,GAAUC,IAAM,IAAMhB,KAAKiB,OAAOD,KAAO,IAE7C,OAAOD,EALX,IAOIG,EAAa,CACbD,OAAQ,CACJE,UAAW,OACXC,SAAY,QACZC,IAAO,IACPC,KAAQ,IACRC,MAAS,OACTC,OAAU,OACVC,WAAc,kBACdC,QAAW,OACXC,kBAAoB,SACpBC,cAAgB,UAEpBC,SAAUf,GAEVgB,EAAW,CACXb,OAAQ,CACJG,SAAa,WACbW,QAAY,OACZN,WAAe,OACfO,OAAW,6BACXC,gBAAkB,MAClBC,aAAe,uCAEnBL,SAAUf,GAEVqB,EAAW,CACXlB,OAAQ,CACJG,SAAa,WACbK,WAAe,OACfF,MAAU,OACVC,OAAW,OACXQ,OAAW,6BACXC,gBAAkB,OAClBG,OAAW,UACXf,IAAQ,OACRgB,MAAU,QAEdR,SAAUf,GAEVwB,EAAiB,CACjBrB,OAAQ,CACJsB,QAAY,KACZb,QAAY,QACZN,SAAa,WACbK,WAAe,OACfQ,gBAAkB,MAClBV,MAAU,MACVC,OAAW,OACXH,IAAQ,MACRC,KAAS,MACTkB,UAAc,iBAElBX,SAAUf,GAEV2B,EAAgB,CAChBxB,OAAQ,CACJsB,QAAY,KACZb,QAAY,QACZN,SAAa,WACbK,WAAe,OACfQ,gBAAkB,MAClBV,MAAU,MACVC,OAAW,OACXH,IAAQ,MACRC,KAAS,MACTkB,UAAc,kBAElBX,SAAUf,GAEV4B,EAAU,CACVzB,OAAQ,CACJ0B,SAAa,UAEjBd,SAAUf,GAEV8B,EAAsBtC,SAASuC,cAAe,SAClDD,EAAoBE,aAAc,KAAM,0BACxCF,EAAoBG,UAAY,+BAAiCL,EAAU,IAC3EE,EAAoBG,WAAa,4BAA8B7B,EAAa,IAC5E0B,EAAoBG,WAAa,0BAA4BZ,EAAW,IACxES,EAAoBG,WAAa,iCAAmCT,EAAiB,IACrFM,EAAoBG,WAAa,gCAAkCN,EAAgB,IACnFnC,SAAS0C,KAAKC,OAAQL,GAGtB,IAAIM,EAAU5C,SAASuC,cAAe,OACtCK,EAAQJ,aAAc,KAAM,2BAC5BxC,SAAS0C,KAAKC,OAAQC,GAEtB5C,SAAS0C,KAAKG,UAAUC,IAAK,0BAE7B,IAAIC,EAAQ/C,SAASuC,cAAe,OACpCQ,EAAMP,aAAc,KAAM,yBAC1BO,EAAMP,aAAc,QAAShB,GAC7BoB,EAAQD,OAAQI,GAEhB,IAAIC,EAAQhD,SAASuC,cAAe,OACpCS,EAAMR,aAAc,KAAM,yBAC1BO,EAAMJ,OAAQK,GAEd,IAAIf,EAAUjC,SAASuC,cAAe,OACjC7C,KAAKN,OACN6C,EAAQQ,UAAY/C,KAAKN,QAEzB6C,EAAQQ,UAAY,aAEpB/C,KAAKF,KAAM,yBAEfyC,EAAQO,aAAc,KAAM,2BAC5BO,EAAMJ,OAAQV,GAEdvC,KAAKJ,QAAS,GAGlB0D,MAAO,WACHhD,SAAS0C,KAAKG,UAAUI,OAAQ,0BAChCjD,SAASkD,eAAgB,2BAA4BD,SACrDjD,SAASkD,eAAgB,0BAA2BD,SACpDjD,SAASC,cACL,IAAIC,YAAa,uBAAwB,CACrCC,SAAS,OAQzBH,SAASmD,iBAAiB,QAAQ,SAAUC,IACpCA,EAAEC,QAA0B,4BAAhBD,EAAEC,OAAOC,IAAoD,0BAAhBF,EAAEC,OAAOC,KAClEnE,eAAe6D,UAGvBhD,SAASmD,iBAAiB,8BAA+B,SAAUC,GAC3DjE,eAAeG,QAAUH,eAAeC,SACxCY,SAASkD,eAAgB,2BAA4BT,UAAYtD,eAAeC"}
lib/Cleantalk/Antispam/DisableComments.php CHANGED
@@ -46,14 +46,14 @@ class DisableComments{
46
 
47
  $types_to_disable = array();
48
 
49
- if( $this->apbct->settings['disable_comments__all'] ){
50
  $types_to_disable = array( 'page', 'post', 'media' );
51
  }else{
52
- if( $this->apbct->settings['disable_comments__posts'] )
53
  $types_to_disable[] = 'post';
54
- if( $this->apbct->settings['disable_comments__pages'] )
55
  $types_to_disable[] = 'page';
56
- if( $this->apbct->settings['disable_comments__media'] )
57
  $types_to_disable[] = 'media';
58
  }
59
 
@@ -97,7 +97,7 @@ class DisableComments{
97
 
98
  if( is_admin() ){
99
 
100
- if( $this->apbct->settings['disable_comments__all'] ){
101
  add_action( 'admin_menu', array( $this, 'admin__filter_menu' ), 999 );
102
  add_action( 'admin_print_styles-index.php', array( $this, 'admin__filter_css' ) );
103
  add_action( 'admin_print_styles-profile.php', array( $this, 'admin__filter_css' ) );
46
 
47
  $types_to_disable = array();
48
 
49
+ if( $this->apbct->settings['comments__disable_comments__all'] ){
50
  $types_to_disable = array( 'page', 'post', 'media' );
51
  }else{
52
+ if( $this->apbct->settings['comments__disable_comments__posts'] )
53
  $types_to_disable[] = 'post';
54
+ if( $this->apbct->settings['comments__disable_comments__pages'] )
55
  $types_to_disable[] = 'page';
56
+ if( $this->apbct->settings['comments__disable_comments__media'] )
57
  $types_to_disable[] = 'media';
58
  }
59
 
97
 
98
  if( is_admin() ){
99
 
100
+ if( $this->apbct->settings['comments__disable_comments__all'] ){
101
  add_action( 'admin_menu', array( $this, 'admin__filter_menu' ), 999 );
102
  add_action( 'admin_print_styles-index.php', array( $this, 'admin__filter_css' ) );
103
  add_action( 'admin_print_styles-profile.php', array( $this, 'admin__filter_css' ) );
lib/Cleantalk/ApbctWP/API.php CHANGED
@@ -37,7 +37,7 @@ class API extends \Cleantalk\Common\API
37
  // Adding agent version to data
38
  $data['agent'] = APBCT_AGENT;
39
 
40
- if($apbct->settings['use_buitin_http_api']){
41
 
42
  $args = array(
43
  'body' => $data,
37
  // Adding agent version to data
38
  $data['agent'] = APBCT_AGENT;
39
 
40
+ if($apbct->settings['wp__use_builtin_http_api']){
41
 
42
  $args = array(
43
  'body' => $data,
lib/Cleantalk/ApbctWP/CleantalkSettingsTemplates.php ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ namespace Cleantalk\ApbctWP;
5
+
6
+
7
+ class CleantalkSettingsTemplates {
8
+
9
+ private $api_key;
10
+
11
+ private static $templates;
12
+
13
+ /**
14
+ * CleantalkDefaultSettings constructor.
15
+ *
16
+ * @param $api_key
17
+ */
18
+ public function __construct( $api_key )
19
+ {
20
+ $this->api_key = $api_key;
21
+ add_filter( 'apbct_settings_action_buttons', array( $this, 'add_action_button' ), 10, 1 );
22
+ add_action( 'wp_ajax_get_options_template', array( $this, 'get_options_template_ajax' ) );
23
+ add_action( 'wp_ajax_settings_templates_export', array( $this, 'settings_templates_export_ajax' ) );
24
+ add_action( 'wp_ajax_settings_templates_import', array( $this, 'settings_templates_import_ajax' ) );
25
+ add_action( 'wp_ajax_settings_templates_reset', array( $this, 'settings_templates_reset_ajax' ) );
26
+ add_action( 'apbct_settings_template_get', array( $this, 'open_templates_dialog' ) );
27
+ }
28
+
29
+ public function add_action_button( $links )
30
+ {
31
+ $link = '<a href="#" class="ct_support_link" onclick="cleantalkModal.open()" data-content-action="get_options_template">' . __('Import/Export settings', 'cleantalk-spam-protect') . '</a>';
32
+ $links[] = $link;
33
+ return $links;
34
+ }
35
+
36
+ public function get_options_template_ajax()
37
+ {
38
+ check_ajax_referer('ct_secret_nonce', 'security');
39
+ echo $this->getHtmlContent();
40
+ die();
41
+ }
42
+
43
+ public function settings_templates_export_ajax()
44
+ {
45
+ check_ajax_referer('ct_secret_nonce', 'security');
46
+ $error_text = 'Export handler error.';
47
+ if( isset( $_POST['data'] ) && is_array( $_POST['data'] ) ) {
48
+ $template_info = $_POST['data'];
49
+ if( isset( $template_info['template_id'] ) ) {
50
+ $template_id = sanitize_text_field( $template_info['template_id'] );
51
+ $res = \Cleantalk\Common\API::method__services_templates_update( $this->api_key, $template_id );
52
+ if( is_array( $res ) && array_key_exists( 'operation_status', $res ) ) {
53
+ if( $res['operation_status'] === 'SUCCESS' ) {
54
+ wp_send_json_success( esc_html__('Success. Reloading...', 'cleantalk-spam-protect' ) );
55
+ }
56
+ if ( $res['operation_status'] === 'FAILED' ) {
57
+ wp_send_json_error( 'Error: ' . $res['operation_message'] );
58
+ }
59
+ }
60
+ $error_text = 'Template updating response is wrong.';
61
+ }
62
+ if( isset( $template_info['template_name'] ) ) {
63
+ $template_name = sanitize_text_field( $template_info['template_name'] );
64
+ $res = \Cleantalk\Common\API::method__services_templates_add( $this->api_key, $template_name );
65
+ if( is_array( $res ) && array_key_exists( 'operation_status', $res ) ) {
66
+ if( $res['operation_status'] === 'SUCCESS' ) {
67
+ wp_send_json_success( esc_html__('Success. Reloading...', 'cleantalk-spam-protect' ) );
68
+ }
69
+ if ( $res['operation_status'] === 'FAILED' ) {
70
+ wp_send_json_error( 'Error: ' . $res['operation_message'] );
71
+ }
72
+ }
73
+ $error_text = 'Template adding response is wrong.';
74
+ }
75
+ }
76
+ wp_send_json_error( 'Error: ' . $error_text );
77
+ }
78
+
79
+ public function settings_templates_import_ajax()
80
+ {
81
+ check_ajax_referer('ct_secret_nonce', 'security');
82
+ if( isset( $_POST['data'] ) && is_array( $_POST['data'] ) ) {
83
+ $template_info = $_POST['data'];
84
+ if( isset( $template_info['template_id'], $template_info['template_name'], $template_info['settings'] ) ) {
85
+ $res = apbct_set_plugin_options( $template_info['template_id'], $template_info['template_name'], $template_info['settings'] );
86
+ if( empty( $res['error'] ) ) {
87
+ wp_send_json_success( esc_html__('Success. Reloading...', 'cleantalk-spam-protect' ) );
88
+ } else {
89
+ wp_send_json_error( $res['error'] );
90
+ }
91
+ }
92
+ }
93
+ wp_send_json_error( 'Import handler error.' );
94
+ }
95
+
96
+ public function settings_templates_reset_ajax()
97
+ {
98
+ check_ajax_referer('ct_secret_nonce', 'security');
99
+ $res = apbct_reset_plugin_options();
100
+ if( empty( $res['error'] ) ) {
101
+ wp_send_json_success( esc_html__('Success. Reloading...', 'cleantalk-spam-protect' ) );
102
+ } else {
103
+ wp_send_json_error( $res['error'] );
104
+ }
105
+ }
106
+
107
+ public static function get_options_template( $api_key )
108
+ {
109
+ $res = \Cleantalk\Common\API::method__services_templates_get( $api_key );
110
+ if( is_array( $res ) ) {
111
+ if( array_key_exists( 'error', $res ) ) {
112
+ $templates = array();
113
+ } else {
114
+ $templates = $res;
115
+ }
116
+ } else {
117
+ $templates = array();
118
+ }
119
+ if( ! self::$templates ) {
120
+ self::$templates = $templates;
121
+ }
122
+ return self::$templates;
123
+ }
124
+
125
+ public function getHtmlContent( $import_only = false )
126
+ {
127
+ $templates = self::get_options_template( $this->api_key );
128
+ $title = $this->getTitle();
129
+ $out = $this->getHtmlContentImport( $templates );
130
+ if( ! $import_only ) {
131
+ $out .= $this->getHtmlContentExport( $templates );
132
+ $out .= $this->getHtmlContentReset();
133
+ }
134
+ return $title . '<br>' . $out;
135
+ }
136
+
137
+ private function getHtmlContentImport( $templates )
138
+ {
139
+ $templatesSet = '<h3>' . esc_html__( 'Import settings.', 'cleantalk-spam-protect' ) . '</h3>';
140
+
141
+ //Check available option_site parameter
142
+ if( count( $templates ) > 0 ) {
143
+ foreach( $templates as $key => $template ) {
144
+ if( empty( $template['options_site'] ) ) {
145
+ unset( $templates[$key] );
146
+ }
147
+ }
148
+ }
149
+
150
+ if( count( $templates ) === 0 ) {
151
+ $templatesSet .= esc_html__( 'There are no settings templates.', 'cleantalk-spam-protect' );
152
+ return $templatesSet . '<br><hr>';
153
+ }
154
+
155
+ $templatesSet .= '<p><select id="apbct_settings_templates_import" >';
156
+ foreach( $templates as $template ) {
157
+ $templatesSet .= "<option
158
+ data-id='" . $template['template_id'] . "'
159
+ data-name='" . $template['name'] . "''
160
+ data-settings='" . $template['options_site'] . "'>"
161
+ . $template['name']
162
+ . "</option>";
163
+ }
164
+ $templatesSet .= '</select></p>';
165
+ $button = $this->getImportButton();
166
+
167
+ return $templatesSet . '<br>' . $button . '<br><hr>';
168
+ }
169
+
170
+ public function getHtmlContentExport( $templates )
171
+ {
172
+ $templatesSet = '<h3>' . esc_html__( 'Export settings.', 'cleantalk-spam-protect' ) . '</h3>';
173
+ $templatesSet .= '<p><select id="apbct_settings_templates_export" >';
174
+ $templatesSet .= '<option data-id="new_template" checked="true">New template</option>';
175
+ foreach( $templates as $template ) {
176
+ $templatesSet .= '<option data-id="' . $template['template_id'] . '">' . $template['name'] . '</option>';
177
+ }
178
+ $templatesSet .= '</select></p>';
179
+ $templatesSet .= '<p><input type="text" id="apbct_settings_templates_export_name" name="apbct_settings_template_name" placeholder="' . esc_html__( 'Enter a template name.', 'cleantalk-spam-protect' ) . '" required /></p>';
180
+ $button = $this->getExportButton();
181
+ return $templatesSet . '<br>' . $button . '<br>';
182
+ }
183
+
184
+ public function getHtmlContentReset()
185
+ {
186
+ $content = '<h3>' . esc_html__( 'Reset settings.', 'cleantalk-spam-protect' ) . '</h3>';
187
+ return '<br><br><hr><br>' . $content . '<br>' . $this->getResetButton() . '<br>';
188
+ }
189
+
190
+ private function getTitle()
191
+ {
192
+ global $apbct;
193
+ if( isset( $apbct->data['current_settings_template_name'] ) && $apbct->data['current_settings_template_name'] ) {
194
+ $current_template_name = $apbct->data['current_settings_template_name'];
195
+ } else {
196
+ $current_template_name = 'default';
197
+ }
198
+ $content = '<h2>' . esc_html__( 'CleanTalk settings templates.', 'cleantalk-spam-protect' ) . '</h2>';
199
+ $content .= '<p>' . esc_html__( 'You are currently using:', 'cleantalk-spam-protect' ) . ' ' . $current_template_name . '</p>';
200
+ return $content;
201
+ }
202
+
203
+ private function getExportButton()
204
+ {
205
+ return '<button id="apbct_settings_templates_export_button" class="cleantalk_link cleantalk_link-manual">'
206
+ . esc_html__( 'Export settings to selected template.', 'cleantalk-spam-protect' )
207
+ . '<img alt="Preloader ico" style="margin-left: 10px;" class="apbct_preloader_button" src="' . APBCT_URL_PATH . '/inc/images/preloader2.gif" />'
208
+ . '<img alt="Success ico" style="margin-left: 10px;" class="apbct_success --hide" src="' . APBCT_URL_PATH . '/inc/images/yes.png" />'
209
+ . '</button>';
210
+ }
211
+
212
+ private function getImportButton(){
213
+ return '<button id="apbct_settings_templates_import_button" class="cleantalk_link cleantalk_link-manual">'
214
+ . esc_html__( 'Import settings from selected template.', 'cleantalk-spam-protect' )
215
+ . '<img alt="Preloader ico" style="margin-left: 10px;" class="apbct_preloader_button" src="' . APBCT_URL_PATH . '/inc/images/preloader2.gif" />'
216
+ . '<img alt="Success ico" style="margin-left: 10px;" class="apbct_success --hide" src="' . APBCT_URL_PATH . '/inc/images/yes.png" />'
217
+ . '</button>';
218
+ }
219
+
220
+ private function getResetButton(){
221
+ return '<button id="apbct_settings_templates_reset_button" class="cleantalk_link cleantalk_link-auto">'
222
+ . esc_html__( 'Reset settings to defaults.', 'cleantalk-spam-protect' )
223
+ . '<img alt="Preloader ico" style="margin-left: 10px;" class="apbct_preloader_button" src="' . APBCT_URL_PATH . '/inc/images/preloader2.gif" />'
224
+ . '<img alt="Success ico" style="margin-left: 10px;" class="apbct_success --hide" src="' . APBCT_URL_PATH . '/inc/images/yes.png" />'
225
+ . '</button>';
226
+ }
227
+
228
+ }
lib/Cleantalk/ApbctWP/DB.php CHANGED
@@ -160,4 +160,9 @@ class DB extends \Cleantalk\Common\DB
160
 
161
  return $this->result;
162
  }
 
 
 
 
 
163
  }
160
 
161
  return $this->result;
162
  }
163
+
164
+ public function get_last_error() {
165
+ global $wpdb;
166
+ return $wpdb->last_error;
167
+ }
168
  }
lib/Cleantalk/ApbctWP/Firewall/AntiCrawler.php CHANGED
@@ -241,7 +241,7 @@ class AntiCrawler extends \Cleantalk\Common\Firewall\FirewallModule{
241
  }else{
242
 
243
  if( ! Cookie::get('apbct_antibot') ) {
244
- $this->update_ac_log();
245
  }
246
 
247
  add_action( 'wp_head', array( '\Cleantalk\ApbctWP\Firewall\AntiCrawler', 'set_cookie' ) );
@@ -255,8 +255,7 @@ class AntiCrawler extends \Cleantalk\Common\Firewall\FirewallModule{
255
 
256
  }
257
 
258
- private function update_ac_log() {
259
-
260
  $interval_time = Helper::time__get_interval_start( $this->store_interval );
261
 
262
  // @todo Rename ip column to sign. Use IP + UserAgent for it.
241
  }else{
242
 
243
  if( ! Cookie::get('apbct_antibot') ) {
244
+ add_action( 'template_redirect', array( & $this, 'update_ac_log' ), 999 );
245
  }
246
 
247
  add_action( 'wp_head', array( '\Cleantalk\ApbctWP\Firewall\AntiCrawler', 'set_cookie' ) );
255
 
256
  }
257
 
258
+ public function update_ac_log() {
 
259
  $interval_time = Helper::time__get_interval_start( $this->store_interval );
260
 
261
  // @todo Rename ip column to sign. Use IP + UserAgent for it.
lib/Cleantalk/ApbctWP/Firewall/AntiFlood.php CHANGED
@@ -11,6 +11,7 @@ class AntiFlood extends \Cleantalk\Common\Firewall\FirewallModule{
11
  public $module_name = 'ANTIFLOOD';
12
 
13
  private $db__table__ac_logs;
 
14
 
15
  private $api_key = '';
16
  private $view_limit = 20;
@@ -20,7 +21,7 @@ class AntiFlood extends \Cleantalk\Common\Firewall\FirewallModule{
20
  private $chance_to_clean = 20;
21
 
22
  public $isExcluded = false;
23
-
24
  /**
25
  * AntiCrawler constructor.
26
  *
@@ -32,6 +33,7 @@ class AntiFlood extends \Cleantalk\Common\Firewall\FirewallModule{
32
 
33
  $this->db__table__logs = $log_table ?: null;
34
  $this->db__table__ac_logs = $ac_logs_table ?: null;
 
35
 
36
  foreach( $params as $param_name => $param ){
37
  $this->$param_name = isset( $this->$param_name ) ? $param : false;
@@ -53,6 +55,32 @@ class AntiFlood extends \Cleantalk\Common\Firewall\FirewallModule{
53
  $time = time() - $this->store_interval;
54
 
55
  foreach( $this->ip_array as $ip_origin => $current_ip ){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
 
57
  // Passed
58
  if( Cookie::get( 'apbct_antiflood_passed' ) === md5( $current_ip . $this->api_key ) ){
@@ -88,14 +116,14 @@ class AntiFlood extends \Cleantalk\Common\Firewall\FirewallModule{
88
  return $results;
89
  } else{
90
  // Do logging entries
91
- $this->update_ac_log();
92
  }
93
 
94
  return $results;
95
 
96
  }
97
 
98
- private function update_ac_log() {
99
 
100
  $interval_time = Helper::time__get_interval_start( $this->store_interval );
101
 
11
  public $module_name = 'ANTIFLOOD';
12
 
13
  private $db__table__ac_logs;
14
+ private $db__table__ac_ua_bl;
15
 
16
  private $api_key = '';
17
  private $view_limit = 20;
21
  private $chance_to_clean = 20;
22
 
23
  public $isExcluded = false;
24
+
25
  /**
26
  * AntiCrawler constructor.
27
  *
33
 
34
  $this->db__table__logs = $log_table ?: null;
35
  $this->db__table__ac_logs = $ac_logs_table ?: null;
36
+ $this->db__table__ac_ua_bl= defined('APBCT_TBL_AC_UA_BL') ? APBCT_TBL_AC_UA_BL : null;
37
 
38
  foreach( $params as $param_name => $param ){
39
  $this->$param_name = isset( $this->$param_name ) ? $param : false;
55
  $time = time() - $this->store_interval;
56
 
57
  foreach( $this->ip_array as $ip_origin => $current_ip ){
58
+
59
+ // UA check
60
+ $ua_bl_results = $this->db->fetch_all(
61
+ "SELECT * FROM " . $this->db__table__ac_ua_bl . " ORDER BY `ua_status` DESC;"
62
+ );
63
+
64
+ if( ! empty( $ua_bl_results ) ){
65
+
66
+ foreach( $ua_bl_results as $ua_bl_result ){
67
+
68
+ if( ! empty( $ua_bl_result['ua_template'] ) && preg_match( "%". str_replace( '"', '', $ua_bl_result['ua_template'] ) ."%i", Server::get('HTTP_USER_AGENT') ) ) {
69
+
70
+ $this->ua_id = $ua_bl_result['id'];
71
+
72
+ if( $ua_bl_result['ua_status'] == 1 ) {
73
+ // Whitelisted
74
+ $results[] = array('ip' => $current_ip, 'is_personal' => false, 'status' => 'PASS_ANTIFLOOD_UA',);
75
+ return $results;
76
+ break;
77
+ }
78
+
79
+ }
80
+
81
+ }
82
+
83
+ }
84
 
85
  // Passed
86
  if( Cookie::get( 'apbct_antiflood_passed' ) === md5( $current_ip . $this->api_key ) ){
116
  return $results;
117
  } else{
118
  // Do logging entries
119
+ add_action( 'template_redirect', array( & $this, 'update_ac_log' ), 999 );
120
  }
121
 
122
  return $results;
123
 
124
  }
125
 
126
+ public function update_ac_log() {
127
 
128
  $interval_time = Helper::time__get_interval_start( $this->store_interval );
129
 
lib/Cleantalk/ApbctWP/Firewall/SFW.php CHANGED
@@ -95,7 +95,7 @@ class SFW extends \Cleantalk\Common\Firewall\FirewallModule {
95
  $this->update_log( $current_ip, 'PASS_SFW' );
96
 
97
  if( $this->sfw_counter ){
98
- $this->apbct->data['sfw_counter']['all'] ++;
99
  $this->apbct->saveData();
100
  }
101
 
@@ -191,7 +191,7 @@ class SFW extends \Cleantalk\Common\Firewall\FirewallModule {
191
  public function actions_for_denied( $result ){
192
 
193
  if( $this->sfw_counter ){
194
- $this->apbct->data['sfw_counter']['blocked']++;
195
  $this->apbct->saveData();
196
  }
197
 
@@ -328,6 +328,8 @@ class SFW extends \Cleantalk\Common\Firewall\FirewallModule {
328
 
329
  $value['status'] = $value['status'] === 'DENY_ANTIFLOOD' ? 'FLOOD_PROTECTION' : $value['status'];
330
  $value['status'] = $value['status'] === 'PASS_ANTIFLOOD' ? 'FLOOD_PROTECTION' : $value['status'];
 
 
331
 
332
  $value['status'] = $value['status'] === 'PASS_SFW__BY_COOKIE' ? null : $value['status'];
333
  $value['status'] = $value['status'] === 'PASS_SFW' ? null : $value['status'];
@@ -399,7 +401,7 @@ class SFW extends \Cleantalk\Common\Firewall\FirewallModule {
399
  if( empty( $result['error'] ) ){
400
 
401
  // User-Agents blacklist
402
- if( ! empty( $result['file_ua_url'] ) && $apbct->settings['sfw__anti_crawler'] ){
403
  $ua_bl_res = AntiCrawler::update( trim( $result['file_ua_url'] ) );
404
  if( ! empty( $ua_bl_res['error'] ) )
405
  $apbct->error_add( 'sfw_update', $ua_bl_res['error'] );
@@ -541,6 +543,41 @@ class SFW extends \Cleantalk\Common\Firewall\FirewallModule {
541
  }
542
  }
543
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
544
  /**
545
  * Creatin a temporary updating table
546
  *
95
  $this->update_log( $current_ip, 'PASS_SFW' );
96
 
97
  if( $this->sfw_counter ){
98
+ $this->apbct->data['admin_bar__sfw_counter']['all'] ++;
99
  $this->apbct->saveData();
100
  }
101
 
191
  public function actions_for_denied( $result ){
192
 
193
  if( $this->sfw_counter ){
194
+ $this->apbct->data['admin_bar__sfw_counter']['blocked']++;
195
  $this->apbct->saveData();
196
  }
197
 
328
 
329
  $value['status'] = $value['status'] === 'DENY_ANTIFLOOD' ? 'FLOOD_PROTECTION' : $value['status'];
330
  $value['status'] = $value['status'] === 'PASS_ANTIFLOOD' ? 'FLOOD_PROTECTION' : $value['status'];
331
+ $value['status'] = $value['status'] === 'DENY_ANTIFLOOD_UA' ? 'FLOOD_PROTECTION' : $value['status'];
332
+ $value['status'] = $value['status'] === 'PASS_ANTIFLOOD_UA' ? 'FLOOD_PROTECTION' : $value['status'];
333
 
334
  $value['status'] = $value['status'] === 'PASS_SFW__BY_COOKIE' ? null : $value['status'];
335
  $value['status'] = $value['status'] === 'PASS_SFW' ? null : $value['status'];
401
  if( empty( $result['error'] ) ){
402
 
403
  // User-Agents blacklist
404
+ if( ! empty( $result['file_ua_url'] ) && ( $apbct->settings['sfw__anti_crawler'] || $apbct->settings['sfw__anti_flood'] ) ){
405
  $ua_bl_res = AntiCrawler::update( trim( $result['file_ua_url'] ) );
406
  if( ! empty( $ua_bl_res['error'] ) )
407
  $apbct->error_add( 'sfw_update', $ua_bl_res['error'] );
543
  }
544
  }
545
 
546
+ public static function firewall_update__write_to_db__exclusions( $db, $db__table__data ) {
547
+
548
+ $query = 'INSERT INTO `' . $db__table__data . '` (network, mask, status) VALUES ';
549
+
550
+ $exclusions = array();
551
+
552
+ //Exclusion for servers IP (SERVER_ADDR)
553
+ if ( Server::get('HTTP_HOST') ) {
554
+
555
+ // Exceptions for local hosts
556
+ if( ! in_array( Server::get_domain(), array( 'lc', 'loc', 'lh' ) ) ){
557
+ $exclusions[] = Helper::dns__resolve( Server::get( 'HTTP_HOST' ) );
558
+ $exclusions[] = '127.0.0.1';
559
+ }
560
+ }
561
+
562
+ foreach ( $exclusions as $exclusion ) {
563
+ if ( Helper::ip__validate( $exclusion ) && sprintf( '%u', ip2long( $exclusion ) ) ) {
564
+ $query .= '(' . sprintf( '%u', ip2long( $exclusion ) ) . ', ' . sprintf( '%u', bindec( str_repeat( '1', 32 ) ) ) . ', 1),';
565
+ }
566
+ }
567
+
568
+ if( $exclusions ){
569
+
570
+ $sql_result = $db->execute( substr( $query, 0, - 1 ) . ';' );
571
+
572
+ return $sql_result === false
573
+ ? array( 'error' => 'COULD_NOT_WRITE_TO_DB 4: ' . $db->get_last_error() )
574
+ : count( $exclusions );
575
+ }
576
+
577
+ return 0;
578
+
579
+ }
580
+
581
  /**
582
  * Creatin a temporary updating table
583
  *
lib/Cleantalk/ApbctWP/Helper.php CHANGED
@@ -85,7 +85,7 @@ class Helper extends \Cleantalk\Common\Helper
85
  $result__rc_check_website = static::http__request(
86
  get_option( 'siteurl' ),
87
  array_merge( $request_params__default, $request_params, array( 'test' => 'test' ) ),
88
- array( 'get', )
89
  );
90
 
91
  if( empty( $result__rc_check_website['error'] ) ){
85
  $result__rc_check_website = static::http__request(
86
  get_option( 'siteurl' ),
87
  array_merge( $request_params__default, $request_params, array( 'test' => 'test' ) ),
88
+ array( 'get', 'dont_split_to_array' )
89
  );
90
 
91
  if( empty( $result__rc_check_website['error'] ) ){
lib/Cleantalk/ApbctWP/State.php CHANGED
@@ -9,7 +9,7 @@ use ArrayObject;
9
  *
10
  * @package Antiospam Plugin by CleanTalk
11
  * @subpackage State
12
- * @Version 2.0
13
  * @author Cleantalk team (welcome@cleantalk.org)
14
  * @copyright (C) 2014 CleanTalk team (http://cleantalk.org)
15
  * @license GNU/GPL: http://www.gnu.org/copyleft/gpl.html
@@ -56,81 +56,81 @@ class State
56
  public $storage = array();
57
  public $integrations = array();
58
  public $def_settings = array(
59
-
60
- 'spam_firewall' => 1,
 
 
 
61
  'sfw__anti_flood' => 0,
62
  'sfw__anti_flood__view_limit' => 20,
63
  'sfw__anti_crawler' => 1,
64
  'sfw__use_delete_to_clear_table' => 0,
65
 
66
- 'apikey' => '',
67
- 'autoPubRevelantMess' => 0,
68
-
69
  /* Forms for protection */
70
- 'registrations_test' => 1,
71
- 'comments_test' => 1,
72
- 'contact_forms_test' => 1,
73
- 'general_contact_forms_test' => 1, // Antispam test for unsupported and untested contact forms
74
- 'wc_checkout_test' => 1, // WooCommerce checkout default test
75
- 'wc_register_from_order' => 1, // Woocommerce registration during checkout
76
- 'search_test' => 1, // Test deafult Wordpress form
77
- 'check_external' => 0,
78
- 'check_external__capture_buffer' => 0,
79
- 'check_internal' => 0,
80
 
81
  /* Comments and messages */
82
- 'disable_comments__all' => 0,
83
- 'disable_comments__posts' => 0,
84
- 'disable_comments__pages' => 0,
85
- 'disable_comments__media' => 0,
86
- 'bp_private_messages' => 1, //buddyPress private messages test => ON
87
- 'check_comments_number' => 1,
88
- 'remove_old_spam' => 0,
89
- 'remove_comments_links' => 0, // Removes links from approved comments
90
- 'show_check_links' => 1, // Shows check link to Cleantalk's DB.
91
- 'manage_comments_on_public_page' => 0, // Allows to control comments on public page.
92
 
93
- // Data processing
94
- 'protect_logged_in' => 1, // Do anit-spam tests to for logged in users.
95
- 'use_ajax' => 1,
96
- 'use_static_js_key' => -1,
97
- 'general_postdata_test' => 0, //CAPD
98
- 'set_cookies'=> 1, // Disable cookies generatation to be compatible with Varnish.
99
- 'set_cookies__sessions'=> 0, // Use alt sessions for cookies.
100
- 'ssl_on' => 0, // Secure connection to servers
101
- 'use_buitin_http_api' => 1, // Using Wordpress HTTP built in API
102
 
103
  // Exclusions
104
  'exclusions__urls' => '',
105
  'exclusions__urls__use_regexp' => 0,
106
  'exclusions__fields' => '',
107
  'exclusions__fields__use_regexp' => 0,
108
- 'exclusions__roles' => array('Administrator'),
109
 
110
  // Administrator Panel
111
- 'show_adminbar' => 1, // Show the admin bar.
112
- 'all_time_counter' => 0,
113
- 'daily_counter' => 0,
114
- 'sfw_counter' => 0,
115
-
116
- //Others
117
- 'user_token' => '',
118
- 'collect_details' => 0, // Collect details about browser of the visitor.
119
- 'send_connection_reports' => 0, //Send connection reports to Cleantalk servers
120
- 'async_js' => 0,
121
- 'debug_ajax' => 0,
122
 
123
  // GDPR
124
- 'gdpr_enabled' => 0,
125
- 'gdpr_text' => 'By using this form you agree with the storage and processing of your data by using the Privacy Policy on this website.',
126
 
127
  // Msic
128
- 'store_urls' => 1,
129
- 'store_urls__sessions' => 1,
130
- 'comment_notify' => 1,
131
- 'comment_notify__roles' => array( 'administrator' ),
132
- 'complete_deactivation' => 0,
133
- 'dashboard_widget__show' => 1,
 
 
 
 
 
 
 
 
134
  );
135
 
136
  public $def_data = array(
@@ -141,6 +141,8 @@ class State
141
  'js_keys_store_days' => 14, // JavaScript keys store days - 8 days now
142
  'js_key_lifetime' => 86400, // JavaScript key life time in seconds - 1 day now
143
  'last_remote_call' => 0, //Timestam of last remote call
 
 
144
 
145
  // Antispam
146
  'spam_store_days' => 15, // Days before delete comments from folder Spam
@@ -173,11 +175,11 @@ class State
173
  'array_accepted' => array(),
174
  'array_blocked' => array(),
175
  'current_hour' => '',
176
- 'sfw_counter' => array(
177
  'all' => 0,
178
  'blocked' => 0,
179
  ),
180
- 'all_time_counter' => array(
181
  'accepted' => 0,
182
  'blocked' => 0,
183
  ),
@@ -209,17 +211,17 @@ class State
209
 
210
  // Key
211
  'apikey' => '',
212
- 'allow_custom_key' => 1,
213
- 'allow_custom_settings' => 1,
214
 
215
  // White label settings
216
- 'white_label' => 0,
217
- 'white_label__hoster_key' => '',
218
- 'white_label__plugin_name' => 'Anti-Spam by CleanTalk',
219
- 'use_settings_template' => 0,
220
- 'use_settings_template_apply_for_new' => 0,
221
- 'use_settings_template_apply_for_current' => 0,
222
- 'use_settings_template_apply_for_current_list_sites' => '',
223
  );
224
 
225
  public $def_network_data = array(
@@ -378,7 +380,7 @@ class State
378
  */
379
  public function saveSettings()
380
  {
381
- update_option($this->option_prefix.'_settings', (array)$this->settings);
382
  }
383
 
384
  /**
9
  *
10
  * @package Antiospam Plugin by CleanTalk
11
  * @subpackage State
12
+ * @Version 2.1
13
  * @author Cleantalk team (welcome@cleantalk.org)
14
  * @copyright (C) 2014 CleanTalk team (http://cleantalk.org)
15
  * @license GNU/GPL: http://www.gnu.org/copyleft/gpl.html
56
  public $storage = array();
57
  public $integrations = array();
58
  public $def_settings = array(
59
+
60
+ 'apikey' => '',
61
+
62
+ /* SpamFireWall settings */
63
+ 'sfw__enabled' => 1,
64
  'sfw__anti_flood' => 0,
65
  'sfw__anti_flood__view_limit' => 20,
66
  'sfw__anti_crawler' => 1,
67
  'sfw__use_delete_to_clear_table' => 0,
68
 
 
 
 
69
  /* Forms for protection */
70
+ 'forms__registrations_test' => 1,
71
+ 'forms__comments_test' => 1,
72
+ 'forms__contact_forms_test' => 1,
73
+ 'forms__general_contact_forms_test' => 1, // Antispam test for unsupported and untested contact forms
74
+ 'forms__wc_checkout_test' => 1, // WooCommerce checkout default test
75
+ 'forms__wc_register_from_order' => 1, // Woocommerce registration during checkout
76
+ 'forms__search_test' => 1, // Test deafult Wordpress form
77
+ 'forms__check_external' => 0,
78
+ 'forms__check_external__capture_buffer' => 0,
79
+ 'forms__check_internal' => 0,
80
 
81
  /* Comments and messages */
82
+ 'comments__disable_comments__all' => 0,
83
+ 'comments__disable_comments__posts' => 0,
84
+ 'comments__disable_comments__pages' => 0,
85
+ 'comments__disable_comments__media' => 0,
86
+ 'comments__bp_private_messages' => 1, //buddyPress private messages test => ON
87
+ 'comments__check_comments_number' => 1,
88
+ 'comments__remove_old_spam' => 0,
89
+ 'comments__remove_comments_links' => 0, // Removes links from approved comments
90
+ 'comments__show_check_links' => 1, // Shows check link to Cleantalk's DB.
91
+ 'comments__manage_comments_on_public_page' => 0, // Allows to control comments on public page.
92
 
93
+ /* Data processing */
94
+ 'data__protect_logged_in' => 1, // Do anti-spam tests to for logged in users.
95
+ 'data__use_ajax' => 1,
96
+ 'data__use_static_js_key' => -1,
97
+ 'data__general_postdata_test' => 0, //CAPD
98
+ 'data__set_cookies' => 1, // Disable cookies generatation to be compatible with Varnish.
99
+ 'data__set_cookies__sessions' => 0, // Use alt sessions for cookies.
100
+ 'data__ssl_on' => 0, // Secure connection to servers
 
101
 
102
  // Exclusions
103
  'exclusions__urls' => '',
104
  'exclusions__urls__use_regexp' => 0,
105
  'exclusions__fields' => '',
106
  'exclusions__fields__use_regexp' => 0,
107
+ 'exclusions__roles' => array('Administrator'),
108
 
109
  // Administrator Panel
110
+ 'admin_bar__show' => 1, // Show the admin bar.
111
+ 'admin_bar__all_time_counter' => 0,
112
+ 'admin_bar__daily_counter' => 0,
113
+ 'admin_bar__sfw_counter' => 0,
 
 
 
 
 
 
 
114
 
115
  // GDPR
116
+ 'gdpr__enabled' => 0,
117
+ 'gdpr__text' => 'By using this form you agree with the storage and processing of your data by using the Privacy Policy on this website.',
118
 
119
  // Msic
120
+ 'misc__collect_details' => 0, // Collect details about browser of the visitor.
121
+ 'misc__send_connection_reports' => 0, // Send connection reports to Cleantalk servers
122
+ 'misc__async_js' => 0,
123
+ 'misc__store_urls' => 1,
124
+ 'misc__store_urls__sessions' => 1,
125
+ 'misc__complete_deactivation' => 0,
126
+ 'misc__debug_ajax' => 0,
127
+
128
+ /* WordPress */
129
+ 'wp__use_builtin_http_api' => 1, // Using Wordpress HTTP built in API
130
+ 'wp__comment_notify' => 1,
131
+ 'wp__comment_notify__roles' => array( 'administrator' ),
132
+ 'wp__dashboard_widget__show' => 1,
133
+
134
  );
135
 
136
  public $def_data = array(
141
  'js_keys_store_days' => 14, // JavaScript keys store days - 8 days now
142
  'js_key_lifetime' => 86400, // JavaScript key life time in seconds - 1 day now
143
  'last_remote_call' => 0, //Timestam of last remote call
144
+ 'current_settings_template_id' => null, // Loaded settings template id
145
+ 'current_settings_template_name' => null, // Loaded settings template name
146
 
147
  // Antispam
148
  'spam_store_days' => 15, // Days before delete comments from folder Spam
175
  'array_accepted' => array(),
176
  'array_blocked' => array(),
177
  'current_hour' => '',
178
+ 'admin_bar__sfw_counter' => array(
179
  'all' => 0,
180
  'blocked' => 0,
181
  ),
182
+ 'admin_bar__all_time_counter' => array(
183
  'accepted' => 0,
184
  'blocked' => 0,
185
  ),
211
 
212
  // Key
213
  'apikey' => '',
214
+ 'multisite__allow_custom_key' => 1,
215
+ 'multisite__allow_custom_settings' => 1,
216
 
217
  // White label settings
218
+ 'multisite__white_label' => 0,
219
+ 'multisite__white_label__hoster_key' => '',
220
+ 'multisite__white_label__plugin_name' => 'Anti-Spam by CleanTalk',
221
+ 'multisite__use_settings_template' => 0,
222
+ 'multisite__use_settings_template_apply_for_new' => 0,
223
+ 'multisite__use_settings_template_apply_for_current' => 0,
224
+ 'multisite__use_settings_template_apply_for_current_list_sites' => '',
225
  );
226
 
227
  public $def_network_data = array(
380
  */
381
  public function saveSettings()
382
  {
383
+ return update_option($this->option_prefix.'_settings', (array)$this->settings);
384
  }
385
 
386
  /**
lib/Cleantalk/Common/API.php CHANGED
@@ -596,6 +596,78 @@ class API
596
 
597
  return $result;
598
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
599
 
600
  /**
601
  * Function sends raw request to API server
@@ -768,6 +840,13 @@ class API
768
  return $out;
769
 
770
  break;
 
 
 
 
 
 
 
771
 
772
  default:
773
  return isset($result['data']) && is_array($result['data'])
596
 
597
  return $result;
598
  }
599
+
600
+ /**
601
+ * Settings tempaltes get API method wrapper
602
+ *
603
+ * @param string $api_key
604
+ * @param bool $do_check
605
+ *
606
+ * @return array|bool|mixed
607
+ */
608
+ static public function method__services_templates_get( $api_key, $do_check = true)
609
+ {
610
+ $request = array(
611
+ 'method_name' => 'services_templates_get',
612
+ 'auth_key' => $api_key,
613
+ 'mode' => 'site',
614
+ );
615
+
616
+ $result = static::send_request( $request );
617
+ $result = $do_check ? static::check_response($result, 'services_templates_get') : $result;
618
+
619
+ return $result;
620
+ }
621
+
622
+ /**
623
+ * Settings tempaltes add API method wrapper
624
+ *
625
+ * @param string $api_key
626
+ * @param null $template_name
627
+ * @param bool $do_check
628
+ *
629
+ * @return array|bool|mixed
630
+ */
631
+ static public function method__services_templates_add( $api_key, $template_name = null, $do_check = true)
632
+ {
633
+ $request = array(
634
+ 'method_name' => 'services_templates_add',
635
+ 'auth_key' => $api_key,
636
+ 'name' => $template_name,
637
+ 'options_site'=> apbct_get_plugin_options(),
638
+ );
639
+
640
+ $result = static::send_request( $request );
641
+ $result = $do_check ? static::check_response($result, 'services_templates_add') : $result;
642
+
643
+ return $result;
644
+ }
645
+
646
+ /**
647
+ * Settings tempaltes add API method wrapper
648
+ *
649
+ * @param string $api_key
650
+ * @param int $template_id
651
+ * @param null $template_name
652
+ * @param bool $do_check
653
+ *
654
+ * @return array|bool|mixed
655
+ */
656
+ static public function method__services_templates_update( $api_key, $template_id, $template_name = null, $do_check = true)
657
+ {
658
+ $request = array(
659
+ 'method_name' => 'services_templates_update',
660
+ 'auth_key' => $api_key,
661
+ 'template_id' => $template_id,
662
+ 'name' => $template_name,
663
+ 'options_site'=> apbct_get_plugin_options(),
664
+ );
665
+
666
+ $result = static::send_request( $request );
667
+ $result = $do_check ? static::check_response($result, 'services_templates_update') : $result;
668
+
669
+ return $result;
670
+ }
671
 
672
  /**
673
  * Function sends raw request to API server
840
  return $out;
841
 
842
  break;
843
+
844
+ case 'services_templates_add' :
845
+ case 'services_templates_update' :
846
+ return isset( $result['data'] ) && is_array( $result['data'] ) && count( $result['data'] ) === 1
847
+ ? $result['data'][0]
848
+ : array('error' => 'NO_DATA');
849
+ break;
850
 
851
  default:
852
  return isset($result['data']) && is_array($result['data'])
lib/Cleantalk/Common/Firewall.php CHANGED
@@ -35,9 +35,11 @@ class Firewall
35
  // Lowest
36
  'PASS_SFW',
37
  'PASS_SFW__BY_COOKIE',
 
38
  'PASS_ANTIFLOOD',
39
  'PASS_ANTICRAWLER_UA',
40
  'PASS_ANTICRAWLER',
 
41
  'DENY_ANTIFLOOD',
42
  'DENY_ANTICRAWLER_UA',
43
  'DENY_ANTICRAWLER',
@@ -128,7 +130,7 @@ class Firewall
128
  foreach ( $this->fw_modules as $module ) {
129
  if( array_key_exists( $module->module_name, $results ) ){
130
  foreach ( $results[$module->module_name] as $result ) {
131
- if( in_array( $result['status'], array( 'PASS_SFW__BY_WHITELIST', 'PASS_SFW', 'PASS_ANTIFLOOD', 'PASS_ANTICRAWLER', 'PASS_ANTICRAWLER_UA' ) ) ){
132
  continue;
133
  }
134
  $module->update_log( $result['ip'], $result['status'] );
35
  // Lowest
36
  'PASS_SFW',
37
  'PASS_SFW__BY_COOKIE',
38
+ 'PASS_ANTIFLOOD_UA',
39
  'PASS_ANTIFLOOD',
40
  'PASS_ANTICRAWLER_UA',
41
  'PASS_ANTICRAWLER',
42
+ 'DENY_ANTIFLOOD_UA',
43
  'DENY_ANTIFLOOD',
44
  'DENY_ANTICRAWLER_UA',
45
  'DENY_ANTICRAWLER',
130
  foreach ( $this->fw_modules as $module ) {
131
  if( array_key_exists( $module->module_name, $results ) ){
132
  foreach ( $results[$module->module_name] as $result ) {
133
+ if( in_array( $result['status'], array( 'PASS_SFW__BY_WHITELIST', 'PASS_SFW', 'PASS_ANTIFLOOD', 'PASS_ANTICRAWLER', 'PASS_ANTICRAWLER_UA', 'PASS_ANTIFLOOD_UA' ) ) ){
134
  continue;
135
  }
136
  $module->update_log( $result['ip'], $result['status'] );
lib/Cleantalk/Common/Firewall/FirewallModule.php CHANGED
@@ -81,6 +81,22 @@ class FirewallModule extends FirewallModule_abstract {
81
  header('Pragma: no-cache');
82
  header("HTTP/1.0 403 Forbidden");
83
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
 
85
  }
86
  }
81
  header('Pragma: no-cache');
82
  header("HTTP/1.0 403 Forbidden");
83
  }
84
+
85
+ if(! defined('DONOTCACHEPAGE') ){
86
+ define('DONOTCACHEPAGE', true);
87
+ }
88
+ if(! defined('DONOTCACHEDB')){
89
+ define('DONOTCACHEDB', true);
90
+ }
91
+ if(! defined('DONOTCDN')){
92
+ define('DONOTCDN', true);
93
+ }
94
+ if(! defined('DONOTCACHEOBJECT')){
95
+ define('DONOTCACHEOBJECT', true);
96
+ }
97
+ if( function_exists( 'wpfc_exclude_current_page' ) ) {
98
+ wpfc_exclude_current_page();
99
+ }
100
 
101
  }
102
  }
lib/Cleantalk/Common/Schema.php CHANGED
@@ -26,7 +26,7 @@ class Schema
26
  'sfw_logs' => 'CREATE TABLE IF NOT EXISTS `%scleantalk_sfw_logs` (
27
  `id` VARCHAR(40) NOT NULL,
28
  `ip` VARCHAR(15) NOT NULL,
29
- `status` ENUM(\'PASS_SFW\',\'DENY_SFW\',\'PASS_SFW__BY_WHITELIST\',\'PASS_SFW__BY_COOKIE\',\'DENY_ANTICRAWLER\',\'PASS_ANTICRAWLER\',\'DENY_ANTICRAWLER_UA\',\'PASS_ANTICRAWLER_UA\',\'DENY_ANTIFLOOD\',\'PASS_ANTIFLOOD\') NULL DEFAULT NULL,
30
  `all_entries` INT NOT NULL,
31
  `blocked_entries` INT NOT NULL,
32
  `entries_timestamp` INT NOT NULL,
26
  'sfw_logs' => 'CREATE TABLE IF NOT EXISTS `%scleantalk_sfw_logs` (
27
  `id` VARCHAR(40) NOT NULL,
28
  `ip` VARCHAR(15) NOT NULL,
29
+ `status` ENUM(\'PASS_SFW\',\'DENY_SFW\',\'PASS_SFW__BY_WHITELIST\',\'PASS_SFW__BY_COOKIE\',\'DENY_ANTICRAWLER\',\'PASS_ANTICRAWLER\',\'DENY_ANTICRAWLER_UA\',\'PASS_ANTICRAWLER_UA\',\'DENY_ANTIFLOOD\',\'PASS_ANTIFLOOD\',\'DENY_ANTIFLOOD_UA\',\'PASS_ANTIFLOOD_UA\') NULL DEFAULT NULL,
30
  `all_entries` INT NOT NULL,
31
  `blocked_entries` INT NOT NULL,
32
  `entries_timestamp` INT NOT NULL,
lib/autoloader.php CHANGED
@@ -1,23 +1,23 @@
1
- <?php
2
-
3
- /**
4
- * Autoloader for \Cleantalk\* classes
5
- *
6
- * @param string $class
7
- *
8
- * @return void
9
- */
10
- spl_autoload_register( function( $class ){
11
-
12
- // Register class auto loader
13
- // Custom modules1
14
- if(strpos($class, 'Cleantalk') !== false){
15
- $class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
16
- $class_file = __DIR__ . DIRECTORY_SEPARATOR . $class . '.php';
17
- if(file_exists($class_file)){
18
- require_once($class_file);
19
- }
20
- }
21
- });
22
-
23
-
1
+ <?php
2
+
3
+ /**
4
+ * Autoloader for \Cleantalk\* classes
5
+ *
6
+ * @param string $class
7
+ *
8
+ * @return void
9
+ */
10
+ spl_autoload_register( function( $class ){
11
+
12
+ // Register class auto loader
13
+ // Custom modules1
14
+ if(strpos($class, 'Cleantalk') !== false){
15
+ $class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
16
+ $class_file = __DIR__ . DIRECTORY_SEPARATOR . $class . '.php';
17
+ if(file_exists($class_file)){
18
+ require_once($class_file);
19
+ }
20
+ }
21
+ });
22
+
23
+
lib/cleantalk-php-patch.php CHANGED
@@ -1,91 +1,91 @@
1
- <?php
2
-
3
- /*
4
- * Patch for apache_request_headers()
5
- * If Apache web server is missing then making
6
- */
7
- if( !function_exists('apache_request_headers') ){
8
- function apache_request_headers(){
9
-
10
- $headers = array();
11
- foreach($_SERVER as $key => $val){
12
- if(preg_match('/\AHTTP_/', $key)){
13
- $server_key = preg_replace('/\AHTTP_/', '', $key);
14
- $key_parts = explode('_', $server_key);
15
- if(count($key_parts) > 0 and strlen($server_key) > 2){
16
- foreach($key_parts as $part_index => $part){
17
- $key_parts[$part_index] = function_exists('mb_strtolower') ? mb_strtolower($part) : strtolower($part);
18
- $key_parts[$part_index][0] = strtoupper($key_parts[$part_index][0]);
19
- }
20
- $server_key = implode('-', $key_parts);
21
- }
22
- $headers[$server_key] = $val;
23
- }
24
- }
25
- return $headers;
26
- }
27
- }
28
-
29
- /*
30
- * Patch for locale_get_display_region()
31
- * For old PHP versions
32
- */
33
- if( !function_exists('locale_get_display_region') ){
34
- function locale_get_display_region($locale, $in_locale = 'EN'){
35
-
36
- return 'Unkonwn' . ($locale ? ': ' . $locale : '');
37
- }
38
- }
39
-
40
- /*
41
- * Patch for utf8_decode()
42
- * If PHP complied without XML support
43
- * From getID3() by James Heinrich <info@getid3.org> under GNU GPL
44
- */
45
- if(!function_exists('utf8_decode')){
46
- function utf8_decode($string){
47
-
48
- $newcharstring = '';
49
- $offset = 0;
50
- $stringlength = strlen($string);
51
- while ($offset < $stringlength) {
52
- if ((ord($string[$offset]) | 0x07) == 0xF7) {
53
- $charval = ((ord($string[($offset + 0)]) & 0x07) << 18) &
54
- ((ord($string[($offset + 1)]) & 0x3F) << 12) &
55
- ((ord($string[($offset + 2)]) & 0x3F) << 6) &
56
- (ord($string[($offset + 3)]) & 0x3F);
57
- $offset += 4;
58
- } elseif ((ord($string[$offset]) | 0x0F) == 0xEF) {
59
- $charval = ((ord($string[($offset + 0)]) & 0x0F) << 12) &
60
- ((ord($string[($offset + 1)]) & 0x3F) << 6) &
61
- (ord($string[($offset + 2)]) & 0x3F);
62
- $offset += 3;
63
- } elseif ((ord($string[$offset]) | 0x1F) == 0xDF) {
64
- $charval = ((ord($string[($offset + 0)]) & 0x1F) << 6) &
65
- (ord($string[($offset + 1)]) & 0x3F);
66
- $offset += 2;
67
- } elseif ((ord($string[$offset]) | 0x7F) == 0x7F) {
68
- $charval = ord($string[$offset]);
69
- $offset += 1;
70
- } else {
71
- $charval = false;
72
- $offset += 1;
73
- }
74
- if ($charval !== false) {
75
- $newcharstring .= (($charval < 256) ? chr($charval) : '?');
76
- }
77
- }
78
- return $newcharstring;
79
- }
80
- }
81
-
82
- if( ! function_exists( "array_column" ) ){
83
-
84
- function array_column($array,$column_name){
85
-
86
- return array_map( function ( $element ) use ( $column_name ){
87
- return $element[ $column_name ];
88
- }, $array );
89
-
90
- }
91
  }
1
+ <?php
2
+
3
+ /*
4
+ * Patch for apache_request_headers()
5
+ * If Apache web server is missing then making
6
+ */
7
+ if( !function_exists('apache_request_headers') ){
8
+ function apache_request_headers(){
9
+
10
+ $headers = array();
11
+ foreach($_SERVER as $key => $val){
12
+ if(preg_match('/\AHTTP_/', $key)){
13
+ $server_key = preg_replace('/\AHTTP_/', '', $key);
14
+ $key_parts = explode('_', $server_key);
15
+ if(count($key_parts) > 0 and strlen($server_key) > 2){
16
+ foreach($key_parts as $part_index => $part){
17
+ $key_parts[$part_index] = function_exists('mb_strtolower') ? mb_strtolower($part) : strtolower($part);
18
+ $key_parts[$part_index][0] = strtoupper($key_parts[$part_index][0]);
19
+ }
20
+ $server_key = implode('-', $key_parts);
21
+ }
22
+ $headers[$server_key] = $val;
23
+ }
24
+ }
25
+ return $headers;
26
+ }
27
+ }
28
+
29
+ /*
30
+ * Patch for locale_get_display_region()
31
+ * For old PHP versions
32
+ */
33
+ if( !function_exists('locale_get_display_region') ){
34
+ function locale_get_display_region($locale, $in_locale = 'EN'){
35
+
36
+ return 'Unkonwn' . ($locale ? ': ' . $locale : '');
37
+ }
38
+ }
39
+
40
+ /*
41
+ * Patch for utf8_decode()
42
+ * If PHP complied without XML support
43
+ * From getID3() by James Heinrich <info@getid3.org> under GNU GPL
44
+ */
45
+ if(!function_exists('utf8_decode')){
46
+ function utf8_decode($string){
47
+
48
+ $newcharstring = '';
49
+ $offset = 0;
50
+ $stringlength = strlen($string);
51
+ while ($offset < $stringlength) {
52
+ if ((ord($string[$offset]) | 0x07) == 0xF7) {
53
+ $charval = ((ord($string[($offset + 0)]) & 0x07) << 18) &
54
+ ((ord($string[($offset + 1)]) & 0x3F) << 12) &
55
+ ((ord($string[($offset + 2)]) & 0x3F) << 6) &
56
+ (ord($string[($offset + 3)]) & 0x3F);
57
+ $offset += 4;
58
+ } elseif ((ord($string[$offset]) | 0x0F) == 0xEF) {
59
+ $charval = ((ord($string[($offset + 0)]) & 0x0F) << 12) &
60
+ ((ord($string[($offset + 1)]) & 0x3F) << 6) &
61
+ (ord($string[($offset + 2)]) & 0x3F);
62
+ $offset += 3;
63
+ } elseif ((ord($string[$offset]) | 0x1F) == 0xDF) {
64
+ $charval = ((ord($string[($offset + 0)]) & 0x1F) << 6) &
65
+ (ord($string[($offset + 1)]) & 0x3F);
66
+ $offset += 2;
67
+ } elseif ((ord($string[$offset]) | 0x7F) == 0x7F) {
68
+ $charval = ord($string[$offset]);
69
+ $offset += 1;
70
+ } else {
71
+ $charval = false;
72
+ $offset += 1;
73
+ }
74
+ if ($charval !== false) {
75
+ $newcharstring .= (($charval < 256) ? chr($charval) : '?');
76
+ }
77
+ }
78
+ return $newcharstring;
79
+ }
80
+ }
81
+
82
+ if( ! function_exists( "array_column" ) ){
83
+
84
+ function array_column($array,$column_name){
85
+
86
+ return array_map( function ( $element ) use ( $column_name ){
87
+ return $element[ $column_name ];
88
+ }, $array );
89
+
90
+ }
91
  }
readme.txt CHANGED
@@ -4,14 +4,14 @@ Tags: spam, antispam, anti-spam, comments, firewall
4
  Requires at least: 3.0
5
  Tested up to: 5.7
6
  Requires PHP: 5.4
7
- Stable tag: 5.153.7
8
  License: GPLv2
9
 
10
  Spam protection, anti-spam, firewall, premium plugin. No spam comments & users, no spam contact form & WooCommerce anti-spam.
11
 
12
  == Description ==
13
 
14
- **Supports: Contact Form 7, Contact Form by WPForms, Ninja Forms, Gravity Forms, MailChimp, Formidable forms, WooCommerce, JetPack comments and contact form, BuddyPress, bbPress, S2Member, MailPoet, wpDiscuz, ConvertKit, ActiveCampaign, any WordPress registrations & contact forms and themes. Just set up and forget the spam!**
15
 
16
  No CAPTCHA, no questions, no animal counting, no puzzles, no math and no spam bots. Universal AntiSpam plugin.
17
 
@@ -60,7 +60,7 @@ Native spam protection for WordPress, JetPack comments and any other comment plu
60
  Filters spam bots on registration forms of WordPress, BuddyPress, bbPress, S2Member, WooCommerce, Profile builder, Login with AJAX and any other registration plugins.
61
 
62
  = Spam filter for contact forms =
63
- The plugin is tested and ready to protect from spam emails via Formidable forms, Contact form 7, JetPack Contact form, Fast Secure Contact form, Ninja forms, Landing Page Builder, Gravity forms, Contact Form by BestWebSoft, Simple Contact Form Plugin - PirateForms, Visual Form Builder, Contact Form by WebDorado, Contact Form Email, MW WP Form, Contact Form by Jeff Bulllins, Contact Us Form, WCP Contact Form, WPForms Lite, Custom Contact, Forms, Caldera Forms, Visual Form Builder, Contact Form Clean and Simple, Divi by Elegant Themes, The7 theme and any other themes or custom contact forms, amoForms, Ultimate Form Builder, Contact Bank - Contact Forms Builder, Forms easily built with Smart Forms, Usernoise contact form, Contact Form by Web-Settler, HubSpot Marketing Free, QuForm, Form Maker by 10Web, WP User Frontend, NEX-Forms.
64
 
65
  = WooCommerce spam filter =
66
  Anti-spam by CleanTalk filters spam registrations and spam reviews for WooCommerce. The plugin is fully compatible with WooCommerce 2.1 and higher.
@@ -580,6 +580,24 @@ If your website has forms that send data to external sources, you can enable opt
580
 
581
  == Changelog ==
582
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
583
  = 5.153.7 Mar 15 2021 =
584
  * Fix: SFW. Updating fixed.
585
 
4
  Requires at least: 3.0
5
  Tested up to: 5.7
6
  Requires PHP: 5.4
7
+ Stable tag: 5.154
8
  License: GPLv2
9
 
10
  Spam protection, anti-spam, firewall, premium plugin. No spam comments & users, no spam contact form & WooCommerce anti-spam.
11
 
12
  == Description ==
13
 
14
+ **Supports: Contact Form 7, Contact Form by WPForms, Ninja Forms, Gravity Forms, MailChimp, Formidable forms, WooCommerce, JetPack comments and contact form, BuddyPress, bbPress, S2Member, MailPoet, wpDiscuz, ConvertKit, ActiveCampaign, Events Manager, Avada Theme Form Builder, any WordPress registrations & contact forms and themes. Just set up and forget the spam!**
15
 
16
  No CAPTCHA, no questions, no animal counting, no puzzles, no math and no spam bots. Universal AntiSpam plugin.
17
 
60
  Filters spam bots on registration forms of WordPress, BuddyPress, bbPress, S2Member, WooCommerce, Profile builder, Login with AJAX and any other registration plugins.
61
 
62
  = Spam filter for contact forms =
63
+ The plugin is tested and ready to protect from spam emails via Formidable forms, Contact form 7, JetPack Contact form, Fast Secure Contact form, Ninja forms, Landing Page Builder, Gravity forms, Contact Form by BestWebSoft, Simple Contact Form Plugin - PirateForms, Visual Form Builder, Contact Form by WebDorado, Contact Form Email, MW WP Form, Contact Form by Jeff Bulllins, Contact Us Form, WCP Contact Form, WPForms Lite, Custom Contact, Forms, Caldera Forms, Visual Form Builder, Contact Form Clean and Simple, Divi by Elegant Themes, The7 theme and any other themes or custom contact forms, amoForms, Ultimate Form Builder, Contact Bank - Contact Forms Builder, Forms easily built with Smart Forms, Usernoise contact form, Contact Form by Web-Settler, HubSpot Marketing Free, QuForm, Form Maker by 10Web, WP User Frontend, NEX-Forms, Avada Theme Form Builder.
64
 
65
  = WooCommerce spam filter =
66
  Anti-spam by CleanTalk filters spam registrations and spam reviews for WooCommerce. The plugin is fully compatible with WooCommerce 2.1 and higher.
580
 
581
  == Changelog ==
582
 
583
+ = 5.154 Mar 17 2021 =
584
+ * New: Settings Templates functionality implemented.
585
+ * New: SFW. Anti-flood protection uses UA lists for filtration.
586
+ * Fix: Forms. Getting check_js delay removed.
587
+ * Fix: Forms. Rotation check_js fixed.
588
+ * Fix: Integration. Newspaper-theme login form protection skipped.
589
+ * Fix: Integration. Newspaper-theme reset password form protection skipped.
590
+ * Fix: Forms. Gravity Forms paypal addon processing skipped.
591
+ * Fix: Exclusion for wpDiscuz - Online Users Addon.
592
+ * Fix: Remote Calls. Wrapper http__request__rc_to_host() don't get an array
593
+ * Fix: JS. Modal window fixed.
594
+ * Fix: JS. Show AJAX result fixed.
595
+ * Fix: Skip. Save abandoned cart checking skip.
596
+ * Fix: Skip. SUMODISCOUNT discout request skip.
597
+ * Fix: Skip. WP eMember login form skip.
598
+ * Fix: SFW. Do not cache constants added.
599
+ * Fix: SFW. AC/AF logging fixed.
600
+
601
  = 5.153.7 Mar 15 2021 =
602
  * Fix: SFW. Updating fixed.
603