Zum Inhalt springen

Modul:Versionsschutz/Level

Aus Wikonia


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]

  1. Das Modul ruft alle bekannten Schutzarten (z. B. edit, move, upload) über PROTECTIONLEVEL ab.
  2. Die aktivste Schutzstufe wird aus einer vordefinierten Prioritätenliste ermittelt.
  3. Ist ein Schutz aktiv, wird abhängig von der Konfiguration:
    1. das passende Icon gewählt (inkl. Unterscheidung bei temporären Schutzarten),
    2. das Ablaufdatum formatiert,
    3. ein Tooltip generiert,
    4. eine Hinweisbox mit erklärendem Text eingeblendet,
    5. 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 = {}

-- Gibt das Schutzlevel für eine bestimmte Aktion (edit, move, upload) auf einer Seite zurück
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

	local level = title.protectionLevels[action] and title.protectionLevels[action][1]

	-- Sonderfälle: JS/CSS-Seiten → interfaceadmin
	if title.namespace == 8 then
		if title.text:sub(-3) == '.js'
		or title.text:sub(-4) == '.css'
		or title.contentModel == 'javascript'
		or title.contentModel == 'css' then
			return 'interfaceadmin'
		end
	elseif title.namespace == 2 and title.isSubpage then
		if title.contentModel == 'javascript' or title.contentModel == 'css' then
			return 'interfaceadmin'
		elseif title.contentModel == 'json' then
			return 'sysop'
		end
	end

	-- Fallback nach Level
	if level == 'templateprotection' then
		return 'templatemaster'
	elseif level == 'policyprotection' then
		return 'policyeditor'
	elseif level == 'sysop' then
		return 'sysop'
	elseif level == 'autoconfirmed' or level == 'confirmed' then
		return 'autoconfirmed'
	elseif level then
		return level
	else
		return '*' -- keine Einschränkung
	end
end

-- Wrapper für #invoke-Aufrufe
setmetatable(p, {
	__index = function(t, k)
		return function(frame)
			return t._main(k, frame.args[1])
		end
	end
})

return p