Spam protection, AntiSpam, FireWall by CleanTalk - Version 5.81

Version Description

November 22 2017 = * Fixed error with "Show/Hide key" button. * Slightly improved spam protection for all forms. * Small errors fixes.

Download this release

Release Info

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

Code changes from version 5.80 to 5.81

assets/js/cleantalk-admin-settings-page.js CHANGED
@@ -21,7 +21,7 @@ jQuery(document).ready(function(){
21
  if(cleantalk_good_key)
22
  {
23
  if(cleantalk_testing_failed !== true)
24
- jQuery('.form-table').first().hide();
25
 
26
  banner_html="<div id='ct_stats_banner'>"+cleantalk_blocked_message;
27
  banner_html+=cleantalk_statistics_link+"&nbsp;&nbsp;"+cleantalk_support_link+'</div>';
@@ -36,25 +36,20 @@ jQuery(document).ready(function(){
36
  }
37
 
38
  jQuery('#cleantalk_access_key_link').click(function(){
39
- if(jQuery('.form-table').first().is(":visible"))
40
- {
41
- jQuery('.form-table').first().hide();
42
- }
43
  else
44
- {
45
- jQuery('.form-table').first().show();
46
- }
47
  });
 
48
  jQuery('#cleantalk_negative_report_link').click(function(){
49
- if(jQuery('.form-table').first().is(":visible")){
50
- jQuery('.form-table').first().hide();
51
  }else{
52
- jQuery('.form-table').first().show();
53
- jQuery('.form-table tr').eq(1).show();
54
- jQuery('.form-table tr').eq(0).hide();
55
-
56
  }
57
  });
 
58
  ct_adv_settings=jQuery('#cleantalk_registrations_test1').parent().parent().parent().parent();
59
  ct_adv_settings.hide();
60
  ct_adv_settings_title=ct_adv_settings.prev();
21
  if(cleantalk_good_key)
22
  {
23
  if(cleantalk_testing_failed !== true)
24
+ jQuery('.form-table').first().find('tr').hide();
25
 
26
  banner_html="<div id='ct_stats_banner'>"+cleantalk_blocked_message;
27
  banner_html+=cleantalk_statistics_link+"&nbsp;&nbsp;"+cleantalk_support_link+'</div>';
36
  }
37
 
38
  jQuery('#cleantalk_access_key_link').click(function(){
39
+ if(jQuery('.form-table').first().find('tr').eq(0).is(":visible"))
40
+ jQuery('.form-table').first().find('tr').eq(0).hide();
 
 
41
  else
42
+ jQuery('.form-table').first().find('tr').eq(0).show();
 
 
43
  });
44
+
45
  jQuery('#cleantalk_negative_report_link').click(function(){
46
+ if(jQuery('.form-table').first().find('tr').eq(1).is(":visible")){
47
+ jQuery('.form-table').first().find('tr').eq(1).hide();
48
  }else{
49
+ jQuery('.form-table').first().find('tr').eq(1).show();
 
 
 
50
  }
51
  });
52
+
53
  ct_adv_settings=jQuery('#cleantalk_registrations_test1').parent().parent().parent().parent();
54
  ct_adv_settings.hide();
55
  ct_adv_settings_title=ct_adv_settings.prev();
assets/js/cleantalk-dashboard-widget.js CHANGED
@@ -13,7 +13,6 @@ jQuery(document).ready(function(){
13
  // Fixing default wrapper style
14
  jQuery("#ct_widget_wrapper").parent().css('padding', 0);
15
 
16
-
17
  // Chart
18
  var ct_chart = jQuery("#ct_widget_chart"),
19
  locale = navigator.language || navigator.userLanguage;
13
  // Fixing default wrapper style
14
  jQuery("#ct_widget_wrapper").parent().css('padding', 0);
15
 
 
16
  // Chart
17
  var ct_chart = jQuery("#ct_widget_chart"),
18
  locale = navigator.language || navigator.userLanguage;
cleantalk.php CHANGED
@@ -3,15 +3,15 @@
3
  Plugin Name: Anti-Spam by CleanTalk
4
  Plugin URI: http://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. Formerly Anti-Spam by CleanTalk.
6
- Version: 5.80
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: http://cleantalk.org
9
  */
10
 
11
- $cleantalk_plugin_version='5.80';
12
- $ct_agent_version = 'wordpress-580';
13
- $cleantalk_executed=false;
14
-
15
  define('CLEANTALK_REMOTE_CALL_SLEEP', 10); // Minimum time between remote call
16
 
17
  if(!defined('CLEANTALK_PLUGIN_DIR')){
3
  Plugin Name: Anti-Spam by CleanTalk
4
  Plugin URI: http://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. Formerly Anti-Spam by CleanTalk.
6
+ Version: 5.81
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: http://cleantalk.org
9
  */
10
 
11
+ $cleantalk_plugin_version='5.81';
12
+ $ct_agent_version = 'wordpress-581';
13
+ $cleantalk_executed = false;
14
+
15
  define('CLEANTALK_REMOTE_CALL_SLEEP', 10); // Minimum time between remote call
16
 
17
  if(!defined('CLEANTALK_PLUGIN_DIR')){
inc/cleantalk-admin.php CHANGED
@@ -72,8 +72,6 @@ function ct_dashboard_statistics_widget_output( $post, $callback_args ) {
72
  </form>
73
  <h4 class='ct_widget_block_header' style='margin-left: 12px;'><?php _e('7 days anti-spam stats', 'cleantalk'); ?></h4>
74
  <div class='ct_widget_block ct_widget_chart_wrapper'>
75
-
76
- <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
77
  <script>
78
  var ct_chart_data = <?php echo $to_chart; ?>;
79
  </script>
@@ -166,11 +164,10 @@ function ct_dashboard_statistics_widget_output( $post, $callback_args ) {
166
  __( 'has blocked %s spam. The statistics is automatically updated every 24 hours.', 'cleantalk' ),
167
  $blocked
168
  );
169
- print "</span></div>";
170
  }
171
  }
172
-
173
- echo "</div>";
174
  }
175
 
176
  /**
@@ -206,10 +203,11 @@ function apbct_enqueue_scripts($hook) {
206
  wp_localize_script( 'jquery', 'ctAdminCommon', array(
207
  'logo_small_colored' => '<img src="' . plugin_dir_url(__FILE__) . 'images/logo_color.png" alt="" height="" style="width: 17px; vertical-align: text-bottom;" />'
208
  ));
209
-
210
  // Scripts & Styles to main dashboard page
211
  if($hook == 'index.php' && current_user_can('activate_plugins')){
212
- wp_enqueue_script('ct_admin_js_widget_dashboard', plugins_url('/cleantalk-spam-protect/assets/js/cleantalk-dashboard-widget.js'), array(), $cleantalk_plugin_version);
 
213
  wp_enqueue_style('ct_admin_css_widget_dashboard', plugins_url('/cleantalk-spam-protect/assets/css/cleantalk-dashboard-widget.css'), array(), $cleantalk_plugin_version, 'all');
214
  }
215
 
@@ -1039,7 +1037,7 @@ function ct_input_apikey() {
1039
  __( 'has blocked <b>%s</b> spam.', 'cleantalk' ),
1040
  $blocked
1041
  );
1042
- print "</span></div><br />\";\n";
1043
  }
1044
  else
1045
  {
72
  </form>
73
  <h4 class='ct_widget_block_header' style='margin-left: 12px;'><?php _e('7 days anti-spam stats', 'cleantalk'); ?></h4>
74
  <div class='ct_widget_block ct_widget_chart_wrapper'>
 
 
75
  <script>
76
  var ct_chart_data = <?php echo $to_chart; ?>;
77
  </script>
164
  __( 'has blocked %s spam. The statistics is automatically updated every 24 hours.', 'cleantalk' ),
165
  $blocked
166
  );
167
+ print "</span><br><br>".sprintf(__('%sDo you like CleanTalk? %sPost your feedback here%s', 'cleantalk'), '<b style=\'font-size: 16px;\'>', '<u><a href=\'https://wordpress.org/support/plugin/cleantalk-spam-protect/reviews/#new-post\' target=\'_blank\'>', '</a></u>.</b>')."</div>";
168
  }
169
  }
170
+ echo "</div>";
 
171
  }
172
 
173
  /**
203
  wp_localize_script( 'jquery', 'ctAdminCommon', array(
204
  'logo_small_colored' => '<img src="' . plugin_dir_url(__FILE__) . 'images/logo_color.png" alt="" height="" style="width: 17px; vertical-align: text-bottom;" />'
205
  ));
206
+
207
  // Scripts & Styles to main dashboard page
208
  if($hook == 'index.php' && current_user_can('activate_plugins')){
209
+ wp_enqueue_script('ct_gstatic_charts_loader', 'https://www.gstatic.com/charts/loader.js', array(), $cleantalk_plugin_version);
210
+ wp_enqueue_script('ct_admin_js_widget_dashboard', plugins_url('/cleantalk-spam-protect/assets/js/cleantalk-dashboard-widget.js'), array('ct_gstatic_charts_loader'), $cleantalk_plugin_version);
211
  wp_enqueue_style('ct_admin_css_widget_dashboard', plugins_url('/cleantalk-spam-protect/assets/css/cleantalk-dashboard-widget.css'), array(), $cleantalk_plugin_version, 'all');
212
  }
213
 
1037
  __( 'has blocked <b>%s</b> spam.', 'cleantalk' ),
1038
  $blocked
1039
  );
1040
+ echo "</span></div><br />\";\n";
1041
  }
1042
  else
1043
  {
inc/cleantalk-comments.php CHANGED
@@ -461,15 +461,17 @@ function ct_ajax_info_comments($direct_call = false){
461
  $res = $wpdb->get_results("
462
  SELECT COUNT(DISTINCT comment_ID) AS cnt
463
  FROM `wp_comments` AS comm
464
- WHERE (comm.comment_approved = '1' OR comm.comment_approved = '0')"
465
- .(!empty($meta)
466
- ? "AND EXISTS (SELECT comment_id, meta_key
467
  FROM wp_commentmeta meta
468
- WHERE comm.comment_ID = meta.comment_id AND meta_key = '$meta')" : '').
469
- (isset($from_date, $till_date)
470
- ? "AND comment_date_gmt BETWEEN
471
- STR_TO_DATE('".$from_date."', '%Y-%m-%d %H:%i:%s') AND
472
- STR_TO_DATE('".$till_date."', '%Y-%m-%d %H:%i:%s')" : ''),
 
 
473
  ARRAY_A);
474
  $result[] = $res[0]['cnt'];
475
  }else{
461
  $res = $wpdb->get_results("
462
  SELECT COUNT(DISTINCT comment_ID) AS cnt
463
  FROM `wp_comments` AS comm
464
+ WHERE comm.comment_approved IN ('1','0')".
465
+ (!empty($meta)
466
+ ? " AND EXISTS (SELECT comment_id, meta_key
467
  FROM wp_commentmeta meta
468
+ WHERE comm.comment_ID = meta.comment_id AND meta_key = '$meta')"
469
+ : '').
470
+ (isset($from_date, $till_date)
471
+ ? " AND comment_date_gmt BETWEEN
472
+ STR_TO_DATE('$from_date', '%Y-%m-%d %H:%i:%s') AND
473
+ STR_TO_DATE('$till_date', '%Y-%m-%d %H:%i:%s')"
474
+ : ''),
475
  ARRAY_A);
476
  $result[] = $res[0]['cnt'];
477
  }else{
inc/cleantalk-common.php CHANGED
@@ -289,20 +289,24 @@ function get_sender_info($cookie_submit_time = false, $field_count = false) {
289
  $cookie_test = apbct_cookies_test();
290
 
291
  $sender_info = array(
292
- 'page_url' => htmlspecialchars(@$_SERVER['SERVER_NAME'].@$_SERVER['REQUEST_URI']),
293
- 'cms_lang' => substr(get_locale(), 0, 2),
294
- 'REFFERRER' => htmlspecialchars(@$_SERVER['HTTP_REFERER']),
295
- 'USER_AGENT' => htmlspecialchars(@$_SERVER['HTTP_USER_AGENT']),
296
- 'php_session' => $php_session,
297
- 'cookies_enabled' => $cookie_submit_time ? $cookie_test : ct_cookies_test(true),
298
- 'REFFERRER_PREVIOUS' => $cookie_test && !empty($_COOKIE['apbct_prev_referer']) ? htmlspecialchars($_COOKIE['apbct_prev_referer']) : null,
299
- 'site_landing_ts' => $cookie_test && !empty($_COOKIE['apbct_site_landing_ts']) ? htmlspecialchars($_COOKIE['apbct_site_landing_ts']) : null,
300
- 'direct_post' => $ct_direct_post,
301
- 'checkjs_data_post' => $checkjs_data_post,
302
- 'checkjs_data_cookies' => $checkjs_data_cookies,
303
- 'ct_options' => json_encode($options2server),
304
- 'fields_number' => sizeof($_POST),
305
- 'js_info' => $js_info,
 
 
 
 
306
  );
307
 
308
  if($field_count){
289
  $cookie_test = apbct_cookies_test();
290
 
291
  $sender_info = array(
292
+ 'page_url' => htmlspecialchars(@$_SERVER['SERVER_NAME'].@$_SERVER['REQUEST_URI']),
293
+ 'cms_lang' => substr(get_locale(), 0, 2),
294
+ 'REFFERRER' => htmlspecialchars(@$_SERVER['HTTP_REFERER']),
295
+ 'USER_AGENT' => htmlspecialchars(@$_SERVER['HTTP_USER_AGENT']),
296
+ 'php_session' => $php_session,
297
+ 'cookies_enabled' => $cookie_submit_time ? $cookie_test : ct_cookies_test(true),
298
+ 'REFFERRER_PREVIOUS' => $cookie_test && !empty($_COOKIE['apbct_prev_referer']) ? htmlspecialchars($_COOKIE['apbct_prev_referer']) : null,
299
+ 'site_landing_ts' => $cookie_test && !empty($_COOKIE['apbct_site_landing_ts']) ? htmlspecialchars($_COOKIE['apbct_site_landing_ts']) : null,
300
+ 'direct_post' => $ct_direct_post,
301
+ 'checkjs_data_post' => $checkjs_data_post,
302
+ 'checkjs_data_cookies' => $checkjs_data_cookies,
303
+ 'ct_options' => json_encode($options2server),
304
+ 'fields_number' => sizeof($_POST),
305
+ 'js_info' => $js_info,
306
+ 'mouse_cursor_positions' => isset($_COOKIE['ct_pointer_data']) ? json_decode($_COOKIE['ct_pointer_data']) : 0,
307
+ 'js_timezone' => isset($_COOKIE['ct_timezone']) ? $_COOKIE['ct_timezone'] : 0,
308
+ 'key_press_timestamp' => isset($_COOKIE['ct_fkp_timestamp']) ? $_COOKIE['ct_fkp_timestamp'] : 0,
309
+ 'page_set_timestamp' => isset($_COOKIE['ct_ps_timestamp']) ? $_COOKIE['ct_ps_timestamp'] : 0,
310
  );
311
 
312
  if($field_count){
inc/cleantalk-public.php CHANGED
@@ -636,7 +636,8 @@ function ct_footer_add_cookie() {
636
  ct_setup_page_timer(true);
637
 
638
  ct_add_hidden_fields(true, 'ct_checkjs', false, true, true);
639
-
 
640
  return null;
641
  }
642
 
@@ -787,7 +788,7 @@ function ct_add_mouse_tracking($return_string = false){
787
 
788
  // Ready function
789
  function apbct_ready(){
790
- ctSetCookieSec("apbct_field_count", 0);
791
  for(var i=0; i < document.forms.length; i++){
792
  var form = document.forms[i];
793
  form.onsubmit = function(){
@@ -805,7 +806,6 @@ function ct_add_mouse_tracking($return_string = false){
805
  elem_count--;
806
  }else{
807
  apbct_vf.apbct_visible_fields += elem.getAttribute("name") + (j+1 == form.elements.length ? "" : " ");
808
- apbct_vf[elem.getAttribute("name")] = elem.value;
809
  }
810
  }
811
  ctSetCookieSec("apbct_visible_fields", JSON.stringify(apbct_vf));
@@ -870,6 +870,7 @@ function ct_frm_entries_footer_scripts($fields, $form) {
870
  }";
871
 
872
  $js_code = ct_add_hidden_fields(true, 'ct_checkjs', true, true);
 
873
  $js_code = strip_tags($js_code); // Removing <script> tag
874
  echo $js_code;
875
  }
@@ -1831,6 +1832,7 @@ function ct_grunion_contact_form_field_html($r, $field_label) {
1831
  }
1832
 
1833
  $r .= ct_add_hidden_fields(true, $ct_checkjs_jpcf, true);
 
1834
  $ct_jpcf_patched = true;
1835
 
1836
  ct_setup_page_timer();
@@ -2098,7 +2100,7 @@ function ct_wpcf7_display_message($message, $status = 'spam') {
2098
  */
2099
  function ct_si_contact_display_after_fields($string = '', $style = '', $form_errors = array(), $form_id_num = 0) {
2100
  $string .= ct_add_hidden_fields(true, 'ct_checkjs', true);
2101
-
2102
  ct_setup_page_timer();
2103
 
2104
  return $string;
@@ -2272,6 +2274,7 @@ function ct_gforms_hidden_field ( $form_string, $form ) {
2272
 
2273
  // Adding JS code
2274
  $js_code = ct_add_hidden_fields(true, $ct_hidden_field, true, false);
 
2275
  $form_string = str_replace($search, $js_code . $search, $form_string);
2276
 
2277
  // Adding field for multipage form
@@ -2568,7 +2571,7 @@ function ct_contact_form_validate() {
2568
  'post_info' => $post_info,
2569
  'sender_info' => get_sender_info(),
2570
  'checkjs' => $checkjs
2571
- ), true);
2572
 
2573
  if(isset($_POST['TellAFriend_Link']))
2574
  {
636
  ct_setup_page_timer(true);
637
 
638
  ct_add_hidden_fields(true, 'ct_checkjs', false, true, true);
639
+ ct_add_mouse_tracking(false);
640
+
641
  return null;
642
  }
643
 
788
 
789
  // Ready function
790
  function apbct_ready(){
791
+ ctSetCookieSec("apbct_visible_fields_count", 0);
792
  for(var i=0; i < document.forms.length; i++){
793
  var form = document.forms[i];
794
  form.onsubmit = function(){
806
  elem_count--;
807
  }else{
808
  apbct_vf.apbct_visible_fields += elem.getAttribute("name") + (j+1 == form.elements.length ? "" : " ");
 
809
  }
810
  }
811
  ctSetCookieSec("apbct_visible_fields", JSON.stringify(apbct_vf));
870
  }";
871
 
872
  $js_code = ct_add_hidden_fields(true, 'ct_checkjs', true, true);
873
+ $js_code .= ct_add_mouse_tracking(true);
874
  $js_code = strip_tags($js_code); // Removing <script> tag
875
  echo $js_code;
876
  }
1832
  }
1833
 
1834
  $r .= ct_add_hidden_fields(true, $ct_checkjs_jpcf, true);
1835
+ $r .= ct_add_mouse_tracking(true);
1836
  $ct_jpcf_patched = true;
1837
 
1838
  ct_setup_page_timer();
2100
  */
2101
  function ct_si_contact_display_after_fields($string = '', $style = '', $form_errors = array(), $form_id_num = 0) {
2102
  $string .= ct_add_hidden_fields(true, 'ct_checkjs', true);
2103
+ $string .= ct_add_mouse_tracking(true);
2104
  ct_setup_page_timer();
2105
 
2106
  return $string;
2274
 
2275
  // Adding JS code
2276
  $js_code = ct_add_hidden_fields(true, $ct_hidden_field, true, false);
2277
+ $js_code .= ct_add_mouse_tracking(true);
2278
  $form_string = str_replace($search, $js_code . $search, $form_string);
2279
 
2280
  // Adding field for multipage form
2571
  'post_info' => $post_info,
2572
  'sender_info' => get_sender_info(),
2573
  'checkjs' => $checkjs
2574
+ ), true, true);
2575
 
2576
  if(isset($_POST['TellAFriend_Link']))
2577
  {
inc/sfw_die_page.html CHANGED
@@ -66,9 +66,8 @@ function get_current_url() {
66
  set_spamFireWallCookie('{COOKIE_PREFIX}ct_sfw_passed','1');
67
  }, 50);
68
  setTimeout(function(){
69
- var ct_addition = '';
70
- ct_addition = window.location.search === '' ? '?sfw=pass' : '&sfw=pass';
71
- window.location.href=window.location.href + ct_addition;
72
  }, reload_timeout);
73
  </script>
74
  </body>
66
  set_spamFireWallCookie('{COOKIE_PREFIX}ct_sfw_passed','1');
67
  }, 50);
68
  setTimeout(function(){
69
+ var ct_date = new Date;
70
+ window.location.href=window.location.href + (window.location.search === '' ? '?sfw=pass' : '&sfw=pass') + Math.round(ct_date.getTime()/1000);
 
71
  }, reload_timeout);
72
  </script>
73
  </body>
readme.txt CHANGED
@@ -2,9 +2,8 @@
2
  Contributors: znaeff, shagimuratov, sartemd174
3
  Tags: spam, antispam, protection, comments, contact form
4
  Requires at least: 3.0
5
- Requires PHP: 5.2.3
6
  Tested up to: 4.9
7
- Stable tag: 5.80
8
  License: GPLv2
9
 
10
  Spam protection, antispam, all-in-one, premium plugin. No spam comments & users, no spam contact form & WooCommerce spam. Forget spam.
@@ -241,7 +240,7 @@ CleanTalk has an advanced option “SpamFireWall”. This option allows you to b
241
  * Russian (ru_RU)
242
 
243
  = Requirements =
244
- WordPress 3.0 at least. PHP 5 with CURL or file_get_contents() function and enabled 'allow_url_fopen' setting. <a href="http://cleantalk.org/register?platform=wordpress">Sign up</a> to get an Access key.
245
 
246
  = We recommend =
247
  * <a href="https://wordpress.org/plugins/security-malware-firewall/">Security & Firewall plugin by CleanTalk</a>
@@ -534,6 +533,11 @@ We develop plugin to do it as optimized as possible, CleanTalk doesn't downgrade
534
  1. The plugin deletes/removes the existing spam comments and users accounts.
535
 
536
  == Changelog ==
 
 
 
 
 
537
  = 5.80 November 3 2017 =
538
  * Spam protection improved.
539
  * Improved filtration quality for WooCommerce checkout.
@@ -1488,6 +1492,11 @@ We develop plugin to do it as optimized as possible, CleanTalk doesn't downgrade
1488
  * First version
1489
 
1490
  == Upgrade Notice ==
 
 
 
 
 
1491
  = 5.80 November 3 2017 =
1492
  * Spam protection improved.
1493
  * Improved filtration quality for WooCommerce checkout.
2
  Contributors: znaeff, shagimuratov, sartemd174
3
  Tags: spam, antispam, protection, comments, contact form
4
  Requires at least: 3.0
 
5
  Tested up to: 4.9
6
+ Stable tag: 5.81
7
  License: GPLv2
8
 
9
  Spam protection, antispam, all-in-one, premium plugin. No spam comments & users, no spam contact form & WooCommerce spam. Forget spam.
240
  * Russian (ru_RU)
241
 
242
  = Requirements =
243
+ WordPress 3.0 at least. PHP 5 with CURL or file_get_contents() function and enabled 'allow_url_fopen' setting. <a href="http://cleantalk.org/register?platform=wordpress">Sign up</a> to get an Access key. The plugin is fully compatible with PHP 7.
244
 
245
  = We recommend =
246
  * <a href="https://wordpress.org/plugins/security-malware-firewall/">Security & Firewall plugin by CleanTalk</a>
533
  1. The plugin deletes/removes the existing spam comments and users accounts.
534
 
535
  == Changelog ==
536
+ = 5.81 November 22 2017 =
537
+ * Fixed error with "Show/Hide key" button.
538
+ * Slightly improved spam protection for all forms.
539
+ * Small errors fixes.
540
+
541
  = 5.80 November 3 2017 =
542
  * Spam protection improved.
543
  * Improved filtration quality for WooCommerce checkout.
1492
  * First version
1493
 
1494
  == Upgrade Notice ==
1495
+ = 5.81 November 22 2017 =
1496
+ * Fixed error with "Show/Hide key" button.
1497
+ * Slightly improved spam protection for all forms.
1498
+ * Small errors fixes.
1499
+
1500
  = 5.80 November 3 2017 =
1501
  * Spam protection improved.
1502
  * Improved filtration quality for WooCommerce checkout.