Modul:Gebäude: Unterschied zwischen den Versionen

6.173 Bytes hinzugefügt ,  Samstag um 09:34
- fab.subpagesPresent(fbdata)
(+ returnStringCheck())
(- fab.subpagesPresent(fbdata))
 
(59 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {} --p stands for package
local p = {}
 
local com = require("Modul:Common")
local com = require("Modul:Common")
local str = require("Modul:String")
local str = require("Modul:String")
local geo = require("Modul:Geo")
local smw = require("Modul:SMW")
local wik = require("Modul:Wiki")
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")
local fab = require("Modul:Faktenbox")
local formular = "Gebäude"
local kar = require("Modul:Karte")


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


local args
-- Basis-Faktenbox-Daten (Klasse/Kategorie/Formular)
if frame.parentargs then
local fbdata = fab.getFbdata(frame)
args = frame.parentargs
fbdata.klasse = {"Gebäude"}
noframe = true
fbdata.kategorie = {"Gebäude"}
fbdata.formular = "Gebäude" -- ggf. "Gebäude/Work"
fbdata.positionscheck = true
 
if com.isTrue(fbdata.pargs["WeiterleitungGebäudeKomplex"]) then
t = p.weiterleitung(fbdata)
else
else
args = frame:getParent().args
-- Straße/Hausnummer Formular-Eingaben analysieren, Postleitzahl ermitteln
end
fbdata.strasse_hnr = p.strasseHnrParser(fbdata)
fbdata.plz = p.getPlz(fbdata)


-- Klasse/Kategorie setzen
-- Shoah-Abfrage
local klasse = "Gebäude"
fbdata.shoah = p.opferShoah(fbdata)
local kategorie = kat.mehrzahl(klasse)
mw.smw.set("KlassenName = " .. klasse)


-- Straße/Hausnummer Formular-Eingaben analysieren
-- Tabs einsammeln und zusammenfügen
local strasseHnr = p.strasseHnrParser(args)
t = fab.bildTab(fbdata) ..
p.kartenTab(fbdata) .. -- Karten-Tab muss vor Tabs mit zeileGeoDaten() sein
p.datenTab(fbdata) ..
p.residenzTab(fbdata, {ueberschrift = "Personen, die hier wohnen bzw. gewohnt haben:", klasse = "Person", kategorie="Personen"}) ..
p.residenzTab(fbdata, {ueberschrift = "Unternehmen, die hier ansässig sind/waren:", klasse = "Unternehmen", kategorie="Unternehmen"})
t = fab.factbox_header_footer(t)


-- Postleitzahl ermitteln
-- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...)
local plz = ""
t = t .. fab.postprocess(fbdata)
if #strasseHnr.strasse > 0 and not strasseHnr.strasse[1].suspekt 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
end


-- Bilder-Tab bauen
-- Pre-Processing und String-Länge checken
local bildTab = fab.bildTab(args["Bild"])
-- mw.logObject(t, "t")
if bildTab ~= "" then
t = fbdata.frame:preprocess(t)
bildTab = '<tab name = Bild>' .. bildTab .. '</tab>'
return t
end
end


-- Karten-Tab bauen
function p.datenTab(fbdata, args)
local kartenTab
-- mw.log("datenTab(fbdata, args)")
local pagename = wik.pagename()
-- mw.logObject(fbdata, "fbdata")
if string.find(pagename, ";") ~= nil then
-- mw.logObject(args, "args")
kartenTab = "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!"
--[[ Konsolenzeile zum Debuggen (Achtung! Bug in Fehlerbereinigungskonsole! Kann nur 1x ausgeführt werden!):
else
fab=require("Modul:Faktenbox/Work");
kartenTab = p.kartenTab(frame, args, noframe)
fbdata=fab.fbdata{pargs={
end
["Straße"]="Elanger Straße",
if kartenTab ~= "" then
Hausnummer="11;13",
kartenTab = '<tab name = Karte>' .. kartenTab .. '</tab>'
["TeilDesGebäudeKomplexes"]="TDGK",
end
AktenNr="D-5-63-000-1464",
Objekt="Häusle"
}};
fbdata.klasse={"Kirche","Gebäude"};
fbdata.kategorie={"Kirchen","Gebäude"};
fbdata.fullpagename="Isaak-Loewi-Straße 1";
fbdata.subpagename="Isaak-Loewi-Straße 1";
fbdata.strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11", "13"}},{name="XY Straße",hausnummer={}}},anzahlGebaeude=3};
fbdata.plz=90765;
print(p.datenTab(fbdata,{kindex=2,tabname="Tabname"}))
]]
local t = ""
args = args or {}


