====== WvdS.DokuWiki.Cond Plugin ====== **Plugin:** wvdscond\\ **Version:** 1.0.0\\ **Namespace:** ''lib/plugins/wvdscond/''\\ **Autor:** Wolfgang van der Stille \\ **Lizenz:** GPL 2 ---- **Migration von wvdsif:** Dieses Plugin ersetzt das alte ''wvdsif'' Plugin und erweitert es um Redirect-Funktionalitaet. Die bestehende Syntax '''', '''' und '''' bleibt vollstaendig kompatibel. ---- ===== Definition ===== Das **wvdscond** Plugin vereint bedingte Inhaltsanzeige und Server-seitige Redirects in einem Plugin. Es bietet: * **Bedingte Tags** - '''', '''', '''' * **Redirects** - ''{{wvds:redirect target="..."}}'' mit Variablen-Unterstuetzung * **Negation** - '''' oder '''' ===== Anwendungsfaelle ===== * **Berechtigungsbasierte Inhalte** - Verschiedene Inhalte fuer Gaeste, Benutzer, Admins * **Mehrsprachige Startseiten** - Sprachspezifische Begruessungen und Inhalte * **Automatische Sprachweiterleitung** - Redirect basierend auf Browser-Sprache * **Login-Redirects** - Weiterleitung nach Anmeldung * **Bedingte Weiterleitungen** - Redirects nur fuer bestimmte Gruppen ---- ===== Syntax ===== ==== ifgroup - Nach Benutzergruppe ==== Inhalt fuer diese Gruppe Inhalt fuer mehrere Gruppen Inhalt fuer NICHT-Gaeste ==== ifnotgroup - Negation ==== Inhalt fuer angemeldete Benutzer Inhalt fuer Nicht-Admins ==== iflang - Nach Browser-Sprache ==== Inhalt fuer diese Sprache Inhalt fuer mehrere Sprachen Fallback-Inhalt (immer angezeigt) ==== wvds:redirect - Server-seitige Weiterleitung ==== {{wvds:redirect target="de:start"}} {{wvds:redirect target="{lang}:start"}} {{wvds:redirect target="int:home" ifgroup="user"}} {{wvds:redirect target="{lang}:pub:start" ifnotgroup="user"}} ---- ===== Redirect-Variablen ===== ^ Variable ^ Ersetzt durch ^ Beispiel ^ | ''{lang}'' | Browser-Sprache | de, en, sl | | ''{group}'' | Erste Benutzergruppe | user, admin, vip | | ''{user}'' | Benutzername | wvds | | ''{ns}'' | Aktueller Namespace | de:docs | ---- ===== Redirect-Parameter ===== ^ Parameter ^ Typ ^ Beschreibung ^ | ''target'' | Pflicht | Ziel-Seite (Page-ID oder mit Variablen) | | ''ifgroup'' | Optional | Redirect nur fuer diese Gruppe(n) | | ''ifnotgroup'' | Optional | Redirect nur wenn NICHT in Gruppe(n) | ---- ===== Gruppen-Parameter ===== ^ Parameter ^ Typ ^ Beschreibung ^ | ''guest'' | vordefiniert | Nicht angemeldete Besucher | | ''user'' | vordefiniert | Alle angemeldeten Benutzer | | ''admin'' | vordefiniert | Administratoren | | ''[gruppenname]'' | benutzerdefiniert | Jede in DokuWiki definierte Gruppe | ---- ===== Beispiele ===== ==== Beispiel 1: Sprachbasierter Redirect ==== **Anforderung:** Startseite leitet automatisch zur Browser-Sprache weiter. {{wvds:redirect target="{lang}:start"}} **Ergebnis:** * Browser auf Deutsch: Redirect zu ''de:start'' * Browser auf Englisch: Redirect zu ''en:start'' * Browser auf Slowenisch: Redirect zu ''sl:start'' ==== Beispiel 2: Login-Redirect ==== **Anforderung:** Gaeste werden zu einer oeffentlichen Seite geleitet, angemeldete Benutzer bleiben. {{wvds:redirect target="pub:start" ifnotgroup="user"}} **Ergebnis:** * Gast: Redirect zu ''pub:start'' * Angemeldet: Kein Redirect ==== Beispiel 3: VIP-Bereich ==== **Anforderung:** Nicht-VIPs werden zur Info-Seite weitergeleitet. {{wvds:redirect target="info:upgrade" ifnotgroup="vip,premium"}} ===== VIP Bereich ===== Willkommen im exklusiven Bereich! ==== Beispiel 4: Mehrsprachige Startseite ==== **Anforderung:** Begruessungen in verschiedenen Sprachen. ~~NOCACHE~~ ===== Willkommen ===== Dies ist unsere Wissensdatenbank auf Deutsch. ===== Welcome ===== This is our knowledge base in English. ===== Welcome ===== Please select your language. ==== Beispiel 5: Admin-Navigation ==== **Anforderung:** Admin-Links nur fuer Admins sichtbar. ~~NOCACHE~~ ===== Navigation ===== * [[.:start|Startseite]] * [[.:docs:index|Dokumentation]] * [[.:intern:index|Interner Bereich]] * [[.:admin:index|Administration]] ---- ===== Funktionsweise ===== ==== Redirect-Verarbeitung ==== 1. Pattern-Erkennung └── Findet {{wvds:redirect ...}} 2. Bedingungspruefung (falls vorhanden) ├── ifgroup: Prueft Gruppenzugehoerigkeit └── ifnotgroup: Prueft NICHT-Zugehoerigkeit 3. Variablen-Ersetzung ├── {lang} → Browser-Sprache ├── {user} → Benutzername ├── {group} → Erste Gruppe └── {ns} → Aktueller Namespace 4. Redirect-Ausfuehrung ├── HTTP 301/302 Header (bevorzugt) ├── Meta-Refresh (Fallback) └── JavaScript (Fallback) ==== Sicherheitshinweise ==== * Redirects verwenden **wl()** fuer interne URLs (Open Redirect Prevention) * Keine externen URLs erlaubt (CWE-601 Schutz) * Alle Ausgaben werden mit **hsc()** escaped (XSS-Schutz) ---- ===== Konfiguration ===== Das Plugin benoetigt keine spezielle Konfiguration. Die Gruppenerkennung nutzt die Standard-DokuWiki-ACL-Gruppen. ==== Wichtiger Hinweis ==== Seiten mit bedingten Tags sollten ''~~NOCACHE~~'' verwenden, damit der Inhalt bei jedem Aufruf neu gerendert wird. ---- ===== Migration von wvdsif ===== ^ Alt (wvdsif) ^ Neu (wvdscond) ^ Status ^ | '''' | '''' | Kompatibel | | '''' | '''' | Kompatibel | | - | '''' | NEU | | - | ''{{wvds:redirect}}'' | NEU | ---- ===== Versionshinweise ===== ^ Version ^ Datum ^ Aenderungen ^ | 1.0.0 | 2026-01-29 | Erstveroeffentlichung | ---- ===== Siehe auch ===== * [[.:wvdsi18n]] - Uebersetzungs-Plugin (Nachfolger von wvdslang) * [[.:wvdssnippet]] - Wiederverwendbare HTML-Bausteine * [[.:flat]] - Template mit Sprachwechsler ---- ===== Technische Referenz ===== ==== Klasse: syntax_plugin_wvdscond ==== **Datei:** ''lib/plugins/wvdscond/syntax.php'' ^ Methode ^ Beschreibung ^ | ''getType()'' | Gibt ''substitution'' zurück | | ''getSort()'' | Gibt ''100'' zurueck | | ''connectTo($mode)'' | Registriert ifgroup, ifnotgroup, iflang, redirect Pattern | | ''handle($match, ...)'' | Parst Tag und extrahiert Bedingung | | ''render($mode, ...)'' | Gibt Inhalt, Redirect oder leer zurueck | ==== Klasse: helper_plugin_wvdscond ==== **Datei:** ''lib/plugins/wvdscond/helper.php'' ^ Methode ^ Beschreibung ^ | ''getUserGroups()'' | Gibt alle Gruppen des Benutzers zurueck | | ''checkGroup($groups)'' | Prueft ob Benutzer in Gruppe ist | | ''checkNotGroup($groups)'' | Prueft ob Benutzer NICHT in Gruppe ist | | ''detectBrowserLang()'' | Erkennt Browser-Sprache | | ''checkLang($langs)'' | Prueft Sprachuebereinstimmung | | ''replaceVariables($target)'' | Ersetzt {lang}, {user}, etc. | ---- [x][x][x][x] [x][x][x][x][x] [x][x][x][x][x] ~~DISCUSSION~~