Spam protection, AntiSpam, FireWall by CleanTalk - Version 5.135

Version Description

March 16 2020 = * New: Setting which disallow sub-sites administrators to manage plugin settings. * New: Add custom title for message. * Mod: New headers for spam scan tabs. * Fix: ARM form login check. * Fix: For GET requests in HTTP API. * Fix: Getting variables in Get and Server classes. * Fix: SFW update system. * Fix: Empty connection error in Cleantalk/Antispam/API.

Download this release

Release Info

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

Code changes from version 5.134 to 5.135

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.134
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: https://cleantalk.org
9
  Text Domain: cleantalk
@@ -187,8 +187,9 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
187
  }
188
 
189
  $apbct_active_integrations = array(
190
- 'ContactBank' => array( 'hook' => 'contact_bank_frontend_ajax_call', 'ajax' => true ),
191
- 'FluentForm' => array( 'hook' => 'fluentform_validations', 'ajax' => false )
 
192
  );
193
  new \Cleantalk\Antispam\Integrations( $apbct_active_integrations );
194
 
@@ -327,8 +328,10 @@ if( !defined( 'CLEANTALK_PLUGIN_DIR' ) ){
327
  // Check AJAX requests
328
  // if User is not logged in
329
  // if Unknown action or Known action with mandatory check
330
- if( (!apbct_is_user_logged_in() || $apbct->settings['protect_logged_in'] == 1) &&
331
- isset($_POST['action']) && (!in_array($_POST['action'], $cleantalk_hooked_actions) || in_array($_POST['action'], $cleantalk_ajax_actions_to_check))
 
 
332
  ){
333
  ct_ajax_hook();
334
  }
@@ -906,8 +909,9 @@ function ct_sfw_update($immediate = false){
906
  if($apbct->settings['spam_firewall'] == 1){
907
 
908
  $sfw = new CleantalkSFW();
909
-
910
- $file_urls = isset($_GET['file_urls']) ? explode(',', $_GET['file_urls']) : null;
 
911
 
912
  if (!$file_urls) {
913
 
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.135
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: https://cleantalk.org
9
  Text Domain: cleantalk
187
  }
188
 
189
  $apbct_active_integrations = array(
190
+ 'ContactBank' => array( 'hook' => 'contact_bank_frontend_ajax_call', 'ajax' => true ),
191
+ 'FluentForm' => array( 'hook' => 'fluentform_validations', 'ajax' => false ),
192
+ 'ElfsightContactForm' => array( 'hook' => 'elfsight_contact_form_mail', 'ajax' => true )
193
  );
194
  new \Cleantalk\Antispam\Integrations( $apbct_active_integrations );
195
 
328
  // Check AJAX requests
329
  // if User is not logged in
330
  // if Unknown action or Known action with mandatory check
331
+ if( ( ! apbct_is_user_logged_in() || $apbct->settings['protect_logged_in'] == 1) &&
332
+ isset( $_POST['action'] ) &&
333
+ ( ! in_array( $_POST['action'], $cleantalk_hooked_actions ) || in_array( $_POST['action'], $cleantalk_ajax_actions_to_check ) ) &&
334
+ ! array_search( $_POST['action'], array_column( $apbct_active_integrations, 'hook' ) )
335
  ){
336
  ct_ajax_hook();
337
  }
909
  if($apbct->settings['spam_firewall'] == 1){
910
 
911
  $sfw = new CleantalkSFW();
912
+
913
+ $file_urls = isset($_GET['file_urls']) ? urldecode( $_GET['file_urls'] ) : null;
914
+ $file_urls = isset($file_urls) ? explode(',', $file_urls) : null;
915
 
916
  if (!$file_urls) {
917
 
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}.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}
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}.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}.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}.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}
inc/cleantalk-admin.php CHANGED
@@ -15,20 +15,26 @@ function apbct_add_buttons_to_comments_and_users( $unused_argument ) {
15
  $current_screen = get_current_screen();
16
 
17
  if( 'users' == $current_screen->base ) {
18
- $button_url = $current_screen->base . '.php?page=ct_check_users';
 
19
  $button_description = 'users';
20
  } elseif ( 'edit-comments' == $current_screen->base ) {
21
- $button_url = $current_screen->base . '.php?page=ct_check_spam';
 
22
  $button_description = 'comments';
23
  } else {
24
  return;
25
  }
26
 
27
  echo '
28
- <a href="' . $button_url . '" class="button" style="margin:1px 0 0 0; display: inline-block;">
29
  <img src="' . $apbct->logo__small__colored . '" alt="Cleantalk Antispam logo" height="" style="width: 17px; vertical-align: text-bottom;" />
30
  ' . sprintf(__( 'Find spam %s', 'cleantalk' ), $button_description ) . '
31
  </a>
 
 
 
 
32
  <a href="https://cleantalk.org/my/show_requests?service_id=' . $apbct->data['service_id'] . '&int=week" target="_blank" class="button" style="margin:1px 0 0 0; display: inline-block;">
33
  <img src="' . $apbct->logo__small__colored . '" alt="Cleantalk Antispam logo" height="" style="width: 17px; vertical-align: text-bottom;" />
34
  ' . __( 'CleanTalk Anti-Spam Log', 'cleantalk' ) . '
15
  $current_screen = get_current_screen();
16
 
17
  if( 'users' == $current_screen->base ) {
18
+ $button_url__check = $current_screen->base . '.php?page=ct_check_users';
19
+ $button_url__results = $current_screen->base . '.php?page=ct_check_users_total';
20
  $button_description = 'users';
21
  } elseif ( 'edit-comments' == $current_screen->base ) {
22
+ $button_url__check = $current_screen->base . '.php?page=ct_check_spam';
23
+ $button_url__results = $current_screen->base . '.php?page=ct_check_spam_total';
24
  $button_description = 'comments';
25
  } else {
26
  return;
27
  }
28
 
29
  echo '
30
+ <a href="' . $button_url__check . '" class="button" style="margin:1px 0 0 0; display: inline-block;">
31
  <img src="' . $apbct->logo__small__colored . '" alt="Cleantalk Antispam logo" height="" style="width: 17px; vertical-align: text-bottom;" />
32
  ' . sprintf(__( 'Find spam %s', 'cleantalk' ), $button_description ) . '
33
  </a>
34
+ <a href="' . $button_url__results . '" class="button" style="margin:1px 0 0 0; display: inline-block;">
35
+ <img src="' . $apbct->logo__small__colored . '" alt="Cleantalk Antispam logo" height="" style="width: 17px; vertical-align: text-bottom;" />
36
+ ' . sprintf(__( 'View spam %s', 'cleantalk' ), $button_description ) . '
37
+ </a>
38
  <a href="https://cleantalk.org/my/show_requests?service_id=' . $apbct->data['service_id'] . '&int=week" target="_blank" class="button" style="margin:1px 0 0 0; display: inline-block;">
39
  <img src="' . $apbct->logo__small__colored . '" alt="Cleantalk Antispam logo" height="" style="width: 17px; vertical-align: text-bottom;" />
40
  ' . __( 'CleanTalk Anti-Spam Log', 'cleantalk' ) . '
inc/cleantalk-ajax.php CHANGED
@@ -296,6 +296,7 @@ function ct_ajax_hook($message_obj = false, $additional = false)
296
  'wouCheckOnlineUsers', //Skip updraft admin checking users
297
  'et_fb_get_shortcode_from_fb_object', //Skip generate shortcode
298
  'pp_lf_process_login', //Skip login form
 
299
  );
