From f0abadfc5721feba406eedd476520f3ccd353843 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Sat, 28 Mar 2026 22:42:39 -0400 Subject: [PATCH] Fix 500 error for non-admin users on dashboard StatsModel queries used `FROM tickets WHERE` with no table alias, but getVisibilityFilter() returns SQL referencing `t.visibility`. Admins were unaffected because they get `1=1` with no column references. Added `t` alias to all three tickets queries that use $visSQL. Co-Authored-By: Claude Sonnet 4.6 --- models/StatsModel.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/models/StatsModel.php b/models/StatsModel.php index df9f5d4..82d25c7 100644 --- a/models/StatsModel.php +++ b/models/StatsModel.php @@ -228,7 +228,7 @@ class StatsModel { SUM(CASE WHEN priority = 1 AND status != 'Closed' THEN 1 ELSE 0 END) as critical, AVG(CASE WHEN status = 'Closed' AND closed_at > created_at THEN TIMESTAMPDIFF(HOUR, created_at, closed_at) ELSE NULL END) as avg_resolution - FROM tickets WHERE ($visSQL)"; + FROM tickets t WHERE ($visSQL)"; if (!empty($visParams)) { $stmt = $this->conn->prepare($countsSql); @@ -244,13 +244,13 @@ class StatsModel { // Query 2: Get priority, status, and category breakdowns in one query $breakdownSql = "SELECT 'priority' as type, CONCAT('P', priority) as label, COUNT(*) as count - FROM tickets WHERE status != 'Closed' AND ($visSQL) GROUP BY priority + FROM tickets t WHERE status != 'Closed' AND ($visSQL) GROUP BY priority UNION ALL SELECT 'status' as type, status as label, COUNT(*) as count - FROM tickets WHERE ($visSQL) GROUP BY status + FROM tickets t WHERE ($visSQL) GROUP BY status UNION ALL SELECT 'category' as type, category as label, COUNT(*) as count - FROM tickets WHERE status != 'Closed' AND ($visSQL) GROUP BY category"; + FROM tickets t WHERE status != 'Closed' AND ($visSQL) GROUP BY category"; if (!empty($visParams)) { // Need to bind params 3 times (once per UNION branch)