- version.php: 1.5.0 → 1.6.0 + changelog for media browser, editor, theme management, content move/rename, /-media/ prefix - README.md/README.en.md: complete rewrite with current project structure, config format, admin features, CodeMirror, themes, quick start - guide/nl.codepress.md, guide/en.codepress.md: comprehensive update matching all current admin routes, features, and project layout - TODO.md: compiled from docs/TODO.md with completed/future items
91 lines
5.6 KiB
Markdown
91 lines
5.6 KiB
Markdown
# CodePress TODO
|
|
|
|
## ✅ Voltooid (recent)
|
|
|
|
### Media & Editor
|
|
- [x] Media browser modal met upload, thumbnail grid, en size-prompt
|
|
- [x] Media knop in editor toolbar voor alle modes (md/html/php)
|
|
- [x] Recursieve scan van `content/` voor media bestanden (ipv alleen `-assets/`)
|
|
- [x] `/-media/` URL prefix voor media bestanden (consistente routing, geen special cases)
|
|
- [x] `/-assets/` blijft werken voor backward compatibility
|
|
- [x] Size prompt voor afbeeldingen: Markdown ``, HTML/PHP `<img>` met width/height
|
|
- [x] Editor change detectie: `editor.on('change', ...)` werkt nu correct
|
|
- [x] "Terug" knop verandert naar rode "Annuleren" bij ongewijzigde wijzigingen (content-edit + content-new)
|
|
- [x] Upload knop disabled tot bestand geselecteerd
|
|
- [x] "Aanmaken" knop disabled tot bestandsnaam ingevuld
|
|
- [x] Editor mode switching in content-new werkt via `switchMode()` (mode + toolbar + data-ext)
|
|
|
|
### Content Management
|
|
- [x] Inline rename veld in content-edit pagina (geen aparte rename knop)
|
|
- [x] Bestanden en mappen verplaatsen (content-move)
|
|
- [x] Breadcrumb toont geen `.` meer (dirname check op PHP niveau)
|
|
- [x] Verwijderde aparte `content-file-rename` route/handler/template
|
|
|
|
### Thema's
|
|
- [x] Thema's in subdirectory `themes/naam/theme.json` (ipv `themes/naam.json`)
|
|
- [x] Thema CRUD in admin (aanmaken, activeren, bewerken, verwijderen)
|
|
- [x] File upload voor thema achtergrond afbeeldingen
|
|
|
|
### Security & Code Quality (docs/TODO.md)
|
|
- [x] Path traversal fix (`realpath()` + prefix-check)
|
|
- [x] JWT secret fallback verwijderd
|
|
- [x] `executePhpFile()` pad-restrictie
|
|
- [x] IP spoofing fix in MQTTTracker
|
|
- [x] Debug uitgezet in admin config
|
|
- [x] Cookie security (Secure/HttpOnly/SameSite)
|
|
- [x] Dead code verwijderd
|
|
- [x] `htmlspecialchars()` op bestandspad gecorrigeerd
|
|
- [x] Ongebruikte methode `scanForPageNames()` verwijderd
|
|
- [x] Breadcrumb titels geescaped
|
|
- [x] Taalparameter in zoekresultaat-URLs
|
|
- [x] Operator precedence bug in MQTTTracker
|
|
- [x] Hardcoded strings vervangen
|
|
- [x] HTML lang attribuut dynamisch gemaakt
|
|
- [x] console.log verwijderd
|
|
- [x] Sidebar toggle aria attributes
|
|
|
|
## 🔴 Nog openstaand
|
|
|
|
### Kritiek
|
|
- [ ] **Plugin auto-loading** — Elke map in `plugins/` wordt blind geladen zonder allowlist of validatie (`PluginManager.php:40` in docs/TODO.md)
|
|
|
|
### Hoog
|
|
- [ ] **autoLinkPageTitles()** — Regex kan geneste `<a>` tags produceren (`CodePressCMS.php`)
|
|
- [ ] **MQTT wachtwoord** — Credentials in plain text JSON (`MQTTTracker.php`)
|
|
- [ ] **Markdown editor** — WYSIWYG/split-view Markdown editor integreren in content-edit (bijv. EasyMDE, SimpleMDE, of Toast UI Editor). Live preview, toolbar met opmaakknoppen, drag & drop afbeeldingen
|
|
- [ ] **Plugin activeren/deactiveren** — Toggle knop per plugin in admin Plugins pagina. Schrijft `enabled: true/false` naar plugin `config.json`
|
|
- [ ] **Plugin API** — Uitgebreide API voor plugins zodat ze kunnen inhaken op CMS events (hooks/filters): `onPageLoad`, `onBeforeRender`, `onAfterRender`, `onSearch`, `onMenuBuild`
|
|
|
|
### Medium
|
|
- [ ] **Taalwisselaar verliest pagina** — Wisselen van taal navigeert altijd naar homepage (`header.mustache`)
|
|
- [ ] **ctime is geen creatietijd op Linux** — `stat()` ctime is inode-wijzigingstijd (`CodePressCMS.php`)
|
|
- [ ] **getGuidePage() dupliceert markdown parsing** — Zelfde CommonMark setup als `parseMarkdown()`
|
|
- [ ] **HTMLBlock ontbrekende `</div>`** — Niet-gesloten tags bij null-check
|
|
- [ ] **formatDisplayName() redundante logica** — Dubbele checks en overtollige str_replace
|
|
- [ ] **Plugin configuratie editor** — Per-plugin config.json bewerken vanuit admin panel
|
|
- [ ] **Admin activity log** — Logboek van alle admin acties (wie deed wat wanneer) met viewer in dashboard
|
|
- [ ] **Wachtwoord wijzigen eigen account** — Apart formulier voor ingelogde gebruiker om eigen wachtwoord te wijzigen (met huidig wachtwoord verificatie)
|
|
- [ ] **Admin thema** — Admin sidebar kleur overnemen van site thema config (`header_color`)
|
|
- [ ] **Map aanmaken/verwijderen** — Directory management in admin Content pagina
|
|
- [ ] **Bestand uploaden** — Uploaden naar andere mappen dan `-assets/` via admin Content pagina
|
|
- [ ] **Content preview** — Live preview van Markdown/HTML content naast de editor
|
|
|
|
### Laag
|
|
- [ ] **Geen type hints** — Ontbrekende type declarations op properties en methoden
|
|
- [ ] **Public properties** — `$config`, `$currentLanguage`, `$searchResults` zouden private moeten zijn
|
|
- [ ] **Inline CSS** — ~250 regels statische CSS in template i.p.v. extern bestand
|
|
- [ ] **style.css is Bootstrap** — Bestandsnaam is misleidend, Bootstrap wordt mogelijk dubbel geladen
|
|
- [ ] **Geen error handling op `file_get_contents()`** — Meerdere calls zonder return-check
|
|
- [ ] **Logger slikt fouten** — `@file_put_contents()` met error suppression
|
|
- [ ] **Logger tail() leest heel bestand** — Geheugenprobleem bij grote logbestanden
|
|
- [ ] **Externe links missen `rel="noreferrer"`**
|
|
- [ ] **Zoekformulier mist aria-label**
|
|
- [ ] **mobile.css override Bootstrap utilities** met `!important`
|
|
- [ ] **Content versioning** — Simpele file-based backup bij elke save (bijv. `.bak` bestanden)
|
|
- [ ] **Zoeken in admin** — Zoekfunctie binnen de admin content browser
|
|
- [ ] **Drag & drop** — Bestanden herordenen/verplaatsen via drag & drop
|
|
- [ ] **Keyboard shortcuts** — Ctrl+S om op te slaan in editor, Ctrl+N voor nieuw bestand
|
|
- [ ] **Dark mode** — Admin panel dark mode toggle
|
|
- [ ] **Responsive admin** — Admin sidebar inklapbaar op mobiel (nu is het gestacked)
|
|
- [ ] **ARIAComponents.php parse error** — Bestaande PHP parse error op regel 67 (`syntax error, unexpected double-quote mark`)
|