20.564
Bearbeitungen
Keine Bearbeitungszusammenfassung |
(- fab.subpagesPresent(fbdata)) |
||
| (75 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
local | |||
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 fab = require("Modul:Faktenbox") | |||
local kar = require("Modul:Karte") | |||
function p.Faktenbox(frame) | function p.Faktenbox(frame) | ||
-- mw.log("Faktenbox(frame)") | |||
-- mw.logObject(frame, "frame") | |||
local t = "" | |||
local | -- Basis-Faktenbox-Daten (Klasse/Kategorie/Formular) | ||
local fbdata = fab.getFbdata(frame) | |||
if | 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 = 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) | |||
-- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...) | |||
t = t .. fab.postprocess(fbdata) | |||
end | end | ||
-- Pre-Processing und String-Länge checken | |||
-- mw.logObject(t, "t") | |||
t = fbdata.frame:preprocess(t) | |||
return t | |||
end | |||
function p.datenTab(fbdata, args) | |||
-- | -- mw.log("datenTab(fbdata, args)") | ||
-- mw.logObject(fbdata, "fbdata") | |||
local | -- mw.logObject(args, "args") | ||
--[[ Konsolenzeile zum Debuggen (Achtung! Bug in Fehlerbereinigungskonsole! Kann nur 1x ausgeführt werden!): | |||
fab=require("Modul:Faktenbox/Work"); | |||
local | fbdata=fab.fbdata{pargs={ | ||
local | ["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"], ";") | |||
for i = 1, #teil_des_ensembles do | |||
teil_des_ensembles[i] = "Ensemble " .. teil_des_ensembles[i] | |||
end | end | ||
-- Zusammenbau | |||
t = t .. fab.zeileKategorieSeite(fbdata, args.kindex) | |||
t = t .. fab.zeileStrasseHnr(fbdata) | |||
t = t .. fab.zeile{fbdata = fbdata, attr_name = "PLZ", attr_val = fbdata.plz} | |||
t = t .. fab.zeile{fbdata = fbdata, attr_name = "Objekt", delimiter = ";"} | |||
t = t .. fab.zeile{fbdata = fbdata, attr_name = "TeilDesEnsembles", attr_val = teil_des_ensembles, delimiter = ";"} | |||
t = t .. fab.zeile{fbdata = fbdata, attr_name = "TeilDesAreals", delimiter = ";"} | |||
t = t .. fab.zeile{fbdata = fbdata, attr_name = "TeilDesGebäudeKomplexes", attr_val = teil_des_gebaeude_komplexes, delimiter = ";"} | |||
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) | |||
-- | -- Tab draus machen | ||
t = fab.tab(t, args.tabname or "Daten") | |||
-- mw.logObject(t, "t") | |||
return t | |||
end | end | ||
function p. | 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 = t .. "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!" | |||
elseif kar.kartenArgsVorhanden(fbdata.pargs) or -- Soll überhaupt eine Karte angezeigt werden? | |||
not com.isTrue(fbdata.pargs["Ehemals"]) or | |||
fbdata.pargs["Straße"] ~= nil or | |||
fbdata.pargs["Straße2"] ~= nil or | |||
fbdata.pargs["Straße3"] ~= nil then | |||
-- Karten-Argumente übernehmen und aufbereiten | |||
local args = fab.getKartenArgs(fbdata, 18) | |||
-- locationlist ermitteln | |||
local pargs = com.shallowcopy(fbdata.pargs) -- to do: in Lua überführen | |||
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 | |||
-- Tab draus machen | |||
t = fab.tab(t, "Karte") | |||
-- mw.logObject(t, "t") | |||
return t | |||
end | end | ||
function p. | 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 ish, 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 | |||
if ish ~= 2 then -- Sonderfall Ecke | |||
result.suspekt = true | |||
end | |||
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 | end | ||
function p. | 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 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 | end | ||
function p. | 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. | function p.getPlz(fbdata) | ||
-- | -- mw.log("getPlz(fbdata)") | ||
local | -- mw.logObject(fbdata.strasse_hnr, "fbdata.strasse_hnr") | ||
-- Konsolenzeile zum Debuggen: | |||
if not | -- =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 | end | ||
return | -- mw.logObject(plz, "plz") | ||
return plz | |||
end | end | ||
function p. | 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 | end | ||
function p. | 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 | |||
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, ...) | |||
fbdata.positionscheck = false | |||
t = t .. "{{#set:Seite=" .. fbdata.fullpagename .. "}}" | |||
t = t .. fab.postprocess(fbdata) | |||
end | |||
end | |||
-- mw.logObject(t, "t") | |||
return t | |||
end | end | ||
return p | return p | ||