Spam protection, AntiSpam, FireWall by CleanTalk - Version 5.159.2

Version Description

Jun 15 2021 = * Fix. Renew notice banner shows only on cleantalk pages. * Fix. SFW updating. Getting remote data error handling fixed. * Upd. Readme updated. * Fix. SFW. Auto-updating fixed. * Fix: Admin bar style. Install link is no longer highlighted. * Fix: Admin bar style. Style for security icon. * Fix: Admin bar. Reset buttons counters leads to the same page. * Fix. Manual register link fixed. * Fix: do not display errors on subsites when wl is enabled. * Fix: Admin bar. Rapid fix. * Fix. Skipping. WPForms check restricted email request skipped. * Fix. Helper. CURL request timeout increased. * Fix. Comments/users checker. Description fixed. * Fix. Get fields any. Preset nickname parameter fixed. * Fix: wpms settings.

Download this release

Release Info

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

Code changes from version 5.159.1 to 5.159.2

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.159.1
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: https://cleantalk.org
9
  Text Domain: cleantalk-spam-protect
@@ -1000,7 +1000,7 @@ function apbct_sfw_update__get_multifiles( $api_key, $updating_id ){
1000
  $file_ck_url__data = Helper::http__get_data_from_remote_gz__and_parse_csv( $result['file_ck_url'] );
1001
 
1002
  if( ! empty( $file_ck_url__data['error'] ) ){
1003
- return array( 'error' => 'GET EXPECTED RECORDS COUNT DATA: ' . $result['error'] );
1004
  }
1005
 
1006
  $expected_networks_count = 0;
@@ -1206,6 +1206,14 @@ function apbct_sfw_update__end_of_update() {
1206
  $apbct->save( 'fw_stats' );
1207
 
1208
  $apbct->stats['sfw']['entries'] = $wpdb->get_var('SELECT COUNT(*) FROM ' . APBCT_TBL_FIREWALL_DATA );
 
 
 
 
 
 
 
 
1209
  $apbct->stats['sfw']['last_update_time'] = time();
1210
  $apbct->save( 'stats' );
1211
 
@@ -1239,13 +1247,6 @@ function apbct_sfw_update__end_of_update() {
1239
  $apbct->data['last_firewall_updated'] = current_time('timestamp');
1240
  $apbct->save('data'); // Unused
1241
 
1242
- // Running sfw update once again in 12 min if entries is < 4000
1243
- if( ! $apbct->stats['sfw']['last_update_time'] &&
1244
- $apbct->stats['sfw']['entries'] < 4000
1245
- ){
1246
- wp_schedule_single_event( time() + 720, 'apbct_sfw_update__init' );
1247
- }
1248
-
1249
  // Delete update errors
1250
  $apbct->error_delete( 'sfw_update', 'save_settings' );
1251
 
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.159.2
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: https://cleantalk.org
9
  Text Domain: cleantalk-spam-protect
1000
  $file_ck_url__data = Helper::http__get_data_from_remote_gz__and_parse_csv( $result['file_ck_url'] );
1001
 
1002
  if( ! empty( $file_ck_url__data['error'] ) ){
1003
+ return array( 'error' => 'GET EXPECTED RECORDS COUNT DATA: ' . $file_ck_url__data['error'] );
1004
  }
1005
 
1006
  $expected_networks_count = 0;
1206
  $apbct->save( 'fw_stats' );
1207
 
1208
  $apbct->stats['sfw']['entries'] = $wpdb->get_var('SELECT COUNT(*) FROM ' . APBCT_TBL_FIREWALL_DATA );
1209
+
1210
+ // Running sfw update once again in 12 min if entries is < 4000
1211
+ if( ! $apbct->stats['sfw']['last_update_time'] &&
1212
+ $apbct->stats['sfw']['entries'] < 4000
1213
+ ){
1214
+ wp_schedule_single_event( time() + 720, 'apbct_sfw_update__init' );
1215
+ }
1216
+
1217
  $apbct->stats['sfw']['last_update_time'] = time();
1218
  $apbct->save( 'stats' );
1219
 
1247
  $apbct->data['last_firewall_updated'] = current_time('timestamp');
1248
  $apbct->save('data'); // Unused
1249
 
 
 
 
 
 
 
 
1250
  // Delete update errors
1251
  $apbct->error_delete( 'sfw_update', 'save_settings' );
1252
 
css/cleantalk-admin.min.css CHANGED
@@ -1 +1 @@
1
- :disabled{cursor:not-allowed!important}.apbct_color--gray{color:gray}.apbct_display--none{display:none}.ct_translate_links{color:rgba(150,150,20,1)}.ct_support_links{color:rgba(150,20,20,1)}.ct_faq_links{color:rgba(20,150,20,1)}.ct_setting_links{color:rgba(20,20,150,1)}.ct_translate_links:hover{color:rgba(210,210,20,1)!important}.ct_support_links:hover{color:rgba(250,20,20,1)!important}.ct_faq_links:hover{color:rgba(20,250,20,1)!important}.ct_setting_links:hover{color:rgba(20,20,250,1)!important}.ct_link_new_tab img{float:none!important;margin:0 2px;border:0}#negative_reports_table tr td{padding:7px 5px!important}#apbct_gdpr_open_modal:hover{cursor:pointer}#wp-admin-bar-cleantalk_admin_bar__parent_node img.cleantalk_admin_bar__apbct_icon{width:18px;height:18px;margin-top:7px}#wp-admin-bar-cleantalk_admin_bar__parent_node div.cleantalk_admin_bar__sum_counter{color:#fff;background:#d63638;display:inline;text-align:center;padding:2px 5px!important;border-radius:8px;vertical-align:unset;font-size:9px}.cleantalk_admin_bar__blocked div{cursor:not-allowed!important}.cleantalk_admin_bar__blocked div a{color:#777!important}.cleantalk_admin_bar__title{vertical-align:top;margin-left:5px!important}.cleantalk_admin_bar__separator{height:0!important}
1
+ :disabled{cursor:not-allowed!important}.apbct_color--gray{color:gray}.apbct_display--none{display:none}.ct_translate_links{color:rgba(150,150,20,1)}.ct_support_links{color:rgba(150,20,20,1)}.ct_faq_links{color:rgba(20,150,20,1)}.ct_setting_links{color:rgba(20,20,150,1)}.ct_translate_links:hover{color:rgba(210,210,20,1)!important}.ct_support_links:hover{color:rgba(250,20,20,1)!important}.ct_faq_links:hover{color:rgba(20,250,20,1)!important}.ct_setting_links:hover{color:rgba(20,20,250,1)!important}.ct_link_new_tab img{float:none!important;margin:0 2px;border:0}#negative_reports_table tr td{padding:7px 5px!important}#apbct_gdpr_open_modal:hover{cursor:pointer}#wp-admin-bar-cleantalk_admin_bar__parent_node{margin-right:5px}#wp-admin-bar-cleantalk_admin_bar__parent_node img.cleantalk_admin_bar__spbc_icon{width:14px;height:17px;margin-top:7px}#wp-admin-bar-cleantalk_admin_bar__parent_node img.cleantalk_admin_bar__apbct_icon{width:18px;height:18px;margin-top:7px}#wp-admin-bar-cleantalk_admin_bar__parent_node div.cleantalk_admin_bar__sum_counter{color:#999;display:inline;padding:2px 5px!important}.cleantalk_admin_bar__blocked div{cursor:not-allowed!important}.cleantalk_admin_bar__blocked div a{color:#777!important}.cleantalk_admin_bar__title{vertical-align:top}.cleantalk_admin_bar__separator{height:0!important}.cleantalk-admin_bar--list_wrapper .ab-sub-wrapper ul:last-child{margin-bottom:5px!important}
inc/cleantalk-admin.php CHANGED
@@ -188,8 +188,13 @@ function apbct_admin__init(){
188
  ){
189
  add_action( 'admin_bar_menu', 'apbct_admin__admin_bar__add_structure', 999 );
190
  }
191
- add_filter( 'cleantalk_admin_bar__add_icon_to_parent_node', 'apbct_admin__admin_bar__add_parent_icon', 10, 1 );
192
- add_action( 'admin_bar_menu', 'apbct_admin__admin_bar__add_child_nodes', 1000 );
 
 
 
 
 
193
  if( ! $spbc ){
194
  add_filter( 'admin_bar_menu', 'apbct_spbc_admin__admin_bar__add_child_nodes', 1001 );
195
  }
@@ -448,7 +453,7 @@ function apbct_admin__notice_message(){
448
  "<a href='{$settings_link}'>".$apbct->plugin_name."</a>",
449
  "<a href=\"https://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%20backend%20trial$user_token&cp_mode=antispam\" target=\"_blank\"><b>premium version</b></a>") .
450
  '</h3>
451
- <h4 style = "color: gray">Account status updates every 24 hours.</h4>
452
  </div>';
453
  $apbct->notice_show = false;
454
  }
@@ -456,19 +461,21 @@ function apbct_admin__notice_message(){
456
 
457
  //Renew notice from apbct_admin_init().api_method__notice_paid_till()
458
  if ($apbct->notice_show && $apbct->notice_renew == 1 && $apbct->moderate_ip == 0 && !$apbct->white_label) {
459
- $renew_link = "<a href=\"https://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%%20backend%%20renew$user_token&cp_mode=antispam\" target=\"_blank\">%s</a>";
460
- $button_html = sprintf($renew_link, '<input type="button" class="button button-primary" value="'.__('RENEW ANTI-SPAM', 'cleantalk-spam-protect').'" />');
461
- $link_html = sprintf($renew_link, "<b>".__('next year', 'cleantalk-spam-protect')."</b>");
462
-
463
- echo '<div class="updated" id="apbct_renew_notice">
464
- <h3>'.
465
- sprintf(__("Please renew your anti-spam license for %s.", 'cleantalk-spam-protect'), $link_html).
466
- '</h3>
467
- <h4 style = "color: gray">Account status updates every 24 hours.</h4>
 
468
  '.$button_html.'
469
  <br/><br/>
470
  </div>';
471
- $apbct->notice_show = false;
 
472
  }
473
 
474
  //"Wrong access key" notice (if ct_update_option().METHOD_notice_validate_key returns a error)
@@ -516,11 +523,16 @@ function apbct_admin__admin_bar__add_structure( $wp_admin_bar ) {
516
 
517
  global $spbc, $apbct;
518
 
 
 
519
  // Adding parent node
520
  $wp_admin_bar->add_node( array(
521
  'id' => 'cleantalk_admin_bar__parent_node',
522
- 'title' => apply_filters('cleantalk_admin_bar__add_icon_to_parent_node', '' )
523
- . '<span class="cleantalk_admin_bar__title">' . __('CleanTalk', 'cleantalk-spam-protect') . '</span>',
 
 
 
524
  ) );
525
 
526
  // Security
@@ -533,7 +545,7 @@ function apbct_admin__admin_bar__add_structure( $wp_admin_bar ) {
533
  'id' => 'apbct__parent_node',
534
  'title' => '<div class="cleantalk-admin_bar__parent">'
535
  . $title
536
- . '</div>'
537
  ) );
538
 
539
  // Antispam
@@ -551,13 +563,19 @@ function apbct_admin__admin_bar__add_structure( $wp_admin_bar ) {
551
  'parent' => 'cleantalk_admin_bar__parent_node',
552
  'id' => 'spbc__parent_node',
553
  'title' => '<div class="cleantalk-admin_bar__parent">'
554
- . $spbc_title
555
- . '</div>'
556
  ) );
557
  }
558
  }
