Bump version to 1.6.0, update docs and guides to match current project state
- 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
This commit is contained in:
343
README.md
343
README.md
@@ -10,60 +10,82 @@ Een lichtgewicht, file-based content management systeem gebouwd met PHP.
|
||||
|
||||
- 📝 **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
|
||||
- 🧭 **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
|
||||
- 🎨 **Bootstrap 5** - Moderne UI framework
|
||||
- 🔒 **Security** - Beveiligde content management
|
||||
- 🛡️ **Admin Console** - Ingebouwd admin paneel voor content, config, plugins en gebruikersbeheer
|
||||
- 🎨 **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
|
||||
|
||||
1. **Upload** bestanden naar webserver
|
||||
2. **Stel permissies** in voor webserver
|
||||
3. **Configureer** (optioneel) via `config.json`
|
||||
4. **Bezoek** website via browser
|
||||
```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
|
||||
├── cms/ # Core CMS engine
|
||||
│ ├── core/
|
||||
│ │ ├── config.php # Configuratie loader
|
||||
│ │ └── index.php # CMS engine
|
||||
│ └── templates/ # Template bestanden
|
||||
│ ├── layout.mustache
|
||||
│ ├── assets/
|
||||
│ │ ├── header.mustache
|
||||
│ │ ├── navigation.mustache
|
||||
│ │ └── footer.mustache
|
||||
│ ├── markdown_content.mustache
|
||||
│ ├── php_content.mustache
|
||||
│ └── html_content.mustache
|
||||
├── admin/ # Admin paneel
|
||||
│ │ ├── 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
|
||||
│ │ ├── app.php # Admin configuratie
|
||||
│ │ └── admin.json # Gebruikers & security
|
||||
│ ├── src/
|
||||
│ │ └── AdminAuth.php # Authenticatie service
|
||||
│ └── templates/ # Admin templates
|
||||
├── cli/ # CLI scripts & tests
|
||||
│ └── test/
|
||||
├── content/ # Content bestanden
|
||||
├── plugins/ # CMS plugins
|
||||
├── public/ # Web root
|
||||
│ │ └── 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/
|
||||
│ │ ├── js/
|
||||
│ │ └── favicon.svg
|
||||
│ ├── index.php # Website entry point
|
||||
│ └── admin.php # Admin entry point
|
||||
├── docs/ # Documentatie
|
||||
├── config.json # Configuratie
|
||||
└── README.md
|
||||
│ │ ├── 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
|
||||
@@ -75,169 +97,43 @@ codepress/
|
||||
"site_title": "CodePress",
|
||||
"content_dir": "content",
|
||||
"templates_dir": "cms/templates",
|
||||
"default_page": "auto",
|
||||
"homepage": "homepage",
|
||||
"author": {
|
||||
"name": "Edwin Noorlander",
|
||||
"website": "https://noorlander.info",
|
||||
"git": "https://git.noorlander.info/E.Noorlander/CodePress.git"
|
||||
"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
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Configuratie Opties
|
||||
|
||||
- **`site_title`** - Naam van de website
|
||||
- **`content_dir`** - Map met content bestanden
|
||||
- **`templates_dir`** - Map met template bestanden
|
||||
- **`default_page`** - Standaard pagina (`"auto"` voor automatische detectie)
|
||||
- **`homepage`** - Homepage (`"auto"` voor automatische detectie)
|
||||
- **`author`** - Auteur informatie met links
|
||||
- **`seo`** - SEO instellingen
|
||||
|
||||
## 📝 Content Types
|
||||
|
||||
### Markdown (.md)
|
||||
- Auto-linking tussen pagina's
|
||||
- GitHub Flavored Markdown ondersteuning
|
||||
- Syntax highlighting voor code blocks
|
||||
- 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
|
||||
- Database integratie mogelijk
|
||||
- Session management beschikbaar
|
||||
|
||||
### HTML (.html)
|
||||
- Statische HTML pagina's
|
||||
- Bootstrap componenten
|
||||
- Custom CSS en JavaScript
|
||||
- Volledige HTML5 validatie
|
||||
|
||||
## 🎨 Design Features
|
||||
|
||||
### Navigation
|
||||
- **Tab-style navigatie** met Bootstrap
|
||||
- **Dropdown menus** voor mappen en sub-mappen
|
||||
- **Home knop** met icoon
|
||||
- **Active state** indicatie
|
||||
- **Responsive** hamburger menu
|
||||
|
||||
### Layout
|
||||
- **Flexbox layout** voor moderne structuur
|
||||
- **Fixed header** met logo en zoekfunctie
|
||||
- **Breadcrumb navigatie** tussen header en content
|
||||
- **Fixed footer** met metadata
|
||||
- **Scrollable content** gebied
|
||||
|
||||
### Responsive
|
||||
- **Mobile-first** aanpak
|
||||
- **Touch-friendly** interactie
|
||||
- **Adaptieve** breedtes
|
||||
- **Consistente** ervaring
|
||||
|
||||
## 🔧 Vereisten
|
||||
|
||||
- **PHP 8.4+** of hoger
|
||||
- **Webserver** (Apache, Nginx, etc.)
|
||||
- **Schrijfrechten** voor PHP bestanden
|
||||
- **Mod_rewrite** (optioneel voor pretty URLs)
|
||||
|
||||
## 🛠️ Installatie
|
||||
|
||||
### Via Composer
|
||||
```bash
|
||||
composer create-project codepress
|
||||
cd codepress
|
||||
```
|
||||
|
||||
### Handmatig
|
||||
1. **Download** de bestanden
|
||||
2. **Upload** naar webserver
|
||||
3. **Stel permissies** in
|
||||
4. **Configureer** `config.json`
|
||||
|
||||
### Webserver Configuratie
|
||||
|
||||
#### Apache
|
||||
```apache
|
||||
<Directory "/var/www/codepress">
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^(.*)$ index.php [QSA,L]
|
||||
</IfModule>
|
||||
```
|
||||
|
||||
#### Nginx
|
||||
```nginx
|
||||
server {
|
||||
root /var/www/codepress/public;
|
||||
index index.php;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🏗️ PHP Classes
|
||||
|
||||
### SimpleTemplate Class
|
||||
|
||||
Lightweight template rendering engine die Mustache-style syntax ondersteunt zonder externe dependencies.
|
||||
|
||||
**Methods:**
|
||||
- `render($template, $data)` - Rendert template met data
|
||||
- `replacePartial($matches)` - Vervangt `{{>partial}}` placeholders
|
||||
|
||||
**Features:**
|
||||
- `{{>partial}}` - Partial includes
|
||||
- `{{#variable}}...{{/variable}}` - Conditionele blocks
|
||||
- `{{^variable}}...{{/variable}}` - Negatieve conditionele blocks
|
||||
- `{{{variable}}}` - Unescaped HTML content
|
||||
- `{{variable}}` - Escaped content
|
||||
|
||||
### CodePressCMS Class
|
||||
|
||||
Hoofd CMS class die alle content management functionaliteit beheert.
|
||||
|
||||
**Public Methods:**
|
||||
- `__construct($config)` - Initialiseer CMS met configuratie
|
||||
- `getPage()` - Haalt huidige pagina content op
|
||||
- `getMenu()` - Genereert navigatiestructuur
|
||||
- `render()` - Rendert volledige pagina met templates
|
||||
|
||||
**Private Methods:**
|
||||
- `buildMenu()` - Bouwt menu structuur van content directory
|
||||
- `scanDirectory($dir, $prefix)` - Scant directory voor content
|
||||
- `performSearch($query)` - Voert zoekopdracht uit
|
||||
- `parseMarkdown($content)` - Converteert Markdown naar HTML
|
||||
- `parsePHP($filePath)` - Verwerkt PHP bestanden
|
||||
- `parseHTML($content)` - Verwerkt HTML bestanden
|
||||
- `getBreadcrumb()` - Genereert breadcrumb navigatie
|
||||
- `renderMenu($items, $level)` - Rendert menu HTML
|
||||
- `getContentType($page)` - Bepaalt content type
|
||||
- `autoLinkPageTitles($content)` - Auto-link pagina titels
|
||||
|
||||
**Features:**
|
||||
- Multi-format content support (MD, PHP, HTML)
|
||||
- Dynamische navigatie met dropdowns
|
||||
- Zoekfunctionaliteit met snippets
|
||||
- Breadcrumb navigatie
|
||||
- Auto-linking tussen pagina's
|
||||
- File metadata tracking
|
||||
- Responsive template rendering
|
||||
|
||||
## 🛡️ Admin Console
|
||||
|
||||
@@ -247,58 +143,75 @@ CodePress bevat een ingebouwd admin paneel voor het beheren van je website.
|
||||
|
||||
### Modules
|
||||
- **Dashboard** - Overzicht met statistieken en snelle acties
|
||||
- **Content** - Bestanden browsen, aanmaken, bewerken en verwijderen
|
||||
- **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
|
||||
- **Plugins** - Overzicht van geinstalleerde plugins
|
||||
- **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
|
||||
- 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)** - Gedetailleerde handleiding
|
||||
- **[Handleiding (EN)](guide/en.codepress.md)** - English documentation
|
||||
- **[Release Notes v1.5.0](RELEASE-NOTES-v1.5.0.md)** - Uitgebreide release informatie
|
||||
- **[Handleiding (NL)](guide/nl.codepress.md)**
|
||||
- **[Guide (EN)](guide/en.codepress.md)**
|
||||
- **[TODO](TODO.md)** - Openstaande verbeteringen
|
||||
- **[AGENTS.md](AGENTS.md)** - Ontwikkelaar instructies
|
||||
|
||||
## 🤝 Bijdragen
|
||||
|
||||
Bijdragen zijn welkom! Zie [AGENTS.md](AGENTS.md) voor ontwikkelrichtlijnen.
|
||||
|
||||
## 📄 Licentie
|
||||
|
||||
CodePress CMS is beschikbaar onder een **dual-license model**:
|
||||
|
||||
### 🆓 AGPL v3 (Open-Source)
|
||||
- **Gratis** voor niet-commercieel gebruik
|
||||
- **Vereist** het delen van wijzigingen
|
||||
- **Copyleft** bescherming
|
||||
- Zie [LICENSE](LICENSE) voor details
|
||||
|
||||
### 💼 Commercial License
|
||||
Voor bedrijfsmatig gebruik zonder AGPL verplichtingen:
|
||||
|
||||
- **Individual:** €99 (1 developer)
|
||||
- **Business:** €499 (10 developers)
|
||||
- **Enterprise:** €2499 (unlimited)
|
||||
- **SaaS:** €999/jaar
|
||||
|
||||
📧 **Contact:** commercial@noorlander.info
|
||||
📖 **Meer info:** [LICENSE-INFO.md](LICENSE-INFO.md)
|
||||
|
||||
## 🔗 Links
|
||||
|
||||
- **Website**: https://noorlander.info
|
||||
- **Repository**: https://git.noorlander.info/E.Noorlander/CodePress.git
|
||||
- **Issues**: https://git.noorlander.info/E.Noorlander/CodePress/issues
|
||||
CodePress CMS is beschikbaar onder een **dual-license model**: AGPL v3 (open-source) of Commercial.
|
||||
|
||||
---
|
||||
|
||||
*Gebouwd met ❤️ door Edwin Noorlander*
|
||||
*Gebouwd door Edwin Noorlander*
|
||||
|
||||
Reference in New Issue
Block a user