Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
79dcaa1
Fix. Integrations. Improved catching woo add_to_cart request.
svfcode Mar 18, 2026
f0a5a5a
fix eslint
svfcode Mar 18, 2026
d2b5b5b
Upd. BotDetector. Update load strategy.
svfcode Mar 18, 2026
1db9385
Merge, rebuild js
AntonV1211 Mar 19, 2026
0e9000d
Upd ver 6.75.99-fix
AntonV1211 Mar 19, 2026
5d6b496
Upd. Settings. Update RC flow for license_update.
svfcode Mar 19, 2026
dcae25d
Merge branch 'fix' of https://github.com/CleanTalk/wordpress-antispam…
svfcode Mar 19, 2026
494d756
fix psalm
svfcode Mar 19, 2026
4004313
Fix. Integrations. Improved BuddyBoss RestAPI copability.
svfcode Mar 20, 2026
44e7561
Fix. Integrations. Fixed SiteGround cache SFW block page.
svfcode Mar 23, 2026
3895b2e
Fix. Code. Unit tests fixed: `TestFluentForms`, `TestNinjaForms`.
Glomberg Mar 26, 2026
6237cf4
Fix. JS. Gathering. Passing js_on independent of gathering loaded.
alexandergull Mar 26, 2026
2a328c8
Fix. Integrations. QuForm. Fixed js_on param gathering.
alexandergull Mar 26, 2026
d3c4644
Fix. Users. Edit the deletion of a non-checkable user
AntonV1211 Mar 27, 2026
c8be82a
Fix. AltSession. Correcting the issue of array conversion
AntonV1211 Mar 31, 2026
2072165
Merge pull request #767 from CleanTalk/json_extract_from_gathring.ag
alexandergull Mar 31, 2026
130be76
Upd. Settings. Updated flow to check pingback. (#764)
svfcode Mar 31, 2026
a1514c2
Upd. Settings. `Bot Detector` setting - bot-detector setting removed.…
Glomberg Mar 31, 2026
26d0da7
Merge remote-tracking branch 'origin/fix' into dev
Glomberg Mar 31, 2026
d0ab186
Fix. Code. Re-minify assets.
Glomberg Mar 31, 2026
80f33e6
Version: 6.76 and changelog updated.
Glomberg Mar 31, 2026
4e9ed00
Merge pull request #768 from CleanTalk/fix_altsession_ct_checkjs_av
AntonV1211 Apr 1, 2026
dfd4b8a
New. BookingCalendar. New integration with BookingCalendar
AntonV1211 Apr 1, 2026
4c07068
merge fix
AntonV1211 Apr 1, 2026
c1de423
Merge pull request #771 from CleanTalk/beta (Version: 6.76.)
Glomberg Apr 2, 2026
0a09e29
Version: 6.76.99-dev.
Glomberg Apr 2, 2026
b6f3832
Merge remote-tracking branch 'origin/master' into fix
Glomberg Apr 2, 2026
a2d28fe
Version: 6.76.99-fix.
Glomberg Apr 2, 2026
657e593
Merge fix
AntonV1211 Apr 7, 2026
47468fc
Merge pull request #769 from CleanTalk/integ_wp_booking_cal_av
AntonV1211 Apr 7, 2026
15e239c
Upd. Settings. Updated flow to check pingback. (#764) (#773) (#774)
svfcode Apr 8, 2026
202e3e9
Fix. CF7. Edit honeypot
AntonV1211 Apr 9, 2026
e7963fa
Fix. Integration. EDD integration fixed. (#770)
Glomberg Apr 9, 2026
8cd6687
Fix. Code. Editing the bot detector settings
AntonV1211 Apr 13, 2026
19f8dc7
https://app.doboard.com/1/task/33372
datorik Apr 14, 2026
64da8de
Fix. Exclusion. Skip request from Metorik Helper
AntonV1211 Apr 14, 2026
5a403f9
https://app.doboard.com/1/task/46614
datorik Apr 14, 2026
dfea27d
Fix. Common. Add bot detector state to `ct_options`. (#778)
Glomberg Apr 15, 2026
3cb6ce0
Fix. WPMS. Errors output for WPMS mutual-mutual mode fixed. (#772)
Glomberg Apr 15, 2026
598b63e
Merge remote-tracking branch 'origin/fix' into dev
Glomberg Apr 15, 2026
91169e6
Version: 6.77.
Glomberg Apr 15, 2026
a016216
Fix. Readme. Changelog updated.
Glomberg Apr 15, 2026
8362c29
Removing the link to install "Gravity Forms to doBoard"
datorik Apr 15, 2026
ffb6a5d
Fix. UnitTests Gravity install link
datorik Apr 15, 2026
db65343
Fix. Code. JS error in `ctProtectOutsideFunctionalHandler` fixed.
Glomberg Apr 16, 2026
9cc8cd6
Fix. WPMS. Settings for `mutual/mutual` fixed.
Glomberg Apr 16, 2026
1e3aa28
Fix. Code. AntiCrawler `clearDataTable` fixed.
Glomberg Apr 16, 2026
b38e7b5
Fix. UnitTests Gravity install link
datorik Apr 16, 2026
6f025c8
Fix. WPMS. Settings page error fixed.
Glomberg Apr 16, 2026
6fd14c1
Upd. Readme. Changelog updated.
Glomberg Apr 16, 2026
40b335f
Merge pull request #785 from CleanTalk/beta (Version: 6.77)
Glomberg Apr 16, 2026
c2fd204
Update inc/cleantalk-settings.php
alexander-b-clean Apr 16, 2026
3ac2fdc
Fix. Code Review
datorik Apr 16, 2026
0132ded
Version: 6.77.99-dev.
Glomberg Apr 16, 2026
525b8e1
Fix. UnitTests description has link to help
datorik Apr 16, 2026
e41f4d8
Fix. UnitTests description has link to help
datorik Apr 17, 2026
a63545f
Merge pull request #782 from CleanTalk/add-readmore-link.ab
alexander-b-clean Apr 17, 2026
7eeb481
Merge pull request #784 from CleanTalk/remove-gravity-links.ab
alexander-b-clean Apr 18, 2026
becd642
Upd. Flow rules.
alexandergull Apr 20, 2026
2b141d8
New. BaseCall. Default params class.
alexandergull Apr 20, 2026
bc8377f
Doc. BaseCall. Default params class. Docs added.
alexandergull Apr 20, 2026
e9f6f34
Merge branch 'dev' into quform_codecov.ag
alexandergull Apr 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ on: # event list
branches:
- dev
- master
- '**'

env: # environment variables (available in any part of the action)
PHP_VERSION: 7.4
Expand Down
5 changes: 4 additions & 1 deletion cleantalk.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Plugin Name: Anti-Spam by CleanTalk
Plugin URI: https://cleantalk.org
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.
Version: 6.75.99-dev
Version: 6.77.99-dev
Author: CleanTalk - Anti-Spam Protection <welcome@cleantalk.org>
Author URI: https://cleantalk.org
Text Domain: cleantalk-spam-protect
Expand Down Expand Up @@ -694,6 +694,9 @@ function apbct_wpms__delete_blog(WP_Site $old_site)
// After plugin loaded - to load locale as described in manual
add_action('init', 'apbct_plugin_loaded');

// SiteGround Speed Optimizer: skip cache for URLs with apbct_no_cache.
add_action('plugins_loaded', 'apbct_sgo_optimizer__register_bypass_query_params', 1);

if ( ! empty($apbct->settings['data__use_ajax']) &&
! apbct_is_in_uri('.xml') &&
! apbct_is_in_uri('.xsl')
Expand Down
43 changes: 3 additions & 40 deletions inc/cleantalk-admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -751,17 +751,10 @@ function apbct_admin__admin_bar__add_structure($wp_admin_bar)
* Link to project manager
*/
$project_manager_title_node = apbct__admin_bar__get_title_for_project_manager();
if ( $project_manager_title_node ) {
$gf2db_title_node = apbct__admin_bar__add_gf2db_title();
if ( $project_manager_title_node && $gf2db_title_node) {
$wp_admin_bar->add_node($project_manager_title_node);
$gf2db_title_node = apbct__admin_bar__add_gf2db_title();
if ($gf2db_title_node) {
$wp_admin_bar->add_node($gf2db_title_node);
} else {
$gf2db_invite_to_install_title = apbct__admin_bar__get_title_for_gf2db_invite_to_install();
if ($gf2db_invite_to_install_title) {
$wp_admin_bar->add_node($gf2db_invite_to_install_title);
}
}
$wp_admin_bar->add_node($gf2db_title_node);
}

/**
Expand Down Expand Up @@ -823,36 +816,6 @@ function apbct__admin_bar__add_gf2db_title()
);
}

/**
* Gets the title for the "Gravity Forms to doBoard" Add-On invite to install admin bar node.
*
* This function constructs the title for the "Gravity Forms to doBoard" Add-On invite to install admin bar node based on various conditions.
* The title includes a link to the "Gravity Forms to doBoard" Add-On invite to install.
*
* @return array|false The node data for the "Gravity Forms to doBoard" Add-On invite to install admin bar node, or false if the "Gravity Forms to doBoard" Add-On invite to install admin bar node is not enabled.
*/
function apbct__admin_bar__get_title_for_gf2db_invite_to_install()
{
if (is_plugin_active('cleantalk-doboard-add-on-for-gravity-forms/cleantalk-doboard-add-on-for-gravity-forms.php')) {
return false;
}

$title = sprintf(
'<a href="%s" target="_blank" title="%s">%s</a>',
admin_url('plugin-install.php?s=GF2DB&tab=search&type=term'),
esc_html__(
'Organize and track all messages from your site. Gravity Forms, upgraded with project management.',
'cleantalk-spam-protect'
),
esc_html__('Install "Gravity Forms to doBoard" Add-On', 'cleantalk-spam-protect')
);

return array(
'parent' => 'project_manager__parent_node',
'id' => 'gf2db_invite_to_install_title',
'title' => $title,
);
}

/**
* Gets the title for the APBCT admin bar node.
Expand Down
58 changes: 36 additions & 22 deletions inc/cleantalk-common.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use Cleantalk\Antispam\CleantalkRequest;
use Cleantalk\Antispam\CleantalkResponse;
use Cleantalk\ApbctWP\API;
use Cleantalk\ApbctWP\BaseCall\DefaultParams;
use Cleantalk\ApbctWP\CleantalkSettingsTemplates;
use Cleantalk\ApbctWP\Cron;
use Cleantalk\ApbctWP\DB;
Expand All @@ -12,14 +13,14 @@
use Cleantalk\ApbctWP\GetFieldsAny;
use Cleantalk\ApbctWP\Helper;
use Cleantalk\ApbctWP\Honeypot;
use Cleantalk\ApbctWP\RequestParameters\RequestParameters;
use Cleantalk\ApbctWP\RequestParameters\SubmitTimeHandler;
use Cleantalk\ApbctWP\Sanitize;
use Cleantalk\ApbctWP\Variables\AltSessions;
use Cleantalk\ApbctWP\Variables\Cookie;
use Cleantalk\ApbctWP\Variables\Get;
use Cleantalk\ApbctWP\Variables\Post;
use Cleantalk\ApbctWP\Variables\Server;
use Cleantalk\ApbctWP\RequestParameters\RequestParameters;
use Cleantalk\ApbctWP\RequestParameters\SubmitTimeHandler;
use Cleantalk\Common\TT;

// Prevent direct call
Expand Down Expand Up @@ -182,23 +183,8 @@ function apbct_base_call($params = array(), $reg_flag = false)
);
}

$default_params = array(

// IPs
'sender_ip' => defined('CT_TEST_IP')
? CT_TEST_IP
: \Cleantalk\ApbctWP\Helper::ipGet('remote_addr', false),
'x_forwarded_for' => \Cleantalk\ApbctWP\Helper::ipGet('x_forwarded_for', false),
'x_real_ip' => \Cleantalk\ApbctWP\Helper::ipGet('x_real_ip', false),

// Misc
'auth_key' => $apbct->api_key,
'js_on' => apbct_js_test(Sanitize::cleanTextField(Cookie::get('ct_checkjs')), true) ? 1 : apbct_js_test(TT::toString(Post::get('ct_checkjs'))),

'agent' => APBCT_AGENT,
'sender_info' => $sender_info,
'submit_time' => SubmitTimeHandler::getFromRequest(),
);
$default_params_getter = new DefaultParams($apbct->api_key, $sender_info);
$default_params = $default_params_getter->get();

if (!isset($params['post_info']['post_url'])) {
$params['post_info']['post_url'] = Server::get('HTTP_REFERER');
Expand Down Expand Up @@ -605,6 +591,14 @@ function apbct_get_sender_info()
$page_hits = RequestParameters::get('apbct_page_hits', Cookie::$force_alt_cookies_global);
$page_hits = !empty($page_hits) ? TT::toString($page_hits) : null;

$ct_options = json_encode(
array_merge(
(array) $apbct->settings,
['data__bot_detector_enabled' => apbct__is_bot_detector_enabled() ? 1 : 0]
),
JSON_UNESCAPED_SLASHES
);

//Let's keep $data_array for debugging
$data_array = array(
'plugin_request_id' => $apbct->plugin_request_id,
Expand All @@ -613,7 +607,7 @@ function apbct_get_sender_info()
'USER_AGENT' => Server::get('HTTP_USER_AGENT'),
'page_url' => apbct_sender_info___get_page_url(),
'cms_lang' => substr(get_locale(), 0, 2),
'ct_options' => json_encode($apbct->settings, JSON_UNESCAPED_SLASHES),
'ct_options' => $ct_options,
'fields_number' => sizeof($_POST),
'direct_post' => $cookie_is_ok === null && apbct_is_post() ? 1 : 0,
// Raw data to validated JavaScript test in the cloud
Expand Down Expand Up @@ -1857,7 +1851,6 @@ function apbct__bot_detector_get_fired_exclusions()
*/
function apbct__bot_detector_get_fd_log()
{
global $apbct;
$result = array(
'plugin_status' => 'OK',
'error_msg' => '',
Expand All @@ -1872,7 +1865,7 @@ function apbct__bot_detector_get_fd_log()
}

try {
if ( TT::toString($apbct->settings['data__bot_detector_enabled']) === '0') {
if ( ! apbct__is_bot_detector_enabled() ) {
throw new \Exception('bot detector library usage is disabled');
}
// Retrieve bot detector frontend data log from Alt Sessions
Expand Down Expand Up @@ -1929,3 +1922,24 @@ function apbct__bot_detector_get_custom_exclusion_from_settings()
}
return $exclusions;
}

/**
* Check if Bot-Detector is enabled/disabled
*
* @return bool
*/
function apbct__is_bot_detector_enabled()
{
global $apbct;

// Constant is preferred
if ( isset($apbct->service_constants->bot_detector_enabled) && $apbct->service_constants->bot_detector_enabled->isDefined() ) {
return (bool) $apbct->service_constants->bot_detector_enabled->getValue();
}
// Check by $apbct->data
if ( isset($apbct->data['bot_detector_enabled']) ) {
return (bool) $apbct->data['bot_detector_enabled'];
}
// By default - enabled
return true;
}
9 changes: 8 additions & 1 deletion inc/cleantalk-integrations-by-hook.php
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@
'ajax' => false
),
'EasyDigitalDownloads' => array(
'hook' => array('edd_pre_process_register_form', 'edd_insert_user_args'),
'hook' => array('edd_pre_process_register_form', 'edd_insert_user_args', 'edd_customer_pre_create'),
'setting' => 'forms__registrations_test',
'ajax' => false
),
Expand Down Expand Up @@ -291,6 +291,13 @@
'setting' => 'forms__contact_forms_test',
'ajax' => true
),
'BookingCalendar' => array(
'hook' => [
'WPBC_AJX_BOOKING__CREATE',
],
'setting' => 'forms__contact_forms_test',
'ajax' => true
),
'JobstackThemeRegistration' => array(
'hook' => 'wp_loaded',
'setting' => 'forms__registrations_test',
Expand Down
12 changes: 12 additions & 0 deletions inc/cleantalk-pluggable.php
Original file line number Diff line number Diff line change
Expand Up @@ -1406,6 +1406,13 @@ function apbct_is_skip_request($ajax = false, $ajax_message_obj = array())
return 'BookingPress service action';
}

if (
apbct_is_plugin_active('booking/wpdev-booking.php') &&
(Post::getString('action') === 'WPBC_AJX_BOOKING__CREATE')
) {
return 'WP BookingCalendar service action';
}

if (
(
apbct_is_plugin_active('pixelyoursite/pixelyoursite.php') ||
Expand Down Expand Up @@ -1812,6 +1819,11 @@ class_exists('Cleantalk\Antispam\Integrations\CleantalkInternalForms')
apbct_is_in_uri('wc-ajax=iwd_opc_update_order_review') ) {
return 'cartflows_save_cart';
}
// WC addon - Metorik Helper plugin service requests
if ( apbct_is_plugin_active('metorik-helper/metorik-helper.php') &&
apbct_is_in_uri('wc-ajax=metorik_capture_customer_data') ) {
return 'metorik-helper skip';
}
// Vault Press (JetPack) plugin service requests
if (
Post::get('do_backups') !== '' &&
Expand Down
48 changes: 31 additions & 17 deletions inc/cleantalk-public-integrations.php
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,11 @@ function ct_registration_errors($errors, $sanitized_user_login = null, $user_ema
$checkjs = $checkjs_cookie ?: $checkjs_post;
}

// BuddyBoss Platform use rest api for registration from phone app
if ( apbct_is_plugin_active('buddyboss-app/buddyboss-app.php') && apbct_is_in_uri('/wp-json/buddyboss-app/v1/signup') ) {
$checkjs = Post::getString('checkjs') === 'true' ? 1 : 0;
}

$sender_info = array(
'post_checkjs_passed' => $checkjs_post,
'cookie_checkjs_passed' => $checkjs_cookie,
Expand Down Expand Up @@ -1049,6 +1054,10 @@ function ct_registration_errors($errors, $sanitized_user_login = null, $user_ema
$bp->signup->errors['signup_username'] = $ct_result->comment;
}

if (apbct_is_plugin_active('buddyboss-app/buddyboss-app.php') && apbct_is_in_uri('/wp-json/buddyboss-app/v1/signup')) {
wp_send_json_error(['success' => false, 'message' => $ct_result->comment]);
}

if ( $facebook ) {
/** @psalm-suppress InvalidArrayOffset */
$_POST['FB_userdata']['email'] = '';
Expand Down Expand Up @@ -1451,6 +1460,11 @@ function apbct_form__contactForm7__testSpam($spam, $_submission = null)
*/
$input_array = apply_filters('apbct__filter_post', $_POST);

$honeypot_params = array();
if ( isset($input_array['apbct__email_id__wp_contact_form_7']) ) {
$honeypot_params['honeypot_field'] = ($input_array['apbct__email_id__wp_contact_form_7'] === '') ? 1 : 0;
}

$ct_temp_msg_data = ct_get_fields_any($input_array);

$sender_email = isset($ct_temp_msg_data['email']) ? $ct_temp_msg_data['email'] : '';
Expand All @@ -1463,21 +1477,24 @@ function apbct_form__contactForm7__testSpam($spam, $_submission = null)
}

$base_call_result = apbct_base_call(
array(
'message' => $message,
'sender_email' => $sender_email,
'sender_nickname' => $sender_nickname,
'js_on' => $checkjs,
'post_info' => array('comment_type' => 'contact_form_wordpress_cf7'),
'sender_info' => array(
'form_validation' => ! isset($apbct->validation_error)
? null
: json_encode(array(
'validation_notice' => $apbct->validation_error,
'page_url' => TT::toString(Server::get('HTTP_HOST')) . TT::toString(Server::get('REQUEST_URI')),
)),
'sender_emails_array' => $sender_emails_array,
array_merge(
array(
'message' => $message,
'sender_email' => $sender_email,
'sender_nickname' => $sender_nickname,
'js_on' => $checkjs,
'post_info' => array('comment_type' => 'contact_form_wordpress_cf7'),
'sender_info' => array(
'form_validation' => ! isset($apbct->validation_error)
? null
: json_encode(array(
'validation_notice' => $apbct->validation_error,
'page_url' => TT::toString(Server::get('HTTP_HOST')) . TT::toString(Server::get('REQUEST_URI')),
)),
'sender_emails_array' => $sender_emails_array,
),
),
$honeypot_params
)
);

Expand Down Expand Up @@ -1870,19 +1887,16 @@ function ct_quform_post_validate($result, $form)
* Filter for POST
*/
$input_array = apply_filters('apbct__filter_post', $form->getValues());

$ct_temp_msg_data = ct_get_fields_any($input_array);
$sender_email = isset($ct_temp_msg_data['email']) ? $ct_temp_msg_data['email'] : '';
$sender_emails_array = isset($ct_temp_msg_data['emails_array']) ? $ct_temp_msg_data['emails_array'] : '';

$checkjs = apbct_js_test(Sanitize::cleanTextField(Cookie::get('ct_checkjs')), true);
$base_call_result = apbct_base_call(
array(
'message' => $form->getValues(),
'sender_email' => $sender_email,
'post_info' => array('comment_type' => $comment_type),
'sender_info' => array('sender_emails_array' => $sender_emails_array),
'js_on' => $checkjs,
)
);

Expand Down
5 changes: 5 additions & 0 deletions inc/cleantalk-public-validate-skip-functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,11 @@ function skip_for_ct_contact_form_validate()
Get::equal('wc-ajax', 'wc_stripe_frontend_request') &&
! empty(Post::getString('stripe_applepay_token_key'))
),
// BuddyBoss REST API has a direct integration
'101' => (
apbct_is_plugin_active('buddyboss-platform/buddyboss-platform.php') &&
apbct_is_in_uri('/wp-json/buddyboss/v1/signup')
),
);

foreach ( $exclusions as $exclusion_key => $state ) {
Expand Down
Loading
Loading