-- Daten-Tab bauen (immer vorhanden)
-- Teil des Gebäude Komplexes ermitteln
local datenTab = p.datenTab{
local teil_des_gebaeude_komplexes = p.teilDesGebaeudeKomplexes(fbdata)
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
-- Teil des Ensembles um "Ensemble " ergänzen
local unternehmenTab = p.residenzTab("Unternehmen, die hier ansässig sind/waren:", "Unternehmen")
local teil_des_ensembles = str.splitAndStrip(fbdata.pargs["TeilDesEnsembles"], ";")
if unternehmenTab ~= "" then
for i = 1, #teil_des_ensembles do
unternehmenTab = '<tab name = Unternehmen>' .. unternehmenTab .. '</tab>'
teil_des_ensembles[i] = "Ensemble " .. teil_des_ensembles[i]
end
end


-- Tabs zusammenfügen
-- Zusammenbau
local box =  
t = t .. fab.zeileKategorieSeite(fbdata, args.kindex)
"<div class = factbox><tabs>" ..
t = t .. fab.zeileStrasseHnr(fbdata)
bildTab ..
t = t .. fab.zeile{fbdata = fbdata, attr_name = "PLZ", attr_val = fbdata.plz}
kartenTab ..
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Objekt", delimiter = ";"}
datenTab ..
t = t .. fab.zeile{fbdata = fbdata, attr_name = "TeilDesEnsembles", attr_val = teil_des_ensembles, delimiter = ";"}
personenTab ..
t = t .. fab.zeile{fbdata = fbdata, attr_name = "TeilDesAreals", delimiter = ";"}
unternehmenTab ..
t = t .. fab.zeile{fbdata = fbdata, attr_name = "TeilDesGebäudeKomplexes", attr_val = teil_des_gebaeude_komplexes, delimiter = ";"}
"</tabs></div>"
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Baujahr", delimiter = ";"}
t = t .. fab.zeile{fbdata = fbdata, attr_name = "DenkmalstatusBesteht"}
t = t .. fab.zeileAktenNr(fbdata)
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Quellangaben", delimiter = ";"}
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Ehemals"}
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Abbruchjahr", delimiter = ";"}
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Baustil", delimiter = ";"}
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Bauherr", delimiter = ";"}
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Architekt", delimiter = ";"}
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Maurermeister", delimiter = ";"}
t = t .. fab.zeileGeoDaten(fbdata)
t = fab.table_header_footer(t)
t = t .. fab.zeileSemantikBrowsenAbfrage(fbdata)


-- Sonstige gemeinsame Dinge anfügen (Formular, Kategorien, Wartung, ...)
-- Tab draus machen
box = box .. fab.common{
t = fab.tab(t, args.tabname or "Daten")
klasse = klasse,
-- mw.logObject(t, "t")
kategorie = kategorie,
denkmalstatusbesteht = args["DenkmalstatusBesteht"],
bild = args["Bild"],
strasseHnr = strasseHnr,
positionscheck = true,
formular = formular
}
-- mw.log("box = " .. box)
 
-- Use preprocess to render the factbox and all contens at once
if not noframe then
box = frame:preprocess(box)
end
 
box = box .. com.returnStringCheck(box)
-- 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
     return t
end
end


function p.kartenTab(frame, args, noframe)
function p.kartenTab(fbdata)
-- mw.log("kartenTab(frame, args)")
-- mw.log("kartenTab(fbdata)")
-- mw.logObject(frame)
-- mw.logObject(fbdata, "fbdata")
-- mw.logObject(args)
-- Konsolenzeile zum Debuggen:
-- fab=require("Modul:Faktenbox/Work"); fbdata=fab.fbdata{pargs={["Straße"]="Erlanger Straße",["Hausnummer"]="11"}}; fbdata.plz=90765; print(p.kartenTab(fbdata))
t = ""
t = ""
if noframe then
if string.find(fbdata.pagename, ";") ~= nil then
t = "Dummy-Karten-Tab (noframe)" ..
t = t .. "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!"
",lat=" .. (lat or "nil") ..
elseif kar.kartenArgsVorhanden(fbdata.pargs) or -- Soll überhaupt eine Karte angezeigt werden?
",lon=" .. (lon or "nil") ..
  not com.isTrue(fbdata.pargs["Ehemals"]) or
",location=" .. (location or "nil") ..
  fbdata.pargs["Straße"] ~= nil or
",geojson=" .. (geojson or "nil") ..
  fbdata.pargs["Straße2"] ~= nil or
",GeoJsonKarte=" .. (GeoJsonKarte or "nil")
  fbdata.pargs["Straße3"] ~= nil then
else
-- Karten-Argumente übernehmen und aufbereiten
t = frame:expandTemplate{title = 'Gebäude/Karte', args = args}
local args = fab.getKartenArgs(fbdata, 18)
end
-- locationlist ermitteln
if t:gsub("%s+", "") == '' then
local pargs = com.shallowcopy(fbdata.pargs) -- to do: in Lua überführen
t = ""
pargs["PLZ"] = fbdata.plz -- derzeit noch etwas verkrampft
local locationlist_template = "Gebäude/Karte/Locationlist" -- to do: mehrfache geoobjects an der selben Geokoordinate ausfiltern
if com.isTrue(fbdata.pargs["Work"]) and wik.pageExists(locationlist_template .. "/Work") then -- siehe z.B. Rathaus <=> Königstr. 88
locationlist_template = locationlist_template .. "/Work"
end
args["locationlist"] =
fbdata.frame:expandTemplate{title = locationlist_template, args = pargs}
args["location"] = nil
-- Karte erstellen
-- mw.logObject(args, "args")
local t_karte = ""
if kar.kartenArgsVorhanden(args) or not com.isTrue(args["Ehemals"]) then
t_karte, fbdata.geoobjects = kar.karte(fbdata.frame, args)
end
t = t .. t_karte
end
end
-- mw.log("t = " .. t)
-- Tab draus machen
t = fab.tab(t, "Karte")
-- mw.logObject(t, "t")
return t
return t
end
end


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


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


for _, sh in ipairs(strasseHnr) do -- Straße/Hausnummern-Kombis durchitereieren
for ish, sh in ipairs(strasse_hnr) do -- Straße/Hausnummern-Kombis durchitereieren
local s = str.strip(sh[1] or "") -- Straße
local s = str.strip(sh[1]) -- Straße
local hl = str.strip(sh[2] or "") -- Hausnummernliste
local hl = str.strip(sh[2]) -- Hausnummernliste
if s == "" then -- kein Problem, wenn eine Straße/Hausnummer-Kombi komplett fehlt (nicht im Formular angegeben)
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
if hl ~= "" then -- aber Problem bei fehlender Straße, aber Hausnummernliste vorhanden
result.suspekt = true
result.suspekt = true
end
end
Zeile 203: Zeile 177:
entry.hausnummer = {}
entry.hausnummer = {}
entry.suspekt = false
entry.suspekt = false
if hl == "" then
if hl == "" then -- leere Hausnummernliste
result.suspekt = true -- leere Hausnummernliste
if ish ~= 2 then -- Sonderfall Ecke
result.suspekt = true
end
entry.suspekt = true
entry.suspekt = true
else
else
hl = str.splitAndStrip(hl, ";") -- Liste in table umwandeln
hl = str.splitAndStrip(hl, ";") -- Liste in table umwandeln
for _, h in ipairs(hl) do -- Hausnummern durchitereieren
for _, h in ipairs(hl) do -- Hausnummern durchitereieren
if h == "" then
if h == "" then -- leere Hausnummer
result.suspekt = true -- leere Hausnummernliste
result.suspekt = true
entry.suspekt = true
entry.suspekt = true
else
else
Zeile 221: Zeile 197:
end
end
end
end
-- mw.logObject(result)
-- mw.logObject(result, "result")
return result
return result
end
end


function p.residenzTab(ueberschrift, klasse)
function p.residenzTab(fbdata, args)
-- mw.log("residenzTab(" .. (klasse or "nil") .. ")")
-- mw.log("residenzTab(fbdata, args)")
-- mw.logObject(fbdata, "fbdata")
-- mw.logObject(args, "args")
-- Konsolenzeile zum Debuggen:
-- =p.residenzTab({subpagename="Schwabacher Straße 12",fullpagename="Schwabacher Straße 12",strasse_hnr={strasse={{name="Schwabacher Straße",hausnummer={"12"}}}}}, "Unternehmen, die hier ansässig sind/waren:", "Unternehmen", "Unternehmen")
local t = ""
local t = ""


local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. wik.subpagename() .. "]][[-Has subobject.KlassenName::" .. klasse .. "]]"
-- DB-Abfrage
query = query .. "|?-has subobject.Seite = Seite|?Adressart|?AdresseVon#-F[j. F Y]|?AdresseBis#-F[j. F Y]|mainlabel = -|limit = 100"
local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. fbdata.subpagename.. "]][[-Has subobject.KlassenName::" .. args.klasse .. "]]"
local askResult = mw.smw.ask(query)
query = query .. "|?-has subobject.Seite#-=Seite|?Adressart|?AdresseVon#LOCL|?AdresseBis#LOCL|mainlabel=-|limit=100"
-- mw.logObject(askResult)
local ask_result = mw.smw.ask(query)
if askResult ~= nil then
-- mw.logObject(ask_result, "ask_result")
for i, z in ipairs(askResult) do -- Ergebniszeile durchiterieren
 
if i == 1 then
-- Zeilen zusammenbauen
t = t .. ueberschrift .. "\n" -- Text vor der eigentlichen Liste
for i, z in ipairs(ask_result or {}) do -- Ergebniszeile durchiterieren
if i == 1 then
t = t .. args.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
end
t = t .. "* " .. z["Seite"] -- immer vorhanden
t = t .. ")"
z.Adressart = z.Adressart or "" -- nicht immer vorhanden (nil)
end
z.AdresseVon = z.AdresseVon or "" -- nicht immer vorhanden (nil)
t = t .. "\n"
z.AdresseBis = z.AdresseBis or "" -- nicht immer vorhanden (nil)
end
-- jede Kombination kann vorkommen
 
if z.Adressart ~= "" or z.AdresseVon ~= "" or z.AdresseBis ~= "" then
-- Shoah-Opfer
t = t .. " (" .. z.Adressart -- kein Problem, wenn leer
if args.klasse == "Person" and fbdata.shoah ~= nil then
if z.Adressart ~= "" and (z.AdresseVon ~= "" or z.AdresseBis ~= "") then
for _, s in ipairs(fbdata.shoah) do
t = t .. " "
local name = (s["Vorname"] or "") .. " " .. (s["Nachname"] or "")
if wik.pageExists(name) then
local found = false
for _, a in ipairs(ask_result or {}) do -- prüfen, ob oben bereits aufgelistet
if a.Seite == name then
found = true
break
end
end
end
if z.AdresseVon ~= "" then
if not found then
t = t .. "von " .. z.AdresseVon
t = t .. "* [[" .. name .. "]]\n"
end
end
if (z.Adressart ~= "" or z.AdresseVon ~= "") and z.AdresseBis ~= "" then
else
t = t .. " "
t = t .. "* " .. name .. "\n"
end
end
if z.AdresseBis ~= "" then
end
t = t .. "bis " .. z.AdresseBis
end
 
if t ~= "" then
t = t .. "<br>" .. fab.zeileSemantikBrowsenAbfrage(fbdata)
end
 
-- Tab draus machen
t = fab.tab(t, args.kategorie)
-- mw.logObject(t, "t")
return t
end
 
function p.opferShoah(fbdata)
-- mw.log("opferShoah(fbdata)")
-- mw.logObject(fbdata, "fbdata")
-- Konsolenzeile zum Debuggen:
-- fbdata={pagename="Hallemannstraße 2, 2a"}; mw.logObject(p.opferShoah(fbdata))
 
-- DB-Abfrage
local query = "[[SubObjektTyp::Opfer der Shoah]]"
query = query .. "[[VonObjekt::" .. fbdata.pagename .. "]]"
query = query .. "|?Vorname"
query = query .. "|?Nachname"
query = query .. "|mainlabel=-"
query = query .. "|limit=100"
local ask_result = mw.smw.ask(query)
-- mw.logObject(ask_result, "ask_result")
    return ask_result
end
 
function p.getPlz(fbdata)
-- mw.log("getPlz(fbdata)")
-- mw.logObject(fbdata.strasse_hnr, "fbdata.strasse_hnr")
-- Konsolenzeile zum Debuggen:
-- =p.getPlz{strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11","13"},suspekt=false},{name="Schwabacher Straße",hausnummer={1}}}}}
local plz = ""
if #fbdata.strasse_hnr.strasse > 0 and not fbdata.strasse_hnr.strasse[1].suspekt then
-- Es wird angenommen, dass alle Gebäude die gleiche PLZ haben. Hausnummer muss nicht vorhanden sein
plz = geo.getPLZ(fbdata.strasse_hnr.strasse[1].name, fbdata.strasse_hnr.strasse[1].hausnummer[1])
else
end
-- mw.logObject(plz, "plz")
return plz
end
 
function p.teilDesGebaeudeKomplexes(fbdata)
-- mw.log("teilDesGebaeudeKomplexes(fbdata)")
-- mw.logObject(fbdata.pargs, "fbdata.pargs")
-- Konsolenzeile zum Debuggen:
-- =p.teilDesGebaeudeKomplexes{pargs={["TeilDesGebäudeKomplexes"]="Rathaus"},fullpagename="Badstraße 15",subpagename="Badstraße 15"}
local teil_des_gebaeude_komplexes = str.splitAndStrip(fbdata.pargs["TeilDesGebäudeKomplexes"], ";")
local query = "[[:+]][[!" .. fbdata.fullpagename .. "]][[Kategorie:Gebäude]][[StraßeHnr::" .. fbdata.subpagename .. "]] [[AnzahlGebäude::>2]]"
-- mw.log(query, "query")
local query_result = smw.getPages(query, true)
-- mw.logObject(query_result, "query_result")
teil_des_gebaeude_komplexes = com.append_tables(teil_des_gebaeude_komplexes, query_result)
-- mw.logObject(teil_des_gebaeude_komplexes, "teil_des_gebaeude_komplexes")
return teil_des_gebaeude_komplexes
end
 
function p.weiterleitung(fbdata)
-- mw.log("weiterleitung(fbdata)")
-- mw.logObject(fbdata.pargs, "fbdata.pargs")
-- Konsolenzeile zum Debuggen:
-- fab=require("Modul:Faktenbox/Work"); fbdata=fab.fbdata{pargs={location="Badstraße 15,Fürth,Bayern,Deutschland",["TeilDesGebäudeKomplexes"]="Badstraße 13, 15, 18, Pfisterstraße 50, 52"}}; print(p.weiterleitung(fbdata))
local t = "\n'''Dieses ist eine Gebäude-Weiterleitungs-Seite zum zugehörigen Gebäude-Komplex'''\n"
 
-- Geolokation location ermitteln
local location = fbdata.pargs["location"]
if location == nil and fbdata.pargs["lat"] ~= nil and fbdata.pargs["lon"] ~= nil then
location = fbdata.pargs["lat"] .. "," .. fbdata.pargs["lon"]
end
if location == nil then -- im Zweifelsfall generische location mittels Seitennamen
location = wik.pagename() .. ",Fürth,Bayern,Deutschland"
end
t = t .. "* Geolokation: " .. location .. "\n"
-- mw.log(location, "location")
 
-- Koordinate per #geocode ermitteln
local geocode = fbdata.frame:callParserFunction( "#geocode", location )
-- mw.log(geocode, "geocode")
if geocode == "Geocoding failed" then
t = t .. "Geokoordinate konnte nicht ermittelt werden<br>"
else
t = t .. "* Geokoordinate: [[Geokoordinate::" .. geocode .. "]]{{#set:Geolokation=" .. location .. "}}\n"
 
-- Teil des Gebäude Komplexes ermitteln
local teil_des_gebaeude_komplexes = p.teilDesGebaeudeKomplexes(fbdata)
if #teil_des_gebaeude_komplexes == 0 then
t = t .. "Fehler: Fehlende Angabe zum Gebäude-Komplex!<br>"
else
t = t .. "* Teil des Gebäude-Komplexes: "
for i, k in ipairs(teil_des_gebaeude_komplexes) do
if i > 1 then
t = t .. ", "
end
end
t = t .. ")"
t = t .. "[[TeilDesGebäudeKomplexes::" .. k .. "]]"
end
end
t = t .. "\n"
t = t .. "\n\n{{#widget:Redirect|to=" .. teil_des_gebaeude_komplexes[1] .. "}}\n\n"
t = t .. "... erfolgt in wenigen Sekunden.\n\n"
t = t .. "'''Die Weiterleitung kann im Formular deaktiviert werden.'''\n\n\n"
 
-- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...)
fbdata.positionscheck = false
t = t .. "{{#set:Seite=" .. fbdata.fullpagename .. "}}"
t = t .. fab.postprocess(fbdata)
end
end
end
end
-- mw.log("t = " .. t)
-- mw.logObject(t, "t")
return t
return t
end
end


return p
return p