Current path: home/webdevt/www/demo2/wp-content/plugins/divi-contact-form-helper/d5/server/Admin/Pages/
?? Go up: /home/webdevt/www/demo2/wp-content/plugins/divi-contact-form-helper/d5/server/Admin
<?php
namespace KS_PAC_DCFH\Admin\Pages;
use WP_Query;
if (!defined('ABSPATH')) {
exit;
}
class ExportCSV
{
private array $contact_form_data;
public function load(): void
{
$page = isset($_GET['page']) ? sanitize_text_field($_GET['page']) : ''; // phpcs:ignore WordPress.Security.NonceVerification
add_action('admin_menu', [$this, 'maybe_add_menu_item']);
if ('export_as_csv' === $page) {
add_filter('dcfh_admin_localization_data', [$this, 'maybe_filter_localization']);
}
}
public function maybe_add_menu_item(): void
{
add_submenu_page(
'edit.php?post_type=pwh_dcfh',
__('Export CSV', 'divi-contact-form-helper'),
__('Export CSV', 'divi-contact-form-helper'),
'export_csv_pwh_dcfh',
'export_as_csv',
[$this, 'process_form']
);
}
public function maybe_filter_localization($localizations)
{
$this->contact_form_data = ks_pac_dcfh_app()->general_db_manager()::get_csv_data();
$localizations['contactFormCSVData'] = htmlentities(wp_json_encode($this->contact_form_data));
$localizations['dataPicker'] = [
'status' => true,
'format' => 'yy-mm-dd'
];
return $localizations;
}
public function process_form(): void
{
$contact_form_id = isset($_GET['contact_form_id']) ? sanitize_text_field($_GET['contact_form_id']) : null; // phpcs:ignore
$post_request = [
'contact_form_id' => $contact_form_id,
'contact_form_fields' => '',
'csv_filename' => '',
'csv_start_date' => '',
'csv_end_date' => '',
];
if (isset($_POST['_wpnonce']) && !wp_verify_nonce(sanitize_text_field($_POST['_wpnonce']), 'nonce_export_csv')) {
wp_die(esc_html__('The security check failed due to an invalid nonce. Please try again.', 'divi-contact-form-helper'));
}
if (isset($_POST['btn_export_as_csv'])) {
// $blog_charset = get_bloginfo('charset');
$blog_charset = 'utf-8';
$validate_request = true;
$wp_count_posts = wp_count_posts('pwh_dcfh');
$total_posts = (int)($wp_count_posts->draft + $wp_count_posts->private);
if ($total_posts === 0) {
ks_pac_dcfh_app()->admin_alert()::error(__('No record found.', 'divi-contact-form-helper'));
$validate_request = false;
}
$csv_filename = isset($_POST['csv_filename']) ? sanitize_file_name($_POST['csv_filename']) : null;
$contact_form_id = isset($_POST['contact_form_id']) ? sanitize_text_field($_POST['contact_form_id']) : null;
$contact_form_fields = $_POST['contact_form_fields'] ?? null; // phpcs:ignore
$csv_start_date = $_POST['csv_start_date'] ?? null; // phpcs:ignore
$csv_end_date = $_POST['csv_end_date'] ?? null; // phpcs:ignore
$entries_type = $_POST['entries_type'] ?? null; // phpcs:ignore
$include_summary = $_POST['include_summary'] ?? 'yes'; // phpcs:ignore
if (empty($csv_filename)) {
ks_pac_dcfh_app()->admin_alert()::error(__('Please enter csv file name.', 'divi-contact-form-helper'));
$validate_request = false;
}
if (empty($contact_form_id)) {
ks_pac_dcfh_app()->admin_alert()::error(__('Please select form type.', 'divi-contact-form-helper'));
$validate_request = false;
}
if (empty($contact_form_fields)) {
ks_pac_dcfh_app()->admin_alert()::error(__('Please select at least one keyword.', 'divi-contact-form-helper'));
$validate_request = false;
}
if (empty($entries_type)) {
ks_pac_dcfh_app()->admin_alert()::error(__('Please select at least entries type to export.', 'divi-contact-form-helper'));
$validate_request = false;
}
$post_request = $_POST;
if ($validate_request) {
$date_format = et_get_option('pwh_dcfh_entries_date_format', 'Y/m/d');
$time_format = et_get_option('pwh_dcfh_entries_time_format', 'h:i:sa');
$wp_upload_dir = wp_upload_dir();
$csv_headers = array_values($contact_form_fields);
$date_query = [];
if (!empty($csv_start_date) || !empty($csv_end_date)) {
$date_query['after'] = $csv_start_date;
$date_query['before'] = $csv_end_date;
$date_query['inclusive'] = true;
}
$found_posts_obj = new WP_Query([
'post_type' => 'pwh_dcfh',
'post_status' => $entries_type,
'meta_key' => '_pwh_dcfh_contact_form_id',// phpcs:ignore
'meta_value' => $contact_form_id,// phpcs:ignore
'date_query' => $date_query
]);
$total_posts = $found_posts_obj->found_posts;
$posts_per_page = 200;
header("Content-Encoding: $blog_charset");
header("Content-type: text/csv; charset=$blog_charset");
header("Content-Disposition: attachment; filename=$csv_filename.csv");
header("Pragma: no-cache");
header("Expires: 0");
$f_handle = fopen("php://output", 'wb');
if (ob_get_length() > 0) {
ob_clean();
}
fwrite($f_handle, $bom = (chr(0xEF).chr(0xBB).chr(0xBF)));
//fputcsv($f_handle, $csv_headers, ',', '"');
fputcsv($f_handle, $csv_headers, ',', '"', '\\');
for ($i = 0; $i < $total_posts; $i += $posts_per_page) {
$post_obj = new WP_Query([
'post_type' => 'pwh_dcfh',
'post_status' => $entries_type,
'posts_per_page' => $posts_per_page,
'offset' => $i,
'meta_key' => '_pwh_dcfh_contact_form_id',// phpcs:ignore
'meta_value' => $contact_form_id,// phpcs:ignore
'date_query' => $date_query
]);
$csv_data = [];
$counter = 0;
for ($k = 0; $k < $post_obj->found_posts; $k++) {
$posts = $post_obj->posts;
if (isset($posts[$k]->ID)) {
$post_id = $posts[$k]->ID;
$post_excerpt = $posts[$k]->post_excerpt;
$post_date = $posts[$k]->post_date;
if (is_serialized($post_excerpt)) {
$page_id = ks_pac_dcfh_app()->entry_meta_manager()::get_page_id_meta_value($post_id);
$form_entries = ks_pac_dcfh_app()->misc_utils()::maybe_unserialize($post_excerpt);
if (!empty($form_entries) && is_array($form_entries)) {
foreach ($form_entries as $form_entry) {
$field_id = $form_entry['id'];
$csv_data[$counter][$field_id] = $form_entry;
}
foreach (array_keys($contact_form_fields) as $field) {
if ('entry_number' === $field) {
$csv_data[$counter]['entry_number'] = [
'type' => 'meta',
'value' => $post_id,
];
}
if ('read_by' === $field) {
if ('0000-00-00 00:00:00' !== $posts[$k]->post_modified) {
$csv_data[$counter]['read_by'] = [
'type' => 'meta',
'value' => ks_pac_dcfh_app()->user_manager()::get_author_name(ks_pac_dcfh_app()->entry_meta_manager()::get_read_by_meta_value($post_id)),
];
} else {
$csv_data[$counter]['read_by'] = [
'type' => 'meta',
'value' => '-',
];
}
}
if ('submitter' === $field) {
$csv_data[$counter]['submitter'] = [
'type' => 'meta',
'value' => ks_pac_dcfh_app()->user_manager()::get_submitter_name($posts[$k]->post_author),
];
}
if ('page_title' === $field) {
$csv_data[$counter]['page_title'] = [
'type' => 'meta',
'value' => get_the_title($page_id),
];
}
if ('page_url' === $field) {
$csv_data[$counter]['page_url'] = [
'type' => 'meta',
'value' => get_the_permalink($page_id),
];
}
if ('referer_url' === $field) {
$csv_data[$counter]['referer_url'] = [
'type' => 'meta',
'value' => ks_pac_dcfh_app()->entry_meta_manager()::get_referer_url_meta_value($post_id),
];
}
if ('entry_date' === $field) {
$csv_data[$counter]['entry_date'] = [
'type' => 'meta',
'value' => date_i18n($date_format, strtotime($post_date)),
];
}
if ('entry_time' === $field) {
$csv_data[$counter]['entry_time'] = [
'type' => 'meta',
'value' => date_i18n($time_format, strtotime($post_date)),
];
}
if ('ip_address' === $field) {
$ip_address = ks_pac_dcfh_app()->entry_meta_manager()::get_ip_address_meta_value($post_id);
$csv_data[$counter]['ip_address'] = [
'type' => 'meta',
'value' => '' === $ip_address ? '-' : $ip_address,
];
}
if ('browser' === $field || 'platform' === $field) {
$user_agent_meta = ks_pac_dcfh_app()->entry_meta_manager()::get_user_agent_meta_value($post_id);
if ('browser' === $field) {
$csv_data[$counter]['browser'] = [
'type' => 'meta',
'value' => isset($user_agent_meta['browser']) ? ucfirst($user_agent_meta['browser']) : '-',
];
}
if ('platform' === $field) {
$csv_data[$counter]['platform'] = [
'type' => 'meta',
'value' => isset($user_agent_meta['platform']) ? ucfirst($user_agent_meta['platform']) : '-',
];
}
}
}
$counter++;
}
}
}
}
if (!empty($csv_data)) {
foreach ($csv_data as $k => $v) {
$csv_rows = [];
foreach (array_keys($contact_form_fields) as $field) {
if (!empty($csv_data[$k][$field])) {
$form_data = $csv_data[$k][$field];
$wp_subdir = $csv_data[$k][$field]['subdir'] ?? '';
$wp_basedir = rtrim($wp_upload_dir['basedir'], '/').'/'.$wp_subdir;
$wp_baseurl = rtrim($wp_upload_dir['baseurl'], '/').'/'.$wp_subdir;
if ('file' === $form_data['type'] || 'signature-pad' === $form_data['type'] || 'signature_pad' === $form_data['type']) {
$attachments = explode(',', $form_data['value']);
$attachments = array_filter($attachments);
if (!empty($attachments)) {
$attachments_list = [];
foreach ($attachments as $attachment) {
if (isset($form_data['is_media_library']) && $form_data['is_media_library']) {
$upload_dir = path_join($wp_basedir, $attachment);
$upload_url = path_join($wp_baseurl, $attachment);
} else {
$upload_dir = ks_pac_dcfh_app()->file_utils()::get_form_upload_dir($contact_form_id, $wp_subdir, $attachment);
$upload_url = ks_pac_dcfh_app()->file_utils()::get_form_upload_url($contact_form_id, $wp_subdir, $attachment);
}
if (et_()->WPFS()->is_file($upload_dir) && et_()->WPFS()->exists($upload_dir)) {
$attachments_list[] = $upload_url;
}
}
$csv_rows[] = implode(',', $attachments_list);
} else {
$csv_rows[] = '-';
}
} else {
$csv_rows[] = '' !== $form_data['value'] ? $form_data['value'] : '-';
}
} else {
$csv_rows[] = '-';
}
}
//fputcsv($f_handle, $csv_rows, ',', '"');
fputcsv($f_handle, $csv_rows, ',', '"', '\\');
}
}
}
if ('yes' === $include_summary) {
$csv_footer[]['path'] = "\n\n";
$csv_footer[]['path'] = sprintf(__('Total Entries: %s', 'divi-contact-form-helper'), $total_posts);
if (!empty($csv_start_date)) {
$csv_footer[]['path'] = sprintf(__('Start Date: %s', 'divi-contact-form-helper'), date_i18n("F j, Y", strtotime($csv_start_date)));
}
if (!empty($csv_end_date)) {
$csv_footer[]['path'] = sprintf(__('End Date: %s', 'divi-contact-form-helper'), date_i18n("F j, Y", strtotime($csv_end_date)));
}
$csv_footer[]['path'] = sprintf(__('Generated on: %s', 'divi-contact-form-helper'), date_i18n("F j, Y, g:i a"));
$csv_footer[]['path'] = sprintf(__('Generated By: %s', 'divi-contact-form-helper'), ucwords(ks_pac_dcfh_app()->user_manager()::get_author_name()));
foreach ($csv_footer as $footer) {
//fputcsv($f_handle, $footer, ',', '"');
fputcsv($f_handle, $footer, ',', '"', '\\');
}
}
if (ob_get_length() > 0) {
ob_flush();
}
fclose($f_handle); // phpcs:ignore
exit;
}
}
$this->display_form($post_request);
}
public function display_form($post_request): void
{
$contact_forms_data = $this->contact_form_data; ?>
<div class="wrap dcfh__page" id="page__export_csv">
<h1 class="wp-heading-inline"><?php esc_html_e(get_admin_page_title(), 'divi-contact-form-helper'); ?></h1>
<hr class="wp-header-end">
<?php ks_pac_dcfh_app()->admin_alert()::show_message(); ?>
<span class="spinner"></span>
<div id="poststuff">
<div id="post-body" class="metabox-holder columns-2">
<div class="postbox-container">
<div class="postbox">
<div class="inside">
<form method="POST" autocomplete="off" enctype="application/x-www-form-urlencoded">
<table class="form-table">
<tbody>
<tr>
<td colspan="3" class="text-right">
<b><?php esc_html_e('Total Entries:', 'divi-contact-form-helper'); ?></b><span></span>
</td>
</tr>
<tr>
<th><?php esc_html_e('CSV File Name:', 'divi-contact-form-helper'); ?>
<span class="required">*</span></th>
<td colspan="3">
<input title="" type="text" name="csv_filename" id="csv_filename" class="form-control" value="<?php echo esc_html($post_request['csv_filename']); ?>" placeholder="<?php esc_html_e('CSV File Name', 'divi-contact-form-helper'); ?>" required>
</td>
</tr>
<tr>
<th><?php esc_html_e('Contact Form:', 'divi-contact-form-helper'); ?>
<span class="required">*</span></th>
<td colspan="3">
<select title="" name="contact_form_id" id="contact_form_id" class="form-control" required>
<option value=""><?php esc_html_e('Select Contact Form', 'divi-contact-form-helper'); ?></option>
<?php if (!empty($contact_forms_data)) {
foreach ($contact_forms_data as $key => $value) { ?>
<option value="<?php echo esc_html($key); ?>" <?php selected($key, $post_request['contact_form_id']); ?>><?php echo esc_html($value['contact_form_title']); ?></option>
<?php }
} ?>
</select>
</td>
</tr>
<tr>
<th><?php esc_html_e('Contact Form Fields:', 'divi-contact-form-helper'); ?>
<span class="required">*</span></th>
<td colspan="3">
<div class="merge__tags_list"></div>
</td>
</tr>
<tr>
<th><?php esc_html_e('Start and End Date:', 'divi-contact-form-helper'); ?></th>
<td>
<input title="" type="text" name="csv_start_date" id="csv_start_date" class="form-control dcfh_datepicker" value="<?php echo esc_html($post_request['csv_start_date']); ?>" placeholder="<?php esc_html_e('Start Date', 'divi-contact-form-helper'); ?>">
</td>
<td>
<input title="" type="text" name="csv_end_date" id="csv_end_date" class="form-control dcfh_datepicker" value="<?php echo esc_html($post_request['csv_end_date']); ?>" placeholder="<?php esc_html_e('End Date', 'divi-contact-form-helper'); ?>">
</td>
</tr>
<tr>
<th><?php esc_html_e('Included Entry Statuses:', 'divi-contact-form-helper'); ?>
<span class="required">*</span></th>
<td colspan="3">
<?php
$checkboxes = [
'private' => 'Read',
'draft' => 'Unread',
'spam' => 'Spam',
'trash' => 'Trash'
];
?>
<?php foreach ($checkboxes as $value => $label) {
$checked = ($value === 'private' || $value === 'draft') ? 'checked' : '';
?>
<label class="bulk-select-button" for="<?php echo esc_attr($value); ?>">
<input type="checkbox" id="<?php echo esc_attr($value); ?>" name="entries_type[]" class="bulk-select-switcher" value="<?php echo esc_attr($value); ?>" <?php echo esc_attr($checked); ?>>
<span class="bulk-select-button-label"><?php echo esc_html__($label, 'divi-contact-form-helper'); ?></span>
</label>
<?php } ?>
</td>
</tr>
<tr>
<th><?php esc_html_e('Included Summary:', 'divi-contact-form-helper'); ?></th>
<td colspan="3">
<label class="bulk-select-button">
<input type="radio" name="include_summary" class="bulk-select-switcher" value="yes" checked>
<span class="bulk-select-button-label"><?php echo esc_html__('Yes', 'divi-contact-form-helper'); ?></span>
</label>
<label class="bulk-select-button">
<input type="radio" name="include_summary" class="bulk-select-switcher" value="no">
<span class="bulk-select-button-label"><?php echo esc_html__('No', 'divi-contact-form-helper'); ?></span>
</label>
</td>
</tr>
</tbody>
</table>
<?php
wp_nonce_field('nonce_export_csv');
submit_button(esc_html__('Export CSV', 'divi-contact-form-helper'), 'primary large', 'btn_export_as_csv');
?>
</form>
</div>
</div>
</div>
<div id="postbox-container-1" class="postbox-container">
<?php
require_once dirname(__DIR__)."/template/widget/documentation-widget.php";
require_once dirname(__DIR__)."/template/widget/support-widget.php";
?>
</div>
</div>
<br class="clear">
</div>
</div>
<?php
}
}