prefix . 'eistat_'; // ------------------------------------------------------------- // Handle actions // ------------------------------------------------------------- // Create ZIP archive if (isset($_POST['eistat_create_archive'])) { check_admin_referer('eistat_create_archive'); $eistat_from = isset($_POST['from']) ? sanitize_text_field(wp_unslash($_POST['from'])) : ''; $eistat_to = isset($_POST['to']) ? sanitize_text_field(wp_unslash($_POST['to'])) : ''; $eistat_tables = isset($_POST['tables']) && is_array($_POST['tables']) ? array_map('sanitize_key', wp_unslash($_POST['tables'])) : []; $eistat_tables = array_intersect($eistat_tables, EISTAT_Exporter::tables()); if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $eistat_from) && preg_match('/^\d{4}-\d{2}-\d{2}$/', $eistat_to) && $eistat_tables) { $eistat_name = EISTAT_Exporter::create_archive($eistat_tables, $eistat_from, $eistat_to); if ($eistat_name) { echo '

' . sprintf( /* translators: %s: archive file name */ esc_html__('Archive created: %s', 'statinform'), '' . esc_html($eistat_name) . '' ) . '

'; } else { echo '

' . esc_html__('Failed to create the archive.', 'statinform') . '

'; } } else { echo '

' . esc_html__('Please provide a valid period and select at least one table.', 'statinform') . '

'; } } // Delete old data if (isset($_POST['eistat_delete_old'])) { check_admin_referer('eistat_delete_old'); $eistat_date = isset($_POST['delete_before']) ? sanitize_text_field(wp_unslash($_POST['delete_before'])) : ''; $eistat_with_archive = !empty($_POST['with_archive']); if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $eistat_date)) { if ($eistat_with_archive) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter $eistat_earliest = $wpdb->get_var("SELECT MIN(date) FROM {$eistat_p}daily"); if ($eistat_earliest && $eistat_earliest < $eistat_date) { $eistat_archive_to = gmdate('Y-m-d', strtotime($eistat_date . ' -1 day')); $eistat_name = EISTAT_Exporter::create_archive( EISTAT_Exporter::tables(), $eistat_earliest, $eistat_archive_to ); if ($eistat_name) { echo '

' . sprintf( /* translators: %s: archive file name */ esc_html__('Archive created: %s', 'statinform'), '' . esc_html($eistat_name) . '' ) . '

'; } } } $eistat_deleted = EISTAT_Exporter::delete_before($eistat_date); $eistat_summary = []; foreach ($eistat_deleted as $t => $n) { if ($n > 0) { $eistat_summary[] = $t . ': ' . number_format_i18n($n); } } if ($eistat_summary) { echo '

' . esc_html__('Deleted:', 'statinform') . ' ' . esc_html(implode(', ', $eistat_summary)) . '

'; } else { echo '

' . esc_html__('No data found for deletion in the specified period.', 'statinform') . '

'; } } } // Delete a single archive // phpcs:ignore WordPress.Security.NonceVerification.Recommended if (isset($_GET['eistat_action']) && $_GET['eistat_action'] === 'delete_archive' && isset($_GET['name'])) { check_admin_referer('eistat_delete_archive'); // phpcs:ignore WordPress.Security.NonceVerification.Recommended $eistat_name = sanitize_file_name(wp_unslash($_GET['name'])); if (EISTAT_Exporter::delete_archive($eistat_name)) { echo '

' . esc_html__('Archive deleted.', 'statinform') . '

'; } } // ------------------------------------------------------------- // Prepare data for display // ------------------------------------------------------------- // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter $eistat_min_date = $wpdb->get_var("SELECT MIN(date) FROM {$eistat_p}daily"); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter $eistat_max_date = $wpdb->get_var("SELECT MAX(date) FROM {$eistat_p}daily"); $eistat_size_info = EISTAT_Exporter::db_size_info(); $eistat_archives = EISTAT_Exporter::list_archives(); $eistat_default_from = $eistat_min_date ?: gmdate('Y-m-d'); $eistat_default_to = $eistat_max_date ?: gmdate('Y-m-d'); $eistat_delete_default = gmdate('Y-m-d', strtotime('-12 months')); ?>

~

—

'eistat_download_archive', 'name' => $a['name'], ], admin_url('admin-post.php')), 'eistat_download_archive' ); $eistat_del_url = wp_nonce_url( add_query_arg([ 'page' => 'eistat-dashboard', 'view' => 'archives', 'eistat_action' => 'delete_archive', 'name' => $a['name'], ], admin_url('admin.php')), 'eistat_delete_archive' ); ?>