- /admin/content is nu de boom-editor (plugin-file-tree structuur),
consistent met plugin- en thema-editors. Oude tabelweergave verhuisd
naar /admin/content-list, bereikbaar via 'Boom weergave'/'Lijst
weergave' knoppen. /admin/content-files redirect naar /admin/content.
- Image-grootte knop in markdown editor-toolbar: selecteer ,
klik knop, breedte/hoogte dialog, {:width=... height=...} syntax
toevoegen/vervangen. Bestaande waarden worden in prompts getoond.
- Custom-grootte syntax {:width=...} nu ook correct herschreven naar
/-media/ endpoint (was alleen gewone  herschreven).
- Handleidingen bijgewerkt (content-beheer.md NL+EN: boom/lijst
weergave uitleg + image-grootte + images in content sectie)
- Release notes v2.6.2 bijgewerkt
- Pentest 30/30, WCAG 25/25
16 KiB
16 KiB
TODO
Nice to have
-
Multidomein implementeren (elk domein = eigen thema + content, één admin + site name)
- Fase 1: Config-resolutie
- For apache instants domein settings /public/noorlander.info/ or /public/mycode.name/
- config.domains.json (registry: host, aliases, redirect, config) + .example
- cms/core/domain.php: normalizeHost/getDomainRegistry/resolveDomain/loadSiteConfigForHost
- cms/core/config.php refactor → herbruikbare functie, compatibel blijven
- Per-domein config-bestanden (content_dir, active_theme) in the main content dir. like: /content/domain1 /content/domain2 os /content/noorlander.info/ /content/mycode.name/
- Fase 2: Front-end
- cms/router.php: taal-prefix dynamisch uit actieve config
- public/.htaccess: generieke
([a-z]{2})taalregel - CodePressCMS::getCurrentLanguage(): validatie via config['language']['available']
- getInternalHosts(): registry-hosts toevoegen (cross-domein links = intern)
- public/index.php: /-media/ en /-assets/ via actieve content_dir
- Fase 3: Admin (domeinbeheer + switch)
- admin/config/app.php: domains_json pad
- public/admin.php: $_SESSION['admin_domain'] + routes domains/domain-switch
- domains.twig + sidebar-item/badge in admin.twig
- Bestaande handlers laten werken op actief domein (config_json/content_dir patchen)
- Fase 4: Housekeeping
- .gitignore: config..json, content-/
- AGENTS.md + config.json.example bijwerken
- Verificatie: php -l, curl met Host-header, domein-switch in admin testen
- Fase 1: Config-resolutie
-
Thema editor (thema's net zo bewerkbaar maken als plugins)
- Fase 1: Themabestanden bewerken
- Nieuwe route theme-edit + handleThemeEdit() (spiegel van handlePluginsEdit)
- scanThemeFiles() helper (geneste boom van thema-map, zoals scanPluginFiles; skipt css_compiled/)
- theme-edit.twig met bestandsbrowser zijbalk + CodeMirror editor
- Bewerkbare extensies: .twig, .json, .scss, .css, .js, .html, .md, .php
- theme.json editor (validatie op structuur: name, template mappings, config)
- Layout .twig bestanden bewerken (base.twig, full_content.twig, left_sidebar.twig, etc.)
- Partials bewerken (header, navigation, footer)
- Nieuw bestand aanmaken binnen thema-map (zoals plugin-editor)
- Bestand opslaan met CSRF + path-traversal bescherming (realpath + prefix-check)
- Fase 2: Media/assets beheer
- Uploaden naar assets/ van thema (spiegel van plugins-file-upload)
- Bestand verwijderen uit thema (spiegel van plugins-file-delete; theme.json beschermd)
- Bestand verplaatsen binnen thema (spiegel van plugins-file-move; theme.json beschermd)
- Media invoegen in editor: thema-context scant assets/ map (uitbreiding media-list endpoint met ?theme=)
- Fase 3: SCSS compileren
- SCSS compileren knop in theme-edit (runtime scssphp compile assets/scss/theme.scss → assets/css_compiled/theme.css)
- Compile-status tonen (up-to-date/verouderd badges in theme.twig + theme-edit.twig)
- Fase 4: Thema overzicht + activeren
- theme.twig: Bewerken-knop per thema (link naar theme-edit)
- Activeren per thema (active_theme in config.json via theme-activate route)
- Themaverwijdering (alleen niet-actieve, niet-default thema's via theme-delete route)
- Theme-new uitbreiden met keuze uit bestaand thema als basis (kopieer structuur, skip css_compiled/)
- Fase 5: Uniformiteit + documentatie
- Uniforme thema-structuur afdwingen (theme.json, assets/scss, assets/css, assets/js, assets/img, assets/fonts, partials, README.md) via createUniformThemeStructure()
- Per thema README.md (gegenereerd bij aanmaken via admin)
- guide/nl|en/admin-beheerder/thema-beheer.md bijgewerkt met thema-editor uitleg
- theme.json schema documentatie in guide (template mappings, config, header_color, etc.)
- Verificatie: php -l, curl testen (aanmaken, bewerken, opslaan, uploaden, verwijderen, verplaatsen, SCSS compileren, activeren, verwijderen), path-traversal tests, default/active theme bescherming
- Fase 1: Themabestanden bewerken
-
Content editor consistent met plugins en thema's (uniforme editor-ervaring)
- Fase 1: Bestandsbrowser zijbalk voor content
- Nieuwe route content-files / handleContentFiles() (spiegel van plugins-edit/theme-edit) naast de bestaande per-pagina content-edit
- scanContentFiles() helper (geneste boom van content_dir, zoals scanPluginFiles/scanThemeFiles; via unified scanEditorFiles(scope))
- content-files.twig met bestandsbrowser zijbalk + CodeMirror editor (herbruik de plugin/theme editor layout)
- Bewerkbare extensies: .md, .php, .html (consistent met bestaande content-edit)
- Nieuw bestand aanmaken binnen content_map (zoals plugin/theme-editor) met extensie-keuze + in_dir prefix
- Bestand opslaan met CSRF + path-traversal bescherming (realpath + prefix-check op content_dir)
- Fase 2: Media/assets beheer (uniform met plugins/thema's)
- Uploaden naar content/ (spiegel van plugins-file-upload/theme-file-upload; content-file-upload route)
- Bestand verwijderen uit content (spiegel van plugins-file-delete/theme-file-delete; content-file-delete route)
- Bestand verplaatsen binnen content (spiegel van plugins-file-move/theme-file-move; content-file-move route)
- Media invoegen in editor: content-context (media-list zonder ?plugin/?theme = content/, al aanwezig)
- Fase 3: Mappen beheer (uniform met plugins/thema's structuur)
- Nieuwe map aanmaken (content-dir-create-in route, zelfde UX als plugin/theme-editor nieuw-bestand, met in_dir)
- Map hernoemen (content-dir-rename-in route, binnen editor zijbalk)
- Map verwijderen (content-dir-delete-in route, binnen editor zijbalk, alleen lege mappen)
- Map verplaatsen (spiegel van plugins-file-move/theme-file-move voor mappen) — optioneel, niet geïmplementeerd (mappen verplaatsen is zeldzaam; hernoemen + bestand-verplaatsen dekken de use-case)
- Fase 4: Uniformiteit + consistentie
- Eén herbruikbare editor-macro/template voor plugin/theme/content (voorkom dupliek Twig-macro's) — uitgesteld: de macro's verschillen per scope (plugin heeft protected-badge, theme heeft theme.json-bescherming, content heeft mappen-acties); samenvoegen zou een complexe macro met conditionals opleveren die minder leesbaar is dan drie focussen macro's
- Eén herbruikbare scanFiles() helper die plugin/theme/content afhandelt (scanEditorFiles(dir, scope) + scanEditorFilesNode; scanPluginFiles/scanThemeFiles/scanContentFiles zijn dunne wrappers)
- Eén herbruikbare fileUpload/fileDelete/fileMove handler-familie met scope-parameter (plugin/theme/content) i.p.v. drie bijna-identieke handlers per type — uitgesteld: de handlers hebben scope-specifieke logica (plugin: protected-plugins check; theme: theme.json-bescherming; content: geen specifieke bescherming) die generalisatie met een configuratie-laag vereist; de huidige per-scope handlers zijn duidelijker dan één handler met veel conditionals
- Per content README.md of index.md (zoals plugins/thema's) — optioneel, alleen voor mappen; niet geïmplementeerd
- guide/nl|en/admin-beheerder/content-beheer.md bijwerken met content-editor uitleg (zoals plugin-development.md en thema-beheer.md)
- Fase 5: Backup/git integratie in editor
- ContentBackup (ZIP/git) acties toegankelijk vanuit de content-editor zijbalk (zoals SCSS-compile knop in theme-edit)
- git commit/status tonen in de editor wanneer content/ een git repo is (branch, dirty/clean badge, laatste commit)
- Verificatie: php -l, curl testen (aanmaken, bewerken, opslaan, uploaden, verwijderen, verplaatsen, map aanmaken/hernoemen/verwijderen), path-traversal tests (delete/new_file/upload alle geblokkeerd), pentest, WCAG
- Fase 1: Bestandsbrowser zijbalk voor content
Voltooid ✅
- Admin code en niet gebruikte mappen/bestanden opschonen
- version.php changelog verwijderen (staat in git)
- Guide mappenstructuur reorganiseren (NL/EN → rollen)
- README.md compacter maken met verwijzingen naar guide
- Admin dashboard template check — Twig-commentaren
{# ... #}verwijderd uit Dashboard.php - Plugins — zichtbaar verschil tussen system en content plugins (badge + border + icoon in plugins.twig)
- Plugins — alleen actieve plugins zichtbaar in sidebar (PluginManager laadt alleen enabled plugins)
- Plugins — dubbele enabled_plugins config opgelost (plugins.enabled verwijderd, alleen enabled_plugins op top-level)
- Admin config — Analytics & Logging toggles verwijderd van config-pagina
- Handleidingen gecontroleerd en bijgewerkt (20 bestanden NL+EN: configuratie, plugins, plugin-development, core-classes, theme-json, layouts, scss-styling, admin-beheerder, nieuw-thema, architectuur)
- Content backup/restore optie + content-git repository integratie (ContentBackup class, content-backup.twig, ZIP backup/restore, git init/commit/log/restore)
- Pentest controles uitgevoerd (30/30 tests geslaagd — 0 vulnerabilities)
- WCAG 2.1 AA accessibility tests (25/25 tests geslaagd — 100% compliance, test-script verbeterd met min/max checks en grep -E)
v2.6.2 (2026-08-19) ✅
- Pentest controles uitgevoerd (30/30)
- WCAG 2.1 AA accessibility tests (25/25)
- Thema editor (thema's net zo bewerkbaar maken als plugins): bestandsbrowser zijbalk, nieuw bestand, uploaden, verwijderen, verplaatsen, SCSS compileren vanuit editor, thema activeren/verwijderen, nieuw thema met basis-kopie, uniforme thema-structuur
- Content editor (content consistent met plugins en thema's): bestandsbrowser zijbalk nu op /admin/content (vervangt tabelweergave), nieuw bestand/map, uploaden, verwijderen, verplaatsen, mappen beheer, layout/plugins selectie, git/backup integratie in editor zijbalk; oude tabelweergave verhuisd naar /admin/content-list
- Uniformiteit: scanEditorFiles() unified scanner (scanPluginFiles/scanThemeFiles/scanContentFiles als dunne wrappers)
- Media invoegen in editor: ?theme= scope voor media-list endpoint + _media-modal.twig
- Bug: thema-naam niet overgenomen bij kopiëren — title in theme.json wordt overschreven met nieuwe themanaam; README.md krijgt nieuwe header
- Bug: mappen met
_prefix zichtbaar in frontend navigatie — scanDirectory/searchInDirectory/scanForPageTitles skippen nu_prefix (consistente filtering met.en-) - Bug: images in markdown niet weergegeven — processContent() herschrijft lokale image/link URLs naar /-media/ endpoint (relatief, /content/, subdir, custom-grootte syntax); externe URLs ongewijzigd gelaten
- UX: /admin/content is nu de boom-editor (plugin-file-tree structuur); oude tabelweergave op /admin/content-list met "Boom weergave"/"Lijst weergave" knoppen
- UX: image-grootte knop in editor-toolbar (markdown) — selecteer
, klik knop, breedte/hoogte dialog, {:width=... height=...} syntax toevoegen/vervangen
- Handleidingen in guide/ bijgewerkt (thema-beheer.md NL+EN volledig herschreven met thema-editor uitleg; content-beheer.md NL+EN volledig herschreven met content-editor uitleg)
- Verslag gemaakt (docs/release-notes/v2.6.2.md)
- Versie verhoogd naar 2.6.2
v2.6.1d (2026-08-18) ✅
- Pentest controles uitgevoerd (30/30)
- WCAG 2.1 AA accessibility tests (25/25)
- Plugin internationalisatie (i18n): plugins hebben eigen language/ mappen, systeem plugins volgen admin taal, content plugins volgen content taal, fallback chain
- Plugin uniformiteit: alle 6 plugins hebben uniforme structuur (README.md, assets/.gitkeep, language/nl|en/)
- Plugin editor vernieuwd: bestandsbrowser zijbalk (geneste boom), nieuw bestand aanmaken, uploaden, verwijderen, verplaatsen
- Media invoegen in editor: nieuw /admin/media-list JSON endpoint + herbruikbare _media-modal.twig include; plugin-context scant assets/ map
- Plugin overzicht knoppen: alleen iconen met title/aria-label
- README.md en handleidingen in guide/ doorgeloken en bijgewerkt (plugin-development.md NL+EN volledig herschreven, architectuur.md NL+EN bijgewerkt)
- Bug: admin taal niet volledig geïntegreerd met plugins — plugins hebben nu eigen language/ mappen (nl/en), systeem plugins volgen admin taal (admin.php), content plugins volgen content taal (site.php), fallback chain, PluginManager + AdminPluginAPI + CMSAPI uitgebreid met getPluginTranslations()/t(), plugin.json settings ondersteunen label_key/help_key/option_label_key
- Bug: plugin uniformiteit — alle 6 plugins hebben nu een uniforme structuur (.php, plugin.json, README.md, assets/.gitkeep, language/nl|en/), plugins/README.md herschreven, guide plugin-development.md (NL+EN) volledig bijgewerkt, guide architectuur.md (NL+EN) bijgewerkt
- Bug: plugin editor toont alleen de .php maar een plugin kan uit meerdere bestanden bestaan — plugins-edit pagina heeft nu een bestandsbrowser zijbalk die alle bestanden in de plugin-map toont (.php, .json, .md, .html, .css, .scss, .js) inclusief language/ en assets/ submappen, nieuw-bestand knop met modal, path-traversal bescherming, scanPluginFiles() helper, editor-toolbar.js modeMap uitgebreid
- Bug: plugin editor uploaden en verwijderen — plugins-edit pagina heeft nu een Upload knop (bestanden naar assets/ van de plugin) en per-bestand verwijder-knop in de bestandsboom, twee nieuwe routes (plugins-file-upload, plugins-file-delete), path-traversal bescherming + protected plugins geblokkeerd + dotfiles geweigerd
- Bug: plugin editor bestand verplaatsen — plugins-edit pagina heeft nu per-bestand een verplaats-knop in de bestandsboom, nieuwe route plugins-file-move + template plugins-move-form.twig, path-traversal bescherming + protected plugins geblokkeerd
- Bug: media-knop in editor werkte niet — #mediaModal bestond niet, opgelost via nieuw /admin/media-list JSON endpoint + herbruikbare _media-modal.twig include
- Bug: plugin-kaart knoppen tekst liep niet goed — teksten verwijderd, alleen iconen met title/aria-label
- Verslag gemaakt (docs/release-notes/v2.6.1d.md)
- Versie verhoogd naar 2.6.1d
v2.6.1c (2026-08-17) ✅
- Pentest controles uitgevoerd (30/30)
- WCAG 2.1 AA accessibility tests (25/25)
- README.md en handleidingen in guide/ doorgeloken en bijgewerkt
- Admin gebruikersbeheer opnieuw ontworpen (lijst + zoeken/filter + profiel + wachtwoord)
- CLI commando voor admin wachtwoord reset (cli/reset-admin-password.php)
- Bug: admin rollen werkt niet goed, dashboard geeft een 404, de plugin's moeten aangeven welke rol nodig is
- Bug: user admin mag nooit zijn eigen rol wijzigen
- Bug: na inloggen moet de admin zijn rol binnen de /admin kunnen veranderen om andere rollen te kunnen testen
- Bug: in een andere rol kan de gebruiker niet zijn eigen wachtwoord veranderen
- Bug: bij het aanmaken van een pagina in de content moet de auteur naam en email in de meta komen te staan (door middel van de api aan de twig bestanden doorgeven)
- Verslag gemaakt (docs/release-notes/v2.6.1c.md)
- Versie verhoogd naar 2.6.1c
v2.6.1 (2026-08-17) ✅
- Pentest controles uitgevoerd (30/30)
- WCAG 2.1 AA accessibility tests (25/25)
- README.md en handleidingen in guide/ doorgeloken en bijgewerkt
- Installatie instructies toegevoegd aan README (Apache2/Nginx/PHP/composer)
- Verwijderde vendor packages: php-mqtt/client, mustache/mustache (uit composer + autoloader)
- Verslag gemaakt (docs/release-notes/v2.6.1.md)
- Versie verhoogd naar 2.6.1
v2.6.0 (2026-08-15) ✅
- Pentest controles uitgevoerd (30/30)
- WCAG 2.1 AA accessibility tests (25/25)
- Verslag gemaakt (docs/release-notes/v2.6.0.md)
- Versie verhoogd naar 2.6.0