| @@ -1,348 +1,295 @@ | ||
| 1 | -<?php | |
| 2 | - | |
| 3 | -namespace Getwid\Blocks; | |
| 4 | - | |
| 5 | -class ContactForm extends \Getwid\Blocks\AbstractBlock { | |
| 6 | - | |
| 7 | - protected static $blockName = 'getwid/contact-form'; | |
| 8 | - | |
| 9 | - public function __construct() { | |
| 10 | - | |
| 11 | - parent::__construct( self::$blockName ); | |
| 12 | - | |
| 13 | - add_action( 'wp_ajax_getwid_update_recaptcha_credentials', [ $this, 'update_recaptcha_credentials' ] ); | |
| 14 | - | |
| 15 | - add_action( 'wp_ajax_getwid_send_mail', [ $this, 'send' ] ); | |
| 16 | - add_action( 'wp_ajax_nopriv_getwid_send_mail', [ $this, 'send' ] ); | |
| 17 | - | |
| 18 | - $this->register_contact_form_blocks(); | |
| 19 | - } | |
| 20 | - | |
| 21 | - public function getLabel() { | |
| 22 | - return __('Contact Form', 'getwid'); | |
| 23 | - } | |
| 24 | - | |
| 25 | - private function register_contact_form_blocks() { | |
| 26 | - | |
| 27 | - /* #region register all blocks */ | |
| 28 | - register_block_type( | |
| 29 | - 'getwid/contact-form', | |
| 30 | - array( | |
| 31 | - 'render_callback' => [ $this, 'render_callback' ] | |
| 32 | - ) | |
| 33 | - ); | |
| 34 | - | |
| 35 | - $field_name = 'getwid/field-name'; | |
| 36 | - register_block_type( | |
| 37 | - $field_name, | |
| 38 | - array( | |
| 39 | - 'render_callback' => [ $this, 'render_field_name_block' ] | |
| 40 | - ) | |
| 41 | - ); | |
| 42 | - | |
| 43 | - $field_email = 'getwid/field-email'; | |
| 44 | - register_block_type( | |
| 45 | - $field_email, | |
| 46 | - array( | |
| 47 | - 'render_callback' => [ $this, 'render_field_email_block' ] | |
| 48 | - ) | |
| 49 | - ); | |
| 50 | - | |
| 51 | - $field_textarea = 'getwid/field-textarea'; | |
| 52 | - register_block_type( | |
| 53 | - $field_textarea, | |
| 54 | - array( | |
| 55 | - 'render_callback' => [ $this, 'render_field_textarea_block' ] | |
| 56 | - ) | |
| 57 | - ); | |
| 58 | - /* #endregion */ | |
| 59 | - } | |
| 60 | - | |
| 61 | - /* #region render inner blocks methods */ | |
| 62 | - public function render_field_name_block( $attributes ) { | |
| 63 | - ob_start();?> | |
| 64 | - <?php getwid_get_template_part( 'contact-form/field-name', $attributes, false ); ?><?php | |
| 65 | - | |
| 66 | - $result = ob_get_clean(); | |
| 67 | - return $result; | |
| 68 | - } | |
| 69 | - | |
| 70 | - public function render_field_email_block( $attributes ) { | |
| 71 | - ob_start();?> | |
| 72 | - <?php getwid_get_template_part( 'contact-form/field-email', $attributes, false ); ?><?php | |
| 73 | - | |
| 74 | - $result = ob_get_clean(); | |
| 75 | - return $result; | |
| 76 | - } | |
| 77 | - | |
| 78 | - public function render_field_textarea_block( $attributes ) { | |
| 79 | - ob_start();?> | |
| 80 | - <?php getwid_get_template_part( 'contact-form/field-textarea', $attributes, false ); ?><?php | |
| 81 | - | |
| 82 | - $result = ob_get_clean(); | |
| 83 | - return $result; | |
| 84 | - } | |
| 85 | - | |
| 86 | - public function render_captcha_block( $attributes ) { | |
| 87 | - | |
| 88 | - $site_key = get_option( 'getwid_recaptcha_v2_site_key', '' ); | |
| 89 | - | |
| 90 | - $extra_attr = array( | |
| 91 | - 'site_key' => $site_key | |
| 92 | - ); | |
| 93 | - | |
| 94 | - $result = ''; | |
| 95 | - if ( $site_key ) { | |
| 96 | - | |
| 97 | - wp_enqueue_script( 'recaptcha', 'https://www.google.com/recaptcha/api.js?render=explicit' ); | |
| 98 | - | |
| 99 | - ob_start();?> | |
| 100 | - <?php getwid_get_template_part( 'contact-form/captcha', $attributes, false, $extra_attr ); ?><?php | |
| 101 | - | |
| 102 | - $result = ob_get_clean(); | |
| 103 | - } | |
| 104 | - | |
| 105 | - return $result; | |
| 106 | - } | |
| 107 | - /* #endregion */ | |
| 108 | - | |
| 109 | - public function block_frontend_assets() { | |
| 110 | - | |
| 111 | - if ( is_admin() ) { | |
| 112 | - return; | |
| 113 | - } | |
| 114 | - | |
| 115 | - if ( FALSE == getwid()->assetsOptimization()->load_assets_on_demand() ) { | |
| 116 | - return; | |
| 117 | - } | |
| 118 | - | |
| 119 | - $rtl = is_rtl() ? '.rtl' : ''; | |
| 120 | - | |
| 121 | - wp_enqueue_style( | |
| 122 | - self::$blockName, | |
| 123 | - getwid_get_plugin_url( 'assets/blocks/contact-form/style' . $rtl . '.css' ), | |
| 124 | - [], | |
| 125 | - getwid()->settings()->getVersion() | |
| 126 | - ); | |
| 127 | - | |
| 128 | - wp_enqueue_script( | |
| 129 | - self::$blockName, | |
| 130 | - getwid_get_plugin_url( 'assets/blocks/contact-form/frontend.js' ), | |
| 131 | - [ 'jquery' ], | |
| 132 | - getwid()->settings()->getVersion(), | |
| 133 | - true | |
| 134 | - ); | |
| 135 | - | |
| 136 | - $inline_script = | |
| 137 | - 'var Getwid = Getwid || {};' . | |
| 138 | - 'Getwid["ajax_url"] = ' . json_encode( admin_url( 'admin-ajax.php' ) ) . ';' . | |
| 139 | - 'Getwid["nonces"] = ' . json_encode( | |
| 140 | - array( 'contact_form' => wp_create_nonce( 'getwid_nonce_send_contact_form' ) ) | |
| 141 | - ) . ';' | |
| 142 | - ; | |
| 143 | - | |
| 144 | - wp_add_inline_script( | |
| 145 | - self::$blockName, | |
| 146 | - $inline_script, | |
| 147 | - 'before' | |
| 148 | - ); | |
| 149 | - | |
| 150 | - } | |
| 151 | - | |
| 152 | - public function render_callback( $attributes, $content ) { | |
| 153 | - | |
| 154 | - $class = 'wp-block-getwid-contact-form'; | |
| 155 | - $block_name = $class; | |
| 156 | - | |
| 157 | - if ( isset( $attributes[ 'className' ] ) ) { | |
| 158 | - $class .= ' ' . $attributes[ 'className' ]; | |
| 159 | - } | |
| 160 | - | |
| 161 | - if ( isset( $attributes[ 'align' ] ) ) { | |
| 162 | - $class .= ' align' . $attributes[ 'align' ]; | |
| 163 | - } | |
| 164 | - | |
| 165 | - $button_style = ''; | |
| 166 | - $button_class = ''; | |
| 167 | - | |
| 168 | - getwid_custom_color_style_and_class( $button_style, $button_class, $attributes, 'color' ); | |
| 169 | - getwid_custom_color_style_and_class( $button_style, $button_class, $attributes, 'background' ); | |
| 170 | - | |
| 171 | - $recaptcha_theme = isset( $attributes['recaptchaTheme'] ) ? $attributes['recaptchaTheme'] : ''; | |
| 172 | - $captcha = $this->render_captcha_block( [ 'theme' => $recaptcha_theme ] ); | |
| 173 | - | |
| 174 | - $extra_attr = array( | |
| 175 | - 'class' => $class, | |
| 176 | - 'block_name' => $block_name, | |
| 177 | - 'content' => $content . $captcha, | |
| 178 | - | |
| 179 | - 'button_style' => $button_style, | |
| 180 | - 'button_class' => $button_class | |
| 181 | - ); | |
| 182 | - | |
| 183 | - ob_start();?> | |
| 184 | - <div class="<?php echo esc_attr( $class ); ?>" > | |
| 185 | - <?php getwid_get_template_part( 'contact-form/contact-form', $attributes, false, $extra_attr ); ?> | |
| 186 | - </div><?php | |
| 187 | - | |
| 188 | - $result = ob_get_clean(); | |
| 189 | - | |
| 190 | - $this->block_frontend_assets(); | |
| 191 | - | |
| 192 | - return $result; | |
| 193 | - } | |
| 194 | - | |
| 195 | - public function send() { | |
| 196 | - | |
| 197 | - check_ajax_referer( 'getwid_nonce_send_contact_form', 'nonce' ); | |
| 198 | - | |
| 199 | - $recaptcha_secret_key = get_option( 'getwid_recaptcha_v2_secret_key', false ); | |
| 200 | - | |
| 201 | - if ( $recaptcha_secret_key ) { | |
| 202 | - | |
| 203 | - if ( empty( $_POST['data']['g-recaptcha-response'] ) ) { | |
| 204 | - wp_send_json_error( $this->get_error( 'bad-request' ) ); | |
| 205 | - } | |
| 206 | - | |
| 207 | - $recaptcha_challenge = sanitize_text_field( wp_unslash( $_POST['data']['g-recaptcha-response'] ) ); | |
| 208 | - | |
| 209 | - $request = wp_remote_get( | |
| 210 | - 'https://google.com/recaptcha/api/siteverify?secret=' . $recaptcha_secret_key . '&response=' . $recaptcha_challenge, | |
| 211 | - array( 'timeout' => 15 ) | |
| 212 | - ); | |
| 213 | - | |
| 214 | - $response = json_decode( wp_remote_retrieve_body( $request ), false ); | |
| 215 | - | |
| 216 | - $errors = ''; | |
| 217 | - if ( ! $response->{ 'success' } ) { | |
| 218 | - foreach ( $response->{ 'error-codes' } as $index => $value ) { | |
| 219 | - $errors .= $this->get_error( $value ); | |
| 220 | - } | |
| 221 | - wp_send_json_error( $errors ); | |
| 222 | - } else { | |
| 223 | - $this->send_mail( $_POST['data'] ); | |
| 224 | - } | |
| 225 | - | |
| 226 | - } else { | |
| 227 | - $this->send_mail( $_POST['data'] ); | |
| 228 | - } | |
| 229 | - } | |
| 230 | - | |
| 231 | - private function send_mail( $data ) { | |
| 232 | - | |
| 233 | - $to = get_option( 'admin_email' ); | |
| 234 | - | |
| 235 | - $subject = esc_html__( 'Contact Form', 'getwid' ); | |
| 236 | - | |
| 237 | - if ( ! empty( $data['subject'] ) ) { | |
| 238 | - $subject = sprintf( | |
| 239 | - //translators: %s is email subject | |
| 240 | - esc_html__( 'Contact Form: %s', 'getwid' ), | |
| 241 | - sanitize_text_field( wp_unslash( $data[ 'subject' ] ) ) | |
| 242 | - ); | |
| 243 | - } | |
| 244 | - | |
| 245 | - $email = sanitize_email( wp_unslash( $data[ 'email' ] ) ); | |
| 246 | - $name = sanitize_text_field( wp_unslash( $data[ 'name' ] ) ); | |
| 247 | - $message[] = sanitize_textarea_field( wp_unslash( $data[ 'message' ] ) ); | |
| 248 | - $message[] = '<br/><br/>'; | |
| 249 | - $message[] = '<hr/>'; | |
| 250 | - $message[] = sprintf( | |
| 251 | - //translators: %s is a blogname | |
| 252 | - __( 'This e-mail was sent from a contact form on %s', 'getwid' ), | |
| 253 | - get_option( 'blogname' ) | |
| 254 | - ); | |
| 255 | - | |
| 256 | - $body = implode( '', $message ); | |
| 257 | - | |
| 258 | - if ( $email ) { | |
| 259 | - $headers = array( 'Reply-To: ' . $name . ' <' . $email . '>' ); | |
| 260 | - } | |
| 261 | - | |
| 262 | - $response = getwid()->mailer()->send( $to, $subject, $body, $headers ); | |
| 263 | - | |
| 264 | - if ( $response ) { | |
| 265 | - wp_send_json_success( | |
| 266 | - __( 'Thank you for your message. It has been sent.', | |
| 267 | - 'getwid' | |
| 268 | - ) ); | |
| 269 | - return; | |
| 270 | - } | |
| 271 | - | |
| 272 | - wp_send_json_error( | |
| 273 | - __('There was an error trying to send your message. Please try again later.', 'getwid') | |
| 274 | - ); | |
| 275 | - } | |
| 276 | - | |
| 277 | - public function update_recaptcha_credentials() { | |
| 278 | - | |
| 279 | - check_ajax_referer( 'getwid_nonce_recaptcha_v2', 'nonce' ); | |
| 280 | - | |
| 281 | - if ( ! current_user_can( 'manage_options' ) ) { | |
| 282 | - wp_send_json_error(); | |
| 283 | - } | |
| 284 | - | |
| 285 | - $site_key = sanitize_text_field( wp_unslash( $_POST['data']['site_key'] ) ); | |
| 286 | - $secret_key = sanitize_text_field( wp_unslash( $_POST['data']['secret_key'] ) ); | |
| 287 | - | |
| 288 | - if ( ! empty( $site_key ) ) { | |
| 289 | - update_option( 'getwid_recaptcha_v2_site_key', $site_key ); | |
| 290 | - } else { | |
| 291 | - delete_option( 'getwid_recaptcha_v2_site_key' ); | |
| 292 | - } | |
| 293 | - | |
| 294 | - if ( ! empty( $secret_key ) ) { | |
| 295 | - update_option( 'getwid_recaptcha_v2_secret_key', $secret_key ); | |
| 296 | - } else { | |
| 297 | - delete_option( 'getwid_recaptcha_v2_secret_key' ); | |
| 298 | - } | |
| 299 | - | |
| 300 | - wp_send_json_success(); | |
| 301 | - } | |
| 302 | - | |
| 303 | - private function get_error( $error_code ) { | |
| 304 | - switch ( $error_code ) { | |
| 305 | - case 'bad-request': | |
| 306 | - return __( 'The request is invalid or malformed.', | |
| 307 | - 'getwid' | |
| 308 | - ); | |
| 309 | - break; | |
| 310 | - | |
| 311 | - case 'missing-input-secret': | |
| 312 | - return __( 'The secret parameter is missing.', | |
| 313 | - 'getwid' | |
| 314 | - ); | |
| 315 | - break; | |
| 316 | - | |
| 317 | - case 'missing-input-response': | |
| 318 | - return __( 'Please check the captcha.', | |
| 319 | - 'getwid' | |
| 320 | - ); | |
| 321 | - break; | |
| 322 | - | |
| 323 | - case 'invalid-input-secret': | |
| 324 | - return __( 'The secret parameter is invalid or malformed.', | |
| 325 | - 'getwid' | |
| 326 | - ); | |
| 327 | - break; | |
| 328 | - | |
| 329 | - case 'invalid-input-response': | |
| 330 | - return __( 'The response parameter is invalid or malformed.', | |
| 331 | - 'getwid' | |
| 332 | - ); | |
| 333 | - break; | |
| 334 | - | |
| 335 | - case 'timeout-or-duplicate': | |
| 336 | - return __( 'The response is no longer valid: either is too old or has been used previously.', | |
| 337 | - 'getwid' | |
| 338 | - ); | |
| 339 | - break; | |
| 340 | - default: | |
| 341 | - return; | |
| 342 | - } | |
| 343 | - } | |
| 344 | -} | |
| 345 | - | |
| 346 | -getwid()->blocksManager()->addBlock( | |
| 347 | - new \Getwid\Blocks\ContactForm() | |
| 348 | -); | |
| 1 | +<?php | |
| 2 | + | |
| 3 | +namespace Getwid\Blocks; | |
| 4 | + | |
| 5 | +class ContactForm extends AbstractBlock { | |
| 6 | + | |
| 7 | + public function __construct() { | |
| 8 | + | |
| 9 | + parent::__construct( 'getwid/contact-form' ); | |
| 10 | + | |
| 11 | + add_action( 'wp_ajax_getwid_update_recaptcha_credentials', array( $this, 'update_recaptcha_credentials' ) ); | |
| 12 | + | |
| 13 | + add_action( 'wp_ajax_getwid_send_mail', array( $this, 'send' ) ); | |
| 14 | + add_action( 'wp_ajax_nopriv_getwid_send_mail', array( $this, 'send' ) ); | |
| 15 | + | |
| 16 | + $this->register_contact_form_blocks(); | |
| 17 | + | |
| 18 | + add_action( 'enqueue_block_assets', array( $this, 'block_frontend_assets' ) ); | |
| 19 | + } | |
| 20 | + | |
| 21 | + public function get_label() { | |
| 22 | + return __( 'Contact Form', 'getwid' ); | |
| 23 | + } | |
| 24 | + | |
| 25 | + private function register_contact_form_blocks() { | |
| 26 | + | |
| 27 | + register_block_type( | |
| 28 | + getwid_get_plugin_path( 'assets/blocks/contact-form/contact-form' ), | |
| 29 | + array( | |
| 30 | + 'render_callback' => array( $this, 'render_callback' ), | |
| 31 | + ) | |
| 32 | + ); | |
| 33 | + | |
| 34 | + register_block_type( | |
| 35 | + getwid_get_plugin_path( 'assets/blocks/contact-form/field-name' ), | |
| 36 | + array( | |
| 37 | + 'render_callback' => array( $this, 'render_field_name_block' ), | |
| 38 | + ) | |
| 39 | + ); | |
| 40 | + | |
| 41 | + register_block_type( | |
| 42 | + getwid_get_plugin_path( 'assets/blocks/contact-form/field-email' ), | |
| 43 | + array( | |
| 44 | + 'render_callback' => array( $this, 'render_field_email_block' ), | |
| 45 | + ) | |
| 46 | + ); | |
| 47 | + | |
| 48 | + register_block_type( | |
| 49 | + getwid_get_plugin_path( 'assets/blocks/contact-form/field-textarea' ), | |
| 50 | + array( | |
| 51 | + 'render_callback' => array( $this, 'render_field_textarea_block' ), | |
| 52 | + ) | |
| 53 | + ); | |
| 54 | + } | |
| 55 | + | |
| 56 | + public function render_field_name_block( $attributes ) { | |
| 57 | + | |
| 58 | + ob_start(); | |
| 59 | + getwid_get_template_part( 'contact-form/field-name', $attributes, false ); | |
| 60 | + | |
| 61 | + return ob_get_clean(); | |
| 62 | + } | |
| 63 | + | |
| 64 | + public function render_field_email_block( $attributes ) { | |
| 65 | + | |
| 66 | + ob_start(); | |
| 67 | + getwid_get_template_part( 'contact-form/field-email', $attributes, false ); | |
| 68 | + | |
| 69 | + return ob_get_clean(); | |
| 70 | + } | |
| 71 | + | |
| 72 | + public function render_field_textarea_block( $attributes ) { | |
| 73 | + | |
| 74 | + ob_start(); | |
| 75 | + getwid_get_template_part( 'contact-form/field-textarea', $attributes, false ); | |
| 76 | + | |
| 77 | + return ob_get_clean(); | |
| 78 | + } | |
| 79 | + | |
| 80 | + public function render_captcha_block( $attributes ) { | |
| 81 | + | |
| 82 | + $site_key = get_option( 'getwid_recaptcha_v2_site_key', '' ); | |
| 83 | + | |
| 84 | + $extra_attr = array( | |
| 85 | + 'site_key' => $site_key, | |
| 86 | + ); | |
| 87 | + | |
| 88 | + $result = ''; | |
| 89 | + if ( $site_key ) { | |
| 90 | + | |
| 91 | + wp_enqueue_script( 'recaptcha', 'https://www.google.com/recaptcha/api.js?render=explicit' ); | |
| 92 | + | |
| 93 | + ob_start(); | |
| 94 | + getwid_get_template_part( 'contact-form/captcha', $attributes, false, $extra_attr ); | |
| 95 | + | |
| 96 | + $result = ob_get_clean(); | |
| 97 | + } | |
| 98 | + | |
| 99 | + return $result; | |
| 100 | + } | |
| 101 | + | |
| 102 | + public function block_frontend_assets() { | |
| 103 | + | |
| 104 | + if ( is_admin() ) { | |
| 105 | + return; | |
| 106 | + } | |
| 107 | + | |
| 108 | + $inline_script = 'var Getwid = Getwid || {};'; | |
| 109 | + $inline_script .= 'Getwid["ajax_url"] = ' . wp_json_encode( admin_url( 'admin-ajax.php' ) ) . ';'; | |
| 110 | + $inline_script .= 'Getwid["nonces"] = ' . wp_json_encode( | |
| 111 | + array( | |
| 112 | + 'contact_form' => wp_create_nonce( 'getwid_nonce_send_contact_form' ), | |
| 113 | + ) | |
| 114 | + ) . ';'; | |
| 115 | + | |
| 116 | + wp_add_inline_script( | |
| 117 | + 'getwid-contact-form-view-script', | |
| 118 | + $inline_script, | |
| 119 | + 'before' | |
| 120 | + ); | |
| 121 | + } | |
| 122 | + | |
| 123 | + public function render_callback( $attributes, $content ) { | |
| 124 | + | |
| 125 | + $class = 'wp-block-getwid-contact-form'; | |
| 126 | + $block_name = $class; | |
| 127 | + | |
| 128 | + $button_style = ''; | |
| 129 | + $button_class = ''; | |
| 130 | + | |
| 131 | + getwid_custom_color_style_and_class( $button_style, $button_class, $attributes, 'color' ); | |
| 132 | + getwid_custom_color_style_and_class( $button_style, $button_class, $attributes, 'background' ); | |
| 133 | + | |
| 134 | + $recaptcha_theme = isset( $attributes['recaptchaTheme'] ) ? $attributes['recaptchaTheme'] : ''; | |
| 135 | + $captcha = $this->render_captcha_block( array( 'theme' => $recaptcha_theme ) ); | |
| 136 | + | |
| 137 | + $extra_attr = array( | |
| 138 | + 'class' => $class, | |
| 139 | + 'block_name' => $block_name, | |
| 140 | + 'content' => $content . $captcha, | |
| 141 | + 'button_style' => $button_style, | |
| 142 | + 'button_class' => $button_class, | |
| 143 | + ); | |
| 144 | + | |
| 145 | + $wrapper_attributes = get_block_wrapper_attributes(); | |
| 146 | + | |
| 147 | + ob_start(); | |
| 148 | + ?> | |
| 149 | + <div <?php echo $wrapper_attributes; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> | |
| 150 | + <?php getwid_get_template_part( 'contact-form/contact-form', $attributes, false, $extra_attr ); ?> | |
| 151 | + </div> | |
| 152 | + <?php | |
| 153 | + | |
| 154 | + return ob_get_clean(); | |
| 155 | + } | |
| 156 | + | |
| 157 | + public function send() { | |
| 158 | + | |
| 159 | + check_ajax_referer( 'getwid_nonce_send_contact_form', 'nonce' ); | |
| 160 | + | |
| 161 | + $recaptcha_secret_key = get_option( 'getwid_recaptcha_v2_secret_key', false ); | |
| 162 | + | |
| 163 | + if ( $recaptcha_secret_key ) { | |
| 164 | + | |
| 165 | + if ( empty( $_POST['data']['g-recaptcha-response'] ) ) { | |
| 166 | + wp_send_json_error( $this->get_error( 'bad-request' ) ); | |
| 167 | + } | |
| 168 | + | |
| 169 | + $recaptcha_challenge = sanitize_text_field( wp_unslash( $_POST['data']['g-recaptcha-response'] ) ); | |
| 170 | + | |
| 171 | + $request = wp_remote_get( | |
| 172 | + 'https://google.com/recaptcha/api/siteverify?secret=' . $recaptcha_secret_key . '&response=' . $recaptcha_challenge, | |
| 173 | + array( 'timeout' => 15 ) | |
| 174 | + ); | |
| 175 | + | |
| 176 | + $response = json_decode( wp_remote_retrieve_body( $request ), false ); | |
| 177 | + | |
| 178 | + $errors = ''; | |
| 179 | + if ( ! $response->{'success'} ) { | |
| 180 | + foreach ( $response->{'error-codes'} as $value ) { | |
| 181 | + $errors .= $this->get_error( $value ); | |
| 182 | + } | |
| 183 | + wp_send_json_error( $errors ); | |
| 184 | + } else { | |
| 185 | + $this->send_mail( $_POST['data'] ); | |
| 186 | + } | |
| 187 | + } else { | |
| 188 | + $this->send_mail( $_POST['data'] ); | |
| 189 | + } | |
| 190 | + } | |
| 191 | + | |
| 192 | + private function send_mail( $data ) { | |
| 193 | + | |
| 194 | + $default_recipient = get_option( 'admin_email' ); | |
| 195 | + $recipient = get_option( 'getwid_contact_form_recipient_email', '' ); | |
| 196 | + $to = '' !== $recipient ? $recipient : $default_recipient; | |
| 197 | + | |
| 198 | + $subject = esc_html__( 'Contact Form', 'getwid' ); | |
| 199 | + | |
| 200 | + if ( ! empty( $data['subject'] ) ) { | |
| 201 | + $subject = sprintf( | |
| 202 | + // translators: %s is email subject. | |
| 203 | + esc_html__( 'Contact Form: %s', 'getwid' ), | |
| 204 | + sanitize_text_field( wp_unslash( $data['subject'] ) ) | |
| 205 | + ); | |
| 206 | + } | |
| 207 | + | |
| 208 | + $email = sanitize_email( wp_unslash( $data['email'] ) ); | |
| 209 | + $name = sanitize_text_field( wp_unslash( $data['name'] ) ); | |
| 210 | + $message = array(); | |
| 211 | + $message[] = sanitize_textarea_field( wp_unslash( $data['message'] ) ); | |
| 212 | + $message[] = '<br/><br/>'; | |
| 213 | + $message[] = '<hr/>'; | |
| 214 | + $message[] = sprintf( | |
| 215 | + // translators: %s is a blogname. | |
| 216 | + __( 'This e-mail was sent from a contact form on %s', 'getwid' ), | |
| 217 | + get_option( 'blogname' ) | |
| 218 | + ); | |
| 219 | + | |
| 220 | + $body = implode( '', $message ); | |
| 221 | + | |
| 222 | + if ( $email ) { | |
| 223 | + $headers = array( 'Reply-To: ' . $name . ' <' . $email . '>' ); | |
| 224 | + } | |
| 225 | + | |
| 226 | + $response = getwid()->mailer()->send( $to, $subject, $body, $headers ); | |
| 227 | + | |
| 228 | + if ( $response ) { | |
| 229 | + wp_send_json_success( | |
| 230 | + __( 'Thank you for your message. It has been sent.', 'getwid' ) | |
| 231 | + ); | |
| 232 | + return; | |
| 233 | + } | |
| 234 | + | |
| 235 | + wp_send_json_error( | |
| 236 | + __( 'There was an error trying to send your message. Please try again later.', 'getwid' ) | |
| 237 | + ); | |
| 238 | + } | |
| 239 | + | |
| 240 | + public function update_recaptcha_credentials() { | |
| 241 | + | |
| 242 | + check_ajax_referer( 'getwid_nonce_recaptcha_v2', 'nonce' ); | |
| 243 | + | |
| 244 | + if ( ! current_user_can( 'manage_options' ) ) { | |
| 245 | + wp_send_json_error(); | |
| 246 | + } | |
| 247 | + | |
| 248 | + $site_key = sanitize_text_field( wp_unslash( $_POST['data']['site_key'] ) ); | |
| 249 | + $secret_key = sanitize_text_field( wp_unslash( $_POST['data']['secret_key'] ) ); | |
| 250 | + | |
| 251 | + if ( ! empty( $site_key ) ) { | |
| 252 | + update_option( 'getwid_recaptcha_v2_site_key', $site_key ); | |
| 253 | + } else { | |
| 254 | + delete_option( 'getwid_recaptcha_v2_site_key' ); | |
| 255 | + } | |
| 256 | + | |
| 257 | + if ( ! empty( $secret_key ) ) { | |
| 258 | + update_option( 'getwid_recaptcha_v2_secret_key', $secret_key ); | |
| 259 | + } else { | |
| 260 | + delete_option( 'getwid_recaptcha_v2_secret_key' ); | |
| 261 | + } | |
| 262 | + | |
| 263 | + wp_send_json_success(); | |
| 264 | + } | |
| 265 | + | |
| 266 | + private function get_error( $error_code ) { | |
| 267 | + | |
| 268 | + switch ( $error_code ) { | |
| 269 | + case 'bad-request': | |
| 270 | + return __( 'The request is invalid or malformed.', 'getwid' ); | |
| 271 | + | |
| 272 | + case 'missing-input-secret': | |
| 273 | + return __( 'The secret parameter is missing.', 'getwid' ); | |
| 274 | + | |
| 275 | + case 'missing-input-response': | |
| 276 | + return __( 'Please check the captcha.', 'getwid' ); | |
| 277 | + | |
| 278 | + case 'invalid-input-secret': | |
| 279 | + return __( 'The secret parameter is invalid or malformed.', 'getwid' ); | |
| 280 | + | |
| 281 | + case 'invalid-input-response': | |
| 282 | + return __( 'The response parameter is invalid or malformed.', 'getwid' ); | |
| 283 | + | |
| 284 | + case 'timeout-or-duplicate': | |
| 285 | + return __( 'The response is no longer valid: either is too old or has been used previously.', 'getwid' ); | |
| 286 | + | |
| 287 | + default: | |
| 288 | + return null; | |
| 289 | + } | |
| 290 | + } | |
| 291 | +} | |
| 292 | + | |
| 293 | +getwid()->blocksManager()->addBlock( | |
| 294 | + new ContactForm() | |
| 295 | +); | |