No description
  • PHP 78%
  • Smarty 18.7%
  • Makefile 1.7%
  • Shell 1.6%
Find a file
DiamantTh 509edaeb7f
Some checks failed
build / build (push) Has been cancelled
Version-Reset auf 0.0.0 (Vor-Release)
Solange kein realer WSC-6.1-Smoketest gelaufen ist, wird keine x.y.z-Nummer
ausgegeben. Konsequenzen:

- package.xml: <version>1.0.2</version> -> <version>0.0.0</version>,
  Begruendungs-Kommentar darueber. Die beiden bisherigen
  <instructions type="update" fromversion="1.0.0/1.0.1"> Bloecke
  entfernt -- es gibt keinen Released-Baseline, von dem aus
  aktualisiert werden muesste. Ein Doku-Kommentar erklaert die
  Abwesenheit.
- update/update_1.0.0_to_1.0.1.php geloescht (das Migrations-Skript
  hat nie produktiv gelaufen, die Zieltabelle entfaellt eh).
- install.sql: sva1_board_permission (CREATE / DROP / ALTER FOREIGN KEY)
  vollstaendig entfernt. Die Tabelle wurde nirgends mehr gelesen oder
  geschrieben; Boardrechte liegen ausschliesslich im nativen WCF-ACL.
  Doku-Block oben entsprechend gekuerzt.
- README.md: Eckdaten-Tabelle bekommt Zeile "Version 0.0.0", neuer
  Abschnitt "Versionierung" mit Begruendung. Alle "seit 1.0.1"-
  Formulierungen, die Legacy-Tabellen-Zeile und der Verweis auf das
  geloeschte Migrations-Skript entfernt.
- objectType.xml: pre-existing Bug behoben -- fehlendes </data> am
  Dateiende ergaenzt (xmllint --noout liefert jetzt OK).
2026-05-01 04:43:50 +02:00
.github/workflows PR#1: rename sentivaria1_ → sva1_, add update/ DROP linter, docs 2026-04-30 10:58:32 +00:00
acptemplates P4: Migration Board-ACL auf natives WCF-ACL (1.0.0 -> 1.0.1) 2026-05-01 01:21:37 +02:00
Copilot Rename WSC-Kernpaket-Sentivaria-2026-04-30-neu.txt to Copilot/WSC-Kernpaket-Sentivaria-2026-04-30-neu.txt 2026-04-30 06:29:27 +02:00
docs PR#1: rename sentivaria1_ → sva1_, add update/ DROP linter, docs 2026-04-30 10:58:32 +00:00
files/lib Carry-overs: E-Mail-Template, ContentProvider-Doc, .gitignore 2026-05-01 02:06:32 +02:00
language Carry-overs: E-Mail-Template, ContentProvider-Doc, .gitignore 2026-05-01 02:06:32 +02:00
scripts Implement build, permission handler, mod-logger hardening, update convention, and docs 2026-04-30 05:34:45 +00:00
templates Carry-overs: E-Mail-Template, ContentProvider-Doc, .gitignore 2026-05-01 02:06:32 +02:00
update Version-Reset auf 0.0.0 (Vor-Release) 2026-05-01 04:43:50 +02:00
.gitignore Carry-overs: E-Mail-Template, ContentProvider-Doc, .gitignore 2026-05-01 02:06:32 +02:00
aclOption.xml P4: Migration Board-ACL auf natives WCF-ACL (1.0.0 -> 1.0.1) 2026-05-01 01:21:37 +02:00
acpMenu.xml P3: ACP-Suche, Cronjob, Clipboard-Bulk-Aktionen, Trash-UI 2026-05-01 01:08:57 +02:00
box.xml P5: Sidebar-Box + Head-Listener (1.0.1 -> 1.0.2) 2026-05-01 01:40:47 +02:00
clipboardAction.xml P3: ACP-Suche, Cronjob, Clipboard-Bulk-Aktionen, Trash-UI 2026-05-01 01:08:57 +02:00
cronjob.xml P3: ACP-Suche, Cronjob, Clipboard-Bulk-Aktionen, Trash-UI 2026-05-01 01:08:57 +02:00
install.sql Version-Reset auf 0.0.0 (Vor-Release) 2026-05-01 04:43:50 +02:00
LICENSE Initial commit 2026-04-29 15:29:47 +02:00
Makefile PR#1: rename sentivaria1_ → sva1_, add update/ DROP linter, docs 2026-04-30 10:58:32 +00:00
menu.xml P1: Optionen, Hauptmenü-Eintrag, Bootstrap, Längen-/Pagination-Limits 2026-05-01 01:02:05 +02:00
menuItem.xml P1: Optionen, Hauptmenü-Eintrag, Bootstrap, Längen-/Pagination-Limits 2026-05-01 01:02:05 +02:00
objectType.xml Version-Reset auf 0.0.0 (Vor-Release) 2026-05-01 04:43:50 +02:00
option.xml P1: Optionen, Hauptmenü-Eintrag, Bootstrap, Längen-/Pagination-Limits 2026-05-01 01:02:05 +02:00
package.xml Version-Reset auf 0.0.0 (Vor-Release) 2026-05-01 04:43:50 +02:00
page.xml P2: WCF-native Integration (Suche, Notifications, Activity, GDPR, Sitemap, Feed) 2026-05-01 01:02:19 +02:00
README.md Version-Reset auf 0.0.0 (Vor-Release) 2026-05-01 04:43:50 +02:00
templateListener.xml P5: Sidebar-Box + Head-Listener (1.0.1 -> 1.0.2) 2026-05-01 01:40:47 +02:00
userGroupOption.xml Sentivaria V1: WSC-Paketscaffold mit Foren, Themen, Beiträgen, Moderation und ACP 2026-04-30 04:43:24 +00:00

