Files
CodePress/docs/release-notes/v2.6.2.md
T
E.Noorlander d91a5acf9b v2.6.2 (Lyra): Thema editor, content editor, unified scanEditorFiles
- 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 naast bestaande lijst weergave, nieuw
  bestand/map, uploaden, verwijderen, verplaatsen, mappen beheer,
  layout/plugins selectie, git/backup integratie in editor zijbalk
- Uniformiteit: scanEditorFiles() unified scanner
  (scanPluginFiles/scanThemeFiles/scanContentFiles als dunne wrappers)
- Media invoegen in editor: ?theme= scope voor media-list endpoint
- Bug fix: thema-naam niet overgenomen bij kopiëren - title in
  theme.json wordt overschreven met nieuwe themanaam
- Handleidingen bijgewerkt (thema-beheer.md + content-beheer.md NL/EN)
- Release notes: docs/release-notes/v2.6.2.md
- Pentest 30/30, WCAG 25/25
2026-08-19 10:44:32 +00:00

11 KiB

CodePress CMS v2.6.2 — Release Notes

Release datum: 2026-08-19
Codename: Lyra
Status: stable


Samenvatting

Deze release brengt de thema-editor en de content-editor op hetzelfde niveau als de plugin-editor. Thema's en content zijn nu volledig bewerkbaar in de admin met een bestandsbrowser zijbalk, uploaden/verwijderen/verplaatsen, en SCSS-compile (thema's) of git/backup-integratie (content). Daarnaast is de bestandsscanner geünificeerd tot één herbruikbare scanEditorFiles() functie.

Beide grote features zijn geïmplementeerd als spiegel van de plugin-editor (/admin/plugins-edit), zodat de editor-ervaring consistent is voor plugins, thema's en content.


Nieuwe features

