From b5e607fdb8cff7a6c753eeeafd54a36ec72b8c42 Mon Sep 17 00:00:00 2001 From: Pinga <121483313+getpinga@users.noreply.github.com> Date: Sat, 23 Nov 2024 13:22:42 +0200 Subject: [PATCH] Added registrar statistics in CP reports menu Also fixed small bug in view registrar --- cp/app/Controllers/RegistrarsController.php | 4 +- cp/app/Controllers/ReportsController.php | 36 ++++++++++++- cp/resources/views/admin/reports/index.twig | 60 ++++++++++++++++++++- 3 files changed, 95 insertions(+), 5 deletions(-) diff --git a/cp/app/Controllers/RegistrarsController.php b/cp/app/Controllers/RegistrarsController.php index 652903c..2a44ed5 100644 --- a/cp/app/Controllers/RegistrarsController.php +++ b/cp/app/Controllers/RegistrarsController.php @@ -313,11 +313,11 @@ class RegistrarsController extends Controller if ($args) { $args = trim(preg_replace('/\s+/', ' ', $args)); - if (!preg_match('/^[a-zA-Z0-9\s]+$/', $args)) { + if (!preg_match('/^[a-zA-Z0-9\s.\-]+$/', $args)) { $this->container->get('flash')->addMessage('error', 'Invalid registrar'); return $response->withHeader('Location', '/registrars')->withStatus(302); } - + $registrar = $db->selectRow('SELECT * FROM registrar WHERE name = ?', [ $args ]); diff --git a/cp/app/Controllers/ReportsController.php b/cp/app/Controllers/ReportsController.php index c4dd62a..4b97271 100644 --- a/cp/app/Controllers/ReportsController.php +++ b/cp/app/Controllers/ReportsController.php @@ -15,8 +15,42 @@ class ReportsController extends Controller if ($_SESSION["auth_roles"] != 0) { return $response->withHeader('Location', '/dashboard')->withStatus(302); } + + $stats = []; + $currency = $_SESSION['_currency'] ?? 'USD'; + $db = $this->container->get('db'); + $totalDomains = $db->select('SELECT COUNT(name) as total FROM domain'); + $numT = $totalDomains[0]['total'] ?? 1; - return view($response,'admin/reports/index.twig'); + $registrars = $db->select('SELECT id, name FROM registrar'); + foreach ($registrars as $registrar) { + $domainCount = $db->select( + 'SELECT COUNT(name) as count FROM domain WHERE clid = ?', + [$registrar['id']] + ); + + $earnings = $db->select( + 'SELECT SUM(amount) as amt FROM statement WHERE registrar_id = ? AND command <> "deposit"', + [$registrar['id']] + ); + + $stats[] = [ + 'id' => $registrar['id'], + 'registrar' => $registrar['name'], + 'currency' => $currency, + 'number' => $domainCount[0]['count'] ?? 0, + 'share' => number_format(($domainCount[0]['count'] ?? 0) / $numT * 100, 2), + 'earnings' => $earnings[0]['amt'] ?? 0 + ]; + } + + usort($stats, function ($a, $b) { + return $b['share'] <=> $a['share']; + }); + + return view($response,'admin/reports/index.twig', [ + 'stats' => $stats + ]); } public function exportDomains(Request $request, Response $response) diff --git a/cp/resources/views/admin/reports/index.twig b/cp/resources/views/admin/reports/index.twig index 7ecab6f..3d70b43 100644 --- a/cp/resources/views/admin/reports/index.twig +++ b/cp/resources/views/admin/reports/index.twig @@ -20,11 +20,18 @@