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) . '

'; if (isset($actlogpro_severity_column)) { $actlogpro_html .= ''; } if (isset($actlogpro_object_type_column)) { $actlogpro_html .= ''; } if (isset($actlogpro_object_name_column)) { $actlogpro_html .= ''; } if (isset($actlogpro_action_column)) { $actlogpro_html .= ''; } $actlogpro_html .= ''; if (isset($actlogpro_metadata_column)) { $actlogpro_html .= ''; } $actlogpro_html .= ''; foreach ($actlogpro_logs as $actlogpro_log) { $actlogpro_html .= ''; // ID $actlogpro_html .= ''; // Date/Time $actlogpro_html .= ''; // User if (isset($actlogpro_user_name_column) && !empty($actlogpro_log[$actlogpro_user_name_column])) { $actlogpro_html .= ''; } else if (isset($actlogpro_user_login_column) && !empty($actlogpro_log[$actlogpro_user_login_column])) { $actlogpro_html .= ''; } else if (isset($actlogpro_user_column) && !empty($actlogpro_log[$actlogpro_user_column])) { $actlogpro_user_info = get_userdata($actlogpro_log[$actlogpro_user_column]); $actlogpro_html .= ''; } else { $actlogpro_html .= ''; } // IP Address $actlogpro_html .= ''; // Event Type $actlogpro_html .= ''; // 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 .= ''; } else { $actlogpro_html .= ''; } } // Object Type if (isset($actlogpro_object_type_column)) { $actlogpro_html .= ''; } // Object Name if (isset($actlogpro_object_name_column)) { $actlogpro_html .= ''; } // Action if (isset($actlogpro_action_column)) { $actlogpro_html .= ''; } // Description $actlogpro_html .= ''; // Metadata if (isset($actlogpro_metadata_column)) { $actlogpro_html .= ''; } $actlogpro_html .= ''; } $actlogpro_html .= '
ID Date/Time User IP Address Event TypeSeverityObject TypeObject NameActionDescriptionMetadata
' . (isset($actlogpro_log[$actlogpro_id_column]) ? esc_html($actlogpro_log[$actlogpro_id_column]) : '') . '' . (isset($actlogpro_log[$actlogpro_time_column]) ? esc_html($actlogpro_log[$actlogpro_time_column]) : '') . '' . esc_html($actlogpro_log[$actlogpro_user_name_column]) . '' . esc_html($actlogpro_log[$actlogpro_user_login_column]) . '' . ($actlogpro_user_info ? esc_html($actlogpro_user_info->display_name) : 'Unknown') . 'Unknown' . (isset($actlogpro_log[$actlogpro_ip_column]) ? esc_html($actlogpro_log[$actlogpro_ip_column]) : '') . '' . (isset($actlogpro_log[$actlogpro_type_column]) ? esc_html($actlogpro_log[$actlogpro_type_column]) : '') . '' . esc_html(ACTLOGPRO_Severity::get_label($actlogpro_severity_value)) . '' . esc_html(class_exists('ACTLOGPRO_Severity') ? ACTLOGPRO_Severity::get_label(ACTLOGPRO_Severity::LEVEL_DEFAULT) : 'Info') . '' . (isset($actlogpro_log[$actlogpro_object_type_column]) ? esc_html($actlogpro_log[$actlogpro_object_type_column]) : '') . '' . (isset($actlogpro_log[$actlogpro_object_name_column]) ? esc_html($actlogpro_log[$actlogpro_object_name_column]) : '') . '' . (isset($actlogpro_log[$actlogpro_action_column]) ? esc_html($actlogpro_log[$actlogpro_action_column]) : '') . '' . (isset($actlogpro_log[$actlogpro_desc_column]) ? esc_html($actlogpro_log[$actlogpro_desc_column]) : '') . '' . (isset($actlogpro_log[$actlogpro_metadata_column]) ? esc_html($actlogpro_log[$actlogpro_metadata_column]) : '') . '
'; 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') . '

'; } } ?>
actlogpro_render_admin_footer(); ?>