Zuletzt bearbeitet vor einem Monat
von Xineohp1506

EpisodeOutput

Die Dokumentation für dieses Modul kann unter Modul:Studio/EpisodeOutput/Doku erstellt werden

local episodeOutput = {}
local helper = require('Module:Studio/Helper')
local getArgs = require('Module:Arguments').getArgs

function episodeOutput.inside(frame, KategorieIntern)
	local args = frame.args
	KategorieIntern = args["KategorieIntern"] or args[1]  -- Entweder benannter oder erster Parameter

	if not mw.smw then
		return "Semantic MediaWiki-Erweiterung nicht gefunden."
	end

	if not KategorieIntern or KategorieIntern == "" then
		return "Kein Projekt angegeben."
	end

	-- Abfrage-String für Studio-Projekt
	local query = string.format(
		"[[STUDIO:KategorieIntern::%s]][[STUDIO:Typ::Episode]]"
		.. "|?STUDIO:Nummer"
		.. "|?STUDIO:Titel"
		.. "|?STUDIO:Dateiname"
		.. "|?STUDIO:CUT_ADDS",
		KategorieIntern
	)

	local queryResult = mw.smw.getQueryResult(query)
	if not queryResult or not queryResult.results then
		return "Keine Episoden für dieses Projekt gefunden."
	end

	-- Episoden in Tabgruppen (50er Blöcke)
	local tabGroups = {}
	for _, result in ipairs(queryResult.results) do
		local nummer = tonumber(result.printouts["STUDIO:Nummer"] and result.printouts["STUDIO:Nummer"][1]) or 0
		local titel = tostring(result.printouts["STUDIO:Titel"] and result.printouts["STUDIO:Titel"][1]) or "Ohne Titel"
		local dateiname = tostring(result.printouts["STUDIO:Dateiname"] and result.printouts["STUDIO:Dateiname"][1]) or "-"
		local cutAdds = tostring(result.printouts["STUDIO:CUT_ADDS"] and result.printouts["STUDIO:CUT_ADDS"][1]) or ""
		local cutStatus = (cutAdds ~= "") and "ja" or "nein"

		local tabName = string.format("%03d–%03d", math.floor((nummer - 1) / 50) * 50 + 1, math.floor((nummer - 1) / 50) * 50 + 50)

		if not tabGroups[tabName] then
			tabGroups[tabName] = {}
		end

		-- Zielseite (z.B. Studio:PROJEKT/001)
		local subPage = string.format("Studio:%s/%03d", KategorieIntern, nummer)
		local episodePage = string.format("[[%s|Seite]]", subPage)

		-- Echter Formular-Link
		local fullPageName = string.format("Studio:%s/%03d", KategorieIntern, nummer)
		local encodedPage = mw.uri.encode(fullPageName, "WIKI")
		local formEditLink = string.format("[[Special:FormEdit/Studio:Episoden/%s|Bearbeiten]]", encodedPage)

		table.insert(tabGroups[tabName], string.format(
			"<tr><td>%03d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",
			nummer,
			mw.text.nowiki(titel),
			mw.text.nowiki(dateiname),
			cutStatus,
			episodePage,
			formEditLink
		))
	end

	-- TabberNeue-Nested Syntax via Parserfunktion
	local innerTabs = {}
	for tabName, rows in pairs(tabGroups) do
		table.insert(innerTabs, string.format(
			"%s=\n\n{{{!}} class='studio-tabber-episodentabelle'\n!Nr.!!Titel!!Dateiname!!CUT_ADDS!!Seite!!Bearbeiten\n%s\n{{!}}}",
			tabName,
			table.concat(rows, "\n")
		))
	end
	
    local separator = frame:preprocess("{{!}}-{{!}}")
    local fullTabber = "{{#tag:tabber|\n" .. table.concat(innerTabs, "\n" .. separator .. "\n") .. "\n}}"

	return frame:preprocess(fullTabber)
end

return episodeOutput