Modul:Gebäude: Unterschied zwischen den Versionen

Aus FürthWiki

K (Schützte „Modul:Gebäude“ ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt) [Verschieben=Nur Administratoren erlauben] (unbeschränkt)))
(switch zu Lua)
Zeile 1: Zeile 1:
local p = {} --p stands for package
local p = {} --p stands for package
local c = require("Module:Common")
local work = false
local com = require("Modul:Common")
local str = require("Modul:String")
local str = require("Modul:String")
local geo = require("Module:Geocode")
local wik = require("Modul:Wiki")
local geo = require("Modul:Geocode")
local kat = require("Modul:Kategorie")
local que = require("Modul:Queries")
local fab = require("Modul:Faktenbox")


function p.Faktenbox(frame)
function p.Faktenbox(frame)
local args = c.shallowcopy(frame:getParent().args)
-- mw.log("Faktenbox(frame)")
args["PLZ"] = geo.GetPLZ(frame:getParent())
-- mw.logObject(frame)
-- Konsolenzeile zum Debuggen als Startpunkt:
-- =p.Faktenbox({parentargs={Bild="Schwabacher Straße 12 Dez 2020 1.jpg",["Straße"]="Erlanger Straße",Hausnummer=" 11; 13 ;"}})


local tpl_bild = p.bild(frame, args)
local args
local tab_bild=''
if frame.parentargs then
if tpl_bild:gsub("%s+", "") ~= '' then
args = frame.parentargs
tab_bild = '<tab name=Bild>' ..
noframe = true
tpl_bild .. '</tab>'
else
args = frame:getParent().args
end
end
 
local tpl_karte = p.karte(frame, args)
-- Klasse/Kategorie setzen
local tab_karte=''
local klasse = "Gebäude"
if tpl_karte:gsub("%s+", "") ~= '' then
local kategorie = kat.mehrzahl(klasse)
tab_karte = '<tab name=Karte>' ..  
mw.smw.set("KlassenName = " .. klasse)
tpl_karte .. '</tab>'
 
-- Straße/Hausnummer Formular-Eingaben analysieren
local strasseHnr = p.strasseHnrParser(args)
 
-- Postleitzahl ermitteln
local plz = ""
if not strasseHnr.suspekt and #strasseHnr.strasse > 0 then
-- Es wird angenommen, dass alle Gebäude die gleiche PLZ haben. Hausnummer muss nicht vorhanden sein
plz = geo.getPLZ(strasseHnr.strasse[1].name, strasseHnr.strasse[1].hausnummer[1])
else
end
 
-- Bilder-Tab bauen
local bildTab = fab.bildTab(args["Bild"])
if bildTab ~= "" then
bildTab = '<tab name = Bild>' .. bildTab .. '</tab>'
end
 
-- Karten-Tab bauen
local kartenTab
local pagename = wik.pagename()
if string.find(pagename, ";") ~= nil then
kartenTab = "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!"
else
kartenTab = p.kartenTab(frame, args, noframe)
end
if kartenTab ~= "" then
kartenTab = '<tab name = Karte>' .. kartenTab .. '</tab>'
end
end
 
-- The tab "Daten" is visible everytime
-- Daten-Tab bauen (immer vorhanden)
local tpl_daten = p.daten(frame, args)
local datenTab = p.datenTab{
local tab_daten = '<tab name=Daten>' ..  
frame = frame,
tpl_daten .. '</tab>'
args = args,
kategorie = kategorie,
local tpl_personen = p.personen(frame, args)
plz = plz,
local tab_personen=''
strasseHnr = strasseHnr,
if tpl_personen:gsub("%s+", "") ~= '' then
geo = true,
tab_personen = '<tab name=Personen>' ..  
noframe = noframe
tpl_personen .. '</tab>'
}
local datenTab = '<tab name = Daten>' .. datenTab .. '</tab>' -- immer vorhanden
 
-- Personen-Tab bauen
local personenTab = p.residenzTab("Personen, die hier wohnen bzw. gewohnt haben:", "Person")
if personenTab ~= "" then
personenTab = '<tab name = Personen>' .. personenTab .. '</tab>'
end
end
 
