Current path: home/webdevt/www/cryptoimpot.fr/wp-content/plugins/divi-contact-form-helper/app/Frontend/Request/
?? Go up: /home/webdevt/www/cryptoimpot.fr/wp-content/plugins/divi-contact-form-helper/app/Frontend
<?php
namespace KS_PAC_DCFH\Frontend\Request;
if (!defined('ABSPATH')) {
exit;
}
class Post_Request
{
public $contact_form_num = 0;
public $contact_form_data = [];
public $temp_files;
public function __construct($is_processed = true)
{
global $et_pb_contact_form_num;
$this->contact_form_num = $et_pb_contact_form_num;
if ($is_processed) {
$this->processed_contact_form_entries();
}
}
private function processed_contact_form_entries(): void
{
static $form_processed = false;
$contact_form_num = $this->contact_form_num;
$nonce_result = isset($_POST["_wpnonce-et-pb-contact-form-submitted-$this->contact_form_num"]) && wp_verify_nonce(sanitize_text_field($_POST["_wpnonce-et-pb-contact-form-submitted-$this->contact_form_num"]),
'et-pb-contact-form-submit');
if (
!$form_processed &&
$nonce_result &&
isset($_POST["et_pb_contactform_submit_$contact_form_num"]) &&
empty($_POST["et_pb_contact_et_number_$contact_form_num"])
) {
$confirmation_request = Confirmation_Email_Request::instance();
$confirmation_email_field_id = $confirmation_request->confirmation_email_field_id;
$post_repository = Post_Repository::instance();
$post_repository->contac_form_num = $this->contact_form_num;
[$y, $m] = ks_pac_dcfh_file_helper()::get_subdir();
$visible_fields_json = $_POST["et_pb_contact_email_fields_$contact_form_num"] ?? null; // phpcs:ignore
$hidden_fields_json = $_POST["et_pb_contact_email_hidden_fields_$contact_form_num"] ?? null; // phpcs:ignore
$visible_fields = json_decode(str_replace('\\', '', $visible_fields_json ?? ''), true) ?? [];
$hidden_fields = json_decode(str_replace('\\', '', $hidden_fields_json ?? ''), true) ?? [];
// Re-map field definitions by field_id
$field_definitions = [];
// Add visible fields first
foreach ($visible_fields as $field) {
$field_definitions[$field['field_id']] = $field;
}
// Add hidden fields
foreach ($hidden_fields as $hidden_field) {
$meta_field_id = "et_pb_contact_{$hidden_field}_{$contact_form_num}_cond_meta";
$cond_meta = isset($_POST[$meta_field_id]) ? sanitize_text_field($_POST[$meta_field_id]) : '';
$meta_array = json_decode(base64_decode($cond_meta), true); // phpcs:ignore
$cond_field_title = isset($meta_array['title']) ? sanitize_text_field($meta_array['title']) : '';
$cond_field_type = isset($meta_array['type']) ? sanitize_text_field($meta_array['type']) : '';
$field_id = "et_pb_contact_{$hidden_field}_$contact_form_num";
$field_definitions[$field_id] = [
'field_id' => $field_id,
'original_id' => $hidden_field,
'field_label' => $cond_field_title,
'field_type' => $cond_field_type,
];
}
// Determine field order based on actual POST keys
$ordered_field_ids = [];
foreach ($_POST as $key => $value) {
if (isset($field_definitions[$key])
&& strpos($key, "et_pb_contact_") === 0
&& strpos($key, "_cond_meta") === false
) {
$ordered_field_ids[] = $key;
}
}
// Add remaining (hidden) fields that might not be in $_POST (e.g. empty)
foreach ($field_definitions as $key => $field) {
if (!in_array($key, $ordered_field_ids, true)) {
$ordered_field_ids[] = $key;
}
}
// Query Params
if ($post_repository->save_queryparams_to_db) {
$query_params = $this->get_query_params();
$field_definitions = array_merge($field_definitions, $query_params);
ks_pac_dcfh_db()::update_contact_form_query_params($post_repository->contact_form_id, $query_params);
// Add query param field IDs to ordered_field_ids
foreach ($query_params as $field_id => $field_info) {
if (!in_array($field_id, $ordered_field_ids, true)) {
$ordered_field_ids[] = $field_id;
}
}
}
// Process Data
$fields_data_array = [];
$contact_emails = [];
$process_fields_str = '';
$sender_email = '';
foreach ($ordered_field_ids as $field_id) {
$field_info = $field_definitions[$field_id];
$field_type = $field_info['field_type'] ?? 'input';
$original_field_id = ks_pac_dcfh_general_helper()::sanitize_key($field_info['original_id']) ?? '';
$field_label = $field_info['field_label'] ?? '';
$field_required = $field_info['required_mark'] ?? '';
if ('query' === $field_type) {
$field_value = $field_info['value'] ?? '';
} else {
$field_value = $_POST[$field_id] ?? ''; // phpcs:ignore
}
if ('et_pb_html_field' === $field_value) {
continue;
}
if ('text' === $field_type) {
$field_value = sanitize_textarea_field($field_value);
} elseif (is_email($field_value)) {
$field_value = sanitize_email($field_value);
if (!empty($confirmation_email_field_id) && strtolower($confirmation_email_field_id) === $original_field_id) {
$contact_emails['high_priority_emails'][] = [
'value' => $field_value,
'required' => $field_required,
];
}
if ('email' === $field_type && 'required' === $field_required) {
$contact_emails['medium_priority_emails'][] = [
'value' => $field_value,
'required' => $field_required,
];
} elseif ('required' === $field_required || 'not_required' === $field_required) {
$contact_emails['low_priority_emails'][] = [
'value' => $field_value,
'required' => $field_required,
];
}
} elseif (isset($_POST["{$field_id}_is_file"])) {
$field_type = 'file';
$this->temp_files[$original_field_id] = $field_value;
} elseif (isset($_POST["{$field_id}_is_signature_pad"])) {
$field_type = 'signature_pad';
$this->temp_files[$original_field_id] = $field_value;
} else {
$field_value = sanitize_text_field($field_value);
}
$data_to_save = [
'id' => $original_field_id,
'label' => $field_label,
'value' => stripslashes($field_value),
'type' => $field_type,
];
// Add extra details if it's a file/signature and saving to DB is enabled
if (in_array($field_type, ['file', 'signature_pad'], true)
&& $post_repository->save_files_to_db) {
$data_to_save['subdir'] = "$y/$m";
$data_to_save['is_media_library'] = (bool)$post_repository->save_files_to_media;
}
// Only push if it's not a "file" OR if it's "file/signature_pad" with DB saving enabled
if ('file' !== $field_type || $post_repository->save_files_to_db) {
$this->contact_form_data[] = $data_to_save;
}
$fields_data_array[] = $field_info;
$process_fields_str .= $original_field_id.',';
}
if (!empty($confirmation_email_field_id) && preg_match("/\bdcfh_site_userinfo_email\b/", $confirmation_email_field_id) && is_user_logged_in()) {
$user_data = wp_get_current_user();
if ($user_data) {
$sender_email = $user_data->user_email;
}
} elseif (isset($contact_emails['high_priority_emails'])) {
$sender_email = reset($contact_emails['high_priority_emails'])['value'];
} elseif (isset($contact_emails['medium_priority_emails'])) {
$sender_email = reset($contact_emails['medium_priority_emails'])['value'];
} elseif (isset($contact_emails['low_priority_emails'])) {
$sender_email = reset($contact_emails['low_priority_emails'])['value'];
}
$post_repository->contact_form_data = $this->contact_form_data;
$post_repository->contact_form_fields_str = rtrim($process_fields_str, ',');
$post_repository->contact_form_fields = $fields_data_array;
$post_repository->sender_email = $sender_email;
$post_repository->referer_url = $this->get_referer_url();
$post_repository->ip_address = ks_pac_dcfh_general_helper()::get_ip_address();
$post_repository->user_agent = ks_pac_dcfh_general_helper()::get_user_agent();
$form_processed = true;
}
}
public function is_contact_form_processed(): bool
{
$nonce_result = isset($_POST["_wpnonce-et-pb-contact-form-submitted-$this->contact_form_num"]) && wp_verify_nonce(sanitize_text_field($_POST["_wpnonce-et-pb-contact-form-submitted-$this->contact_form_num"]),
'et-pb-contact-form-submit');
if ($nonce_result) {
if (isset($_POST["et_pb_contactform_submit_$this->contact_form_num"]) && 'et_contact_proccess' === sanitize_text_field($_POST["et_pb_contactform_submit_$this->contact_form_num"])) {
return true;
}
if (isset($_POST["pwh_dcfh_et_pb_contactform_submit_$this->contact_form_num"]) && 'et_contact_proccess' === sanitize_text_field($_POST["pwh_dcfh_et_pb_contactform_submit_$this->contact_form_num"])) {
return true;
}
}
return false;
}
public function is_google_recaptcha_v2_verified(): bool
{
global $et_pb_contact_form_num;
$is_successed_response = true;
if (isset($_POST["et_pb_contact_grecaptcha_token_$et_pb_contact_form_num"])) { // phpcs:ignore
$response = wp_remote_post('https://www.google.com/recaptcha/api/siteverify', [
'body' => [
'secret' => et_get_option('pwh_dcfh_googlerecaptcha_v2_secretkey'),
'response' => sanitize_text_field($_POST["et_pb_contact_grecaptcha_token_$et_pb_contact_form_num"]), // phpcs:ignore
],
'timeout' => '60',
'redirection' => '5',
'httpversion' => '1.0',
'blocking' => true,
'headers' => [],
'cookies' => [],
]);
if (!is_wp_error($response)) {
$response_body = wp_remote_retrieve_body($response);
$response_code = wp_remote_retrieve_response_code($response);
if ($response_code === 200) {
$response_data = json_decode($response_body, true);
if (!$response_data['success']) {
$is_successed_response = false;
}
} else {
$is_successed_response = false;
}
}
}
return $is_successed_response;
}
public function is_turnstile_verified(): bool
{
global $et_pb_contact_form_num;
$is_successed_response = true;
if (isset($_POST["et_pb_contact_cturnstile_token_$et_pb_contact_form_num"], $_POST['cf-turnstile-response'])) { // phpcs:ignore
$post_repository = Post_Repository::instance();
$response = wp_remote_post('https://challenges.cloudflare.com/turnstile/v0/siteverify', [
'body' => [
'secret' => et_get_option('pwh_dcfh_turnstile_secretkey'),
'response' => sanitize_text_field($_POST['cf-turnstile-response']), // phpcs:ignore
'remoteip' => $post_repository->ip_address
],
'timeout' => '60',
'redirection' => '5',
'httpversion' => '1.0',
'blocking' => true,
'headers' => [],
'cookies' => [],
]);
if (!is_wp_error($response)) {
$response_body = wp_remote_retrieve_body($response);
$response_code = wp_remote_retrieve_response_code($response);
if ($response_code === 200) {
$response_data = json_decode($response_body, true);
if (!$response_data['success']) {
$is_successed_response = false;
}
} else {
$is_successed_response = false;
}
}
}
return $is_successed_response;
}
public function is_honeypot_triggered(): bool
{
global $et_pb_contact_form_num;
return isset($_POST["et_pb_contact_hp_field_$et_pb_contact_form_num"]) && 'on' === sanitize_text_field($_POST["et_pb_contact_hp_field_$et_pb_contact_form_num"]); // phpcs:ignore WordPress.Security.NonceVerification
}
public function get_files_from_temp_dir(): array
{
$attachments = [];
$tmp_files = $this->temp_files;
if (!empty($tmp_files)) {
$upload_tmp_dir = ks_pac_dcfh_file_helper()::get_tmp_upload_dir();
$wp_upload_dir = wp_upload_dir();
$post_repository = Post_Repository::instance();
foreach ($tmp_files as $tmp_file) {
$files = explode(',', $tmp_file);
if (!empty($files) && is_array($files)) {
foreach ($files as $file) {
$file_temp_dir = path_join($upload_tmp_dir, $file);
if (et_()->WPFS()->is_file($file_temp_dir) && et_()->WPFS()->exists($file_temp_dir)) {
$attachments['uploaded_dir'][] = $file_temp_dir;
if ($post_repository->save_files_to_media) {
$attachments['uploaded_urls'][] = path_join($wp_upload_dir['url'], $file);
} else {
$form_upload_dir = ks_pac_dcfh_file_helper()::upload_files_to_dir($post_repository->contact_form_id, $file);
$attachments['uploaded_urls'][] = $form_upload_dir['baseurl'];
}
}
}
}
}
$post_repository->attachments = $attachments;
}
return $attachments;
}
public function move_files_to_form_dir(): array
{
$attachments = [];
$tmp_files = $this->temp_files;
if (!empty($tmp_files)) {
$post_repository = Post_Repository::instance();
$upload_tmp_dir = ks_pac_dcfh_file_helper()::get_tmp_upload_dir();
foreach ($tmp_files as $tmp_file) {
$files = explode(',', $tmp_file);
if (!empty($files) && is_array($files)) {
foreach ($files as $file_index => $file) {
$upload_dir = ks_pac_dcfh_file_helper()::upload_files_to_dir($post_repository->contact_form_id, $file);
$file_temp_dir = path_join($upload_tmp_dir, $file);
if (et_()->WPFS()->is_file($file_temp_dir) && et_()->WPFS()->exists($file_temp_dir)) {
if (copy($file_temp_dir, $upload_dir['basedir'])) {
if (strpos($file, "digital-signature-") !== false) {
$post_repository->signature_pad_file = $upload_dir['baseurl'];
}
$attachments['basedir'][$file_index] = $upload_dir['basedir'];
$attachments['baseurl'][$file_index] = $upload_dir['baseurl'];
}
}
}
}
}
}
return $attachments;
}
public function move_files_to_media_library($entry_number): array
{
$attachments = [];
$tmp_files = $this->temp_files;
if (!empty($tmp_files)) {
$post_repository = Post_Repository::instance();
require_once(ABSPATH.'wp-admin/includes/image.php');
require_once(ABSPATH.'wp-admin/includes/media.php');
//$file_title = __('Divi Contact Form Helper', 'divi-contact-form-helper');
$upload_tmp_dir = ks_pac_dcfh_file_helper()::get_tmp_upload_dir();
$wp_upload_dir = wp_upload_dir();
foreach ($tmp_files as $tmp_file) {
$files = explode(',', $tmp_file);
if (!empty($files) && is_array($files)) {
foreach ($files as $file_index => $file) {
$file_temp_dir = path_join($upload_tmp_dir, $file);
$file_upload_dir = path_join($wp_upload_dir['path'], $file);
$file_upload_url = path_join($wp_upload_dir['url'], $file);
$file_upload_path = path_join($wp_upload_dir['path'], $file);
$filename = pathinfo($file_temp_dir, PATHINFO_FILENAME);
$file_type = wp_check_filetype($file);
if (et_()->WPFS()->is_file($file_temp_dir) && et_()->WPFS()->exists($file_temp_dir)) {
if (copy($file_temp_dir, $file_upload_dir)) {
if (strpos($file, "digital-signature-") !== false) {
$post_repository->signature_pad_file = $file_upload_url;
}
$attachment_data = [
'post_title' => $filename,
'post_name' => $filename,
'post_content' => '',
'post_excerpt' => '',
'post_mime_type' => $file_type['type'],
'post_parent' => $entry_number,
'guid' => $file_upload_url,
'post_author' => 0,
'post_status' => 'inherit',
'comment_status' => 'closed',
'ping_status' => 'closed'
];
$attachment_id = wp_insert_attachment($attachment_data, $file_upload_path, $entry_number, true);
if (!is_wp_error($attachment_id)) {
$attach_data = wp_generate_attachment_metadata($attachment_id, $file_upload_path);
wp_update_attachment_metadata($attachment_id, $attach_data);
//update_post_meta($attachment_id, '_wp_attachment_image_alt', $file_title);
$attachments['basedir'][$file_index] = $file_upload_path;
$attachments['baseurl'][$file_index] = $file_upload_url;
}
}
}
}
}
}
}
return $attachments;
}
public function get_query_params(): array
{
$post_repository = Post_Repository::instance();
$contact_form_num = $post_repository->contac_form_num;
$data = [];
$query_string = isset($_SERVER['QUERY_STRING']) ? sanitize_text_field(wp_unslash($_SERVER['QUERY_STRING'])) : '';
if (!empty($query_string)) {
$query_params = explode('&', $query_string);
foreach ($query_params as $query_param) {
[$key, $value] = array_map('urldecode', explode('=', $query_param, 2));
$id = ks_pac_dcfh_general_helper()::sanitize_key($key);
$label = ks_pac_dcfh_general_helper()::sanitize_string($id);
$field_id = "et_pb_contact_{$id}_$contact_form_num";
$data[$field_id] = [
'field_id' => $field_id,
'original_id' => $id,
'field_label' => $label,
'field_type' => 'query',
'label' => $label,
'value' => $value,
];
}
}
return $data;
}
private function get_referer_url(): string
{
return isset($_POST['et_pb_contact_field_referer_url']) ? sanitize_text_field($_POST['et_pb_contact_field_referer_url']) : ''; // phpcs:ignore WordPress.Security.NonceVerification
}
}