The IT Helpdesk Ticketing Application is a web-based support request management system designed to help employees report technical issues and allow IT support staff to manage, track, and resolve those requests in an organized and traceable manner.
To improve the efficiency of IT support operations by centralizing ticket submission, assignment, monitoring, resolution, escalation, closure, and audit logging in one integrated platform.
Developed as the final project for IS 226 β Web Information Systems. Demonstrates applied database design, transaction management, security controls, reporting, auditability, and user-centered web system development.
Submit tickets, view ticket history, receive email updates, close resolved tickets, and track ticket status and timeline.
Manage ticket operations β assign, reassign, escalate, comment, resolve, and monitor SLA status across all tickets.
Oversee master data, manage users, monitor security dashboards, review audit logs, and unlock locked accounts.
requireEmployee()requireOperationalITStaff()requireSuperAdmin()requireLogin()with redirect saving
- Session regeneration on login
- Auto-logout after 15 min inactivity
- Role stored in
$_SESSION - Redirect to styled 403 Access Denied page
- Subject, description, category, priority
- Optional linked IT asset
- File attachments via Cloudinary widget
- Auto-generated number:
TCK-YYYY-0001
- Raise ticket on behalf of employee
- Employee-based asset filtering
- Same auto-numbering system
- Audit log entry recorded
- Routes to lowest-workload Level 1 staff
- Falls back to admin email if none available
- Assignment record and audit log created
- Notification email sent to assigned staff
- IT staff can assign/reassign anytime
- Full assignment history tracked
- System comment auto-added on reassign
- Email notification to new assignee
- Escalate to any IT staff member with mandatory reason
- Multi-level escalation tracking (L1 β L2 β L3)
- From staff, to staff, level, reason, and timestamp recorded
- Email sent to receiving staff automatically
- SLA target hours defined per issue category
- Overdue:
NOW() > DATE_ADD(date_submitted, INTERVAL sla_target_hours HOUR) - Resolved and Closed tickets excluded from detection
- Auto-runs on every page load
- Overdue tickets β status set to Escalated
- Priority escalation: LowβMed, MedβHigh, HighβCritical
- SLA breach logged in
audit_logs
- π’ On Track
- π΄ Overdue
- π¨ SLA Breached
- Dashboard counters for overdue and breached
- Overdue count (IT Staff dashboard)
- SLA Breached count (IT Staff + Admin)
- Per-ticket SLA target hours visible in table
- Public comments β visible to employee
- Internal notes β IT staff only
- Auto-scroll to latest on page load
- System comments for status/assignment changes
- Cloudinary widget integration
- Up to 5 files, max 10MB each
- PDF, images, docs, CSV, ZIP, video supported
- Files linked per comment, displayed in ticket view
- Ticket submitted β confirmation to employee
- Auto-assignment β notification to IT staff
- Status change β update to employee
- Resolution β email to employee
- New comment β notification to assigned staff
- Escalation β email to receiving staff
- Triage β admin email if no Level 1 available
- Chronological view of all ticket events
- Submitted, Assigned, Commented, Resolved, Closed
- Available in employee ticket-details view
- Sorted newest-first
- Open / In Progress / Resolved / Closed
- Total tickets summary
- Recent tickets table
- Quick actions
- All ticket status counts
- Assigned to me count
- Overdue & SLA breached counts
- My Assigned Tickets shortcut
- Categories, assets, employees, staff counts
- Locked accounts count
- SLA breached count
- Recent master data records
- Search by ticket number or subject
- Filter by status, priority, category
- Assignment scope: All / Mine / Unassigned / Others
- "Mine" badge for quick ownership identification
- Persistent filters with pagination and go-to page
- Search by description, actor, action, or table
- Filter by actor type, action, and table name
- Date range filter (from / to)
- Paginated results
password_hash(). Never stored in plain text.session_regenerate_id() on login. Auto-logout after 15 minutes of inactivity.htmlspecialchars() applied to all user-generated output rendered in HTML.audit_logs..env, never committed.declare(strict_types=1) on all files. Input validated with ctype_digit() and in_array().- HTML5 / CSS3 (custom design system)
- Vanilla JavaScript
- AJAX via Fetch API
- Cloudinary Upload Widget
- PHP 8.5
- PDO with prepared statements
- Session-based authentication
- RESTful-style AJAX handlers
- MySQL
- Relational schema with FK constraints
- Transaction support (BEGIN/COMMIT/ROLLBACK)
- Audit log table for all key events
- AWS EC2 (Ubuntu 24)
- HTTPS via custom domain
- SSH key-only server access
- GitHub (private repo)
- Brevo β transactional email API
- Cloudinary β file storage and CDN
- Environment variables for all credentials
- PHP CS Fixer (PSR-12)
- browser-sync for live reload
- Git branching (feature branches)
- VS Code + PHP formatter