local tpl_unternehmen = p.unternehmen(frame, args)
-- Unternehmen-Tab bauen
local tab_unternehmen=''
local unternehmenTab = p.residenzTab("Unternehmen, die hier ansässig sind/waren:", "Unternehmen")
if tpl_unternehmen:gsub("%s+", "") ~= '' then
if unternehmenTab ~= "" then
tab_unternehmen = '<tab name=Unternehmen>' ..  
unternehmenTab = '<tab name = Unternehmen>' .. unternehmenTab .. '</tab>'
tpl_unternehmen .. '</tab>'
end
end


local t ='<div class=factbox><tabs>' ..  
-- Tabs zusammenfügen
  tab_bild ..  
local box =  
  tab_karte ..
"<div class = factbox><tabs>" ..
  tab_daten ..  
bildTab ..
  tab_personen ..  
kartenTab ..
  tab_unternehmen ..  
datenTab ..
  '</tabs></div>'
personenTab ..
unternehmenTab ..
"</tabs></div>"
 
-- Sonstige gemeinsame Dinge anfügen (Formular, Kategorien, Wartung, ...)
box = box .. fab.common{
klasse = klasse,
kategorie = kategorie,
denkmalstatusbesteht = args["DenkmalstatusBesteht"],
bild = args["Bild"],
strasseHnr = strasseHnr,
positionscheck = true,
work = work
}
-- mw.log("box = " .. box)


-- Use preprocess to render the factbox and all contens at once
-- Use preprocess to render the factbox and all contens at once
return frame:preprocess(t)
if not noframe then
box = frame:preprocess(box)
end
-- mw.log("box = " .. box)
return box
end
end


function p.bild(frame, args)
function p.datenTab(args)
    return frame:expandTemplate{title='CommonTabs/Bild', args=args}
-- mw.log("datenTab(args)")
-- mw.logObject(args)
-- Konsolenzeile zum Debuggen als Startpunkt:
-- =p.datenTab({noframe=true,klasse="Gebäude",kategorie="Gebäude",positionscheck=true,work=true,args={},strasseHnr={strasse={}}})
local t = ""
 
local teilDesGebaeudeKomplexes = args.args["TeilDesGebäudeKomplexes"] or ""
teilDesGebaeudeKomplexes = str.splitAndStrip(teilDesGebaeudeKomplexes, ";")
local query = "[[:+]][[!" .. wik.pagename() .. "]][[Kategorie:Gebäude]][[StraßeHnr::" .. wik.subpagename() .. "]] [[AnzahlGebäude::>2]]"
-- mw.log("query = " .. query)
local query_result = que.getPages(query, true)
-- mw.logObject(query_result)
teilDesGebaeudeKomplexes = com.append_tables(teilDesGebaeudeKomplexes, query_result)
 
t = t .. "<dl class = 'dataTable'>"
t = t .. fab.zeileKategorieSeite(args.kategorie, args.args["Ehemals"])
t = t .. fab.zeileStrasseHnr(args.strasseHnr)
t = t .. fab.zeile("PLZ", args.plz)
t = t .. fab.zeile("Objekt", args.args["Objekt"])
t = t .. fab.zeile("TeilDesEnsembles", args.args["TeilDesEnsembles"], "Teil des Ensembles")
t = t .. fab.zeile("TeilDesAreals", args.args["TeilDesAreals"], "Teil des Areals")
t = t .. fab.zeile("TeilDesGebäudeKomplexes", teilDesGebaeudeKomplexes, "Teil des Gebäude-Komplexes")
t = t .. fab.zeile("Baujahr", args.args["Baujahr"])
t = t .. fab.zeile("Ehemals", args.args["Ehemals"])
t = t .. fab.zeilenDenkmalschutz(args.args["DenkmalstatusBesteht"], args.args["AktenNr"])
t = t .. fab.zeile("Abbruchjahr", args.args["Abbruchjahr"])
t = t .. fab.zeile("Baustil", args.args["Baustil"])
t = t .. fab.zeile("Bauherr", args.args["Bauherr"])
t = t .. fab.zeile("Architekt", args.args["Architekt"])
t = t .. fab.zeile("Maurermeister", args.args["Maurermeister"])
t = t .. fab.zeile("Quellangaben", args.args["Quellangaben"])
t = t .. fab.zeileGeokoordinate(args.frame, args.noframe)
t = t .. "</dl>"
t = t .. fab.faktenboxSemantikBrowsen()
-- mw.log("t = " .. t)
    return t
