Captcha()
Description #
The Captcha type field object.
Source #
File: addons/recaptcha/recaptcha/class-captcha.php
class Captcha extends Field {
/**
* The field type.
*
* @var string
*/
public $type = 'captcha';
private $response = null;
/**
* Prepare field.
*
* @return void
*/
protected function prepare() {
$this->args = wp_parse_args(
$this->args, array(
'label' => __( 'AnsPress reCaptcha Field', 'anspress-question-answer' ),
)
);
}
/**
* Validate captcha.
*
* @return boolean
*/
public function sanitize() {
if ( true === $this->sanitized ) {
return $this->sanitized_value;
}
require_once ANSPRESS_ADDONS_DIR . '/recaptcha/recaptcha/autoload.php';
if ( ap_opt( 'recaptcha_method' ) === 'curl' ) {
$method = new \ReCaptcha\RequestMethod\CurlPost();
} else {
$method = new \ReCaptcha\RequestMethod\Post();
}
$recaptcha = new \ReCaptcha\ReCaptcha(
trim( ap_opt( 'recaptcha_secret_key' ) ),
$method
);
$ip = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP ); //@codingStandardsIgnoreLine.
$captcha_response = ap_sanitize_unslash( 'g-recaptcha-response', 'r' );
$this->response = $recaptcha->verify( $captcha_response, $ip );
$this->sanitized = true;
if ( $this->response->isSuccess() ) {
$this->sanitized_value = true;
} else {
$this->add_error( 'captcha', __( 'Failed to verify captcha. Please try again.', 'anspress-question-answer' ) );
$this->sanitized_value = false;
}
}
/**
* Field markup.
*
* @return void
*/
public function field_markup() {
parent::field_markup();
if ( ap_opt( 'recaptcha_site_key' ) === '' ) {
$this->add_html( '<div class="ap-notice red">' . __( 'Unable to render captcha. Please add reCpatcha keys in AnsPress options.', 'anspress-question-answer' ) . '</div>' );
return;
}
$this->add_html( '<div class="g-recaptcha load-recaptcha" id="' . $this->id() . '" data-sitekey="' . ap_opt( 'recaptcha_site_key' ) . '"></div>' );
$this->add_html( "<script type=\"text/javascript\" src=\"https://www.google.com/recaptcha/api.js?hl=" . get_locale() . "&onload=apCpatchaLoaded&render=explicit\"></script>" );
/** This action is documented in lib/form/class-input.php */
do_action_ref_array( 'ap_after_field_markup', [ &$this ] );
}
}
Expand full source code Collapse full source code View on GitHub: addons/recaptcha/recaptcha/class-captcha.php:29
Add your comment