Modul:Briefspielnews
Zur Navigation springen
Zur Suche springen
Die Dokumentation für dieses Modul kann unter Modul:Briefspielnews/Doku erstellt werden
require("Modul:Hilfsfunktionen")
require("Modul:Text")
local p = {}
--wandelt ein ISO-Datum in ein Time-Object um
function parseISO(str)
local y,m,d,h,i,s=str:match("(%d%d%d%d)-(%d?%d?)-(%d?%d?)T(%d?%d?):(%d?%d?):(%d?%d?)")
return os.time({year=y,month=m,day=d,hour=h,min=i,sec=s})
end
--Hole Details zu einer Briefspielreihe
function holeReihenDetails(reihe)
local reihendetails=mw.smw.ask("{{#ask: [["..reihe.."]]"
.."|?#-=Reihe"
.."|?Kurzbeschreibung#"
.."|?Wappen ist#"
.."|?Reihenautoren"
.."|limit=1"
.."|offset=0"
.."|searchlabel=")
if reihendetails==nil then
return {
[1]={
["Kurzbeschreibung"]="",
["Reihe"]=reihe,
["Reihenautoren"]="",
["Wappen ist"]="Datei:Wappen blanko.svg"
}
}
end
if reihendetails[1]["Kurzbeschreibung"]==nil then
reihendetails[1]["Kurzbeschreibung"]=""
end
if reihendetails[1]["Reihe"]==nil then
reihendetails[1]["Reihe"]=reihe
end
if reihendetails[1]["Reihenautoren"]==nil then
reihendetails[1]["Reihenautoren"]=""
end
if reihendetails[1]["Wappen ist"]==nil then
reihendetails[1]["Wappen ist"]="Datei:Wappen blanko.svg"
end
return reihendetails
end
--Hole die anzahl neuesten Kapitel neuer als alter
function holeKapitel(anzahl,alter)
local alternum=tonumber(alter)
local mindat=os.time();
mindat=mindat-86400*alternum;
local kapitel=mw.smw.ask("{{#ask: [[-has subobject::+]] [[Kapiteldatum::>"..os.date("%Y-%m-%d",mindat).."]]"
.."|?#-=Kapitel"
.."|?Kurzbeschreibung#"
.."|?Kapitelname ist"
.."|?Reihe ist"
.."|?Kapiteldatum#ISO"
.."|limit="..anzahl
.."|order=desc"
.."|sort=Kapiteldatum"
.."|offset=0"
.."|searchlabel=")
if kapitel==nil then
return {}
end
return kapitel
end
--Sortierfunktion für die Reihen
function sortReihe(t,a,b)
return t[b]["Reihedatum"]<t[a]["Reihedatum"]
end
--Formatierung der Ausgabe
function ausgabe(kapitel,alter,highlight)
local alternum=tonumber(alter)
local highlightnum=tonumber(highlight)
local result=""
local now=os.time()
local reihe={}
--Teile die Kapitel auf die Reihen auf
for k,kap in spairs(kapitel) do
kap["Datum"]=parseISO(kap["Kapiteldatum"])
local r=kap["Reihe ist"]
if reihe[r]==nil then
reihe[r]={}
reihe[r]["Kapitel"]={}
reihe[r]["Reihedatum"]=kap["Datum"]
end
table.insert(reihe[r]["Kapitel"],kap)
if kap["Datum"]>reihe[r]["Reihedatum"] then
reihe[r]["Reihedatum"]=kap["Datum"]
end
end
--Gebe die Reihen aus
for r,rei in spairs(reihe,sortReihe) do
local reihendetails=holeReihenDetails(r.." — Briefspielreihe")
local rdiff=os.difftime(now,rei["Reihedatum"])/86400
local rclass="dunkel"
if rdiff>highlightnum then
rclass="hell"
end
result=result.."\n{| class=\"tabellehuebsch\" style=\"width:100%;border-collapse:collapse\" class=\"mw-collapsible mw-collapsed\""
result=result.."\n|- class=\""..rclass.."\""
result=result.."\n! style=\"width:5%;text-align:center;border-top:1px solid gray\"|[["..reihendetails[1]["Wappen ist"].."|x30px|link=]]"
result=result.."\n! style=\"width:10%;text-align:left;border-top:1px solid gray\"|"..os.date("%Y-%m-%d",rei["Reihedatum"])
result=result.."\n! style=\"width:20%;text-align:left;border-top:1px solid gray\"|[["..r.." — Briefspielreihe|"..r.."]]"
result=result.."\n! style=\"width:40%;text-align:left;border-top:1px solid gray\"|"..reihendetails[1]["Kurzbeschreibung"]
result=result.."\n! style=\"width:25%;text-align:left;border-top:1px solid gray;\"|"..reihendetails[1]["Reihenautoren"]
for k,kap in spairs(rei["Kapitel"]) do
local diff=os.difftime(now,kap["Datum"])/86400
local kurzbeschreibung=kap["Kurzbeschreibung"]
if kurzbeschreibung==nil then
kurzbeschreibung=""
end
local class="dunkel"
if diff>highlightnum then
class="hell"
end
result=result.."\n|- class=\""..class.."\""
result=result.."\n|style=\"width:5%;\"| "
result=result.."\n|style=\"width:10%\"|"..os.date("%Y-%m-%d",kap["Datum"])
result=result.."\n|style=\"width:20%\"|[["..kap["Kapitel"].."|"..kap["Kapitelname ist"].."]]"
result=result.."\n|style=\"width:65%\" colspan=\"2\"|"..kurzbeschreibung
end
result=result.."\n|}"
end
return result
end
--Aufzurufende Funktion
function p.news(frame)
local anzahl=robusttrim(frame.args[1])
if(anzahl=='') then anzahl='10' end
local alter=robusttrim(frame.args[2])
if(alter=='') then anzahl='7' end
local highlight=robusttrim(frame.args[3])
if(highlight=='') then anzahl='30' end
local kapitel=holeKapitel(anzahl,alter)
return ausgabe(kapitel,alter,highlight)
end
return p