user_email; // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Query is a template string with placeholders, prepared inline below $query_add_note = "INSERT INTO {$wpdb->prefix}accua_forms_submissions_notes (afsn_sub_id, afsn_date, afsn_text, afsn_user) VALUES (%d, %s, %s, %s)"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared -- Custom table requires direct query, query is prepared inline if ($wpdb->query($wpdb->prepare($query_add_note, $id_sub, $current_date, sanitize_textarea_field($note_text), $current_user_email)) === false) { return false; } return array( 'date' => $current_date, 'user' => $current_user->display_name, ); } function accua_forms_count_submission_note($id_sub) { global $wpdb; // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Query is a template string with placeholders, prepared inline below $query_data_submission_notes = "SELECT DISTINCT COUNT(afsn_sub_id) FROM `{$wpdb->prefix}accua_forms_submissions_notes` WHERE `afsn_sub_id` = %d"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared -- Custom table requires direct query, query is prepared inline $count_submissions_form = $wpdb->get_var($wpdb->prepare($query_data_submission_notes, $id_sub)); return $count_submissions_form; } function accua_forms_return_submission_note($id_sub) { global $wpdb; // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Query is a template string with placeholders, prepared inline below $query_data_submission_notes = "SELECT * FROM `{$wpdb->prefix}accua_forms_submissions_notes` WHERE `afsn_sub_id` = %d ORDER BY `afsn_date` DESC"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared -- Custom table requires direct query, query is prepared inline $query_submission_notes = $wpdb->get_results($wpdb->prepare($query_data_submission_notes, $id_sub)); $del_nonce = wp_create_nonce( "submission_{$id_sub}_note_del" ); foreach ($query_submission_notes as $value) { $note_user = get_user_by( 'email', $value->afsn_user ); $note_user_name = $note_user ? $note_user->display_name : $value->afsn_user; echo '
' . esc_html($value->afsn_text) . '

' . esc_html($value->afsn_date) . '
' . esc_html($note_user_name) . '

'; } } function accua_forms_delete_submission_note($sid, $date) { global $wpdb; // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Query is a template string with placeholders, prepared inline below $query_delete_notes = "DELETE FROM `{$wpdb->prefix}accua_forms_submissions_notes` WHERE `afsn_sub_id` = %d AND `afsn_date` = %s"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared -- Custom table requires direct query, query is prepared inline return $wpdb->query($wpdb->prepare($query_delete_notes, $sid, $date)) !== false; } function accua_forms_single_submission($head = false) { wp_enqueue_style('accua-forms-admin', plugins_url('assets/css/admin.css', ACCUA_FORMS_FILE), array(), ACCUA_FORMS_CSS_VERSION); wp_enqueue_script('accua-forms-set-lead-status', plugins_url('assets/js/admin/set-lead-status.js', ACCUA_FORMS_FILE), array('jquery'), ACCUA_FORMS_JS_VERSION, true); wp_enqueue_script('accua-forms-single-submission', plugins_url('assets/js/admin/single-submission.js', ACCUA_FORMS_FILE), array('jquery'), ACCUA_FORMS_JS_VERSION, true); wp_localize_script('accua-forms-single-submission', 'accuaSingleSubmission', array( 'l10n' => array( 'confirmAnonymize' => __('Are you sure you want to anonymize this submission? Personal data will be replaced with placeholders. This cannot be undone.', 'contact-forms'), 'anonymizing' => __('Anonymizing…', 'contact-forms'), 'anonymize' => __('Anonymize', 'contact-forms'), 'errorAnonymize' => __('Error anonymizing submission. Please try again.', 'contact-forms'), 'confirmDeleteNote' => __('Are you sure you want to delete this note?', 'contact-forms'), 'deleteNote' => __('Delete', 'contact-forms'), 'errorNote' => __('Error saving note. Please try again.', 'contact-forms'), ), )); global $wpdb; if (isset($_GET['sid'])) { $sid = (int) $_GET['sid']; } if ($head === true) { return; } if ($sid) { // Handle GET-based trash action (WP standard link pattern) // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verified below before processing if ( isset( $_GET['action'] ) && $_GET['action'] === 'trash' ) { check_admin_referer( 'del_sub_form_' . $sid ); accua_forms_trash_submission( (int) $sid ); // Use echo-free function so redirect header can be sent wp_safe_redirect( admin_url( 'admin.php?page=accua_forms_submissions_list&trashed=1' ) ); exit; } // Handle GET-based restore action // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verified below before processing if ( isset( $_GET['action'] ) && $_GET['action'] === 'restore' ) { check_admin_referer( 'restore_sub_form_' . $sid ); accua_forms_restore_submission( (int) $sid ); wp_safe_redirect( admin_url( 'admin.php?page=accua_forms_submissions_list&restored=1' ) ); exit; } $submission_row = $wpdb->get_row($wpdb->prepare("SELECT `afs_status`, `afs_anonymized` FROM `{$wpdb->prefix}accua_forms_submissions` WHERE `afs_id` = %d", $sid)); $form_status = $submission_row ? (int) $submission_row->afs_status : null; $is_anonymized = $submission_row ? (int) $submission_row->afs_anonymized : 0; $is_trashed = ( $form_status === -1 ); ?>

