From 27f912ed1ce0294ca3e2e21c903e102bbf5e9e99 Mon Sep 17 00:00:00 2001 From: Pinga <121483313+getpinga@users.noreply.github.com> Date: Mon, 11 Dec 2023 10:42:53 +0200 Subject: [PATCH] Added view ticket --- cp/app/Controllers/SupportController.php | 92 +++++++++++++-- cp/resources/views/admin/support/view.twig | 1 + .../views/admin/support/viewTicket.twig | 110 ++++++++++++++++++ cp/resources/views/layouts/app.twig | 106 +---------------- cp/routes/web.php | 2 + 5 files changed, 196 insertions(+), 115 deletions(-) create mode 100644 cp/resources/views/admin/support/viewTicket.twig diff --git a/cp/app/Controllers/SupportController.php b/cp/app/Controllers/SupportController.php index 64b7f1b..b54b26e 100644 --- a/cp/app/Controllers/SupportController.php +++ b/cp/app/Controllers/SupportController.php @@ -41,6 +41,7 @@ class SupportController extends Controller } try { + $db->beginTransaction(); $currentDateTime = new \DateTime(); $crdate = $currentDateTime->format('Y-m-d H:i:s.v'); $db->insert( @@ -62,17 +63,8 @@ class SupportController extends Controller ] ); $ticket_id = $db->getLastInsertId(); - - $db->insert( - 'ticket_responses', - [ - 'ticket_id' => $ticket_id, - 'responder_id' => $_SESSION['auth_user_id'], - 'response' => $message, - 'date_created' => $crdate, - ] - ); + $db->commit(); } catch (Exception $e) { $db->rollBack(); return view($response, 'admin/support/newticket.twig', [ @@ -96,6 +88,86 @@ class SupportController extends Controller 'categories' => $categories, ]); } + + public function viewTicket(Request $request, Response $response, $args) + { + $rawNumber = $args; + $ticketNumber = filter_var($rawNumber, FILTER_VALIDATE_INT); + + if ($ticketNumber === false) { + $this->container->get('flash')->addMessage('error', 'Invalid ticket number'); + return $response->withHeader('Location', '/support')->withStatus(302); + } + + $db = $this->container->get('db'); + // Get the current URI + $uri = $request->getUri()->getPath(); + + $ticket = $db->selectRow('SELECT st.*, u.username AS ticket_creator + FROM support_tickets AS st + JOIN users AS u ON st.user_id = u.id + WHERE st.id = ?', [$ticketNumber]); + + if ($ticket) { + $replies = $db->select('SELECT tr.*, u.username AS responder_name + FROM ticket_responses AS tr + JOIN users AS u ON tr.responder_id = u.id + WHERE tr.ticket_id = ?', [$ticketNumber]); + $category = $db->selectValue('SELECT name FROM ticket_categories WHERE id = ?', [$ticket['category_id']]); + + // Default view for GET requests or if POST data is not set + return view($response,'admin/support/viewTicket.twig', [ + 'ticket' => $ticket, + 'replies' => $replies, + 'category' => $category, + 'currentUri' => $uri + ]); + } else { + $this->container->get('flash')->addMessage('error', 'Invalid ticket number'); + return $response->withHeader('Location', '/support')->withStatus(302); + } + } + + public function replyTicket(Request $request, Response $response) + { + if ($request->getMethod() === 'POST') { + // Retrieve POST data + $data = $request->getParsedBody(); + $db = $this->container->get('db'); + // Get the current URI + $uri = $request->getUri()->getPath(); + $categories = $db->select("SELECT * FROM ticket_categories"); + + $ticket_id = $data['ticket_id'] ?? null; + $responseText = $data['responseText'] ?? null; + + if (!$responseText) { + $this->container->get('flash')->addMessage('error', 'Please enter a reply'); + return $response->withHeader('Location', '/ticket/'.$ticket_id)->withStatus(302); + } + + try { + $currentDateTime = new \DateTime(); + $crdate = $currentDateTime->format('Y-m-d H:i:s.v'); + + $db->insert( + 'ticket_responses', + [ + 'ticket_id' => $ticket_id, + 'responder_id' => $_SESSION['auth_user_id'], + 'response' => $responseText, + 'date_created' => $crdate, + ] + ); + + $this->container->get('flash')->addMessage('success', 'Reply has been created successfully on ' . $crdate); + return $response->withHeader('Location', '/ticket/'.$ticket_id)->withStatus(302); + } catch (Exception $e) { + $this->container->get('flash')->addMessage('error', 'Database error: '.$e->getMessage()); + return $response->withHeader('Location', '/ticket/'.$ticket_id)->withStatus(302); + } + } + } public function docs(Request $request, Response $response) { diff --git a/cp/resources/views/admin/support/view.twig b/cp/resources/views/admin/support/view.twig index 72535f3..2ce442f 100644 --- a/cp/resources/views/admin/support/view.twig +++ b/cp/resources/views/admin/support/view.twig @@ -44,6 +44,7 @@