Skip to content

Der-WU/wucms

Repository files navigation

WuCMS

WuCMS ist ein modulares Community-CMS, entwickelt in PHP 8.1+ auf einer schlanken Custom-Architektur – ohne externe Frameworks, ohne unnötigen Overhead.

⚠️ Lizenz: Ausschließlich für private, nicht-kommerzielle Nutzung. Weitergabe und Verkauf sind untersagt. Alle Rechte vorbehalten – © 2026 Marc (Der-WU)


Inhaltsverzeichnis


Features

Allgemein

  • Sauberes MVC-ähnliches Routing – URL-Segmente werden direkt auf Handler-Dateien gemappt
  • Modulares System – jedes Modul ist eigenständig und leicht erweiterbar
  • Mehrsprachigkeit – deutsches Standardlayout, Sprachcode per Session oder Admin wählbar
  • Theme-System – vollständig austauschbare Themes in themes/{name}/
  • Sidebar-Widget-System – Widgets links/rechts frei konfigurierbar, per Drag & Drop sortierbar im Admin
  • Responsive Dark-Theme – modernes CSS mit Variablen, kein Bootstrap-Overhead

Sicherheit

  • CSRF-Schutz auf allen POST-Formularen
  • Rate Limiting – konfigurierbares Limit pro Aktion (Kontakt, Forum, Login, Upload, ...)
  • Passwort-Hashing mit password_hash() / PASSWORD_BCRYPT
  • XSS-Schutz – konsequentes htmlspecialchars() (e()) im Template
  • SQL-Injection-Schutz – ausschließlich PDO Prepared Statements
  • Captcha für Gäste (Kontaktformular, Gästebuch, Registrierung)
  • Remember-Me mit sicheren Zufallstoken (DB-gespeichert, mit Ablaufzeit)
  • E-Mail-Verifikation bei Registrierung (Token, 24h Gültigkeit)
  • IP-basiertes Rate Limiting in DB mit konfigurierbaren Fenstern

Benutzer & Profile

  • Registrierung mit E-Mail-Bestätigung
  • Anmeldung + Remember-Me (30 Tage)
  • Passwort zurücksetzen per E-Mail-Link
  • Profilseite mit Avatar, Bio, Website, Signatur
  • Nutzergalerie (öffentlich/privat)
  • Geburtsdatum (optional öffentlich)
  • Gruppen: Administrator, Moderator, Mitglied, Gast
  • Konto selbst löschen (mit Bestätigungs-E-Mail)

E-Mail / SMTP

  • Dual-Mode: PHP mail() oder SMTP via Socket (Port 587 mit STARTTLS, Port 465 mit SSL)
  • AUTH LOGIN-Unterstützung
  • HTML-Multipart-Mails (Text + HTML)
  • Verwendet für: Registrierung, Passwort-Reset, Kontaktformular, Konto-Löschung

Module

Modul Beschreibung
Home Startseite mit BB-Code-Editor, konfigurierbarem Willkommenstext
News Artikel mit Kategorien, Kommentaren, Paginierung
Forum Boards, Threads, Antworten, Suche, Signatur, Rang-System
Gästebuch Einträge mit Moderations-Option (Freischaltung), Kommentare
FAQ Fragen & Antworten mit Kategorien
Downloads Datei-Uploads mit Kategorien, Beschreibungen, Download-Counter
Galerie Bild-Upload (Site-Galerie + User-Galerie), Lightbox-Ansicht
Umfragen (Polls) Abstimmungen mit Ergebnisanzeige
Weblinks Link-Sammlung mit Kategorien und Klick-Tracking
Kalender Event-Kalender, Nutzer können Einträge erstellen (konfigurierbar)
Shoutbox Live-Chatbox im Widget, Archiv-Seite
PM Center Private Nachrichten: Posteingang, Gesendet, Lesen, Antworten, Löschen
Kontakt Kontaktformular mit SMTP-Weiterleitung an konfigurierte E-Mail-Adresse
Seiten (Pages) Statische Seiten mit BB-Code-Editor
Suche Globale Seitensuche über mehrere Module
Discord Discord-Server-Statusseite via Widget API (Online-Mitglieder, Voice-Kanäle)
TeamSpeak 3 TS3-Server-Statusseite via ServerQuery (Kanäle, Nutzer, Uptime)
Navigation Menü-Verwaltung (Header, Footer, Widget) – mit Drag & Drop im Admin
Admin Vollständiger Verwaltungsbereich (siehe unten)

Sidebar-Widgets

Jedes Widget ist eine eigenständige PHP-Template-Datei. Widgets können im Admin per Drag & Drop auf linke oder rechte Sidebar verteilt und sortiert werden.

