?? GreyFile — Mystic File Browser

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

?? Viewing: ExportCSV.php

<?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
    }
}


??

??