Modul:Bild/Work: Unterschied zwischen den Versionen

Aus FürthWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 261: Zeile 261:
local query = {"[[:+]][[Bilderanzahl::>" .. (n_bilder_limit + 1 ) .."]]",
local query = {"[[:+]][[Bilderanzahl::>" .. (n_bilder_limit + 1 ) .."]]",
"?#-", "?Bilderanzahl", "?KlassenName", "?Kategorie#-",
"?#-", "?Bilderanzahl", "?KlassenName", "?Kategorie#-",
"?GalerieAttribut#-",
mainlabel = "-", sort = "Bilderanzahl", order = "desc", limit = 200}
mainlabel = "-", sort = "Bilderanzahl", order = "desc", limit = 200}
uebervolle_seiten = mw.smw.ask(query) or {}
uebervolle_seiten = mw.smw.ask(query) or {}
Zeile 271: Zeile 272:
local query2 = {"[[" .. q .."]]" ..
local query2 = {"[[" .. q .."]]" ..
"[[Bilderanzahl::<" .. n_bilder_limit .."]]",
"[[Bilderanzahl::<" .. n_bilder_limit .."]]",
"?Bilderanzahl", "?KlassenName", "?Kategorie#-"}
"?Bilderanzahl", "?KlassenName", "?Kategorie#-", "?GalerieAttribut#-"}
query2 = mw.smw.ask(query2)
query2 = mw.smw.ask(query2)
if query2 ~= nil then
if query2 ~= nil then
Zeile 277: Zeile 278:
["Bilderanzahl"] = query2[1]["Bilderanzahl"],
["Bilderanzahl"] = query2[1]["Bilderanzahl"],
["KlassenName"] = query2[1]["KlassenName"],
["KlassenName"] = query2[1]["KlassenName"],
["Kategorie"] = query2[1]["Kategorie"]})
["Kategorie"] = query2[1]["Kategorie"],
["GalerieAttribut"] = query2[1]["GalerieAttribut"]})
end
end
end
end
Zeile 286: Zeile 288:
t = t .. "'''" .. #uebervolle_seiten .. " Seiten gefunden'''\n"
t = t .. "'''" .. #uebervolle_seiten .. " Seiten gefunden'''\n"
local hidden_categories = wik.getHiddenCategories()
local hidden_categories = wik.getHiddenCategories()
t = t .. htm.tableHeader{"Seite", "Bilderanzahl", "Klasse", "Kategorien", "Bilder ausblenden"}
t = t .. htm.tableHeader{"Seite", "Bilderanzahl", "Klasse<sup>*1</sup>", "Kategorien", "Galerie-Attribute", "Bilder ausblenden"}
for _, p in ipairs(uebervolle_seiten) do
for _, p in ipairs(uebervolle_seiten) do
local lemma = p[1]
local lemma = p[1]
-- KlassenName
local klassen = p["KlassenName"] or {}
local klassen = p["KlassenName"] or {}
if type(klassen) ~= "table" then
if type(klassen) ~= "table" then
Zeile 294: Zeile 297:
end
end
klassen = table.concat(klassen, ", ")
klassen = table.concat(klassen, ", ")
-- Kategorie
local kategorien = p["Kategorie"] or {}
local kategorien = p["Kategorie"] or {}
if type(kategorien) ~= "table" then
if type(kategorien) ~= "table" then
Zeile 306: Zeile 310:
end
end
kategorien = table.concat(kategorien_tmp, ", ")
kategorien = table.concat(kategorien_tmp, ", ")
-- GalerieAttribut
local galerie_attr = p["GalerieAttribut"] or {}
if type(galerie_attr) ~= "table" then
galerie_attr = {galerie_attr}
end
local galerie_attr_tmp = {}
for _, k in ipairs(galerie_attr) do
if not hidden_categories[k] then
k = "[[:" .. k .. "|" .. string.sub(k, 11) .. "]]"
table.insert(galerie_attr_tmp, k)
end
end
galerie_attr = table.concat(galerie_attr_tmp, ", ")
local gba_link =
local gba_link =
"[[" .. galerie_bilder_ausblendung_basepagemame .. "/" ..
"[[" .. galerie_bilder_ausblendung_basepagemame .. "/" ..
Zeile 312: Zeile 329:
{p["Bilderanzahl"], td_args = "style=\"text-align: center;\""},
{p["Bilderanzahl"], td_args = "style=\"text-align: center;\""},
{klassen, td_args = "style=\"text-align: center;\""},
{klassen, td_args = "style=\"text-align: center;\""},
kategorien,
kategorien, galerie_attr
{gba_link, td_args = "style=\"text-align: center;\""}}
{gba_link, td_args = "style=\"text-align: center;\""}}
end
end
t = t .. htm.tableFooter()
t = t .. htm.tableFooter()
t = t .. "; Anmerkungen:\n"
t = t .. ": 1) Entspricht <code><nowiki>{{...}}</nowiki></code>\n"
end
end
return t
return t

