?? GreyFile — Mystic File Browser

Current path: home/webdevt/www/demo2/wp-content/plugins/divi-contact-form-helper/d5/server/Admin/Crons/



?? Go up: /home/webdevt/www/demo2/wp-content/plugins/divi-contact-form-helper/d5/server/Admin

?? Viewing: EntriesAutoBackup.php

<?php

namespace KS_PAC_DCFH\Admin\Crons;

use WP_Query;
use ZipArchive;

if (!defined('ABSPATH')) {
    exit;
}

class EntriesAutoBackup
{
    private string $hook;

    private string $recurrence;

    public function load(): void
    {
        if (ks_pac_dcfh_app()->settings_rep()->is_setting_enabled('is_entries_auto_backup_enabled')) {
            $schedule = ks_pac_dcfh_app()->settings_rep()->get_setting('entries_backup_schedule');
            $this->hook = 'dcfh_entries_backup_'.$schedule;
            $this->recurrence = $schedule;
            add_action('init', [$this, 'maybe_schedule_event']);
            add_action($this->hook, [$this, 'maybe_process_cron']);
        }
    }

    public function maybe_schedule_event(): void
    {
        if (!wp_next_scheduled($this->hook)) {
            wp_schedule_event(time(), $this->recurrence, $this->hook);
        }
    }

    public function maybe_process_cron(): void
    {
        $zip_file_dir = $this->create_backup();
        if ($zip_file_dir !== false && !empty($zip_file_dir['path']) && !empty($zip_file_dir['url'])) {
            ks_pac_dcfh_app()->notification_dispatcher()->entries_backup_notification($zip_file_dir);
        }
    }