Widget Beschreibung
Community-Box Eingeloggte Nutzer, Online-Zähler, PM-Link mit Unread-Badge, Login-Formular für Gäste
Shoutbox Letzte X Shouts mit Eingabefeld
News (Aktuell) Neueste News-Artikel
News (Beliebt) Meistgelesene News
Forum (Aktuell) Neueste Beiträge
Forum (Beliebt) Beiträge mit meisten Antworten
Downloads (Aktuell) Neueste Downloads
Downloads (Beliebt) Meistgeladene Downloads
Weblinks (Aktuell) Zuletzt eingetragene Links
Weblinks (Beliebt) Meistgeklickte Links
Kalender Nächste Termine
Umfragen Aktuelle Abstimmung
Statistiken Besucher heute, gesamt, Online-Nutzer
Navigation Konfigurierbares Navigations-Widget
PM Ungelesene Nachrichten-Zähler mit Link
Discord Server-Status, Online-Zähler, Beitritt-Button
TeamSpeak 3 Kanal-/Nutzer-Baum, Online-Zähler, Verbinden-Button

Kern-Architektur

core/
├── Auth.php        Login, Logout, Registrierung, Token-Verwaltung
├── Cache.php       Dateibasierter Fragment-Cache mit TTL und Tag-Gruppen
├── Captcha.php     Einfaches Bild-Captcha
├── Config.php      DB-basierte Key/Value-Konfiguration
├── Database.php    PDO-Wrapper (fetch, fetchAll, execute, table-Prefix)
├── helpers.php     url(), redirect(), e(), t(), post(), get(), truncate(), avatarUrl(), ...
├── Lang.php        Sprachdateien laden, t() Übersetzungsfunktion mit Platzhaltern
├── Mailer.php      PHP mail() + SMTP-Socket mit STARTTLS/SSL
├── Paginator.php   Paginierung mit Offset/Limit und HTML-Ausgabe
├── Router.php      URL → Modul/Handler-Routing, Services als lokale Variablen
├── Security.php    CSRF, Rate Limiting (DB-basiert), requirePost()
├── Session.php     Session-Wrapper mit Flash-Messages
├── Template.php    View-Rendering mit Header/Footer-Layout + Widget-Integration
├── Tracker.php     Besucher-Tracking, Online-User, Bot-Erkennung
├── Uploader.php    Bild- und Datei-Uploads mit MIME-Validierung, optionaler GD-Rekodierung
└── Widgets.php     Widget-Registry, Sidebar-Rendering

Routing-Prinzip

/news           → modules/news/handlers/index.php
/news/view/42   → modules/news/handlers/view.php  ($params = [42])
/pm/compose     → modules/pm/handlers/compose.php
/admin/config   → modules/admin/handlers/config.php

Alle Core-Services stehen in jedem Handler automatisch als lokale Variablen zur Verfügung: $db, $auth, $session, $security, $config, $template, $mailer, $captcha, $cache, $lang, $widgets


Systemvoraussetzungen

Anforderung Minimum
PHP 8.1 oder höher
MySQL / MariaDB 5.7+ / 10.3+
PHP-Extensions pdo_mysql, mbstring, gd, openssl (für SMTP)
Webserver Apache (mit mod_rewrite) oder Nginx
Schreibrechte content/, cache/ (und Unterordner)

Installation

Schritt 1 – Dateien hochladen

Alle Dateien in das gewünschte Webserver-Verzeichnis kopieren (z. B. /var/www/html/wucms oder htdocs/wucms).

Schritt 2 – Datenbank anlegen

In phpMyAdmin oder per CLI eine leere MySQL-Datenbank erstellen:

CREATE DATABASE wucms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Schritt 3 – Installer aufrufen

Den Browser auf den Installer-Pfad öffnen:

http://localhost/wucms/install/

Der Installer führt folgende Schritte durch:

  1. Setup-Passwort – Einmalpasswort für den Installer setzen
  2. Systemprüfung – PHP-Version, Extensions, Schreibrechte
  3. Datenbankverbindung – Host, Name, Nutzer, Passwort, Tabellenpräfix
  4. Administrator-Konto – Benutzername, E-Mail, Passwort
  5. Installation – Tabellen anlegen, Konfiguration schreiben

Nach erfolgreicher Installation wird install/install.lock angelegt. Der Installer ist danach gesperrt.

💡 Sicherheit: Den install/-Ordner nach der Installation löschen oder per .htaccess sperren.

Schritt 4 – URL Rewriting aktivieren

Apache.htaccess im Stammverzeichnis:

Options -Indexes
RewriteEngine On
RewriteBase /wucms/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Nginx:

location /wucms/ {
    try_files $uri $uri/ /wucms/index.php?$query_string;
}

Schritt 5 – Schreibrechte setzen

chmod -R 755 content/
chmod -R 755 cache/

Bestehende Installation aktualisieren (Migrate)

Wenn neue Datenbank-Tabellen oder Spalten hinzugekommen sind:

http://localhost/wucms/install/migrate.php

Konfiguration

config.php

