# Core Classes ## CodePressCMS.php Hoofd CMS class in `cms/core/class/CodePressCMS.php`: ```php $cms = new CodePressCMS(); $cms->init(); $cms->renderPage($pagePath); ``` Verantwoordelijkheden: - Routing en pagina rendering - Breadcrumb generatie (dynamisch: Home > [submappen] > [pagina]) - Guide pagina's laden (`getGuidePage()`) - Titel extractie uit H1 (`getTitleFromFile()`) - Weergavenaam verwerking (`formatDisplayName()`) ## ThemeManager.php Themabeheer in `cms/core/class/ThemeManager.php`: ```php $themeManager = new ThemeManager($config); $themeManager->getActiveTheme(); $themeManager->renderTwig($template, $data); $themeManager->compileCss($force); $themeManager->getCssUrl(); ``` Verantwoordelijkheden: - Actief thema resolveren vanuit `config.json` - `theme.json` laden (title, config.default_template, template mapping) - Twig environment bouwen (geroot in thema map) - **SCSS compilatie** — compileert `assets/scss/theme.scss` naar `assets/css_compiled/theme.css` via scssphp - Layout resolveren naar `.twig` template (fallback op `config.default_template`) `getCssUrl()` prioriteit: 1) `assets/css/theme.css` (handmatig), 2) `assets/css_compiled/theme.css` (gecompileerd). ## PluginManager.php Plugin systeem in `cms/core/plugin/PluginManager.php`: ```php $pluginManager = new PluginManager($pluginsPath, $enabledPlugins); $pluginManager->getSidebarContent($allowedPlugins); $pluginManager->getPluginCssUrls(); $pluginManager->executeHook($name, $params); $pluginManager->getAdminMenuItems(); $pluginManager->handleAdminRoute($route); $pluginManager->getPluginType($pluginName); ``` Verantwoordelijkheden: - Plugins laden vanuit `plugins/` mappen (alleen ingeschakelde plugins) - Plugin bestand: `.php` (NIET `plugin.php`) - Hooks en filters systeem (`doAction`, `applyFilters`) - Sidebar content verzamelen van content plugins (`getSidebarContent`) - Plugin CSS URLs verzamelen (`getPluginCssUrls`) - **Admin menu items** van systeem plugins (`getAdminMenuItems`) - **Admin routes** afhandelen via systeem plugins (`handleAdminRoute`) - **Plugin type** bepalen (`getPluginType` — `content` of `system`) - `isPluginViewable` — systeem plugins verschijnen niet in sidebar ## AdminAuth.php Authenticatie en RBAC in `admin/src/AdminAuth.php`: ```php $auth = new AdminAuth($appConfig); $auth->login($username, $password); $auth->logout(); $auth->hasPermission($route); $auth->verifyCsrf($token); ``` Constanten: - `ROLE_PERMISSIONS` — Mapping van rol → toegestane route prefixes. `admin` heeft wildcard `*`. - `ROLE_LABELS` — Human-readable labels per rol. Rollen: | Rol | Label | Permissies | |-----|-------|-----------| | `admin` | Admin | Alles (`*`) | | `content-manager` | Content Beheerder | Content beheer, handleiding | | `bi-manager` | BI Beheerder | Statistieken, logs, handleiding | | `site-admin` | Site Admin | Thema, plugins, statistieken, logs, update, handleiding | Verantwoordelijkheden: - Session-based authenticatie - bcrypt password hashing - CSRF tokens (`verifyCsrf`) - Brute-force lockout (login attempts tracking) - RBAC via `hasPermission($route)` — checkt route tegen `ROLE_PERMISSIONS` ## CMSAPI.php Plugin API in `cms/core/plugin/CMSAPI.php`: ```php $api = PluginManager::getAPI(); $config = $api->getConfig(); $page = $api->getPage($path); $content = $api->getContent(); ``` Biedt read-only toegang aan plugins tot CMS data (config, pagina's, content).