559
 
560
- function apbct_admin__admin_bar__add_parent_icon( $icon ){
 
 
 
 
 
 
561
 
562
  global $apbct;
563
 
@@ -614,15 +632,25 @@ function apbct_admin__admin_bar__add_parent_icon( $icon ){
614
  );
615
  $apbct->counter__sum += $apbct->counter__sfw['all'];
616
  }
 
 
 
617
 
618
- $counter__sum__layout = $apbct->counter__sum
619
- ? ( '<div class="cleantalk_admin_bar__sum_counter">' . $apbct->counter__sum . '</div>')
620
- : '';
 
 
621
 
 
622
 
623
- return $icon
624
- . '<img class="cleantalk_admin_bar__apbct_icon" src="' . APBCT_URL_PATH . '/inc/images/logo.png" alt="">&nbsp;'
 
 
 
625
  . $counter__sum__layout;
 
626
  }
627
 
628
  function apbct_admin__admin_bar__add_child_nodes( $wp_admin_bar ) {
@@ -728,7 +756,7 @@ function apbct_admin__admin_bar__add_child_nodes( $wp_admin_bar ) {
728
  $args = array(
729
  'parent' => 'apbct__parent_node',
730
  'id' => 'ct_reset_counter',
731
- 'title' => '<hr style="margin-top: 7px;"><a href="?ct_reset_user_counter=1" title="Reset your personal counter of submissions.">'.__('Reset first counter', 'cleantalk-spam-protect').'</a>',
732
  );
733
  $wp_admin_bar->add_node( $args );// add a child item to our parent item. Counter reset.
734
 
@@ -736,7 +764,7 @@ function apbct_admin__admin_bar__add_child_nodes( $wp_admin_bar ) {
736
  $args = array(
737
  'parent' => 'apbct__parent_node',
738
  'id' => 'ct_reset_counters_all',
739
- 'title' => '<a href="?ct_reset_all_counters=1" title="Reset all counters.">'.__('Reset all counters', 'cleantalk-spam-protect').'</a>',
740
  );
741
  $wp_admin_bar->add_node( $args );
742
 
@@ -756,7 +784,7 @@ function apbct_spbc_admin__admin_bar__add_child_nodes( $wp_admin_bar ){
756
  $wp_admin_bar->add_node( array(
757
  'parent' => 'spbc__parent_node',
758
  'id' => 'apbct_admin_bar__install',
759
- 'title' => '<a target="_blank" style="color: #4291d1; font-weight: bold;" href="plugin-install.php?s=Security%20and%20Malware%20scan%20by%20CleanTalk%20&tab=search">' . __( 'Install Security by CleanTalk', 'cleantalk-spam-protect' ) . '</a>',
760
  ) );
761
 
762
  $wp_admin_bar->add_node( array(
188
  ){
189
  add_action( 'admin_bar_menu', 'apbct_admin__admin_bar__add_structure', 999 );
190
  }
191
+
192
+ add_action( 'cleantalk_admin_bar__prepare_counters', 'apbct_admin__admin_bar__prepare_counters' );
193
+ // Temporary disable the icon
194
+ //add_filter( 'cleantalk_admin_bar__parent_node__before', 'apbct_admin__admin_bar__add_parent_icon', 10, 1 );
195
+ add_filter( 'cleantalk_admin_bar__parent_node__after', 'apbct_admin__admin_bar__add_counter', 10, 1 );
196
+
197
+ add_action( 'admin_bar_menu', 'apbct_admin__admin_bar__add_child_nodes', 1000 );
198
  if( ! $spbc ){
199
  add_filter( 'admin_bar_menu', 'apbct_spbc_admin__admin_bar__add_child_nodes', 1001 );
200
  }
453
  "<a href='{$settings_link}'>".$apbct->plugin_name."</a>",
454
  "<a href=\"https://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%20backend%20trial$user_token&cp_mode=antispam\" target=\"_blank\"><b>premium version</b></a>") .
455
  '</h3>
456
+ <h4 style = "color: gray">' . esc_html__( 'Account status updates every 24 hours.', 'cleantalk-spam-protect' ) . '</h4>
457
  </div>';
458
  $apbct->notice_show = false;
459
  }
461
 
462
  //Renew notice from apbct_admin_init().api_method__notice_paid_till()
463
  if ($apbct->notice_show && $apbct->notice_renew == 1 && $apbct->moderate_ip == 0 && !$apbct->white_label) {
464
+ if(isset($_GET['page']) && in_array($_GET['page'], array('cleantalk', 'ct_check_spam', 'ct_check_users'))){
465
+ $renew_link = "<a href=\"https://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%%20backend%%20renew$user_token&cp_mode=antispam\" target=\"_blank\">%s</a>";
466
+ $button_html = sprintf($renew_link, '<input type="button" class="button button-primary" value="'.__('RENEW ANTI-SPAM', 'cleantalk-spam-protect').'" />');
467
+ $link_html = sprintf($renew_link, "<b>".__('next year', 'cleantalk-spam-protect')."</b>");
468
+
469
+ echo '<div class="updated" id="apbct_renew_notice">
470
+ <h3>'.
471
+ sprintf(__("Please renew your anti-spam license for %s.", 'cleantalk-spam-protect'), $link_html).
472
+ '</h3>
473
+ <h4 style = "color: gray">' . esc_html__( 'Account status updates every 24 hours.', 'cleantalk-spam-protect' ) . '</h4>
474
  '.$button_html.'
475
  <br/><br/>
476
  </div>';
477
+ $apbct->notice_show = false;
478
+ }
479
  }
480
 
481
  //"Wrong access key" notice (if ct_update_option().METHOD_notice_validate_key returns a error)
523
 
524
  global $spbc, $apbct;
525
 
526
+ do_action( 'cleantalk_admin_bar__prepare_counters' );
527
+
528
  // Adding parent node
529
  $wp_admin_bar->add_node( array(
530
  'id' => 'cleantalk_admin_bar__parent_node',
531
+ 'title' =>
532
+ apply_filters('cleantalk_admin_bar__parent_node__before', '' ) .
533
+ '<span class="cleantalk_admin_bar__title">' . __('CleanTalk', 'cleantalk-spam-protect') . '</span>' .
534
+ apply_filters('cleantalk_admin_bar__parent_node__after', '' ),
535
+ 'meta' => array( 'class' => 'cleantalk-admin_bar--list_wrapper'),
536
  ) );
537
 
538
  // Security
545
  'id' => 'apbct__parent_node',
546
  'title' => '<div class="cleantalk-admin_bar__parent">'
547
  . $title
548
+ . '</div>',
549
  ) );
550
 
551
  // Antispam
563
  'parent' => 'cleantalk_admin_bar__parent_node',
564
  'id' => 'spbc__parent_node',
565
  'title' => '<div class="cleantalk-admin_bar__parent">'
566
+ . $spbc_title
567
+ . '</div>'
568
  ) );