Version vom 4. Februar 2026, 12:01 Uhr

Die Dokumentation für dieses Modul kann unter Modul:Bild/Work/Doku erstellt werden

local p = {}

local com = require("Modul:Common")
local dev = require("Modul:Development")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local smw = require("Modul:SMW")
local htm = require("Modul:HTML")
local kal = require("Modul:Kalender")

local n_bilder_limit = 200
local abfrage = "Abfrage Bilder"												-- Formular/Vorlage-Seitenname ggf. mit "/Work"
local galerie_bilder_ausblendung_basepagemame =
	"FürthWiki:Galerie-Bilder-Ausblendung"

function p.Galerie(frame)
--	mw.log("Galerie(frame)")
--	mw.logObject(frame.args, "frame.args")
	-- Kommando-Zeile zum Debuggen:
	-- frame=mw.getCurrentFrame(); frame.args={["pagename"]="Wolfringstraße";["attr"]="Person;Straße",["val"]="Karl Rothammel;Erlanger Straße",["attr_zeige_nicht"]="ZeigeNichtInStraße;ZeigeNichtInOrt",["sort"]="Seite",["order"]="asc"}; print(p.Galerie(frame))
	local t = ""
	local pagename = frame.args["pagename"] or wik.pagename()					-- args.pagename zum Debuggen
	-- Argumente holen und ggf. default setzen
	local args = wik.getArgs(frame.args, {"attr", "val", "attr_zeige_nicht", "sort", "order"})
	args.sort = args.sort or "Erstellungsdatum, Seite"
	args.order = args.order or "desc, asc"
	args.attr = str.splitAndStrip(args.attr, ";")
	args.val = str.splitAndStrip(args.val or "", ";")
	for i = 1, #args.attr do													-- default pagename setzen, wenn val nicht angegeben
		args.val[i] = args.val[i] or pagename
	end
	args.attr_zeige_nicht = str.splitAndStrip(args.attr_zeige_nicht or "", ";")
	-- Galerie-Bilder-Ausblendung-Seite ermitteln
	local galerie_bilder_ausblendung_pagemame =
		galerie_bilder_ausblendung_basepagemame .. "/" .. pagename
	if not wik.pageExists(galerie_bilder_ausblendung_pagemame) then
		galerie_bilder_ausblendung_pagemame = nil
	end
	-- Bilder-Seiten-Selektor zusammenbauen
	local selector = ""
	if galerie_bilder_ausblendung_pagemame ~= nil then
		selector = selector .. "[[-has subobject::" ..
			galerie_bilder_ausblendung_pagemame .. "]]"
	else
		for i, a in ipairs(args.attr) do
			if selector ~= "" then
				selector = selector .. " OR "
			end
			selector = selector .. 
				"[[Datei:+]][[Kategorie:Bilder]]" ..
				"[[" .. a .. "::" .. args.val[i] .. "]]"
			a = args.attr_zeige_nicht[i]
			if a ~= nil then
				selector = selector .. "[[" .. a .. "::!Ja]]"
			end
		end
	end

	-- Bilder-Anzahl
	local n_bilder = mw.smw.ask(selector .. "|format=count")
	t = t .. "{{#set:Bilderanzahl=" .. n_bilder .. "}}"
	if n_bilder == 0 then
		mw.smw.set{["Wartungsmeldung"]="Bilder-Galerie leer"}
	else
		-- Abfrage-Link-Teile
		local queryformlink_part1 =												-- to do: sehr umständlich umgesetzt. Besser mit table arbeiten
			"{{#queryformlink:" ..
			"form=" .. abfrage ..
			"|link text="
		local queryformlink_part2 =
			"|query string="
		for i, a in ipairs(args.attr) do
			if a == "Straße" or a == "Ort" then
				queryformlink_part2 = queryformlink_part2 ..
					"&" .. abfrage .. "[" .. a .. "]=" .. args.val[i]
			else
				queryformlink_part2 = queryformlink_part2 ..
					"&" .. abfrage .. "[attrname" .. i .. "]=" .. a ..
					"&" .. abfrage .. "[attrval" .. i .. "]=" .. args.val[i]
			end
		end
		queryformlink_part2 = queryformlink_part2 ..
			"&" .. abfrage .. "[format]="
		local queryformlink_part3 =
			"&" .. abfrage .. "[bild1]="
		local queryformlink_part4 =
			"&" .. abfrage .. "[limit]="
		local queryformlink_part5 =
			"&" .. abfrage .. "[chron_order]=absteigend" ..
			"&" .. abfrage .. "[attr_op]=oder" ..
			"&_run}}"

		-- Bilder ausblenden Link
		if wik.pageExists(galerie_bilder_ausblendung_pagemame) then
			t = t .. "<div style=\"float:right\"><small>" ..
				"<nowiki>[</nowiki>[[" .. galerie_bilder_ausblendung_pagemame ..
				"|Bilder ausblenden]]<nowiki>]</nowiki> " ..
				"(" .. n_bilder .. " vorhanden)" ..
				"</small></div>"
		end

		-- Bilder-Galerie und Abfrage-Links
		if n_bilder >= 5 then
			t = t ..
				"'''Bilder als " ..
				queryformlink_part1 .. "Galerie" .. -- link text
				queryformlink_part2 .. "Galerie" .. -- format
				queryformlink_part3 .. "1" .. -- erstes Bild
				queryformlink_part4 .. n_bilder_limit .. -- Bilderanzahl
				queryformlink_part5 .. " / " ..
				queryformlink_part1 .. "Tabelle" .. -- link text
				queryformlink_part2 .. "Tabelle" .. -- format
				queryformlink_part3 .. "1" .. -- erstes Bild
				queryformlink_part4 .. n_bilder_limit .. -- Bilderanzahl
				queryformlink_part5 ..
				" anzeigen, sortieren und filtern'''"
		end
		t = t ..																-- die eigentliche Galerie
			"{{#ask:" .. selector .. 
			"|mainlabel=-" ..
			"|?Seite" ..
			"|?Seite.Dateiinfo" ..
			"|sort=" .. args.sort ..
			"|order=" .. args.order ..
			"|format=gallery" ..
			"|limit=" .. n_bilder_limit ..
			"|searchlabel=" ..
			"}}"
		if n_bilder > n_bilder_limit then
			t = t ..
				queryformlink_part1 .. "... weitere Bilder anzeigen" .. -- link text
				queryformlink_part2 .. "Galerie" .. -- format
				queryformlink_part3 .. "1" .. -- erstes Bild
				queryformlink_part4 .. "500" .. -- Bilderanzahl
				queryformlink_part5
				mw.smw.set{["Wartungsmeldung"]="Bilder-Galerie übervoll"}
		end

	end -- if n_bilder == 0 then ... else ...
	
	-- Attribute setzen
	local galerie_attribut = {}
	for i, a in ipairs(args.attr) do
		galerie_attribut[i] = "Attribut:" .. a
	end
	mw.smw.set{["GalerieAttribut"] = galerie_attribut}

