api = $api; } /** * Geeft de plugin-configuratie terug. * * @since 2.6.5 * @return array Plugin-configuratie met title, viewable en type. */ public function getConfig(): array { return [ 'title' => 'Statistics', 'viewable' => false, 'type' => 'system', ]; } /** * Geeft de admin-menu-items voor deze plugin terug. * * @since 2.6.5 * @return array> Lijst met admin-menu-item configuraties. */ 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, ], ]; } /** * Haalt de runtime-configuratie van deze plugin op (standaardwaarden plus overrides). * * Leest standaardwaarden uit plugin.json en overschrijft deze met config.json. * * @since 2.6.5 * @return array De samengevoegde plugin-configuratie. */ 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); } /** * Verwerkt een admin-route en toont de statistieken-pagina. * * Toont analytics-gegevens zoals views, unieke bezoekers, landen en * top-pagina's, mits analytics ingeschakeld is. * * @since 2.6.5 * @param string $action De uit te voeren actie. * @return string|null De HTML-uitvoer van de statistieken-pagina, of null. */ 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); } }