PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 3.5.2
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v3.5.2
3.5.2 3.5.1 3.5.0 3.4.8 3.4.7 3.4.6 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5.1 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.10 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.6.1 1.6.7 1.7.0 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.2 1.7.2.1 1.7.2.2 1.7.3 1.7.4 1.7.5 1.7.5.1 1.7.5.2 1.7.6 1.7.7 1.7.7.1 1.7.7.2 1.7.8 1.7.9 1.8.0 1.8.0.1 1.8.1 1.8.2 1.8.2.1 1.8.2.2 1.8.2.3 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.0.1 1.9.1 1.9.2 1.9.3 1.9.4 1.9.4.1 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.0.1 2.0.1 2.0.2 2.0.3 2.0.3.1 2.0.4 2.0.4.1 2.0.5 2.0.6 2.0.7 2.0.8 2.0.8.1 2.0.9 3.0.0 3.0.0.1 3.0.1 3.0.2 3.0.3 3.0.3.1 3.0.4 3.0.4.1 3.0.4.2 3.0.5 3.0.5.1 3.0.5.2 3.0.6 3.0.6.1 3.0.7.1 3.0.8 3.0.8.1 3.0.9 3.0.9.1 3.0.9.2 3.0.9.3 3.0.9.4 3.0.9.5 3.1.0 3.1.1 3.1.2 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.4.0 3.4.1 3.4.2 3.4.2.1 3.4.3 3.4.4 3.4.5 trunk 1.0 1.0.1 1.0.2 1.0.3
everest-forms / includes / admin / settings / class-evf-settings-security.php
everest-forms / includes / admin / settings Last commit date
class-evf-setting-utilities.php 3 months ago class-evf-settings-advanced.php 1 month ago class-evf-settings-email.php 1 month ago class-evf-settings-general.php 3 months ago class-evf-settings-integrations.php 3 months ago class-evf-settings-page.php 3 months ago class-evf-settings-payments.php 1 month ago class-evf-settings-reporting.php 2 years ago class-evf-settings-security.php 3 months ago class-evf-settings-validation.php 11 months ago
class-evf-settings-security.php
601 lines
1 <?php
2 /**
3 * EverestForms reCAPTCHA Settings
4 *
5 * @package EverestForms\Admin
6 * @version 1.0.0
7 */
8
9 defined( 'ABSPATH' ) || exit;
10
11 if ( class_exists( 'EVF_Settings_Security', false ) ) {
12 return new EVF_Settings_Security();
13 }
14
15 class EVF_Settings_Security extends EVF_Settings_Page {
16
17 public function __construct() {
18 $this->id = 'recaptcha';
19 $this->label = esc_html__( 'Security', 'everest-forms' );
20
21 parent::__construct();
22 add_action( 'everest_forms_sections_' . $this->id, array( $this, 'output_sections' ) );
23 add_action( 'everest_forms_update_options_' . $this->id, array( $this, 'handle_captcha_enable_toggle' ), 5 );
24
25 $this->maybe_migrate_legacy_settings();
26 }
27
28 private function maybe_migrate_legacy_settings() {
29 $migration_complete = get_option( 'everest_forms_recaptcha_migration_v2_complete', false );
30
31 if ( $migration_complete ) {
32 return;
33 }
34
35 $captcha_types = array( 'v2', 'v3', 'hcaptcha', 'turnstile' );
36 $has_enable_options = false;
37
38 foreach ( $captcha_types as $type ) {
39 if ( false !== get_option( 'everest_forms_recaptcha_' . $type . '_enable', false ) ) {
40 $has_enable_options = true;
41 break;
42 }
43 }
44
45 if ( $has_enable_options ) {
46 update_option( 'everest_forms_recaptcha_migration_v2_complete', true );
47 return;
48 }
49
50 $active_type = get_option( 'everest_forms_recaptcha_type', '' );
51
52 if ( ! empty( $active_type ) && in_array( $active_type, $captcha_types, true ) ) {
53 foreach ( $captcha_types as $type ) {
54 update_option( 'everest_forms_recaptcha_' . $type . '_enable', ( $type === $active_type ) ? 'yes' : 'no' );
55 }
56 } else {
57 foreach ( $captcha_types as $type ) {
58 update_option( 'everest_forms_recaptcha_' . $type . '_enable', 'no' );
59 }
60 }
61
62 update_option( 'everest_forms_recaptcha_migration_v2_complete', true );
63 }
64
65 public function handle_captcha_enable_toggle() {
66 if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'everest-forms-settings' ) ) {
67 return;
68 }
69
70 $captcha_types = array( 'v2', 'v3', 'hcaptcha', 'turnstile' );
71 $has_enable_field = false;
72
73 foreach ( $captcha_types as $type ) {
74 if ( isset( $_POST[ 'everest_forms_recaptcha_' . $type . '_enable' ] ) ) {
75 $has_enable_field = true;
76 break;
77 }
78 }
79
80 if ( ! $has_enable_field ) {
81 return;
82 }
83
84 $enabled_captcha = '';
85 $validation_errors = array();
86
87 if ( isset( $_POST['everest_forms_recaptcha_v2_enable'] ) ) {
88 $v2_enable = sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v2_enable'] ) );
89 if ( 'yes' === $v2_enable ) {
90 $enabled_captcha = 'v2';
91 $invisible = isset( $_POST['everest_forms_recaptcha_v2_invisible'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v2_invisible'] ) ) : 'no';
92
93 if ( 'yes' === $invisible ) {
94 $invisible_site_key = isset( $_POST['everest_forms_recaptcha_v2_invisible_site_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v2_invisible_site_key'] ) ) : '';
95 $invisible_secret_key = isset( $_POST['everest_forms_recaptcha_v2_invisible_secret_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v2_invisible_secret_key'] ) ) : '';
96
97 if ( empty( $invisible_site_key ) || empty( $invisible_secret_key ) ) {
98 $validation_errors[] = __( 'Please enter both Site Key and Secret Key for Invisible reCAPTCHA v2.', 'everest-forms' );
99 }
100 } else {
101 $site_key = isset( $_POST['everest_forms_recaptcha_v2_site_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v2_site_key'] ) ) : '';
102 $secret_key = isset( $_POST['everest_forms_recaptcha_v2_secret_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v2_secret_key'] ) ) : '';
103
104 if ( empty( $site_key ) || empty( $secret_key ) ) {
105 $validation_errors[] = __( 'Please enter both Site Key and Secret Key for reCAPTCHA v2.', 'everest-forms' );
106 }
107 }
108 }
109 }
110
111 if ( empty( $enabled_captcha ) && isset( $_POST['everest_forms_recaptcha_v3_enable'] ) ) {
112 $v3_enable = sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v3_enable'] ) );
113 if ( 'yes' === $v3_enable ) {
114 $enabled_captcha = 'v3';
115 $site_key = isset( $_POST['everest_forms_recaptcha_v3_site_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v3_site_key'] ) ) : '';
116 $secret_key = isset( $_POST['everest_forms_recaptcha_v3_secret_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_v3_secret_key'] ) ) : '';
117
118 if ( empty( $site_key ) || empty( $secret_key ) ) {
119 $validation_errors[] = __( 'Please enter both Site Key and Secret Key for reCAPTCHA v3.', 'everest-forms' );
120 }
121 }
122 }
123
124 if ( empty( $enabled_captcha ) && isset( $_POST['everest_forms_recaptcha_hcaptcha_enable'] ) ) {
125 $hcaptcha_enable = sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_hcaptcha_enable'] ) );
126 if ( 'yes' === $hcaptcha_enable ) {
127 $enabled_captcha = 'hcaptcha';
128 $site_key = isset( $_POST['everest_forms_recaptcha_hcaptcha_site_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_hcaptcha_site_key'] ) ) : '';
129 $secret_key = isset( $_POST['everest_forms_recaptcha_hcaptcha_secret_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_hcaptcha_secret_key'] ) ) : '';
130
131 if ( empty( $site_key ) || empty( $secret_key ) ) {
132 $validation_errors[] = __( 'Please enter both Site Key and Secret Key for hCaptcha.', 'everest-forms' );
133 }
134 }
135 }
136
137 if ( empty( $enabled_captcha ) && isset( $_POST['everest_forms_recaptcha_turnstile_enable'] ) ) {
138 $turnstile_enable = sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_turnstile_enable'] ) );
139 if ( 'yes' === $turnstile_enable ) {
140 $enabled_captcha = 'turnstile';
141 $site_key = isset( $_POST['everest_forms_recaptcha_turnstile_site_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_turnstile_site_key'] ) ) : '';
142 $secret_key = isset( $_POST['everest_forms_recaptcha_turnstile_secret_key'] ) ? sanitize_text_field( wp_unslash( $_POST['everest_forms_recaptcha_turnstile_secret_key'] ) ) : '';
143
144 if ( empty( $site_key ) || empty( $secret_key ) ) {
145 $validation_errors[] = __( 'Please enter both Site Key and Secret Key for Cloudflare Turnstile.', 'everest-forms' );
146 }
147 }
148 }
149
150 if ( ! empty( $validation_errors ) ) {
151 foreach ( $captcha_types as $type ) {
152 update_option( 'everest_forms_recaptcha_' . $type . '_enable', 'no' );
153 }
154 update_option( 'everest_forms_recaptcha_type', '' );
155 $this->add_toast_redirect( implode( ' ', $validation_errors ), 'error' );
156 return;
157 }
158
159 if ( ! empty( $enabled_captcha ) ) {
160 foreach ( $captcha_types as $type ) {
161 if ( $type === $enabled_captcha ) {
162 update_option( 'everest_forms_recaptcha_' . $type . '_enable', 'yes' );
163 update_option( 'everest_forms_recaptcha_type', $type );
164 } else {
165 update_option( 'everest_forms_recaptcha_' . $type . '_enable', 'no' );
166 }
167 }
168 } else {
169 foreach ( $captcha_types as $type ) {
170 update_option( 'everest_forms_recaptcha_' . $type . '_enable', 'no' );
171 }
172 update_option( 'everest_forms_recaptcha_type', '' );
173 }
174 }
175
176 private function add_toast_redirect( $message, $type = 'error' ) {
177 $redirect_url = add_query_arg(
178 array(
179 'page' => 'evf-settings',
180 'tab' => 'recaptcha',
181 'section' => 'integration',
182 'evf_toast' => rawurlencode( base64_encode( $message ) ),
183 'evf_toast_type' => $type,
184 ),
185 admin_url( 'admin.php' )
186 );
187
188 wp_safe_redirect( $redirect_url );
189 exit;
190 }
191
192 private function is_cleantalk_available() {
193 if ( ! isset( evf()->integrations ) ) {
194 return false;
195 }
196
197 $integrations = evf()->integrations->get_integrations();
198
199 return isset( $integrations['clean-talk'] );
200 }
201
202 private function is_pro_active() {
203 return defined( 'EFP_VERSION' );
204 }
205
206 /**
207 * Build the language options array from the JSON list.
208 *
209 * @return array
210 */
211 private function get_language_options() {
212 $languages = '{"languages":[{"Language":"Arabic","Value":"ar"},{"Language":"Afrikaans","Value":"af"},{"Language":"Amharic","Value":"am"},{"Language":"Armenian","Value":"hy"},{"Language":"Azerbaijani","Value":"az"},{"Language":"Basque","Value":"eu"},{"Language":"Bengali","Value":"bn"},{"Language":"Bulgarian","Value":"bg"},{"Language":"Catalan","Value":"ca"},{"Language":"Chinese (Hong Kong)","Value":"zh-HK"},{"Language":"Chinese (Simplified)","Value":"zh-CN"},{"Language":"Chinese (Traditional)","Value":"zh-TW"},{"Language":"Croatian","Value":"hr"},{"Language":"Czech","Value":"cs"},{"Language":"Danish","Value":"da"},{"Language":"Dutch *","Value":"nl"},{"Language":"English (UK)","Value":"en-GB"},{"Language":"English (US) *","Value":"en"},{"Language":"Estonian","Value":"et"},{"Language":"Filipino","Value":"fil"},{"Language":"Finnish","Value":"fi"},{"Language":"French *","Value":"fr"},{"Language":"French (Canadian)","Value":"fr-CA"},{"Language":"Galician","Value":"gl"},{"Language":"Georgian","Value":"ka"},{"Language":"German *","Value":"de"},{"Language":"German (Austria)","Value":"de-AT"},{"Language":"German (Switzerland)","Value":"de-CH"},{"Language":"Greek","Value":"el"},{"Language":"Gujarati","Value":"gu"},{"Language":"Hebrew","Value":"iw"},{"Language":"Hindi","Value":"hi"},{"Language":"Hungarain","Value":"hu"},{"Language":"Icelandic","Value":"is"},{"Language":"Indonesian","Value":"id"},{"Language":"Italian *","Value":"it"},{"Language":"Japanese","Value":"ja"},{"Language":"Kannada","Value":"kn"},{"Language":"Korean","Value":"ko"},{"Language":"Laothian","Value":"lo"},{"Language":"Latvian","Value":"lv"},{"Language":"Lithuanian","Value":"lt"},{"Language":"Malay","Value":"ms"},{"Language":"Malayalam","Value":"ml"},{"Language":"Marathi","Value":"mr"},{"Language":"Mongolian","Value":"mn"},{"Language":"Norwegian","Value":"no"},{"Language":"Persian","Value":"fa"},{"Language":"Polish","Value":"pl"},{"Language":"Portuguese *","Value":"pt"},{"Language":"Portuguese (Brazil)","Value":"pt-BR"},{"Language":"Portuguese (Portugal)","Value":"pt-PT"},{"Language":"Romanian","Value":"ro"},{"Language":"Russian","Value":"ru"},{"Language":"Serbian","Value":"sr"},{"Language":"Sinhalese","Value":"si"},{"Language":"Slovak","Value":"sk"},{"Language":"Slovenian","Value":"sl"},{"Language":"Spanish *","Value":"es"},{"Language":"Spanish (Latin America)","Value":"es-419"},{"Language":"Swahili","Value":"sw"},{"Language":"Swedish","Value":"sv"},{"Language":"Tamil","Value":"ta"},{"Language":"Telugu","Value":"te"},{"Language":"Thai","Value":"th"},{"Language":"Turkish","Value":"tr"},{"Language":"Ukrainian","Value":"uk"},{"Language":"Urdu","Value":"ur"},{"Language":"Vietnamese","Value":"vi"},{"Language":"Zulu","Value":"zu"}]}';
213 $decoded = json_decode( $languages, true );
214 $options = array();
215
216 foreach ( $decoded['languages'] as $lang ) {
217 $options[ $lang['Value'] ] = $lang['Language'];
218 }
219
220 return $options;
221 }
222
223 public function get_sections() {
224 $sections = array();
225
226 if ( $this->is_pro_active() ) {
227 $sections['general'] = esc_html__( 'General', 'everest-forms' );
228 }
229
230 $sections['integration'] = esc_html__( 'Integration', 'everest-forms' );
231
232 // Language section removed — language setting now lives inside each captcha accordion.
233
234 return apply_filters( 'everest_forms_get_sections_' . $this->id, $sections );
235 }
236
237 public function output_sections() {
238 global $current_section;
239
240 $sections = $this->get_sections();
241
242 if ( empty( $sections ) || 1 === count( $sections ) ) {
243 return;
244 }
245
246 echo '<ul class="evf-subsections">';
247
248 foreach ( $sections as $id => $label ) {
249 $url = add_query_arg(
250 array(
251 'page' => 'evf-settings',
252 'tab' => $this->id,
253 'section' => sanitize_title( $id ),
254 ),
255 admin_url( 'admin.php' )
256 );
257
258 $current_section = isset( $_GET['section'] ) ? sanitize_text_field( wp_unslash( $_GET['section'] ) ) : ( $this->is_pro_active() ? 'general' : 'integration' );
259
260 echo '<li><a href="' . esc_url( $url ) . '" class="' . ( $current_section === $id ? 'current' : '' ) . '">' . esc_html( $label ) . '</a></li>';
261 }
262
263 echo '</ul>';
264 }
265
266 public function get_settings() {
267 global $current_section;
268
269 $current_section = isset( $_GET['section'] ) ? sanitize_text_field( wp_unslash( $_GET['section'] ) ) : '';
270
271 if ( '' === $current_section ) {
272 $current_section = $this->is_pro_active() ? 'general' : 'integration';
273 } elseif ( 'general' === $current_section && ! $this->is_pro_active() ) {
274 $current_section = 'integration';
275 }
276
277 if ( 'integration' === $current_section ) {
278 $settings = $this->get_integration_settings();
279 } else {
280 $settings = $this->get_general_settings();
281 }
282
283 return apply_filters( 'everest_forms_get_settings_' . $this->id, $settings, $current_section );
284 }
285
286 public function get_general_settings() {
287 $settings = apply_filters(
288 'everest_forms_security_general_settings',
289 array(
290 array(
291 'title' => esc_html__( 'General', 'everest-forms' ),
292 'type' => 'title',
293 'id' => 'security_general_options',
294 ),
295 array(
296 'type' => 'sectionend',
297 'id' => 'security_general_options',
298 ),
299 )
300 );
301
302 return $settings;
303 }
304
305 public function get_integration_settings() {
306 $invisible = get_option( 'everest_forms_recaptcha_v2_invisible', 'no' );
307
308 $v2_enabled = get_option( 'everest_forms_recaptcha_v2_enable', 'no' );
309 $v3_enabled = get_option( 'everest_forms_recaptcha_v3_enable', 'no' );
310 $hcaptcha_enabled = get_option( 'everest_forms_recaptcha_hcaptcha_enable', 'no' );
311 $turnstile_enabled = get_option( 'everest_forms_recaptcha_turnstile_enable', 'no' );
312
313 $lang_options = $this->get_language_options();
314
315 $accordion_items = array(
316 array(
317 'title' => esc_html__( 'reCAPTCHA v2', 'everest-forms' ),
318 'icon' => plugins_url( 'assets/images/captcha/reCAPTCHA-v2-v3.png', EVF_PLUGIN_FILE ),
319 'is_enabled' => 'yes' === $v2_enabled,
320 'fields' => array(
321 array(
322 'title' => esc_html__( 'Enable reCAPTCHA v2', 'everest-forms' ),
323 'type' => 'toggle',
324 'desc' => esc_html__( 'Enable reCAPTCHA v2. Note: Enabling this will automatically disable other CAPTCHA providers.', 'everest-forms' ),
325 'id' => 'everest_forms_recaptcha_v2_enable',
326 'default' => 'no',
327 'desc_tip' => true,
328 ),
329 array(
330 'title' => esc_html__( 'Invisible reCAPTCHA', 'everest-forms' ),
331 'type' => 'toggle',
332 'desc' => esc_html__( 'Enable Invisible reCAPTCHA.', 'everest-forms' ),
333 'id' => 'everest_forms_recaptcha_v2_invisible',
334 'default' => 'no',
335 'desc_tip' => true,
336 ),
337 array(
338 'title' => esc_html__( 'Site Key (reCAPTCHA V2)', 'everest-forms' ),
339 'type' => 'text',
340 'desc' => sprintf( esc_html__( 'Please enter your site key for your reCAPTCHA v2. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-google-recaptcha/' ) ),
341 'id' => 'everest_forms_recaptcha_v2_site_key',
342 'default' => '',
343 'desc_tip' => true,
344 ),
345 array(
346 'title' => esc_html__( 'Secret Key (reCAPTCHA V2)', 'everest-forms' ),
347 'type' => 'text',
348 'desc' => sprintf( esc_html__( 'Please enter your secret key for your reCAPTCHA v2. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-google-recaptcha/' ) ),
349 'id' => 'everest_forms_recaptcha_v2_secret_key',
350 'default' => '',
351 'desc_tip' => true,
352 ),
353 array(
354 'title' => esc_html__( 'Invisible Site Key', 'everest-forms' ),
355 'type' => 'text',
356 'desc' => sprintf( esc_html__( 'Please enter your site key for invisible reCAPTCHA v2. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-google-recaptcha/' ) ),
357 'id' => 'everest_forms_recaptcha_v2_invisible_site_key',
358 'is_visible' => 'yes' === $invisible,
359 'default' => '',
360 'desc_tip' => true,
361 ),
362 array(
363 'title' => esc_html__( 'Invisible Secret Key', 'everest-forms' ),
364 'type' => 'text',
365 'desc' => sprintf( esc_html__( 'Please enter your secret key for invisible reCAPTCHA v2. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-google-recaptcha/' ) ),
366 'id' => 'everest_forms_recaptcha_v2_invisible_secret_key',
367 'is_visible' => 'yes' === $invisible,
368 'default' => '',
369 'desc_tip' => true,
370 ),
371 array(
372 'title' => esc_html__( 'CAPTCHA Language', 'everest-forms' ),
373 'type' => 'select',
374 'desc' => esc_html__( 'Choose a preferred language for displaying reCAPTCHA v2.', 'everest-forms' ),
375 'id' => 'everest_forms_recaptcha_recaptcha_language',
376 'options' => $lang_options,
377 'class' => 'evf-enhanced-select',
378 'default' => 'en-GB',
379 'desc_tip' => true,
380 ),
381 ),
382 ),
383 array(
384 'title' => esc_html__( 'reCAPTCHA v3', 'everest-forms' ),
385 'icon' => plugins_url( 'assets/images/captcha/reCAPTCHA-v2-v3.png', EVF_PLUGIN_FILE ),
386 'is_enabled' => 'yes' === $v3_enabled,
387 'fields' => array(
388 array(
389 'title' => esc_html__( 'Enable reCAPTCHA v3', 'everest-forms' ),
390 'type' => 'toggle',
391 'desc' => esc_html__( 'Enable reCAPTCHA v3. Note: Enabling this will automatically disable other CAPTCHA providers.', 'everest-forms' ),
392 'id' => 'everest_forms_recaptcha_v3_enable',
393 'default' => 'no',
394 'desc_tip' => true,
395 ),
396 array(
397 'title' => esc_html__( 'Site Key (reCAPTCHA V3)', 'everest-forms' ),
398 'type' => 'text',
399 'desc' => sprintf( esc_html__( 'Please enter your site key for your reCAPTCHA v3. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-google-recaptcha/' ) ),
400 'id' => 'everest_forms_recaptcha_v3_site_key',
401 'default' => '',
402 'desc_tip' => true,
403 ),
404 array(
405 'title' => esc_html__( 'Secret Key (reCAPTCHA V3)', 'everest-forms' ),
406 'type' => 'text',
407 'desc' => sprintf( esc_html__( 'Please enter your secret key for your reCAPTCHA v3. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-google-recaptcha/' ) ),
408 'id' => 'everest_forms_recaptcha_v3_secret_key',
409 'default' => '',
410 'desc_tip' => true,
411 ),
412 array(
413 'title' => esc_html__( 'Threshold Score', 'everest-forms' ),
414 'type' => 'number',
415 'desc' => esc_html__( 'reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot). If the score is less than or equal to this threshold, the form submission will be blocked.', 'everest-forms' ),
416 'id' => 'everest_forms_recaptcha_v3_threshold_score',
417 'custom_attributes' => array(
418 'step' => '0.1',
419 'min' => '0.0',
420 'max' => '1.0',
421 ),
422 'default' => '0.4',
423 'desc_tip' => true,
424 ),
425 array(
426 'title' => esc_html__( 'CAPTCHA Language', 'everest-forms' ),
427 'type' => 'select',
428 'desc' => esc_html__( 'Choose a preferred language for displaying reCAPTCHA v3.', 'everest-forms' ),
429 'id' => 'everest_forms_recaptcha_recaptcha_language',
430 'options' => $lang_options,
431 'class' => 'evf-enhanced-select',
432 'default' => 'en-GB',
433 'desc_tip' => true,
434 ),
435 ),
436 ),
437 array(
438 'title' => esc_html__( 'hCaptcha', 'everest-forms' ),
439 'icon' => plugins_url( 'assets/images/captcha/hCAPTCHA-logo.png', EVF_PLUGIN_FILE ),
440 'is_enabled' => 'yes' === $hcaptcha_enabled,
441 'fields' => array(
442 array(
443 'title' => esc_html__( 'Enable hCaptcha', 'everest-forms' ),
444 'type' => 'toggle',
445 'desc' => esc_html__( 'Enable hCaptcha. Note: Enabling this will automatically disable other CAPTCHA providers.', 'everest-forms' ),
446 'id' => 'everest_forms_recaptcha_hcaptcha_enable',
447 'default' => 'no',
448 'desc_tip' => true,
449 ),
450 array(
451 'title' => esc_html__( 'Site Key (hCaptcha)', 'everest-forms' ),
452 'type' => 'text',
453 'desc' => sprintf( esc_html__( 'Please enter your site key for your hCaptcha. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-hcaptcha/' ) ),
454 'id' => 'everest_forms_recaptcha_hcaptcha_site_key',
455 'default' => '',
456 'desc_tip' => true,
457 ),
458 array(
459 'title' => esc_html__( 'Secret Key (hCaptcha)', 'everest-forms' ),
460 'type' => 'text',
461 'desc' => sprintf( esc_html__( 'Please enter your secret key for your hCaptcha. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-hcaptcha/' ) ),
462 'id' => 'everest_forms_recaptcha_hcaptcha_secret_key',
463 'default' => '',
464 'desc_tip' => true,
465 ),
466 array(
467 'title' => esc_html__( 'CAPTCHA Language', 'everest-forms' ),
468 'type' => 'select',
469 'desc' => esc_html__( 'Choose a preferred language for displaying hCaptcha.', 'everest-forms' ),
470 'id' => 'everest_forms_recaptcha_recaptcha_language',
471 'options' => $lang_options,
472 'class' => 'evf-enhanced-select',
473 'default' => 'en-GB',
474 'desc_tip' => true,
475 ),
476 ),
477 ),
478 array(
479 'title' => esc_html__( 'Cloudflare Turnstile', 'everest-forms' ),
480 'icon' => plugins_url( 'assets/images/captcha/cloudflare-logo.png', EVF_PLUGIN_FILE ),
481 'is_enabled' => 'yes' === $turnstile_enabled,
482 'fields' => array(
483 array(
484 'title' => esc_html__( 'Enable Cloudflare Turnstile', 'everest-forms' ),
485 'type' => 'toggle',
486 'desc' => esc_html__( 'Enable Cloudflare Turnstile. Note: Enabling this will automatically disable other CAPTCHA providers.', 'everest-forms' ),
487 'id' => 'everest_forms_recaptcha_turnstile_enable',
488 'default' => 'no',
489 'desc_tip' => true,
490 ),
491 array(
492 'title' => esc_html__( 'Site Key (Cloudflare Turnstile)', 'everest-forms' ),
493 'type' => 'text',
494 'desc' => sprintf( esc_html__( 'Please enter your site key for your Cloudflare Turnstile. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-cloudflare-turnstile-with-the-everest-forms/' ) ),
495 'id' => 'everest_forms_recaptcha_turnstile_site_key',
496 'default' => '',
497 'desc_tip' => true,
498 ),
499 array(
500 'title' => esc_html__( 'Secret Key (Cloudflare Turnstile)', 'everest-forms' ),
501 'type' => 'text',
502 'desc' => sprintf( esc_html__( 'Please enter your secret key for your Cloudflare Turnstile. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-cloudflare-turnstile-with-the-everest-forms/' ) ),
503 'id' => 'everest_forms_recaptcha_turnstile_secret_key',
504 'default' => '',
505 'desc_tip' => true,
506 ),
507 array(
508 'title' => esc_html__( 'Theme', 'everest-forms' ),
509 'type' => 'select',
510 'desc' => sprintf( esc_html__( 'Please select theme mode for your Cloudflare Turnstile. <a href="%1$s" target="_blank">Learn More</a>', 'everest-forms' ), esc_url( 'https://docs.everestforms.net/docs/how-to-integrate-cloudflare-turnstile-with-the-everest-forms/' ) ),
511 'id' => 'everest_forms_recaptcha_turnstile_theme',
512 'options' => array(
513 'auto' => esc_html__( 'Auto', 'everest-forms' ),
514 'light' => esc_html__( 'Light', 'everest-forms' ),
515 'dark' => esc_html__( 'Dark', 'everest-forms' ),
516 ),
517 'default' => 'auto',
518 'class' => 'evf-enhanced-select',
519 'desc_tip' => true,
520 ),
521 array(
522 'title' => esc_html__( 'CAPTCHA Language', 'everest-forms' ),
523 'type' => 'select',
524 'desc' => esc_html__( 'Choose a preferred language for displaying Cloudflare Turnstile.', 'everest-forms' ),
525 'id' => 'everest_forms_recaptcha_recaptcha_language',
526 'options' => $lang_options,
527 'class' => 'evf-enhanced-select',
528 'default' => 'en-GB',
529 'desc_tip' => true,
530 ),
531 ),
532 ),
533 );
534
535 if ( $this->is_cleantalk_available() ) {
536 $cleantalk_connected = ! empty( get_option( 'everest_forms_recaptcha_cleantalk_access_key', '' ) );
537 $cleantalk_icon = '';
538 $integrations = evf()->integrations->get_integrations();
539
540 if ( isset( $integrations['clean-talk'] ) ) {
541 $cleantalk_icon = $integrations['clean-talk']->icon;
542 }
543
544 $accordion_items[] = array(
545 'title' => esc_html__( 'CleanTalk', 'everest-forms' ),
546 'icon' => $cleantalk_icon,
547 'is_enabled' => $cleantalk_connected,
548 'fields' => array(
549 array(
550 'title' => esc_html__( 'Access Key', 'everest-forms' ),
551 'type' => 'text',
552 'desc' => sprintf(
553 esc_html__( 'Enter your CleanTalk Access Key. You can find it in your <a href="%s" target="_blank">CleanTalk dashboard</a>.', 'everest-forms' ),
554 esc_url( 'https://cleantalk.org/my/' )
555 ),
556 'id' => 'everest_forms_recaptcha_cleantalk_access_key',
557 'default' => '',
558 'desc_tip' => true,
559 ),
560 ),
561 );
562 }
563
564 $settings = apply_filters(
565 'everest_forms_recaptcha_integration_settings',
566 array(
567 array(
568 'title' => esc_html__( 'Integration', 'everest-forms' ),
569 'type' => 'title',
570 'desc' => sprintf(
571 __( 'Get detailed documentation on integrating <a href="%1$s" target="_blank">reCAPTCHA</a>, <a href="%2$s" target="_blank">hCaptcha</a>,<a href="%3$s" target="_blank"> Cloudflare Turnstile</a> and <a href="%4$s" target="_blank"> CleanTalk</a> with Everest forms.', 'everest-forms' ),
572 'https://docs.everestforms.net/docs/how-to-integrate-google-recaptcha/',
573 'https://docs.everestforms.net/docs/how-to-integrate-hcaptcha/',
574 'https://docs.everestforms.net/docs/how-to-integrate-cloudflare-turnstile-with-the-everest-forms/',
575 'https://docs.everestforms.net/docs/cleantalk/'
576 ),
577 'id' => 'integration_options',
578 ),
579 array(
580 'type' => 'accordion',
581 'items' => $accordion_items,
582 ),
583 array(
584 'type' => 'sectionend',
585 'id' => 'integration_options',
586 ),
587 )
588 );
589
590 return $settings;
591 }
592
593 public function save() {
594 $settings = $this->get_settings();
595
596 EVF_Admin_Settings::save_fields( $settings );
597 }
598 }
599
600 return new EVF_Settings_Security();
601