Modul:Gebäude: Unterschied zwischen den Versionen
Aus FürthWiki
(zeileSemantikBrowsenAbfrage) |
(fix #LOCL AdresseVon AdresseBis) |
||
| (8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 9: | Zeile 9: | ||
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: | -- Konsolenzeile zum Debuggen: | ||
-- =p.Faktenbox{pargs={Bild="Schwabacher Straße 12 Dez 2020 1.jpg",["Straße"]="Schwabacher Straße",Hausnummer="12",["TeilDesGebäudeKomplexes"]="TDGK",AktenNr="D-5-63-000-1464",Objekt="Häusle"}} | -- =p.Faktenbox{pargs={Bild="Schwabacher Straße 12 Dez 2020 1.jpg",["Straße"]="Schwabacher Straße",Hausnummer="12",["TeilDesGebäudeKomplexes"]="TDGK",AktenNr="D-5-63-000-1464",Objekt="Häusle"}} | ||
| Zeile 27: | Zeile 27: | ||
fbdata.strasse_hnr = p.strasseHnrParser(fbdata) | fbdata.strasse_hnr = p.strasseHnrParser(fbdata) | ||
fbdata.plz = p.getPlz(fbdata) | fbdata.plz = p.getPlz(fbdata) | ||
-- Shoah-Abfrage | |||
fbdata.shoah = p.opferShoah(fbdata) | |||
-- Tabs einsammeln und zusammenfügen | -- Tabs einsammeln und zusammenfügen | ||
| Zeile 40: | Zeile 43: | ||
-- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...) | -- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...) | ||
t = t .. fab.common(fbdata) | t = t .. fab.common(fbdata) | ||
-- mw. | -- mw.logObject(t, "t") | ||
-- Pre-Processing und String-Länge checken | -- Pre-Processing und String-Länge checken | ||
t = fbdata.frame:preprocess(t) | t = fbdata.frame:preprocess(t) | ||
t = t .. com.returnStringCheck(t) | t = t .. com.returnStringCheck(t) | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
| Zeile 51: | Zeile 54: | ||
function p.datenTab(fbdata, args) | function p.datenTab(fbdata, args) | ||
-- mw.log("datenTab(fbdata, args)") | -- mw.log("datenTab(fbdata, args)") | ||
-- mw.logObject(fbdata) | -- mw.logObject(fbdata, "fbdata") | ||
-- mw.logObject(args) | -- mw.logObject(args, "args") | ||
--[[ Konsolenzeile zum Debuggen (Achtung! Bug in Fehlerbereinigungskonsole! Kann nur 1x ausgeführt werden!): | --[[ Konsolenzeile zum Debuggen (Achtung! Bug in Fehlerbereinigungskonsole! Kann nur 1x ausgeführt werden!): | ||
fab=require("Modul:Faktenbox/Work"); | fab=require("Modul:Faktenbox/Work"); | ||
| Zeile 92: | Zeile 95: | ||
t = t .. fab.zeile{attr_name = "TeilDesGebäudeKomplexes", attr_val = teil_des_gebaeude_komplexes, delimiter = ";", attr_text = "Teil des Gebäude-Komplexes"} | t = t .. fab.zeile{attr_name = "TeilDesGebäudeKomplexes", attr_val = teil_des_gebaeude_komplexes, delimiter = ";", attr_text = "Teil des Gebäude-Komplexes"} | ||
t = t .. fab.zeile{attr_name = "Baujahr", fbdata = fbdata, delimiter = ";"} | t = t .. fab.zeile{attr_name = "Baujahr", fbdata = fbdata, delimiter = ";"} | ||
t = t .. fab.zeile{attr_name = "DenkmalstatusBesteht", fbdata = fbdata} | t = t .. fab.zeile{attr_name = "DenkmalstatusBesteht", fbdata = fbdata} | ||
t = t .. fab.zeileAktenNr(fbdata) | t = t .. fab.zeileAktenNr(fbdata) | ||
t = t .. fab.zeile{attr_name = "Quellangaben", fbdata = fbdata, delimiter = ";"} | |||
t = t .. fab.zeile{attr_name = "Ehemals", fbdata = fbdata, attr_text = "Ehemals (abgerissen)"} | |||
t = t .. fab.zeile{attr_name = "Abbruchjahr", fbdata = fbdata, delimiter = ";"} | t = t .. fab.zeile{attr_name = "Abbruchjahr", fbdata = fbdata, delimiter = ";"} | ||
t = t .. fab.zeile{attr_name = "Baustil", fbdata = fbdata, delimiter = ";"} | t = t .. fab.zeile{attr_name = "Baustil", fbdata = fbdata, delimiter = ";"} | ||
| Zeile 100: | Zeile 104: | ||
t = t .. fab.zeile{attr_name = "Architekt", fbdata = fbdata, delimiter = ";"} | t = t .. fab.zeile{attr_name = "Architekt", fbdata = fbdata, delimiter = ";"} | ||
t = t .. fab.zeile{attr_name = "Maurermeister", fbdata = fbdata, delimiter = ";"} | t = t .. fab.zeile{attr_name = "Maurermeister", fbdata = fbdata, delimiter = ";"} | ||
t = t .. fab.zeileGeoDaten(fbdata) | t = t .. fab.zeileGeoDaten(fbdata) | ||
t = t .. "</dl>" | t = t .. "</dl>" | ||
| Zeile 107: | Zeile 110: | ||
-- Tab draus machen | -- Tab draus machen | ||
t = fab.tab(t, args.tabname or "Daten") | t = fab.tab(t, args.tabname or "Daten") | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
| Zeile 113: | Zeile 116: | ||
function p.kartenTab(fbdata) | function p.kartenTab(fbdata) | ||
-- mw.log("kartenTab(fbdata)") | -- mw.log("kartenTab(fbdata)") | ||
-- mw.logObject(fbdata) | -- mw.logObject(fbdata, "fbdata") | ||
-- Konsolenzeile zum Debuggen: | -- 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)) | -- fab=require("Modul:Faktenbox/Work"); fbdata=fab.fbdata{pargs={["Straße"]="Erlanger Straße",["Hausnummer"]="11"}}; fbdata.plz=90765; print(p.kartenTab(fbdata)) | ||
| Zeile 127: | Zeile 130: | ||
-- Tab draus machen | -- Tab draus machen | ||
t = fab.tab(t, "Karte") | t = fab.tab(t, "Karte") | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
| Zeile 133: | Zeile 136: | ||
function p.strasseHnrParser(fbdata) | function p.strasseHnrParser(fbdata) | ||
-- mw.log("strasseHnrProcessor(fbdata)") | -- mw.log("strasseHnrProcessor(fbdata)") | ||
-- mw.logObject(fbdata.pargs) | -- mw.logObject(fbdata.pargs, "fbdata.pargs") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- p.strasseHnrParser{pargs={["Straße"]="Elanger Straße",["Hausnummer"]="11;13",["Straße2"]="Frühlingstraße",["Hausnummer2"]="",["Straße3"]="",["Hausnummer3"]=""}} | -- p.strasseHnrParser{pargs={["Straße"]="Elanger Straße",["Hausnummer"]="11;13",["Straße2"]="Frühlingstraße",["Hausnummer2"]="",["Straße3"]="",["Hausnummer3"]=""}} | ||
| Zeile 147: | Zeile 150: | ||
} | } | ||
for _, sh in ipairs(strasse_hnr) do -- Straße/Hausnummern-Kombis durchitereieren | for _, sh in ipairs(strasse_hnr) do -- Straße/Hausnummern-Kombis durchitereieren | ||
local s = str.strip(sh[1]) -- Straße | local s = str.strip(sh[1]) -- Straße | ||
local hl = str.strip(sh[2]) -- 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 159: | Zeile 162: | ||
entry.hausnummer = {} | entry.hausnummer = {} | ||
entry.suspekt = false | entry.suspekt = false | ||
if hl == "" then -- leere Hausnummernliste | if hl == "" then -- leere Hausnummernliste | ||
result.suspekt = true | result.suspekt = true | ||
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 -- leere Hausnummer | if h == "" then -- leere Hausnummer | ||
result.suspekt = true | result.suspekt = true | ||
entry.suspekt = true | entry.suspekt = true | ||
| Zeile 177: | Zeile 180: | ||
end | end | ||
end | end | ||
-- mw.logObject(result) | -- mw.logObject(result, "result") | ||
return result | return result | ||
end | end | ||
| Zeile 183: | Zeile 186: | ||
function p.residenzTab(fbdata, args) | function p.residenzTab(fbdata, args) | ||
-- mw.log("residenzTab(fbdata, args)") | -- mw.log("residenzTab(fbdata, args)") | ||
-- mw.logObject(fbdata) | -- mw.logObject(fbdata, "fbdata") | ||
-- mw.logObject(args) | -- mw.logObject(args, "args") | ||
-- Konsolenzeile zum Debuggen: | -- 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") | -- =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") | ||
| Zeile 191: | Zeile 194: | ||
-- DB-Abfrage | -- DB-Abfrage | ||
local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. fbdata.subpagename.. "]][[-Has subobject.KlassenName::" .. args.klasse .. "]]" | local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. fbdata.subpagename.. "]][[-Has subobject.KlassenName::" .. args.klasse .. "]]" | ||
query = query .. "|?-has subobject.Seite#-=Seite|?Adressart|?AdresseVon# | query = query .. "|?-has subobject.Seite#-=Seite|?Adressart|?AdresseVon#LOCL|?AdresseBis#LOCL|mainlabel=-|limit=100" | ||
local ask_result = mw.smw.ask(query) | local ask_result = mw.smw.ask(query) | ||
-- mw.logObject(ask_result) | -- mw.logObject(ask_result, "ask_result") | ||
-- Zeilen zusammenbauen | -- Zeilen zusammenbauen | ||
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 .. " | t = t .. ")" | ||
end | |||
t = t .. "\n" | |||
end | |||
-- Shoah-Opfer | |||
if args.klasse == "Person" and com.isTrue(fbdata.pargs["ShoahTest"]) and fbdata.shoah ~= nil then | |||
for _, s in ipairs(fbdata.shoah) do | |||
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 | if not found then | ||
t = t .. " | t = t .. "* [[" .. name .. "]]\n" | ||
end | end | ||
else | |||
t = t .. "* " .. name .. "\n" | |||
end | end | ||
end | end | ||
end | |||
if t ~= "" then | |||
t = t .. "<br>" .. fab.zeileSemantikBrowsenAbfrage(fbdata) | |||
end | end | ||
-- Tab draus machen | -- Tab draus machen | ||
t = fab.tab(t, args.kategorie) | t = fab.tab(t, args.kategorie) | ||
-- mw. | -- mw.logObject(t, "t") | ||
return 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 | end | ||
function p.getPlz(fbdata) | function p.getPlz(fbdata) | ||
-- mw.log("getPlz(fbdata)") | -- mw.log("getPlz(fbdata)") | ||
-- mw.logObject(fbdata.strasse_hnr) | -- mw.logObject(fbdata.strasse_hnr, "fbdata.strasse_hnr") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p.getPlz{strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11","13"},suspekt=false},{name="Schwabacher Straße",hausnummer={1}}}}} | -- =p.getPlz{strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11","13"},suspekt=false},{name="Schwabacher Straße",hausnummer={1}}}}} | ||
| Zeile 243: | Zeile 287: | ||
else | else | ||
end | end | ||
-- mw.log("plz | -- mw.log(plz, "plz") | ||
return plz | return plz | ||
end | end | ||
| Zeile 249: | Zeile 293: | ||
function p.teilDesGebaeudeKomplexes(fbdata) | function p.teilDesGebaeudeKomplexes(fbdata) | ||
-- mw.log("teilDesGebaeudeKomplexes(fbdata)") | -- mw.log("teilDesGebaeudeKomplexes(fbdata)") | ||
-- mw.logObject(fbdata.pargs) | -- mw.logObject(fbdata.pargs, "fbdata.pargs") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p.teilDesGebaeudeKomplexes{pargs={["TeilDesGebäudeKomplexes"]="Rathaus"},fullpagename="Badstraße 15",subpagename="Badstraße 15"} | -- =p.teilDesGebaeudeKomplexes{pargs={["TeilDesGebäudeKomplexes"]="Rathaus"},fullpagename="Badstraße 15",subpagename="Badstraße 15"} | ||
| Zeile 255: | Zeile 299: | ||
teil_des_gebaeude_komplexes = str.splitAndStrip(teil_des_gebaeude_komplexes, ";") | teil_des_gebaeude_komplexes = str.splitAndStrip(teil_des_gebaeude_komplexes, ";") | ||
local query = "[[:+]][[!" .. fbdata.fullpagename .. "]][[Kategorie:Gebäude]][[StraßeHnr::" .. fbdata.subpagename .. "]] [[AnzahlGebäude::>2]]" | local query = "[[:+]][[!" .. fbdata.fullpagename .. "]][[Kategorie:Gebäude]][[StraßeHnr::" .. fbdata.subpagename .. "]] [[AnzahlGebäude::>2]]" | ||
-- mw.log("query | -- mw.log(query, "query") | ||
local query_result = que.getPages(query, true) | local query_result = que.getPages(query, true) | ||
-- mw.logObject(query_result) | -- mw.logObject(query_result, "query_result") | ||
teil_des_gebaeude_komplexes = com.append_tables(teil_des_gebaeude_komplexes, query_result) | teil_des_gebaeude_komplexes = com.append_tables(teil_des_gebaeude_komplexes, query_result) | ||
-- mw.logObject(teil_des_gebaeude_komplexes) | -- mw.logObject(teil_des_gebaeude_komplexes, "teil_des_gebaeude_komplexes") | ||
return teil_des_gebaeude_komplexes | return teil_des_gebaeude_komplexes | ||
end | end | ||
| Zeile 265: | Zeile 309: | ||
function p.weiterleitung(fbdata) | function p.weiterleitung(fbdata) | ||
-- mw.log("weiterleitung(fbdata)") | -- mw.log("weiterleitung(fbdata)") | ||
-- mw.logObject(fbdata.pargs) | -- mw.logObject(fbdata.pargs, "fbdata.pargs") | ||
-- Konsolenzeile zum Debuggen: | -- 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)) | -- 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)) | ||
| Zeile 271: | Zeile 315: | ||
-- Geolokation location ermitteln | -- Geolokation location ermitteln | ||
local location = fbdata.pargs["location"] or "" -- location vorhanden? | local location = fbdata.pargs["location"] or "" -- location vorhanden? | ||
if location == "" then | if location == "" then | ||
local lat = fbdata.pargs["lat"] or "" | local lat = fbdata.pargs["lat"] or "" -- lat/lon vorhanden? | ||
local lon = fbdata.pargs["lon"] or "" | local lon = fbdata.pargs["lon"] or "" | ||
if lat ~= "" and lon ~= "" then | if lat ~= "" and lon ~= "" then | ||
| Zeile 279: | Zeile 323: | ||
end | end | ||
end | end | ||
if location == "" then | if location == "" then -- im Zweifelsfall generische location mittels Seitennamen | ||
location = wik.pagename() .. ",Fürth,Bayern,Deutschland" | location = wik.pagename() .. ",Fürth,Bayern,Deutschland" | ||
end | end | ||
t = t .. "* Geolokation: " .. location .. "\n" | t = t .. "* Geolokation: " .. location .. "\n" | ||
-- mw.log(location, "location") | |||
-- Koordinate per #geocode ermitteln | -- Koordinate per #geocode ermitteln | ||
local geocode = fbdata.frame:callParserFunction( "#geocode", location ) | local geocode = fbdata.frame:callParserFunction( "#geocode", location ) | ||
-- mw.log(geocode, "geocode") | |||
if geocode == "Geocoding failed" then | if geocode == "Geocoding failed" then | ||
t = t .. "Geokoordinate konnte nicht ermittelt werden<br>" | t = t .. "Geokoordinate konnte nicht ermittelt werden<br>" | ||
| Zeile 306: | Zeile 350: | ||
end | end | ||
t = t .. "\n\n{{#widget:Redirect|to=" .. teil_des_gebaeude_komplexes[1] .. "}}\n\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, ...) | -- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...) | ||
| Zeile 312: | Zeile 358: | ||
end | end | ||
end | end | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
return p | return p | ||
Aktuelle Version vom 1. Dezember 2025, 09:41 Uhr
Seiten-Übersicht
| Hauptseite | Unterseiten | ||
|---|---|---|---|
| Allgemein | |||
| Faktenbox | Vorlagen | ||
| Formulare |
|
||
| Module | |||
| Abfrage | Vorlagen |
| |
| Formulare |
| ||
| Sonstige | |||
Siehe auch
local p = {} --p stands for package
local com = require("Modul:Common")
local str = require("Modul:String")
local geo = require("Modul:Geo")
local que = require("Modul:Queries")
local wik = require("Modul:Wiki")
local fab = require("Modul:Faktenbox")
function p.Faktenbox(frame)
-- mw.log("Faktenbox(frame)")
-- mw.logObject(frame, "frame")
-- Konsolenzeile zum Debuggen:
-- =p.Faktenbox{pargs={Bild="Schwabacher Straße 12 Dez 2020 1.jpg",["Straße"]="Schwabacher Straße",Hausnummer="12",["TeilDesGebäudeKomplexes"]="TDGK",AktenNr="D-5-63-000-1464",Objekt="Häusle"}}
local t = ""
-- Basis-Faktenbox-Daten (Klasse/Kategorie/Formular)
local fbdata = fab.fbdata(frame)
fbdata.klasse = {"Gebäude"}
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
-- Straße/Hausnummer Formular-Eingaben analysieren, Postleitzahl ermitteln
fbdata.strasse_hnr = p.strasseHnrParser(fbdata)
fbdata.plz = p.getPlz(fbdata)
-- Shoah-Abfrage
fbdata.shoah = p.opferShoah(fbdata)
-- Tabs einsammeln und zusammenfügen
t = "<div class = factbox><tabs>" ..
fab.bildTab(fbdata) ..
p.kartenTab(fbdata) ..
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"}) ..
"</tabs></div>"
end
-- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...)
t = t .. fab.common(fbdata)
-- mw.logObject(t, "t")
-- Pre-Processing und String-Länge checken
t = fbdata.frame:preprocess(t)
t = t .. com.returnStringCheck(t)
-- mw.logObject(t, "t")
return t
end
function p.datenTab(fbdata, args)
-- mw.log("datenTab(fbdata, args)")
-- mw.logObject(fbdata, "fbdata")
-- mw.logObject(args, "args")
--[[ Konsolenzeile zum Debuggen (Achtung! Bug in Fehlerbereinigungskonsole! Kann nur 1x ausgeführt werden!):
fab=require("Modul:Faktenbox/Work");
fbdata=fab.fbdata{pargs={
["Straße"]="Elanger Straße",
Hausnummer="11;13",
["TeilDesGebäudeKomplexes"]="TDGK",
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 {}
-- Teil des Gebäude Komplexes ermitteln
local teil_des_gebaeude_komplexes = p.teilDesGebaeudeKomplexes(fbdata)
-- Teil des Ensembles um "Ensemble " ergänzen
local teil_des_ensembles = str.splitAndStrip(fbdata.pargs["TeilDesEnsembles"] or "", ";")
for i = 1, #teil_des_ensembles do
teil_des_ensembles[i] = "Ensemble " .. teil_des_ensembles[i]
end
-- Zusammenbau
t = t .. "<dl class = 'dataTable'>"
t = t .. fab.zeileKategorieSeite(fbdata, args.kindex)
t = t .. fab.zeileStrasseHnr(fbdata)
t = t .. fab.zeile{attr_name = "PLZ", attr_val = fbdata.plz}
t = t .. fab.zeile{attr_name = "Objekt", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeile{attr_name = "TeilDesEnsembles", attr_val = teil_des_ensembles, delimiter = ";"}
t = t .. fab.zeile{attr_name = "TeilDesAreals", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeile{attr_name = "TeilDesGebäudeKomplexes", attr_val = teil_des_gebaeude_komplexes, delimiter = ";", attr_text = "Teil des Gebäude-Komplexes"}
t = t .. fab.zeile{attr_name = "Baujahr", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeile{attr_name = "DenkmalstatusBesteht", fbdata = fbdata}
t = t .. fab.zeileAktenNr(fbdata)
t = t .. fab.zeile{attr_name = "Quellangaben", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeile{attr_name = "Ehemals", fbdata = fbdata, attr_text = "Ehemals (abgerissen)"}
t = t .. fab.zeile{attr_name = "Abbruchjahr", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeile{attr_name = "Baustil", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeile{attr_name = "Bauherr", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeile{attr_name = "Architekt", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeile{attr_name = "Maurermeister", fbdata = fbdata, delimiter = ";"}
t = t .. fab.zeileGeoDaten(fbdata)
t = t .. "</dl>"
t = t .. fab.zeileSemantikBrowsenAbfrage(fbdata)
-- Tab draus machen
t = fab.tab(t, args.tabname or "Daten")
-- mw.logObject(t, "t")
return t
end
function p.kartenTab(fbdata)
-- mw.log("kartenTab(fbdata)")
-- mw.logObject(fbdata, "fbdata")
-- 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 = ""
if string.find(fbdata.pagename, ";") ~= nil then
t = "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!"
else
local args_karte = com.shallowcopy(fbdata.pargs)
args_karte["PLZ"] = fbdata.plz
args_karte["Debug"] = "Nein"
t = fbdata.frame:expandTemplate{title = 'Gebäude/Karte', args = args_karte}
end
-- Tab draus machen
t = fab.tab(t, "Karte")
-- mw.logObject(t, "t")
return t
end
function p.strasseHnrParser(fbdata)
-- mw.log("strasseHnrProcessor(fbdata)")
-- mw.logObject(fbdata.pargs, "fbdata.pargs")
-- Konsolenzeile zum Debuggen:
-- p.strasseHnrParser{pargs={["Straße"]="Elanger Straße",["Hausnummer"]="11;13",["Straße2"]="Frühlingstraße",["Hausnummer2"]="",["Straße3"]="",["Hausnummer3"]=""}}
local result = {}
result.strasse = {}
result.suspekt = false
result.anzahlGebaeude = 0
local strasse_hnr = {
{fbdata.pargs["Straße"] or "", fbdata.pargs["Hausnummer"] or ""},
{fbdata.pargs["Straße2"] or "", fbdata.pargs["Hausnummer2"] or ""},
{fbdata.pargs["Straße3"] or "", fbdata.pargs["Hausnummer3"] or ""}
}
for _, sh in ipairs(strasse_hnr) do -- Straße/Hausnummern-Kombis durchitereieren
local s = str.strip(sh[1]) -- Straße
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 hl ~= "" then -- aber Problem bei fehlender Straße, aber Hausnummernliste vorhanden
result.suspekt = true
end
else
local entry = {}
entry.name = s
entry.hausnummer = {}
entry.suspekt = false
if hl == "" then -- leere Hausnummernliste
result.suspekt = true
entry.suspekt = true
else
hl = str.splitAndStrip(hl, ";") -- Liste in table umwandeln
for _, h in ipairs(hl) do -- Hausnummern durchitereieren
if h == "" then -- leere Hausnummer
result.suspekt = true
entry.suspekt = true
else
table.insert(entry.hausnummer, h)
result.anzahlGebaeude = result.anzahlGebaeude + 1
end
end
end
table.insert(result.strasse, entry)
end
end
-- mw.logObject(result, "result")
return result
end
function p.residenzTab(fbdata, args)
-- 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 = ""
-- DB-Abfrage
local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. fbdata.subpagename.. "]][[-Has subobject.KlassenName::" .. args.klasse .. "]]"
query = query .. "|?-has subobject.Seite#-=Seite|?Adressart|?AdresseVon#LOCL|?AdresseBis#LOCL|mainlabel=-|limit=100"
local ask_result = mw.smw.ask(query)
-- mw.logObject(ask_result, "ask_result")
-- Zeilen zusammenbauen
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
t = t .. ")"
end
t = t .. "\n"
end
-- Shoah-Opfer
if args.klasse == "Person" and com.isTrue(fbdata.pargs["ShoahTest"]) and fbdata.shoah ~= nil then
for _, s in ipairs(fbdata.shoah) do
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
if not found then
t = t .. "* [[" .. name .. "]]\n"
end
else
t = t .. "* " .. name .. "\n"
end
end
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.log(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 = fbdata.pargs["TeilDesGebäudeKomplexes"] or ""
teil_des_gebaeude_komplexes = str.splitAndStrip(teil_des_gebaeude_komplexes, ";")
local query = "[[:+]][[!" .. fbdata.fullpagename .. "]][[Kategorie:Gebäude]][[StraßeHnr::" .. fbdata.subpagename .. "]] [[AnzahlGebäude::>2]]"
-- mw.log(query, "query")
local query_result = que.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"] or "" -- location vorhanden?
if location == "" then
local lat = fbdata.pargs["lat"] or "" -- lat/lon vorhanden?
local lon = fbdata.pargs["lon"] or ""
if lat ~= "" and lon ~= "" then
location = lat .. "," .. lon
end
end
if location == "" 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
t = t .. "[[TeilDesGebäudeKomplexes::" .. k .. "]]"
end
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, ...)
t = t .. "{{#set:Seite=" .. fbdata.fullpagename .. "}}"
t = t .. fab.common(fbdata)
end
end
-- mw.logObject(t, "t")
return t
end
return p