# v2.6.6 (Lyra) — Essential-plugins altijd laden Releasedatum: 2026-08-27 Codename: Lyra Status: stable ## Samenvatting Bug-fix: beschermde en essentiële plugins (`Navigation`, `Dashboard`) werden op de live site als "Inactief" getoond en konden niet meer aangezet worden via de admin-interface, terwijl ze verplichte functionaliteit leveren (sidebar-navigatie voor handleidingen, dashboard). Oorzaak: zodra zo'n plugin uit `enabled_plugins` in `config.json` raakte (bijv. door een merge of handmatige wijziging), blokkeerde de admin-code elke toggle en toonde de Twig-template alleen een schild-icoon — geen "Activeren"-knop. De core laadde ze vervolgens ook niet meer. Oplossing: de core **forceert** het laden van essential plugins (plugin.json `essential: true`) ongeacht de `enabled_plugins`-lijst. De admin-UI toont ze altijd als "Actief" en de toggle-handler staat aanzetten wél toe (uitzetten blijft geblokkeerd). ## Wijzigingen ### `cms/core/plugin/PluginManager.php` - Nieuwe methode `isEssentialPlugin(string $pluginName): bool` — leest `plugin.json` `essential: true`. - `loadPlugins()` laadt essential plugins **altijd**, ook als ze niet in `enabled_plugins` staan. De interne lijst wordt consistent gehouden voor `getEnabledPlugins()` / `isEnabled()`. ### `public/admin.php` - Nieuwe helper `isEssentialPluginByName(string $pluginName): bool` — pad-onafhankelijke check op `plugin.json` `essential: true`. - `isProtectedPlugin()` dekt nu ook essential plugins (naast de hardcoded `getProtectedPlugins()`-lijst). Alle bestaande call-sites (delete, bewerken, file-upload, file-delete, file-move, dir-create, dir-rename, dir-delete, config-move) profiteren automatisch. - `handlePlugins()`: `enabled` wordt `true` voor protected/essential plugins, zodat de UI altijd "Actief" toont. - `handlePluginsToggle()`: aanzetten van protected/essential plugins is weer mogelijk; alleen uitzetten blijft geblokkeerd met een admin-log. ### `guide/nl/codepress-developer/plugin-development.md` ### `guide/en/codepress-developer/plugin-development.md` - Beschrijving van `essential`-veld bijgewerkt: "altijd geladen" + "kan niet worden uitgeschakeld/bewerkt/verwijderd". ## Getroffen plugins | Plugin | `essential` in plugin.json | Hardcoded protected | Gedrag na fix | |----------|----------------------------|---------------------|---------------| | `Dashboard` | ja | nee | Altijd geladen, niet uit te schakelen | | `Navigation` | ja | ja (redundant) | Altijd geladen, niet uit te schakelen | | `HTMLBlock` | nee | nee | Normaal (toggle werkt) | | `Statistics` | nee | nee | Normaal (toggle werkt) | | `Logs` | nee | nee | Normaal (toggle werkt) | | `GeoIPInfo` | nee | nee | Normaal (toggle werkt) | ## Tests uitgevoerd - `php -l` over alle PHP-bestanden (zonder vendor): 0 syntax-errors. - Functionele tests (`cli/test/functional/run-tests.sh` tegen Apache): 16/16 PASS (100%). - Pentest (`cli/test/pentest/pentest.sh`): 29/29 SAFE, 0 vulnerabilities. - Accessibility / WCAG 2.1 AA (`cli/test/accessibility.sh`): 25/25 PASS. - Runtime-check `PluginManager` met lege `enabled_plugins`: alleen `Dashboard` + `Navigation` worden geladen (essential). Met `["HTMLBlock"]`: `Dashboard` + `Navigation` + `HTMLBlock`. - Admin-UI simulatie met lege `enabled_plugins`: `Dashboard` en `Navigation` tonen `enabled=true` (vroeger `false`). ## Upgrade-instructies 1. Pull de nieuwe versie. 2. Geen verdere actie nodig — essential plugins staan vanaf nu altijd aan. 3. Als je `config.json` handmatig hebt aangepast en `Navigation` of `Dashboard` uit `enabled_plugins` hebt gehaald: je hoeft dit niet meer terug te draaien; de core laadt ze toch. Ze verschijnen weer als "Actief" in de admin-UI.