init_recaptcha(); if ( isset( $_POST['submit'] ) ) { // WPCS: CSRF ok. $this->process_name(); $this->process_subject(); $this->process_email(); $this->process_message(); if ( Avada()->settings->get( 'contact_form_privacy_checkbox' ) ) { $this->process_data_privacy_confirmation(); } $this->process_recaptcha(); if ( ! $this->has_error ) { $this->send_email(); } } } /** * Setup ReCaptcha. * * @access private */ private function init_recaptcha() { $options = get_option( Avada::get_option_name() ); if ( $options['recaptcha_public'] && $options['recaptcha_private'] && ! function_exists( 'recaptcha_get_html' ) ) { if ( version_compare( PHP_VERSION, '5.3' ) >= 0 && ! class_exists( 'ReCaptcha' ) ) { require_once Avada::$template_dir_path . '/includes/recaptcha/src/autoload.php'; // We use a wrapper class to avoid fatal errors due to syntax differences on PHP 5.2. require_once Avada::$template_dir_path . '/includes/recaptcha/class-avada-recaptcha.php'; // Instantiate ReCaptcha object. $re_captcha_wrapper = new Avada_ReCaptcha( $options['recaptcha_private'] ); $this->re_captcha = $re_captcha_wrapper->recaptcha; } } } /** * Check to make sure that the name field is not empty. * * @access private */ private function process_name() { $post_contact_name = ( isset( $_POST['contact_name'] ) ) ? sanitize_text_field( wp_unslash( $_POST['contact_name'] ) ) : ''; // WPCS: CSRF ok. if ( '' === $post_contact_name || esc_attr__( 'Name (required)', 'Avada' ) === $post_contact_name ) { $this->has_error = true; } else { $this->name = $post_contact_name; } } /** * Subject field is not required. * * @access private */ private function process_subject() { $post_url = ( isset( $_POST['url'] ) ) ? sanitize_text_field( wp_unslash( $_POST['url'] ) ) : ''; // WPCS: CSRF ok. $this->subject = ( function_exists( 'stripslashes' ) ) ? stripslashes( $post_url ) : $post_url; } /** * Check to make sure sure that a valid email address is submitted. * * @access private */ private function process_email() { $email = ( isset( $_POST['email'] ) ) ? trim( sanitize_email( wp_unslash( $_POST['email'] ) ) ) : ''; // WPCS: CSRF ok. if ( '' === $email || esc_attr__( 'Email (required)', 'Avada' ) === $email ) { $this->has_error = true; } elseif ( false === filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { $this->has_error = true; } else { $this->email = trim( $email ); } } /** * Check to make sure a message was entered. * * @access private */ private function process_message() { if ( function_exists( 'sanitize_textarea_field' ) ) { $message = ( isset( $_POST['msg'] ) ) ? sanitize_textarea_field( wp_unslash( $_POST['msg'] ) ) : ''; // WPCS: CSRF ok. } else { $message = ( isset( $_POST['msg'] ) ) ? wp_unslash( $_POST['msg'] ) : ''; // WPCS: CSRF ok sanitization ok. } if ( '' === $message || esc_attr__( 'Message', 'Avada' ) === $message ) { $this->has_error = true; } else { $this->message = ( function_exists( 'stripslashes' ) ) ? stripslashes( $message ) : $message; } } /** * Check privacy data checkbox. * * @since 5.5 * @access private * @return void */ private function process_data_privacy_confirmation() { $data_privacy_confirmation = ( isset( $_POST['data_privacy_confirmation'] ) ) ? sanitize_text_field( wp_unslash( $_POST['data_privacy_confirmation'] ) ) : 0; // WPCS: CSRF ok. if ( ! $data_privacy_confirmation ) { $this->has_error = true; } else { $this->data_privacy_confirmation = (int) $data_privacy_confirmation; } } /** * Check recaptcha. * * @access private */ private function process_recaptcha() { if ( $this->re_captcha ) { $re_captcha_response = null; // Was there a reCAPTCHA response? $post_recaptcha_response = ( isset( $_POST['g-recaptcha-response'] ) ) ? trim( wp_unslash( $_POST['g-recaptcha-response'] ) ) : ''; // WPCS: CSRF ok sanitization ok. $server_remote_addr = ( isset( $_SERVER['REMOTE_ADDR'] ) ) ? trim( wp_unslash( $_SERVER['REMOTE_ADDR'] ) ) : ''; // WPCS: sanitization ok. if ( $post_recaptcha_response && ! empty( $post_recaptcha_response ) ) { $re_captcha_response = $this->re_captcha->verify( $post_recaptcha_response, $server_remote_addr ); } // Check the reCaptcha response. if ( null == $re_captcha_response || ! $re_captcha_response->isSuccess() ) { $this->has_error = true; } } } /** * Send the email. * * @access private */ private function send_email() { $name = esc_html( $this->name ); $email = sanitize_email( $this->email ); $subject = wp_filter_kses( $this->subject ); $message = wp_filter_kses( $this->message ); $data_privacy_confirmation = ( $this->data_privacy_confirmation ) ? esc_html__( 'confirmed', 'Avada' ) : ''; if ( function_exists( 'stripslashes' ) ) { $subject = stripslashes( $subject ); $message = stripslashes( $message ); } $message = html_entity_decode( $message ); $email_to = Avada()->settings->get( 'email_address' ); /* translators: The name. */ $body = sprintf( esc_attr__( 'Name: %s', 'Avada' ), " $name \n\n" ); /* translators: The email. */ $body .= sprintf( esc_attr__( 'Email: %s', 'Avada' ), " $email \n\n" ); /* translators: The subject. */ $body .= sprintf( esc_attr__( 'Subject: %s', 'Avada' ), " $subject \n\n" ); /* translators: The comments. */ $body .= sprintf( esc_attr__( 'Message: %s', 'Avada' ), "\n$message \n\n" ); if ( Avada()->settings->get( 'contact_form_privacy_checkbox' ) ) { /* translators: The data privacy terms. */ $body .= sprintf( esc_attr__( 'Data Privacy Terms: %s', 'Avada' ), " $data_privacy_confirmation" ); } $headers = 'Reply-To: ' . $name . ' <' . $email . '>' . "\r\n"; wp_mail( $email_to, $subject, $body, $headers ); $this->email_sent = true; if ( $this->email_sent ) { $_POST['contact_name'] = ''; $_POST['email'] = ''; $_POST['url'] = ''; $_POST['msg'] = ''; $_POST['data_privacy_confirmation'] = 0; $this->name = ''; $this->email = ''; $this->subject = ''; $this->message = ''; $this->data_privacy_confirmation = 0; } } }