end
end


function p.daten(frame, args)
function p.kartenTab(frame, args, noframe)
    return frame:expandTemplate{title='Gebäude/Daten', args=args}
-- mw.log("kartenTab(frame, args)")
-- mw.logObject(frame)
-- mw.logObject(args)
t = ""
if noframe then
t = "Dummy-Karten-Tab (noframe)" ..
",lat=" .. (lat or "nil") ..
",lon=" .. (lon or "nil") ..
",location=" .. (location or "nil") ..
",geojson=" .. (geojson or "nil") ..
",GeoJsonKarte=" .. (GeoJsonKarte or "nil")
else
t = frame:expandTemplate{title = 'Gebäude/Karte', args = args}
end
if t:gsub("%s+", "") == '' then
t = ""
end
-- mw.log("t = " .. t)
return t
end
end


function p.karte(frame, args)
function p.strasseHnrParser(args)
return frame:expandTemplate{title='Gebäude/Karte', args=args}
-- mw.log("strasseHnrProcessor(args)")
-- mw.logObject(args)
-- Konsolenzeile zum Debuggen als Startpunkt:
-- p.strasseHnrParser({["Straße"]="Elanger Straße",["Hausnummer"]="11;13",["Straße2"]="",["Hausnummer2"]="",["Straße3"]="",["Hausnummer3"]=""})
local result = {}
result.strasse = {}
result.suspekt = false
result.anzahlGebaeude = 0
 
local strasseHnr = {
{args["Straße"]  or "", args["Hausnummer"]  or ""},
{args["Straße2"] or "", args["Hausnummer2"] or ""},
{args["Straße3"] or "", args["Hausnummer3"] or ""}
}
 
for _, sh in ipairs(strasseHnr) do -- Straße/Hausnummern-Kombis durchitereieren
local s = str.strip(sh[1] or "") -- Straße
local hl = sh[2] or "" -- Hausnummernliste
if s == "" then -- kein Problem, wenn eine Straße/Hausnummer-Kombi komplett fehlt (nicht im Formular angegeben)
if hl ~= "" then -- aber Problem bei fehlender Straße, aber Hausnummernliste vorhanden
result.suspekt = true
end
else
local entry = {}
entry.name = s
entry.hausnummer = {}
if hl == "" then
result.suspekt = true -- leere Hausnummernliste
else
hl = str.splitAndStrip(hl, ";") -- Liste in table umwandeln
for _, h in ipairs(hl) do -- Hausnummern durchitereieren
if h == "" then
result.suspekt = true -- leere Hausnummerneintrag in Liste
else
table.insert(entry.hausnummer, h)
result.anzahlGebaeude = result.anzahlGebaeude + 1
end
end
end
table.insert(result.strasse, entry)
end
end
-- mw.logObject(result)
return result
end
end


function p.personen(frame, args)
function p.residenzTab(ueberschrift, klasse)
return frame:expandTemplate{title='Gebäude/Personen', args=args}
-- mw.log("residenzTab(" .. (klasse or "nil") .. ")")
end
local t = ""