569
  }
570
  }
571
 
572
+ /**
573
+ * Prepares properties for counters in $apbct
574
+ * Handles counter reset
575
+ *
576
+ * @return void
577
+ */
578
+ function apbct_admin__admin_bar__prepare_counters(){
579
 
580
  global $apbct;
581
 
632
  );
633
  $apbct->counter__sum += $apbct->counter__sfw['all'];
634
  }
635
+ }
636
+
637
+ function apbct_admin__admin_bar__add_parent_icon( $icon ){
638
 
639
+ return $icon
640
+ . '<img class="cleantalk_admin_bar__apbct_icon" src="' . APBCT_URL_PATH . '/inc/images/logo.png" alt="">&nbsp;';
641
+ }
642
+
643
+ function apbct_admin__admin_bar__add_counter( $after ){
644
 
645
+ global $apbct;
646
 
647
+ $counter__sum__layout = ( $after ? ' / ' : '<div class="cleantalk_admin_bar__sum_counter">' ) .
648
+ '<span title="All anti-spam events">' . $apbct->counter__sum . '</span>' .
649
+ '</div>';
650
+
651
+ return ( $after ? substr( $after, 0, -6 ) : $after )
652
  . $counter__sum__layout;
653
+
654
  }
655
 
656
  function apbct_admin__admin_bar__add_child_nodes( $wp_admin_bar ) {
756
  $args = array(
757
  'parent' => 'apbct__parent_node',
758
  'id' => 'ct_reset_counter',
759
+ 'title' => '<hr style="margin-top: 7px;"><a href="?' . http_build_query(array_merge( $_GET, array( 'ct_reset_all_counters' => 1 ) ) ) . '" title="Reset your personal counter of submissions.">' . __('Reset first counter', 'cleantalk-spam-protect') . '</a>',
760
  );
761
  $wp_admin_bar->add_node( $args );// add a child item to our parent item. Counter reset.
762
 
764
  $args = array(
765
  'parent' => 'apbct__parent_node',
766
  'id' => 'ct_reset_counters_all',
767
+ 'title' => '<a href="?' . http_build_query(array_merge( $_GET, array( 'page' => 1 ) ) ). '" title="Reset all counters.">'.__('Reset all counters', 'cleantalk-spam-protect').'</a>',
768
  );
769
  $wp_admin_bar->add_node( $args );
770
 
784
  $wp_admin_bar->add_node( array(
785
  'parent' => 'spbc__parent_node',
786
  'id' => 'apbct_admin_bar__install',
787
+ 'title' => '<a target="_blank" href="plugin-install.php?s=Security%20and%20Malware%20scan%20by%20CleanTalk%20&tab=search">' . __( 'Install Security by CleanTalk', 'cleantalk-spam-protect' ) . '</a>',
788
  ) );
789
 
790
  $wp_admin_bar->add_node( array(
inc/cleantalk-common.php CHANGED
@@ -784,14 +784,29 @@ function ct_delete_spam_comments() {
784
  */
785
  function ct_get_fields_any($arr, $message=array(), $email = null, $nickname = array('nick' => '', 'first' => '', 'last' => ''), $subject = null, $contact = true, $prev_name = ''){
786
 
 
 
 
 
 
 
 
 
 
 
787
  return ct_gfa( $arr, $email, $nickname );
788
 
789
  }
790
 
791
  /**
792
- * Get data from an ARRAY recursively
793
- * @return array
794
- */
 
 
 
 
 
795
  function ct_gfa( $input_array, $email = '', $nickname = '' ) {
796
 
797
  $gfa = new GetFieldsAny( $input_array );
784
  */
785
  function ct_get_fields_any($arr, $message=array(), $email = null, $nickname = array('nick' => '', 'first' => '', 'last' => ''), $subject = null, $contact = true, $prev_name = ''){
786
 
787
+ if ( is_array( $nickname ) )
788
+ {
789
+ $nickname_str = '';
790
+ foreach ( $nickname as $value )
791
+ {
792
+ $nickname_str .= ($value ? $value . " " : "");
793
+ }
794
+ $nickname = trim( $nickname_str );
795
+ }
796
+
797
  return ct_gfa( $arr, $email, $nickname );
798
 
799
  }
800
 
801
  /**
802
+ * Get data from an ARRAY recursively
803
+ *
804
+ * @param array $input_array
805
+ * @param string $email
806
+ * @param string $nickname
807
+ *
808
+ * @return array
809
+ */
810
  function ct_gfa( $input_array, $email = '', $nickname = '' ) {
811
 
812
  $gfa = new GetFieldsAny( $input_array );
inc/cleantalk-settings.php CHANGED
@@ -520,7 +520,17 @@ function apbct_settings__set_fileds( $fields ){
520
  function apbct_settings__set_fileds__network( $fields ){
521
  global $apbct;
522
  $additional_fields = array(
523
- 'main' => array(
 
 
 
 
 
 
 
 
 
 
524
  'fields' => array(
525
  'multisite__white_label' => array(
526
  'type' => 'checkbox',
@@ -862,7 +872,9 @@ function apbct_settings__error__output($return = false){
862
  }
863
  continue;
864
  }
865
-
 
 
866
  $errors_out[$type] = '';
867
  if(isset($error['error_time']))
868
  $errors_out[$type] .= date('Y-m-d H:i:s', $error['error_time']) . ': ';
@@ -1050,7 +1062,7 @@ function apbct_settings__field__apikey(){
1050
  '<a class="apbct_color--gray" target="__blank" href="'
1051
  . sprintf( 'https://cleantalk.org/register?platform=wordpress&email=%s&website=%s',
1052
  urlencode(ct_get_admin_email()),
1053
- urlencode(parse_url(get_option('siteurl'),PHP_URL_HOST))
1054
  )
1055
  . '">',
1056
  '</a>'
520
  function apbct_settings__set_fileds__network( $fields ){
521
  global $apbct;
522
  $additional_fields = array(
523
+ 'wpms_settings' => array(
524
+ 'default_params' => array(),
525
+ 'description' => '',
526
+ 'html_before' => '<br>'
527
+ .'<span id="ct_adv_showhide">'
528
+ .'<a href="#" class="apbct_color--gray" onclick="event.preventDefault(); apbct_show_hide_elem(\'apbct_settings__dwpms_settings\');">'
529
+ .__('WordPress Multisite (WPMS) settings', 'cleantalk-spam-protect')
530
+ .'</a>'
531
+ .'</span>'
532
+ .'<div id="apbct_settings__dwpms_settings" style="display: none;">',
533
+ 'html_after' => '</div><br>',
534
  'fields' => array(
535
  'multisite__white_label' => array(
536
  'type' => 'checkbox',
872
  }
873
  continue;
874
  }
875
+ if (!empty($type)&& $apbct->white_label && !is_main_site() && ($type == 'sfw_update' || $type == 'key_invalid' || $type == 'account_check')) {
876
+ continue;
877
+ }
878
  $errors_out[$type] = '';
879
  if(isset($error['error_time']))
880
  $errors_out[$type] .= date('Y-m-d H:i:s', $error['error_time']) . ': ';
1062
  '<a class="apbct_color--gray" target="__blank" href="'
1063
  . sprintf( 'https://cleantalk.org/register?platform=wordpress&email=%s&website=%s',
1064
  urlencode(ct_get_admin_email()),
1065
+ urlencode(get_bloginfo('url'))
1066
  )
1067
  . '">',
1068
  '</a>'
lib/Cleantalk/Antispam/Integrations.php CHANGED
@@ -1,120 +1,120 @@
1
- <?php
2
-
3
-
4
- namespace Cleantalk\Antispam;
5
-
6
-
7
- class Integrations
8
- {
9
-
10
- private $integrations = array();
11
-
12
- private $integration;
13
-
14
- /**
15
- * Integrations constructor.
16
- *
17
- * @param array $integrations
18
- * @param array $settings
19
- */
20
- public function __construct( $integrations, $settings )
21
- {
22
- $this->integrations = $integrations;
23
-
24
- foreach( $this->integrations as $integration_name => $integration_info ){
25
-
26
- if( empty( $settings[ $integration_info['setting'] ] ) )
27
- continue;
28
-
29
- if( $integration_info['ajax'] ) {
30
- if( is_array( $integration_info['hook'] ) ) {
31
- foreach( $integration_info['hook'] as $hook ) {
32
- add_action( 'wp_ajax_' . $hook, array( $this, 'checkSpam' ), 1 );
33
- add_action( 'wp_ajax_nopriv_' . $hook, array( $this, 'checkSpam' ), 1 );
34
- }
35
- } else {
36
- add_action( 'wp_ajax_' . $integration_info['hook'], array( $this, 'checkSpam' ), 1 );
37
- add_action( 'wp_ajax_nopriv_' . $integration_info['hook'], array( $this, 'checkSpam' ), 1 );
38
- }
39
- } else {
40
- if( is_array( $integration_info['hook'] ) ) {
41
- foreach ( $integration_info['hook'] as $hook ) {
42
- add_action( $hook, array( $this, 'checkSpam' ) );
43
- }
44
- } else {
45
- add_action( $integration_info['hook'], array( $this, 'checkSpam' ) );
46
- }
47
-
48
- }
49
- }
50
- }
51
-
52
- public function checkSpam( $argument )
53
- {
54
- global $cleantalk_executed;
55
-
56
- // Getting current integration name
57
- $current_integration = $this->get_current_integration_triggered( current_filter() );
58
- if( $current_integration ) {
59
- // Instantiate the integration object
60
- $class = '\\Cleantalk\\Antispam\\Integrations\\' . $current_integration;
61
- if( class_exists( $class )) {
62
- $this->integration = new $class();
63
- if( ! ( $this->integration instanceof \Cleantalk\Antispam\Integrations\IntegrationBase ) ) {
64
- // @ToDo have to handle an error
65
- do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, array('Integration is not instanse of IntegrationBase class.') );
66
- return;
67
- }
68
- // Run data collecting for spam checking
69
- $data = $this->integration->getDataForChecking( $argument );
70
- if( ! is_null( $data ) ) {
71
- // Go spam checking
72
- $base_call_result = apbct_base_call(
73
- array(
74
- 'message' => !empty( $data['message'] ) ? json_encode( $data['message'] ) : '',
75
- 'sender_email' => !empty( $data['email'] ) ? $data['email'] : '',
76
- 'sender_nickname' => !empty( $data['nickname'] ) ? $data['nickname'] : '',
77
- 'post_info' => array(
78
- 'comment_type' => 'contact_form_wordpress_' . strtolower($current_integration),
79
- 'post_url' => apbct_get_server_variable( 'HTTP_REFERER' ), // Page URL must be an previous page
80
- ),
81
- ),
82
- isset( $data['register'] ) ? true : false
83
- );
84
-
85
- $ct_result = $base_call_result['ct_result'];
86
-
87
- $cleantalk_executed = true;
88
-
89
- if ($ct_result->allow == 0) {
90
- // Do blocking if it is a spam
91
- $this->integration->doBlock( $ct_result->comment );
92
- }
93
- } else {
94
- // @ToDo have to handle an error
95
- return;
96
- }
97
- }
98
- }
99
- }
100
-
101
- private function get_current_integration_triggered( $hook )
102
- {
103
- if( $hook !== false ) {
104
- foreach( $this->integrations as $integration_name => $integration_info ) {
105
- if( is_array( $integration_info['hook'] ) ) {
106
- foreach( $integration_info['hook'] as $integration_hook ) {
107
- if( strpos( $hook, $integration_hook ) !== false ) {
108
- return $integration_name;
109
- }
110
- }
111
- } else {
112
- if( strpos( $hook, $integration_info['hook'] ) !== false ) {
113
- return $integration_name;
114
- }
115
- }
116
- }
117
- }
118
- return false;
119
- }
120
  }
1
+ <?php
2
+
3
+
4
+ namespace Cleantalk\Antispam;
5
+
6
+
7
+ class Integrations
8
+ {
9
+
10
+ private $integrations = array();
11
+
12
+ private $integration;
13
+
14
+ /**
15
+ * Integrations constructor.
16
+ *
17
+ * @param array $integrations
18
+ * @param array $settings
19
+ */
20
+ public function __construct( $integrations, $settings )
21
+ {
22
+ $this->integrations = $integrations;
23
+
24
+ foreach( $this->integrations as $integration_name => $integration_info ){
25
+
26
+ if( empty( $settings[ $integration_info['setting'] ] ) )
27
+ continue;
28
+
29
+ if( $integration_info['ajax'] ) {
30
+ if( is_array( $integration_info['hook'] ) ) {
31
+ foreach( $integration_info['hook'] as $hook ) {
32
+ add_action( 'wp_ajax_' . $hook, array( $this, 'checkSpam' ), 1 );
33
+ add_action( 'wp_ajax_nopriv_' . $hook, array( $this, 'checkSpam' ), 1 );
34
+ }
35
+ } else {
36
+ add_action( 'wp_ajax_' . $integration_info['hook'], array( $this, 'checkSpam' ), 1 );
37
+ add_action( 'wp_ajax_nopriv_' . $integration_info['hook'], array( $this, 'checkSpam' ), 1 );
38
+ }
39
+ } else {
40
+ if( is_array( $integration_info['hook'] ) ) {
41
+ foreach ( $integration_info['hook'] as $hook ) {
42
+ add_action( $hook, array( $this, 'checkSpam' ) );
43
+ }
44
+ } else {
45
+ add_action( $integration_info['hook'], array( $this, 'checkSpam' ) );
46
+ }
47
+
48
+ }
49
+ }
50
+ }
51
+
52
+ public function checkSpam( $argument )
53
+ {
54
+ global $cleantalk_executed;
55
+
56
+ // Getting current integration name
57
+ $current_integration = $this->get_current_integration_triggered( current_filter() );
58
+ if( $current_integration ) {
59
+ // Instantiate the integration object
60
+ $class = '\\Cleantalk\\Antispam\\Integrations\\' . $current_integration;
61
+ if( class_exists( $class )) {
62
+ $this->integration = new $class();
63
+ if( ! ( $this->integration instanceof \Cleantalk\Antispam\Integrations\IntegrationBase ) ) {
64
+ // @ToDo have to handle an error
65
+ do_action( 'apbct_skipped_request', __FILE__ . ' -> ' . __FUNCTION__ . '():' . __LINE__, array('Integration is not instanse of IntegrationBase class.') );
66
+ return;
67
+ }
68
+ // Run data collecting for spam checking
69
+ $data = $this->integration->getDataForChecking( $argument );
70
+ if( ! is_null( $data ) ) {
71
+ // Go spam checking
72
+ $base_call_result = apbct_base_call(
73
+ array(
74
+ 'message' => !empty( $data['message'] ) ? json_encode( $data['message'] ) : '',
75
+ 'sender_email' => !empty( $data['email'] ) ? $data['email'] : '',
76
+ 'sender_nickname' => !empty( $data['nickname'] ) ? $data['nickname'] : '',
77
+ 'post_info' => array(
78
+ 'comment_type' => 'contact_form_wordpress_' . strtolower($current_integration),
79
+ 'post_url' => apbct_get_server_variable( 'HTTP_REFERER' ), // Page URL must be an previous page
80
+ ),
81
+ ),
82
+ isset( $data['register'] ) ? true : false
83
+ );
84
+
85
+ $ct_result = $base_call_result['ct_result'];
86
+
87
+ $cleantalk_executed = true;
88
+
89
+ if ($ct_result->allow == 0) {
90
+ // Do blocking if it is a spam
91
+ $this->integration->doBlock( $ct_result->comment );
92
+ }
93
+ } else {
94
+ // @ToDo have to handle an error
95
+ return;
96
+ }
97
+ }
98
+ }
99
+ }
100
+
101
+ private function get_current_integration_triggered( $hook )
102
+ {
103
+ if( $hook !== false ) {
104
+ foreach( $this->integrations as $integration_name => $integration_info ) {
105
+ if( is_array( $integration_info['hook'] ) ) {
106
+ foreach( $integration_info['hook'] as $integration_hook ) {
107
+ if( strpos( $hook, $integration_hook ) !== false ) {
108
+ return $integration_name;
109
+ }
110
+ }
111
+ } else {
112
+ if( strpos( $hook, $integration_info['hook'] ) !== false ) {
113
+ return $integration_name;
114
+ }
115
+ }
116
+ }
117
+ }
118
+ return false;
119
+ }
120
  }
lib/Cleantalk/ApbctWP/FindSpam/CommentsChecker.php CHANGED
@@ -27,7 +27,7 @@ class CommentsChecker extends Checker
27
  'ct_confirm_trash_all' => __('Trash all spam comments from the list?', 'cleantalk-spam-protect'),
28
  'ct_confirm_spam_all' => __('Mark as spam all comments from the list?', 'cleantalk-spam-protect'),
29
  'ct_comments_added_after' => __('comments', 'cleantalk-spam-protect'),
30
- 'ct_status_string' => __('Checked %s, found %s spam comments and %s non-checkable comments (without IP or email).', 'cleantalk-spam-protect'),
31
  'ct_status_string_warning' => '<p>'.__('Please do backup of WordPress database before delete any accounts!', 'cleantalk-spam-protect').'</p>',
32
  'start' => !empty($_COOKIE['ct_comments_start_check']) ? true : false,
33
  ));
@@ -340,7 +340,7 @@ class CommentsChecker extends Checker
340
 
341
  if( ! $direct_call ) {
342
  $return['message'] .= sprintf (
343
- esc_html__('Checked %s, found %s spam comments and %s non-checkable comments (without IP or email)', 'cleantalk-spam-protect'),
344
  $cnt_checked,
345
  $cnt_spam,
346
  $cnt_bad
@@ -355,7 +355,7 @@ class CommentsChecker extends Checker
355
  if ( $res ) {
356
 
357
  $return['message'] .= sprintf (
358
- __("Last check %s: checked %s comments, found %s spam comments and %s non-checkable comments (without IP or email).", 'cleantalk-spam-protect'),
359
  self::lastCheckDate(),
360
  $cnt_checked,
361
  $cnt_spam,
27
  'ct_confirm_trash_all' => __('Trash all spam comments from the list?', 'cleantalk-spam-protect'),
28
  'ct_confirm_spam_all' => __('Mark as spam all comments from the list?', 'cleantalk-spam-protect'),
29
  'ct_comments_added_after' => __('comments', 'cleantalk-spam-protect'),
30
+ 'ct_status_string' => __('Checked %s, found %s spam comments and %s non-checkable comments (without IP and email).', 'cleantalk-spam-protect'),
31
  'ct_status_string_warning' => '<p>'.__('Please do backup of WordPress database before delete any accounts!', 'cleantalk-spam-protect').'</p>',
32
  'start' => !empty($_COOKIE['ct_comments_start_check']) ? true : false,
33
  ));
340
 
341
  if( ! $direct_call ) {
342
  $return['message'] .= sprintf (
343
+ esc_html__('Checked %s, found %s spam comments and %s non-checkable comments (without IP and email)', 'cleantalk-spam-protect'),
344
  $cnt_checked,
345
  $cnt_spam,
346
  $cnt_bad
355
  if ( $res ) {
356
 
357
  $return['message'] .= sprintf (
358
+ __("Last check %s: checked %s comments, found %s spam comments and %s non-checkable comments (without IP and email).", 'cleantalk-spam-protect'),
359
  self::lastCheckDate(),
360
  $cnt_checked,
361
  $cnt_spam,
lib/Cleantalk/ApbctWP/FindSpam/UsersChecker.php CHANGED
@@ -29,7 +29,7 @@ class UsersChecker extends Checker
29
  'ct_confirm_deletion_all' => __('Do you confirm deletion selected accounts and all content owned by the accounts? Please do backup of the site before deletion!', 'cleantalk-spam-protect'),
30
  'ct_iusers' => __('users.', 'cleantalk-spam-protect'),
31
  'ct_csv_filename' => "user_check_by_".$current_user->user_login,
32
- 'ct_status_string' => __("Checked %s, found %s spam users and %s non-checkable users (without IP or email)", 'cleantalk-spam-protect'),
33
  'ct_status_string_warning' => "<p>".__("Please do backup of WordPress database before delete any accounts!", 'cleantalk-spam-protect')."</p>"
34
  ));
35
 
@@ -407,7 +407,7 @@ class UsersChecker extends Checker
407
 
408
  if( ! $direct_call ) {
409
  $return['message'] .= sprintf (
410
- esc_html__('Checked %s, found %s spam users and %s non-checkable users (without IP or email)', 'cleantalk-spam-protect'),
411
  $cnt_checked,
412
  $cnt_spam,
413
  $cnt_bad
@@ -421,7 +421,7 @@ class UsersChecker extends Checker
421
 
422
  if ( $res ) {
423
  $return['message'] .= sprintf (
424
- __("Last check %s: checked %s users, found %s spam users and %s non-checkable users (without IP or email).", 'cleantalk-spam-protect'),
425
  self::lastCheckDate(),
426
  $cnt_checked,
427
  $cnt_spam,
29
  'ct_confirm_deletion_all' => __('Do you confirm deletion selected accounts and all content owned by the accounts? Please do backup of the site before deletion!', 'cleantalk-spam-protect'),
30
  'ct_iusers' => __('users.', 'cleantalk-spam-protect'),
31
  'ct_csv_filename' => "user_check_by_".$current_user->user_login,
32
+ 'ct_status_string' => __("Checked %s, found %s spam users and %s non-checkable users (without IP and email)", 'cleantalk-spam-protect'),
33
  'ct_status_string_warning' => "<p>".__("Please do backup of WordPress database before delete any accounts!", 'cleantalk-spam-protect')."</p>"
34
  ));
35
 
407
 
408
  if( ! $direct_call ) {
409
  $return['message'] .= sprintf (
410
+ esc_html__('Checked %s, found %s spam users and %s non-checkable users (without IP and email)', 'cleantalk-spam-protect'),
411
  $cnt_checked,
412
  $cnt_spam,
413
  $cnt_bad
421
 
422
  if ( $res ) {
423
  $return['message'] .= sprintf (
424
+ __("Last check %s: checked %s users, found %s spam users and %s non-checkable users (without IP and email).", 'cleantalk-spam-protect'),
425
  self::lastCheckDate(),
426
  $cnt_checked,
427
  $cnt_spam,
lib/Cleantalk/Common/Helper.php CHANGED
@@ -571,7 +571,7 @@ class Helper
571
  array(
572
  CURLOPT_URL => $url,
573
  CURLOPT_RETURNTRANSFER => true,
574
- CURLOPT_CONNECTTIMEOUT_MS => 6000,
575
  CURLOPT_FORBID_REUSE => true,
576
  CURLOPT_USERAGENT => self::AGENT . '; ' . ( isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : 'UNKNOWN_HOST' ),
577
  CURLOPT_POST => true,
571
  array(
572
  CURLOPT_URL => $url,
573
  CURLOPT_RETURNTRANSFER => true,
574
+ CURLOPT_CONNECTTIMEOUT_MS => 10000,
575
  CURLOPT_FORBID_REUSE => true,
576
  CURLOPT_USERAGENT => self::AGENT . '; ' . ( isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : 'UNKNOWN_HOST' ),
577
  CURLOPT_POST => true,
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: spam, antispam, anti-spam, comments, firewall
4
  Requires at least: 3.0
5
  Tested up to: 5.7
6
  Requires PHP: 5.6
7
- Stable tag: 5.159.1
8
  License: GPLv2
9
 
10
  Spam protection, anti-spam, firewall, premium plugin. No spam comments & users, no spam contact form & WooCommerce anti-spam.
@@ -55,16 +55,13 @@ CleanTalk is a free anti spam plugin which work with the premium Cloud AntiSpam
55
  Native spam protection for WordPress, JetPack comments and any other comment plugins. The plugin moves spam comments to SPAM folder or you can set the option to ban spam comments silently. You can also enable the option in the plugin settings to auto-delete comments from SPAM folder.
56
 
57
  = Spam bots registrations filter =
58
- Blocks spam registration in all forms, forums and boards.
59
 
60
  = Spam filter for contact forms =
61
- Blocks spam in any contact forms. We have made direct integrations with many popular forms, form builders and contact forms of various Themes.
62
 
63
  = WooCommerce spam filter =
64
  Anti-spam by CleanTalk filters spam registrations and spam reviews for WooCommerce. The plugin is fully compatible with WooCommerce 2.1 and higher.
65
 
66
  = Newsletters antispam filter =
67
- Blocks spam in any subscription forms. We have tested anti-spam protection and made direct integrations for many popular subscription forms.
68
 
69
  = Spam filter for theme contact forms =
70
  The plugin blocks spam emails via any theme (built-in ones included) contact forms. The plugin filters spam emails silently (without any error notices on WordPress frontend) in AJAX forms as well.
@@ -79,10 +76,6 @@ Spam protection for everything about bbPress: logins, registrations, forums, top
79
  * Any submission to the site (checkbox 'Check all POST data')
80
 
81
  = Compatible with WordPress cache plugins =
82
- Cleantalk Anti-Spam has been tested with many caching plugins and we have made integrations for the most popular caching plugins.
83
-
84
- If you have questions about spam protection support for a particular plugin or compatibility, you can ask a question on Support Forum.
85
- https://wordpress.org/support/plugin/cleantalk-spam-protect/
86
 
87
  = Check existing comments for spam. Bulk spam comments removal. Spam comment Cleaner =
88
  With the help of anti-spam by CleanTalk you can inspect through existing comments to find and quickly delete spam comments at once. To use this function, go to WP Console -> Comments -> Find spam comments.
@@ -164,9 +157,6 @@ Spam FireWall can mitigate HTTP/HTTPS DDoS attacks. When an intruder makes GET r
164
  = Spam FireWall: Anti-Flood & Anti-Crawler =
165
  Spam FireWall: Anti-Flood and Anti-Crawler options are intended for blocking unwanted bots, content parsing, shop goods prices parsing or aggressive website scanning bots. Learn more https://cleantalk.org/help/anti-flood-and-anti-crawler
166
 
167
- = XML-RPC brute force protection =
168
- Spam FireWall can mitigate XML-RPC brute force attacks. It blocks XML-RPC attacks from bad IP addresses. This helps to prevent bruteforce attacks by a Remote Procedure Call.
169
-
170
  = No spam comments, no spam registrations, no spam contact emails, no spam trackbacks. CAPTCHA-free anti-spam for WordPress =
171
  Spam is one of the most irritating things. Spam rates are increasing every year and conventional anti-spam can no longer handle all spam bots. CleanTalk prevents and automatically blocks spam. You'll be surprised how effective CleanTalk is in protecting from spam.
172
 
@@ -581,6 +571,23 @@ If your website has forms that send data to external sources, you can enable opt
581
 
582
  == Changelog ==
583
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
584
  = 5.159.1 Jun 10 2021 =
585
  * Fix: Cron. Cron calling in cleantalk-updater.php fixed.
586
 
4
  Requires at least: 3.0
5
  Tested up to: 5.7
6
  Requires PHP: 5.6
7
+ Stable tag: 5.159.2
8
  License: GPLv2
9
 
10
  Spam protection, anti-spam, firewall, premium plugin. No spam comments & users, no spam contact form & WooCommerce anti-spam.
55
  Native spam protection for WordPress, JetPack comments and any other comment plugins. The plugin moves spam comments to SPAM folder or you can set the option to ban spam comments silently. You can also enable the option in the plugin settings to auto-delete comments from SPAM folder.
56
 
57
  = Spam bots registrations filter =
 
58
 
59
  = Spam filter for contact forms =
 
60
 
61
  = WooCommerce spam filter =
62
  Anti-spam by CleanTalk filters spam registrations and spam reviews for WooCommerce. The plugin is fully compatible with WooCommerce 2.1 and higher.
63
 
64
  = Newsletters antispam filter =
 
65
 
66
  = Spam filter for theme contact forms =
67
  The plugin blocks spam emails via any theme (built-in ones included) contact forms. The plugin filters spam emails silently (without any error notices on WordPress frontend) in AJAX forms as well.
76
  * Any submission to the site (checkbox 'Check all POST data')
77
 
78
  = Compatible with WordPress cache plugins =
 
 
 
 
79
 
80
  = Check existing comments for spam. Bulk spam comments removal. Spam comment Cleaner =
81
  With the help of anti-spam by CleanTalk you can inspect through existing comments to find and quickly delete spam comments at once. To use this function, go to WP Console -> Comments -> Find spam comments.
157
  = Spam FireWall: Anti-Flood & Anti-Crawler =
158
  Spam FireWall: Anti-Flood and Anti-Crawler options are intended for blocking unwanted bots, content parsing, shop goods prices parsing or aggressive website scanning bots. Learn more https://cleantalk.org/help/anti-flood-and-anti-crawler
159
 
 
 
 
160
  = No spam comments, no spam registrations, no spam contact emails, no spam trackbacks. CAPTCHA-free anti-spam for WordPress =
161
  Spam is one of the most irritating things. Spam rates are increasing every year and conventional anti-spam can no longer handle all spam bots. CleanTalk prevents and automatically blocks spam. You'll be surprised how effective CleanTalk is in protecting from spam.
162
 
571
 
572
  == Changelog ==
573
 
574
+ = 5.159.2 Jun 15 2021 =
575
+ * Fix. Renew notice banner shows only on cleantalk pages.
576
+ * Fix. SFW updating. Getting remote data error handling fixed.
577
+ * Upd. Readme updated.
578
+ * Fix. SFW. Auto-updating fixed.
579
+ * Fix: Admin bar style. Install link is no longer highlighted.
580
+ * Fix: Admin bar style. Style for security icon.
581
+ * Fix: Admin bar. Reset buttons counters leads to the same page.
582
+ * Fix. Manual register link fixed.
583
+ * Fix: do not display errors on subsites when wl is enabled.
584
+ * Fix: Admin bar. Rapid fix.
585
+ * Fix. Skipping. WPForms check restricted email request skipped.
586
+ * Fix. Helper. CURL request timeout increased.
587
+ * Fix. Comments/users checker. Description fixed.
588
+ * Fix. Get fields any. Preset nickname parameter fixed.
589
+ * Fix: wpms settings.
590
+
591
  = 5.159.1 Jun 10 2021 =
592
  * Fix: Cron. Cron calling in cleantalk-updater.php fixed.
593