1. Thema editor (thema's net zo bewerkbaar maken als plugins)

De thema-beheer pagina toonde alleen thema-kaarten met activeren/compileer knoppen. Nu is elk thema volledig bewerkbaar via /admin/theme-edit.

Bestandsbrowser zijbalk

  • Geneste, inklapbare boomstructuur van alle bestanden in de thema-map (.twig, .json, .scss, .css, .js, .html, .md, .php) inclusief partials/ en assets/ submappen
  • assets/css_compiled/ (runtime artefact, read-only) wordt verborgen in de boom
  • scanThemeFiles() helper — recursieve boom-opbouw met path-traversal bescherming; skipt css_compiled/
  • Mappen die het actieve bestand bevatten worden automatisch uitgeklapt
  • Iconen per bestandstype (TWIG, PHP, JSON, MD, CSS, JS, HTML, mappen)

Nieuw bestand aanmaken

  • "Nieuw bestand" knop + modal met pad-invoer (bijv. partials/header.twig of assets/scss/_variables.scss)
  • Submappen worden automatisch aangemaakt
  • Stub-content per extensie ({% extends 'base.twig' %} voor TWIG, {\n}\n voor JSON, enz.)
  • Path-traversal bescherming: ..//..\\/./ stripping + ../. segment-guard + realpath prefix-check

Uploaden / Verwijderen / Verplaatsen

  • Upload-knop + inklapbaar upload-formulier dat bestanden opslaat in themes/<naam>/assets/
  • Toegestane extensies: afbeeldingen, video, audio, PDF, ZIP, CSS, SCSS, JS, JSON, HTML, MD, TWIG, fonts
  • Per-bestand prullenbak-icoon en verplaats-icoon in de bestandsboom
  • theme.json is beschermd: kan bewerkt maar niet verwijderd of verplaatst worden

SCSS compileren vanuit de editor

  • "SCSS compileren" knop bovenaan de editor (alleen als assets/scss/theme.scss bestaat)
  • Toont compile-status: up-to-date (groen) of verouderd (geel)
  • Forceert compilatie via ThemeManager::compileCss(true)

Thema overzicht + activeren + verwijderen

  • theme.twig vernieuwd: bewerken/activeer/verwijder/compileer knoppen per thema-kaart
  • SCSS-status badges per thema (up-to-date / verouderd)
  • Activeren: zet active_theme in config.json (nieuwe route theme-activate)
  • Verwijderen: alleen niet-actieve, niet-default thema's (nieuwe route theme-delete); default thema beschermd
  • Nieuw thema met basis-kopie: kies een bestaand thema als basis bij aanmaken; css_compiled/ wordt niet gekopieerd; de title in theme.json wordt overschreven met de nieuwe themanaam; README.md krijgt een nieuwe header

Uniforme thema-structuur

Nieuwe thema's die via de admin worden aangemaakt krijgen automatisch een uniforme structuur:

  • theme.json, base.twig, full_content.twig, partials/header.twig, partials/footer.twig
  • assets/scss/theme.scss (starter SCSS), assets/css/, assets/js/, assets/img/, assets/fonts/
  • README.md per thema

Media invoegen in editor

  • De media-modal ondersteunt nu ook thema-context: /admin/media-list?theme=<naam> scant themes/<naam>/assets/
  • _media-modal.twig JS uitgebreid met mediaThemeName scope

2. Content editor (content consistent met plugins en thema's)

De content-beheer pagina (/admin/content) was een klassieke tabelweergave. Nu is er een额外的 content-editor /admin/content-files met dezelfde bestandsbrowser-zijbalk-ervaring als de plugin- en thema-editors. Beide weergaven werken naast elkaar en gebruiken dezelfde content-map.

Bestandsbrowser zijbalk

  • Geneste, inklapbare boomstructuur van alle bestanden in content/
  • scanContentFiles() helper — recursieve boom-opbouw met path-traversal bescherming; skipt .bak/, .git/, dotfiles
  • Bewerkbare extensies: .md, .php, .html (consistent met bestaande content-edit)
  • Per-map actie-knoppen: nieuw bestand, nieuwe map, hernoemen, verwijderen

Nieuw bestand / map aanmaken

  • "Nieuw bestand" knop + modal met pad-invoer en extensie-keuze (Markdown/PHP/HTML)
  • in_dir prefix ondersteuning: bestand kan direct in een submap worden aangemaakt vanuit de zijbalk
  • Frontmatter met layout, author_name, author_email, created wordt automatisch gegenereerd
  • "Nieuwe map" knop + modal; submappen worden automatisch aangemaakt

Uploaden / Verwijderen / Verplaatsen

  • Upload-knop + inklapbaar upload-formulier dat bestanden opslaat in content/ (of een submap)
  • Toegestane extensies: afbeeldingen, video, audio, PDF, ZIP, office docs, CSS, SCSS, JS, JSON, HTML, MD
  • Per-bestand prullenbak-icoon en verplaats-icoon in de bestandsboom
  • Nieuwe routes: content-file-upload, content-file-delete, content-file-move

Mappen beheer

  • Nieuwe map (content-dir-create-in): per map in de zijbalk of bovenaan
  • Map hernoemen (content-dir-rename-in): potlood-icoon per map
  • Map verwijderen (content-dir-delete-in): prullenbak-icoon per map (alleen lege mappen; verborgen .bak bestanden genegeerd)

Layout selectie + plugins + frontmatter

  • Layout dropdown uit theme.json template mapping (zoals bestaande content-edit)
  • Plugin checkbox-groep voor plugins: frontmatter key
  • Author metadata, created datum in frontmatter
  • Live frontmatter-update bij layout/plugin wijziging (spiegel van content-edit.twig JS)

Git / Backup integratie (Fase 5)

Bovenaan de content-editor staan backup- en git-acties:

  • Git init: initialiseert een git repository in content/ (als er nog geen is)
  • Commit: committed alle niet-committed wijzigingen (alleen als er een git repo is en er wijzigingen zijn)
  • Backup: link naar de backup-pagina (/admin/content-backup) voor ZIP backup/restore
  • Git status badge toont de huidige branch, of er niet-committed wijzigingen zijn (dirty/clean), en de laatste commit

3. Uniformiteit: één scanEditorFiles() voor alle editors

De drie nagenoeg identieke scan-functies (scanPluginFiles, scanThemeFiles, scanContentFiles) zijn geünificeerd tot één herbruikbare functie:

  • scanEditorFiles(string $dir, string $scope = 'plugin'): array — hoofd-functie
  • scanEditorFilesNode(string $absDir, string $relPath, string $realBase, array $skipPaths = []): array — recursieve helper
  • Scope-specifieke skips via $skipPaths map (bijv. ['assets/css_compiled' => true] voor themes)
  • scanPluginFiles/scanThemeFiles/scanContentFiles behouden als dunne wrappers voor backwards-compatibiliteit

De file-upload/delete/move handler-families zijn per-scope behouden (plugin: protected-plugins check; theme: theme.json-bescherming; content: geen specifieke bescherming) — generalisatie zou een complexe configuratie-laag vereisen die de leesbaarheid niet verbetert.


Bug fixes

  • Thema-naam niet overgenomen bij kopiëren — bij het aanmaken van een nieuw thema met een basisthema werd de title uit het basisthema's theme.json gekopieerd; nu wordt de title overschreven met de nieuwe themanaam en krijgt README.md een nieuwe header

Technische details

Nieuwe routes

  • theme-edit — thema bestandsbrowser editor
  • theme-file-upload — bestanden uploaden naar thema assets/
  • theme-file-delete — bestand verwijderen uit thema (theme.json beschermd)
  • theme-file-move — bestand verplaatsen binnen thema (theme.json beschermd)
  • theme-activate — thema activeren (active_theme in config.json)
  • theme-delete — thema verwijderen (alleen niet-actief, niet-default)
  • theme-scss — SCSS compileren voor thema
  • content-files — content bestandsbrowser editor
  • content-file-upload — bestanden uploaden naar content/
  • content-file-delete — bestand verwijderen uit content
  • content-file-move — bestand verplaatsen binnen content
  • content-dir-create-in — map aanmaken in content vanuit editor
  • content-dir-rename-in — map hernoemen in content vanuit editor
  • content-dir-delete-in — map verwijderen in content vanuit editor (alleen leeg)

Nieuwe bestanden

  • admin/theme/default/views/pages/theme-edit.twig — thema editor met bestandsbrowser
  • admin/theme/default/views/pages/theme-move-form.twig — thema bestand verplaatsen
  • admin/theme/default/views/pages/content-files.twig — content editor met bestandsbrowser
  • admin/theme/default/views/pages/content-move-form.twig — content bestand verplaatsen
  • admin/theme/default/views/pages/content-dir-rename-form.twig — content map hernoemen
  • docs/release-notes/v2.6.2.md — dit release-verslag

Gewijzigde bestanden (core)

  • public/admin.php — nieuwe routes + handlers (handleThemeEdit/FileUpload/Delete/Move/Activate/Delete/Scss, handleContentFiles/FileUpload/Delete/Move/DirCreateIn/DirRenameIn/DirDeleteIn, createUniformThemeStructure, copyDirRecursive, removeDirRecursive, scanEditorFiles + scanEditorFilesNode unified), handleTheme/handleThemeNew herschreven, handleMediaList uitgebreid met ?theme= scope
  • admin/src/AdminAuth.php — site-admin rechten voor nieuwe theme routes; content-manager rechten voor nieuwe content routes
  • admin/theme/default/views/pages/theme.twig — bewerk/activeer/verwijder/compileer knoppen + SCSS-status badges
  • admin/theme/default/views/pages/theme-new.twig — base-theme keuze dropdown
  • admin/theme/default/views/pages/_media-modal.twig?theme= scope support
  • admin/theme/default/assets/js/editor-toolbar.jstwightmlmixed mode toegevoegd
  • language/{nl,en,de}/admin.php — ~45 nieuwe vertaalstrings (theme-editor + content-editor)
  • guide/{nl,en}/admin-beheerder/thema-beheer.md — volledig herschreven met thema-editor uitleg
  • guide/{nl,en}/admin-beheerder/content-beheer.md — volledig herschreven met content-editor uitleg
  • TODO.md — thema-editor en content-editor items aangevinkt

Tests

  • Pentest: 30/30 tests geslaagd — 0 vulnerabilities
  • WCAG 2.1 AA accessibility: 25/25 tests geslaagd — 100% compliance
  • PHP lint: alle bestanden schoon (geen syntax errors)
  • curl tests: alle nieuwe routes getest (aanmaken, bewerken, opslaan, uploaden, verwijderen, verplaatsen, map aanmaken/hernoemen/verwijderen, SCSS compileren, thema activeren/verwijderen, thema kopiëren); path-traversal pogingen (delete/new_file/upload) allemaal geblokkeerd; default/active theme bescherming geverifieerd; theme.json verwijderen/plaatsen geblokkeerd

Bestanden gewijzigd sinds v2.6.1d

15 bestanden gewijzigd (core + admin theme + language + guide), ~2200 insertions, ~200 deletions.