--	mw.logObject(t, "t")
	t = frame:preprocess(t)
	return t
end

function p.Abfrage(frame)
	local t = ""
	local frame, pargs = dev.GetFrameAndParentArgs(frame)

	-- Selektor zusammenbauen
	local selector = "[[Datei:+]][[Kategorie:Bilder]]"
	if not com.isEmpty(pargs["Erstellungsdatum von"]) then
		selector = selector .. "[[Erstellungsdatum::>=" .. pargs["Erstellungsdatum von"] .. "]]"
	end
	if not com.isEmpty(pargs["Erstellungsdatum bis"]) then
		selector = selector .. "[[Erstellungsdatum::<=" .. kal.dateLastDayCompleter(pargs["Erstellungsdatum bis"]) .. "]]"
	end
	if not com.isEmpty(pargs["Über Datum von"]) then
		selector = selector .. "[[ÜberDatum::>=" .. pargs["Über Datum von"] .. "]]"
	end
	if not com.isEmpty(pargs["Über Datum bis"]) then
		selector = selector .. "[[ÜberDatum::<=" .. kal.dateLastDayCompleter(pargs["Über Datum bis"]) .. "]]"
	end
	if not com.isEmpty(pargs["Straße"]) then
		selector = selector .. "[[Straße::" .. smw.uniFilter(pargs["Straße"]) .. "]]"
	end
	if not com.isEmpty(pargs["Ort"]) then
		selector = selector .. "[[Ort::" .. smw.uniFilter(pargs["Ort"]) .. "]]"
	end
	if not com.isEmpty(pargs["Urheber"]) then
		selector = selector .. "[[Urheber::" .. smw.uniFilter(pargs["Urheber"]) .. "]]"
	end
	if not com.isEmpty(pargs["Quellangaben"]) then
		selector = selector .. "[[Quellangaben::" .. smw.uniFilter(pargs["Quellangaben"]) .. "]]"
	end
	if not com.isEmpty(pargs["Lizenz"]) then
		selector = selector .. "[[Lizenz::" .. smw.uniFilter(pargs["Lizenz"]) .. "]]"
	end
	if not com.isEmpty(pargs["Signatur"]) then
		selector = selector .. "[[Signatur::" .. smw.uniFilter(pargs["Signatur"]) .. "]]"
	end
	if not com.isEmpty(pargs["Beschreibung"]) then
		selector = selector .. "[[Beschreibung::" .. smw.uniFilter(pargs["Beschreibung"]) .. "]]"
	end
	if not com.isEmpty(pargs["Dateiname"]) then
		selector = selector .. "[[Seite::" .. smw.uniFilter(pargs["Dateiname"]) .. "]]"
	end
	if not com.isEmpty(pargs["Genre"]) then
		selector = selector .. "[[Genre::" .. pargs["Genre"] .. "]]"
	end
	local selector1, selector2 = "", ""
	if not com.isEmpty(pargs["attrname1"]) and not com.isEmpty(pargs["attrval1"]) then
		selector1 = "[[" .. pargs["attrname1"] .. "::" .. smw.uniFilter(pargs["attrval1"]) .. "]]"
	end
	if not com.isEmpty(pargs["attrname2"]) and not com.isEmpty(pargs["attrval2"]) then
		selector2 = "[[" .. pargs["attrname2"] .. "::" .. smw.uniFilter(pargs["attrval2"]) .. "]]"
	end
	if pargs["attr_op"] == "oder" and selector1 ~= "" and selector2 ~= "" then
		selector = selector .. selector1 .. " OR " .. selector .. selector2
	else
		selector = selector .. selector1 .. selector2
	end

	-- Anzahl der Ergebnisse
	n = mw.smw.ask(selector .. "|format=count")
	t = t .. "'''Anzahl der Ergebnisse: " .. n .. "'''"
	if n == 0 then
		t = t .. "<br/>" ..
			"Es konnten keine Bilder mit diesen Vorgaben gefunden werden."
	else
		if not com.isEmpty(pargs["limit"]) and n > tonumber(pargs["limit"]) then
			local n_anzeige = n - (pargs["bild1"] or 1) + 1
			if n_anzeige > tonumber(pargs["limit"]) then
				n_anzeige = pargs["limit"]
			end
			t = t .. " (davon " .. n_anzeige .. " angezeigt)"
		end

		-- Die eigentliche Ergebnis-Anzeige
		local args = {selector}
		args["sort"] = "Erstellungsjahr,Seite"
		if pargs["chron_order"] == "aufsteigend" then
			args["order"] = "asc,asc"
		else
			args["order"] = "desc,asc"
		end
		if pargs["format"] == "Tabelle" then
			for _, a in ipairs{"Beschreibung", "Ort", "Straße",
				"Erstellungstag", "Erstellungsjahr", "Urheber",
				"Quellangaben", "Lizenz", "Signatur"} do
				table.insert(args, "?" .. a)
			end
			args["mainlabel"] = "Bild"
			args["format"] = "table"
		else
			table.insert(args, "?Dateiinfo")
			args["format"] = "gallery"
			args["searchlabel"] = ""											-- erstmal kein "... weitere Ergebnisse anzeigen" => to do
		end
		args["limit"] = pargs["limit"]
		if not com.isEmpty(pargs["bild1"]) then
			args["offset"] = ((tonumber(pargs["bild1"]) or 1) - 1)
		end
		t = t .. frame:callParserFunction("#ask", args)
	end

	t = frame:preprocess(t)
	return t