300
 
301
  // Skip test if
@@ -313,7 +314,8 @@ function ct_ajax_hook($message_obj = false, $additional = false)
313
  (isset($message_obj['author']) && intval($message_obj['author']) == 0) ||
314
  (isset($message_obj['post_author']) && intval($message_obj['post_author']) == 0)
315
  )
316
- )
 
317
  )
318
  {
319
  return false;
296
  'wouCheckOnlineUsers', //Skip updraft admin checking users
297
  'et_fb_get_shortcode_from_fb_object', //Skip generate shortcode
298
  'pp_lf_process_login', //Skip login form
299
+ 'check_email', //Ajax email checking
300
  );
301
 
302
  // Skip test if
314
  (isset($message_obj['author']) && intval($message_obj['author']) == 0) ||
315
  (isset($message_obj['post_author']) && intval($message_obj['post_author']) == 0)
316
  )
317
+ ) ||
318
+ (isset($_POST['action'], $_POST['arm_action']) && $_POST['action'] == 'arm_shortcode_form_ajax_action' && $_POST['arm_action'] == 'please-login') //arm forms skip login
319
  )
320
  {
321
  return false;
inc/cleantalk-common.php CHANGED
@@ -87,14 +87,22 @@ function apbct_base_call($params = array(), $reg_flag = false){
87
  $sender_info = !empty($params['sender_info'])
88
  ? CleantalkHelper::array_merge__save_numeric_keys__recursive(apbct_get_sender_info(), (array)$params['sender_info'])
89
  : apbct_get_sender_info();
90
-
91
- // Fileds exclusions
92
  if( ! empty( $params['message'] ) && is_array( $params['message'] ) ){
93
 
94
  $params['message'] = apbct_array( $params['message'] )
95
  ->get_keys( $apbct->settings['exclusions__fields'], $apbct->settings['exclusions__fields__use_regexp'] )
96
  ->delete();
97
  }
 
 
 
 
 
 
 
 
98
 
99
  $default_params = array(
100
 
@@ -230,6 +238,12 @@ function apbct_exclusions_check($func = null){
230
  return false;
231
  }
232
 
 
 
 
 
 
 
233
  /**
234
  * Checks if reuqest URI is in exclusion list
235
  *
87
  $sender_info = !empty($params['sender_info'])
88
  ? CleantalkHelper::array_merge__save_numeric_keys__recursive(apbct_get_sender_info(), (array)$params['sender_info'])
89
  : apbct_get_sender_info();
90
+
91
+ // Fields exclusions
92
  if( ! empty( $params['message'] ) && is_array( $params['message'] ) ){
93
 
94
  $params['message'] = apbct_array( $params['message'] )
95
  ->get_keys( $apbct->settings['exclusions__fields'], $apbct->settings['exclusions__fields__use_regexp'] )
96
  ->delete();
97
  }
98
+
99
+ // Reversed url exclusions. Pass everything except one.
100
+ if( ! apbct_exclusions_check__url__reversed() ){
101
+ return array(
102
+ 'ct' => false,
103
+ 'ct_result' => new CleantalkResponse( null, null )
104
+ );
105
+ }
106
 
107
  $default_params = array(
108
 
238
  return false;
239
  }
240
 
241
+ function apbct_exclusions_check__url__reversed(){
242
+ return defined( 'APBCT_URL_EXCLUSIONS__REVERSED' ) && ! \Cleantalk\Common\Server::has_string( 'REQUEST_URI', APBCT_URL_EXCLUSIONS__REVERSED )
243
+ ? false
244
+ : true;
245
+ }
246
+
247
  /**
248
  * Checks if reuqest URI is in exclusion list
249
  *
inc/cleantalk-find-spam.php CHANGED
@@ -11,12 +11,12 @@ function ct_add_find_spam_pages(){
11
 
12
  // Check users pages
13
  $ct_check_users = add_users_page( __( "Check for spam", 'cleantalk' ), __( "Find spam users", 'cleantalk' ), 'activate_plugins', 'ct_check_users', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
14
- $ct_check_users_total = add_users_page( __( "Total spam found", 'cleantalk' ), '', 'activate_plugins', 'ct_check_users_total', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
15
  $ct_check_users_logs = add_users_page( __( "Scan logs", 'cleantalk' ), '', 'activate_plugins', 'ct_check_users_logs', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
16
 
17
  // Cheack comments pages
18
  $ct_check_spam = add_comments_page( __( "Check for spam", 'cleantalk' ), __( "Find spam comments", 'cleantalk' ), 'activate_plugins', 'ct_check_spam', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
19
- $ct_check_spam_total = add_comments_page( __( "Total spam found", 'cleantalk' ), '', 'activate_plugins', 'ct_check_spam_total', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
20
  $ct_check_spam_logs = add_comments_page( __( "Scan logs", 'cleantalk' ), '', 'activate_plugins', 'ct_check_spam_logs', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
21
 
22
  // Remove some pages from main menu
11
 
12
  // Check users pages
13
  $ct_check_users = add_users_page( __( "Check for spam", 'cleantalk' ), __( "Find spam users", 'cleantalk' ), 'activate_plugins', 'ct_check_users', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
14
+ $ct_check_users_total = add_users_page( __( "Previous scan results", 'cleantalk' ), '', 'activate_plugins', 'ct_check_users_total', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
15
  $ct_check_users_logs = add_users_page( __( "Scan logs", 'cleantalk' ), '', 'activate_plugins', 'ct_check_users_logs', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
16
 
17
  // Cheack comments pages
18
  $ct_check_spam = add_comments_page( __( "Check for spam", 'cleantalk' ), __( "Find spam comments", 'cleantalk' ), 'activate_plugins', 'ct_check_spam', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
19
+ $ct_check_spam_total = add_comments_page( __( "Previous scan results", 'cleantalk' ), '', 'activate_plugins', 'ct_check_spam_total', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
20
  $ct_check_spam_logs = add_comments_page( __( "Scan logs", 'cleantalk' ), '', 'activate_plugins', 'ct_check_spam_logs', array( 'ClassCleantalkFindSpamPage', 'showFindSpamPage' ) );
21
 
22
  // Remove some pages from main menu
inc/cleantalk-public.php CHANGED
@@ -1318,7 +1318,7 @@ function ct_preprocess_comment($comment) {
1318
  $ct_comment = $ct_result->comment;
1319
  $ct_stop_words = $ct_result->stop_words;
1320
 
1321
- $err_text = '<center><b style="color: #49C73B;">Clean</b><b style="color: #349ebf;">Talk.</b> ' . __('Spam protection', 'cleantalk') . "</center><br><br>\n" . $ct_result->comment;
1322
  $err_text .= '<script>setTimeout("history.back()", 5000);</script>';
1323
 
1324
  // Terminate. Definitely spam.
@@ -1445,7 +1445,7 @@ function apbct_comment__Wordpress__changeMailNotification($notify_message, $comm
1445
  */
1446
  function ct_die($comment_id, $comment_status) {
1447
  global $ct_comment;
1448
- $err_text = '<center><b style="color: #49C73B;">Clean</b><b style="color: #349ebf;">Talk.</b> ' . __('Spam protection', 'cleantalk') . "</center><br><br>\n" . $ct_comment;
1449
  $err_text .= '<script>setTimeout("history.back()", 5000);</script>';
1450
  if(isset($_POST['et_pb_contact_email']))
1451
  {
@@ -1463,7 +1463,7 @@ function ct_die($comment_id, $comment_status) {
1463
  * @param type $comment_body
1464
  */
1465
  function ct_die_extended($comment_body) {
1466
- $err_text = '<center><b style="color: #49C73B;">Clean</b><b style="color: #349ebf;">Talk.</b> ' . __('Spam protection', 'cleantalk') . "</center><br><br>\n" . $comment_body;
1467
  $err_text .= '<script>setTimeout("history.back()", 5000);</script>';
1468
  wp_die($err_text, 'Blacklisted', array('response' => 200, 'back_link' => true));
1469
  }
1318
  $ct_comment = $ct_result->comment;
1319
  $ct_stop_words = $ct_result->stop_words;
1320
 
1321
+ $err_text = '<center>' . ((defined('CLEANTALK_DISABLE_BLOCKING_TITLE') && CLEANTALK_DISABLE_BLOCKING_TITLE == true) ? '' : '<b style="color: #49C73B;">Clean</b><b style="color: #349ebf;">Talk.</b> ') . __('Spam protection', 'cleantalk') . "</center><br><br>\n" . $ct_result->comment;
1322
  $err_text .= '<script>setTimeout("history.back()", 5000);</script>';
1323
 
1324
  // Terminate. Definitely spam.
1445
  */
1446
  function ct_die($comment_id, $comment_status) {
1447
  global $ct_comment;
1448
+ $err_text = '<center>' . ((defined('CLEANTALK_DISABLE_BLOCKING_TITLE') && CLEANTALK_DISABLE_BLOCKING_TITLE == true) ? '' : '<b style="color: #49C73B;">Clean</b><b style="color: #349ebf;">Talk.</b> ') . __('Spam protection', 'cleantalk') . "</center><br><br>\n" . $ct_comment;
1449
  $err_text .= '<script>setTimeout("history.back()", 5000);</script>';
1450
  if(isset($_POST['et_pb_contact_email']))
1451
  {
1463
  * @param type $comment_body
1464
  */
1465
  function ct_die_extended($comment_body) {
1466
+ $err_text = '<center>' . ((defined('CLEANTALK_DISABLE_BLOCKING_TITLE') && CLEANTALK_DISABLE_BLOCKING_TITLE == true) ? '' : '<b style="color: #49C73B;">Clean</b><b style="color: #349ebf;">Talk.</b> ') . __('Spam protection', 'cleantalk') . "</center><br><br>\n" . $comment_body;
1467
  $err_text .= '<script>setTimeout("history.back()", 5000);</script>';
1468
  wp_die($err_text, 'Blacklisted', array('response' => 200, 'back_link' => true));
1469
  }
inc/cleantalk-settings.php CHANGED
@@ -435,7 +435,7 @@ function apbct_settings__set_fileds__network( $fields ){
435
  'type' => 'checkbox',
436
  'title' => __('Enable White Label Mode', 'cleantalk'),
437
  'description' => sprintf(__("Learn more information %shere%s.", 'cleantalk'), '<a tearget="_blank" href="https://cleantalk.org/ru/help/hosting-white-label">', '</a>'),
438
- 'childrens' => array('white_label__hoster_key', 'white_label__plugin_name', 'allow_custom_key'),
439
  'network' => true,
440
  ),
441
  'white_label__hoster_key' => array(
@@ -470,6 +470,14 @@ function apbct_settings__set_fileds__network( $fields ){
470
  'disabled' => $apbct->network_settings['white_label'],
471
  'network' => true,
472
  ),
 
 
 
 
 
 
 
 
473
  )
474
  )
475
  );
@@ -1057,9 +1065,12 @@ function apbct_settings__field__draw($params = array()){
1057
  $value_parent = $params['parent']
1058
  ? ($params['network'] ? $apbct->network_settings[$params['parent']] : $apbct->settings[$params['parent']])
1059
  : false;
1060
-
1061
- $disabled = $params['parent'] && !$value_parent ? ' disabled="disabled"' : '';
1062
- $disabled = $params['disabled'] ? ' disabled="disabled"' : $disabled;
 
 
 
1063
 
1064
  $childrens = $params['childrens'] ? 'apbct_setting---' . implode(",apbct_setting---",$params['childrens']) : '';
1065
  $hide = $params['hide'] ? implode(",",$params['hide']) : '';
@@ -1109,22 +1120,7 @@ function apbct_settings__field__draw($params = array()){
1109
  : '';
1110
 
1111
  echo '<div class="apbct_settings-field_content apbct_settings-field_content--'.$params['type'].'">';
1112
-
1113
- $disabled = '';
1114
-
1115
- // Disable child option if parent is ON
1116
- if($params['reverse_trigger']){
1117
- if($params['parent'] && $apbct->settings[$params['parent']]){
1118
- $disabled = ' disabled="disabled"';
1119
- }
1120
-
1121
- // Disable child option if parent if OFF
1122
- }else{
1123
- if($params['parent'] && !$apbct->settings[$params['parent']]){
1124
- $disabled = ' disabled="disabled"';
1125
- }
1126
- }
1127
-
1128
  foreach($params['options'] as $option){
1129
  echo '<input'
1130
  .' type="radio"'
@@ -1132,7 +1128,7 @@ function apbct_settings__field__draw($params = array()){
1132
  ." id='apbct_setting_{$params['name']}__{$option['label']}'"
1133
  .' name="cleantalk_settings['.$params['name'].']"'
1134
  .' value="'.$option['val'].'"'
1135
- .($params['parent'] ? $disabled : '')
1136
  .($params['childrens']
1137
  ? ' onchange="apbctSettingsDependencies(\'' . $childrens . '\', ' . $option['childrens_enable'] . ')"'
1138
  : ''
@@ -1270,6 +1266,7 @@ function apbct_settings__validate($settings) {
1270
  if(APBCT_WPMS && is_main_site()){
1271
  $network_settings = array(
1272
  'allow_custom_key' => $settings['allow_custom_key'],
 
1273
  'white_label' => $settings['white_label'],
1274
  'white_label__hoster_key' => $settings['white_label__hoster_key'],
1275
  'white_label__plugin_name' => $settings['white_label__plugin_name'],
435
  'type' => 'checkbox',
436
  'title' => __('Enable White Label Mode', 'cleantalk'),
437
  'description' => sprintf(__("Learn more information %shere%s.", 'cleantalk'), '<a tearget="_blank" href="https://cleantalk.org/ru/help/hosting-white-label">', '</a>'),
438
+ 'childrens' => array('white_label__hoster_key', 'white_label__plugin_name', 'allow_custom_key', 'allow_custom_settings'),
439
  'network' => true,
440
  ),
441
  'white_label__hoster_key' => array(
470
  'disabled' => $apbct->network_settings['white_label'],
471
  'network' => true,
472
  ),
473
+ 'allow_custom_settings' => array(
474
+ 'type' => 'checkbox',
475
+ 'title' => __('Allow users to manage plugin settings', 'cleantalk'),
476
+ 'description' => __('Allow to change settings on child sites.', 'cleantalk'),
477
+ 'display' => APBCT_WPMS && is_main_site(),
478
+ 'disabled' => $apbct->network_settings['white_label'],
479
+ 'network' => true,
480
+ ),
481
  )
482
  )
483
  );
1065
  $value_parent = $params['parent']
1066
  ? ($params['network'] ? $apbct->network_settings[$params['parent']] : $apbct->settings[$params['parent']])
1067
  : false;
1068
+
1069
+ // Is element is disabled
1070
+ $disabled = $params['parent'] && !$value_parent ? ' disabled="disabled"' : ''; // Strait
1071
+ $disabled = $params['parent'] && $params['reverse_trigger'] && !$value_parent ? ' disabled="disabled"' : $disabled; // Reverse logic
1072
+ $disabled = $params['disabled'] ? ' disabled="disabled"' : $disabled; // Direct disable from params
1073
+ $disabled = ! is_main_site() && $apbct->network_settings && ! $apbct->network_settings['allow_custom_settings'] ? ' disabled="disabled"' : $disabled; // Disabled by super admin on sub-sites
1074
 
1075
  $childrens = $params['childrens'] ? 'apbct_setting---' . implode(",apbct_setting---",$params['childrens']) : '';
1076
  $hide = $params['hide'] ? implode(",",$params['hide']) : '';
1120
  : '';
1121
 
1122
  echo '<div class="apbct_settings-field_content apbct_settings-field_content--'.$params['type'].'">';
1123
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1124
  foreach($params['options'] as $option){
1125
  echo '<input'
1126
  .' type="radio"'
1128
  ." id='apbct_setting_{$params['name']}__{$option['label']}'"
1129
  .' name="cleantalk_settings['.$params['name'].']"'
1130
  .' value="'.$option['val'].'"'
1131
+ . $disabled
1132
  .($params['childrens']
1133
  ? ' onchange="apbctSettingsDependencies(\'' . $childrens . '\', ' . $option['childrens_enable'] . ')"'
1134
  : ''
1266
  if(APBCT_WPMS && is_main_site()){
1267
  $network_settings = array(
1268
  'allow_custom_key' => $settings['allow_custom_key'],
1269
+ 'allow_custom_settings' => $settings['allow_custom_settings'],
1270
  'white_label' => $settings['white_label'],
1271
  'white_label__hoster_key' => $settings['white_label__hoster_key'],
1272
  'white_label__plugin_name' => $settings['white_label__plugin_name'],
inc/find-spam/ClassCleantalkFindSpamPage.php CHANGED
@@ -103,8 +103,8 @@ class ClassCleantalkFindSpamPage
103
  <h3><?php echo $this->spam_checker->getPageTitle(); ?></h3>
104
  <div id="ct_check_tabs">
105
  <ul>
106
- <li <?php echo (1 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>"><?php esc_html_e( 'Current scan results', 'cleantalk' ) ?></a></li>
107
- <li <?php echo (2 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>_total"><?php esc_html_e( 'Total spam found', 'cleantalk' ) ?></a></li>
108
  <li <?php echo (3 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>_logs"><?php esc_html_e( 'Scan logs', 'cleantalk' ) ?></a></li>
109
  </ul>
110
  <div id="ct_check_content">
103
  <h3><?php echo $this->spam_checker->getPageTitle(); ?></h3>
104
  <div id="ct_check_tabs">
105
  <ul>
106
+ <li <?php echo (1 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>"><?php esc_html_e( 'Scan and new results', 'cleantalk' ) ?></a></li>
107
+ <li <?php echo (2 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>_total"><?php esc_html_e( 'Previous scan results', 'cleantalk' ) ?></a></li>
108
  <li <?php echo (3 == $this->current_tab) ? 'class="active"' : ''; ?>><a href="<?php echo $this->spam_checker->getPageScriptName(); ?>?page=ct_check_<?php echo $this->spam_checker->getPageSlug(); ?>_logs"><?php esc_html_e( 'Scan logs', 'cleantalk' ) ?></a></li>
109
  </ul>
110
  <div id="ct_check_content">
lib/Cleantalk/Antispam/API.php CHANGED
@@ -604,7 +604,7 @@ class API
604
  *
605
  * @return array|bool
606
  */
607
- static public function send_request($data, $url = self::URL, $timeout = 5, $ssl = false, $ssl_path = '')
608
  {
609
  // Possibility to switch agent vaersion
610
  $data['agent'] = !empty($data['agent'])
@@ -697,7 +697,7 @@ class API
697
  /**
698
  * Function checks server response
699
  *
700
- * @param string $result
701
  * @param string $method_name
702
  *
703
  * @return mixed (array || array('error' => true))
@@ -706,10 +706,12 @@ class API
706
  {
707
  // Errors handling
708
  // Bad connection
709
- if(is_array($result) && isset($result['error'])){
710
- return array(
711
- 'error' => 'CONNECTION_ERROR' . (isset($result['error']) ? ': "' . $result['error'] . '"' : ''),
712
- );
 
 
713
  }
714
 
715
  // JSON decode errors
604
  *
605
  * @return array|bool
606
  */
607
+ static public function send_request($data, $url = self::URL, $timeout = 10, $ssl = false, $ssl_path = '')
608
  {
609
  // Possibility to switch agent vaersion
610
  $data['agent'] = !empty($data['agent'])
697
  /**
698
  * Function checks server response
699
  *
700
+ * @param array|string $result
701
  * @param string $method_name
702
  *
703
  * @return mixed (array || array('error' => true))
706
  {
707
  // Errors handling
708
  // Bad connection
709
+ if(isset($result['error'])){
710
+ $last = error_get_last();
711
+ $out = ! empty( $result['error'] )
712
+ ? array( 'error' => 'CONNECTION_ERROR : "' . $result['error'] . '"' )
713
+ : array( 'error' => 'CONNECTION_ERROR : "Unknown Error. Last error: ' . $last['message'] );
714
+ return $out;
715
  }
716
 
717
  // JSON decode errors
lib/Cleantalk/Antispam/Helper.php CHANGED
@@ -505,6 +505,7 @@ class Helper
505
 
506
  case 'get':
507
  $opts[CURLOPT_URL] .= $data ? '?' . str_replace("&amp;", "&", http_build_query($data)) : '';
 
508
  $opts[CURLOPT_POST] = false;
509
  $opts[CURLOPT_POSTFIELDS] = null;
510
  break;
505
 
506
  case 'get':
507
  $opts[CURLOPT_URL] .= $data ? '?' . str_replace("&amp;", "&", http_build_query($data)) : '';
508
+ $opts[CURLOPT_CUSTOMREQUEST] = 'GET';
509
  $opts[CURLOPT_POST] = false;
510
  $opts[CURLOPT_POSTFIELDS] = null;
511
  break;
lib/Cleantalk/Antispam/Integrations/ElfsightContactForm.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ namespace Cleantalk\Antispam\Integrations;
5
+
6
+
7
+ class ElfsightContactForm extends IntegrationBase
8
+ {
9
+
10
+ function getDataForChecking()
11
+ {
12
+ if( isset( $_POST ) && isset( $_POST['fields'] ) ) {
13
+ return ct_get_fields_any( $_POST['fields'] );
14
+ }
15
+ return null;
16
+ }
17
+
18
+ function doBlock( $message )
19
+ {
20
+ header( 'Content-type: application/json; charset=utf-8' );
21
+ exit( json_encode( array( 400, $message ) ) );
22
+ }
23
+ }
lib/Cleantalk/Common/Get.php CHANGED
@@ -36,7 +36,7 @@ class Get extends ServerVariables{
36
 
37
  // Return from memory. From $this->variables
38
  if(isset(static::$instance->variables[$name]))
39
- return static::$instance->variable[$name];
40
 
41
  if( function_exists( 'filter_input' ) )
42
  $value = filter_input( INPUT_GET, $name );
36
 
37
  // Return from memory. From $this->variables
38
  if(isset(static::$instance->variables[$name]))
39
+ return static::$instance->variables[$name];
40
 
41
  if( function_exists( 'filter_input' ) )
42
  $value = filter_input( INPUT_GET, $name );
lib/Cleantalk/Common/Server.php CHANGED
@@ -34,8 +34,8 @@ class Server extends ServerVariables{
34
  protected function get_variable( $name ){
35
 
36
  // Return from memory. From $this->server
37
- if(isset(static::$instance->variable[$name]))
38
- return static::$instance->variable[$name];
39
 
40
  $name = strtoupper( $name );
41
 
34
  protected function get_variable( $name ){
35
 
36
  // Return from memory. From $this->server
37
+ if(isset(static::$instance->variables[$name]))
38
+ return static::$instance->variables[$name];
39
 
40
  $name = strtoupper( $name );
41
 
lib/CleantalkState.php CHANGED
@@ -191,8 +191,9 @@ class CleantalkState
191
  public $def_network_settings = array(
192
 
193
  // Key
194
- 'apikey' => '',
195
- 'allow_custom_key' => 1,
 
196
 
197
  // White label settings
198
  'white_label' => 0,
191
  public $def_network_settings = array(
192
 
193
  // Key
194
+ 'apikey' => '',
195
+ 'allow_custom_key' => 1,
196
+ 'allow_custom_settings' => 1,
197
 
198
  // White label settings
199
  'white_label' => 0,
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: safronik
3
  Tags: spam, antispam, woocommerce, comments, firewall
4
  Requires at least: 3.0
5
- Tested up to: 5.3
6
  Requires PHP: 5.4
7
- Stable tag: 5.134
8
  License: GPLv2
9
 
10
  Spam protection, anti-spam, firewall, premium plugin. No spam comments & users, no spam contact form & WooCommerce anti-spam.
@@ -566,6 +566,16 @@ If your website has forms that send data to external sources, you can enable opt
566
 
567
  == Changelog ==
568
 
 
 
 
 
 
 
 
 
 
 
569
  = 5.134 February 27 2020 =
570
  * Fix: SpamFireWall update large data issues.
571
  * Fix: Auto-update for some banner notifications.
@@ -1634,14 +1644,14 @@ If your website has forms that send data to external sources, you can enable opt
1634
  * Fixed problems with AJAX functionality in MailPoet, WooCommerce and other AJAX plugins
1635
 
1636
  = 5.27 2015-10-13 =
1637
- * Improvements in Spam FireWall feature
1638
  * Code optimization
1639
  * Backend interface fixes
1640
 
1641
  = 5.26 2015-10-05 =
1642
  * Added WordPress Language Pack support
1643
  * Removed spam checking for some autorisation plugins
1644
- * New experimental feature: Spam FireWall
1645
 
1646
  = 5.25.2 2015-09-28 =
1647
  * Fixed backend bug
2
  Contributors: safronik
3
  Tags: spam, antispam, woocommerce, comments, firewall
4
  Requires at least: 3.0
5
+ Tested up to: 5.4
6
  Requires PHP: 5.4
7
+ Stable tag: 5.135
8
  License: GPLv2
9
 
10
  Spam protection, anti-spam, firewall, premium plugin. No spam comments & users, no spam contact form & WooCommerce anti-spam.
566
 
567
  == Changelog ==
568
 
569
+ = 5.135 March 16 2020 =
570
+ * New: Setting which disallow sub-sites administrators to manage plugin settings.
571
+ * New: Add custom title for message.
572
+ * Mod: New headers for spam scan tabs.
573
+ * Fix: ARM form login check.
574
+ * Fix: For GET requests in HTTP API.
575
+ * Fix: Getting variables in Get and Server classes.
576
+ * Fix: SFW update system.
577
+ * Fix: Empty connection error in Cleantalk/Antispam/API.
578
+
579
  = 5.134 February 27 2020 =
580
  * Fix: SpamFireWall update large data issues.
581
  * Fix: Auto-update for some banner notifications.
1644
  * Fixed problems with AJAX functionality in MailPoet, WooCommerce and other AJAX plugins
1645
 
1646
  = 5.27 2015-10-13 =
1647
+ * Improvements in SpamFireWall feature
1648
  * Code optimization
1649
  * Backend interface fixes
1650
 
1651
  = 5.26 2015-10-05 =
1652
  * Added WordPress Language Pack support
1653
  * Removed spam checking for some autorisation plugins
1654
+ * New experimental feature: SpamFireWall
1655
 
1656
  = 5.25.2 2015-09-28 =
1657
  * Fixed backend bug