PluginProbe ʕ •ᴥ•ʔ
reCaptcha by BestWebSoft / 1.64
reCaptcha by BestWebSoft v1.64
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
1222 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.64
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 ( isset( $response['success'] ) && !! $response['success'] ) {
786 if ( 'v3' == $gglcptch_options['recaptcha_version'] && $response['score'] < $gglcptch_options['score_v3'] ) {
787 $result = array(
788 'response' => false,
789 'reason' => 'RECAPTCHA_SMALL_SCORE'
790 );
791 } else {
792 $result = array(
793 'response' => true,
794 'reason' => ''
795 );
796 }
797 } else {
798 if (
799 ! $debug &&
800 (
801 in_array( 'missing-input-secret', $response['error-codes'] ) ||
802 in_array( 'invalid-input-secret', $response['error-codes'] )
803 )
804 ) {
805 $result = array(
806 'response' => false,
807 'reason' => 'ERROR_WRONG_SECRET'
808 );
809 } else {
810 $result = array(
811 'response' => false,
812 'reason' => $debug ? $response['error-codes'] : 'VERIFICATION_FAILED'
813 );
814 }
815 }
816 }
817 }
818
819 if ( ! $result['response'] ) {
820 $result['errors'] = new WP_Error;
821 if ( ! $debug && ! in_array( $result['reason'], array( 'ERROR_WRONG_SECRET', 'ERROR_NO_KEYS' ) ) ) {
822 $result['errors']->add( 'gglcptch_error', gglcptch_get_message( $result['reason'] ) );
823 }
824 }
825 $result = apply_filters( 'gglcptch_limit_attempts_check', $result, $form );
826 return $result;
827 }
828 }
829
830 /**
831 * Check google captcha for custom form
832 * @since 1.32
833 * @param bool $allow (Optional) initial value wheter the previous verification is passed
834 * @param string $return_format (Optional) The type of variable to be returned when recaptcha is failed.
835 * @param string $form_slug (Optional) The slug of the form to check.
836 * Default is empty string. When specified, the reCAPTCHA check may be skipped if the form is disabled on the plugin settings page.
837 * @return mixed $allow True if ReCapthca is successfully completed, error message string, WP_Error object or false otherwise, depending on the $return_format value.
838 */
839 if ( ! function_exists( 'gglcptch_check_custom' ) ) {
840 function gglcptch_check_custom( $allow = true, $return_format = 'bool', $form_slug = '' ) {
841
842 if ( true !== $allow ) {
843 return $allow;
844 }
845
846 if ( gglcptch_is_recaptcha_required( $form_slug ) ) {
847 $gglcptch_check = gglcptch_check();
848
849 if ( ! $gglcptch_check['response'] && 'ERROR_NO_KEYS' == $gglcptch_check['reason'] ) {
850 return $allow;
851 }
852
853 $la_result = ( ! empty( $form_slug ) ) ? gglcptch_handle_by_limit_attempts( $gglcptch_check['response'], $form_slug ) : true;
854
855 if ( ! $gglcptch_check['response'] || true !== $la_result ) {
856 if ( ! in_array( $return_format, array( 'bool', 'string', 'wp_error' ) ) ) {
857 $return_format = 'bool';
858 }
859
860 switch ( $return_format ) {
861 case 'string':
862 $allow = '';
863 if ( true !== $la_result ) {
864 if ( is_wp_error( $la_result ) ) {
865 $allow .= $la_result->get_error_message();
866 } elseif ( is_string( $la_result ) ) {
867 $allow .= $la_result;
868 }
869 }
870 if ( ! $gglcptch_check['response'] ) {
871 $allow .= ( ( '' != $allow ) ? "&nbsp;" : '' ) . gglcptch_get_message();
872 }
873 break;
874 case 'wp_error':
875 $allow = new WP_Error();
876 if ( true !== $la_result ) {
877 if ( is_wp_error( $la_result ) ) {
878 $allow = $la_result;
879 } elseif ( is_string( $la_result ) ) {
880 $allow->add( 'gglcptch_la_error', $la_result );
881 }
882 }
883 if ( ! $gglcptch_check['response'] ) {
884 $error_message = sprintf( '<strong>%s</strong>:&nbsp;%s', __( 'Error', 'google-captcha' ), gglcptch_get_message() );
885 $allow->add( 'gglcptch_error', $error_message );
886 }
887 break;
888 case 'bool':
889 default:
890 $allow = false;
891 break;
892 }
893 }
894 }
895
896 return $allow;
897 }
898 }
899
900 /* Limit Attempts plugin check */
901 if ( ! function_exists( 'gglcptch_limit_attempts_check' ) ) {
902 function gglcptch_limit_attempts_check( $gglcptch_check, $form ){
903
904 $result = gglcptch_handle_by_limit_attempts( $gglcptch_check['response'], $form );
905
906 if ( true !== $result ) {
907 $gglcptch_check['response'] = false;
908 if ( 'login_form' != $form ) {
909 if ( is_wp_error( $result ) ) {
910 $gglcptch_check['errors']->add( 'lmttmpts_error', $result->get_error_message() );
911 } elseif ( is_string( $result ) ) {
912 $gglcptch_check['errors']->add( 'lmttmpts_error', $result );
913 }
914 }
915 return $gglcptch_check;
916 } else {
917 if ( 'contact_form' == $form ) {
918 $gglcptch_check['response'] = true;
919 }
920 return $gglcptch_check;
921 }
922 }
923 }
924
925 /**
926 *
927 * @since 1.32
928 */
929 if ( ! function_exists( 'gglcptch_handle_by_limit_attempts' ) ) {
930 function gglcptch_handle_by_limit_attempts( $check_result, $form_slug = 'login_form' ) {
931 global $gglcptch_forms;
932
933 if ( ! has_filter( 'lmtttmpts_check_ip' ) ) {
934 return $check_result;
935 }
936
937 if ( empty( $gglcptch_forms ) ) {
938 $gglcptch_forms = gglcptch_get_forms();
939 }
940
941 $la_form_slug = "{$form_slug}_captcha_check";
942
943 /* if reCAPTCHA answer is right */
944 if ( true == $check_result ) {
945 /* check if user IP is blocked in the Limit Attempts plugin lists */
946 $check_result = apply_filters( 'lmtttmpts_check_ip', $check_result );
947 do_action( 'lmtttmpts_form_success', $la_form_slug, gglcptch_get_ip(), array( 'form_name' => $gglcptch_forms[ $form_slug ]['form_name'] ) );
948 } else {
949 /* if reCAPTCHA answer is wrong */
950 $form_data = array( 'form_name' => $gglcptch_forms[ $form_slug ]['form_name'] );
951
952 if ( 'login_form_captcha_check' != $form_slug ) {
953 $la_error = apply_filters( 'lmtttmpts_form_fail', $la_form_slug, '', $form_data );
954 }
955
956 if ( ! empty( $la_error ) && $la_form_slug != $la_error ) {
957 if ( is_wp_error( $check_result ) ) {
958 $check_result->add( "gglcptch_error_lmttmpts", $la_error );
959 } elseif ( is_string( $check_result ) ) {
960 $check_result .= '<br />' . $la_error;
961 } else {
962 $check_result = $la_error;
963 }
964 }
965 }
966
967 return $check_result;
968 }
969 }
970
971 if ( ! function_exists( 'gglcptch_get_ip' ) ) {
972 function gglcptch_get_ip() {
973 $ip = '';
974 if ( isset( $_SERVER ) ) {
975 $server_vars = array( 'HTTP_X_REAL_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR' );
976 foreach ( $server_vars as $var ) {
977 if ( ! empty( $_SERVER[ $var ] ) ) {
978 if ( filter_var( $_SERVER[ $var ], FILTER_VALIDATE_IP ) ) {
979 $ip = $_SERVER[ $var ];
980 break;
981 } else { /* if proxy */
982 $ip_array = explode( ',', $_SERVER[ $var ] );
983 if ( is_array( $ip_array ) && ! empty( $ip_array ) && filter_var( $ip_array[0], FILTER_VALIDATE_IP ) ) {
984 $ip = $ip_array[0];
985 break;
986 }
987 }
988 }
989 }
990 }
991 return $ip;
992 }
993 }
994
995 /**
996 * Retrieve the message that corresponds to its message code
997 * @since 1.29
998 * @param string $message_code used to switch the corresponding message
999 * @param boolean $echo 'false' is default. If 'false' - returns a message, if 'true' - first, echo a message and then return it.
1000 * @return string $message Returned message.
1001 */
1002 if ( ! function_exists( 'gglcptch_get_message' ) ) {
1003 function gglcptch_get_message( $message_code = 'incorrect', $echo = false ) {
1004
1005 $message = '';
1006
1007 $messages = array(
1008 /* custom error */
1009 'RECAPTCHA_EMPTY_RESPONSE' => __( 'User response is missing.', 'google-captcha' ),
1010 /* v2 error */
1011 'missing-input-secret' => __( 'Secret Key is missing.', 'google-captcha' ),
1012 'invalid-input-secret' => sprintf(
1013 '<strong>%s</strong> <a target="_blank" href="https://www.google.com/recaptcha/admin#list">%s</a> %s.',
1014 __( 'Secret Key is invalid.', 'google-captcha' ),
1015 __( 'Check your domain configurations', 'google-captcha' ),
1016 __( 'and enter it again', 'google-captcha' )
1017 ),
1018 'incorrect-captcha-sol' => __( 'User response is invalid', 'google-captcha' ),
1019 'incorrect' => __( 'You have entered an incorrect reCAPTCHA value.', 'google-captcha' ),
1020 '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' ),
1021 /* v3 error */
1022 'RECAPTCHA_SMALL_SCORE' => __( 'reCaptcha v3 test failed', 'google-captcha' )
1023 );
1024
1025 if ( isset( $messages[ $message_code ] ) ) {
1026 $message = $messages[ $message_code ];
1027 } else {
1028 $message = $messages['incorrect'];
1029 }
1030
1031 if ( $echo ) {
1032 echo $message;
1033 }
1034
1035 return $message;
1036 }
1037 }
1038
1039 if ( ! function_exists( 'gglcptch_is_woocommerce_page' ) ) {
1040 function gglcptch_is_woocommerce_page() {
1041 $traces = debug_backtrace();
1042
1043 foreach( $traces as $trace ) {
1044 if ( isset( $trace['file'] ) && false !== strpos( $trace['file'], 'woocommerce' ) ) {
1045 return true;
1046 }
1047 }
1048 return false;
1049 }
1050 }
1051
1052 if ( ! function_exists( 'gglcptch_test_keys' ) ) {
1053 function gglcptch_test_keys() {
1054 global $gglcptch_options;
1055 if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $_REQUEST['_wpnonce'] , $_REQUEST['action'] ) ) {
1056 header( 'Content-Type: text/html' );
1057 register_gglcptch_settings(); ?>
1058 <p>
1059 <?php if ( 'invisible' == $gglcptch_options['recaptcha_version'] || 'v3' == $gglcptch_options['recaptcha_version'] ) {
1060 _e( 'Please submit "Test verification"', 'google-captcha' );
1061 } else {
1062 _e( 'Please complete the captcha and submit "Test verification"', 'google-captcha' );
1063 } ?>
1064 </p>
1065 <?php echo gglcptch_display(); ?>
1066 <p>
1067 <input type="hidden" name="gglcptch_test_keys_verification-nonce" value="<?php echo wp_create_nonce( 'gglcptch_test_keys_verification' ); ?>" />
1068 <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>
1069 </p>
1070 <?php }
1071 die();
1072 }
1073 }
1074
1075 if ( ! function_exists( 'gglcptch_test_keys_verification' ) ) {
1076 function gglcptch_test_keys_verification() {
1077 if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $_REQUEST['_wpnonce'] , $_REQUEST['action'] ) ) {
1078 $result = gglcptch_check( 'gglcptch_test', true );
1079
1080 if ( ! $result['response'] ) {
1081 if ( isset( $result['reason'] ) ) {
1082 foreach ( ( array )$result['reason'] as $error ) { ?>
1083 <div class="error gglcptch-test-results"><p>
1084 <?php gglcptch_get_message( $error, true ); ?>
1085 </p></div>
1086 <?php }
1087 }
1088 } else { ?>
1089 <div class="updated gglcptch-test-results"><p><?php _e( 'The verification is successfully completed.','google-captcha' ); ?></p></div>
1090 <?php $gglcptch_options = get_option( 'gglcptch_options' );
1091 $gglcptch_options['keys_verified'] = true;
1092 unset( $gglcptch_options['need_keys_verified_check'] );
1093 update_option( 'gglcptch_options', $gglcptch_options );
1094 }
1095 }
1096 die();
1097 }
1098 }
1099
1100 if ( ! function_exists( 'gglcptch_action_links' ) ) {
1101 function gglcptch_action_links( $links, $file ) {
1102 if ( ! is_network_admin() ) {
1103 static $this_plugin;
1104 if ( ! $this_plugin ) {
1105 $this_plugin = plugin_basename( __FILE__ );
1106 }
1107
1108 if ( $file == $this_plugin ) {
1109 $settings_link = '<a href="admin.php?page=google-captcha.php">' . __( 'Settings', 'google-captcha' ) . '</a>';
1110 array_unshift( $links, $settings_link );
1111 }
1112 }
1113 return $links;
1114 }
1115 }
1116
1117 if ( ! function_exists( 'gglcptch_links' ) ) {
1118 function gglcptch_links( $links, $file ) {
1119 $base = plugin_basename( __FILE__ );
1120 if ( $file == $base ) {
1121 if ( ! is_network_admin() ) {
1122 $links[] = '<a href="admin.php?page=google-captcha.php">' . __( 'Settings', 'google-captcha' ) . '</a>';
1123 }
1124 $links[] = '<a href="https://support.bestwebsoft.com/hc/en-us/sections/200538719" target="_blank">' . __( 'FAQ', 'google-captcha' ) . '</a>';
1125 $links[] = '<a href="https://support.bestwebsoft.com">' . __( 'Support', 'google-captcha' ) . '</a>';
1126 }
1127 return $links;
1128 }
1129 }
1130
1131 if ( ! function_exists ( 'gglcptch_plugin_banner' ) ) {
1132 function gglcptch_plugin_banner() {
1133 global $hook_suffix, $gglcptch_plugin_info, $gglcptch_options;
1134 if ( 'plugins.php' == $hook_suffix ) {
1135 if ( empty( $gglcptch_options ) ) {
1136 register_gglcptch_settings();
1137 }
1138 bws_plugin_banner_to_settings( $gglcptch_plugin_info, 'gglcptch_options', 'google-captcha', 'admin.php?page=google-captcha.php' );
1139 }
1140
1141 if ( isset( $_GET['page'] ) && 'google-captcha.php' == $_GET['page'] ) {
1142 bws_plugin_suggest_feature_banner( $gglcptch_plugin_info, 'gglcptch_options', 'google-captcha' );
1143 }
1144 }
1145 }
1146
1147 /* add help tab */
1148 if ( ! function_exists( 'gglcptch_add_tabs' ) ) {
1149 function gglcptch_add_tabs() {
1150 $screen = get_current_screen();
1151 $args = array(
1152 'id' => 'gglcptch',
1153 'section' => '200538719'
1154 );
1155 bws_help_tab( $screen, $args );
1156 }
1157 }
1158
1159 if ( ! function_exists( 'gglcptch_delete_options' ) ) {
1160 function gglcptch_delete_options() {
1161 if ( ! function_exists( 'get_plugins' ) ) {
1162 require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
1163 }
1164 $all_plugins = get_plugins();
1165
1166 if ( ! array_key_exists( 'google-captcha-pro/google-captcha-pro.php', $all_plugins ) ) {
1167 global $wpdb;
1168 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
1169 $old_blog = $wpdb->blogid;
1170 /* Get all blog ids */
1171 $blogids = $wpdb->get_col( "SELECT `blog_id` FROM $wpdb->blogs" );
1172 foreach ( $blogids as $blog_id ) {
1173 switch_to_blog( $blog_id );
1174 $wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}gglcptch_whitelist`;" );
1175 delete_option( 'gglcptch_options' );
1176 }
1177 switch_to_blog( $old_blog );
1178 delete_site_option( 'gglcptch_options' );
1179 } else {
1180 $wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}gglcptch_whitelist`;" );
1181 delete_option( 'gglcptch_options' );
1182 }
1183 }
1184
1185 require_once( dirname( __FILE__ ) . '/bws_menu/bws_include.php' );
1186 bws_include_init( plugin_basename( __FILE__ ) );
1187 bws_delete_plugin( plugin_basename( __FILE__ ) );
1188 }
1189 }
1190
1191 register_activation_hook( __FILE__, 'gglcptch_plugin_activate' );
1192
1193 add_action( 'admin_menu', 'gglcptch_admin_menu' );
1194
1195 add_action( 'init', 'gglcptch_init' );
1196 add_action( 'admin_init', 'gglcptch_admin_init' );
1197
1198 add_action( 'plugins_loaded', 'gglcptch_plugins_loaded' );
1199
1200 add_action( 'admin_enqueue_scripts', 'gglcptch_add_admin_script_styles' );
1201 add_filter( 'script_loader_tag', 'gglcptch_add_async_attribute', 10, 2 );
1202 add_action( 'admin_footer', 'gglcptch_admin_footer' );
1203 add_filter( 'pgntn_callback', 'gglcptch_pagination_callback' );
1204
1205 add_filter( 'lmtttmpts_plugin_forms', 'gglcptch_add_lmtttmpts_forms', 10, 1 );
1206
1207 add_shortcode( 'bws_google_captcha', 'gglcptch_display' );
1208 add_filter( 'widget_text', 'do_shortcode' );
1209
1210 add_filter( 'gglcptch_display_recaptcha', 'gglcptch_display_custom', 10, 2 );
1211 add_filter( 'gglcptch_verify_recaptcha', 'gglcptch_check_custom', 10, 3 );
1212
1213 add_filter( 'gglcptch_limit_attempts_check', 'gglcptch_limit_attempts_check', 10, 2 );
1214
1215 add_filter( 'plugin_action_links', 'gglcptch_action_links', 10, 2 );
1216 add_filter( 'plugin_row_meta', 'gglcptch_links', 10, 2 );
1217
1218 add_action( 'admin_notices', 'gglcptch_plugin_banner' );
1219
1220 add_action( 'wp_ajax_gglcptch-test-keys', 'gglcptch_test_keys' );
1221 add_action( 'wp_ajax_gglcptch_test_keys_verification', 'gglcptch_test_keys_verification' );
1222