end

function p.GalerieBilderAusblendungTabelle()
	t = ""
	-- Seiten mit übervollen Bilder-Galerien abfragen
	local query = {"[[:+]][[Bilderanzahl::>" .. (n_bilder_limit + 1 ) .."]]",
		"?#-", "?Bilderanzahl", "?KlassenName", "?Kategorie#-",
		"?GalerieAttribut#-",
		mainlabel = "-", sort = "Bilderanzahl", order = "desc", limit = 200}
	uebervolle_seiten = mw.smw.ask(query) or {}
	-- Unterseiten
	query = {"[[Seite::~" .. galerie_bilder_ausblendung_basepagemame .. "/*]]",
		"?#-", limit = 10000, mainlabel = "-"}
	query = mw.smw.ask(query) or {}
	for _, q in ipairs(query) do
		q = string.sub(q[1], #galerie_bilder_ausblendung_basepagemame + 2)
		local query2 = {"[[" .. q .."]]" ..
			"[[Bilderanzahl::<" .. n_bilder_limit .."]]",
		"?Bilderanzahl", "?KlassenName", "?Kategorie#-", "?GalerieAttribut#-"}
		query2 = mw.smw.ask(query2)
		if query2 ~= nil then
			table.insert(uebervolle_seiten, {q,
				["Bilderanzahl"] = query2[1]["Bilderanzahl"],
				["KlassenName"] = query2[1]["KlassenName"],
				["Kategorie"] = query2[1]["Kategorie"],
				["GalerieAttribut"] = query2[1]["GalerieAttribut"]})
		end
	end
	-- Tabelle zusammenbauen
	if #uebervolle_seiten == 0 then
		t = t .. "'''Es wurden keine Seiten gefunden'''\n"
	else
		t = t .. "'''" .. #uebervolle_seiten .. " Seiten gefunden'''\n"
		local hidden_categories = wik.getHiddenCategories()
		t = t .. htm.tableHeader{"Seite", "Bilderanzahl", "Klasse<sup>*1</sup>", "Kategorien", "Galerie-Attribute", "Bilder ausblenden"}
		for _, p in ipairs(uebervolle_seiten) do
			local lemma = p[1]
			-- KlassenName
			local klassen = p["KlassenName"] or {}
			if type(klassen) ~= "table" then
				klassen = {klassen}
			end
			klassen = table.concat(klassen, ", ")
			-- Kategorie
			local kategorien = p["Kategorie"] or {}
			if type(kategorien) ~= "table" then
				kategorien = {kategorien}
			end
			local kategorien_tmp = {}
			for _, k in ipairs(kategorien) do
				if not hidden_categories[k] then
					k = "[[:" .. k .. "|" .. string.sub(k, 11) .. "]]"
					table.insert(kategorien_tmp, k)
				end
			end
			kategorien = table.concat(kategorien_tmp, ", ")
			-- GalerieAttribut
			local galerie_attr = p["GalerieAttribut"] or {}
			if type(galerie_attr) ~= "table" then
				galerie_attr = {galerie_attr}
			end
			local galerie_attr_tmp = {}
			for _, k in ipairs(galerie_attr) do
				if not hidden_categories[k] then
					k = "[[:" .. k .. "|" .. string.sub(k, 11) .. "]]"
					table.insert(galerie_attr_tmp, k)
				end
			end
			galerie_attr = table.concat(galerie_attr_tmp, ", ")
			local gba_link =
				"[[" .. galerie_bilder_ausblendung_basepagemame .. "/" ..
				lemma .. "|Hier]]"
			t = t .. htm.tableLine{"[[" .. lemma .. "]]",
				{p["Bilderanzahl"], td_args = "style=\"text-align: center;\""},
				{klassen, td_args = "style=\"text-align: center;\""},
				kategorien, galerie_attr
				{gba_link, td_args = "style=\"text-align: center;\""}}
		end
		t = t .. htm.tableFooter()
		t = t .. "; Anmerkungen:\n"
		t = t .. ": 1) Entspricht <code><nowiki>{{...}}</nowiki></code>\n"
	end
	return t
end

return p