Sentivaria

Sentivaria ist ein eigenständiges, installierbares WSC-App-/Modulpaket für WoltLab Suite Core (WSC) und stellt eine kompakte Forum-Anwendung bereit. Es ist kein Plugin für das offizielle WoltLab Suite Forum und keine Standalone-Forensoftware WSC bleibt die technische Grundlage, Sentivaria liefert ausschließlich die forenspezifische Logik (Foren/Kategorien, Themen, Beiträge, einfache Moderation, forenspezifische Rechte und die zugehörige ACP-Verwaltung).

Konzeptbasis: Copilot/WSC-Kernpaket-Sentivaria-2026-04-30-neu.txt

Eckdaten

Feld Wert
Paketkennung systems.diath.sentivaria
App-Identifier sentivaria
PHP-Namespace sentivaria\
Datenbankpräfix sva1_
Mindest-WSC-Version 6.1.0
Version 0.0.0 (Vor-Release, siehe unten)

Versionierung

Solange noch nichts produktiv getestet ist, bleibt die Paketversion auf 0.0.0. Es wird keine x.y.z-Nummer vergeben, bevor eine echte WSC-6.1-Installation den Smoketest aus docs/SMOKETEST.md bestanden hat. Damit:

  • existiert kein Released-Baseline, von dem aus aktualisiert werden müsste → package.xml enthält bewusst keinen <instructions type="update">-Block.
  • ist install.sql der einzige Pfad, das Schema zu erzeugen, und das Skript darf jederzeit destruktiv bleiben (DROP TABLE IF EXISTS).
  • wird der erste echte Release voraussichtlich 0.1.0 sein (erst dann beginnt die Update-Konvention aus update/README.md zu greifen).

WSC liefert Benutzer, Gruppen, Rechtebasis, Sessions, Sprache, Templates, ACP, Paketmanager, Cache, CSRF-Schutz und das Datenbankobjekt-Grundmodell. Sentivaria liefert Foren, Themen, Beiträge, einfache Moderation, forenspezifische Rechte, eigene Templates, eigene Sprachvariablen und eigene Datenbanktabellen.

Paketinhalt (V1)

package.xml                Paketmanifest (App, Version, Requirements)
install.sql                Datenbankschema (sva1_*)
objectType.xml             Object-Type-Registrierung (board/thread/post)
userGroupOption.xml        Forenrechte und Moderationsrechte
acpMenu.xml                ACP-Menüstruktur
page.xml                   Frontend-Seiten (Forenübersicht, Board, Thema, …)
language/de.xml            Deutsche Sprachvariablen
language/en.xml            Englische Sprachvariablen
templates/                 Frontend-Templates
acptemplates/              ACP-Templates
files/lib/                 PHP-Klassen (WSC-nahe Struktur)
  data/board/              Board / BoardEditor / BoardAction / BoardList
  data/thread/             Thread / ThreadEditor / ThreadAction / ThreadList
  data/post/               Post / PostEditor / PostAction / PostList
  page/                    BoardListPage, BoardPage, ThreadPage
  form/                    ThreadAddForm, PostAddForm, PostEditForm
  acp/page/                BoardListPage, ModerationLogPage
  acp/form/                BoardAddForm, BoardEditForm
  system/                  SentivariaCore (Application)
  system/object/type/      BoardObjectType, ThreadObjectType, PostObjectType
  system/moderation/       ModerationLogger

Datenbanktabellen

