Modul:Versionsschutz/Ablauf
Beschreibung[Quelltext bearbeiten]
Dieses Modul erzeugt automatisch eine Anzeige des aktiven Seitenschutzes – bestehend aus:
- einem Padlock-Icon (oben rechts auf der Seite),
- einer Hinweisbox im Seiteninhalt,
- sowie einer zugehörigen Kategorie.
Es funktioniert vollständig ohne manuelle Parameter und ermittelt Schutzstufe, Ablaufdatum und Benutzergruppe aus der aktuellen Seite. Optional kann ein Grund übergeben werden.
Aufbau[Quelltext bearbeiten]
Das Modul besteht aus einem Hauptmodul und mehreren Submodulen, es nutzt zudem weitere allgemeine Hilfsmodule:
Submodule[Quelltext bearbeiten]
| Modul | Funktion |
|---|---|
| Modul:Versionsschutz | Hauptmodul, erzeugt Padlock, Box und Kategorie |
| Modul:Versionsschutz/Konfig | Konfigurationsdaten (Icons, Texte, Farben, Kategorien) |
| Modul:Versionsschutz/Level | Ermittelt aktivste Schutzstufe (nach Priorität) |
| Modul:Versionsschutz/Ablauf | Ermittelt das Ablaufdatum eines Schutzes (falls gesetzt) |
Hilfsmodule[Quelltext bearbeiten]
| Modul | Funktion |
|---|---|
| Modul:Dateilink | Gibt formatierte Dateilinks mit Titel, Größe etc. zurück |
| Modul:DateFormat | Gibt ISO-Zeitstempel im lesbaren Format aus |
Verwendung[Quelltext bearbeiten]
Einbindung per Vorlage[Quelltext bearbeiten]
Empfohlen über die Wrapper-Vorlage {{Versionsschutz}}, z. B.:
{{Versionsschutz|Vandalismus}}
Siehe auch
Direktaufruf per #invoke (nicht empfohlen)[Quelltext bearbeiten]
{{#invoke:Versionsschutz|main}}
Parameter[Quelltext bearbeiten]
Nur ein Parameter ist vorgesehen (optional):
Grund=- Gibt einen individuellen Hinweistext zum Schutzgrund an (wird als Text unterhalb der Hinweisbox angezeigt).
Funktionsweise[Quelltext bearbeiten]
- Das Modul ruft alle bekannten Schutzarten (z. B.
edit,move,upload) überPROTECTIONLEVELab. - Die aktivste Schutzstufe wird aus einer vordefinierten Prioritätenliste ermittelt.
- Ist ein Schutz aktiv, wird abhängig von der Konfiguration:
- das passende Icon gewählt (inkl. Unterscheidung bei temporären Schutzarten),
- das Ablaufdatum formatiert,
- ein Tooltip generiert,
- eine Hinweisbox mit erklärendem Text eingeblendet,
- eine Kategorie zugewiesen.
Temporäre Schutzarten[Quelltext bearbeiten]
Das Modul erkennt temporäre Schutzarten anhand des Ablaufdatums (`expiry ≠ infinity`)
In diesem Fall werden spezielle Icons mit Uhrsymbol genutzt (z. B. Protection-temp-sysop.svg).
Icons[Quelltext bearbeiten]
Das Modul unterstützt differenzierte Icons für:
- Aktionen:
edit,move,create,upload - Schutzstufen:
sysop,autoconfirmed,confirmed,templateprotection,policyprotection - temporäre Varianten: eigene Icons mit
-temp-im Dateinamen
Kategorisierung[Quelltext bearbeiten]
Wird automatisch gesetzt auf Basis der Konfiguration. Beispiele:
[[Kategorie:Bearbeitungsgeschützte Inhalte]][[Kategorie:Vorlagengeschützte Inhalte]]
Einschränkungen[Quelltext bearbeiten]
- Es wird immer nur eine Schutzstufe pro Seite angezeigt – die mit der höchsten Priorität.
- Kaskadierende Schutzstufen (cascade) werden derzeit nicht ausgewertet.
- Der Schutzgrund kann nicht automatisch ausgelesen werden – nur manuell übergeben.
To-Do / Ausblick[Quelltext bearbeiten]
- Automatische Integration per Hook (statt manuelle Einbindung)
- Kaskadenerkennung für eingebundene Seiten
- Mehrsprachigkeit über zentrale JSON-Datei
- Konfigurierbare Textbausteine
Siehe auch
local p = {}
-- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title)
return stabilitySettings and stabilitySettings.expiry or 'unknown'
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )
end
local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)
if rawExpiry == 'infinity' then
return 'infinity'
elseif rawExpiry == '' then
return 'unknown'
else
local year, month, day, hour, minute, second = rawExpiry:match(
'^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$'
)
if year then
return string.format(
'%s-%s-%sT%s:%s:%s',
year, month, day, hour, minute, second
)
else
error('internal error in Module:Effective protection expiry; malformed expiry timestamp')
end
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p