__('Security check failed.', 'aetta-email-capture')], 403); } $options = AETTAEC_Plugin::get_plugin_options(); $submission_result = self::execute_submission_logic($options, $_POST); if ($submission_result === true) { wp_send_json_success(['message' => $options['success_message']]); } wp_send_json_error(['message' => $submission_result]); } public static function process_form_submission() { if (ob_get_level()) ob_end_clean(); $nonce_value = isset($_POST['aettaec_nonce']) ? sanitize_key(wp_unslash($_POST['aettaec_nonce'])) : ''; if (!wp_verify_nonce($nonce_value, 'aettaec_submit')) { wp_die('Security check failed.'); } $options = AETTAEC_Plugin::get_plugin_options(); $redirect_url = wp_get_referer() ?: home_url('/'); $redirect_url = remove_query_arg(['aetta_success', 'aetta_err'], $redirect_url); $submission_result = self::execute_submission_logic($options, $_POST); if ($submission_result === true) { self::execute_safe_redirect(add_query_arg('aetta_success', '1', $redirect_url)); } else { self::execute_safe_redirect(add_query_arg('aetta_err', urlencode($submission_result), $redirect_url)); } } private static function execute_safe_redirect($location) { if (!headers_sent()) { wp_safe_redirect($location); } echo ""; exit; } public static function render_shortcode($attributes = []) { $is_success = isset($_GET['aetta_success']) ? true : false; $error_msg = isset($_GET['aetta_err']) ? sanitize_text_field(wp_unslash($_GET['aetta_err'])) : ''; $options = AETTAEC_Plugin::get_plugin_options(); if ((int)$options['use_css'] === 1) { wp_enqueue_style('aettaec-form', AETTAEC_PLUGIN_URL . 'assets/css/form.css', [], AETTAEC_VERSION); } wp_enqueue_script('aettaec-form', AETTAEC_PLUGIN_URL . 'assets/js/form.js', [], AETTAEC_VERSION, true); $css_variables = [ '--aettaec-border-color:' . $options['ui_border_color'], '--aettaec-border-width:' . (int)$options['ui_border_width'] . 'px', '--aettaec-radius:' . (int)$options['ui_radius'] . 'px', '--aettaec-input-height:' . (int)$options['ui_input_height'] . 'px', '--aettaec-button-bg:' . $options['ui_button_bg'], '--aettaec-button-text:' . $options['ui_button_text'], '--aettaec-button-hover-bg:' . $options['ui_button_hover_bg'], '--aettaec-success-border:' . $options['ui_success_border'], '--aettaec-error-border:' . $options['ui_error_border'], '--aettaec-form-bg:' . $options['ui_form_bg'], '--aettaec-text-color:' . $options['ui_text_color'], '--aettaec-input-bg:' . $options['ui_input_bg'], '--aettaec-font-size:' . (int)$options['ui_font_size'] . 'px', '--aettaec-max-width:' . (int)$options['ui_max_width'] . 'px' ]; $style_attr = implode(';', $css_variables); $html = ''; if ($is_success) { $html .= '
' . esc_html__('Success!', 'aetta-email-capture') . ' - ' . esc_html($options['success_message']) . '
'; } if ($error_msg) { $msg = ($error_msg === 'invalid') ? $options['error_invalid'] : urldecode($error_msg); $html .= '
' . esc_html__('Error:', 'aetta-email-capture') . ' ' . esc_html($msg) . '
'; } $layout_class = ($options['ui_layout'] === 'inline') ? 'aettaec-layout-inline' : 'aettaec-layout-stacked'; $current_url = home_url(isset($_SERVER['REQUEST_URI']) ? wp_unslash($_SERVER['REQUEST_URI']) : '/'); $html .= '
'; $html .= wp_nonce_field('aettaec_submit', 'aettaec_nonce', true, false); $html .= ''; $html .= ''; $html .= ''; $html .= '
'; $html .= '
'; $html .= ''; $html .= ''; $html .= '
'; $html .= '
'; $html .= ''; $html .= ''; $html .= '
'; $html .= '
'; if ((int)$options['consent_required'] === 1) { $html .= ''; } $html .= '
'; $html .= ''; $html .= '
'; return $html; } private static function execute_submission_logic($options, $data) { if (!empty($data['aettaec_hp'])) return $options['error_invalid']; $ts = isset($data['aettaec_ts']) ? absint($data['aettaec_ts']) : 0; if ((time() - $ts) < (int)$options['min_submit_seconds']) return $options['error_wait']; $name = isset($data['aettaec_name']) ? sanitize_text_field(wp_unslash($data['aettaec_name'])) : ''; $email = isset($data['aettaec_email']) ? sanitize_email(wp_unslash($data['aettaec_email'])) : ''; if ($name === '' || !is_email($email)) return $options['error_required']; if ((int)$options['consent_required'] === 1 && empty($data['aettaec_consent'])) return $options['error_consent']; $pid = wp_insert_post([ 'post_type' => AETTAEC_CPT::POST_TYPE, 'post_status' => 'private', 'post_title' => $email, ]); if (is_wp_error($pid)) return $options['error_invalid']; update_post_meta($pid, '_aettaec_name', $name); update_post_meta($pid, '_aettaec_email', $email); update_post_meta($pid, '_aettaec_consent', !empty($data['aettaec_consent']) ? 1 : 0); update_post_meta($pid, '_aettaec_created_gmt', gmdate('Y-m-d H:i:s')); $source_url = isset($data['aettaec_src']) ? esc_url_raw(wp_unslash($data['aettaec_src'])) : ''; if ($source_url === '') $source_url = esc_url_raw((string)wp_get_referer()); if ($source_url !== '') update_post_meta($pid, '_aettaec_source_url', $source_url); $source_ref = isset($data['aettaec_ref']) ? esc_url_raw(wp_unslash($data['aettaec_ref'])) : ''; if ($source_ref !== '') update_post_meta($pid, '_aettaec_source_ref', $source_ref); if ((int)$options['store_ip_ua'] === 1) { $ip_address = isset($_SERVER['REMOTE_ADDR']) ? filter_var(wp_unslash($_SERVER['REMOTE_ADDR']), FILTER_VALIDATE_IP) : false; if ($ip_address) update_post_meta($pid, '_aettaec_ip', $ip_address); $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? substr(sanitize_text_field(wp_unslash($_SERVER['HTTP_USER_AGENT'])), 0, 255) : ''; if ($user_agent !== '') update_post_meta($pid, '_aettaec_ua', $user_agent); } return true; } }