12 KiB
Activity Log Enhancement - Complete Implementation Guide
Overview
Your activity log system has been significantly enhanced with professional-grade logging, analytics, and monitoring features. Here's everything that was implemented:
✅ IMPLEMENTED FEATURES
1. Pagination (25 records per page)
- Location:
admin/activity-log - Features:
- Display 25 logs per page
- Navigation with First, Previous, Next, Last buttons
- Page indicator (Page X of Y)
- Smart pagination (shows ... for gaps)
- Maintains filters and sort order while navigating
2. Advanced Search & Filtering
- New search field: Search by Actor Name
- Existing filters improved:
- Action filter (by log action type)
- Role filter (Admin, Doctor, Patient)
- Date Range filter (From/To dates)
- All filters work together - combine multiple filters to narrow results
3. Sortable Column Headers
- Click any column header to sort:
- Time (⬆️ ASC / ⬇️ DESC)
- Actor Name
- Role
- Action
- IP Address
- Visual indicators (▲ ▼ ◆) show sort direction
- Maintains filters while sorting
- Reset to default sort (newest first)
4. Pagination URL Structure
/admin/activity-log?page=2&action=login&role=admin&actor_name=John&date_from=2024-01-01&date_to=2024-12-31&sort_by=al.created_at&sort_order=DESC
5. Print-Friendly View
- Usage: Click "Print" button to open print dialog
- Hides sidebar, buttons, and expandable rows
- Optimized for PDF export
- Professional formatting for audit reports
6. CSV Export
- Usage: Click "Export CSV" button
- Exports visible logs (respects current filters)
- Filename format:
activity_log_YYYY-MM-DD.csv - Compatible with Excel, Google Sheets, etc.
7. Clear Old Logs (Data Management)
- Usage: Click "Clear Old Logs" button
- Options:
- Keep last 30 days (delete older than 30 days)
- Keep last 60 days (delete older than 60 days)
- Keep last 90 days (delete older than 90 days)
- Keep last 180 days (delete older than 180 days)
- Safety:
- Confirmation dialog before deletion
- Admin action is logged
- Cannot be undone - use with caution
- Performance: Automatically runs optimized deletion query
8. Auto Log Retention Policy
- Configuration: In
ActivityLog.phpcontroller - Default: 90 days retention
- How it works:
- Runs silently in background (1 in 1000 page loads)
- Automatically deletes logs older than 90 days
- No performance impact on user experience
- Logs deletion action for audit trail
9. Activity Dashboard Summary
- Displays in activity log page:
- Total actions (last 7 days)
- Number of action types
- Number of active roles
- Number of active users
- Tables showing:
- Top 10 actions by frequency
- Top 10 most active users with email
- Summary counts with badges
10. Critical Actions Highlighting
- Automatic Detection: Logs with "delete" in action name are marked as CRITICAL
- Visual Indicators:
- Red background on hover for critical rows
- Red badge for action type
- Special styling in expandable details
- Filtering: Use search to see only critical actions
11. Expandable Row Details
- Click any row to expand and see:
- Full User Agent string (browser/device info)
- Actor User ID
- Complete timestamp
- Full action and description
- Animated chevron icon shows expansion state
- Click again to collapse
12. Color-Coded Actions
- CREATE: Green badge
- UPDATE: Blue badge
- DELETE: Red badge (CRITICAL)
- LOGIN: Purple badge
- LOGOUT: Yellow badge
- VIEW: Indigo badge
- OTHER: Gray badge
13. Email Digest Command
- CLI Command:
php spark activity:digest [daily|weekly|monthly] - Execution:
php spark activity:digest daily php spark activity:digest weekly php spark activity:digest monthly - Features:
- Sends HTML email digest to all admin users
- Shows summary statistics
- Lists critical actions (deletions)
- Professional email template
- Timestamps and detailed logs
- Setup Cron Job:
# Daily digest at 9 AM 0 9 * * * /path/to/php spark activity:digest daily # Weekly digest on Sundays at 10 AM 0 10 * * 0 /path/to/php spark activity:digest weekly # Monthly digest on 1st at 9 AM 0 9 1 * * /path/to/php spark activity:digest monthly
14. Analytics Dashboard
- URL:
/admin/activity/analytics - Features:
- Summary statistics (Total Actions, Action Types, Active Roles, Active Users)
- Visual charts using Chart.js:
- Actions Distribution (Doughnut chart)
- Activity by Role (Bar chart)
- Most Active Users (Bar chart)
- Top IP Addresses (Table with counts)
- Critical Actions section (recent deletions)
- Period selection (Last 7 days / Last 30 days)
- Professional gradient color scheme
15. IP Address Tracking
- Tracks every action with IP address
- View unique IPs per period in Analytics
- Identify suspicious activities by location
- IP changes monitored for security
16. Database Queries Optimized
- New Model Methods:
getFiltered()- Get paginated, sorted, filtered logsgetFilteredCount()- Count matching logsclearOldLogs()- Efficient batch deletiongetActivitySummary()- Aggregated statisticsgetCriticalActions()- Filter critical actionsgetActivityByIP()- Track by IP addressgetUniqueIPs()- Get distinct IPs with counts
📁 FILES MODIFIED/CREATED
Modified Files:
-
app/Models/ActivityLogModel.php- Added pagination support
- Added advanced filtering methods
- Added aggregation queries for analytics
-
app/Controllers/ActivityLog.php- Full pagination logic
- Sorting implementation
- Clear logs functionality with logging
- Auto-delete old logs
- Analytics methods
-
app/Views/admin/activity_log.php- Complete redesign with:
- Advanced filters
- Sortable headers
- Pagination controls
- Print styling
- Dashboard summary cards
- Modal for clearing logs
- Enhanced JavaScript functionality
- Complete redesign with:
-
app/Config/Routes.php- Added new routes for:
/admin/activity-log/clear-old-logs/admin/activity-log/summary/admin/activity-log/critical/admin/activity/analytics
- Added new routes for:
New Files Created:
-
app/Commands/SendActivityDigest.php- CLI command for email digests
- Generates HTML email reports
- Customizable period (daily/weekly/monthly)
-
app/Views/admin/activity_analytics.php- Professional analytics dashboard
- Chart visualizations
- Critical actions monitoring
- Period filtering
🔧 CONFIGURATION
Log Retention Policy
Edit in app/Controllers/ActivityLog.php:
private int $logRetentionDays = 90; // Change this value
Email Configuration
Ensure app/Config/Email.php is properly configured for digest emails:
public string $fromEmail = 'noreply@yourdomain.com';
public string $fromName = 'DoctGuide System';
Records Per Page
Edit in app/Controllers/ActivityLog.php:
private int $perPage = 25; // Change this value
🚀 USAGE GUIDE
For Admins:
-
View Activity Logs
- Go to: Admin Dashboard → Activity Log
- See all system activities with details
-
Filter Logs
- Search by Action name
- Search by Actor name
- Filter by Role
- Set date range
- Click "Filter" button
-
Sort Logs
- Click any column header
- Toggle between ASC/DESC
-
View Details
- Click any row to expand
- See User Agent, full details
-
Export Data
- Click "Export CSV" for data analysis
- Click "Print" for audit reports
-
Clear Old Logs
- Click "Clear Old Logs"
- Select retention period
- Confirm deletion
-
View Analytics
- Click "Analytics" in sidebar
- See charts and statistics
- Monitor critical actions
-
Schedule Email Digest
- Set up cron job (see section above)
- Receive daily/weekly/monthly reports
📊 AVAILABLE DATA
Summary Statistics
- Total actions in period
- Count of different action types
- Count of active roles
- Count of active users
Activity Data Per Log Entry
- Timestamp (with millisecond precision)
- Actor name and email
- Actor role
- Action performed
- Description of action
- Target type and ID
- IP address
- User Agent (browser/device info)
Critical Monitoring
- All delete actions highlighted
- Permission change tracking
- Access pattern analysis
🔐 SECURITY FEATURES
-
Admin-Only Access
- All features require admin role
- Protected with
requireRole()check
-
SQL Injection Prevention
- Uses parameterized queries
- Input validation and sanitization
- Whitelist for sort columns
-
XSS Prevention
- Output escaped with
esc() - Safe JSON encoding
- Output escaped with
-
Audit Trail
- All admin actions logged
- Including log clearing
- Retention policy tracked
💡 TIPS & TRICKS
Search Combination:
Actor Name: "John Smith" + Role: "Doctor" + Date Range: "This Month"
= See all actions by Dr. John Smith this month
Find Suspicious Activity:
- Go to Analytics
- Look for unexpected IP addresses
- Click IP to filter logs from that address
Audit Report:
- Set date range to desired period
- Click "Print"
- Use browser's Print to PDF
Monthly Report:
- Set up cron job for monthly digest
- Receive HTML email with statistics
- Forward to compliance team
🐛 TROUBLESHOOTING
Issue: Page loading slowly
- Solution: Use filters to narrow results
- Solution: Clear old logs (older than 180 days)
Issue: Email digest not sending
- Solution: Check
app/Config/Email.phpsettings - Solution: Verify admin users have valid email addresses
- Solution: Check error logs:
writable/logs/
Issue: Charts not showing in Analytics
- Solution: Ensure Chart.js CDN is accessible
- Solution: Check browser console for errors
Issue: Print view looks wrong
- Solution: Adjust browser's print margins
- Solution: Use "Save as PDF" instead of printer
📈 PERFORMANCE NOTES
- Pagination: Loads only 25 records, reducing memory and query time
- Auto-delete: Runs in background (1 in 1000 loads) to avoid slowdown
- Indices: Ensure
created_at,actor_role,ip_addresscolumns are indexed - Archiving: Consider moving logs older than 1 year to archive table
Recommended Database Indices
CREATE INDEX idx_activity_created_at ON activity_logs(created_at);
CREATE INDEX idx_activity_actor_role ON activity_logs(actor_role);
CREATE INDEX idx_activity_ip_address ON activity_logs(ip_address);
CREATE INDEX idx_activity_action ON activity_logs(action(20));
CREATE INDEX idx_activity_created_actor ON activity_logs(created_at, actor_user_id);
📝 LOG RETENTION DEFAULTS
- Auto-delete: Every 90 days
- Manual clear options: 30, 60, 90, 180 days
- Digest emails: Stored in email logs, not activity logs
🎯 FUTURE ENHANCEMENTS
Not yet implemented, but can be added:
- Real-time activity stream with WebSockets
- GeoIP mapping visualization
- Machine learning anomaly detection
- Slack/Discord webhook notifications
- Database backup tracking
- API access logging
- Rate limiting analytics
- Performance metrics dashboard
📞 SUPPORT
For issues or feature requests, check:
- Browser console (F12) for JavaScript errors
- Server logs at
writable/logs/ - Database connection and permissions
- Email configuration for digest issues
Last Updated: April 15, 2026 Version: 2.0 Features: 16 major enhancements Lines of Code Added: 1000+