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