    private function create_backup()
    {
        if (!class_exists('ZipArchive')) {
            $message = [
                'sent' => false,
                'datetime' => current_time('Y/m/d H:i:s a'),
                'message' => __('PHP needs to have the zip extension installed. If you are using cpanel you may have zip extension installed but not activated. You need to activate it. Please contact your hosting provider to activate it.', 'divi-contact-form-helper'),
            ];
            ks_pac_dcfh_app()->form_settings_manager()::update_backup_status($message);

            return false;
        }
        $contact_forms = ks_pac_dcfh_app()->general_db_manager()::get_contact_forms();
        if (!empty($contact_forms)) {
            $wp_upload_dir = wp_upload_dir();
            $upload_path = $wp_upload_dir['basedir'];
            $upload_url = $wp_upload_dir['baseurl'];
            $zip_file_name = 'divi-contact-form-helper-backup-'.time().'.zip';
            $zip_file_dir = wp_normalize_path($upload_path.DIRECTORY_SEPARATOR.$zip_file_name);
            $zip_file_url = wp_normalize_path($upload_url.DIRECTORY_SEPARATOR.$zip_file_name);
            $zip = new ZipArchive();
            $total_files_zipped = 0;
            foreach ($contact_forms as $contact_form) {
                $contact_form_id = $contact_form['unique_id'];
                $contact_form_title = sanitize_file_name($contact_form['title']);
                $csv_file_name = $contact_form_title.'.csv';
                $csv_file_dir = wp_normalize_path($upload_path.DIRECTORY_SEPARATOR.$csv_file_name);
                if (false === ($f_handle = fopen($csv_file_dir, 'wb'))) { // phpcs:ignore
                    $message = [
                        'sent' => false,
                        'datetime' => current_time('Y/m/d H:i:s a'),
                        'message' => __('Backup needs to create a CSV file. Server is not allowed to create file.', 'divi-contact-form-helper'),
                    ];
                    ks_pac_dcfh_app()->form_settings_manager()::update_backup_status($message);
                    continue;
                }
                fwrite($f_handle, chr(0xEF).chr(0xBB).chr(0xBF)); // phpcs:ignore
                $total_posts_obj = new WP_Query([
                    'post_type' => 'pwh_dcfh',
                    'post_status' => 'any',
                    'meta_key' => '_pwh_dcfh_contact_form_id', // phpcs:ignore
                    'meta_value' => $contact_form_id // phpcs:ignore
                ]);
                $total_posts = $total_posts_obj->found_posts;
                $posts_per_page = 200;
                $counter = 0;
                $form_data = [];
                $csv_headers = [];
                $csv_rows = [];
                for ($i = 0; $i < ceil($total_posts / $posts_per_page); ++$i) {
                    $post_obj = new WP_Query([
                        'post_type' => 'pwh_dcfh',
                        'post_status' => 'any',
                        'posts_per_page' => $posts_per_page,
                        'offset' => $i * $posts_per_page,
                        'meta_key' => '_pwh_dcfh_contact_form_id', // phpcs:ignore
                        'meta_value' => $contact_form_id // phpcs:ignore
                    ]);
                    foreach ($post_obj->posts as $post) {
                        $counter++;
                        $post_id = $post->ID;
                        $post_excerpt = $post->post_excerpt;
                        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'];
                                    $field_label = $form_entry['label'];
                                    $field_type = $form_entry['type'];
                                    $form_data[$contact_form_id][$field_id] = $field_id;
                                    $csv_headers[$contact_form_id][$field_id] = $field_label;
                                    $wp_subdir = $form_entry['subdir'] ?? '';
                                    $wp_basedir = rtrim($wp_upload_dir['basedir'], '/').'/'.$wp_subdir;
                                    $wp_baseurl = rtrim($wp_upload_dir['baseurl'], '/').'/'.$wp_subdir;
                                    if ('file' === $field_type || 'signature-pad' === $field_type|| 'signature_pad' === $field_type) {
                                        $attachments = array_filter(explode(',', $form_entry['value']));
                                        if (!empty($attachments)) {
                                            $attachments_list = [];
                                            foreach ($attachments as $attachment) {
                                                if (!empty($form_entry['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[$contact_form_id][$counter][$field_id] = implode(',', $attachments_list);
                                        }
                                    } else {
                                        $csv_rows[$contact_form_id][$counter][$field_id] = !empty($form_entry['value']) ? $form_entry['value'] : '-';
                                    }
                                }
                                $csv_rows[$contact_form_id][$counter] = array_merge($csv_rows[$contact_form_id][$counter], [
                                    'entry_number' => $post_id,
                                    'read_by' => '0000-00-00 00:00:00' !== $post->post_modified
                                        ? ks_pac_dcfh_app()->user_manager()::get_author_name(ks_pac_dcfh_app()->entry_meta_manager()::get_read_by_meta_value($post_id))
                                        : '',
                                    'submitter' => ks_pac_dcfh_app()->user_manager()::get_submitter_name($post->post_author),
                                    'page_title' => get_the_title($page_id),
                                    'page_url' => get_the_permalink($page_id),
                                    'entry_date' => ks_pac_dcfh_app()->misc_utils()::get_formatted_datetime($post->post_date),
                                    'ip_address' => !empty(ks_pac_dcfh_app()->entry_meta_manager()::get_ip_address_meta_value($post_id))
                                        ? ks_pac_dcfh_app()->entry_meta_manager()::get_ip_address_meta_value($post_id)
                                        : '',
                                    'browser' => isset($user_agent_meta['browser'])
                                        ? ucfirst($user_agent_meta['browser'])
                                        : '',
                                    'platform' => isset($user_agent_meta['platform'])
                                        ? ucfirst($user_agent_meta['platform'])
                                        : '',
                                ]);
                            }
                        }
                    }
                }
                if (!empty($csv_rows)) {
                    $form_data[$contact_form_id] = wp_parse_args(array_keys(ks_pac_dcfh_app()->placeholder_helper()::get_csv_placeholders()), $form_data[$contact_form_id]);
                    $csv_headers[$contact_form_id] = wp_parse_args(array_values(ks_pac_dcfh_app()->placeholder_helper()::get_csv_placeholders()), array_values($csv_headers[$contact_form_id]));
                    fputcsv($f_handle, $csv_headers[$contact_form_id]/*, ',', '"'*/);
                    foreach ($csv_rows[$contact_form_id] as $value) {
                        $csv_row_data = [];
                        foreach ($form_data[$contact_form_id] as $header) {
                            $csv_row_data[] = $value[$header] ?? '-';
                        }
                        fputcsv($f_handle, $csv_row_data/*, ',', '"'*/);
                    }
                    $csv_footer = [
                        ["path" => "\n\n"],
                        ["path" => __("Total Entries: ".$total_posts, 'divi-contact-form-helper')],
                        ["path" => __("Generated on: ".date_i18n("F j, Y, g:i a"), 'divi-contact-form-helper')],
                        ["path" => __("Auto Generated", 'divi-contact-form-helper')],
                    ];
                    foreach ($csv_footer as $footer) {
                        fputcsv($f_handle, $footer/*, ',', '"'*/);
                    }
                    fclose($f_handle); // phpcs:ignore
                    // Zipped CSV
                    if ($zip->open($zip_file_dir, ZipArchive::CREATE)) {
                        $zip->addFile($csv_file_dir, $csv_file_name);
                        @$zip->close(); // phpcs:ignore
                        if (file_exists($csv_file_dir)) {
                            wp_delete_file($csv_file_dir);
                            $total_files_zipped++;
                        }
                    }
                }
            }
            if ($total_files_zipped > 0) {
                return ['path' => $zip_file_dir, 'url' => $zip_file_url, 'total_files' => $total_files_zipped];
            }
        }

        return false;
    }
}



??

??