Die Datei config.php wird beim ersten Installlationsschritt automatisch erstellt. Sie enthält nur die Datenbankverbindung und Basispfade:

define('WU_DB_HOST',   'localhost');
define('WU_DB_NAME',   'wucms');
define('WU_DB_USER',   'root');
define('WU_DB_PASS',   '');
define('WU_DB_PREFIX', 'wu_');

define('WU_SITE_URL',  'http://localhost/wucms');   // kein trailing slash
define('WU_SITE_NAME', 'Meine Website');

define('WU_THEME',    'default');
define('WU_TIMEZONE', 'Europe/Berlin');
define('WU_DEBUG',    false);   // auf false setzen in Produktion!

Admin-Einstellungen (Datenbank-basiert)

Alle weiteren Einstellungen werden im Admin → Einstellungen verwaltet und in der Datenbanktabelle wu_config gespeichert:

Kategorie Schlüssel
Website site_title, site_tagline, site_description, site_copyright, site_banner
E-Mail / SMTP smtp_host, smtp_port, smtp_user, smtp_pass, smtp_from, smtp_from_name
Kontakt contact_email
Registrierung registration_enabled, email_verification_enabled
Wartungsmodus maintenance_mode, maintenance_message
Discord discord_server_id, discord_invite, discord_server_name, discord_description
TeamSpeak 3 ts3_host, ts3_port, ts3_query_port, ts3_query_user, ts3_query_pass
PM Center pm_enabled, pm_max_messages
Rate Limits rl_contact_max, rl_forum_thread_max, rl_upload_max, ...

SMTP einrichten

Im Admin unter Einstellungen → E-Mail / SMTP:

Feld Beispiel
SMTP-Host smtp.gmail.com
SMTP-Port 587 (STARTTLS) oder 465 (SSL)
SMTP-Benutzer deine@gmail.com
SMTP-Passwort App-Passwort
Absender-E-Mail noreply@example.com
Absender-Name Meine Website

TeamSpeak 3 einrichten

  1. Im TS3-Server die ServerQuery-Anmeldedaten in den TS3-Logs nachschlagen (beim ersten Start ausgegeben)
  2. Im Admin unter Einstellungen → TeamSpeak 3 eintragen:
    • TS3-Host-IP / Domain
    • Voice-Port (Standard: 9987)
    • Query-Port (Standard: 10011)
    • ServerQuery-Login + Passwort

Verzeichnisstruktur

wucms/
├── cache/                  Fragment-Cache (auto-erstellt)
├── content/
│   ├── avatars/            Benutzer-Avatare + Standard-Avatare
│   ├── downloads/          Hochgeladene Download-Dateien
│   └── gallery/            Galerie-Bilder (site/ + users/)
├── core/                   Kern-Klassen (Auth, DB, Router, ...)
├── install/                Installer + Schema-SQL-Dateien
├── lang/
│   ├── de/                 Deutsche Sprachdateien
│   └── en/                 Englische Sprachdateien
├── modules/
│   ├── admin/              Admin-Bereich (Handler + Templates)
│   ├── forum/
│   ├── news/
│   ├── pm/
│   ├── ts3/
│   └── ...                 (je ein Unterordner pro Modul)
├── themes/
│   └── default/
│       ├── assets/
│       │   └── css/main.css
│       ├── modules/        Modul-Templates
│       ├── widgets/        Widget-Templates
│       ├── header.tpl.php
│       └── footer.tpl.php
├── config.php              Lokale Konfiguration (nicht in Git!)
├── config.sample.php       Vorlage für config.php
└── index.php               Einstiegspunkt (Front Controller)

Admin-Bereich

Erreichbar unter /admin (nur für Administratoren).

Bereich Funktion
Dashboard Schnellübersicht: Nutzer, Beiträge, Online-User, neue Nachrichten
Einstellungen Alle Konfigurations-Schlüssel (Website, SMTP, Module, Rate Limits)
Benutzer Liste aller Nutzer, Bearbeiten, Sperren, Gruppe ändern
Navigation Header/Footer/Widget-Menüs verwalten, Drag & Drop
Widgets Sidebar-Widgets konfigurieren, Reihenfolge festlegen
News Artikel und Kategorien verwalten
Forum Boards erstellen, Boards bearbeiten, Ränge verwalten
Galerie Galerie moderieren
Downloads Kategorien und Dateien verwalten
Gästebuch Einträge moderieren, freischalten
Umfragen Umfragen erstellen und verwalten
Kalender Kalender-Einträge verwalten
FAQ Fragen und Kategorien verwalten
Shoutbox Shouts moderieren
Weblinks Links und Kategorien verwalten
Kontakt Eingegangene Kontaktanfragen einsehen
Seiten Statische Seiten erstellen / bearbeiten
Rechtliches Impressum, Datenschutz, AGB

WuCMS – entwickelt von Marc (Der-WU)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors