prefix . 'actlogpro_activity_log_pro_all_logs';
// Load the database class
require_once ACTLOGPRO_PLUGIN_DIR . 'includes/class-alp-database.php';
// Check if the table exists - use database abstraction method
$actlogpro_table_exists = ACTLOGPRO_Database::table_exists($actlogpro_table_name);
if (!$actlogpro_table_exists) {
echo '
' .
esc_html__('Activity log table not found in the database.', 'activity-log-pro') .
'
';
$actlogpro_found_table = false;
} else {
$actlogpro_found_table = true;
}
if (isset($actlogpro_found_table) && $actlogpro_found_table) {
// Get table columns to ensure we're using the correct column names - use database abstraction method
$actlogpro_columns = ACTLOGPRO_Database::get_table_structure($actlogpro_table_name);
$actlogpro_column_names = array();
foreach ($actlogpro_columns as $actlogpro_column) {
$actlogpro_column_names[] = $actlogpro_column['Field'];
}
// Map expected column names to actual column names
$actlogpro_id_column = in_array('id', $actlogpro_column_names) ? 'id' : (in_array('log_id', $actlogpro_column_names) ? 'log_id' : 'id');
$actlogpro_time_column = in_array('created_at', $actlogpro_column_names) ? 'created_at' : (in_array('log_time', $actlogpro_column_names) ? 'log_time' : (in_array('time', $actlogpro_column_names) ? 'time' : (in_array('date', $actlogpro_column_names) ? 'date' : 'created_at')));
$actlogpro_user_column = in_array('user_id', $actlogpro_column_names) ? 'user_id' : (in_array('user', $actlogpro_column_names) ? 'user' : 'user_id');
$actlogpro_user_name_column = in_array('user_display_name', $actlogpro_column_names) ? 'user_display_name' : null;
$actlogpro_user_login_column = in_array('user_login', $actlogpro_column_names) ? 'user_login' : null;
$actlogpro_ip_column = in_array('ip_address', $actlogpro_column_names) ? 'ip_address' : (in_array('ip', $actlogpro_column_names) ? 'ip' : 'ip_address');
$actlogpro_type_column = in_array('event_type', $actlogpro_column_names) ? 'event_type' : (in_array('type', $actlogpro_column_names) ? 'type' : 'event_type');
$actlogpro_desc_column = in_array('description', $actlogpro_column_names) ? 'description' : (in_array('message', $actlogpro_column_names) ? 'message' : (in_array('content', $actlogpro_column_names) ? 'content' : 'description'));
$actlogpro_severity_column = in_array('severity', $actlogpro_column_names) ? 'severity' : null;
$actlogpro_action_column = in_array('action', $actlogpro_column_names) ? 'action' : null;
$actlogpro_object_type_column = in_array('object_type', $actlogpro_column_names) ? 'object_type' : null;
$actlogpro_object_name_column = in_array('object_name', $actlogpro_column_names) ? 'object_name' : null;
$actlogpro_metadata_column = in_array('metadata', $actlogpro_column_names) ? 'metadata' : null;
// Prepare export args
$actlogpro_export_args = array(
'date_from' => $actlogpro_date_from,
'date_to' => $actlogpro_date_to,
'user' => $actlogpro_user,
'event_type' => $actlogpro_event_type,
'orderby' => $actlogpro_time_column,
'order' => 'DESC'
);
// Get logs using database abstraction method with caching
$actlogpro_logs = ACTLOGPRO_Database::get_logs_for_export($actlogpro_export_args);
}
// Generate the export file based on format
if ($actlogpro_format === 'csv') {
// Create headers based on available columns
$actlogpro_headers = array('ID', 'Date/Time', 'User', 'IP Address', 'Event Type');
if (isset($actlogpro_severity_column)) {
$actlogpro_headers[] = 'Severity';
}
$actlogpro_headers[] = 'Description';
// Add additional headers if columns exist
if (isset($actlogpro_object_type_column)) {
$actlogpro_headers[] = 'Object Type';
}
if (isset($actlogpro_object_name_column)) {
$actlogpro_headers[] = 'Object Name';
}
if (isset($actlogpro_action_column)) {
$actlogpro_headers[] = 'Action';
}
if (isset($actlogpro_metadata_column)) {
$actlogpro_headers[] = 'Metadata';
}
// Prepare data rows
$actlogpro_data = array();
// Add log data
foreach ($actlogpro_logs as $actlogpro_log) {
$actlogpro_row = array();
// ID
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_id_column]) ? $actlogpro_log[$actlogpro_id_column] : '';
// Date/Time
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_time_column]) ? $actlogpro_log[$actlogpro_time_column] : '';
// User
if (isset($actlogpro_user_name_column) && !empty($actlogpro_log[$actlogpro_user_name_column])) {
$actlogpro_row[] = $actlogpro_log[$actlogpro_user_name_column];
} else if (isset($actlogpro_user_login_column) && !empty($actlogpro_log[$actlogpro_user_login_column])) {
$actlogpro_row[] = $actlogpro_log[$actlogpro_user_login_column];
} else if (isset($actlogpro_user_column) && !empty($actlogpro_log[$actlogpro_user_column])) {
$actlogpro_user_info = get_userdata($actlogpro_log[$actlogpro_user_column]);
$actlogpro_row[] = $actlogpro_user_info ? $actlogpro_user_info->display_name : 'Unknown';
} else {
$actlogpro_row[] = 'Unknown';
}
// IP Address
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_ip_column]) ? $actlogpro_log[$actlogpro_ip_column] : '';
// Event Type
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_type_column]) ? $actlogpro_log[$actlogpro_type_column] : '';
// Severity
if (isset($actlogpro_severity_column)) {
$actlogpro_severity_value = isset($actlogpro_log[$actlogpro_severity_column]) ? sanitize_text_field($actlogpro_log[$actlogpro_severity_column]) : 'info';
if (class_exists('ACTLOGPRO_Severity') && ACTLOGPRO_Severity::is_valid($actlogpro_severity_value)) {
$actlogpro_row[] = ACTLOGPRO_Severity::get_label($actlogpro_severity_value);
} else {
$actlogpro_row[] = class_exists('ACTLOGPRO_Severity') ? ACTLOGPRO_Severity::get_label(ACTLOGPRO_Severity::LEVEL_DEFAULT) : 'Info';
}
}
// Description
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_desc_column]) ? $actlogpro_log[$actlogpro_desc_column] : '';
// Object Type
if (isset($actlogpro_object_type_column)) {
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_object_type_column]) ? $actlogpro_log[$actlogpro_object_type_column] : '';
}
// Object Name
if (isset($actlogpro_object_name_column)) {
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_object_name_column]) ? $actlogpro_log[$actlogpro_object_name_column] : '';
}
// Action
if (isset($actlogpro_action_column)) {
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_action_column]) ? $actlogpro_log[$actlogpro_action_column] : '';
}
// Metadata
if (isset($actlogpro_metadata_column)) {
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_metadata_column]) ? $actlogpro_log[$actlogpro_metadata_column] : '';
}
$actlogpro_data[] = $actlogpro_row;
}
// Add footer with plugin info
$actlogpro_data[] = array('');
$actlogpro_data[] = array('Generated by Activity Log Pro - v' . ACTLOGPRO_VERSION);
$actlogpro_data[] = array('https://activitylog.pro/');
// Generate CSV content using ACTLOGPRO_Filesystem helper
$actlogpro_csv_content = ACTLOGPRO_Filesystem::generate_csv($actlogpro_headers, $actlogpro_data);
// Write the CSV content to file using WordPress filesystem
ACTLOGPRO_Filesystem::put_contents($actlogpro_export_file_path, $actlogpro_csv_content);
}
else if ($actlogpro_format === 'html') {
// HTML format
/**
* NOTE FOR WORDPRESS PLUGIN REVIEWERS:
* The following CSS is included inline ONLY in the exported HTML file for portability.
* It is NOT output to any WordPress admin or frontend screen.
* This ensures the exported file is fully self-contained and viewable outside WordPress.
*/
// Read CSS from external file to include in exported HTML
$actlogpro_css_file = ACTLOGPRO_PLUGIN_DIR . 'admin/css/alp-export-html.css';
$actlogpro_css_content = '';
if (file_exists($actlogpro_css_file)) {
$actlogpro_css_content = file_get_contents($actlogpro_css_file);
// Remove CSS comments and normalize for inline use
$actlogpro_css_content = preg_replace('/\/\*.*?\*\//s', '', $actlogpro_css_content);
$actlogpro_css_content = preg_replace('/\s+/', ' ', trim($actlogpro_css_content));
}
$actlogpro_html = '
Activity Log Export
Activity Log Export
Exported on: ' . gmdate('Y-m-d H:i:s') . '
Total records: ' . count($actlogpro_logs) . '
| ID |
Date/Time |
User |
IP Address |
Event Type | ';
if (isset($actlogpro_severity_column)) {
$actlogpro_html .= 'Severity | ';
}
if (isset($actlogpro_object_type_column)) {
$actlogpro_html .= 'Object Type | ';
}
if (isset($actlogpro_object_name_column)) {
$actlogpro_html .= 'Object Name | ';
}
if (isset($actlogpro_action_column)) {
$actlogpro_html .= 'Action | ';
}
$actlogpro_html .= 'Description | ';
if (isset($actlogpro_metadata_column)) {
$actlogpro_html .= 'Metadata | ';
}
$actlogpro_html .= '
';
foreach ($actlogpro_logs as $actlogpro_log) {
$actlogpro_html .= '';
// ID
$actlogpro_html .= '| ' . (isset($actlogpro_log[$actlogpro_id_column]) ? esc_html($actlogpro_log[$actlogpro_id_column]) : '') . ' | ';
// Date/Time
$actlogpro_html .= '' . (isset($actlogpro_log[$actlogpro_time_column]) ? esc_html($actlogpro_log[$actlogpro_time_column]) : '') . ' | ';
// User
if (isset($actlogpro_user_name_column) && !empty($actlogpro_log[$actlogpro_user_name_column])) {
$actlogpro_html .= '' . esc_html($actlogpro_log[$actlogpro_user_name_column]) . ' | ';
} else if (isset($actlogpro_user_login_column) && !empty($actlogpro_log[$actlogpro_user_login_column])) {
$actlogpro_html .= '' . esc_html($actlogpro_log[$actlogpro_user_login_column]) . ' | ';
} else if (isset($actlogpro_user_column) && !empty($actlogpro_log[$actlogpro_user_column])) {
$actlogpro_user_info = get_userdata($actlogpro_log[$actlogpro_user_column]);
$actlogpro_html .= '' . ($actlogpro_user_info ? esc_html($actlogpro_user_info->display_name) : 'Unknown') . ' | ';
} else {
$actlogpro_html .= 'Unknown | ';
}
// IP Address
$actlogpro_html .= '' . (isset($actlogpro_log[$actlogpro_ip_column]) ? esc_html($actlogpro_log[$actlogpro_ip_column]) : '') . ' | ';
// Event Type
$actlogpro_html .= '' . (isset($actlogpro_log[$actlogpro_type_column]) ? esc_html($actlogpro_log[$actlogpro_type_column]) : '') . ' | ';
// Severity
if (isset($actlogpro_severity_column)) {
$actlogpro_severity_value = isset($actlogpro_log[$actlogpro_severity_column]) ? sanitize_text_field($actlogpro_log[$actlogpro_severity_column]) : 'info';
if (class_exists('ACTLOGPRO_Severity') && ACTLOGPRO_Severity::is_valid($actlogpro_severity_value)) {
$actlogpro_html .= '' . esc_html(ACTLOGPRO_Severity::get_label($actlogpro_severity_value)) . ' | ';
} else {
$actlogpro_html .= '' . esc_html(class_exists('ACTLOGPRO_Severity') ? ACTLOGPRO_Severity::get_label(ACTLOGPRO_Severity::LEVEL_DEFAULT) : 'Info') . ' | ';
}
}
// Object Type
if (isset($actlogpro_object_type_column)) {
$actlogpro_html .= '' . (isset($actlogpro_log[$actlogpro_object_type_column]) ? esc_html($actlogpro_log[$actlogpro_object_type_column]) : '') . ' | ';
}
// Object Name
if (isset($actlogpro_object_name_column)) {
$actlogpro_html .= '' . (isset($actlogpro_log[$actlogpro_object_name_column]) ? esc_html($actlogpro_log[$actlogpro_object_name_column]) : '') . ' | ';
}
// Action
if (isset($actlogpro_action_column)) {
$actlogpro_html .= '' . (isset($actlogpro_log[$actlogpro_action_column]) ? esc_html($actlogpro_log[$actlogpro_action_column]) : '') . ' | ';
}
// Description
$actlogpro_html .= '' . (isset($actlogpro_log[$actlogpro_desc_column]) ? esc_html($actlogpro_log[$actlogpro_desc_column]) : '') . ' | ';
// Metadata
if (isset($actlogpro_metadata_column)) {
$actlogpro_html .= '' . (isset($actlogpro_log[$actlogpro_metadata_column]) ? esc_html($actlogpro_log[$actlogpro_metadata_column]) : '') . ' | ';
}
$actlogpro_html .= '
';
}
$actlogpro_html .= '
';
file_put_contents($actlogpro_export_file_path, $actlogpro_html);
}
else if ($actlogpro_format === 'txt') {
// TXT format
$actlogpro_txt_content = "Activity Log Export\n";
$actlogpro_txt_content .= "=================\n\n";
$actlogpro_txt_content .= "Exported on: " . gmdate('Y-m-d H:i:s') . "\n";
$actlogpro_txt_content .= "Total records: " . count($actlogpro_logs) . "\n\n";
// Create headers
$actlogpro_txt_headers = array('ID', 'Date/Time', 'User', 'IP Address', 'Event Type');
if (isset($actlogpro_severity_column)) {
$actlogpro_txt_headers[] = 'Severity';
}
if (isset($actlogpro_object_type_column)) {
$actlogpro_txt_headers[] = 'Object Type';
}
if (isset($actlogpro_object_name_column)) {
$actlogpro_txt_headers[] = 'Object Name';
}
if (isset($actlogpro_action_column)) {
$actlogpro_txt_headers[] = 'Action';
}
$actlogpro_txt_headers[] = 'Description';
if (isset($actlogpro_metadata_column)) {
$actlogpro_txt_headers[] = 'Metadata';
}
// Add headers to content
$actlogpro_txt_content .= implode("\t", $actlogpro_txt_headers) . "\n";
$actlogpro_txt_content .= str_repeat('-', 100) . "\n";
// Add log data
foreach ($actlogpro_logs as $actlogpro_log) {
$actlogpro_row = array();
// ID
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_id_column]) ? $actlogpro_log[$actlogpro_id_column] : '';
// Date/Time
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_time_column]) ? $actlogpro_log[$actlogpro_time_column] : '';
// User
if (isset($actlogpro_user_name_column) && !empty($actlogpro_log[$actlogpro_user_name_column])) {
$actlogpro_row[] = $actlogpro_log[$actlogpro_user_name_column];
} else if (isset($actlogpro_user_login_column) && !empty($actlogpro_log[$actlogpro_user_login_column])) {
$actlogpro_row[] = $actlogpro_log[$actlogpro_user_login_column];
} else if (isset($actlogpro_user_column) && !empty($actlogpro_log[$actlogpro_user_column])) {
$actlogpro_user_info = get_userdata($actlogpro_log[$actlogpro_user_column]);
$actlogpro_row[] = $actlogpro_user_info ? $actlogpro_user_info->display_name : 'Unknown';
} else {
$actlogpro_row[] = 'Unknown';
}
// IP Address
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_ip_column]) ? $actlogpro_log[$actlogpro_ip_column] : '';
// Event Type
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_type_column]) ? $actlogpro_log[$actlogpro_type_column] : '';
// Severity
if (isset($actlogpro_severity_column)) {
$actlogpro_severity_value = isset($actlogpro_log[$actlogpro_severity_column]) ? sanitize_text_field($actlogpro_log[$actlogpro_severity_column]) : 'info';
if (class_exists('ACTLOGPRO_Severity') && ACTLOGPRO_Severity::is_valid($actlogpro_severity_value)) {
$actlogpro_row[] = ACTLOGPRO_Severity::get_label($actlogpro_severity_value);
} else {
$actlogpro_row[] = class_exists('ACTLOGPRO_Severity') ? ACTLOGPRO_Severity::get_label(ACTLOGPRO_Severity::LEVEL_DEFAULT) : 'Info';
}
}
// Object Type
if (isset($actlogpro_object_type_column)) {
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_object_type_column]) ? $actlogpro_log[$actlogpro_object_type_column] : '';
}
// Object Name
if (isset($actlogpro_object_name_column)) {
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_object_name_column]) ? $actlogpro_log[$actlogpro_object_name_column] : '';
}
// Action
if (isset($actlogpro_action_column)) {
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_action_column]) ? $actlogpro_log[$actlogpro_action_column] : '';
}
// Description
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_desc_column]) ? $actlogpro_log[$actlogpro_desc_column] : '';
// Metadata
if (isset($actlogpro_metadata_column)) {
$actlogpro_row[] = isset($actlogpro_log[$actlogpro_metadata_column]) ? $actlogpro_log[$actlogpro_metadata_column] : '';
}
$actlogpro_txt_content .= implode("\t", $actlogpro_row) . "\n";
}
// Add footer with plugin info
$actlogpro_txt_content .= "\n\n";
$actlogpro_txt_content .= "Generated by Activity Log Pro - v" . ACTLOGPRO_VERSION . "\n";
$actlogpro_txt_content .= "https://activitylog.pro/";
file_put_contents($actlogpro_export_file_path, $actlogpro_txt_content);
}
else {
// JSON format
$actlogpro_json_data = array();
foreach ($actlogpro_logs as $actlogpro_log) {
$actlogpro_json_item = array();
// ID
$actlogpro_json_item['id'] = isset($actlogpro_log[$actlogpro_id_column]) ? $actlogpro_log[$actlogpro_id_column] : '';
// Date/Time
$actlogpro_json_item['date_time'] = isset($actlogpro_log[$actlogpro_time_column]) ? $actlogpro_log[$actlogpro_time_column] : '';
// User
if (isset($actlogpro_user_name_column) && !empty($actlogpro_log[$actlogpro_user_name_column])) {
$actlogpro_json_item['user'] = $actlogpro_log[$actlogpro_user_name_column];
} else if (isset($actlogpro_user_login_column) && !empty($actlogpro_log[$actlogpro_user_login_column])) {
$actlogpro_json_item['user'] = $actlogpro_log[$actlogpro_user_login_column];
} else if (isset($actlogpro_user_column) && !empty($actlogpro_log[$actlogpro_user_column])) {
$actlogpro_user_info = get_userdata($actlogpro_log[$actlogpro_user_column]);
$actlogpro_json_item['user'] = $actlogpro_user_info ? $actlogpro_user_info->display_name : 'Unknown';
} else {
$actlogpro_json_item['user'] = 'Unknown';
}
// IP Address
if (isset($actlogpro_ip_column)) {
$actlogpro_json_item['ip_address'] = isset($actlogpro_log[$actlogpro_ip_column]) ? $actlogpro_log[$actlogpro_ip_column] : '';
}
// Event Type
if (isset($actlogpro_type_column)) {
$actlogpro_json_item['event_type'] = isset($actlogpro_log[$actlogpro_type_column]) ? $actlogpro_log[$actlogpro_type_column] : '';
}
// Severity
if (isset($actlogpro_severity_column)) {
$actlogpro_severity_value = isset($actlogpro_log[$actlogpro_severity_column]) ? sanitize_text_field($actlogpro_log[$actlogpro_severity_column]) : 'info';
if (class_exists('ACTLOGPRO_Severity') && ACTLOGPRO_Severity::is_valid($actlogpro_severity_value)) {
$actlogpro_json_item['severity'] = ACTLOGPRO_Severity::get_label($actlogpro_severity_value);
} else {
$actlogpro_json_item['severity'] = class_exists('ACTLOGPRO_Severity') ? ACTLOGPRO_Severity::get_label(ACTLOGPRO_Severity::LEVEL_DEFAULT) : 'Info';
}
}
// Object Type
if (isset($actlogpro_object_type_column)) {
$actlogpro_json_item['object_type'] = isset($actlogpro_log[$actlogpro_object_type_column]) ? $actlogpro_log[$actlogpro_object_type_column] : '';
}
// Object Name
if (isset($actlogpro_object_name_column)) {
$actlogpro_json_item['object_name'] = isset($actlogpro_log[$actlogpro_object_name_column]) ? $actlogpro_log[$actlogpro_object_name_column] : '';
}
// Action
if (isset($actlogpro_action_column)) {
$actlogpro_json_item['action'] = isset($actlogpro_log[$actlogpro_action_column]) ? $actlogpro_log[$actlogpro_action_column] : '';
}
// Description
if (isset($actlogpro_desc_column)) {
$actlogpro_json_item['description'] = isset($actlogpro_log[$actlogpro_desc_column]) ? $actlogpro_log[$actlogpro_desc_column] : '';
}
// Metadata
if (isset($actlogpro_metadata_column)) {
$actlogpro_json_item['metadata'] = isset($actlogpro_log[$actlogpro_metadata_column]) ? $actlogpro_log[$actlogpro_metadata_column] : '';
}
$actlogpro_json_data[] = $actlogpro_json_item;
}
// Add metadata about the export
$actlogpro_json_export = array(
'export_info' => array(
'generated_by' => 'Activity Log Pro - v' . ACTLOGPRO_VERSION,
'website' => 'https://activitylog.pro/',
'export_date' => gmdate('Y-m-d H:i:s'),
'total_records' => count($actlogpro_logs)
),
'logs' => $actlogpro_json_data
);
file_put_contents($actlogpro_export_file_path, wp_json_encode($actlogpro_json_export, JSON_PRETTY_PRINT));
}
// Display appropriate message based on record count - moved outside the format conditions
if (count($actlogpro_logs) > 0) {
// Get format name for display (uppercase)
$actlogpro_format_display = strtoupper($actlogpro_format);
// Display success message with download link
echo '
';
printf(
// Translators: %1$s is the file format (CSV, JSON, etc.), %2$d is the number of records
esc_html__('%1$s Export file created successfully with %2$d records.', 'activity-log-pro'),
esc_html($actlogpro_format_display),
count($actlogpro_logs)
);
echo ' ' . esc_html__('Click here to download', 'activity-log-pro') . '';
echo '
';
} else {
// Display message for zero records
echo '
' .
esc_html__('No records exported for your selection.', 'activity-log-pro') .
'
';
}
}
?>