From e5e8d003bd9a75ea2602b6d77e495ed77bac7095 Mon Sep 17 00:00:00 2001 From: Cedrik Pischem <79600909+Monviech@users.noreply.github.com> Date: Thu, 5 Oct 2023 11:05:45 +0200 Subject: [PATCH] Update ipsec.widget.php - Count user in "Overview" Tab and improve "Mobile Users" Tab (#6912) * Update ipsec.widget.php This change solves the problem of users having multiple IP addresses as leases and being counted per leased IP. - Only "user" are counted now - Each "user" can have several "lease" - Each "lease" can have an individual online or offline status - A user is online when at least one "lease" is "online = true" * Update ipsec.widget.php - Replaced multiple "array()" with "[]" - Access keys "user", "address" and "online" directly from the $lease array without storping them first - Merged two seperate foreach loops into one --- src/www/widgets/widgets/ipsec.widget.php | 98 ++++++++++++++++-------- 1 file changed, 65 insertions(+), 33 deletions(-) diff --git a/src/www/widgets/widgets/ipsec.widget.php b/src/www/widgets/widgets/ipsec.widget.php index 0dbf0de74..e2c76da84 100644 --- a/src/www/widgets/widgets/ipsec.widget.php +++ b/src/www/widgets/widgets/ipsec.widget.php @@ -68,6 +68,29 @@ foreach ($ipsec_status as $status_key => $status_value) { } } } +// Initialize variable aggregated_data and loop through the ipsec_leases array to fetch the data for user, address and online status. Used later for div ipsec-mobile. Additionally count the unique_users in the same foreach loop, used for mobile_users count. +$aggregated_data = []; +$unique_users = []; + +foreach ($ipsec_leases as $lease) { + // For each unique user, initialize an empty array + if (!isset($aggregated_data[$lease['user']])) { + $aggregated_data[$lease['user']] = []; + } + // Add the lease data to this user's array of leases + $aggregated_data[$lease['user']][] = [ + 'address' => $lease['address'], + 'online' => $lease['online'] + ]; + + // Count unique users in ipsec_leases array if lease is online + if ($lease['online']) { + $unique_users[$lease['user']] = true; + } +} + +// Return the number of unique_users as mobile_users +$mobile_users = count($unique_users); ?>