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