prefix . 'admilogu_login_history'; if ($type === 'failed') { // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, PluginCheck.Security.DirectDB.UnescapedDBParameter $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table_name WHERE status != 'success' ORDER BY time DESC LIMIT %d", 2000)); $title = __('Failed Login Attempts', 'admin-login-guard-branding'); $status_color = '#d63638'; $status_text = __('Failed', 'admin-login-guard-branding'); } else { // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, PluginCheck.Security.DirectDB.UnescapedDBParameter $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table_name WHERE status = 'success' ORDER BY time DESC LIMIT %d", 2000)); $title = __('Successful Logins', 'admin-login-guard-branding'); $status_color = '#00a32a'; $status_text = __('Success', 'admin-login-guard-branding'); } ?>
prefix . 'admilogu_login_history'; $results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY time DESC", ARRAY_A); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, PluginCheck.Security.DirectDB.UnescapedDBParameter if (empty($results)) { wp_die(esc_html__('No records found.', 'admin-login-guard-branding')); } $filename = 'login_history_' . gmdate('Y-m-d_H-i-s') . '.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Pragma: no-cache'); header('Expires: 0'); $output = fopen('php://output', 'w'); // Header row fputcsv($output, array( __('ID', 'admin-login-guard-branding'), __('IP Address', 'admin-login-guard-branding'), __('Username', 'admin-login-guard-branding'), __('Status', 'admin-login-guard-branding'), __('Time', 'admin-login-guard-branding'), __('User Agent', 'admin-login-guard-branding') )); foreach ($results as $row) { // Ensure status column exists in older records if (!isset($row['status'])) { $row['status'] = 'failed'; } // Reorder array to match headers $csv_row = array( $row['id'], $row['ip_address'], $row['username'], $row['status'], $row['time'], $row['user_agent'] ); fputcsv($output, $csv_row); } @fclose($output); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fclose exit; } add_action('admin_post_admilogu_download_history', 'admilogu_process_csv_export');