File manager - Edit - /home/xfekoga/grenier/wp-content/plugins/defender-security/src/model/setting/class-recaptcha.php
Back
<?php /** * Handle reCaptcha settings. * * @package WP_Defender\Model\Setting */ namespace WP_Defender\Model\Setting; use Calotes\Model\Setting; /** * Model for reCaptcha settings. */ class Recaptcha extends Setting { /** * Option name. * * @var string */ protected $table = 'wd_recaptcha_settings'; /** * Feature status. * * @var bool * @defender_property */ public $enabled = false; /** * Active reCaptcha type. * * @var string * @defender_property * @rule required * @rule in[v2_checkbox,v2_invisible,v3_recaptcha] */ public $active_type = 'v2_checkbox'; /** * Data for v2 checkbox reCaptcha. * * @var array * @defender_property */ public $data_v2_checkbox; /** * Data for v2 invisible reCaptcha. * * @var array * @defender_property */ public $data_v2_invisible; /** * Data for v3 reCaptcha. * * @var array * @defender_property */ public $data_v3_recaptcha; /** * Language for reCaptcha. * * @var string * @defender_property * @rule required */ public $language = ''; /** * Message for reCaptcha. * * @var string * @defender_property * @sanitize sanitize_textarea_field */ public $message = ''; /** * Locations for reCaptcha. * * @var array * @defender_property * @rule required */ public $locations = array(); /** * Flag to detect WooCommerce. * * @var bool * @defender_property */ public $detect_woo = false; /** * Checked locations for WooCommerce. * * @var array * @defender_property * @rule required */ public $woo_checked_locations = array(); /** * Flag to detect BuddyPress. * * @var bool * @defender_property */ public $detect_buddypress = false; /** * Checked locations for BuddyPress. * * @var array * @defender_property * @rule required */ public $buddypress_checked_locations = array(); /** * Flag to disable reCaptcha for known users. * * @var bool * @defender_property */ public $disable_for_known_users = true; /** * Rules for validating the reCaptcha settings. * * @var array */ protected $rules = array( array( array( 'enabled', 'detect_woo', 'detect_buddypress' ), 'boolean' ), array( array( 'active_type' ), 'in', array( 'v2_checkbox', 'v2_invisible', 'v3_recaptcha' ) ), ); /** * Retrieves the default values for the reCAPTCHA settings. * * @return array An associative array containing the default values. */ public function get_default_values(): array { return array( 'message' => esc_html__( 'reCAPTCHA verification failed. Please try again.', 'defender-security' ), ); } /** * Load default values. * * @return void */ protected function before_load(): void { $default_values = $this->get_default_values(); $this->message = $default_values['message']; $this->language = 'automatic'; $this->data_v2_checkbox = array( 'key' => '', 'secret' => '', 'size' => 'normal', 'style' => 'light', ); $this->data_v2_invisible = array( 'key' => '', 'secret' => '', ); $this->data_v3_recaptcha = array( 'key' => '', 'secret' => '', 'threshold' => '0.5', ); } /** * Checks if the given reCAPTCHA type is valid and has all the necessary data. * * @param string $active_type The reCAPTCHA type to check. * * @return bool Returns true if the reCAPTCHA type is valid and has all the necessary data, false otherwise. */ private function check_recaptcha_type( string $active_type ): bool { if ( 'v2_checkbox' === $active_type && ! empty( $this->data_v2_checkbox['key'] ) && ! empty( $this->data_v2_checkbox['secret'] ) ) { return true; } elseif ( 'v2_invisible' === $active_type && ! empty( $this->data_v2_invisible['key'] ) && ! empty( $this->data_v2_invisible['secret'] ) ) { return true; } elseif ( 'v3_recaptcha' === $active_type && ! empty( $this->data_v3_recaptcha['key'] ) && ! empty( $this->data_v3_recaptcha['secret'] ) ) { return true; } else { return false; } } /** * Checks if the reCAPTCHA is active. * * @return bool Returns true if the reCAPTCHA is active, false otherwise. */ public function is_active(): bool { return (bool) apply_filters( 'wd_recaptcha_enable', $this->enabled && '' !== $this->active_type && '' !== $this->language // For each Recaptcha type. && $this->check_recaptcha_type( $this->active_type ) ); } /** * Is activated any default location? * * @return bool */ public function enable_default_location(): bool { return ! empty( $this->locations ); } /** * Level#2 check by any activated location. Only if the plugin is enabled. * * @return bool */ public function enable_woo_location(): bool { return $this->detect_woo && ! empty( $this->woo_checked_locations ); } /** * Level#2 check by deactivated locations. Only if the plugin is enabled. * * @return bool */ public function is_unchecked_woo_locations(): bool { return $this->detect_woo && empty( $this->woo_checked_locations ); } /** * Level#1 check. If the plugin is disabled, there is no point further. * * @param bool $is_woo_activated Whether WooCommerce is activated or not. * * @return bool */ public function check_woo_locations( $is_woo_activated ): bool { if ( ! $is_woo_activated ) { return false; } return $this->enable_woo_location(); } /** * Level#2 check by any activated location. Only if the plugin is enabled. * * @return bool */ public function enable_buddypress_location(): bool { return $this->detect_buddypress && ! empty( $this->buddypress_checked_locations ); } /** * Level#2 check by deactivated locations. Only if the plugin is enabled. * * @return bool */ public function is_unchecked_buddypress_locations(): bool { return $this->detect_buddypress && empty( $this->buddypress_checked_locations ); } /** * Level#1 Checks if the BuddyPress locations are valid and have all the necessary data. * * @param bool $is_buddypress_activated Whether BuddyPress is activated or not. * * @return bool Returns true if the BuddyPress locations are valid and have all the necessary data, false otherwise. */ public function check_buddypress_locations( $is_buddypress_activated ): bool { if ( ! $is_buddypress_activated ) { return false; } return $this->enable_buddypress_location(); } /** * Define settings labels. * * @return array */ public function labels(): array { return array( 'enabled' => self::get_module_name(), 'active_type' => esc_html__( 'Configure reCaptcha', 'defender-security' ), 'v2_checkbox' => esc_html__( 'V2 Checkbox', 'defender-security' ), 'v2_invisible' => esc_html__( 'V2 Invisible', 'defender-security' ), 'v3_recaptcha' => esc_html__( 'reCAPTCHA V3', 'defender-security' ), 'language' => esc_html__( 'Language', 'defender-security' ), 'message' => esc_html__( 'Error Message', 'defender-security' ), 'locations' => esc_html__( 'CAPTCHA Locations', 'defender-security' ), 'detect_woo' => esc_html__( 'WooCommerce', 'defender-security' ), 'detect_buddypress' => esc_html__( 'BuddyPress', 'defender-security' ), 'disable_for_known_users' => esc_html__( 'Disable for logged in users', 'defender-security' ), ); } /** * Validates the form after submission. * * @return void */ protected function after_validate(): void { // Case with multi errors. if ( $this->is_unchecked_woo_locations() && $this->is_unchecked_buddypress_locations() ) { // The text of the notation is only in the first key, but we add the number of keys depending on the disabled locations of the plugins. $this->errors['enable_woo'] = esc_html__( 'You have enabled reCaptcha for more than one plugin. Please select at least one form location for each plugin and click Save Changes again.', 'defender-security' ); $this->errors['enable_buddypress'] = ''; } else { // Individual cases with plugins. if ( $this->is_unchecked_woo_locations() ) { $this->errors['enable_woo'] = esc_html__( 'reCAPTCHA for WooCommerce is enabled, but no WooCommerce forms are selected. Please select at least one WooCommerce form location and then click Save Changes again.', 'defender-security' ); } if ( $this->is_unchecked_buddypress_locations() ) { $this->errors['enable_buddypress'] = esc_html__( 'reCAPTCHA for BuddyPress is enabled, but no BuddyPress forms are selected. Please select at least one BuddyPress form location and then click Save Changes again.', 'defender-security' ); } } } /** * Disable for logged in users or enable. * * @return bool */ public function display_for_known_users() { return ! ( $this->disable_for_known_users && is_user_logged_in() ); } /** * Get module name. * * @return string */ public static function get_module_name(): string { return esc_html__( 'Google reCAPTCHA', 'defender-security' ); } }
| ver. 1.4 |
Github
|
.
| PHP 8.0.30 | Generation time: 0 |
proxy
|
phpinfo
|
Settings