function p.unternehmen(frame, args)
local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. wik.subpagename() .. "]][[-Has subobject.KlassenName::" .. klasse .. "]]"
return frame:expandTemplate{title='Gebäude/Unternehmen', args=args}
query = query .. "|?-has subobject.Seite = Seite|?Adressart|?AdresseVon#-F[j. F Y]|?AdresseBis#-F[j. F Y]|mainlabel = -|limit = 100"
local askResult = mw.smw.ask(query)
-- mw.logObject(askResult)
if askResult ~= nil then
for i, z in ipairs(askResult) do -- Ergebniszeile durchiterieren
if i == 1 then
t = t .. ueberschrift .. "\n" -- Text vor der eigentlichen Liste
end
t = t .. "* " .. z["Seite"] -- immer vorhanden
z.Adressart = z.Adressart or "" -- nicht immer vorhanden (nil)
z.AdresseVon = z.AdresseVon or "" -- nicht immer vorhanden (nil)
z.AdresseBis = z.AdresseBis or "" -- nicht immer vorhanden (nil)
-- jede Kombination kann vorkommen
if z.Adressart ~= "" or z.AdresseVon ~= "" or z.AdresseBis ~= "" then
t = t .. " (" .. z.Adressart -- kein Problem, wenn leer
if z.Adressart ~= "" and (z.AdresseVon ~= "" or z.AdresseBis ~= "") then
t = t .. " "
end
if z.AdresseVon ~= "" then
t = t .. "von " .. z.AdresseVon
end
if (z.Adressart ~= "" or z.AdresseVon ~= "") and z.AdresseBis ~= "" then
t = t .. " "
end
if z.AdresseBis ~= "" then
t = t .. "bis " .. z.AdresseBis
end
t = t .. ")"
end
t = t .. "\n"
end
end
-- mw.log("t = " .. t)
return t
end
end


return p
return p

Version vom 10. Oktober 2025, 12:25 Uhr

local p = {} --p stands for package
local work = false
local com = require("Modul:Common")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local geo = require("Modul:Geocode")
local kat = require("Modul:Kategorie")
local que = require("Modul:Queries")
local fab = require("Modul:Faktenbox")

function p.Faktenbox(frame)
--	mw.log("Faktenbox(frame)")
--	mw.logObject(frame)
	-- Konsolenzeile zum Debuggen als Startpunkt:
	-- =p.Faktenbox({parentargs={Bild="Schwabacher Straße 12 Dez 2020 1.jpg",["Straße"]="Erlanger Straße",Hausnummer=" 11; 13 ;"}})

	local args
	if frame.parentargs then
		args = frame.parentargs
		noframe = true
	else
		args = frame:getParent().args
	end

	-- Klasse/Kategorie setzen
	local klasse = "Gebäude"
	local kategorie = kat.mehrzahl(klasse)
	mw.smw.set("KlassenName = " .. klasse)

	-- Straße/Hausnummer Formular-Eingaben analysieren
	local strasseHnr = p.strasseHnrParser(args)

	-- Postleitzahl ermitteln
	local plz = ""
	if not strasseHnr.suspekt and #strasseHnr.strasse > 0 then
		-- Es wird angenommen, dass alle Gebäude die gleiche PLZ haben. Hausnummer muss nicht vorhanden sein
		plz = geo.getPLZ(strasseHnr.strasse[1].name, strasseHnr.strasse[1].hausnummer[1])
		else
	end

	-- Bilder-Tab bauen
	local bildTab = fab.bildTab(args["Bild"])
	if bildTab ~= "" then
		bildTab = '<tab name = Bild>' .. bildTab .. '</tab>'
	end

	-- Karten-Tab bauen
	local kartenTab
	local pagename = wik.pagename()
	if string.find(pagename, ";") ~= nil then
		kartenTab = "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!"
	else
		kartenTab = p.kartenTab(frame, args, noframe)
	end
	if kartenTab ~= "" then
		kartenTab = '<tab name = Karte>' .. kartenTab .. '</tab>'
	end

	-- Daten-Tab bauen (immer vorhanden)
	local datenTab = p.datenTab{
		frame = frame,
		args = args,
		kategorie = kategorie,
		plz = plz,
		strasseHnr = strasseHnr,
		geo = true,
		noframe = noframe
	}
	local datenTab = '<tab name = Daten>' .. datenTab .. '</tab>' -- immer vorhanden

	-- Personen-Tab bauen
	local personenTab = p.residenzTab("Personen, die hier wohnen bzw. gewohnt haben:", "Person")
	if personenTab ~= "" then
		personenTab = '<tab name = Personen>' .. personenTab .. '</tab>'
	end

	-- Unternehmen-Tab bauen
	local unternehmenTab = p.residenzTab("Unternehmen, die hier ansässig sind/waren:", "Unternehmen")
	if unternehmenTab ~= "" then
		unternehmenTab = '<tab name = Unternehmen>' .. unternehmenTab .. '</tab>'
	end

	-- Tabs zusammenfügen
	local box = 
		"<div class = factbox><tabs>" ..
		bildTab ..
		kartenTab ..
		datenTab ..
		personenTab ..
		unternehmenTab ..
		"</tabs></div>"

	-- Sonstige gemeinsame Dinge anfügen (Formular, Kategorien, Wartung, ...)
	box = box .. fab.common{
		klasse = klasse,
		kategorie = kategorie,
		denkmalstatusbesteht = args["DenkmalstatusBesteht"],
		bild = args["Bild"],
		strasseHnr = strasseHnr,
		positionscheck = true,
		work = work
	}