get_var($wpdb->prepare("SELECT `afs_id` FROM `{$wpdb->prefix}accua_forms_submissions` WHERE `afs_status` >= 0 AND `afs_id` < %d ORDER BY `afs_id` DESC LIMIT 1", $sid)); $next = $wpdb->get_var($wpdb->prepare("SELECT `afs_id` FROM `{$wpdb->prefix}accua_forms_submissions` WHERE `afs_status` >= 0 AND `afs_id` > %d ORDER BY `afs_id` ASC LIMIT 1", $sid)); if ($prev !== null) { echo '‹ ' . esc_html__('Previous', 'contact-forms') . ''; } if ($next !== null) { echo '' . esc_html__('Next', 'contact-forms') . ' ›'; } ?>

prefix}accua_forms_submissions` WHERE `afs_id` = %d"; // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Query is a template string with placeholders, prepared inline below $query_data_submission_value = "SELECT * FROM `{$wpdb->prefix}accua_forms_submissions_values` WHERE `afsv_sub_id` = %d"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared -- Custom table requires direct query, query is prepared inline $data_submission = $wpdb->get_row($wpdb->prepare($query_data_submission, $sid)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared -- Custom table requires direct query, query is prepared inline $data_submission_values = $wpdb->get_results($wpdb->prepare($query_data_submission_value, $sid)); ?> afs_form_id ]['title'] ) ? $forms_data[ $data_submission->afs_form_id ]['title'] : '#' . $data_submission->afs_form_id; // Resolve page title $page_title = ''; if ( (int) $data_submission->afs_post_id > 0 ) { $page_title = get_the_title( (int) $data_submission->afs_post_id ); } ?>

label map from global fields $avail_fields = get_option( 'accua_forms_avail_fields', array() ); $field_labels = array(); foreach ( $avail_fields as $field ) { if ( ! empty( $field['id'] ) && ! empty( $field['name'] ) ) { $field_labels[ $field['id'] ] = $field['name']; } } ?> afsv_field_id, '__' ) || str_starts_with( $value->afsv_field_id, '_accua_' ) ) { continue; } $label = $field_labels[ $value->afsv_field_id ] ?? ucwords( str_replace( array( '-', '_' ), ' ', $value->afsv_field_id ) ); if ($value->afsv_type === 'file') { $fieldid = rawurlencode($value->afsv_field_id); $filename = rawurlencode($value->afsv_value); $url = admin_url('admin-ajax.php') . "?action=accua_forms_download_submitted_file&subid={$value->afsv_sub_id}&field={$fieldid}&file={$filename}&nonce=" . wp_create_nonce('accua_forms_download_nonce') . "&_wpnonce=" . wp_create_nonce('download_file_' . $value->afsv_sub_id . '_' . $fieldid); echo ''; echo ''; echo ''; echo ''; } else { echo ''; echo ''; echo ''; echo ''; } } ?>
' . esc_html( $label ) . '' . esc_html( $value->afsv_value ) . '
' . esc_html( $label ) . '' . esc_html( $value->afsv_value ) . '

afs_ip ) { ?> afs_lang ) { ?> afs_uri ) { ?> afs_referrer ) { ?> afs_stats ? json_decode( $data_submission->afs_stats, true ) : array(); if ( isset( $submission_stats['recaptcha3_score'] ) && is_numeric( $submission_stats['recaptcha3_score'] ) ) { ?>
afs_ip ); ?>
afs_lang ); ?>
afs_uri ); ?>
afs_referrer ); ?>

afs_created && $data_submission->afs_created !== $data_submission->afs_submitted ) { ?>


afs_created ) ) ); ?>


afs_submitted ) ) ); ?>


">

");'>

afs_id, $data_submission->afs_lead_status ); ?>

0) { accua_forms_return_submission_note($sid); } ?>