diff --git a/cp/app/Controllers/HomeController.php b/cp/app/Controllers/HomeController.php index 59d093d..21f1db5 100644 --- a/cp/app/Controllers/HomeController.php +++ b/cp/app/Controllers/HomeController.php @@ -57,13 +57,102 @@ class HomeController extends Controller 'tickets' => $tickets, ]); } else { + $endDate = new \DateTime(); + $startDate = (new \DateTime())->modify('-4 days'); + + // Format dates for comparison + $startDateFormatted = $startDate->format('Y-m-d'); + $endDateFormatted = $endDate->format('Y-m-d'); + + $query = "SELECT DATE(crdate) as date, COUNT(id) as count + FROM domain + WHERE crdate >= :startDate AND crdate <= :endDate + GROUP BY DATE(crdate) + ORDER BY DATE(crdate) ASC"; + + $params = [ + ':startDate' => $startDateFormatted, + ':endDate' => $endDateFormatted, + ]; + + $domainsCount = $db->select($query, $params); + + $dates = []; + $counts = []; + + foreach ($domainsCount as $row) { + // Extract just the date part from the datetime string + $date = (new \DateTime($row['date']))->format('Y-m-d'); + $count = (int)$row['count']; // Ensure count is an integer + + $dates[] = $date; + $counts[] = $count; + } + + $query = " + SELECT + r.id, + r.name, + COUNT(d.id) AS domain_count + FROM + registrar r + JOIN + domain d ON r.id = d.clid + GROUP BY + r.id + ORDER BY + domain_count DESC + LIMIT 10; + "; + + // Execute the query + $results = $db->select($query); + + // Prepare data for the chart + $labels = []; + $series = []; + + foreach ($results as $row) { + $labels[] = $row['name']; // Registrar names for chart labels + $series[] = (int)$row['domain_count']; // Domain counts for chart data + } + + $query = " + SELECT + DATE(date_created) as ticket_date, + SUM(CASE WHEN status IN ('Open', 'In Progress') THEN 1 ELSE 0 END) AS unanswered, + SUM(CASE WHEN status IN ('Resolved', 'Closed') THEN 1 ELSE 0 END) AS answered + FROM + support_tickets + WHERE + date_created >= CURRENT_DATE - INTERVAL 7 DAY + GROUP BY + DATE(date_created) + ORDER BY + DATE(date_created) ASC; + "; + + // Execute the query + $results = $db->select($query); + + // Prepare data for ApexCharts + $labels3 = []; + $answeredData = []; + $unansweredData = []; + + foreach ($results as $row) { + $labels3[] = $row['ticket_date']; + $answeredData[] = (int) $row['answered']; // Cast to int for ApexCharts + $unansweredData[] = (int) $row['unanswered']; // Cast to int for ApexCharts + } + $domains = $db->selectValue('SELECT count(id) as domains FROM domain'); $latest_domains = $db->select('SELECT name, crdate FROM domain ORDER BY crdate DESC LIMIT 10'); $tickets = $db->select('SELECT id, subject, status, priority FROM support_tickets ORDER BY date_created DESC LIMIT 10'); $hosts = $db->selectValue('SELECT count(id) as hosts FROM host'); $contacts = $db->selectValue('SELECT count(id) as contacts FROM contact'); $registrars = $db->selectValue('SELECT count(id) as registrars FROM registrar'); - + return view($response, 'admin/dashboard/index.twig', [ 'domains' => $domains, 'hosts' => $hosts, @@ -71,6 +160,13 @@ class HomeController extends Controller 'registrars' => $registrars, 'latest_domains' => $latest_domains, 'tickets' => $tickets, + 'dates' => json_encode($dates), + 'counts' => json_encode($counts), + 'labels' => json_encode($labels), + 'series' => json_encode($series), + 'labels3' => json_encode($labels3), + 'answeredData' => json_encode($answeredData), + 'unansweredData' => json_encode($unansweredData), ]); } } diff --git a/cp/resources/views/admin/dashboard/index.twig b/cp/resources/views/admin/dashboard/index.twig index 04260cd..ef61d76 100644 --- a/cp/resources/views/admin/dashboard/index.twig +++ b/cp/resources/views/admin/dashboard/index.twig @@ -166,6 +166,30 @@ {% endif %} +
+
+
+

{{ __('Last 5 Days: Domain Registrations') }}

+
+
+
+
+
+
+
+

{{ __('Top Registrars by Domains') }}

+
+
+
+
+
+
+
+

{{ __('Support Tickets: Last Week') }}

+
+
+
+

{{ __('Recent Domains') }}

@@ -229,4 +253,198 @@
{% include 'partials/footer.twig' %}
+ {% endblock %} \ No newline at end of file diff --git a/cp/resources/views/layouts/app.twig b/cp/resources/views/layouts/app.twig index 05a5013..8457a65 100644 --- a/cp/resources/views/layouts/app.twig +++ b/cp/resources/views/layouts/app.twig @@ -260,7 +260,7 @@ {% if route_is('dashboard') %} - {% include 'partials/js-dash.twig' %} + {% include 'partials/js-home.twig' %} {% elseif route_is('domains') %} {% include 'partials/js-domains.twig' %} {% elseif route_is('applications') %} diff --git a/cp/resources/views/partials/js-dash.twig b/cp/resources/views/partials/js-dash.twig deleted file mode 100644 index 49e6cb3..0000000 --- a/cp/resources/views/partials/js-dash.twig +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cp/resources/views/partials/js-home.twig b/cp/resources/views/partials/js-home.twig new file mode 100644 index 0000000..5985727 --- /dev/null +++ b/cp/resources/views/partials/js-home.twig @@ -0,0 +1,2 @@ + + \ No newline at end of file