--	mw.log("box = " .. box)

	-- Use preprocess to render the factbox and all contens at once
	if not noframe then
		box = frame:preprocess(box)
	end
--		mw.log("box = " .. box)
	return box
end

function p.datenTab(args)
--	mw.log("datenTab(args)")
--	mw.logObject(args)
	-- Konsolenzeile zum Debuggen als Startpunkt:
	-- =p.datenTab({noframe=true,klasse="Gebäude",kategorie="Gebäude",positionscheck=true,work=true,args={},strasseHnr={strasse={}}})
	local t = ""

	local teilDesGebaeudeKomplexes = args.args["TeilDesGebäudeKomplexes"] or ""
	teilDesGebaeudeKomplexes = str.splitAndStrip(teilDesGebaeudeKomplexes, ";")
	local query = "[[:+]][[!" .. wik.pagename() .. "]][[Kategorie:Gebäude]][[StraßeHnr::" .. wik.subpagename() .. "]] [[AnzahlGebäude::>2]]"
--	mw.log("query = " .. query)
	local query_result = que.getPages(query, true)
--	mw.logObject(query_result)
	teilDesGebaeudeKomplexes = com.append_tables(teilDesGebaeudeKomplexes, query_result)

	t = t .. "<dl class = 'dataTable'>"
	t = t .. fab.zeileKategorieSeite(args.kategorie, args.args["Ehemals"])
	t = t .. fab.zeileStrasseHnr(args.strasseHnr)
	t = t .. fab.zeile("PLZ",						args.plz)
	t = t .. fab.zeile("Objekt",					args.args["Objekt"])
	t = t .. fab.zeile("TeilDesEnsembles",			args.args["TeilDesEnsembles"],	"Teil des Ensembles")
	t = t .. fab.zeile("TeilDesAreals", 			args.args["TeilDesAreals"], 	"Teil des Areals")
	t = t .. fab.zeile("TeilDesGebäudeKomplexes",	teilDesGebaeudeKomplexes, 		"Teil des Gebäude-Komplexes")
	t = t .. fab.zeile("Baujahr",					args.args["Baujahr"])
	t = t .. fab.zeile("Ehemals",					args.args["Ehemals"])
	t = t .. fab.zeilenDenkmalschutz(args.args["DenkmalstatusBesteht"], args.args["AktenNr"])
	t = t .. fab.zeile("Abbruchjahr",				args.args["Abbruchjahr"])
	t = t .. fab.zeile("Baustil",					args.args["Baustil"])
	t = t .. fab.zeile("Bauherr",					args.args["Bauherr"])
	t = t .. fab.zeile("Architekt", 				args.args["Architekt"])
	t = t .. fab.zeile("Maurermeister", 			args.args["Maurermeister"])
	t = t .. fab.zeile("Quellangaben",				args.args["Quellangaben"])
	t = t .. fab.zeileGeokoordinate(args.frame, args.noframe)
	t = t .. "</dl>"
	t = t .. fab.faktenboxSemantikBrowsen()
	
--	mw.log("t = " .. t)
    return t
end

function p.kartenTab(frame, args, noframe)
--	mw.log("kartenTab(frame, args)")
--	mw.logObject(frame)
--	mw.logObject(args)
	t = ""
	if noframe then
		t = "Dummy-Karten-Tab (noframe)" ..
			",lat=" .. (lat or "nil") ..
			",lon=" .. (lon or "nil") ..
			",location=" .. (location or "nil") ..
			",geojson=" .. (geojson or "nil") ..
			",GeoJsonKarte=" .. (GeoJsonKarte or "nil")
	else
		t = frame:expandTemplate{title = 'Gebäude/Karte', args = args}
	end
	if t:gsub("%s+", "") == '' then
		t = ""
	end
