diff --git a/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php b/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php index c5a929f4..4a4289e6 100644 --- a/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php +++ b/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php @@ -17,6 +17,8 @@ use Joomla\CMS\Router\Route; class HtmlView extends BaseHtmlView { protected $ticket; + protected $isStaff = false; + protected $canAssign = false; public function display($tpl = null) { @@ -24,16 +26,29 @@ class HtmlView extends BaseHtmlView $user = Factory::getApplication()->getIdentity(); $id = Factory::getApplication()->getInput()->getInt('id', 0); - // Get ticket — only if owned by this user + $this->isStaff = $user->authorise('core.admin') || $user->authorise('mokowaas.tickets', 'com_mokowaas'); + $this->canAssign = $user->authorise('core.admin') || $user->authorise('mokowaas.tickets.assign', 'com_mokowaas'); + + // Get ticket — staff see any, customers see only their own $query = $db->getQuery(true) ->select([ $db->quoteName('t') . '.*', $db->quoteName('c.title', 'category_title'), + $db->quoteName('u.name', 'created_by_name'), + $db->quoteName('u.email', 'created_by_email'), + $db->quoteName('a.name', 'assigned_to_name'), ]) ->from($db->quoteName('#__mokowaas_tickets', 't')) ->leftJoin($db->quoteName('#__mokowaas_ticket_categories', 'c') . ' ON c.id = t.category_id') - ->where($db->quoteName('t.id') . ' = ' . $id) - ->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id); + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = t.created_by') + ->leftJoin($db->quoteName('#__users', 'a') . ' ON a.id = t.assigned_to') + ->where($db->quoteName('t.id') . ' = ' . $id); + + if (!$this->isStaff) + { + $query->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id); + } + $db->setQuery($query); $this->ticket = $db->loadObject(); @@ -45,7 +60,7 @@ class HtmlView extends BaseHtmlView return; } - // Load replies (exclude internal notes) + // Load replies — staff see internal notes, customers don't $query = $db->getQuery(true) ->select([ $db->quoteName('r') . '.*', @@ -53,9 +68,14 @@ class HtmlView extends BaseHtmlView ]) ->from($db->quoteName('#__mokowaas_ticket_replies', 'r')) ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = r.user_id') - ->where($db->quoteName('r.ticket_id') . ' = ' . $id) - ->where($db->quoteName('r.is_internal') . ' = 0') - ->order($db->quoteName('r.created') . ' ASC'); + ->where($db->quoteName('r.ticket_id') . ' = ' . $id); + + if (!$this->isStaff) + { + $query->where($db->quoteName('r.is_internal') . ' = 0'); + } + + $query->order($db->quoteName('r.created') . ' ASC'); $db->setQuery($query); $this->ticket->replies = $db->loadObjectList() ?: []; diff --git a/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php b/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php index 933e5c55..5988fba9 100644 --- a/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php +++ b/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php @@ -17,13 +17,17 @@ class HtmlView extends BaseHtmlView { protected $tickets = []; protected $categories = []; + protected $isStaff = false; public function display($tpl = null) { $db = Factory::getContainer()->get('Joomla\Database\DatabaseInterface'); $user = Factory::getApplication()->getIdentity(); - // Get user's tickets + $this->isStaff = $user->authorise('core.admin') + || $user->authorise('mokowaas.tickets', 'com_mokowaas'); + + // Staff see all tickets, customers see their own $query = $db->getQuery(true) ->select([ $db->quoteName('t.id'), @@ -31,18 +35,33 @@ class HtmlView extends BaseHtmlView $db->quoteName('t.status'), $db->quoteName('t.priority'), $db->quoteName('t.created'), - $db->quoteName('t.modified'), + $db->quoteName('t.assigned_to'), $db->quoteName('c.title', 'category_title'), + $db->quoteName('u.name', 'created_by_name'), + $db->quoteName('a.name', 'assigned_to_name'), ]) ->from($db->quoteName('#__mokowaas_tickets', 't')) ->leftJoin($db->quoteName('#__mokowaas_ticket_categories', 'c') . ' ON c.id = t.category_id') - ->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id) - ->order($db->quoteName('t.created') . ' DESC') - ->setLimit(50); + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = t.created_by') + ->leftJoin($db->quoteName('#__users', 'a') . ' ON a.id = t.assigned_to'); + + if (!$this->isStaff) + { + $query->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id); + } + + $filterStatus = Factory::getApplication()->getInput()->getString('filter_status', ''); + + if ($filterStatus) + { + $query->where($db->quoteName('t.status') . ' = ' . $db->quote($filterStatus)); + } + + $query->order($db->quoteName('t.created') . ' DESC')->setLimit(50); $db->setQuery($query); $this->tickets = $db->loadObjectList() ?: []; - // Get categories for new ticket form + // Categories for new ticket form $query = $db->getQuery(true) ->select([$db->quoteName('id'), $db->quoteName('title')]) ->from($db->quoteName('#__mokowaas_ticket_categories')) diff --git a/src/packages/com_mokowaas/site/tmpl/ticket/default.php b/src/packages/com_mokowaas/site/tmpl/ticket/default.php index 5c6d135d..7f84e579 100644 --- a/src/packages/com_mokowaas/site/tmpl/ticket/default.php +++ b/src/packages/com_mokowaas/site/tmpl/ticket/default.php @@ -1,22 +1,19 @@ ticket; -$token = Session::getFormToken(); +$t = $this->ticket; +$isStaff = $this->isStaff; +$canAssign = $this->canAssign; +$token = Session::getFormToken(); +$userId = Factory::getApplication()->getIdentity()->id; $statusLabel = [ - 'open' => 'Open', 'in_progress' => 'In Progress', 'waiting' => 'Awaiting Your Response', + 'open' => 'Open', 'in_progress' => 'In Progress', 'waiting' => 'Awaiting Response', 'resolved' => 'Resolved', 'closed' => 'Closed', ]; $statusClass = [ @@ -28,99 +25,217 @@ $statusClass = [
| # | +Subject | +Status | +Priority | +Category | +Submitted By | Assigned To | +Date | +
|---|---|---|---|---|---|---|---|
| id; ?> | +subject, 0, 60)); ?> | +status] ?? $t->status; ?> | +priority); ?> | +category_title ?? '—'); ?> | + +created_by_name ?? ''); ?> | +assigned_to_name ?? 'Unassigned'); ?> | + +created, 'M d, Y'); ?> | +