diff --git a/source/packages/com_mokowaas/admin/src/Model/DashboardModel.php b/source/packages/com_mokowaas/admin/src/Model/DashboardModel.php index 589ab73c..35a38556 100644 --- a/source/packages/com_mokowaas/admin/src/Model/DashboardModel.php +++ b/source/packages/com_mokowaas/admin/src/Model/DashboardModel.php @@ -212,6 +212,54 @@ class DashboardModel extends BaseDatabaseModel ]; } + /** + * Get installed MokoWaaS component and modules with versions. + * + * @return array Array of extension objects with name, element, type, version. + */ + public function getMokoExtensions(): array + { + $db = $this->getDatabase(); + $query = $db->getQuery(true) + ->select([ + $db->quoteName('element'), + $db->quoteName('name'), + $db->quoteName('type'), + $db->quoteName('enabled'), + $db->quoteName('manifest_cache'), + ]) + ->from($db->quoteName('#__extensions')) + ->where('(' + // The component + . '(' . $db->quoteName('type') . ' = ' . $db->quote('component') + . ' AND ' . $db->quoteName('element') . ' = ' . $db->quote('com_mokowaas') . ')' + // Admin modules + . ' OR (' . $db->quoteName('type') . ' = ' . $db->quote('module') + . ' AND ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mod_mokowaas%') . ')' + . ')') + ->order($db->quoteName('type') . ' ASC, ' . $db->quoteName('element') . ' ASC'); + + $db->setQuery($query); + $rows = $db->loadObjectList() ?: []; + + $extensions = []; + + foreach ($rows as $row) + { + $manifest = json_decode($row->manifest_cache ?? '{}'); + + $extensions[] = (object) [ + 'element' => $row->element, + 'name' => $manifest->name ?? $row->name, + 'type' => $row->type, + 'version' => $manifest->version ?? '', + 'enabled' => (int) $row->enabled, + ]; + } + + return $extensions; + } + /** * Toggle a plugin's enabled state. * diff --git a/source/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php b/source/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php index 49f759e0..c191c8ca 100644 --- a/source/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php +++ b/source/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php @@ -25,6 +25,7 @@ class HtmlView extends BaseHtmlView protected $wafBlocks = []; protected $wafChartData = []; protected $loginChartData = []; + protected $mokoExtensions = []; public function display($tpl = null) { @@ -38,6 +39,7 @@ class HtmlView extends BaseHtmlView $this->wafBlocks = $model->getRecentWafBlocks(5); $this->wafChartData = $model->getWafBlocksByDay(14); $this->loginChartData = $model->getLoginsByDay(14); + $this->mokoExtensions = $model->getMokoExtensions(); // Check for importable Akeeba data try diff --git a/source/packages/com_mokowaas/admin/tmpl/dashboard/default.php b/source/packages/com_mokowaas/admin/tmpl/dashboard/default.php index 39543e9a..8c007c6e 100644 --- a/source/packages/com_mokowaas/admin/tmpl/dashboard/default.php +++ b/source/packages/com_mokowaas/admin/tmpl/dashboard/default.php @@ -19,6 +19,7 @@ $siteInfo = $this->siteInfo; $plugins = $this->plugins; $recentLogins = $this->recentLogins; $pendingUpdates = $this->pendingUpdates; +$mokoExts = $this->mokoExtensions; $adminToolsAvail = $this->adminToolsAvailable ?? null; $atsAvail = $this->atsAvailable ?? null; $checkedOut = $this->checkedOutItems; @@ -72,6 +73,31 @@ $categoryOrder = ['core', 'security', 'monitoring', 'content', 'tools', 'api']; + + +
+ 'icon-cogs', + 'mod_mokowaas_cpanel' => 'icon-tachometer-alt', + 'mod_mokowaas_menu' => 'icon-bars', + 'mod_mokowaas_cache' => 'icon-bolt', + 'mod_mokowaas_categories' => 'icon-folder', + ]; + foreach ($mokoExts as $ext): + $icon = $extIcons[$ext->element] ?? 'icon-puzzle-piece'; + $label = str_replace(['mod_mokowaas_', 'com_mokowaas'], ['', 'Component'], $ext->element); + $label = ucfirst($label ?: 'Component'); + ?> +
+ + escape($label); ?> + escape($ext->version); ?> +
+ +
+ +