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 | local work = false | ||
local com = require("Modul:Common") | |||
local str = require("Modul:String") | local str = require("Modul:String") | ||
local geo = require(" | 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) | ||
-- 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 | local args | ||
if frame.parentargs then | |||
if | args = frame.parentargs | ||
noframe = true | |||
else | |||
args = frame:getParent().args | |||
end | end | ||
local | -- Klasse/Kategorie setzen | ||
local klasse = "Gebäude" | |||
if | 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 | end | ||
-- | -- Daten-Tab bauen (immer vorhanden) | ||
local | local datenTab = p.datenTab{ | ||
local | frame = frame, | ||
args = args, | |||
kategorie = kategorie, | |||
local | 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 | end | ||
local | -- 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 | end | ||
local | -- 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 | -- 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 | end | ||
function p. | 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 | end | ||
function p. | 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 | end | ||
function p. | 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 | end | ||
function p. | 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 | end | ||
return p | return p | ||
Version vom 10. Oktober 2025, 12:25 Uhr
Seiten-Übersicht
| Hauptseite | Unterseiten | ||
|---|---|---|---|
| Allgemein | |||
| Faktenbox | Vorlagen | ||
| Formulare |
|
||
| Module | |||
| Abfrage | Vorlagen |
| |
| Formulare |
| ||
| Sonstige | |||
Siehe auch
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