--	mw.log("t = " .. t)
	return t
end

function p.strasseHnrParser(args)
--	mw.log("strasseHnrProcessor(args)")
--	mw.logObject(args)
	-- Konsolenzeile zum Debuggen als Startpunkt:
	-- p.strasseHnrParser({["Straße"]="Elanger Straße",["Hausnummer"]="11;13",["Straße2"]="",["Hausnummer2"]="",["Straße3"]="",["Hausnummer3"]=""})
	local result = {}
	result.strasse = {}
	result.suspekt = false
	result.anzahlGebaeude = 0

	local strasseHnr = {
		{args["Straße"]  or "", args["Hausnummer"]  or ""},
		{args["Straße2"] or "", args["Hausnummer2"] or ""},
		{args["Straße3"] or "", args["Hausnummer3"] or ""}
	}

	for _, sh in ipairs(strasseHnr) do -- Straße/Hausnummern-Kombis durchitereieren
		local s = str.strip(sh[1] or "") -- Straße
		local hl = sh[2] or "" -- Hausnummernliste
		if s == "" then -- kein Problem, wenn eine Straße/Hausnummer-Kombi komplett fehlt (nicht im Formular angegeben)
			if hl ~= "" then -- aber Problem bei fehlender Straße, aber Hausnummernliste vorhanden
				result.suspekt = true
			end
		else
			local entry = {}
			entry.name = s
			entry.hausnummer = {}
			if hl == "" then
				result.suspekt = true -- leere Hausnummernliste
			else
				hl = str.splitAndStrip(hl, ";") -- Liste in table umwandeln
				for _, h in ipairs(hl) do -- Hausnummern durchitereieren
					if h == "" then
						result.suspekt = true -- leere Hausnummerneintrag in Liste
					else
						table.insert(entry.hausnummer, h)
						result.anzahlGebaeude = result.anzahlGebaeude + 1
					end
				end
			end
			table.insert(result.strasse, entry)
		end
	end
--	mw.logObject(result)
	return result
end

function p.residenzTab(ueberschrift, klasse)
--	mw.log("residenzTab(" .. (klasse or "nil") .. ")")
	local t = ""

	local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. wik.subpagename() .. "]][[-Has subobject.KlassenName::" .. klasse .. "]]"
	query = query .. "|?-has subobject.Seite = Seite|?Adressart|?AdresseVon#-F[j. F Y]|?AdresseBis#-F[j. F Y]|mainlabel = -|limit = 100"
	local askResult = mw.smw.ask(query)
--	mw.logObject(askResult)
	if askResult ~= nil then
		for i, z in ipairs(askResult) do -- Ergebniszeile durchiterieren
			if i == 1 then
				t = t .. ueberschrift .. "\n" -- Text vor der eigentlichen Liste
			end
			t = t .. "* " .. z["Seite"] -- immer vorhanden
			z.Adressart = z.Adressart or "" -- nicht immer vorhanden (nil)
			z.AdresseVon = z.AdresseVon or "" -- nicht immer vorhanden (nil)
			z.AdresseBis = z.AdresseBis or "" -- nicht immer vorhanden (nil)
			-- jede Kombination kann vorkommen
			if z.Adressart ~= "" or z.AdresseVon ~= "" or z.AdresseBis ~= "" then
				t = t .. " (" .. z.Adressart -- kein Problem, wenn leer
				if z.Adressart ~= "" and (z.AdresseVon ~= "" or z.AdresseBis ~= "") then
					t = t .. " "
				end
				if z.AdresseVon ~= "" then
					t = t .. "von " .. z.AdresseVon
				end
				if (z.Adressart ~= "" or z.AdresseVon ~= "") and z.AdresseBis ~= "" then
					t = t .. " "
				end
				if z.AdresseBis ~= "" then
					t = t .. "bis " .. z.AdresseBis
				end
				t = t .. ")"
			end
			t = t .. "\n"
		end
	end
--	mw.log("t = " .. t)
	return t
end

return p