v1.9.1: fix world map rendering and resolve eight small TODO items
World map: - Fix zero-padded ISO numeric ids leaving 31 countries unrendered (Brazil, Australia, Belgium, Austria, Algeria and more) - Fix Russia and Fiji smearing across the full map width at the antimeridian by unwrapping ring longitudes and drawing them at both edges - Crop to 84N-60S, add evenodd fill rule, 174 countries rendered Improvements: - Logger::tail() reads backwards in chunks instead of loading the whole file - External links get rel=noopener noreferrer in footer and Markdown content - formatDisplayName() cleaned up and guarded against empty input - Export statistics as CSV (Excel BOM) or JSON - GeoIP database auto-updates when older than 35 days - Editor shortcuts Ctrl/Cmd+S to save and Ctrl/Cmd+N for a new page - Live search filter in the admin content browser - Content versioning with timestamped .bak copies in content/-backups/ Also removes eight stale TODO entries that were already implemented
This commit is contained in:
@@ -2,6 +2,19 @@
|
||||
|
||||
## ✅ Voltooid (recent)
|
||||
|
||||
### Opschoning & kleine verbeteringen (v1.9.1)
|
||||
- [x] Wereldkaart: nul-opgevulde ISO-nummers werden niet herkend, waardoor 31 landen ontbraken (o.a. Brazilië, Australië, België, Oostenrijk, Algerije)
|
||||
- [x] Wereldkaart: Rusland en Fiji smeerden over de datumgrens uit over de volle 360°; ringen worden nu ontvouwen en aan beide randen getekend
|
||||
- [x] Wereldkaart: bijgesneden op 84°N–60°Z, `fill-rule="evenodd"` voor enclaves, 174 landen
|
||||
- [x] `Logger::tail()` leest het bestand nu achterwaarts in blokken i.p.v. volledig in het geheugen
|
||||
- [x] Externe links krijgen `rel="noopener noreferrer"` — in de footer en automatisch in Markdown-content via `ExternalLinkExtension`
|
||||
- [x] `formatDisplayName()` opgeschoond en beveiligd tegen lege invoer (PHP-waarschuwing verholpen)
|
||||
- [x] Statistieken exporteren als CSV (met BOM voor Excel) of JSON
|
||||
- [x] GeoIP-database werkt zichzelf automatisch bij als hij ouder is dan 35 dagen
|
||||
- [x] Sneltoetsen in de editor: Ctrl/Cmd+S opslaan, Ctrl/Cmd+N nieuwe pagina
|
||||
- [x] Zoekfilter in de admin content browser (live, met teller en Escape om te wissen)
|
||||
- [x] Content versioning: bij elke save een tijdgestempelde `.bak` in `content/-backups/`, laatste 5 versies per bestand
|
||||
|
||||
### Statistieken & GeoIP (v1.9.0)
|
||||
- [x] `GeoIP` class met providerketen: lokaal (DB-IP Lite) → MaxMind `.mmdb` → externe API, met automatische fallback
|
||||
- [x] Eigen pure-PHP MMDB-lezer (`MMDBReader`), geen Composer-afhankelijkheid nodig
|
||||
@@ -81,22 +94,14 @@
|
||||
- [ ] **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
|
||||
- [ ] **ctime is geen creatietijd op Linux** — `stat()` ctime is inode-wijzigingstijd. Deels ondervangen: frontmatter `created` heeft voorrang en de footer verbergt de datum als beide gelijk zijn (`CodePressCMS.php`)
|
||||
- [ ] **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
|
||||
- [ ] **Backups terugzetten** — Versies uit `content/-backups/` bekijken en herstellen vanuit de admin
|
||||
|
||||
### Laag
|
||||
- [ ] **Geen type hints** — Ontbrekende type declarations op properties en methoden
|
||||
@@ -105,17 +110,10 @@
|
||||
- [ ] **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)
|
||||
- [ ] **stats.json bij hoog verkeer** — Nu één schrijfactie met LOCK_EX per request. Bij veel verkeer eventueel opsplitsen naar dagbestanden of APCu
|
||||
- [ ] **Steden op de kaart** — Nu alleen landniveau; met een City-database ook stippen per stad plotten
|
||||
- [ ] **Statistieken exporteren** — CSV/JSON export van bezoekersstatistieken
|
||||
- [ ] **Automatische GeoIP-update** — Maandelijkse cron/schedule i.p.v. handmatig op de knop drukken
|
||||
- [ ] **Kleine landen op de kaart** — Natural Earth 110m bevat geen Monaco, Vaticaanstad, Liechtenstein en Singapore; eventueel 50m-dataset gebruiken
|
||||
|
||||
Reference in New Issue
Block a user