diff --git a/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php b/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php index d71bf1f5..d3b1c191 100644 --- a/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php +++ b/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php @@ -30,6 +30,9 @@ class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareI $data['siteInfo'] = $helper->getSiteInfo($db); $data['plugins'] = $helper->getFeaturePlugins($db); $data['healthOk'] = $helper->isDatabaseOk($db); + $data['counts'] = $helper->getCounts($db); + $data['disk'] = $helper->getDiskInfo(); + $data['currentIp'] = $helper->getCurrentIp(); return $data; } diff --git a/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php b/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php index ef5f7931..96e6bbf4 100644 --- a/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php +++ b/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php @@ -79,4 +79,60 @@ class CpanelHelper return false; } } + + /** + * Get content and system counts. + */ + public function getCounts(DatabaseInterface $db): object + { + $counts = (object) [ + 'articles' => 0, + 'users' => 0, + 'extensions' => 0, + 'updates' => 0, + ]; + + try + { + $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__content'))); + $counts->articles = (int) $db->loadResult(); + + $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__users'))); + $counts->users = (int) $db->loadResult(); + + $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__extensions'))->where($db->quoteName('enabled') . ' = 1')); + $counts->extensions = (int) $db->loadResult(); + + $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__updates'))->where($db->quoteName('extension_id') . ' != 0')); + $counts->updates = (int) $db->loadResult(); + } + catch (\Throwable $e) + { + // Silent + } + + return $counts; + } + + /** + * Get disk usage info. + */ + public function getDiskInfo(): object + { + $free = @disk_free_space(JPATH_ROOT); + $total = @disk_total_space(JPATH_ROOT); + + return (object) [ + 'free_mb' => $free !== false ? round($free / 1048576) : null, + 'total_mb' => $total !== false ? round($total / 1048576) : null, + ]; + } + + /** + * Get the current visitor's IP address. + */ + public function getCurrentIp(): string + { + return $_SERVER['REMOTE_ADDR'] ?? ''; + } } diff --git a/src/packages/mod_mokowaas_cpanel/tmpl/default.php b/src/packages/mod_mokowaas_cpanel/tmpl/default.php index b9df334d..47de43e1 100644 --- a/src/packages/mod_mokowaas_cpanel/tmpl/default.php +++ b/src/packages/mod_mokowaas_cpanel/tmpl/default.php @@ -10,15 +10,20 @@ defined('_JEXEC') or die; use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; +use Joomla\CMS\Session\Session; -$siteInfo = $siteInfo ?? (object) []; -$plugins = $plugins ?? []; -$healthOk = $healthOk ?? true; -$showHealth = $params->get('show_health', 1); +$siteInfo = $siteInfo ?? (object) []; +$plugins = $plugins ?? []; +$healthOk = $healthOk ?? true; +$counts = $counts ?? (object) ['articles' => 0, 'users' => 0, 'extensions' => 0, 'updates' => 0]; +$disk = $disk ?? (object) ['free_mb' => null, 'total_mb' => null]; +$currentIp = $currentIp ?? ''; +$showHealth = $params->get('show_health', 1); $showPlugins = $params->get('show_plugins', 1); +$token = Session::getFormToken(); -$enabledCount = 0; -$totalCount = count($plugins); +$enabledCount = 0; +$totalCount = count($plugins); foreach ($plugins as $p) { @@ -28,7 +33,6 @@ foreach ($plugins as $p) } } -// Label map for plugin elements $labels = [ 'mokowaas' => 'Core', 'mokowaas_firewall' => 'Firewall', @@ -36,58 +40,159 @@ $labels = [ 'mokowaas_devtools' => 'DevTools', 'mokowaas_monitor' => 'Monitor', ]; + +$diskPct = ($disk->total_mb && $disk->total_mb > 0) + ? round((($disk->total_mb - ($disk->free_mb ?? 0)) / $disk->total_mb) * 100) + : null; +$diskColor = ($diskPct !== null && $diskPct > 90) ? 'bg-danger' : (($diskPct !== null && $diskPct > 75) ? 'bg-warning' : 'bg-success'); ?>
+