v2.6.5 (Lyra): Dynamische pad-resolutie, WordPress-stijl docblocks, security-fix wachtwoord, git-historie schoon

- Bug: dashboard toonde 0 content (AdminPluginAPI::getContentDir() gaf relatief pad terug zonder normalisatie)
- Dynamische pad-resolutie: PluginAPIInterface uitgebreid met getProjectRoot/getContentDir/getPluginsDir/getVersionInfo; CMSAPI en AdminPluginAPI implementeren deze universeel
- public/index.php media-serving gebruikt $config['content_dir'] i.p.v. hardcoded /content
- Navigation en Logs plugins halen paden via de API i.p.v. hardcoded dirname(__DIR__)
- WordPress-stijl docblocks toegevoegd voor alle classes, methods, properties en functies (~450 docblocks, @since 2.6.5)
- Security: hardcoded plaintext-wachtwoord 'admin' verwijderd uit AdminAuth.php; bij eerste installatie wordt een cryptografisch veilig wachtwoord gegenereerd (random_bytes, 16 tekens) en eenmalig op het inlogscherm getoond
- Security: git-geschiedenis schoongemaakt (admin.json, admin.json.example, admin-console/config/admin.json verwijderd uit alle commits; filter-branch over alle branches + tags, gc --prune --aggressive)
- README.md, README.en.md, AGENTS.md bijgewerkt
- Test-scripts bijgewerkt naar clean-URL structuur + actuele ARIA-waarden
- Versie verhoogd naar 2.6.5
- Tests: pentest 29/29, WCAG 25/25, functioneel 16/16, enhanced 25/25
This commit is contained in:
2026-08-27 09:05:51 +00:00
parent 74612aefbb
commit d9ea2eee47
38 changed files with 771 additions and 572 deletions
+30 -30
View File
@@ -7,14 +7,14 @@
* action- en filter-hooks, en biedt methoden voor plugin-configuratie,
* vertalingen, admin-routes en sidebar-content.
*
* @since 2.6.4
* @since 2.6.5
*/
class PluginManager
{
/**
* Geladen plugin-instanties, geïndexeerd op plugin-naam.
*
* @since 2.6.4
* @since 2.6.5
* @var array<string,object>
*/
private array $plugins = [];
@@ -22,7 +22,7 @@ class PluginManager
/**
* Het absolute pad naar de pluginsdirectory.
*
* @since 2.6.4
* @since 2.6.5
* @var string
*/
private string $pluginsPath;
@@ -30,7 +30,7 @@ class PluginManager
/**
* De geïnjecteerde plugin-API-instantie (CMSAPI of AdminPluginAPI).
*
* @since 2.6.4
* @since 2.6.5
* @var PluginAPIInterface|null
*/
private $api = null;
@@ -38,7 +38,7 @@ class PluginManager
/**
* Lijst met ingeschakelde plugin-namen.
*
* @since 2.6.4
* @since 2.6.5
* @var array<int,string>
*/
private array $enabledPlugins = [];
@@ -46,7 +46,7 @@ class PluginManager
/**
* Geregistreerde action-hooks, gegroepeerd per hook-naam en prioriteit.
*
* @since 2.6.4
* @since 2.6.5
* @var array<string,array<int,array<int,callable>>>
*/
private array $actions = [];
@@ -54,7 +54,7 @@ class PluginManager
/**
* Geregistreerde filter-hooks, gegroepeerd per hook-naam en prioriteit.
*
* @since 2.6.4
* @since 2.6.5
* @var array<string,array<int,array<int,callable>>>
*/
private array $filters = [];
@@ -63,7 +63,7 @@ class PluginManager
* De standaardtaal van de site, gebruikt als fallback voor plugins
* zonder eigen default_language in plugin.json.
*
* @since 2.6.4
* @since 2.6.5
* @var string
*/
private string $siteDefaultLanguage = 'nl';
@@ -71,7 +71,7 @@ class PluginManager
/**
* Construeer een PluginManager en laadt direct de ingeschakelde plugins.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $pluginsPath Absoluut pad naar de pluginsdirectory.
* @param array<int,string> $enabledPlugins Lijst met ingeschakelde plugin-namen.
@@ -91,7 +91,7 @@ class PluginManager
* Wordt gebruikt als fallback wanneer een plugin geen eigen `default_language`
* declareert in plugin.json.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $lang Taalcode (bijv. 'nl', 'en').
* @return void
@@ -106,7 +106,7 @@ class PluginManager
*
* Plugins die een setAPI()-methode implementeren, ontvangen de API-instantie.
*
* @since 2.6.4
* @since 2.6.5
*
* @param PluginAPIInterface $api De plugin-API-instantie.
* @return void
@@ -128,7 +128,7 @@ class PluginManager
* Per plugin wordt het hoofdbestand (<naam>.php) geïncludeerd, de plugin-class
* geïnstantieerd, en action- en filter-hooks automatisch geregistreerd.
*
* @since 2.6.4
* @since 2.6.5
*
* @return void
*/
@@ -179,7 +179,7 @@ class PluginManager
/**
* Registreer een action-callback voor een hook.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $hook Naam van de action-hook.
* @param callable $callback De callback die bij de hook wordt uitgevoerd.
@@ -194,7 +194,7 @@ class PluginManager
/**
* Registreer een filter-callback voor een hook.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $hook Naam van de filter-hook.
* @param callable $callback De callback die de waarde filtert.
@@ -209,7 +209,7 @@ class PluginManager
/**
* Voer alle geregistreerde callbacks voor een action-hook uit.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $hook Naam van de action-hook.
* @param mixed ...$args Argumenten die aan elke callback worden doorgegeven.
@@ -229,7 +229,7 @@ class PluginManager
/**
* Pas alle geregistreerde filter-callbacks toe op een waarde.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $hook Naam van de filter-hook.
* @param mixed $value De initiële waarde die wordt gefilterd.
@@ -251,7 +251,7 @@ class PluginManager
/**
* Haal een specifieke plugin-instantie op.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $name Plugin-naam (directorynaam).
* @return object|null De plugin-instantie of null indien niet geladen.
@@ -264,7 +264,7 @@ class PluginManager
/**
* Haal alle geladen plugin-instanties op.
*
* @since 2.6.4
* @since 2.6.5
*
* @return array<string,object> Plugin-instanties geïndexeerd op naam.
*/
@@ -276,7 +276,7 @@ class PluginManager
/**
* Haal de lijst met ingeschakelde plugin-namen op.
*
* @since 2.6.4
* @since 2.6.5
*
* @return array<int,string> Lijst met ingeschakelde plugin-namen.
*/
@@ -288,7 +288,7 @@ class PluginManager
/**
* Controleer of een plugin is ingeschakeld.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $pluginName Plugin-naam (directorynaam).
* @return bool True indien de plugin is ingeschakeld.
@@ -304,7 +304,7 @@ class PluginManager
* Standaardwaarden uit plugin.json `settings` worden samengevoegd met
* overrides uit het config.json van de plugin.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $pluginName Plugin-naam (directorynaam).
* @return array<string,mixed> Opgeloste configuratie als [key => value].
@@ -341,7 +341,7 @@ class PluginManager
* 2. CMS site-config `language.default`
* 3. 'nl'
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $pluginName Plugin-directorynaam.
* @return string Taalcode (bijv. 'nl', 'en').
@@ -363,7 +363,7 @@ class PluginManager
*
* Fallback-keten: aangevraagde taal -> standaardtaal van de plugin -> lege array.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $pluginName Plugin-directorynaam.
* @param string $lang Aangevraagde taalcode.
@@ -408,7 +408,7 @@ class PluginManager
* Geeft een associatieve array terug, geïndexeerd op plugin-naam:
* ['Statistics' => [...], 'Logs' => [...], ...]
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $lang Aangevraagde taalcode.
* @param string $context 'admin' of 'site'.
@@ -430,7 +430,7 @@ class PluginManager
*
* Een plugin is viewable tenzij zijn configuratie 'viewable' expliciet op false zet.
*
* @since 2.6.4
* @since 2.6.5
*
* @param object $plugin De plugin-instantie.
* @return bool True indien de plugin viewable is.
@@ -450,7 +450,7 @@ class PluginManager
* Elke plugin met een getSidebarContent()-methode levert HTML die wordt
* ingepakt in een Bootstrap-card met de plugin-titel.
*
* @since 2.6.4
* @since 2.6.5
*
* @param array<int,string>|null $allowedPlugins Optionele whitelist van plugin-namen.
* @return string De samengevoegde sidebar-HTML.
@@ -496,7 +496,7 @@ class PluginManager
/**
* Haal CSS-URL's op van alle ingeschakelde plugins die getCssUrl() implementeren.
*
* @since 2.6.4
* @since 2.6.5
*
* @return array<int,string> Lijst met CSS-URL's.
*/
@@ -519,7 +519,7 @@ class PluginManager
*
* Elke plugin levert [['route' => 'plugin-name/action', 'label' => 'Label', 'icon' => 'bi-icon']].
*
* @since 2.6.4
* @since 2.6.5
*
* @return array<int,array<string,mixed>> Admin-menu-items van alle plugins.
*/
@@ -545,7 +545,7 @@ class PluginManager
* Plugins implementeren handleAdminRoute(string $action): ?string
* (geeft gerenderde HTML of null terug).
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $pluginName Plugin-naam.
* @param string $action Actie/sub-route binnen de plugin.
@@ -566,7 +566,7 @@ class PluginManager
/**
* Bepaal welke plugin een opgegeven admin-route afhandelt.
*
* @since 2.6.4
* @since 2.6.5
*
* @param string $route De admin-route (bijv. 'statistics' of 'statistics/details').
* @return array<string,mixed>|null ['plugin' => naam, 'action' => actie, 'permission' => vereiste permissie] of null.