api = $api; } public function getConfig(): array { return [ 'title' => 'Statistics', 'viewable' => false, 'type' => 'system', ]; } public function getAdminMenu(): array { $config = $this->getPluginConfig(); $requiredRoles = $config['required_roles'] ?? ['bi-manager', 'site-admin', 'admin']; return [ [ 'plugin' => 'Statistics', 'route' => 'statistics', 'label' => 'Statistieken', 'label_key' => 'menu_label', 'icon' => 'bi-bar-chart', 'section' => 'general', 'permission' => 'statistics', 'required_roles' => $requiredRoles, ], ]; } /** * Get this plugin's runtime config (defaults + overrides). */ private function getPluginConfig(): array { $pluginDir = dirname(__DIR__); $pluginJsonFile = $pluginDir . '/plugin.json'; $configJsonFile = $pluginDir . '/config.json'; $defaults = []; if (file_exists($pluginJsonFile)) { $pluginJson = json_decode(file_get_contents($pluginJsonFile), true) ?? []; foreach ($pluginJson['settings'] ?? [] as $setting) { if (isset($setting['key'])) { $defaults[$setting['key']] = $setting['default'] ?? null; } } } $overrides = []; if (file_exists($configJsonFile)) { $overrides = json_decode(file_get_contents($configJsonFile), true) ?? []; } return array_merge($defaults, $overrides); } public function handleAdminRoute(string $action): ?string { // System plugin: translations resolve against the admin language. $t = $this->api ? $this->api->getPluginTranslations('Statistics') : []; $tr = function (string $key) use ($t): string { return $t[$key] ?? $key; }; $analytics = $this->getAnalytics(); if ($analytics === null) { return '
' . htmlspecialchars($tr('analytics_disabled')) . '
'; } $config = $this->getPluginConfig(); $showCountries = $config['show_countries'] ?? true; $showTopPages = $config['show_top_pages'] ?? true; $stats = $analytics->getStats(); $totals = $stats['totals'] ?? ['views' => 0, 'uniques' => 0, 'pages' => []]; $countries = $stats['countries'] ?? []; $topPages = $stats['top_pages'] ?? $totals['pages'] ?? []; ob_start(); ?>

$count): ?>

$count): ?>
api === null) { return null; } $analyticsConfig = $this->api->getConfig('analytics', []); if (!is_array($analyticsConfig) || empty($analyticsConfig['enabled'])) { return null; } return new Analytics($analyticsConfig); } }