diff --git a/cp/app/Controllers/SupportController.php b/cp/app/Controllers/SupportController.php index f8440e5..64b7f1b 100644 --- a/cp/app/Controllers/SupportController.php +++ b/cp/app/Controllers/SupportController.php @@ -11,14 +11,90 @@ class SupportController extends Controller { public function view(Request $request, Response $response) { - $ticketModel = new Tickets($this->container->get('db')); - $tickets = $ticketModel->getAllTickets(); - return view($response,'admin/support/view.twig', compact('tickets')); + return view($response,'admin/support/view.twig'); } public function newticket(Request $request, Response $response) { - return view($response,'admin/support/newticket.twig'); + if ($request->getMethod() === 'POST') { + // Retrieve POST data + $data = $request->getParsedBody(); + $db = $this->container->get('db'); + $categories = $db->select("SELECT * FROM ticket_categories"); + + $category = $data['category'] ?? null; + $subject = $data['subject'] ?? null; + $message = $data['message'] ?? null; + + if (!$subject) { + return view($response, 'admin/support/newticket.twig', [ + 'error' => 'Please enter a subject', + 'categories' => $categories, + ]); + } + + if (!$message) { + return view($response, 'admin/support/newticket.twig', [ + 'error' => 'Please enter a message', + 'categories' => $categories, + ]); + } + + try { + $currentDateTime = new \DateTime(); + $crdate = $currentDateTime->format('Y-m-d H:i:s.v'); + $db->insert( + 'support_tickets', + [ + 'user_id' => $_SESSION['auth_user_id'], + 'category_id' => $category, + 'subject' => $subject, + 'message' => $message, + 'status' => 'Open', + 'priority' => 'Medium', + 'reported_domain' => null, + 'nature_of_abuse' => null, + 'evidence' => null, + 'relevant_urls' => null, + 'date_of_incident' => null, + 'date_created' => $crdate, + 'last_updated' => null, + ] + ); + $ticket_id = $db->getLastInsertId(); + + $db->insert( + 'ticket_responses', + [ + 'ticket_id' => $ticket_id, + 'responder_id' => $_SESSION['auth_user_id'], + 'response' => $message, + 'date_created' => $crdate, + ] + ); + + } catch (Exception $e) { + $db->rollBack(); + return view($response, 'admin/support/newticket.twig', [ + 'error' => $e->getMessage(), + 'categories' => $categories + ]); + } + + return view($response, 'admin/support/view.twig', [ + 'categories' => $categories, + 'subject' => $subject, + ]); + + } + + $db = $this->container->get('db'); + $categories = $db->select("SELECT * FROM ticket_categories"); + + // Default view for GET requests or if POST data is not set + return view($response,'admin/support/newticket.twig', [ + 'categories' => $categories, + ]); } public function docs(Request $request, Response $response) diff --git a/cp/resources/views/admin/support/newticket.twig b/cp/resources/views/admin/support/newticket.twig index d11a276..c5a1690 100644 --- a/cp/resources/views/admin/support/newticket.twig +++ b/cp/resources/views/admin/support/newticket.twig @@ -11,7 +11,7 @@
- Overview + {{ __('Overview') }}

{{ __('New Support Ticket') }} @@ -24,16 +24,30 @@
+ {% if error is defined %} + + {% endif %}
-
+ + {{ csrf.field | raw }}
@@ -45,7 +59,7 @@
- +
diff --git a/cp/resources/views/admin/support/view.twig b/cp/resources/views/admin/support/view.twig index ed4a8ce..72535f3 100644 --- a/cp/resources/views/admin/support/view.twig +++ b/cp/resources/views/admin/support/view.twig @@ -11,12 +11,32 @@
- Overview + {{ __('Overview') }}

{{ __('Support Tickets') }}

+ +
@@ -24,47 +44,38 @@
+ {% if subject is defined %} + + {% endif %}
-
- - - - - - - - - - - - - {% for ticket in tickets %} - - - - - - - - {% endfor %} - -
ID - - SubjectStatusPriority
{{ ticket.subject }}{{ ticket.status }}{{ ticket.priority }} - - - - -
+
+
+ + + + +
+
+ Search: +
+ +
+
+
+
+
diff --git a/cp/resources/views/layouts/app.twig b/cp/resources/views/layouts/app.twig index 83e1a55..05689e4 100644 --- a/cp/resources/views/layouts/app.twig +++ b/cp/resources/views/layouts/app.twig @@ -6,7 +6,7 @@ {% block title %}{% endblock %} | Namingo - {% if route_is('domains') or route_is('contacts') or route_is('hosts') or route_is('epphistory') or route_is('registrars') or route_is('transactions') or route_is('overview') or route_is('reports') or route_is('transfers') or route_is('users') %} + {% if route_is('domains') or route_is('contacts') or route_is('hosts') or route_is('epphistory') or route_is('registrars') or route_is('transactions') or route_is('overview') or route_is('reports') or route_is('transfers') or route_is('users') or route_is('support') %} {% include 'partials/css-tables.twig' %} {% else %} {% include 'partials/css.twig' %} @@ -413,6 +413,8 @@ {% include 'partials/js-transfers.twig' %} {% elseif route_is('users') %} {% include 'partials/js-users.twig' %} +{% elseif route_is('support') %} + {% include 'partials/js-support.twig' %} {% else %} {% include 'partials/js.twig' %} {% endif %} diff --git a/cp/resources/views/partials/js-support.twig b/cp/resources/views/partials/js-support.twig new file mode 100644 index 0000000..5133cbf --- /dev/null +++ b/cp/resources/views/partials/js-support.twig @@ -0,0 +1,98 @@ + + + + + + \ No newline at end of file diff --git a/cp/routes/web.php b/cp/routes/web.php index a5999e2..c6a7beb 100644 --- a/cp/routes/web.php +++ b/cp/routes/web.php @@ -69,7 +69,7 @@ $app->group('', function ($route) { $route->get('/settings', SystemController::class .':settings')->setName('settings'); $route->get('/support', SupportController::class .':view')->setName('ticketview'); - $route->get('/support/new', SupportController::class .':newticket')->setName('newticket'); + $route->map(['GET', 'POST'], '/support/new', SupportController::class .':newticket')->setName('newticket'); $route->get('/support/docs', SupportController::class .':docs')->setName('docs'); $route->get('/support/media', SupportController::class .':mediakit')->setName('mediakit');