Modul:Wartung

Aus FürthWiki

Version vom 18. Februar 2026, 12:43 Uhr von HeikoBot (Diskussion | Beiträge) (+ "Faktenbox-Daten nicht unterstützt (Einzelwerte)")

local p = {}

local com = require("Modul:Common")
local dev = require("Modul:Development")
local htm = require("Modul:HTML")
local wob = require("Modul:Wörterbuch")

local wartungsmeldungen = {
	{gruppe = "'''Dateien'''<br>(Bilder, Videos, ...)",
	meldungen = {
		{["Wartungsmeldung"] = "Bild-Beschreibung fehlt"},
--		{["Wartungsmeldung"] = "Bilder-Galerie leer", ["Info"] = "Nur zu Info. Ist kein Problem."},
		{["Wartungsmeldung"] = "Bilder-Galerie übervoll", ["Info"] = "Siehe auch [[FürthWiki:Galerie-Bilder-Ausblendung]]"},
		{["Wartungsmeldung"] = "Datei ohne Formular-Daten"},
		{["Wartungsmeldung"] = "Datei-Lizenz-Angabe fehlt"},
		{["Wartungsmeldung"] = "Datei-Freiattribut-Fehler"},
		{["Wartungsmeldung"] = "Datei-Freiattribut-Fehler Orts-Angabe", ["Info"] = "Der Ort wurde als Freiattribut und nicht im Orts-Feld angegeben."},
		{["Wartungsmeldung"] = "Datei-Freiattribut-Fehler Straßen-Angabe", ["Info"] = "Die Straße wurde als Freiattribut und nicht im Straßen-Feld angegeben."},
		{["Wartungsmeldung"] = "Faktenbox darf nicht in Datei-Seite sein"}}},
	{gruppe = "'''Faktenbox'''<br>(Formular-Angaben)",
	meldungen = {
		{["Wartungsmeldung"] = "Faktenbox fehlt"},
		{["Wartungsmeldung"] = "Faktenbox ohne Formular-Daten"},
		{["Wartungsmeldung"] = "Faktenbox-Daten nicht unterstützt (Einzelwerte)"},
		{["Wartungsmeldung"] = "Faktenbox veraltet"},
		{["Wartungsmeldung"] = "Faktenbox-Bild existiert nicht", ["Info"] = "Es wurde im Formular ein Bild eingetragen, das nicht (mehr) existiert"},
		{["Wartungsmeldung"] = "Faktenbox-Bild fehlt"},
		{["Wartungsmeldung"] = "Faktenbox-Karte (Position) fehlt", ["Info"] = "Nichts eingetragen als Objekt-Lokation, Koordinate oder GeoJson-Karte"}}},
	{gruppe = "'''Geo'''<br>(Karten, Positionsangabe, ...)",
	meldungen = {
		{["Wartungsmeldung"] = "Geo-Fehler - fehlerhafte Koordinate", ["Info"] = "Schreibfehler"},
		{["Wartungsmeldung"] = "Geo-Kodierungsfehler - Objekt-Lokation bei ehemaligen Objekt funktioniert nicht", ["Info"] = "Es können nur heute bestehende Objekt-Lokation gefunden werden. Bei ehemaligen Objekten muss die Koordinate eingetragen werden."},
		{["Wartungsmeldung"] = "Geo-Kodierungsfehler - Objekt-Lokation nicht gefunden", ["Info"] = "Objekt fehlt in OpenStreetMap oder ist dort fehlerhaft eingetragen. Im Zweifelsfall sollte Koordinate eingetragen werden."},
		{["Wartungsmeldung"] = "Geo-Kodierungsfehler - Positionsangabe fehlt"},
		{["Wartungsmeldung"] = "Geo-Kodierungsfehler - fehlende Geo-Koordinate trotz Objekt-Lokation", ["Info"] = "FürthWiki-interne Meldung (Server-Problem)"},
		{["Wartungsmeldung"] = "Geo-Kodierungsfehler und Geo-Koordinate nicht in SMW-DB vorhanden", ["Info"] = "FürthWiki-interne Meldung (Server-Problem)"},
		{["Wartungsmeldung"] = "Geo-Kodierungsfehler, aber Geokoordinate in SMW-DB noch vorhanden", ["Info"] = "FürthWiki-interne Meldung (Server-Problem)"}}},
	{gruppe = "'''Kategorie-spezifisch'''<br>(Karten, Positionsangabe, ...)",
	meldungen = {
		{["Wartungsmeldung"] = "Abrissjahr/Schließungsdatum eingetragen, aber ohne Ehemals-Häkchen"},
		{["Wartungsmeldung"] = "Adresse fehlerhaft"},
		{["Wartungsmeldung"] = "Beruf-Seite fehlt"},
		{["Wartungsmeldung"] = "Gebäude mit verdächtiger Straße-Hausnummer-Kombination"},
		{["Wartungsmeldung"] = "Gewässer ohne Stadtteil"},
		{["Wartungsmeldung"] = "Straßen ohne Stadtteil"}}},
	{gruppe = "'''Qualität'''<br>(Händische Markierungen)",
	meldungen = {
		{["Wartungsmeldung"] = "Artikel markiert als Baustelle"},
		{["Wartungsmeldung"] = "Artikel markiert als veraltet"},
		{["Wartungsmeldung"] = "Artikel markiert als zu überarbeiten"},
		{["Wartungsmeldung"] = "Artikel markiert mit Belege unzureichend"},
		{["Wartungsmeldung"] = "Artikel markiert mit Daten unplausibel"},
		{["Wartungsmeldung"] = "Artikel markiert mit Neutralität umstritten"},
		{["Wartungsmeldung"] = "Artikel markiert mit Relevanz mangelhaft"}}},
	{gruppe = "'''Sonstig'''",
	meldungen = {
		{["Wartungsmeldung"] = "Lemma (Seitenname) enthält „(ehemals)“, aber ohne Ehemals-Häkchen"},
		{["Wartungsmeldung"] = "Seitenname (Lemma) hat Semikolon", ["Info"] = "Nicht erlaubt bei Seiten mit Karten"}}}}

