Major changes: - New ThemeManager with Twig templating and SCSS compilation - Dynamic themes system (themes/default, themes/demo) - LogManager with SQLite storage and syslog forwarding - RequestLogger with static helper methods - Admin UI overhaul (Bootstrap 5, dark mode) - Admin config page with logging and theme settings - Admin logs page with filters and search - Removed legacy Mustache templates - Removed test plugin and theme - Composer dependencies: Twig, scssphp, CommonMark, MaxMind GeoIP
8.3 KiB
8.3 KiB
CodePress CMS
Een lichtgewicht, file-based content management systeem gebouwd met PHP.
Versie: 1.5.0 | Licentie: AGPL v3 / Commercial
✨ Features
- 📝 Multi-format Content - Ondersteunt Markdown, PHP en HTML bestanden
- 🧭 Dynamic Navigation - Automatische menu generatie met dropdowns
- 🌍 Multi-language - Nederlands en Engels met automatische detectie
- 🔍 Search Functionality - Volledige tekst zoek door alle content
- 🧭 Breadcrumb Navigation - Intuïtieve navigatiepaden met sidebar toggle
- 🔗 Auto-linking - Automatische links tussen pagina's
- 📱 Responsive Design - Werkt perfect op alle apparaten
- ⚙️ JSON Configuratie - Eenvoudige configuratie via JSON
- 🎨 Thema's - Aanpasbare thema's met eigen kleuren en achtergronden
- 🔒 Security - Beveiligde content management (100/100 security score)
- 🛡️ Admin Console - Ingebouwd admin paneel met CodeMirror editor, media browser, themabeheer en plugin configuratie
🚀 Quick Start
php -S localhost:8080 -t public
Bezoek http://localhost:8080 in je browser.
Admin paneel: http://localhost:8080/admin.php (login: admin / admin)
📁 Project Structuur
codepress/
├── cms/ # Core CMS engine
│ ├── core/
│ │ ├── class/
│ │ │ ├── CodePressCMS.php # Hoofd CMS class
│ │ │ ├── Logger.php # Logging systeem
│ │ │ ├── SimpleTemplate.php # Mustache-style template engine
│ │ │ ├── Cache.php
│ │ │ ├── AssetManager.php
│ │ │ ├── SearchEngine.php
│ │ │ ├── ContentSecurityPolicy.php
│ │ │ └── ...
│ │ ├── plugin/
│ │ │ ├── PluginManager.php # Plugin loader
│ │ │ └── CMSAPI.php # API voor plugins
│ │ ├── config.php # Config loader
│ │ └── index.php # Bootstrap (autoloader)
│ ├── lang/ # Taalbestanden (nl.php, en.php)
│ └── router.php # PHP dev server router (serveert ook /themes/)
├── themes/ # Dynamische thema's (volledig zelfstandig)
│ ├── default/ # Standaard thema
│ │ ├── theme.json # { title, default_layout, layout→.twig mapping, kleuren }
│ │ ├── base.twig # Hoofd layout
│ │ ├── full_content.twig # Layout: volledige breedte
│ │ ├── left_sidebar.twig # Layout: sidebar links
│ │ ├── right_sidebar.twig # Layout: sidebar rechts
│ │ ├── custom1.twig # Layout: custom
│ │ ├── partials/ # header, navigation, footer
│ │ ├── css/theme.scss # SCSS bron (runtime gecompileerd)
│ │ └── js/theme.js # Thema JavaScript
│ ├── demo/ # Demo thema
│ └── test/ # Test thema
├── admin/ # Admin paneel
│ ├── config/
│ │ ├── app.php # Admin configuratie
│ │ └── admin.json # Gebruikers & security
│ ├── src/
│ │ └── AdminAuth.php # Authenticatie (sessies, bcrypt, CSRF)
│ ├── templates/
│ │ ├── login.php
│ │ ├── layout.php
│ │ └── pages/ (dashboard, content, content-edit, content-new,
│ │ content-dir-form, content-move-form, config, plugins,
│ │ plugins-edit, plugins-new, plugin-config, theme, media, users)
│ └── storage/logs/
├── cli/test/ # CLI scripts & tests
├── plugins/ # CMS plugins (HTMLBlock, MQTTTracker)
├── public/ # Web root
│ ├── assets/
│ │ ├── css/ (Bootstrap, styles, editor.css)
│ │ ├── js/ (Bootstrap, app.js, editor-toolbar.js)
│ │ └── codemirror/ (CodeMirror editor + modes)
│ ├── index.php # Website entry point
│ ├── admin.php # Admin entry point + router
│ └── themes/ # Geuploade thema achtergronden
├── themes/ # Thema configuraties
│ ├── default/theme.json
│ └── test/theme.json
├── content/ # Content bestanden
├── guide/ # Handleidingen (nl/en)
├── docs/ # Documentatie
└── config.json # Site configuratie
⚙️ Configuratie
Basis Configuratie (config.json)
{
"site_title": "CodePress",
"content_dir": "content",
"default_page": "index",
"active_theme": "default",
"language": {
"default": "nl",
"available": ["nl", "en"]
},
"seo": {
"description": "CodePress CMS - Lightweight file-based content management system",
"keywords": "cms, php, content management, file-based"
},
"author": {
"name": "E. Noorlander",
"website": "https://noorlander.info"
},
"features": {
"auto_link_pages": true,
"search_enabled": true,
"breadcrumbs_enabled": true
}
}
📝 Content Types
Markdown (.md)
- Auto-linking tussen pagina's
- GitHub Flavored Markdown via
league/commonmark - Automatische titel extractie
- Multi-language met
nl.bestand.mdenen.bestand.md
PHP (.php)
- Volledige PHP ondersteuning
- Dynamische content generatie
HTML (.html)
- Statische HTML pagina's
- Bootstrap componenten
🛡️ Admin Console
CodePress bevat een ingebouwd admin paneel voor het beheren van je website.
Toegang: /admin.php | Standaard login: admin / admin
Modules
- Dashboard - Overzicht met statistieken en snelle acties
- Content - Bestanden browsen, aanmaken, bewerken, hernoemen en verwijderen
- CodeMirror Editor - Syntax highlighting met toolbar (vet, cursief, kop, link, afbeelding, lijst, media)
- Media Browser - Uploaden en invoegen van afbeeldingen/video/audio met size prompt
- Configuratie -
config.jsonbewerken met JSON-validatie - Thema's - Thema aanmaken, activeren, bewerken, verwijderen met achtergrond upload
- Plugins - Overzicht, installeren, configureren en toggle
- Gebruikers - Gebruikers toevoegen, verwijderen en wachtwoorden wijzigen
Beveiliging
- Session-based authenticatie met bcrypt password hashing
- CSRF-bescherming op alle formulieren
- Brute-force bescherming (5 pogingen, 15 min lockout)
- Path traversal bescherming via
realpath()+ prefix-check - Session timeout (30 min)
- Security headers: CSP, X-Frame-Options, X-Content-Type-Options
Belangrijk: Wijzig het standaard wachtwoord direct na installatie via Gebruikers.
🎨 Thema's
Thema's worden opgeslagen in themes/naam/theme.json:
{
"name": "default",
"label": "Standard",
"header_color": "#0a369d",
"header_font_color": "#ffffff",
"navigation_color": "#2754b4",
"navigation_font_color": "#ffffff",
"sidebar_background": "#f8f9fa",
"sidebar_border": "#dee2e6",
"background_image": "/themes/default_bg.jpg"
}
🌍 Multi-language Support
- Bestandsnaam conventie:
nl.[pagina].mdenen.[page].md - Taalprefix wordt automatisch verwijderd uit weergave
- URL:
/?page=test&lang=nlof/?page=test&lang=en - Automatische taal detector op basis van browser of config
🔧 Vereisten
- PHP 8.1+
- Webserver (Apache, Nginx, of PHP built-in server)
- Composer (voor
league/commonmark)
🛠️ Installatie
git clone https://git.noorlander.info/E.Noorlander/CodePress.git
cd CodePress
composer install
php -S localhost:8080 -t public
📖 Documentatie
- Handleiding (NL)
- Guide (EN)
- TODO - Openstaande verbeteringen
- AGENTS.md - Ontwikkelaar instructies
📄 Licentie
CodePress CMS is beschikbaar onder een dual-license model: AGPL v3 (open-source) of Commercial.
Gebouwd door Edwin Noorlander