Tabelle Zweck
sva1_board Foren und Kategorien
sva1_thread Themen
sva1_post Beiträge
sva1_thread_read Leseverlauf je Benutzer und Thema
sva1_moderation_log Moderations-Auditlog

Boardrechte liegen ausschließlich im nativen WCF-ACL (wcf1_acl_option*, ObjectType systems.diath.sentivaria.board); eine eigene Permission-Tabelle existiert nicht.

Die Felder folgen der Vorlage aus der technischen Beschreibung und sind als WSC-nahes Grundmodell gedacht. Feintuning (Indizes, Volltextsuche, Engine-spezifische Optionen) erfolgt nach Test gegen eine reale WSC-6.x-Installation.

Berechtigungen

Benutzerrechte (user.sentivaria.board.*)

  • canViewBoard, canReadThread, canStartThread, canReplyThread, canEditOwnPost, canDeleteOwnPost

Moderationsrechte (mod.sentivaria.*)

  • canCloseThread, canPinThread, canMoveThread, canDeleteThread, canDeletePost, canRestorePost, canViewModerationLog

Adminrecht

  • admin.sentivaria.canManageBoard

Standardmäßig sind nur canViewBoard und canReadThread für reguläre Benutzer aktiv. Alle anderen Rechte müssen pro Gruppe explizit erlaubt werden.

Sentivaria verwendet das native WCF-ACL-Framework (com.woltlab.wcf.acl, ObjectType systems.diath.sentivaria.board). In Board-Add/-Edit erscheint die Standard-Allow/Deny/Inherit-Matrix pro Gruppe und pro Benutzer ({include file='aclPermissions'}). BoardPermissionHandler löst in dieser Reihenfolge auf:

  1. ACL-Override (User schlägt Gruppe, Deny schlägt Allow)
  2. globale Gruppenrechte aus userGroupOption.xml

Installation

  1. Repository als TAR-Archiv bauen am einfachsten reproduzierbar via make package aus dem Repo-Root (benötigt php, xmllint, tar). Das fertige Archiv liegt anschließend unter dist/sentivaria-<version>.tar.
  2. Im ACP unter Installation und Update → Pakete installieren hochladen.
  3. Nach der Installation unter Sentivaria → Foren die ersten Foren/Kategorien anlegen und die Rechte der Gruppen pflegen.

Umfang von Version 1

Sentivaria V1 beschränkt sich bewusst auf den Forum-Kern. Enthalten sind:

  • Foren und Kategorien
  • Themen
  • Beiträge
  • einfache Moderation (Schließen, Anpinnen, Soft-Delete, Restore, Moderationslog)
  • forenspezifische Rechte (Benutzer- und Moderationsrechte)
  • ACP-Verwaltung für Foren, Kategorien und Moderationslog
  • WSC-nahe Datenobjekte, Templates, Sprachdateien und Paketstruktur

Andere WoltLab-Anwendungsbereiche (Filebase, Gallery, Blog, Wiki, Marktplatz usw.) sind nicht Bestandteil dieses Pakets und auch nicht Gegenstand der Forum-Funktion. Themen wie WebAuthn/FIDO2, eine vollständige API oder ein vollständiger Importer gehören ebenfalls nicht zum Forum-Kern und werden hier nicht behandelt.

Core Principles

  • WSC-nativ. Sentivaria ist eine WSC-Application, kein Standalone-Stack. Sessions, Benutzer, Gruppen, Rechtebasis, Cache, CSRF, Sprache, Templates, ACP und Paketmanager kommen aus WSC.
  • Forum bleibt Forum. Die App umfasst Boards/Threads/Posts/Moderation nichts darüber hinaus. Kein Filebase, Gallery, Blog, Wiki, Marktplatz.
  • Authentifizierung ist Infrastruktur, kein Forum-Feature. Es gibt kein Login-System in der Forum-App und keine Auth-Logik in Board/Thread/Post. FIDO2/WebAuthn ist Aufgabe des freien Begleitpakets systems.diath.sentivaria.security siehe docs/FIDO2-WEBAUTHN-POSITION.md.
  • Keine selbstgebauten Sanitizer / keine eigene Krypto. Beitragstexte werden über WSC-Bordmittel verarbeitet (HtmlInputProcessor), WebAuthn-Krypto kommt aus einer auditierten freien Bibliothek (web-auth/webauthn-lib, MIT).
  • Sichere Defaults. Standardrechte sind restriktiv; jede destruktive Moderationsaktion wird über ModerationLogger mit Whitelist-Action protokolliert.
  • Reproduzierbarer Build. make package aus dem Repo-Root erzeugt das WSC-installierbare TAR-Archiv aus den Quellen.

