Modul:Briefspielnews

Aus GaretienWiki
Version vom 7. Oktober 2024, 17:14 Uhr von VolkoV (D | B)
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;text-overflow:ellipsis\"|"..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%;\"|&nbsp;"
			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:40%\"|"..kurzbeschreibung
			result=result.."\n|style=\"width:25%\"|"
		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