1185 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1185 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * WP Captcha
 | 
						|
 * https://getwpcaptcha.com/
 | 
						|
 * (c) WebFactory Ltd, 2022 - 2023, www.webfactoryltd.com
 | 
						|
 */
 | 
						|
 | 
						|
class WPCaptcha_Functions extends WPCaptcha
 | 
						|
{
 | 
						|
    static $wp_login_php;
 | 
						|
 | 
						|
    // auto download / install / activate WP 301 Redirects plugin
 | 
						|
    static function install_wp301()
 | 
						|
    {
 | 
						|
        check_ajax_referer('install_wp301');
 | 
						|
 | 
						|
        if (false === current_user_can('administrator')) {
 | 
						|
            wp_die('Sorry, you have to be an admin to run this action.');
 | 
						|
        }
 | 
						|
 | 
						|
        $plugin_slug = 'eps-301-redirects/eps-301-redirects.php';
 | 
						|
        $plugin_zip = 'https://downloads.wordpress.org/plugin/eps-301-redirects.latest-stable.zip';
 | 
						|
 | 
						|
        @include_once ABSPATH . 'wp-admin/includes/plugin.php';
 | 
						|
        @include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
 | 
						|
        @include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
 | 
						|
        @include_once ABSPATH . 'wp-admin/includes/file.php';
 | 
						|
        @include_once ABSPATH . 'wp-admin/includes/misc.php';
 | 
						|
        echo '<style>
 | 
						|
		body{
 | 
						|
			font-family: sans-serif;
 | 
						|
			font-size: 14px;
 | 
						|
			line-height: 1.5;
 | 
						|
			color: #444;
 | 
						|
		}
 | 
						|
		</style>';
 | 
						|
 | 
						|
        echo '<div style="margin: 20px; color:#444;">';
 | 
						|
        echo 'If things are not done in a minute <a target="_parent" href="' . admin_url('plugin-install.php?s=301%20redirects%20webfactory&tab=search&type=term') . '">install the plugin manually via Plugins page</a><br><br>';
 | 
						|
        echo 'Starting ...<br><br>';
 | 
						|
 | 
						|
        wp_cache_flush();
 | 
						|
        $upgrader = new Plugin_Upgrader();
 | 
						|
        echo 'Check if WP 301 Redirects is already installed ... <br />';
 | 
						|
        if (self::is_plugin_installed($plugin_slug)) {
 | 
						|
            echo 'WP 301 Redirects is already installed! <br /><br />Making sure it\'s the latest version.<br />';
 | 
						|
            $upgrader->upgrade($plugin_slug);
 | 
						|
            $installed = true;
 | 
						|
        } else {
 | 
						|
            echo 'Installing WP 301 Redirects.<br />';
 | 
						|
            $installed = $upgrader->install($plugin_zip);
 | 
						|
        }
 | 
						|
        wp_cache_flush();
 | 
						|
 | 
						|
        if (!is_wp_error($installed) && $installed) {
 | 
						|
            echo 'Activating WP 301 Redirects.<br />';
 | 
						|
            $activate = activate_plugin($plugin_slug);
 | 
						|
 | 
						|
            if (is_null($activate)) {
 | 
						|
                echo 'WP 301 Redirects Activated.<br />';
 | 
						|
 | 
						|
                echo '<script>setTimeout(function() { top.location = "' . admin_url('options-general.php?page=eps_redirects') . '"; }, 1000);</script>';
 | 
						|
                echo '<br>If you are not redirected in a few seconds - <a href="' . admin_url('options-general.php?page=eps_redirects') . '" target="_parent">click here</a>.';
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            echo 'Could not install WP 301 Redirects. You\'ll have to <a target="_parent" href="' . admin_url('plugin-install.php?s=301%20redirects%20webfactory&tab=search&type=term') . '">download and install manually</a>.';
 | 
						|
        }
 | 
						|
 | 
						|
        echo '</div>';
 | 
						|
    } // install_wp301
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check if given plugin is installed
 | 
						|
     *
 | 
						|
     * @param [string] $slug Plugin slug
 | 
						|
     * @return boolean
 | 
						|
     */
 | 
						|
    static function is_plugin_installed($slug)
 | 
						|
    {
 | 
						|
        if (!function_exists('get_plugins')) {
 | 
						|
            require_once ABSPATH . 'wp-admin/includes/plugin.php';
 | 
						|
        }
 | 
						|
        $all_plugins = get_plugins();
 | 
						|
 | 
						|
        if (!empty($all_plugins[$slug])) {
 | 
						|
            return true;
 | 
						|
        } else {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
    } // is_plugin_installed
 | 
						|
 | 
						|
 | 
						|
    static function countFails($username = "")
 | 
						|
    {
 | 
						|
        global $wpdb;
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
        $ip = WPCaptcha_Utility::getUserIP();
 | 
						|
 | 
						|
        $numFails = $wpdb->get_var(
 | 
						|
            $wpdb->prepare(
 | 
						|
                "SELECT COUNT(login_attempt_ID) FROM " . $wpdb->wpcatcha_login_fails . " WHERE login_attempt_date + INTERVAL %d MINUTE > %s AND login_attempt_IP = %s",
 | 
						|
                array($options['retries_within'], current_time('mysql'), $ip)
 | 
						|
            )
 | 
						|
        );
 | 
						|
 | 
						|
        return $numFails;
 | 
						|
    }
 | 
						|
 | 
						|
    static function incrementFails($username = "", $reason = "")
 | 
						|
    {
 | 
						|
        global $wpdb;
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
        $ip = WPCaptcha_Utility::getUserIP();
 | 
						|
 | 
						|
        $username = sanitize_user($username);
 | 
						|
        $user = get_user_by('login', $username);
 | 
						|
 | 
						|
        if ($user || 1 == $options['lockout_invalid_usernames']) {
 | 
						|
            if ($user === false) {
 | 
						|
                $user_id = -1;
 | 
						|
            } else {
 | 
						|
                $user_id = $user->ID;
 | 
						|
            }
 | 
						|
 | 
						|
            $wpdb->insert(
 | 
						|
                $wpdb->wpcatcha_login_fails,
 | 
						|
                array(
 | 
						|
                    'user_id' => $user_id,
 | 
						|
                    'login_attempt_date' => current_time('mysql'),
 | 
						|
                    'login_attempt_IP' => $ip,
 | 
						|
                    'failed_user' => $username,
 | 
						|
                    'reason' => $reason
 | 
						|
                )
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function lockDown($username = "", $reason = "")
 | 
						|
    {
 | 
						|
        global $wpdb;
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
        $ip = WPCaptcha_Utility::getUserIP();
 | 
						|
 | 
						|
        $username = sanitize_user($username);
 | 
						|
        $user = get_user_by('login', $username);
 | 
						|
        if ($user || 1 == $options['lockout_invalid_usernames']) {
 | 
						|
            if ($user === false) {
 | 
						|
                $user_id = -1;
 | 
						|
            } else {
 | 
						|
                $user_id = $user->ID;
 | 
						|
            }
 | 
						|
 | 
						|
            $wpdb->insert(
 | 
						|
                $wpdb->wpcatcha_accesslocks,
 | 
						|
                array(
 | 
						|
                    'user_id' => $user_id,
 | 
						|
                    'accesslock_date' => current_time('mysql'),
 | 
						|
                    'release_date' => date('Y-m-d H:i:s', strtotime(current_time('mysql')) + $options['lockout_length'] * 60),
 | 
						|
                    'accesslock_IP' => $ip,
 | 
						|
                    'reason' => $reason
 | 
						|
                )
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function isLockedDown()
 | 
						|
    {
 | 
						|
        global $wpdb;
 | 
						|
        $ip = WPCaptcha_Utility::getUserIP();
 | 
						|
 | 
						|
        $stillLocked = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM " . $wpdb->wpcatcha_accesslocks . " WHERE release_date > %s AND accesslock_IP = %s AND unlocked = 0", array(current_time('mysql'), $ip)));
 | 
						|
 | 
						|
        return $stillLocked;
 | 
						|
    }
 | 
						|
 | 
						|
    static function is_rest_request()
 | 
						|
    {
 | 
						|
        if (defined('REST_REQUEST') && REST_REQUEST || isset($_GET['rest_route']) && strpos(sanitize_text_field(wp_unslash($_GET['rest_route'])), '/', 0) === 0) {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        global $wp_rewrite;
 | 
						|
        if (null === $wp_rewrite) {
 | 
						|
            $wp_rewrite = new WP_Rewrite();
 | 
						|
        }
 | 
						|
 | 
						|
        $rest_url    = wp_parse_url(trailingslashit(rest_url()));
 | 
						|
        $current_url = wp_parse_url(add_query_arg(array()));
 | 
						|
        $is_rest = false;
 | 
						|
        if(isset($current_url['path'])){
 | 
						|
            $is_rest = strpos($current_url['path'], $rest_url['path'], 0) === 0;
 | 
						|
        }
 | 
						|
 | 
						|
        return $is_rest;
 | 
						|
    }
 | 
						|
 | 
						|
    static function wp_authenticate_username_password($user, $username, $password)
 | 
						|
    {
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
 | 
						|
        if ($options['login_protection'] && self::isLockedDown()) {
 | 
						|
            self::accesslock_screen($options['block_message']);
 | 
						|
            return new WP_Error('wpcaptcha_fail_count', __("<strong>ERROR</strong>: We're sorry, but this IP has been blocked due to too many recent failed login attempts.<br /><br />Please try again later.", 'advanced-google-recaptcha'));
 | 
						|
        }
 | 
						|
 | 
						|
        if (!$username) {
 | 
						|
            return $user;
 | 
						|
        }
 | 
						|
 | 
						|
        if (self::is_rest_request()) {
 | 
						|
            return $user;
 | 
						|
        }
 | 
						|
 | 
						|
        if ($options['captcha_show_login']) {
 | 
						|
            $captcha = self::handle_captcha();
 | 
						|
            if (is_wp_error($captcha)) {
 | 
						|
                if ($options['max_login_retries'] <= self::countFails($username) && self::countFails($username) > 0) {
 | 
						|
                    self::lockDown($username, 'Too many captcha fails');
 | 
						|
                }
 | 
						|
                return $captcha;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $userdata = get_user_by('login', $username);
 | 
						|
        if (false === $userdata) {
 | 
						|
            $userdata = get_user_by('email', $username);
 | 
						|
        }
 | 
						|
 | 
						|
        if ($options['login_protection'] && $options['max_login_retries'] <= self::countFails($username)) {
 | 
						|
            if ($options['max_login_retries'] <= self::countFails($username) && self::countFails($username) > 0) {
 | 
						|
                self::lockDown($username, 'Too many fails');
 | 
						|
            }
 | 
						|
 | 
						|
            if (strlen($username) > 0 && $userdata === false && $options['instant_block_nonusers'] == '1' && self::countFails($username) > 0) {
 | 
						|
                self::lockDown($username, 'Invalid Username');
 | 
						|
            }
 | 
						|
 | 
						|
            return new WP_Error('wpcaptcha_fail_count', __("<strong>ERROR</strong>: We're sorry, but this IP has been blocked due to too many recent failed login attempts.<br /><br />Please try again later.", 'advanced-google-recaptcha'));
 | 
						|
        }
 | 
						|
 | 
						|
        if (empty($username) || empty($password)) {
 | 
						|
            $error = new WP_Error();
 | 
						|
 | 
						|
            if (empty($username))
 | 
						|
                $error->add('empty_username', __('<strong>ERROR</strong>: The username field is empty.', 'advanced-google-recaptcha'));
 | 
						|
 | 
						|
            if (empty($password))
 | 
						|
                $error->add('empty_password', __('<strong>ERROR</strong>: The password field is empty.', 'advanced-google-recaptcha'));
 | 
						|
 | 
						|
            return $error;
 | 
						|
        }
 | 
						|
 | 
						|
        if ($userdata === false) {
 | 
						|
            return new WP_Error('invalid_username', sprintf(__('<strong>ERROR</strong>: Invalid username. <a href="%s" title="Password Lost and Found">Lost your password</a>?', 'advanced-google-recaptcha'), site_url('wp-login.php?action=lostpassword', 'login')));
 | 
						|
        }
 | 
						|
 | 
						|
        $userdata = apply_filters('wp_authenticate_user', $userdata, $password);
 | 
						|
        if (is_wp_error($userdata)) {
 | 
						|
            return $userdata;
 | 
						|
        }
 | 
						|
 | 
						|
        if (!is_string($password) || !is_string($userdata->user_pass) || is_null($userdata->ID) || !wp_check_password($password, $userdata->user_pass, $userdata->ID)) {
 | 
						|
            return new WP_Error('incorrect_password', sprintf(__('<strong>ERROR</strong>: Incorrect password. <a href="%s" title="Password Lost and Found">Lost your password</a>?', 'advanced-google-recaptcha'), site_url('wp-login.php?action=lostpassword', 'login')));
 | 
						|
        }
 | 
						|
 | 
						|
        $user =  new WP_User($userdata->ID);
 | 
						|
        return $user;
 | 
						|
    }
 | 
						|
 | 
						|
    static function handle_captcha()
 | 
						|
    {
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
        if ($options['captcha'] == 'recaptchav2') {
 | 
						|
            if (!isset($_POST['g-recaptcha-response']) || empty($_POST['g-recaptcha-response'])) {
 | 
						|
                return new WP_Error('wpcaptcha_recaptchav2_not_submitted', __("<strong>ERROR</strong>: reCAPTCHA verification failed.<br /><br />Please try again.", 'advanced-google-recaptcha'));
 | 
						|
            } else {
 | 
						|
                $secret = $options['captcha_secret_key'];
 | 
						|
                $response = wp_remote_get('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $_POST['g-recaptcha-response']);
 | 
						|
                $response = json_decode($response['body']);
 | 
						|
                if ($response->success) {
 | 
						|
                    return true;
 | 
						|
                } else {
 | 
						|
                    return new WP_Error('wpcaptcha_recaptchav2_failed', __("<strong>ERROR</strong>: reCAPTCHA verification failed.<br /><br />Please try again.", 'advanced-google-recaptcha'));
 | 
						|
                }
 | 
						|
            }
 | 
						|
        } else if ($options['captcha'] == 'recaptchav3') {
 | 
						|
            if (!isset($_POST['g-recaptcha-response']) || empty($_POST['g-recaptcha-response'])) {
 | 
						|
                return new WP_Error('wpcaptcha_recaptchav3_not_submitted', __("<strong>ERROR</strong>: reCAPTCHA verification failed.<br /><br />Please try again.", 'advanced-google-recaptcha'));
 | 
						|
            } else {
 | 
						|
                
 | 
						|
                $secret = $options['captcha_secret_key'];
 | 
						|
                $response = wp_remote_get('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $_POST['g-recaptcha-response']);
 | 
						|
                $response = json_decode($response['body']);
 | 
						|
                
 | 
						|
                if ($response->success) {
 | 
						|
                    return true;
 | 
						|
                } else {
 | 
						|
                    return new WP_Error('wpcaptcha_recaptchav3_failed', __("<strong>ERROR</strong>: reCAPTCHA verification failed.<br /><br />Please try again.", 'advanced-google-recaptcha'));
 | 
						|
                }
 | 
						|
            }
 | 
						|
        } else if ($options['captcha'] == 'builtin') {
 | 
						|
            if (isset($_POST['wpcaptcha_captcha'])) {
 | 
						|
                foreach($_POST['wpcaptcha_captcha'] as $captcha_id => $captcha_val){
 | 
						|
                    if($captcha_val === $_COOKIE['wpcaptcha_captcha_' . $captcha_id]){
 | 
						|
                        return true;
 | 
						|
                    } else {
 | 
						|
                        return new WP_Error('wpcaptcha_builtin_captcha_failed', __("<strong>ERROR</strong>: captcha verification failed.<br /><br />Please try again.", 'advanced-google-recaptcha'));
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                return new WP_Error('wpcaptcha_builtin_captcha_failed', __("<strong>ERROR</strong>: captcha verification failed.<br /><br />Please try again.", 'advanced-google-recaptcha'));
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    static function handle_captcha_wp_registration($errors, $user_login, $user_email)
 | 
						|
    {
 | 
						|
        $captcha_check = self::handle_captcha();
 | 
						|
        if ($captcha_check !== true) {
 | 
						|
            $errors = $captcha_check;
 | 
						|
        }
 | 
						|
 | 
						|
        return $errors;
 | 
						|
    }
 | 
						|
 | 
						|
    static function process_lost_password_form($errors)
 | 
						|
    {
 | 
						|
        $captcha_check = self::handle_captcha();
 | 
						|
        if ($captcha_check !== true) {
 | 
						|
            $errors->add('captcha', $captcha_check->get_error_message());
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function check_woo_register_form_validation($validation_error)
 | 
						|
    {
 | 
						|
        if (wp_doing_ajax()) {
 | 
						|
            return $validation_error;
 | 
						|
        }
 | 
						|
        
 | 
						|
        $captcha_check = self::handle_captcha();
 | 
						|
 | 
						|
        if ($captcha_check !== true) {
 | 
						|
            if (isset($validation_error) && is_wp_error($validation_error)) {
 | 
						|
                $validation_error->add('captcha', $captcha_check->get_error_message());
 | 
						|
                return $validation_error;
 | 
						|
            } else {
 | 
						|
                wc_add_notice($captcha_check->get_error_message(), 'error');
 | 
						|
                return $validation_error;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $validation_error;
 | 
						|
    }
 | 
						|
 | 
						|
    static function check_woo_checkout_form()
 | 
						|
    {
 | 
						|
        $captcha_check = self::handle_captcha();
 | 
						|
        if ($captcha_check !== true) {
 | 
						|
            wc_add_notice($captcha_check->get_error_message(), 'error');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function check_edd_register_form()
 | 
						|
    {
 | 
						|
        $captcha_check = self::handle_captcha();
 | 
						|
        if ($captcha_check !== true) {
 | 
						|
            edd_set_error('captcha', $captcha_check->get_error_message());
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function process_buddypress_signup_form()
 | 
						|
    {
 | 
						|
        $captcha_check = self::handle_captcha();
 | 
						|
        if ($captcha_check !== true) {
 | 
						|
            wp_die(
 | 
						|
                '<p><strong>' . esc_html__('ERROR:', 'advanced-google-recaptcha') . '</strong> ' . esc_html(strip_tags($captcha_check->get_error_message())) . '</p>',
 | 
						|
                'reCAPTCHA',
 | 
						|
                array(
 | 
						|
                    'response'  => 403,
 | 
						|
                    'back_link' => 1,
 | 
						|
                )
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function process_comment_form($commentdata)
 | 
						|
    {
 | 
						|
        // No need to check for loggedin user.
 | 
						|
        if (absint($commentdata['user_ID']) > 0) {
 | 
						|
            return $commentdata;
 | 
						|
        }
 | 
						|
 | 
						|
        $captcha_check = self::handle_captcha();
 | 
						|
        if ($captcha_check !== true) {
 | 
						|
            wp_die(
 | 
						|
                '<p><strong>' . esc_html__('ERROR:', 'advanced-google-recaptcha') . '</strong> ' . esc_html(strip_tags($captcha_check->get_error_message())) . '</p>',
 | 
						|
                'reCAPTCHA',
 | 
						|
                array(
 | 
						|
                    'response'  => 403,
 | 
						|
                    'back_link' => 1,
 | 
						|
                )
 | 
						|
            );
 | 
						|
        }
 | 
						|
 | 
						|
        return $commentdata;
 | 
						|
    }
 | 
						|
 | 
						|
    static function loginFailed($username, $error)
 | 
						|
    {
 | 
						|
        self::incrementFails($username, $error->get_error_code());
 | 
						|
    }
 | 
						|
 | 
						|
    static function login_error_message($error)
 | 
						|
    {
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
 | 
						|
        if ($options['mask_login_errors'] == 1) {
 | 
						|
            $error = 'Login Failed';
 | 
						|
        }
 | 
						|
        return $error;
 | 
						|
    }
 | 
						|
 | 
						|
    static function login_form_fields()
 | 
						|
    {
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
        $showcreditlink = $options['show_credit_link'];
 | 
						|
 | 
						|
        if ($showcreditlink != "no" && $showcreditlink != 0) {
 | 
						|
            echo "<div id='wpcaptcha-protected-by' style='display: block; clear: both; padding-top: 20px; text-align: center;''>";
 | 
						|
            esc_html_e('Login form protected by', 'advanced-google-recaptcha');
 | 
						|
            echo " <a target='_blank' href='" . esc_url('https://getwpcaptcha.com/') . "'>WP Captcha</a></div>";
 | 
						|
            echo '<script>
 | 
						|
            document.addEventListener("DOMContentLoaded", function() {
 | 
						|
                document.querySelector("#loginform").append(document.querySelector("#wpcaptcha-protected-by"));
 | 
						|
            });
 | 
						|
            </script>';
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function captcha_fields()
 | 
						|
    {
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
 | 
						|
        if ($options['captcha'] == 'recaptchav2') {
 | 
						|
            echo '<div class="g-recaptcha" style="transform: scale(0.9); -webkit-transform: scale(0.9); transform-origin: 0 0; -webkit-transform-origin: 0 0;" data-sitekey="' . esc_html($options['captcha_site_key']) . '"></div>';
 | 
						|
        } else if ($options['captcha'] == 'recaptchav3') {
 | 
						|
            echo '<input type="hidden" name="g-recaptcha-response" class="agr-recaptcha-response" value="" />';
 | 
						|
            echo '<script>
 | 
						|
        function wpcaptcha_captcha(){
 | 
						|
            grecaptcha.execute("' . esc_html($options['captcha_site_key']) . '", {action: "submit"}).then(function(token) {
 | 
						|
                var captchas = document.querySelectorAll(".agr-recaptcha-response");
 | 
						|
                captchas.forEach(function(captcha) {
 | 
						|
                    captcha.value = token;
 | 
						|
                });
 | 
						|
            });
 | 
						|
        }
 | 
						|
        </script>';
 | 
						|
        } else if ($options['captcha'] == 'builtin') {
 | 
						|
            echo '<p><label for="wpcaptcha_captcha">Are you human? Please solve: ';
 | 
						|
            $captcha_id = rand(1000,9999);
 | 
						|
            echo '<img class="wpcaptcha-captcha-img" style="vertical-align: text-top;" src="' . esc_url(WPCAPTCHA_PLUGIN_URL) . '/libs/captcha.php?wpcaptcha-generate-image=true&color=' . esc_attr(urlencode('#FFFFFF')) . '&noise=1&id=' . intval($captcha_id) . '" alt="Captcha" />';
 | 
						|
            echo '<input class="input" type="text" size="3" name="wpcaptcha_captcha[' . intval($captcha_id) . ']" id="wpcaptcha_captcha" />';
 | 
						|
            echo '</label></p><br />';
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function login_enqueue_scripts()
 | 
						|
    {
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
 | 
						|
        if ($options['captcha'] == 'recaptchav2') {
 | 
						|
            wp_enqueue_script('wpcaptcha-recaptcha', 'https://www.google.com/recaptcha/api.js', array(), self::$version, true);
 | 
						|
        } else if ($options['captcha'] == 'recaptchav3') {
 | 
						|
            wp_enqueue_script('wpcaptcha-recaptcha', 'https://www.google.com/recaptcha/api.js?onload=wpcaptcha_captcha&render=' . esc_html($options['captcha_site_key']), array(), self::$version, true);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function login_print_scripts()
 | 
						|
    {
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
 | 
						|
        if ($options['captcha'] == 'recaptchav2') {
 | 
						|
            echo "<script src='https://www.google.com/recaptcha/api.js?ver=" . esc_attr(self::$version) . "' id='wpcaptcha-recaptcha-js'></script>";
 | 
						|
        } else if ($options['captcha'] == 'recaptchav3') {
 | 
						|
            echo "<script src='https://www.google.com/recaptcha/api.js?onload=wpcaptcha_captcha&render=" . esc_html($options['captcha_site_key']) . "&ver=" . esc_attr(self::$version) . "' id='wpcaptcha-recaptcha-js'></script>";
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function accesslock_screen($block_message = false)
 | 
						|
    {
 | 
						|
        $main_color = '#4285f4';
 | 
						|
        $secondary_color = '#8eb8ff';
 | 
						|
 | 
						|
        echo '<style>
 | 
						|
            @import url(\'https://fonts.bunny.net/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;1,400;1,500;1,700&display=swap\');
 | 
						|
 | 
						|
            #wpcaptcha_accesslock_screen_wrapper{
 | 
						|
                font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
 | 
						|
                width:100%;
 | 
						|
                height:100%;
 | 
						|
                position:fixed;
 | 
						|
                top:0;
 | 
						|
                left:0;
 | 
						|
                z-index: 999999;
 | 
						|
                font-size: 14px;
 | 
						|
                color: #333;
 | 
						|
                line-height: 1.4;
 | 
						|
                background-image: linear-gradient(45deg, ' . esc_attr($main_color) . ' 25%, ' . esc_attr($secondary_color) . ' 25%, ' . esc_attr($secondary_color) . ' 50%, ' . esc_attr($main_color) . ' 50%, ' . esc_attr($main_color) . ' 75%, ' . esc_attr($secondary_color) . ' 75%, ' . esc_attr($secondary_color) . ' 100%);
 | 
						|
                background-size: 28.28px 28.28px;
 | 
						|
            }
 | 
						|
 | 
						|
            #wpcaptcha_accesslock_screen_wrapper form{
 | 
						|
                max-width: 300px;
 | 
						|
                top:50%;
 | 
						|
                left:50%;
 | 
						|
                margin-top:-200px;
 | 
						|
                margin-left:-200px;
 | 
						|
                border: none;
 | 
						|
                background: #ffffffde;
 | 
						|
                box-shadow: 0 1px 3px rgb(0 0 0 / 4%);
 | 
						|
                position: fixed;
 | 
						|
                text-align:center;
 | 
						|
                background: #fffffff2;
 | 
						|
                padding: 20px;
 | 
						|
                -webkit-box-shadow: 5px 5px 0px 1px rgba(0,0,0,0.22);
 | 
						|
                box-shadow: 5px 5px 0px 1px rgba(0,0,0,0.22);
 | 
						|
            }
 | 
						|
 | 
						|
            #wpcaptcha_accesslock_screen_wrapper p{
 | 
						|
                padding: 10px;
 | 
						|
                line-height:1.5;
 | 
						|
            }
 | 
						|
 | 
						|
            #wpcaptcha_accesslock_screen_wrapper p.error{
 | 
						|
                background: #f11c1c;
 | 
						|
                color: #FFF;
 | 
						|
                font-weight: 500;
 | 
						|
            }
 | 
						|
 | 
						|
            #wpcaptcha_accesslock_screen_wrapper form input[type="text"]{
 | 
						|
                padding: 4px 10px;
 | 
						|
                border-radius: 2px;
 | 
						|
                border: 1px solid #c3c4c7;
 | 
						|
                font-size: 16px;
 | 
						|
                line-height: 1.33333333;
 | 
						|
                margin: 0 6px 16px 0;
 | 
						|
                min-height: 40px;
 | 
						|
                max-height: none;
 | 
						|
                width: 100%;
 | 
						|
            }
 | 
						|
 | 
						|
            #wpcaptcha_accesslock_screen_wrapper form input[type="submit"]{
 | 
						|
                padding: 10px 10px;
 | 
						|
                border-radius: 2px;
 | 
						|
                border: none;
 | 
						|
                font-size: 16px;
 | 
						|
                background: ' . esc_attr($main_color) . ';
 | 
						|
                color: #FFF;
 | 
						|
                cursor: pointer;
 | 
						|
                width: 100%;
 | 
						|
            }
 | 
						|
 | 
						|
            #wpcaptcha_accesslock_screen_wrapper form input[type="submit"]:hover{
 | 
						|
                background: ' . esc_attr($secondary_color) . ';
 | 
						|
            }
 | 
						|
        </style>
 | 
						|
 | 
						|
        <script>
 | 
						|
        document.title = "' . esc_html(get_bloginfo('name')) . '";
 | 
						|
        </script>';
 | 
						|
        echo '<div id="wpcaptcha_accesslock_screen_wrapper">';
 | 
						|
 | 
						|
        echo '<form method="POST">';
 | 
						|
 | 
						|
        if (isset($_POST['wpcaptcha_recovery_submit']) && wp_verify_nonce($_POST['wpcaptcha_recovery_nonce'], 'wpcaptcha_recovery')) {
 | 
						|
            if (!filter_var($_POST['wpcaptcha_recovery_email'], FILTER_VALIDATE_EMAIL)) {
 | 
						|
                $display_message = '<p class="error">Invalid email address.</p>';
 | 
						|
            } else {
 | 
						|
                $user = get_user_by('email', sanitize_text_field($_POST['wpcaptcha_recovery_email']));
 | 
						|
                if (user_can($user, 'administrator')) {
 | 
						|
                    $unblock_key = md5(time() . rand(10000, 9999));
 | 
						|
                    $unblock_attempts = get_transient('wpcaptcha_unlock_count_' . $user->ID);
 | 
						|
                    if (!$unblock_attempts) {
 | 
						|
                        $unblock_attempts = 0;
 | 
						|
                    }
 | 
						|
 | 
						|
                    $unblock_attempts++;
 | 
						|
                    set_transient('wpcaptcha_unlock_count_' . $user->ID, $unblock_attempts, HOUR_IN_SECONDS);
 | 
						|
 | 
						|
                    if ($unblock_attempts <= 3) {
 | 
						|
                        set_transient('wpcaptcha_unlock_' . $unblock_key, $unblock_key, HOUR_IN_SECONDS);
 | 
						|
 | 
						|
                        $unblock_url = add_query_arg(array('wpcaptcha_unblock' => $unblock_key), wp_login_url());
 | 
						|
 | 
						|
                        $subject  = 'WP Captcha unblock instructions for ' . site_url();
 | 
						|
                        $message  = '<p>The IP ' . WPCaptcha_Utility::getUserIP() . ' has been locked down and someone submitted an unblock request using your email address <strong>' . $_POST['wpcaptcha_recovery_email'] . '</strong></p>';
 | 
						|
                        $message .= '<p>If this was you, and you have locked yourself out please click <a target="_blank" href="' . $unblock_url . '">this link</a> which is valid for 1 hour.</p>';
 | 
						|
                        $message .= '<p>Please note that for security reasons, this will only unblock the IP of the person opening the link, not the IP of the person who submitted the unblock request. To unblock someone else please do so on the <a href="' . admin_url('options-general.php?page=wpcaptcha#wpcaptcha_activity') . '">WP Captcha Activity Page</p>';
 | 
						|
 | 
						|
                        add_filter('wp_mail_content_type', function () {
 | 
						|
                            return "text/html";
 | 
						|
                        });
 | 
						|
 | 
						|
                        wp_mail($user->user_email, $subject, $message);
 | 
						|
                    }
 | 
						|
                } else {
 | 
						|
                    //If no admin using the submitted email exists, ignore silently
 | 
						|
                }
 | 
						|
 | 
						|
                if (isset($unblock_attempts) && $unblock_attempts > 3) {
 | 
						|
                    $display_message = '<p class="error">You have already attempted to unblock yourself recently, please wait 1 hour before trying again.</p>';
 | 
						|
                } else {
 | 
						|
                    $display_message = '<p>If an administrator having the email address <strong>' . $_POST['wpcaptcha_recovery_email'] . '</strong> exists, an email has been sent with instructions to regain access.</p>';
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        echo '<img src="' . esc_url(WPCAPTCHA_PLUGIN_URL) . '/images/wp-captcha-logo.png" alt="WP Captcha" height="60" title="WP Captcha">';
 | 
						|
 | 
						|
        echo '<br />';
 | 
						|
        echo '<br />';
 | 
						|
        if ($block_message !== false) {
 | 
						|
            echo '<p class="error">' . esc_html($block_message) . '</p>';
 | 
						|
        } else {
 | 
						|
            echo '<p class="error">We\'re sorry, but your IP has been blocked due to too many recent failed login attempts.</p>';
 | 
						|
        }
 | 
						|
        if (!empty($display_message)) {
 | 
						|
            WPCaptcha_Utility::wp_kses_wf($display_message);
 | 
						|
        }
 | 
						|
        echo '<p>If you are a user with administrative privilege please enter your email below to receive instructions on how to unblock yourself.</p>';
 | 
						|
        echo '<input type="text" name="wpcaptcha_recovery_email" value="" placeholder="" />';
 | 
						|
        echo '<input type="submit" name="wpcaptcha_recovery_submit" value="Send unblock email" placeholder="" />';
 | 
						|
        wp_nonce_field('wpcaptcha_recovery', 'wpcaptcha_recovery_nonce');
 | 
						|
 | 
						|
 | 
						|
        echo '</form>';
 | 
						|
        echo '</div>';
 | 
						|
 | 
						|
        exit();
 | 
						|
    }
 | 
						|
 | 
						|
    static function handle_unblock()
 | 
						|
    {
 | 
						|
        global $wpdb;
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
        if (isset($_GET['wpcaptcha_unblock']) && $options['global_unblock_key'] === $_GET['wpcaptcha_unblock']) {
 | 
						|
            $user_ip = WPCaptcha_Utility::getUserIP();
 | 
						|
            if (!in_array($user_ip, $options['whitelist'])) {
 | 
						|
                $options['whitelist'][] = WPCaptcha_Utility::getUserIP();
 | 
						|
            }
 | 
						|
            update_option(WPCAPTCHA_OPTIONS_KEY, $options);
 | 
						|
        }
 | 
						|
 | 
						|
        if (isset($_GET['wpcaptcha_unblock']) && strlen($_GET['wpcaptcha_unblock']) == 32) {
 | 
						|
            $unblock_key = sanitize_key($_GET['wpcaptcha_unblock']);
 | 
						|
            $unblock_transient = get_transient('wpcaptcha_unlock_' . $unblock_key);
 | 
						|
            if ($unblock_transient == $unblock_key) {
 | 
						|
                $user_ip = WPCaptcha_Utility::getUserIP();
 | 
						|
                $wpdb->delete(
 | 
						|
                    $wpdb->wpcatcha_accesslocks,
 | 
						|
                    array(
 | 
						|
                        'accesslock_IP' => $user_ip
 | 
						|
                    )
 | 
						|
                );
 | 
						|
 | 
						|
                if (!in_array($user_ip, $options['whitelist'])) {
 | 
						|
                    $options['whitelist'][] = WPCaptcha_Utility::getUserIP();
 | 
						|
                }
 | 
						|
 | 
						|
                update_option(WPCAPTCHA_OPTIONS_KEY, $options);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function wp_template_loader()
 | 
						|
    {
 | 
						|
        global $pagenow;
 | 
						|
        $pagenow = 'index.php';
 | 
						|
 | 
						|
        if (!defined('WP_USE_THEMES')) {
 | 
						|
            define('WP_USE_THEMES', true);
 | 
						|
        }
 | 
						|
 | 
						|
        wp();
 | 
						|
 | 
						|
        require_once(ABSPATH . WPINC . '/template-loader.php');
 | 
						|
        die();
 | 
						|
    }
 | 
						|
 | 
						|
    public static function pretty_fail_errors($error_code)
 | 
						|
    {
 | 
						|
        switch ($error_code) {
 | 
						|
            case 'wpcaptcha_location_blocked':
 | 
						|
                return 'Blocked Location';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_fail_count':
 | 
						|
                return 'User exceeded maximum number of fails';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_bot':
 | 
						|
                return 'Bot';
 | 
						|
                break;
 | 
						|
            case 'empty_username':
 | 
						|
                return 'Empty Username';
 | 
						|
                break;
 | 
						|
            case 'empty_password':
 | 
						|
                return 'Empty Password';
 | 
						|
                break;
 | 
						|
            case 'incorrect_password':
 | 
						|
                return 'Incorrect Password';
 | 
						|
                break;
 | 
						|
            case 'invalid_username':
 | 
						|
                return 'Invalid Username';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_recaptchav2_not_submitted':
 | 
						|
                return 'reCAPTCHA v2 not submitted';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_recaptchav3_not_submitted':
 | 
						|
                return 'reCAPTCHA v3 not submitted';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_recaptchav2_failed':
 | 
						|
                return 'reCAPTCHA v2 failed verification';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_recaptchav3_not_submitted':
 | 
						|
                return 'reCAPTCHA v3 failed verification';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_builtin_captcha_failed':
 | 
						|
                return 'Built-in captcha failed verification';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_hcaptcha_failed':
 | 
						|
                return 'hCaptcha failed verification';
 | 
						|
                break;
 | 
						|
            case 'wpcaptcha_icons_captcha_failed':
 | 
						|
                return 'Icon captcha failed verification';
 | 
						|
            default:
 | 
						|
                return 'Unknown';
 | 
						|
                break;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function login_head()
 | 
						|
    {
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
 | 
						|
        if ($options['design_enable']) {
 | 
						|
            echo '<style type="text/css">';
 | 
						|
 | 
						|
            add_filter('login_headerurl', function ($url) {
 | 
						|
                $options = WPCaptcha_Setup::get_options();
 | 
						|
                if (!empty($options['design_logo_url'])) {
 | 
						|
                    return $options['design_logo_url'];
 | 
						|
                }
 | 
						|
                return $url;
 | 
						|
            });
 | 
						|
 | 
						|
 | 
						|
            if (!empty($options['design_logo'])) {
 | 
						|
                echo '#login h1 a, .login h1 a {';
 | 
						|
                echo 'filter: brightness(0) invert(1);';
 | 
						|
                echo '}';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_background_color'])) {
 | 
						|
                echo 'body.login {background-color:' . esc_attr($options['design_background_color']) . '}';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_background_image'])) {
 | 
						|
                echo 'body.login {background-image:url(' . esc_attr($options['design_background_image']) . '); background-size:cover;}';
 | 
						|
            }
 | 
						|
 | 
						|
            echo 'body.login div#login form#loginform {';
 | 
						|
            if (!empty($options['design_form_width'])) {
 | 
						|
                echo 'width:' . (int)$options['design_form_width'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_form_height'])) {
 | 
						|
                echo 'height:' . (int)$options['design_form_height'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_form_padding'])) {
 | 
						|
                echo 'padding:' . (int)$options['design_form_padding'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_form_border_radius'])) {
 | 
						|
                echo 'border-radius:' . (int)$options['design_form_border_radius'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!is_null($options['design_form_border_width'])) {
 | 
						|
                echo 'border-width:' . (int)$options['design_form_border_width'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_form_border_color'])) {
 | 
						|
                echo 'border-color:' . esc_attr($options['design_form_border_color']) . ';';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_form_background_color'])) {
 | 
						|
                echo 'background-color:' . esc_attr($options['design_form_background_color']) . ';';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_form_background_image'])) {
 | 
						|
                echo 'background-image:url(' . esc_url($options['design_form_background_image']) . '); background-size:cover;';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo 'body.login div#login form#loginform label {';
 | 
						|
            if (!empty($options['design_label_font_size'])) {
 | 
						|
                echo 'font-size:' . (int)$options['design_label_font_size'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_label_text_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_label_text_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo 'body.login div#login form#loginform input {';
 | 
						|
            if (!empty($options['design_field_font_size'])) {
 | 
						|
                echo 'font-size:' . (int)$options['design_field_font_size'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_field_text_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_field_text_color']) . ';';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_field_border_color'])) {
 | 
						|
                echo 'border-color:' . esc_attr($options['design_field_border_color']) . ';';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!is_null($options['design_field_border_width'])) {
 | 
						|
                echo 'border-width:' . (int)$options['design_field_border_width'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_field_border_radius'])) {
 | 
						|
                echo 'border-radius:' . (int)$options['design_field_border_radius'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_field_background_color'])) {
 | 
						|
                echo 'background-color:' . esc_attr($options['design_field_background_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo 'body.login div#login form#loginform p.submit input#wp-submit {';
 | 
						|
            if (!empty($options['design_button_font_size'])) {
 | 
						|
                echo 'font-size:' . (int)$options['design_button_font_size'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_button_text_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_button_text_color']) . ';';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_button_border_color'])) {
 | 
						|
                echo 'border-color:' . esc_attr($options['design_button_border_color']) . ';';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!is_null($options['design_button_border_width'])) {
 | 
						|
                echo 'border-width:' . (int)$options['design_button_border_width'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_button_border_radius'])) {
 | 
						|
                echo 'border-radius:' . (int)$options['design_button_border_radius'] . 'px;';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_button_background_color'])) {
 | 
						|
                echo 'background-color:' . esc_attr($options['design_button_background_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo 'body.login div#login form#loginform{';
 | 
						|
            if (!empty($options['design_text_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_text_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo 'body.login a, body.login #nav a, body.login #backtoblog a, body.login div#login form#loginform a{';
 | 
						|
            if (!empty($options['design_link_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_link_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo 'body.login a:hover, body.login #nav a:hover, body.login #backtoblog a:hover, body.login div#login form#loginform a:hover{';
 | 
						|
            if (!empty($options['design_link_hover_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_link_hover_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo 'body.login div#login form#loginform p.submit input#wp-submit:hover {';
 | 
						|
            if (!empty($options['design_button_hover_text_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_button_hover_text_color']) . ';';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_button_hover_border_color'])) {
 | 
						|
                echo 'border-color:' . esc_attr($options['design_button_hover_border_color']) . ';';
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($options['design_button_hover_background_color'])) {
 | 
						|
                echo 'background-color:' . esc_attr($options['design_button_hover_background_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo '.wp-core-ui .button .dashicons, .wp-core-ui .button-secondary .dashicons{';
 | 
						|
            if (!empty($options['design_link_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_link_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
            echo '.wp-core-ui .button .dashicons:hover, .wp-core-ui .button-secondary .dashicons:hover{';
 | 
						|
            if (!empty($options['design_link_hover_color'])) {
 | 
						|
                echo 'color:' . esc_attr($options['design_link_hover_color']) . ';';
 | 
						|
            }
 | 
						|
            echo '}';
 | 
						|
 | 
						|
 | 
						|
            if (!empty($options['design_custom_css'])) {
 | 
						|
                echo esc_html($options['design_custom_css']);
 | 
						|
            }
 | 
						|
 | 
						|
            echo '</style>';
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static function get_templates()
 | 
						|
    {
 | 
						|
        $templates = array();
 | 
						|
 | 
						|
        $templates['white'] = array(
 | 
						|
            'design_background_color' => '#FFFFFF',
 | 
						|
            'design_background_image' => '',
 | 
						|
            'design_logo' => 'white-wpcaptcha-icon',
 | 
						|
            'design_logo_width' => '100',
 | 
						|
            'design_logo_height' => '100',
 | 
						|
            'design_logo_margin_bottom' => '30',
 | 
						|
            'design_text_color' => '#300000',
 | 
						|
            'design_link_color' => '#06a8e8',
 | 
						|
            'design_link_hover_color' => '#005b93',
 | 
						|
            'design_form_border_color' => '#cbcbcb',
 | 
						|
            'design_form_border_width' => '1',
 | 
						|
            'design_form_width' => '',
 | 
						|
            'design_form_height' => '',
 | 
						|
            'design_form_padding' => '20',
 | 
						|
            'design_form_border_radius' => '4',
 | 
						|
            'design_form_background_color' => '#ffffff',
 | 
						|
            'design_form_background_image' => '',
 | 
						|
            'design_label_font_size' => '14',
 | 
						|
            'design_label_text_color' => '#383838',
 | 
						|
            'design_field_font_size' => '14',
 | 
						|
            'design_field_text_color' => '#222222',
 | 
						|
            'design_field_border_color' => '#d1d1d1',
 | 
						|
            'design_field_border_width' => '1',
 | 
						|
            'design_field_border_radius' => '2',
 | 
						|
            'design_field_background_color' => '#ffffff',
 | 
						|
            'design_button_font_size' => '14',
 | 
						|
            'design_button_text_color' => '#ffffff',
 | 
						|
            'design_button_border_color' => '#000000',
 | 
						|
            'design_button_border_width' => '0',
 | 
						|
            'design_button_border_radius' => '4',
 | 
						|
            'design_button_background_color' => '#595959',
 | 
						|
            'design_button_hover_text_color' => '#ffffff',
 | 
						|
            'design_button_hover_border_color' => '#ffffff',
 | 
						|
            'design_button_hover_background_color' => '#878787',
 | 
						|
            'design_custom_css' => ''
 | 
						|
        );
 | 
						|
 | 
						|
        $templates['orange'] = array(
 | 
						|
            'design_background_color' => '#ef9b00',
 | 
						|
            'design_background_image' => '',
 | 
						|
            'design_logo' => 'white-wpcaptcha-icon',
 | 
						|
            'design_logo_width' => '100',
 | 
						|
            'design_logo_height' => '100',
 | 
						|
            'design_logo_margin_bottom' => '30',
 | 
						|
            'design_text_color' => '#4c3d00',
 | 
						|
            'design_link_color' => '#7c6e13',
 | 
						|
            'design_link_hover_color' => '#896709',
 | 
						|
            'design_form_border_color' => '#725f00',
 | 
						|
            'design_form_border_width' => '0',
 | 
						|
            'design_form_width' => '',
 | 
						|
            'design_form_height' => '',
 | 
						|
            'design_form_padding' => '20',
 | 
						|
            'design_form_border_radius' => '4',
 | 
						|
            'design_form_background_color' => '#f9e7ac',
 | 
						|
            'design_form_background_image' => '',
 | 
						|
            'design_label_font_size' => '14',
 | 
						|
            'design_label_text_color' => '#634000',
 | 
						|
            'design_field_font_size' => '14',
 | 
						|
            'design_field_text_color' => '#222222',
 | 
						|
            'design_field_border_color' => '#634000',
 | 
						|
            'design_field_border_width' => '1',
 | 
						|
            'design_field_border_radius' => '2',
 | 
						|
            'design_field_background_color' => '#ffffff',
 | 
						|
            'design_button_font_size' => '14',
 | 
						|
            'design_button_text_color' => '#ffffff',
 | 
						|
            'design_button_border_color' => '#634000',
 | 
						|
            'design_button_border_width' => '1',
 | 
						|
            'design_button_border_radius' => '4',
 | 
						|
            'design_button_background_color' => '#634000',
 | 
						|
            'design_button_hover_text_color' => '#ffffff',
 | 
						|
            'design_button_hover_border_color' => '#8c5f00',
 | 
						|
            'design_button_hover_background_color' => '#8c5f00',
 | 
						|
            'design_custom_css' => ''
 | 
						|
        );
 | 
						|
 | 
						|
        $templates['red'] = array(
 | 
						|
            'design_background_color' => '#ce0000',
 | 
						|
            'design_background_image' => '',
 | 
						|
            'design_logo' => 'white-wpcaptcha-icon',
 | 
						|
            'design_logo_width' => '100',
 | 
						|
            'design_logo_height' => '100',
 | 
						|
            'design_logo_margin_bottom' => '30',
 | 
						|
            'design_text_color' => '#300000',
 | 
						|
            'design_link_color' => '#c91e1e',
 | 
						|
            'design_link_hover_color' => '#d15959',
 | 
						|
            'design_form_border_color' => '#c90000',
 | 
						|
            'design_form_border_width' => '2',
 | 
						|
            'design_form_width' => '',
 | 
						|
            'design_form_height' => '',
 | 
						|
            'design_form_padding' => '20',
 | 
						|
            'design_form_border_radius' => '4',
 | 
						|
            'design_form_background_color' => '#ffffff',
 | 
						|
            'design_form_background_image' => '',
 | 
						|
            'design_label_font_size' => '14',
 | 
						|
            'design_label_text_color' => '#383838',
 | 
						|
            'design_field_font_size' => '14',
 | 
						|
            'design_field_text_color' => '#222222',
 | 
						|
            'design_field_border_color' => '#d1d1d1',
 | 
						|
            'design_field_border_width' => '1',
 | 
						|
            'design_field_border_radius' => '2',
 | 
						|
            'design_field_background_color' => '#ffffff',
 | 
						|
            'design_button_font_size' => '14',
 | 
						|
            'design_button_text_color' => '#ffffff',
 | 
						|
            'design_button_border_color' => '#000000',
 | 
						|
            'design_button_border_width' => '0',
 | 
						|
            'design_button_border_radius' => '4',
 | 
						|
            'design_button_background_color' => '#d30000',
 | 
						|
            'design_button_hover_text_color' => '#ffffff',
 | 
						|
            'design_button_hover_border_color' => '#ffffff',
 | 
						|
            'design_button_hover_background_color' => '#9e0000',
 | 
						|
            'design_custom_css' => ''
 | 
						|
        );
 | 
						|
 | 
						|
        $templates['green'] = array(
 | 
						|
            'design_background_color' => '#2c6600',
 | 
						|
            'design_background_image' => '',
 | 
						|
            'design_logo' => 'white-icon.png',
 | 
						|
            'design_logo_width' => '100',
 | 
						|
            'design_logo_height' => '100',
 | 
						|
            'design_logo_margin_bottom' => '30',
 | 
						|
            'design_text_color' => '#c6e500',
 | 
						|
            'design_link_color' => '#c6e500',
 | 
						|
            'design_link_hover_color' => '#acbf00',
 | 
						|
            'design_form_border_color' => '#c6e500',
 | 
						|
            'design_form_border_width' => '2',
 | 
						|
            'design_form_width' => '',
 | 
						|
            'design_form_height' => '',
 | 
						|
            'design_form_padding' => '20',
 | 
						|
            'design_form_border_radius' => '4',
 | 
						|
            'design_form_background_color' => '#4b7c01',
 | 
						|
            'design_form_background_image' => '',
 | 
						|
            'design_label_font_size' => '14',
 | 
						|
            'design_label_text_color' => '#ffffff',
 | 
						|
            'design_field_font_size' => '14',
 | 
						|
            'design_field_text_color' => '#222222',
 | 
						|
            'design_field_border_color' => '#87d642',
 | 
						|
            'design_field_border_width' => '1',
 | 
						|
            'design_field_border_radius' => '2',
 | 
						|
            'design_field_background_color' => '#3c7f02',
 | 
						|
            'design_button_font_size' => '14',
 | 
						|
            'design_button_text_color' => '#ffffff',
 | 
						|
            'design_button_border_color' => '#000000',
 | 
						|
            'design_button_border_width' => '0',
 | 
						|
            'design_button_border_radius' => '4',
 | 
						|
            'design_button_background_color' => '#66b500',
 | 
						|
            'design_button_hover_text_color' => '#ffffff',
 | 
						|
            'design_button_hover_border_color' => '#ffffff',
 | 
						|
            'design_button_hover_background_color' => '#a6d800',
 | 
						|
            'design_custom_css' => ''
 | 
						|
        );
 | 
						|
 | 
						|
        $templates['blue'] = array(
 | 
						|
            'design_background_color' => '#005cb2',
 | 
						|
            'design_background_image' => '',
 | 
						|
            'design_logo' => 'white-icon.png',
 | 
						|
            'design_logo_width' => '100',
 | 
						|
            'design_logo_height' => '100',
 | 
						|
            'design_logo_margin_bottom' => '30',
 | 
						|
            'design_text_color' => '#300000',
 | 
						|
            'design_link_color' => '#2ca8ea',
 | 
						|
            'design_link_hover_color' => '#005b93',
 | 
						|
            'design_form_border_color' => '#008ed1',
 | 
						|
            'design_form_border_width' => '2',
 | 
						|
            'design_form_width' => '',
 | 
						|
            'design_form_height' => '',
 | 
						|
            'design_form_padding' => '20',
 | 
						|
            'design_form_border_radius' => '4',
 | 
						|
            'design_form_background_color' => '#ffffff',
 | 
						|
            'design_form_background_image' => '',
 | 
						|
            'design_label_font_size' => '14',
 | 
						|
            'design_label_text_color' => '#383838',
 | 
						|
            'design_field_font_size' => '14',
 | 
						|
            'design_field_text_color' => '#222222',
 | 
						|
            'design_field_border_color' => '#d1d1d1',
 | 
						|
            'design_field_border_width' => '1',
 | 
						|
            'design_field_border_radius' => '2',
 | 
						|
            'design_field_background_color' => '#ffffff',
 | 
						|
            'design_button_font_size' => '14',
 | 
						|
            'design_button_text_color' => '#ffffff',
 | 
						|
            'design_button_border_color' => '#000000',
 | 
						|
            'design_button_border_width' => '0',
 | 
						|
            'design_button_border_radius' => '4',
 | 
						|
            'design_button_background_color' => '#0084cc',
 | 
						|
            'design_button_hover_text_color' => '#ffffff',
 | 
						|
            'design_button_hover_border_color' => '#ffffff',
 | 
						|
            'design_button_hover_background_color' => '#005796',
 | 
						|
            'design_custom_css' => ''
 | 
						|
        );
 | 
						|
 | 
						|
        $templates['gray'] = array(
 | 
						|
            'design_background_color' => '#353535',
 | 
						|
            'design_background_image' => '',
 | 
						|
            'design_logo' => 'white-icon.png',
 | 
						|
            'design_logo_width' => '100',
 | 
						|
            'design_logo_height' => '100',
 | 
						|
            'design_logo_margin_bottom' => '30',
 | 
						|
            'design_text_color' => '#300000',
 | 
						|
            'design_link_color' => '#06a8e8',
 | 
						|
            'design_link_hover_color' => '#005b93',
 | 
						|
            'design_form_border_color' => '#474747',
 | 
						|
            'design_form_border_width' => '2',
 | 
						|
            'design_form_width' => '',
 | 
						|
            'design_form_height' => '',
 | 
						|
            'design_form_padding' => '20',
 | 
						|
            'design_form_border_radius' => '4',
 | 
						|
            'design_form_background_color' => '#ffffff',
 | 
						|
            'design_form_background_image' => '',
 | 
						|
            'design_label_font_size' => '14',
 | 
						|
            'design_label_text_color' => '#383838',
 | 
						|
            'design_field_font_size' => '14',
 | 
						|
            'design_field_text_color' => '#222222',
 | 
						|
            'design_field_border_color' => '#d1d1d1',
 | 
						|
            'design_field_border_width' => '1',
 | 
						|
            'design_field_border_radius' => '2',
 | 
						|
            'design_field_background_color' => '#ffffff',
 | 
						|
            'design_button_font_size' => '14',
 | 
						|
            'design_button_text_color' => '#ffffff',
 | 
						|
            'design_button_border_color' => '#000000',
 | 
						|
            'design_button_border_width' => '0',
 | 
						|
            'design_button_border_radius' => '4',
 | 
						|
            'design_button_background_color' => '#595959',
 | 
						|
            'design_button_hover_text_color' => '#ffffff',
 | 
						|
            'design_button_hover_border_color' => '#ffffff',
 | 
						|
            'design_button_hover_background_color' => '#878787',
 | 
						|
            'design_custom_css' => ''
 | 
						|
        );
 | 
						|
 | 
						|
        return $templates;
 | 
						|
    }
 | 
						|
 | 
						|
    static function install_template()
 | 
						|
    {
 | 
						|
        check_admin_referer('wpcaptcha_install_template');
 | 
						|
        $options = WPCaptcha_Setup::get_options();
 | 
						|
 | 
						|
        $template = $_GET['template'];
 | 
						|
        $templates = self::get_templates();
 | 
						|
 | 
						|
        if (array_key_exists($template, $templates)) {
 | 
						|
            $options = array_merge($options, $templates[$template]);
 | 
						|
            if ($options['design_logo'] == 'white-wpcaptcha-icon') {
 | 
						|
                $options['design_logo'] = WPCAPTCHA_PLUGIN_URL . 'images/white-icon.png';
 | 
						|
            }
 | 
						|
 | 
						|
            $options['design_template'] = $template;
 | 
						|
            $options['design_enable'] = 1;
 | 
						|
            update_option(WPCAPTCHA_OPTIONS_KEY, $options);
 | 
						|
            WPCaptcha_Admin::add_notice('template_activated', __('Template activated.', 'advanced-google-recaptcha'), 'success', true);
 | 
						|
        } else {
 | 
						|
            WPCaptcha_Admin::add_notice('template_not_found', __('Unknown template ID.', 'advanced-google-recaptcha'), 'error', true);
 | 
						|
        }
 | 
						|
 | 
						|
        if (!empty($_GET['redirect'])) {
 | 
						|
            wp_safe_redirect($_GET['redirect']);
 | 
						|
        }
 | 
						|
    }
 | 
						|
} // class
 |