PluginProbe ʕ •ᴥ•ʔ
reCaptcha by BestWebSoft / 1.66
reCaptcha by BestWebSoft v1.66
1.79 1.80 1.82 1.83 1.84 1.85 1.86 1.87 trunk 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.40 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.50 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.60 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.70 1.71 1.72 1.73 1.74 1.75 1.78
google-captcha / google-captcha.php
google-captcha Last commit date
bws_menu 4 years ago css 4 years ago includes 4 years ago js 4 years ago languages 4 years ago google-captcha.php 4 years ago readme.txt 4 years ago screenshot-1.png 4 years ago screenshot-2.png 4 years ago screenshot-3.png 4 years ago screenshot-4.png 4 years ago screenshot-5.png 4 years ago screenshot-6.png 4 years ago screenshot-7.png 4 years ago screenshot-8.png 4 years ago
google-captcha.php
1227 lines
1 <?php
2 /*
3 Plugin Name: reCaptcha by BestWebSoft
4 Plugin URI: https://bestwebsoft.com/products/wordpress/plugins/google-captcha/
5 Description: Protect WordPress website forms from spam entries with Google Captcha (reCaptcha).
6 Author: BestWebSoft
7 Text Domain: google-captcha
8 Domain Path: /languages
9 Version: 1.66
10 Author URI: https://bestwebsoft.com/
11 License: GPLv3 or later
12 */
13
14 /* © Copyright 2021 BestWebSoft ( https://support.bestwebsoft.com )
15
16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License, version 2, as
18 published by the Free Software Foundation.
19
20 This program is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 GNU General Public License for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with this program; if not, write to the Free Software
27 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
28 */
29
30 require_once( dirname( __FILE__ ) . '/includes/forms.php' );
31
32 /* Add menu page */
33 if ( ! function_exists( 'gglcptch_admin_menu' ) ) {
34 function gglcptch_admin_menu() {
35 global $submenu, $wp_version, $gglcptch_plugin_info;
36
37 if ( ! is_plugin_active( 'google-captcha-pro/google-captcha-pro.php' ) ) {
38 $settings_page = add_menu_page(
39 __( 'reCaptcha Settings', 'google-captcha' ),
40 'reCaptcha',
41 'manage_options',
42 'google-captcha.php',
43 'gglcptch_add_settings_page',
44 'none'
45 );
46
47 add_submenu_page(
48 'google-captcha.php',
49 __( 'reCaptcha Settings', 'google-captcha'),
50 __( 'Settings', 'google-captcha' ),
51 'manage_options',
52 'google-captcha.php',
53 'gglcptch_add_settings_page'
54 );
55
56 $allowlist_page = add_submenu_page(
57 'google-captcha.php',
58 __( 'reCaptcha Allow List', 'google-captcha' ),
59 __( 'Allow List', 'google-captcha' ),
60 'manage_options',
61 'google-captcha-allowlist.php',
62 'gglcptch_add_settings_page'
63 );
64
65 add_submenu_page(
66 'google-captcha.php',
67 'BWS Panel',
68 'BWS Panel',
69 'manage_options',
70 'gglcptch-bws-panel',
71 'bws_add_menu_render'
72 );
73 /*pls */
74 if ( isset( $submenu['google-captcha.php'] ) ) {
75 $submenu['google-captcha.php'][] = array(
76 '<span style="color:#d86463"> ' . __('Upgrade to Pro', 'google-captcha' ) . '</span>',
77 'manage_options',
78 'https://bestwebsoft.com/products/wordpress/plugins/google-captcha/?k=b850d949ccc1239cab0da315c3c822ab&pn=109&v=' . $gglcptch_plugin_info["Version"] . '&wp_v=' . $wp_version );
79 }
80 /* pls*/
81 add_action( "load-{$settings_page}", 'gglcptch_add_tabs' );
82 add_action( "load-{$allowlist_page}", 'gglcptch_add_tabs' );
83 }
84 }
85 }
86
87 if ( ! function_exists( 'gglcptch_plugins_loaded' ) ) {
88 function gglcptch_plugins_loaded() {
89 /* Internationalization, first(!) */
90 load_plugin_textdomain( 'google-captcha', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
91 }
92 }
93
94 if ( ! function_exists( 'gglcptch_init' ) ) {
95 function gglcptch_init() {
96 global $gglcptch_plugin_info, $gglcptch_options, $pagenow;
97
98 require_once( dirname( __FILE__ ) . '/bws_menu/bws_include.php' );
99 bws_include_init( plugin_basename( __FILE__ ) );
100
101 if ( empty( $gglcptch_plugin_info ) ) {
102 if ( ! function_exists( 'get_plugin_data' ) ) {
103 require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
104 }
105 $gglcptch_plugin_info = get_plugin_data( __FILE__ );
106 }
107
108 /* Function check if plugin is compatible with current WP version */
109 bws_wp_min_version_check( plugin_basename( __FILE__ ), $gglcptch_plugin_info, '4.5' );
110
111 $is_user_edit_page = isset( $pagenow ) && 'user-edit.php' == $pagenow;
112 $is_admin = is_admin() && ( ! defined( 'DOING_AJAX' ) || ! $is_user_edit_page );
113
114 /* Call register settings function */
115 if ( ! $is_admin || ( isset( $_GET['page'] ) && 'google-captcha.php' == $_GET['page'] ) ) {
116 register_gglcptch_settings();
117 }
118
119 /* Add hooks */
120 if ( ! $is_admin && ! empty( $gglcptch_options['public_key'] ) && ! empty( $gglcptch_options['private_key'] ) ) {
121 gglcptch_add_actions();
122 }
123 }
124 }
125
126 /**
127 * Activation plugin function
128 */
129 if ( ! function_exists( 'gglcptch_plugin_activate' ) ) {
130 function gglcptch_plugin_activate( $networkwide ) {
131 /* Activation function for network, check if it is a network activation - if so, run the activation function for each blog id */
132 if ( is_multisite() ) {
133 switch_to_blog( 1 );
134 register_uninstall_hook( __FILE__, 'gglcptch_delete_options' );
135 restore_current_blog();
136 } else {
137 register_uninstall_hook( __FILE__, 'gglcptch_delete_options' );
138 }
139 }
140 }
141
142 if ( ! function_exists( 'gglcptch_admin_init' ) ) {
143 function gglcptch_admin_init() {
144 global $pagenow, $bws_plugin_info, $gglcptch_plugin_info, $gglcptch_options;
145
146 if ( empty( $bws_plugin_info ) ) {
147 $bws_plugin_info = array( 'id' => '109', 'version' => $gglcptch_plugin_info["Version"] );
148 }
149
150 /*pls */
151 if ( 'plugins.php' == $pagenow ) {
152 if ( empty( $gglcptch_options ) )
153 register_gglcptch_settings();
154
155 if ( function_exists( 'bws_plugin_banner_go_pro' ) ) {
156 bws_plugin_banner_go_pro( $gglcptch_options, $gglcptch_plugin_info, 'gglcptch', 'google-captcha', '676d9558f9786ab41d7de35335cf5c4d', '109', 'google-captcha' );
157 }
158 }
159 /* pls*/
160 }
161 }
162
163 /* Add google captcha styles */
164 if ( ! function_exists( 'gglcptch_add_admin_script_styles' ) ) {
165 function gglcptch_add_admin_script_styles() {
166 global $gglcptch_plugin_info;
167
168 /* css for displaing an icon */
169 wp_enqueue_style( 'gglcptch_admin_page_stylesheet', plugins_url( 'css/admin_page.css', __FILE__ ) );
170
171 if ( isset( $_REQUEST['page'] ) && ( 'google-captcha.php' == $_REQUEST['page'] || 'google-captcha-allowlist.php' == $_REQUEST['page'] ) ) {
172 wp_enqueue_style( 'gglcptch_stylesheet', plugins_url( 'css/style.css', __FILE__ ), array(), $gglcptch_plugin_info['Version'] );
173 wp_enqueue_script( 'gglcptch_admin_script', plugins_url( 'js/admin_script.js', __FILE__ ), array( 'jquery', 'jquery-ui-accordion' ), $gglcptch_plugin_info['Version'] );
174
175 bws_enqueue_settings_scripts();
176 bws_plugins_include_codemirror();
177 }
178 }
179 }
180
181 /* Add google captcha admin styles for test key */
182 if ( ! function_exists( 'gglcptch_admin_footer' ) ) {
183 function gglcptch_admin_footer() {
184 global $gglcptch_plugin_info, $gglcptch_options;
185 if ( isset( $_REQUEST['page'] ) && 'google-captcha.php' == $_REQUEST['page'] ) {
186
187 /* update $gglcptch_options */
188 register_gglcptch_settings();
189
190 $api_url = gglcptch_get_api_url();
191
192 /* for gglcptch test key */
193 if ( isset( $gglcptch_options['recaptcha_version'] ) && in_array( $gglcptch_options['recaptcha_version'], array( 'v2', 'invisible' ) ) ) {
194 $deps = ( ! empty( $gglcptch_options['disable_submit'] ) ) ? array( 'gglcptch_pre_api' ) : array( 'jquery' );
195 } else {
196 $deps = array();
197 }
198 wp_register_script( 'gglcptch_api', $api_url, $deps, $gglcptch_plugin_info['Version'], true );
199 gglcptch_add_scripts();
200 }
201 }
202 }
203
204 /**
205 * Remove dublicate scripts
206 */
207 if ( ! function_exists( 'gglcptch_remove_dublicate_scripts' ) ) {
208 function gglcptch_remove_dublicate_scripts() {
209 global $wp_scripts;
210
211 if ( ! is_object( $wp_scripts ) || empty( $wp_scripts ) ) {
212 return false;
213 }
214
215 foreach ( $wp_scripts->registered as $script_name => $args ) {
216 if ( preg_match( "|google\.com/recaptcha/api\.js|", $args->src ) && 'gglcptch_api' != $script_name ) {
217 /* remove a previously enqueued script */
218 wp_dequeue_script( $script_name );
219 }
220 }
221 }
222 }
223
224 /**
225 * Add google captcha styles
226 */
227 if ( ! function_exists( 'gglcptch_add_styles' ) ) {
228 function gglcptch_add_styles() {
229 global $gglcptch_plugin_info, $gglcptch_options;
230 wp_enqueue_style( 'gglcptch', plugins_url( 'css/gglcptch.css', __FILE__ ), array(), $gglcptch_plugin_info["Version"] );
231
232 if ( defined( 'BWS_ENQUEUE_ALL_SCRIPTS' ) && BWS_ENQUEUE_ALL_SCRIPTS ) {
233 if ( ! wp_script_is( 'gglcptch_api', 'registered' ) ) {
234 $api_url = gglcptch_get_api_url();
235 if ( isset( $gglcptch_options['recaptcha_version'] ) && in_array( $gglcptch_options['recaptcha_version'], array( 'v2', 'invisible' ) ) ) {
236 $deps = ( ! empty( $gglcptch_options['disable_submit'] ) ) ? array( 'gglcptch_pre_api' ) : array( 'jquery' );
237 } else {
238 $deps = array();
239 }
240
241 wp_register_script( 'gglcptch_api', $api_url, $deps, $gglcptch_plugin_info['Version'], true );
242
243 add_action( 'wp_footer', 'gglcptch_add_scripts' );
244 if (
245 $gglcptch_options['login_form'] ||
246 $gglcptch_options['reset_pwd_form'] ||
247 $gglcptch_options['registration_form']
248 ) {
249 add_action( 'login_footer', 'gglcptch_add_scripts' );
250 }
251 }
252 }
253 }
254 }
255
256 /**
257 * Add google captcha js scripts
258 */
259 if ( ! function_exists( 'gglcptch_add_scripts' ) ) {
260 function gglcptch_add_scripts() {
261 global $gglcptch_options, $gglcptch_plugin_info;
262
263 if ( empty( $gglcptch_options ) ) {
264 register_gglcptch_settings();
265 }
266
267 if ( isset( $gglcptch_options['recaptcha_version'] ) ) {
268 gglcptch_remove_dublicate_scripts();
269 if ( ! empty( $gglcptch_options['disable_submit'] ) ) {
270 wp_enqueue_script( 'gglcptch_pre_api', plugins_url( 'js/pre-api-script.js', __FILE__ ), array( 'jquery'), $gglcptch_plugin_info['Version'], true );
271 wp_localize_script( 'gglcptch_pre_api', 'gglcptch_pre', array(
272 'messages' => array(
273 'in_progress' => __( 'Please wait until Google reCAPTCHA is loaded.', 'google-captcha' ),
274 'timeout' => __( 'Failed to load Google reCAPTCHA. Please check your internet connection and reload this page.', 'google-captcha' )
275 ),
276 'custom_callback' => apply_filters( 'gglcptch_custom_callback', '' )
277 ) );
278 }
279 }
280
281 wp_enqueue_script( 'gglcptch_script', plugins_url( 'js/script.js', __FILE__ ), array( 'jquery', 'gglcptch_api' ), $gglcptch_plugin_info["Version"], true );
282
283 do_action( 'gglcptch_custom_enqueue_script' );
284
285 $options = array(
286 'version' => $gglcptch_options['recaptcha_version'],
287 'sitekey' => $gglcptch_options['public_key'],
288 'error' => sprintf( '<strong>%s</strong>:&nbsp;%s', __( 'Warning', 'google-captcha' ), gglcptch_get_message( 'multiple_blocks' ) ),
289 'disable' => $gglcptch_options['disable_submit_button']
290 );
291
292 if ( $gglcptch_options['recaptcha_version'] == 'v2' )
293 $options['theme'] = $gglcptch_options['theme_v2'];
294
295 wp_localize_script( 'gglcptch_script', 'gglcptch', array(
296 'options' => $options,
297 'vars' => array(
298 'visibility' => ( 'login_footer' == current_filter() )
299 )
300 ) );
301
302 if ( $gglcptch_options['hide_badge'] ) {
303 wp_enqueue_style( 'gglcptch_hide', plugins_url( 'css/hide_badge.css', __FILE__ ), array(), $gglcptch_plugin_info['Version'] );
304 }
305 }
306 }
307
308 if ( ! function_exists( 'gglcptch_pagination_callback' ) ) {
309 function gglcptch_pagination_callback( $content ) {
310 $content .= "if ( typeof Recaptcha != 'undefined' || typeof grecaptcha != 'undefined' ) { gglcptch.prepare(); }";
311 return $content;
312 }
313 }
314
315 /**
316 * Add the "async" attribute to our registered script.
317 */
318 if ( ! function_exists( 'gglcptch_add_async_attribute' ) ) {
319 function gglcptch_add_async_attribute( $tag, $handle ) {
320 if ( 'gglcptch_api' == $handle ) {
321 $tag = str_replace( ' src', ' data-cfasync="false" async="async" defer="defer" src', $tag );
322 }
323 return $tag;
324 }
325 }
326
327 if ( ! function_exists( 'gglcptch_create_table' ) ) {
328 function gglcptch_create_table() {
329 global $wpdb;
330 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
331
332 $sql = "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}gglcptch_allowlist` (
333 `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
334 `ip` CHAR(31) NOT NULL,
335 `ip_from_int` BIGINT,
336 `ip_to_int` BIGINT,
337 `add_time` DATETIME,
338 PRIMARY KEY (`id`)
339 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
340 dbDelta( $sql );
341
342 /* add unique key */
343 if ( ! $wpdb->query( "SHOW KEYS FROM `{$wpdb->prefix}gglcptch_allowlist` WHERE Key_name='ip'" ) ) {
344 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}gglcptch_allowlist` ADD UNIQUE(`ip`);" );
345 }
346 }
347 }
348
349 /* Google catpcha settings */
350 if ( ! function_exists( 'register_gglcptch_settings' ) ) {
351 function register_gglcptch_settings() {
352 global $wpdb, $gglcptch_options, $gglcptch_plugin_info;
353
354 $plugin_db_version = '0.2';
355
356 /* Install the option defaults */
357 if ( ! get_option( 'gglcptch_options' ) ) {
358 add_option( 'gglcptch_options', gglcptch_get_default_options() );
359 }
360 /* Get options from the database */
361 $gglcptch_options = get_option( 'gglcptch_options' );
362
363 /* Update tables when update plugin and tables changes*/
364 if ( ! isset( $gglcptch_options['plugin_db_version'] ) || $gglcptch_options['plugin_db_version'] != $plugin_db_version ) {
365
366 if ( ! isset( $gglcptch_options['plugin_db_version'] ) ) {
367 gglcptch_create_table();
368 }
369
370 /**
371 * @deprecated since 1.59
372 * @todo remove after 01.05.2021
373 */
374 if ( isset( $gglcptch_options['plugin_option_version'] ) && version_compare( $gglcptch_options['plugin_option_version'], '1.59', '<' ) ) {
375 $prefix = $wpdb->prefix . 'gglcptch_';
376 /* Renaming a table */
377 $wpdb->query( "RENAME TABLE `" . $prefix . "whitelist` TO `" . $prefix . "allowlist`" );
378
379 /* Renaming old options to DB */
380 $gglcptch_options['allowlist_is_empty'] = $gglcptch_options['whitelist_is_empty'];
381 $gglcptch_options['allowlist_message'] = $gglcptch_options['whitelist_message'];
382 }
383 /* end deprecated */
384
385 $gglcptch_options['plugin_db_version'] = $plugin_db_version;
386 update_option( 'gglcptch_options', $gglcptch_options );
387 }
388
389 /* Array merge incase this version has added new options */
390 if ( ! isset( $gglcptch_options['plugin_option_version'] ) || $gglcptch_options['plugin_option_version'] != $gglcptch_plugin_info["Version"] ) {
391 $gglcptch_options = array_merge( gglcptch_get_default_options(), $gglcptch_options );
392 $gglcptch_options['plugin_option_version'] = $gglcptch_plugin_info["Version"];
393
394 /* show pro features */
395 $gglcptch_options['hide_premium_options'] = array();
396
397 if ( is_multisite() ) {
398 switch_to_blog( 1 );
399 register_uninstall_hook( __FILE__, 'gglcptch_delete_options' );
400 restore_current_blog();
401 } else {
402 register_uninstall_hook( __FILE__, 'gglcptch_delete_options' );
403 }
404 update_option( 'gglcptch_options', $gglcptch_options );
405 }
406 }
407 }
408
409 if ( ! function_exists( 'gglcptch_get_default_options' ) ) {
410 function gglcptch_get_default_options() {
411 global $gglcptch_plugin_info;
412
413 $default_options = array(
414 'allowlist_message' => __( 'You are in the allow list', 'google-captcha' ),
415 'public_key' => '',
416 'private_key' => '',
417 'login_form' => 0,
418 'registration_form' => 0,
419 'reset_pwd_form' => 1,
420 'comments_form' => 0,
421 'contact_form' => 0,
422 'testimonials' => 0,
423 'theme_v2' => 'light',
424 'recaptcha_version' => 'v2',
425 'plugin_option_version' => $gglcptch_plugin_info["Version"],
426 'first_install' => strtotime( "now" ),
427 'display_settings_notice' => 1,
428 'suggest_feature_banner' => 1,
429 'score_v3' => 0.5,
430 'hide_badge' => 0,
431 'disable_submit_button' => 0,
432 'use_globally' => 0
433 );
434
435 if ( function_exists( 'get_editable_roles' ) ) {
436 foreach ( get_editable_roles() as $role => $fields ) {
437 $default_options[ $role ] = '0';
438 }
439 }
440 return $default_options;
441 }
442 }
443
444 if ( ! function_exists( 'gglcptch_plugin_status' ) ) {
445 function gglcptch_plugin_status( $plugins, $all_plugins, $is_network ) {
446 $result = array(
447 'status' => '',
448 'plugin' => '',
449 'plugin_info' => array(),
450 );
451 foreach ( ( array )$plugins as $plugin ) {
452 if ( array_key_exists( $plugin, $all_plugins ) ) {
453 if (
454 ( $is_network && is_plugin_active_for_network( $plugin ) ) ||
455 ( ! $is_network && is_plugin_active( $plugin ) )
456 ) {
457 $result['status'] = 'activated';
458 $result['plugin'] = $plugin;
459 $result['plugin_info'] = $all_plugins[ $plugin ];
460 break;
461 } else {
462 $result['status'] = 'deactivated';
463 $result['plugin'] = $plugin;
464 $result['plugin_info'] = $all_plugins[ $plugin ];
465 }
466
467 }
468 }
469 if ( empty( $result['status'] ) ) {
470 $result['status'] = 'not_installed';
471 }
472 return $result;
473 }
474 }
475
476 if ( ! function_exists( 'gglcptch_allowlisted_ip' ) ) {
477 function gglcptch_allowlisted_ip() {
478 global $wpdb, $gglcptch_options;
479 $checked = false;
480 if ( empty( $gglcptch_options ) ) {
481 $gglcptch_options = get_option( 'gglcptch_options' );
482 }
483 $allowlist_exist = $wpdb->query( "SHOW TABLES LIKE '{$wpdb->prefix}gglcptch_allowlist'" );
484 if ( 1 === $allowlist_exist ) {
485 $ip = gglcptch_get_ip();
486
487 if ( ! empty( $ip ) ) {
488 $ip_int = sprintf( '%u', ip2long( $ip ) );
489 $result = $wpdb->get_var(
490 "SELECT `id`
491 FROM `{$wpdb->prefix}gglcptch_allowlist`
492 WHERE ( `ip_from_int` <= {$ip_int} AND `ip_to_int` >= {$ip_int} ) OR `ip` LIKE '{$ip}' LIMIT 1;"
493 );
494 $checked = is_null( $result ) || ! $result ? false : true;
495 }
496 }
497 return $checked;
498 }
499 }
500
501 /* Display settings page */
502 if ( ! function_exists( 'gglcptch_add_settings_page' ) ) {
503 function gglcptch_add_settings_page() {
504 global $gglcptch_plugin_info;
505 /*pls */
506 require_once( dirname( __FILE__ ) . '/includes/pro_banners.php' );
507 /* pls*/
508 if ( 'google-captcha.php' == $_GET['page'] ) {
509 if ( ! class_exists( 'Bws_Settings_Tabs' ) ) {
510 require_once( dirname( __FILE__ ) . '/bws_menu/class-bws-settings.php' );
511 }
512 require_once( dirname( __FILE__ ) . '/includes/class-gglcptch-settings-tabs.php' );
513 $page = new Gglcptch_Settings_Tabs( plugin_basename( __FILE__ ) );
514 if ( method_exists( $page, 'add_request_feature' ) ) {
515 $page->add_request_feature();
516 }
517 } ?>
518 <div class="wrap">
519 <?php if ( 'google-captcha.php' == $_GET['page'] ) { ?>
520 <h1><?php _e( 'reCaptcha Settings', 'google-captcha' ); ?></h1>
521 <noscript><div class="error below-h2"><p><strong><?php _e( "Please enable JavaScript in your browser.", 'google-captcha' ); ?></strong></p></div></noscript>
522 <?php $page->display_content();
523 } else {
524 require_once( dirname( __FILE__ ) . '/includes/allowlist.php' );
525 $page = new Gglcptch_Allowlist( plugin_basename( __FILE__ ) );
526 if ( is_object( $page ) ) {
527 $page->display_content();
528 }
529 /*pls */
530 bws_plugin_reviews_block( $gglcptch_plugin_info['Name'], 'google-captcha' );
531 /* pls*/
532 } ?>
533 </div>
534 <?php }
535 }
536
537 if ( ! function_exists( 'gglcptch_is_recaptcha_required' ) ) {
538 function gglcptch_is_recaptcha_required( $form_slug = '', $is_user_logged_in = null ) {
539 global $gglcptch_options;
540
541 if ( is_null( $is_user_logged_in ) ) {
542 $is_user_logged_in = is_user_logged_in();
543 }
544
545 if ( empty( $gglcptch_options ) ) {
546 $gglcptch_options = get_option( 'gglcptch_options' );
547 if ( empty( $gglcptch_options ) ) {
548 register_gglcptch_settings();
549 }
550 }
551
552 $result =
553 ! isset( $gglcptch_options[ $form_slug ] ) ||
554 (
555 ! empty( $gglcptch_options[ $form_slug ] ) &&
556 ( ! $is_user_logged_in || ! gglcptch_is_hidden_for_role() )
557 );
558
559 return $result;
560 }
561 }
562
563 /* Checking current user role */
564 if ( ! function_exists( 'gglcptch_is_hidden_for_role' ) ) {
565 function gglcptch_is_hidden_for_role() {
566 global $current_user, $gglcptch_options;
567
568 if ( ! is_user_logged_in() ) {
569 return false;
570 }
571
572 if ( ! empty( $current_user->roles[0] ) ) {
573 $role = $current_user->roles[0];
574 if ( empty( $gglcptch_options ) ) {
575 register_gglcptch_settings();
576 }
577 return ! empty( $gglcptch_options[ $role ] );
578 } else {
579 return false;
580 }
581 }
582 }
583
584 /* Display google captcha */
585 if ( ! function_exists( 'gglcptch_display' ) ) {
586 function gglcptch_display( $content = false ) {
587 global $gglcptch_options, $gglcptch_count, $gglcptch_plugin_info;
588
589 if ( empty( $gglcptch_options ) ) {
590 register_gglcptch_settings();
591 }
592
593 if ( ! gglcptch_allowlisted_ip() || ( isset( $_GET['action'] ) && 'gglcptch-test-keys' == $_GET['action'] ) ) {
594
595 if ( ! $gglcptch_count ) {
596 $gglcptch_count = 1;
597 }
598
599 $content .= '<div class="gglcptch gglcptch_' . $gglcptch_options['recaptcha_version'] . '">';
600
601 if ( $gglcptch_options['hide_badge'] && 'v2' != $gglcptch_options['recaptcha_version'] ) {
602 $content .= sprintf(
603 '<div class="google-captcha-notice">%s<a href="https://policies.google.com/privacy" target="_blank">%s</a>%s<a href="https://policies.google.com/terms" target="_blank">%s</a>%s</div>',
604 __( 'This site is protected by reCAPTCHA and the Google ', 'google-captcha' ),
605 __( 'Privacy Policy', 'google-captcha' ),
606 __( ' and ', 'google-captcha' ),
607 __( 'Terms of Service', 'google-captcha' ),
608 __( ' apply.', 'google-captcha' )
609 );
610 }
611 if ( ! $gglcptch_options['private_key'] || ! $gglcptch_options['public_key'] ) {
612 if ( current_user_can( 'manage_options' ) ) {
613 $content .= sprintf(
614 '<strong>%s <a target="_blank" href="https://www.google.com/recaptcha/admin#list">%s</a> %s <a target="_blank" href="%s">%s</a>.</strong>',
615 __( 'To use reCaptcha you must get the keys from', 'google-captcha' ),
616 __( 'here', 'google-captcha' ),
617 __( 'and enter them on the', 'google-captcha' ),
618 admin_url( '/admin.php?page=google-captcha.php' ),
619 __( 'plugin setting page', 'google-captcha' )
620 );
621 }
622 $content .= '</div>';
623 $gglcptch_count++;
624 return $content;
625 }
626
627 $api_url = gglcptch_get_api_url();
628
629 /* generating random id value in case of getting content with pagination plugin for not getting duplicate id values */
630 $id = mt_rand();
631 if ( isset( $gglcptch_options['recaptcha_version'] ) && in_array( $gglcptch_options['recaptcha_version'], array( 'v2', 'invisible' ) ) ) {
632 $content .= '<div id="gglcptch_recaptcha_' . $id . '" class="gglcptch_recaptcha"></div>
633 <noscript>
634 <div style="width: 302px;">
635 <div style="width: 302px; height: 422px; position: relative;">
636 <div style="width: 302px; height: 422px; position: absolute;">
637 <iframe src="https://www.google.com/recaptcha/api/fallback?k=' . $gglcptch_options['public_key'] . '" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe>
638 </div>
639 </div>
640 <div style="border-style: none; bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px; height: 60px; width: 300px;">
641 <textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px !important; height: 40px !important; border: 1px solid #c1c1c1 !important; margin: 10px 25px !important; padding: 0px !important; resize: none !important;"></textarea>
642 </div>
643 </div>
644 </noscript>';
645 $deps = ( ! empty( $gglcptch_options['disable_submit'] ) ) ? array( 'gglcptch_pre_api' ) : array( 'jquery' );
646 } elseif ( isset( $gglcptch_options['recaptcha_version'] ) && 'v3' == $gglcptch_options['recaptcha_version'] ) {
647 $content .= '<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" />';
648 }
649 $content .= '</div>';
650 $gglcptch_count++;
651
652 /* register reCAPTCHA script */
653 if ( ! wp_script_is( 'gglcptch_api', 'registered' ) ) {
654
655 if ( isset( $gglcptch_options['recaptcha_version'] ) && 'v3' == $gglcptch_options['recaptcha_version'] ) {
656 wp_register_script( 'gglcptch_api', $api_url, false, null, false );
657 } else {
658 wp_register_script( 'gglcptch_api', $api_url, $deps, $gglcptch_plugin_info['Version'], true );
659 }
660 add_action( 'wp_footer', 'gglcptch_add_scripts' );
661 if (
662 $gglcptch_options['login_form'] ||
663 $gglcptch_options['reset_pwd_form'] ||
664 $gglcptch_options['registration_form']
665 ) {
666 add_action( 'login_footer', 'gglcptch_add_scripts' );
667 }
668 }
669 if (
670 ( ! isset( $_SERVER['REQUEST_URI'] ) ) ||
671 ( ! strstr( $_SERVER['REQUEST_URI'], '/wp-login.php' ) ) ||
672 ( '/wp-login.php?action=register' == $_SERVER['REQUEST_URI'] && $gglcptch_options['registration_form'] ) ||
673 ( '/wp-login.php?action=lostpassword' == $_SERVER['REQUEST_URI'] && $gglcptch_options['reset_pwd_form'] ) ||
674 ( '/wp-login.php' == $_SERVER['REQUEST_URI'] && $gglcptch_options['login_form'] ) ||
675 ( strstr( $_SERVER['REQUEST_URI'], '/wp-login.php' ) && strstr( $_SERVER['REQUEST_URI'], 'loggedout' ) && $gglcptch_options['login_form'] )
676 ) {
677 gglcptch_add_styles();
678 }
679 } elseif ( ! empty( $gglcptch_options['allowlist_message'] ) ) {
680 $content .= '<label class="gglcptch_allowlist_message" style="display: block;">' . $gglcptch_options['allowlist_message'] . '</label>';
681 }
682
683 return $content;
684 }
685 }
686
687 /* Return google captcha content for custom form */
688 if ( ! function_exists( 'gglcptch_display_custom' ) ) {
689 function gglcptch_display_custom( $content = '', $form_slug = '' ) {
690 if ( gglcptch_is_recaptcha_required( $form_slug ) ) {
691 $content = gglcptch_display( $content );
692 }
693
694 return $content;
695 }
696 }
697
698 /* Get the reCAPTCHA api js url that corresponds to the reCAPTCHA version. */
699 if ( ! function_exists( 'gglcptch_get_api_url' ) ) {
700 function gglcptch_get_api_url() {
701 global $gglcptch_options;
702 $use_globally = $gglcptch_options['use_globally'] ? 'recaptcha.net' : 'google.com';
703
704 switch ( true ) {
705 case (
706 isset( $gglcptch_options['recaptcha_version'] ) &&
707 in_array( $gglcptch_options['recaptcha_version'], array( 'v2', 'invisible' ) )
708 ) :
709 $callback = ( ! empty( $gglcptch_options['disable_submit'] ) ) ? 'onload=gglcptch_onload_callback&' : '';
710 $api_url = sprintf( 'https://www.' . $use_globally . '/recaptcha/api.js?%srender=explicit', $callback );
711 break;
712 case (
713 isset( $gglcptch_options['recaptcha_version'] ) &&
714 'v3' == $gglcptch_options['recaptcha_version']
715 ) :
716 $api_url = sprintf( 'https://www.' . $use_globally . '/recaptcha/api.js?render=%s', $gglcptch_options['public_key'] );
717 break;
718 default :
719 $api_url = 'https://www.google.com/recaptcha/api/js/recaptcha_ajax.js';
720 }
721 return $api_url;
722 }
723 }
724
725 if ( ! function_exists( 'gglcptch_get_response' ) ) {
726 function gglcptch_get_response( $privatekey, $remote_ip ) {
727 $args = array(
728 'body' => array(
729 'secret' => $privatekey,
730 'response' => isset( $_POST["g-recaptcha-response"] ) ? stripslashes( sanitize_text_field( $_POST["g-recaptcha-response"] ) ) : '',
731 'remoteip' => $remote_ip,
732 ),
733 'sslverify' => false
734 );
735 $resp = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', $args );
736 return json_decode( wp_remote_retrieve_body( $resp ), true );
737 }
738 }
739
740 /* Check google captcha */
741 if ( ! function_exists( 'gglcptch_check' ) ) {
742 function gglcptch_check( $form = 'general', $debug = false ) {
743 global $gglcptch_options;
744
745 if ( gglcptch_allowlisted_ip() && 'gglcptch_test' != $form ) {
746 $result = array(
747 'response' => true,
748 'reason' => ''
749 );
750 return $result;
751 }
752
753 if ( empty( $gglcptch_options ) ) {
754 register_gglcptch_settings();
755 }
756
757 if ( ! $gglcptch_options['public_key'] || ! $gglcptch_options['private_key'] ) {
758 $errors = new WP_Error;
759 $errors->add( 'gglcptch_error', gglcptch_get_message() );
760 return array(
761 'response' => false,
762 'reason' => 'ERROR_NO_KEYS',
763 'errors' => $errors
764 );
765 }
766
767 $gglcptch_remote_addr = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP );
768
769 if (
770 isset( $gglcptch_options['recaptcha_version'] ) &&
771 in_array( $gglcptch_options['recaptcha_version'], array( 'v2', 'invisible', 'v3' ) )
772 ) {
773 if ( ! isset( $_POST["g-recaptcha-response"] ) ) {
774 $result = array(
775 'response' => false,
776 'reason' => 'RECAPTCHA_NO_RESPONSE'
777 );
778 } elseif ( empty( $_POST["g-recaptcha-response"] ) ) {
779 $result = array(
780 'response' => false,
781 'reason' => 'RECAPTCHA_EMPTY_RESPONSE'
782 );
783 } else {
784 $response = gglcptch_get_response( $gglcptch_options['private_key'], $gglcptch_remote_addr );
785 if ( empty( $response ) ) {
786 $result = array(
787 'response' => false,
788 'reason' => $debug ? __( 'Response is empty', 'google-captcha' ) : 'VERIFICATION_FAILED'
789 );
790 } elseif ( isset( $response['success'] ) && !! $response['success'] ) {
791 if ( 'v3' == $gglcptch_options['recaptcha_version'] && $response['score'] < $gglcptch_options['score_v3'] ) {
792 $result = array(
793 'response' => false,
794 'reason' => 'RECAPTCHA_SMALL_SCORE'
795 );
796 } else {
797 $result = array(
798 'response' => true,
799 'reason' => ''
800 );
801 }
802 } else {
803 if (
804 ! $debug &&
805 (
806 in_array( 'missing-input-secret', $response['error-codes'] ) ||
807 in_array( 'invalid-input-secret', $response['error-codes'] )
808 )
809 ) {
810 $result = array(
811 'response' => false,
812 'reason' => 'ERROR_WRONG_SECRET'
813 );
814 } else {
815 $result = array(
816 'response' => false,
817 'reason' => $debug ? $response['error-codes'] : 'VERIFICATION_FAILED'
818 );
819 }
820 }
821 }
822 }
823
824 if ( ! $result['response'] ) {
825 $result['errors'] = new WP_Error;
826 if ( ! $debug && ! in_array( $result['reason'], array( 'ERROR_WRONG_SECRET', 'ERROR_NO_KEYS' ) ) ) {
827 $result['errors']->add( 'gglcptch_error', gglcptch_get_message( $result['reason'] ) );
828 }
829 }
830 $result = apply_filters( 'gglcptch_limit_attempts_check', $result, $form );
831 return $result;
832 }
833 }
834
835 /**
836 * Check google captcha for custom form
837 * @since 1.32
838 * @param bool $allow (Optional) initial value wheter the previous verification is passed
839 * @param string $return_format (Optional) The type of variable to be returned when recaptcha is failed.
840 * @param string $form_slug (Optional) The slug of the form to check.
841 * Default is empty string. When specified, the reCAPTCHA check may be skipped if the form is disabled on the plugin settings page.
842 * @return mixed $allow True if ReCapthca is successfully completed, error message string, WP_Error object or false otherwise, depending on the $return_format value.
843 */
844 if ( ! function_exists( 'gglcptch_check_custom' ) ) {
845 function gglcptch_check_custom( $allow = true, $return_format = 'bool', $form_slug = '' ) {
846
847 if ( true !== $allow ) {
848 return $allow;
849 }
850
851 if ( gglcptch_is_recaptcha_required( $form_slug ) ) {
852 $gglcptch_check = gglcptch_check();
853
854 if ( ! $gglcptch_check['response'] && 'ERROR_NO_KEYS' == $gglcptch_check['reason'] ) {
855 return $allow;
856 }
857
858 $la_result = ( ! empty( $form_slug ) ) ? gglcptch_handle_by_limit_attempts( $gglcptch_check['response'], $form_slug ) : true;
859
860 if ( ! $gglcptch_check['response'] || true !== $la_result ) {
861 if ( ! in_array( $return_format, array( 'bool', 'string', 'wp_error' ) ) ) {
862 $return_format = 'bool';
863 }
864
865 switch ( $return_format ) {
866 case 'string':
867 $allow = '';
868 if ( true !== $la_result ) {
869 if ( is_wp_error( $la_result ) ) {
870 $allow .= $la_result->get_error_message();
871 } elseif ( is_string( $la_result ) ) {
872 $allow .= $la_result;
873 }
874 }
875 if ( ! $gglcptch_check['response'] ) {
876 $allow .= ( ( '' != $allow ) ? "&nbsp;" : '' ) . gglcptch_get_message();
877 }
878 break;
879 case 'wp_error':
880 $allow = new WP_Error();
881 if ( true !== $la_result ) {
882 if ( is_wp_error( $la_result ) ) {
883 $allow = $la_result;
884 } elseif ( is_string( $la_result ) ) {
885 $allow->add( 'gglcptch_la_error', $la_result );
886 }
887 }
888 if ( ! $gglcptch_check['response'] ) {
889 $error_message = sprintf( '<strong>%s</strong>:&nbsp;%s', __( 'Error', 'google-captcha' ), gglcptch_get_message() );
890 $allow->add( 'gglcptch_error', $error_message );
891 }
892 break;
893 case 'bool':
894 default:
895 $allow = false;
896 break;
897 }
898 }
899 }
900
901 return $allow;
902 }
903 }
904
905 /* Limit Attempts plugin check */
906 if ( ! function_exists( 'gglcptch_limit_attempts_check' ) ) {
907 function gglcptch_limit_attempts_check( $gglcptch_check, $form ){
908
909 $result = gglcptch_handle_by_limit_attempts( $gglcptch_check['response'], $form );
910
911 if ( true !== $result ) {
912 $gglcptch_check['response'] = false;
913 if ( 'login_form' != $form ) {
914 if ( is_wp_error( $result ) ) {
915 $gglcptch_check['errors']->add( 'lmttmpts_error', $result->get_error_message() );
916 } elseif ( is_string( $result ) ) {
917 $gglcptch_check['errors']->add( 'lmttmpts_error', $result );
918 }
919 }
920 return $gglcptch_check;
921 } else {
922 if ( 'contact_form' == $form ) {
923 $gglcptch_check['response'] = true;
924 }
925 return $gglcptch_check;
926 }
927 }
928 }
929
930 /**
931 *
932 * @since 1.32
933 */
934 if ( ! function_exists( 'gglcptch_handle_by_limit_attempts' ) ) {
935 function gglcptch_handle_by_limit_attempts( $check_result, $form_slug = 'login_form' ) {
936 global $gglcptch_forms;
937
938 if ( ! has_filter( 'lmtttmpts_check_ip' ) ) {
939 return $check_result;
940 }
941
942 if ( empty( $gglcptch_forms ) ) {
943 $gglcptch_forms = gglcptch_get_forms();
944 }
945
946 $la_form_slug = "{$form_slug}_captcha_check";
947
948 /* if reCAPTCHA answer is right */
949 if ( true == $check_result ) {
950 /* check if user IP is blocked in the Limit Attempts plugin lists */
951 $check_result = apply_filters( 'lmtttmpts_check_ip', $check_result );
952 do_action( 'lmtttmpts_form_success', $la_form_slug, gglcptch_get_ip(), array( 'form_name' => $gglcptch_forms[ $form_slug ]['form_name'] ) );
953 } else {
954 /* if reCAPTCHA answer is wrong */
955 $form_data = array( 'form_name' => $gglcptch_forms[ $form_slug ]['form_name'] );
956
957 if ( 'login_form_captcha_check' != $form_slug ) {
958 $la_error = apply_filters( 'lmtttmpts_form_fail', $la_form_slug, '', $form_data );
959 }
960
961 if ( ! empty( $la_error ) && $la_form_slug != $la_error ) {
962 if ( is_wp_error( $check_result ) ) {
963 $check_result->add( "gglcptch_error_lmttmpts", $la_error );
964 } elseif ( is_string( $check_result ) ) {
965 $check_result .= '<br />' . $la_error;
966 } else {
967 $check_result = $la_error;
968 }
969 }
970 }
971
972 return $check_result;
973 }
974 }
975
976 if ( ! function_exists( 'gglcptch_get_ip' ) ) {
977 function gglcptch_get_ip() {
978 $ip = '';
979 if ( isset( $_SERVER ) ) {
980 $server_vars = array( 'HTTP_X_REAL_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR' );
981 foreach ( $server_vars as $var ) {
982 if ( ! empty( $_SERVER[ $var ] ) ) {
983 if ( filter_var( $_SERVER[ $var ], FILTER_VALIDATE_IP ) ) {
984 $ip = $_SERVER[ $var ];
985 break;
986 } else { /* if proxy */
987 $ip_array = explode( ',', $_SERVER[ $var ] );
988 if ( is_array( $ip_array ) && ! empty( $ip_array ) && filter_var( $ip_array[0], FILTER_VALIDATE_IP ) ) {
989 $ip = $ip_array[0];
990 break;
991 }
992 }
993 }
994 }
995 }
996 return $ip;
997 }
998 }
999
1000 /**
1001 * Retrieve the message that corresponds to its message code
1002 * @since 1.29
1003 * @param string $message_code used to switch the corresponding message
1004 * @param boolean $echo 'false' is default. If 'false' - returns a message, if 'true' - first, echo a message and then return it.
1005 * @return string $message Returned message.
1006 */
1007 if ( ! function_exists( 'gglcptch_get_message' ) ) {
1008 function gglcptch_get_message( $message_code = 'incorrect', $echo = false ) {
1009
1010 $message = '';
1011
1012 $messages = array(
1013 /* custom error */
1014 'RECAPTCHA_EMPTY_RESPONSE' => __( 'User response is missing.', 'google-captcha' ),
1015 /* v2 error */
1016 'missing-input-secret' => __( 'Secret Key is missing.', 'google-captcha' ),
1017 'invalid-input-secret' => sprintf(
1018 '<strong>%s</strong> <a target="_blank" href="https://www.google.com/recaptcha/admin#list">%s</a> %s.',
1019 __( 'Secret Key is invalid.', 'google-captcha' ),
1020 __( 'Check your domain configurations', 'google-captcha' ),
1021 __( 'and enter it again', 'google-captcha' )
1022 ),
1023 'incorrect-captcha-sol' => __( 'User response is invalid', 'google-captcha' ),
1024 'incorrect' => __( 'You have entered an incorrect reCAPTCHA value.', 'google-captcha' ),
1025 'multiple_blocks' => __( 'More than one reCAPTCHA has been found in the current form. Please remove all unnecessary reCAPTCHA fields to make it work properly.', 'google-captcha' ),
1026 /* v3 error */
1027 'RECAPTCHA_SMALL_SCORE' => __( 'reCaptcha v3 test failed', 'google-captcha' )
1028 );
1029
1030 if ( isset( $messages[ $message_code ] ) ) {
1031 $message = $messages[ $message_code ];
1032 } else {
1033 $message = $messages['incorrect'];
1034 }
1035
1036 if ( $echo ) {
1037 echo $message;
1038 }
1039
1040 return $message;
1041 }
1042 }
1043
1044 if ( ! function_exists( 'gglcptch_is_woocommerce_page' ) ) {
1045 function gglcptch_is_woocommerce_page() {
1046 $traces = debug_backtrace();
1047
1048 foreach( $traces as $trace ) {
1049 if ( isset( $trace['file'] ) && false !== strpos( $trace['file'], 'woocommerce' ) ) {
1050 return true;
1051 }
1052 }
1053 return false;
1054 }
1055 }
1056
1057 if ( ! function_exists( 'gglcptch_test_keys' ) ) {
1058 function gglcptch_test_keys() {
1059 global $gglcptch_options;
1060 if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $_REQUEST['_wpnonce'] , $_REQUEST['action'] ) ) {
1061 header( 'Content-Type: text/html' );
1062 register_gglcptch_settings(); ?>
1063 <p>
1064 <?php if ( 'invisible' == $gglcptch_options['recaptcha_version'] || 'v3' == $gglcptch_options['recaptcha_version'] ) {
1065 _e( 'Please submit "Test verification"', 'google-captcha' );
1066 } else {
1067 _e( 'Please complete the captcha and submit "Test verification"', 'google-captcha' );
1068 } ?>
1069 </p>
1070 <?php echo gglcptch_display(); ?>
1071 <p>
1072 <input type="hidden" name="gglcptch_test_keys_verification-nonce" value="<?php echo wp_create_nonce( 'gglcptch_test_keys_verification' ); ?>" />
1073 <button id="gglcptch_test_keys_verification" name="action" class="button-primary cptch_loading" value="gglcptch_test_keys_verification" disabled="disabled"><?php _e( 'Test verification', 'google-captcha' ); ?></button>
1074 </p>
1075 <?php }
1076 die();
1077 }
1078 }
1079
1080 if ( ! function_exists( 'gglcptch_test_keys_verification' ) ) {
1081 function gglcptch_test_keys_verification() {
1082 if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $_REQUEST['_wpnonce'] , $_REQUEST['action'] ) ) {
1083 $result = gglcptch_check( 'gglcptch_test', true );
1084
1085 if ( ! $result['response'] ) {
1086 if ( isset( $result['reason'] ) ) {
1087 foreach ( ( array )$result['reason'] as $error ) { ?>
1088 <div class="error gglcptch-test-results"><p>
1089 <?php gglcptch_get_message( $error, true ); ?>
1090 </p></div>
1091 <?php }
1092 }
1093 } else { ?>
1094 <div class="updated gglcptch-test-results"><p><?php _e( 'The verification is successfully completed.','google-captcha' ); ?></p></div>
1095 <?php $gglcptch_options = get_option( 'gglcptch_options' );
1096 $gglcptch_options['keys_verified'] = true;
1097 unset( $gglcptch_options['need_keys_verified_check'] );
1098 update_option( 'gglcptch_options', $gglcptch_options );
1099 }
1100 }
1101 die();
1102 }
1103 }
1104
1105 if ( ! function_exists( 'gglcptch_action_links' ) ) {
1106 function gglcptch_action_links( $links, $file ) {
1107 if ( ! is_network_admin() ) {
1108 static $this_plugin;
1109 if ( ! $this_plugin ) {
1110 $this_plugin = plugin_basename( __FILE__ );
1111 }
1112
1113 if ( $file == $this_plugin ) {
1114 $settings_link = '<a href="admin.php?page=google-captcha.php">' . __( 'Settings', 'google-captcha' ) . '</a>';
1115 array_unshift( $links, $settings_link );
1116 }
1117 }
1118 return $links;
1119 }
1120 }
1121
1122 if ( ! function_exists( 'gglcptch_links' ) ) {
1123 function gglcptch_links( $links, $file ) {
1124 $base = plugin_basename( __FILE__ );
1125 if ( $file == $base ) {
1126 if ( ! is_network_admin() ) {
1127 $links[] = '<a href="admin.php?page=google-captcha.php">' . __( 'Settings', 'google-captcha' ) . '</a>';
1128 }
1129 $links[] = '<a href="https://support.bestwebsoft.com/hc/en-us/sections/200538719" target="_blank">' . __( 'FAQ', 'google-captcha' ) . '</a>';
1130 $links[] = '<a href="https://support.bestwebsoft.com">' . __( 'Support', 'google-captcha' ) . '</a>';
1131 }
1132 return $links;
1133 }
1134 }
1135
1136 if ( ! function_exists ( 'gglcptch_plugin_banner' ) ) {
1137 function gglcptch_plugin_banner() {
1138 global $hook_suffix, $gglcptch_plugin_info, $gglcptch_options;
1139 if ( 'plugins.php' == $hook_suffix ) {
1140 if ( empty( $gglcptch_options ) ) {
1141 register_gglcptch_settings();
1142 }
1143 bws_plugin_banner_to_settings( $gglcptch_plugin_info, 'gglcptch_options', 'google-captcha', 'admin.php?page=google-captcha.php' );
1144 }
1145
1146 if ( isset( $_GET['page'] ) && 'google-captcha.php' == $_GET['page'] ) {
1147 bws_plugin_suggest_feature_banner( $gglcptch_plugin_info, 'gglcptch_options', 'google-captcha' );
1148 }
1149 }
1150 }
1151
1152 /* add help tab */
1153 if ( ! function_exists( 'gglcptch_add_tabs' ) ) {
1154 function gglcptch_add_tabs() {
1155 $screen = get_current_screen();
1156 $args = array(
1157 'id' => 'gglcptch',
1158 'section' => '200538719'
1159 );
1160 bws_help_tab( $screen, $args );
1161 }
1162 }
1163
1164 if ( ! function_exists( 'gglcptch_delete_options' ) ) {
1165 function gglcptch_delete_options() {
1166 if ( ! function_exists( 'get_plugins' ) ) {
1167 require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
1168 }
1169 $all_plugins = get_plugins();
1170
1171 if ( ! array_key_exists( 'google-captcha-pro/google-captcha-pro.php', $all_plugins ) ) {
1172 global $wpdb;
1173 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
1174 $old_blog = $wpdb->blogid;
1175 /* Get all blog ids */
1176 $blogids = $wpdb->get_col( "SELECT `blog_id` FROM $wpdb->blogs" );
1177 foreach ( $blogids as $blog_id ) {
1178 switch_to_blog( $blog_id );
1179 $wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}gglcptch_whitelist`;" );
1180 delete_option( 'gglcptch_options' );
1181 }
1182 switch_to_blog( $old_blog );
1183 delete_site_option( 'gglcptch_options' );
1184 } else {
1185 $wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}gglcptch_whitelist`;" );
1186 delete_option( 'gglcptch_options' );
1187 }
1188 }
1189
1190 require_once( dirname( __FILE__ ) . '/bws_menu/bws_include.php' );
1191 bws_include_init( plugin_basename( __FILE__ ) );
1192 bws_delete_plugin( plugin_basename( __FILE__ ) );
1193 }
1194 }
1195
1196 register_activation_hook( __FILE__, 'gglcptch_plugin_activate' );
1197
1198 add_action( 'admin_menu', 'gglcptch_admin_menu' );
1199
1200 add_action( 'init', 'gglcptch_init' );
1201 add_action( 'admin_init', 'gglcptch_admin_init' );
1202
1203 add_action( 'plugins_loaded', 'gglcptch_plugins_loaded' );
1204
1205 add_action( 'admin_enqueue_scripts', 'gglcptch_add_admin_script_styles' );
1206 add_filter( 'script_loader_tag', 'gglcptch_add_async_attribute', 10, 2 );
1207 add_action( 'admin_footer', 'gglcptch_admin_footer' );
1208 add_filter( 'pgntn_callback', 'gglcptch_pagination_callback' );
1209
1210 add_filter( 'lmtttmpts_plugin_forms', 'gglcptch_add_lmtttmpts_forms', 10, 1 );
1211
1212 add_shortcode( 'bws_google_captcha', 'gglcptch_display' );
1213 add_filter( 'widget_text', 'do_shortcode' );
1214
1215 add_filter( 'gglcptch_display_recaptcha', 'gglcptch_display_custom', 10, 2 );
1216 add_filter( 'gglcptch_verify_recaptcha', 'gglcptch_check_custom', 10, 3 );
1217
1218 add_filter( 'gglcptch_limit_attempts_check', 'gglcptch_limit_attempts_check', 10, 2 );
1219
1220 add_filter( 'plugin_action_links', 'gglcptch_action_links', 10, 2 );
1221 add_filter( 'plugin_row_meta', 'gglcptch_links', 10, 2 );
1222
1223 add_action( 'admin_notices', 'gglcptch_plugin_banner' );
1224
1225 add_action( 'wp_ajax_gglcptch-test-keys', 'gglcptch_test_keys' );
1226 add_action( 'wp_ajax_gglcptch_test_keys_verification', 'gglcptch_test_keys_verification' );
1227