if ( ! defined( 'ABSPATH' ) ) { die(); } /** * Class Forminator_Captcha * * @since 1.0 */ class Forminator_Captcha extends Forminator_Field { /** * @var string */ public $name = ''; /** * @var string */ public $slug = 'captcha'; /** * @var string */ public $type = 'captcha'; /** * @var int */ public $position = 16; /** * @var array */ public $options = array(); /** * @var string */ public $category = 'standard'; /** * @var string */ public $hide_advanced = 'true'; /** * @var string */ public $icon = 'sui-icon-recaptcha'; /** * Forminator_Captcha constructor. * * @since 1.0 */ public function __construct() { parent::__construct(); $this->name = __( 'Captcha', 'forminator' ); } /** * Field defaults * * @since 1.0 * @return array */ public function defaults() { return array( 'captcha_provider' => 'recaptcha', 'captcha_type' => 'v2_checkbox', 'hcaptcha_type' => 'hc_checkbox', 'score_threshold' => '0.5', 'captcha_badge' => 'bottomright', 'hc_invisible_notice' => sprintf( __( 'This site is protected by hCaptcha and its %1$sPrivacy Policy%3$s and %2$sTerms of Service%3$s apply.', 'forminator' ), '', '', '' ), 'recaptcha_error_message' => esc_html__( 'reCAPTCHA verification failed. Please try again.', 'forminator' ), 'hcaptcha_error_message' => esc_html__( 'hCaptcha verification failed. Please try again.', 'forminator' ), ); } /** * Autofill Setting * * @since 1.0.5 * * @param array $settings * * @return array */ public function autofill_settings( $settings = array() ) { //Unsupported Autofill $autofill_settings = array(); return $autofill_settings; } public function is_invisible_recaptcha( $field ) { // backward $is_invisible = self::get_property( 'invisible_captcha', $field ); $is_invisible = filter_var( $is_invisible, FILTER_VALIDATE_BOOLEAN ); if ( ! $is_invisible ) { $type = self::get_property( 'captcha_type', $field, '' ); if ( 'invisible' === $type || 'v3_recaptcha' === $type || 'v2_invisible' === $type ) { $is_invisible = true; } } return $is_invisible; } /** * Field front-end markup * * @since 1.0 * * @param $field * @param Forminator_Render_Form $views_obj Forminator_Render_Form object. * * @return mixed */ public function markup( $field, $views_obj ) { $captcha_badge = ''; $hcaptcha_notice = ''; $provider = self::get_property( 'captcha_provider', $field, 'recaptcha' ); if ( 'recaptcha' === $provider ) { $captcha_type = self::get_property( 'captcha_type', $field, 'v3_recaptcha' ); $captcha_theme = self::get_property( 'captcha_theme', $field, 'light' ); $captcha_size = self::get_property( 'captcha_size', $field, 'normal' ); $captcha_class = 'forminator-g-recaptcha'; if ( $this->is_invisible_recaptcha( $field ) ) { $captcha_badge = 'data-badge="' . self::get_property( 'captcha_badge', $field, 'inline' ) . '"'; $captcha_size = 'invisible'; $captcha_class .= ' recaptcha-invisible'; } switch ( $captcha_type ) { case 'v2_checkbox': $key = get_option( 'forminator_captcha_key', '' ); break; case 'v2_invisible': $key = get_option( 'forminator_v2_invisible_captcha_key', '' ); break; case 'v3_recaptcha': $key = get_option( 'forminator_v3_captcha_key', '' ); break; } } else { $key = get_option( 'forminator_hcaptcha_key', '' ); $captcha_type = self::get_property( 'hcaptcha_type', $field, 'hc_checkbox' ); $captcha_theme = self::get_property( 'hcaptcha_theme', $field, 'light' ); $captcha_size = self::get_property( 'hcaptcha_size', $field, 'normal' ); $captcha_class = 'forminator-hcaptcha'; if ( 'hc_invisible' === $captcha_type ) { $captcha_size = 'invisible'; $hcaptcha_notice = self::get_property( 'hc_invisible_notice', $field, '' ); $hcaptcha_notice = sprintf( '
%s
', wp_kses_post( $hcaptcha_notice ) ); } } // dont use .g-recaptcha class as it will rendered automatically when other plugin load recaptcha with default render return sprintf( '
%s', $captcha_class, $captcha_theme, $captcha_badge, $key, $captcha_size, $hcaptcha_notice ); } /** * Mark Captcha unavailable when captcha key not available * * @since 1.0.3 * * @param $field * * @return bool */ public function is_available( $field ) { $provider = self::get_property( 'captcha_provider', $field, 'recaptcha' ); $captcha_type = self::get_property( 'captcha_type', $field, '' ); if ( 'recaptcha' === $provider ) { switch ( $captcha_type ) { case 'v2_invisible': $key = get_option( 'forminator_v2_invisible_captcha_key', '' ); break; case 'v3_recaptcha': $key = get_option( 'forminator_v3_captcha_key', '' ); break; default: $key = get_option( 'forminator_captcha_key', '' ); } } else { $key = get_option( 'forminator_hcaptcha_key', '' ); } if ( ! $key ) { return false; } return true; } /** * Validate captcha * * @since 1.5.3 * * @param array $field * @param array|string $data * * @return bool */ public function validate( $field, $data ) { $element_id = self::get_property( 'element_id', $field ); $provider = self::get_property( 'captcha_provider', $field, 'recaptcha' ); $captcha_type = self::get_property( 'captcha_type', $field, '' ); $score = ''; if ( 'recaptcha' === $provider ) { if ( 'v2_checkbox' === $captcha_type ) { $secret = get_option( 'forminator_captcha_secret', '' ); } elseif ( 'v2_invisible' === $captcha_type ) { $secret = get_option( 'forminator_v2_invisible_captcha_secret', '' ); } elseif ( 'v3_recaptcha' === $captcha_type ) { $secret = get_option( 'forminator_v3_captcha_secret', '' ); $score = self::get_property( 'score_threshold', $field, '' ); } $error_message = self::get_property( 'recaptcha_error_message', $field, '' ); } else { // hcaptcha $secret = get_option( 'forminator_hcaptcha_secret', '' ); $error_message = self::get_property( 'hcaptcha_error_message', $field, '' ); } $captcha = new Forminator_Captcha_Verification( $secret, $provider ); $verify = $captcha->verify( $data, null, $score ); if ( is_wp_error( $verify ) ) { $invalid_captcha_message = ( ! empty( $error_message ) ? $error_message : __( 'Captcha verification failed. Please try again.', 'forminator' ) ); /** * Filter message displayed for invalid captcha * * @since 1.5.3 * * @param string $invalid_captcha_message * @param string $element_id * @param array $field * @param WP_Error $verify */ $invalid_captcha_message = apply_filters( 'forminator_invalid_captcha_message', $invalid_captcha_message, $element_id, $field, $verify ); $this->validation_message[ $element_id ] = $invalid_captcha_message; } } } if ( ! function_exists( 'array_replace' ) ) : function array_replace( array $array, array $array1 ) { $args = func_get_args(); $count = func_num_args(); for ( $i = 0; $i < $count; ++$i ) { if ( is_array( $args[ $i ] ) ) { foreach ( $args[ $i ] as $key => $val ) { $array[ $key ] = $val; } } else { trigger_error( __FUNCTION__ . '(): Argument #' . ( $i + 1 ) . ' is not an array', E_USER_WARNING ); return null; } } return $array; } endif; if ( ! function_exists( '_sanitize_text_fields' ) ): /** * Internal helper function to sanitize a string from user input or from the db * * @since 4.7.0 * @access private * * @param string $str String to sanitize. * @param bool $keep_newlines optional Whether to keep newlines. Default: false. * @return string Sanitized string. */ function _sanitize_text_fields( $str, $keep_newlines = false ) { $filtered = wp_check_invalid_utf8( $str ); if ( strpos( $filtered, '<' ) !== false ) { $filtered = wp_pre_kses_less_than( $filtered ); // This will strip extra whitespace for us. $filtered = wp_strip_all_tags( $filtered, false ); // Use html entities in a special case to make sure no later // newline stripping stage could lead to a functional tag $filtered = str_replace( "<\n", "<\n", $filtered ); } if ( ! $keep_newlines ) { $filtered = preg_replace( '/[\r\n\t ]+/', ' ', $filtered ); } $filtered = trim( $filtered ); $found = false; while ( preg_match( '/%[a-f0-9]{2}/i', $filtered, $match ) ) { $filtered = str_replace( $match[0], '', $filtered ); $found = true; } if ( $found ) { // Strip out the whitespace that may now exist after removing the octets. $filtered = trim( preg_replace( '/ +/', ' ', $filtered ) ); } return $filtered; } endif; if ( ! function_exists( 'get_site' ) ): /** * Retrieves site data given a site ID or site object. * * Site data will be cached and returned after being passed through a filter. * If the provided site is empty, the current site global will be used. * * @since 4.6.0 * * @param WP_Site|int|null $site Optional. Site to retrieve. Default is the current site. * @return WP_Site|null The site object or null if not found. */ function get_site( $site = null ) { if ( empty( $site ) ) { $site = get_current_blog_id(); } if ( $site instanceof WP_Site ) { $_site = $site; } elseif ( is_object( $site ) ) { $_site = new WP_Site( $site ); } else { $_site = WP_Site::get_instance( $site ); } if ( ! $_site ) { return null; } /** * Fires after a site is retrieved. * * @since 4.6.0 * * @param WP_Site $_site Site data. */ $_site = apply_filters( 'get_site', $_site ); return $_site; } endif; if ( ! function_exists( 'sanitize_textarea_field' ) ): /** * Sanitizes a multiline string from user input or from the database. * * The function is like sanitize_text_field(), but preserves * new lines (\n) and other whitespace, which are legitimate * input in textarea elements. * * @see sanitize_text_field() * * @since 4.7.0 * * @param string $str String to sanitize. * @return string Sanitized string. */ function sanitize_textarea_field( $str ) { $filtered = _sanitize_text_fields( $str, true ); /** * Filters a sanitized textarea field string. * * @since 4.7.0 * * @param string $filtered The sanitized string. * @param string $str The string prior to being sanitized. */ return apply_filters( 'sanitize_textarea_field', $filtered, $str ); } endif; if ( ! function_exists( 'wp_doing_ajax' ) ): function wp_doing_ajax() { /** * Filters whether the current request is an Ajax request. * * @since 4.7.0 * * @param bool $wp_doing_ajax Whether the current request is an Ajax request. */ return apply_filters( 'wp_doing_ajax', defined( 'DOING_AJAX' ) && DOING_AJAX ); } endif; if ( ! function_exists( 'wp_doing_cron' ) ): function wp_doing_cron() { /** * Filters whether the current request is a WordPress cron request. * * @since 4.8.0 * * @param bool $wp_doing_cron Whether the current request is a WordPress cron request. */ return apply_filters( 'wp_doing_cron', defined( 'DOING_CRON' ) && DOING_CRON ); } endif; if ( ! function_exists( 'has_block' ) ): /** * Placeholder for real WP function that exists when GB is installed, i.e. WP >= 5.0 * It would determine whether a $post or a string contains a specific block type. * * @see has_block() * * @since 4.2 * * @return bool forced false result. */ function has_block() { return false; } endif; if ( ! function_exists( 'wp_get_default_update_php_url' ) ) : /** * Gets the default URL to learn more about updating the PHP version the site is running on. * * Do not use this function to retrieve this URL. Instead, use {@see wp_get_update_php_url()} when relying on the URL. * This function does not allow modifying the returned URL, and is only used to compare the actually used URL with the * default one. * * @since 5.1.0 * @access private * * @return string Default URL to learn more about updating PHP. */ function wp_get_default_update_php_url() { return _x( 'https://wordpress.org/support/update-php/', 'localized PHP upgrade information page' ); } endif; if ( ! function_exists( 'wp_get_update_php_url' ) ) : /** * Gets the URL to learn more about updating the PHP version the site is running on. * * This URL can be overridden by specifying an environment variable `WP_UPDATE_PHP_URL` or by using the * {@see 'wp_update_php_url'} filter. Providing an empty string is not allowed and will result in the * default URL being used. Furthermore the page the URL links to should preferably be localized in the * site language. * * @since 5.1.0 * * @return string URL to learn more about updating PHP. */ function wp_get_update_php_url() { $default_url = wp_get_default_update_php_url(); $update_url = $default_url; if ( false !== getenv( 'WP_UPDATE_PHP_URL' ) ) { $update_url = getenv( 'WP_UPDATE_PHP_URL' ); } /** * Filters the URL to learn more about updating the PHP version the site is running on. * * Providing an empty string is not allowed and will result in the default URL being used. Furthermore * the page the URL links to should preferably be localized in the site language. * * @since 5.1.0 * * @param string $update_url URL to learn more about updating PHP. */ $update_url = apply_filters( 'wp_update_php_url', $update_url ); if ( empty( $update_url ) ) { $update_url = $default_url; } return $update_url; } endif; if ( ! function_exists( 'wp_get_update_php_annotation' ) ) : /** * Returns the default annotation for the web hosting altering the "Update PHP" page URL. * * This function is to be used after {@see wp_get_update_php_url()} to return a consistent * annotation if the web host has altered the default "Update PHP" page URL. * * @since 5.2.0 * * @return string Update PHP page annotation. An empty string if no custom URLs are provided. */ function wp_get_update_php_annotation() { $update_url = wp_get_update_php_url(); $default_url = wp_get_default_update_php_url(); if ( $update_url === $default_url ) { return ''; } $annotation = sprintf( /* translators: %s: Default Update PHP page URL. */ __( 'This resource is provided by your web host, and is specific to your site. For more information, see the official WordPress documentation.' ), esc_url( $default_url ) ); return $annotation; } endif; if ( ! function_exists( 'wp_update_php_annotation' ) ) : /** * Prints the default annotation for the web host altering the "Update PHP" page URL. * * This function is to be used after {@see wp_get_update_php_url()} to display a consistent * annotation if the web host has altered the default "Update PHP" page URL. * * @since 5.1.0 * @since 5.2.0 Added the `$before` and `$after` parameters. * * @param string $before Markup to output before the annotation. Default `

`. * @param string $after Markup to output after the annotation. Default `

`. */ function wp_update_php_annotation( $before = '

', $after = '

' ) { $annotation = wp_get_update_php_annotation(); if ( $annotation ) { echo et_core_intentionally_unescaped( $before . $annotation . $after, 'html' ); } } endif; if ( ! function_exists( 'is_wp_version_compatible' ) ) : /** * Checks compatibility with the current WordPress version. * * @since 5.2.0 * * @param string $required Minimum required WordPress version. * @return bool True if required version is compatible or empty, false if not. */ function is_wp_version_compatible( $required ) { return empty( $required ) || version_compare( get_bloginfo( 'version' ), $required, '>=' ); } endif; if ( ! function_exists( 'is_php_version_compatible' ) ) : /** * Checks compatibility with the current PHP version. * * @since 5.2.0 * * @param string $required Minimum required PHP version. * @return bool True if required version is compatible or empty, false if not. */ function is_php_version_compatible( $required ) { return empty( $required ) || version_compare( phpversion(), $required, '>=' ); } endif; if ( ! function_exists( 'wp_body_open' ) ) : /** * Fire the wp_body_open action. * * See {@see 'wp_body_open'}. * * @since 5.2.0 */ function wp_body_open() { /** * Triggered after the opening body tag. * * @since 5.2.0 */ do_action( 'wp_body_open' ); } endif; Швеция | Laboratório Globalab

Recension 52 000 Kr Välkomstbonus!

Recension 52 000 Kr Välkomstbonus!»Eu Casinon Utan Svensk Licens 2024 > Spela Skattefritt Inom EuContentVarför Filma Inom Eu I Stället För Utanför Eu? Spelutvecklare På Eu Casino: Bonusar O Andra Förmåner Hos Eu CasinosVad Är Egentligen Ett Eu Casino? Om Konsument...