File Editor
Directories:
.. (Back)
Ajax
Notifications
Settings
Files:
Addons.php
AntiSpam.php
ContextMenu.php
Help.php
HelpCache.php
Shortcuts.php
TemplateSingleCache.php
Templates.php
TemplatesCache.php
Create New File
Create
Edit File: AntiSpam.php
<?php namespace WPForms\Admin\Builder; use WPForms\Forms\Akismet; use WPForms_Builder_Panel_Settings; /** * AntiSpam class. * * @since 1.7.8 */ class AntiSpam { /** * Form data and settings. * * @since 1.7.8 * * @var array */ private $form_data; /** * Init class. * * @since 1.7.8 */ public function init() { $this->hooks(); } /** * Register hooks. * * @since 1.7.8 */ protected function hooks() { add_action( 'wpforms_form_settings_panel_content', [ $this, 'panel_content' ], 10, 2 ); } /** * Add a content for `Spam Protection and Security` panel. * * @since 1.7.8 * * @param WPForms_Builder_Panel_Settings $instance Settings panel instance. */ public function panel_content( $instance ) { $this->form_data = $this->update_settings_form_data( $instance->form_data ); echo '<div class="wpforms-panel-content-section wpforms-panel-content-section-anti_spam">'; echo '<div class="wpforms-panel-content-section-title">'; esc_html_e( 'Spam Protection and Security', 'wpforms-lite' ); echo '</div>'; $antispam = wpforms_panel_field( 'toggle', 'settings', 'antispam_v3', $this->form_data, __( 'Enable modern anti-spam protection', 'wpforms-lite' ), [ 'value' => (int) ! empty( $this->form_data['settings']['antispam_v3'] ), 'tooltip' => __( 'Turn on invisible modern spam protection.', 'wpforms-lite' ), ], false ); wpforms_panel_fields_group( $antispam, [ 'description' => __( 'Behind-the-scenes spam filtering that\'s invisible to your visitors.', 'wpforms-lite' ), 'title' => __( 'Protection', 'wpforms-lite' ), ] ); if ( ! empty( $this->form_data['settings']['antispam'] ) && empty( $this->form_data['settings']['antispam_v3'] ) ) { wpforms_panel_field( 'toggle', 'settings', 'antispam', $this->form_data, __( 'Enable anti-spam protection', 'wpforms-lite' ), [ 'tooltip' => __( 'Turn on invisible spam protection.', 'wpforms-lite' ), ] ); } if ( ! empty( $this->form_data['settings']['honeypot'] ) && empty( $this->form_data['settings']['antispam_v3'] ) ) { wpforms_panel_field( 'toggle', 'settings', 'honeypot', $this->form_data, __( 'Enable anti-spam honeypot', 'wpforms-lite' ) ); } $this->akismet_settings(); $this->store_spam_entries_settings(); $this->time_limit_settings(); $this->captcha_settings(); // Hidden setting to store blocked entries by filtering as a spam. // This setting is needed to keep backward compatibility with old forms. wpforms_panel_field( 'checkbox', 'anti_spam', 'filtering_store_spam', $this->form_data, '', [ 'parent' => 'settings', 'class' => 'wpforms-hidden', ] ); /** * Fires once in the end of content panel before Also Available section. * * @since 1.7.8 * * @param array $form_data Form data and settings. */ do_action( 'wpforms_admin_builder_anti_spam_panel_content', $this->form_data ); wpforms_panel_fields_group( $this->get_also_available_block(), [ 'unfoldable' => true, 'default' => 'opened', 'group' => 'also_available', 'title' => __( 'Also Available', 'wpforms-lite' ), 'borders' => [ 'top' ], ] ); echo '</div>'; } /** * Update the form data on the builder settings panel. * * @since 1.9.2 * * @param array $form_data Form data. * * @return array */ private function update_settings_form_data( array $form_data ): array { if ( ! $form_data ) { return $form_data; } // Update `Filtering` store spam entries behaviour. // Enable for new forms and old forms without any `Filtering` setting enabled. if ( empty( $form_data['settings']['anti_spam']['filtering_store_spam'] ) && empty( $form_data['settings']['anti_spam']['country_filter']['enable'] ) && empty( $form_data['settings']['anti_spam']['keyword_filter']['enable'] ) ) { $form_data['settings']['anti_spam']['filtering_store_spam'] = true; } return $form_data; } /** * Output the *CAPTCHA settings. * * @since 1.7.8 */ private function captcha_settings() { $captcha_settings = wpforms_get_captcha_settings(); if ( empty( $captcha_settings['provider'] ) || $captcha_settings['provider'] === 'none' ) { return; } if ( $captcha_settings['provider'] !== 'hcaptcha' && ( empty( $captcha_settings['site_key'] ) || empty( $captcha_settings['secret_key'] ) ) ) { return; } if ( $captcha_settings['provider'] === 'hcaptcha' && empty( $captcha_settings['site_key'] ) ) { return; } $captcha_types = [ 'hcaptcha' => __( 'Enable hCaptcha', 'wpforms-lite' ), 'turnstile' => __( 'Enable Cloudflare Turnstile', 'wpforms-lite' ), 'recaptcha' => [ 'v2' => __( 'Enable Google Checkbox v2 reCAPTCHA', 'wpforms-lite' ), 'invisible' => __( 'Enable Google Invisible v2 reCAPTCHA', 'wpforms-lite' ), 'v3' => __( 'Enable Google v3 reCAPTCHA', 'wpforms-lite' ), ], ]; $is_recaptcha = $captcha_settings['provider'] === 'recaptcha'; $captcha_types = $is_recaptcha ? $captcha_types['recaptcha'] : $captcha_types; $captcha_key = $is_recaptcha ? $captcha_settings['recaptcha_type'] : $captcha_settings['provider']; $label = ! empty( $captcha_types[ $captcha_key ] ) ? $captcha_types[ $captcha_key ] : ''; $recaptcha = wpforms_panel_field( 'toggle', 'settings', 'recaptcha', $this->form_data, $label, [ 'data' => [ 'provider' => $captcha_settings['provider'], ], 'tooltip' => __( 'Enable third-party CAPTCHAs to prevent form submissions from bots.', 'wpforms-lite' ), ], false ); wpforms_panel_fields_group( $recaptcha, [ 'description' => __( 'Automated tests that help to prevent bots from submitting your forms.', 'wpforms-lite' ), 'title' => __( 'CAPTCHA', 'wpforms-lite' ), 'borders' => [ 'top' ], ] ); } /** * Output the Spam Entries Store settings. * * @since 1.8.3 */ public function store_spam_entries_settings() { if ( ! wpforms()->is_pro() ) { return; } $disable_entries = $this->form_data['settings']['disable_entries'] ?? 0; wpforms_panel_field( 'toggle', 'settings', 'store_spam_entries', $this->form_data, __( 'Store spam entries in the database', 'wpforms-lite' ), [ 'value' => $this->form_data['settings']['store_spam_entries'] ?? 0, 'class' => $disable_entries ? 'wpforms-hidden' : '', ] ); } /** * Output the Time Limit settings. * * @since 1.8.3 */ private function time_limit_settings() { wpforms_panel_field( 'toggle', 'anti_spam', 'enable', $this->form_data, __( 'Enable minimum time to submit', 'wpforms-lite' ), [ 'parent' => 'settings', 'subsection' => 'time_limit', 'tooltip' => __( 'Set a minimum amount of time a user must spend on a form before submitting.', 'wpforms-lite' ), 'input_class' => 'wpforms-panel-field-toggle-next-field', ] ); wpforms_panel_field( 'text', 'anti_spam', 'duration', $this->form_data, __( 'Minimum time to submit', 'wpforms-lite' ), [ 'parent' => 'settings', 'subsection' => 'time_limit', 'type' => 'number', 'min' => 1, 'default' => 2, 'after' => sprintf( '<span class="wpforms-panel-field-after">%s</span>', __( 'seconds', 'wpforms-lite' ) ), ] ); } /** * Output the Akismet settings. * * @since 1.7.8 */ private function akismet_settings() { if ( ! Akismet::is_installed() ) { return; } $args = []; if ( ! Akismet::is_configured() ) { $args['data']['akismet-status'] = 'akismet_no_api_key'; } if ( ! Akismet::is_activated() ) { $args['data']['akismet-status'] = 'akismet_not_activated'; } // If Akismet isn't available, disable the Akismet toggle. if ( isset( $args['data'] ) ) { $args['input_class'] = 'wpforms-akismet-disabled'; $args['value'] = '0'; } wpforms_panel_field( 'toggle', 'settings', 'akismet', $this->form_data, __( 'Enable Akismet anti-spam protection', 'wpforms-lite' ), $args ); } /** * Get the Also Available block. * * @since 1.7.8 * * @return string */ private function get_also_available_block() { $get_started_button_text = __( 'Get Started →', 'wpforms-lite' ); $upgrade_to_pro_text = __( 'Upgrade to Pro', 'wpforms-lite' ); $captcha_settings = wpforms_get_captcha_settings(); $upgrade_url = 'https://wpforms.com/lite-upgrade/'; $utm_medium = 'Builder Settings'; $blocks = [ 'country_filter' => [ 'logo' => WPFORMS_PLUGIN_URL . 'assets/images/anti-spam/country-filter.svg', 'title' => __( 'Country Filter', 'wpforms-lite' ), 'description' => __( 'Stop spam at its source. Allow or deny entries from specific countries.', 'wpforms-lite' ), 'link' => wpforms_utm_link( $upgrade_url, $utm_medium, 'Country Filter Feature' ), 'link_text' => $upgrade_to_pro_text, 'class' => 'wpforms-panel-content-also-available-item-upgrade-to-pro', 'show' => ! wpforms()->is_pro(), ], 'keyword_filter' => [ 'logo' => WPFORMS_PLUGIN_URL . 'assets/images/anti-spam/keyword-filter.svg', 'title' => __( 'Keyword Filter', 'wpforms-lite' ), 'description' => __( 'Block form entries that contain specific words or phrases that you define.', 'wpforms-lite' ), 'link' => wpforms_utm_link( $upgrade_url, $utm_medium, 'Keyword Filter Feature' ), 'link_text' => $upgrade_to_pro_text, 'class' => 'wpforms-panel-content-also-available-item-upgrade-to-pro', 'show' => ! wpforms()->is_pro(), ], 'custom_captcha' => [ 'logo' => WPFORMS_PLUGIN_URL . 'assets/images/anti-spam/custom-captcha.svg', 'title' => __( 'Custom Captcha', 'wpforms-lite' ), 'description' => __( 'Ask custom questions or require your visitor to answer a random math puzzle.', 'wpforms-lite' ), 'link' => wpforms()->is_pro() ? '#' : wpforms_utm_link( $upgrade_url, $utm_medium, 'Custom Captcha Addon' ), 'link_text' => wpforms()->is_pro() ? __( 'Add to Form', 'wpforms-lite' ) : $upgrade_to_pro_text, 'class' => wpforms()->is_pro() ? 'wpforms-panel-content-also-available-item-add-captcha' : 'wpforms-panel-content-also-available-item-upgrade-to-pro', 'show' => true, ], 'reCAPTCHA' => [ 'logo' => WPFORMS_PLUGIN_URL . 'assets/images/anti-spam/recaptcha.svg', 'title' => 'reCAPTCHA', 'description' => __( 'Add Google\'s free anti-spam service and choose between visible or invisible CAPTCHAs.','wpforms-lite' ), 'link' => wpforms_utm_link( 'https://wpforms.com/docs/how-to-set-up-and-use-recaptcha-in-wpforms/', $utm_medium, 'reCAPTCHA Feature' ), 'link_text' => $get_started_button_text, 'show' => $captcha_settings['provider'] !== 'recaptcha' || empty( wpforms_setting( 'captcha-provider' ) ), ], 'hCaptcha' => [ 'logo' => WPFORMS_PLUGIN_URL . 'assets/images/anti-spam/hcaptcha.svg', 'title' => 'hCaptcha', 'description' => __( 'Turn on free, privacy-oriented spam prevention that displays a visual CAPTCHA.','wpforms-lite' ), 'link' => wpforms_utm_link( 'https://wpforms.com/docs/how-to-set-up-and-use-hcaptcha-in-wpforms/', $utm_medium, 'hCaptcha Feature' ), 'link_text' => $get_started_button_text, 'show' => $captcha_settings['provider'] !== 'hcaptcha', ], 'turnstile' => [ 'logo' => WPFORMS_PLUGIN_URL . 'assets/images/anti-spam/cloudflare.svg', 'title' => 'Cloudflare Turnstile', 'description' => __( 'Enable free, CAPTCHA-like spam protection that protects data privacy.','wpforms-lite' ), 'link' => wpforms_utm_link( 'https://wpforms.com/docs/setting-up-cloudflare-turnstile/', $utm_medium, 'Cloudflare Turnstile Feature' ), 'link_text' => $get_started_button_text, 'show' => $captcha_settings['provider'] !== 'turnstile', ], 'akismet' => [ 'logo' => WPFORMS_PLUGIN_URL . 'assets/images/anti-spam/akismet.svg', 'title' => 'Akismet', 'description' => __( 'Integrate the powerful spam-fighting service trusted by millions of sites.','wpforms-lite' ), 'link' => wpforms_utm_link( 'https://wpforms.com/docs/setting-up-akismet-anti-spam-protection/', $utm_medium, 'Akismet Feature' ), 'link_text' => $get_started_button_text, 'show' => ! Akismet::is_installed(), ], ]; return wpforms_render( 'builder/antispam/also-available', [ 'blocks' => $blocks ], true ); } }
Save Changes
Rename File
Rename