function p.Wartungstabelle(frame)
	-- Kommandozeile zum Debuggen:
	-- =p.Wartungstabelle{pargs={}}
	local frame = dev.GetFrameAndParentArgs(frame)
	local t = ""
	-- Kategorie-Selektor
	local kategorie = frame.args["Kategorie"] or
		wob.mehrzahl(frame.args["Klasse"] or "")
	local kategorie_selector = ""
	local kategorie_query_string = ""
	if kategorie ~= "" then
		kategorie_selector = "[[Kategorie:" .. kategorie .. "]]"
		kategorie_query_string =
			"&Abfrage Wartungsmeldungen[Kategorie]=" .. kategorie
		kategorie = " [[:Kategorie:" .. kategorie .. "]]"
	end
	-- Tabelle zusammensetzen
	t = t .. htm.tableHeader{
		"Gruppe", "Wartungsmeldungen" .. kategorie, "Seitenanzahl"}
	-- Tabellen-Zeilen
	for _, g in ipairs(wartungsmeldungen) do
		local gruppe = g.gruppe
		local meldungen = g.meldungen
		for _, m in ipairs(g.meldungen) do
			local wartungsmeldung = m["Wartungsmeldung"]
			-- Anzahl ermitteln
			local anzahl = mw.smw.ask{
				"[[Wartungsmeldung::" .. wartungsmeldung .. "]]" ..
				kategorie_selector,	format="count"}
			if anzahl == 0 then
				anzahl = ""
			end
			-- queryformlink zusammenbauen
			local queryformlink = { "", -- dummy
				["form"] = "Abfrage Wartungsmeldungen",
				["link text"] = wartungsmeldung,
				["query string"] =
					"Abfrage Wartungsmeldungen[Wartungsmeldung]=" ..
						wartungsmeldung .. kategorie_query_string .. "&_run"
			}
			wartungsmeldung =
				frame:callParserFunction("#queryformlink", queryformlink)
			-- Info anfügen
			local info = m["Info"]
			if info ~= nil then
				wartungsmeldung = wartungsmeldung .. " " ..
					"{{#info:" .. info .. "|note}}"
			end
			-- Zeile zusammenbauen
			if gruppe ~= nil then
				t = t .. htm.tableLine{
					{gruppe,  td_args = "rowspan=\"" .. #meldungen , "\""},
					wartungsmeldung,
					{anzahl, td_args = "style=\"text-align:center;\""}}
				gruppe = nil
			else
				t = t .. htm.tableLine{
					wartungsmeldung,
					{anzahl, td_args = "style=\"text-align:center;\""}}
			end
		end
	end
	-- Tabellen-Fuß
	t = t .. htm.tableFooter()
	mw.logObject(t)
	t = frame:preprocess(t)
	return t
end

function p.AbfrageSeitenListe(frame)
	-- Kommandozeile zum Debuggen:
	-- =p.AbfrageSeitenListe{pargs={}}
	-- =p.AbfrageSeitenListe{pargs={["Wartungsmeldung"]="Bild-Beschreibung fehlt"}}
	local t = ""
	local frame, pargs = dev.GetFrameAndParentArgs(frame)
	-- Seiten-Selektor
	local selector = ""
	if not com.isEmpty(pargs["Wartungsmeldung"]) then
		selector = selector ..
			"[[Wartungsmeldung::~*" .. pargs["Wartungsmeldung"] .. "*]]"
	else
		selector = selector ..
			"[[Wartungsmeldung::+]]"
	end
	if not com.isEmpty(pargs["Kategorie"]) then
		selector = selector ..
			"[[Kategorie:" .. pargs["Kategorie"] .. "]]"
	end
	if not com.isEmpty(pargs["KlassenName"]) then
		selector = selector ..
			"[[KlassenName::" .. pargs["KlassenName"] .. "]]"
	end
	if not com.isEmpty(pargs["Ehemals"]) then
		selector = selector ..
			"[[Ehemals::" .. pargs["Ehemals"] .. "]]"
	end
	if pargs["Namensraum"] == "(Seite)" or
		pargs["Namensraum"] == "Lemma" or
		pargs["Namensraum"] == "" then
		selector = "[[:+]]" .. selector
	elseif pargs["Namensraum"] == "Datei" then
		selector = "[[Datei:+]]" .. selector
	else
		selector = "[[:+]]" .. selector .. " OR [[Datei:+]]" .. selector
	end
	-- Anzahl ermitteln und anzeigen
	local query = {selector, format = "count"}
	query = mw.smw.ask(query)
	t = t .. "'''" .. query .. " Seiten gefunden'''<br>\n"
	-- ask hinzufügen
	query = {selector,
		"?Wartungsmeldung",
		"?Kategorie",
		"?KlassenName=Klasse",
		"?Ehemals#Ja,Nein",
		format = "table",
		limit = 200,
		mainlabel = "Seite"}
		if pargs["Klasse"] == "Gebäude" then
			table.insert(query, "?Straße")
		end
	t = t .. frame:callParserFunction("#ask", query)
	return t
end

return p