# CodePress CMS **[πŸ‡³πŸ‡± Nederlands](#) | [πŸ‡¬πŸ‡§ English](README.en.md)** 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 ```bash 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) β”‚ β”œβ”€β”€ templates/ # Mustache templates β”‚ β”‚ β”œβ”€β”€ layout.mustache β”‚ β”‚ β”œβ”€β”€ assets/ (header, navigation, footer) β”‚ β”‚ β”œβ”€β”€ markdown_content.mustache β”‚ β”‚ β”œβ”€β”€ php_content.mustache β”‚ β”‚ └── html_content.mustache β”‚ └── router.php # PHP dev server router β”œβ”€β”€ 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`) ```json { "site_title": "CodePress", "content_dir": "content", "templates_dir": "cms/templates", "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.md` en `en.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.json` bewerken 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`: ```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].md` en `en.[page].md` - Taalprefix wordt automatisch verwijderd uit weergave - URL: `/?page=test&lang=nl` of `/?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 ```bash git clone https://git.noorlander.info/E.Noorlander/CodePress.git cd CodePress composer install php -S localhost:8080 -t public ``` ## πŸ“– Documentatie - **[Handleiding (NL)](guide/nl.codepress.md)** - **[Guide (EN)](guide/en.codepress.md)** - **[TODO](TODO.md)** - Openstaande verbeteringen - **[AGENTS.md](AGENTS.md)** - Ontwikkelaar instructies ## πŸ“„ Licentie CodePress CMS is beschikbaar onder een **dual-license model**: AGPL v3 (open-source) of Commercial. --- *Gebouwd door Edwin Noorlander*