Stack

Aufgabe Genutzte WSC-Komponente Kein externes Framework
Routing / Pages / Forms wcf\page, wcf\form, Form-Builder kein eigener Router
Datenobjekte wcf\data\DatabaseObject + *Editor/*Action kein eigenes ORM
Datenbank wcf\system\WCF::getDB() keine zusätzliche Abstraktion (Doctrine, Eloquent, …)
Rechte wcf\system\WCF::getSession()->getPermission() + natives WCF-ACL (com.woltlab.wcf.acl) via BoardPermissionHandler kein eigenes ACL-Framework
Sessions / Login WSC-Session-System kein eigenes Auth-System in Sentivaria
MFA / WebAuthn (V2) WSC-MFA-Framework + systems.diath.sentivaria.security kein Forum-internes Auth, kein Paid-Plugin als Pflicht
Templates WSC-Template-Engine kein Twig/Blade
Sprachdateien WSC-Language-Items kein gettext
ACP WSC-ACP kein eigenes Backend
Paket / Installation WSC-Paketmanager (package.xml) kein Composer beim Endnutzer
Build make + xmllint + tar + php -l minimal, POSIX-sh kompatibel

Aktueller Stand

  • Paket-Skelett vollständig (App sentivaria, Namespace sentivaria\, DB-Präfix sva1_).
  • Datenmodell für Boards, Threads, Posts, Read-Tracking, Board-Permissions und Moderationslog vorhanden (install.sql).
  • Boardliste, Boardseite, Threadseite und die Add/Edit-Forms für Threads und Posts vorhanden.
  • ACP: Board-Verwaltung (Liste/Add/Edit) + Moderationslog.
  • Rechteauflösung gebündelt in sentivaria\system\permission\BoardPermissionHandler (Singleton, liest aus dem nativen WCF-ACL; Override-Auflösung User > Gruppe und Deny > Allow).
  • ModerationLogger mit Action-Whitelist, Object-Type-Whitelist und Reason-Sanitizing.
  • Reproduzierbarer Build (Makefile, scripts/build-package.sh, GitHub-Actions-Workflow).
  • Update-Konvention (update/, Hinweis in package.xml und install.sql).
  • Sidebar-Box „Letzte Themen“ (box.xml + sentivaria\system\box\RecentThreadListBoxController); Sichtbarkeit serverseitig durch BoardPermissionHandler::canReadThread() gefiltert.
  • <head>-Listener (templateListener.xml) blendet auf Board-Seiten einen <link rel="alternate" type="application/rss+xml"> auf den jeweiligen Board-Feed ein, wenn SENTIVARIA_ENABLE_FEEDS aktiv ist.
  • userMenu.xml bewusst noch nicht enthalten: Einträge im WSC-6.1-User- Menü erfordern einen IUserMenuItemProvider mit Notification-/Stream- Semantik. Das passt erst sinnvoll, wenn ein eigener Forum-Stream existiert; bis dahin reichen das mainMenu (siehe menu.xml) und das ACP-Menü.
  • Doku: SMOKETEST.md, SECURITY-REVIEW.md, FIDO2-WEBAUTHN-POSITION.md.

Nächste Schritte

Reihenfolge bewusst: erst Forum stabilisieren, dann Security-Paket separat entwickeln.

  1. Reale WSC-6.1-Installation durchführen (Smoketest gemäß docs/SMOKETEST.md) und Ergebnis dort eintragen.
  2. End-to-End-Smoketest (Boards anlegen, Thread/Post-Lifecycle, Moderationslog, Rechte über mehrere Gruppen).
  3. Editor-Integration (P5). <textarea>-Felder in postAdd.tpl, postEdit.tpl und threadAdd.tpl auf den WSC-Editor umstellen, HtmlInputProcessor mit Object-Type systems.diath.sentivaria.post in PostAction::create/update aktivieren. Solange das offen ist, keine HTML-Eingaben in produktiven Installationen freischalten.
  4. Security-Paket systems.diath.sentivaria.security in eigenem Repo aufsetzen (Skelett, WSC-MFA-Object-Type, web-auth/webauthn-lib per Build-Vendoring) siehe docs/FIDO2-WEBAUTHN-POSITION.md.
  5. Sentivaria-Forum V1-Release, danach in V1.x das Security-Paket als weiche Abhängigkeit (<optionalpackages>) deklarieren, in V2 als harte Abhängigkeit (<requiredpackages>), sobald das Security-Paket einen vollständigen MVP liefert.

Lizenz

Siehe LICENSE.