Zuletzt bearbeitet vor einem Monat
von Xineohp1506

Buch

Die Dokumentation für dieses Modul kann unter Modul:Publikation/Buch/Doku erstellt werden

local smw = require('Module:SMW')
local getArgs = require('Module:Arguments').getArgs

local buch = {}

-- Funktion zum holen des Seitentitels mithilfe der Serien-ID
function buch.getSeriesPageTitle(frame)
    if not mw.smw then
        return "Semantic MediaWiki-Erweiterung nicht gefunden."
    end

    local queryResult = mw.smw.getQueryResult(frame.args)

    -- Kein Ergebnis gefunden
    if not queryResult or not queryResult.results or not queryResult.results[1] then
        return "Keine Ergebnisse gefunden."
    end

    -- Seitentitel extrahieren
    local results = queryResult.results
    if results[1].fulltext then
        return results[1].fulltext
    else
        return "Kein Seitentitel gefunden."
    end
end

-- Funktion zur Extraktion der Gesamtbände aus der Serienseite
function buch.getCompleteVolumesByTitle(frame)
    if not mw.smw then
        return "Semantic MediaWiki-Erweiterung nicht gefunden."
    end

    local page = frame.args[1]  -- Seitentitel
    local attribute = frame.args[2]  -- Attributname

    -- Überprüfen, ob die erforderlichen Parameter vorhanden sind
    if not page or not attribute then
        return "Seite oder Attribut nicht angegeben."
    end

    -- Abfrage erstellen
    local query = "[[" .. page .. "]]|?" .. attribute .. "|limit=1"
    local result = mw.smw.ask(query)

    -- Kein Ergebnis gefunden
    if not result then
        return "Keine Ergebnisse gefunden."
    end

    -- Ergebnis verarbeiten
    for title, data in pairs(result) do
        if data[attribute] then
            return tostring(data[attribute])
        end
    end

    return "Attribut nicht gefunden."
end

-- Hauptfunktion für die Buchdarstellung
function buch.render(frame, parentModule)
    local args = frame:getParent().args
    local title = args["Titel"] or "Unbekannt"
    local author = args["Autor"] or "Unbekannt"
    local seriesID = args["Hat Serie"] or nil
    local volume = args["Band"] or "Unbekannt"
    local bandAusgabe = ""

    -- Serienseite abrufen
    if seriesID then
        local seriesPageTitle = buch.getSeriesPageTitle({ args = { "[[SerienID::" .. seriesID .. "]]" } })
        
        if seriesPageTitle and seriesPageTitle ~= "Keine Ergebnisse gefunden." then
            -- Gesamtbände abrufen
            local completeVolumes = buch.getCompleteVolumesByTitle(seriesPageTitle, "Complete volumes")

            if completeVolumes and completeVolumes ~= "Keine Ergebnisse gefunden." and completeVolumes ~= "Attribut nicht gefunden." then
                bandAusgabe = "Band " .. volume .. " von " .. completeVolumes
            else
                bandAusgabe = "Band " .. volume .. " (Gesamtbände nicht verfügbar)"
            end
        else
            bandAusgabe = "Band " .. volume .. " (Serienseite nicht verfügbar)"
        end
    else
        bandAusgabe = "Band " .. volume
    end

    -- Ausgabe der Buchdetails
    local result = "<div class='book-infobox'>"
    result = result .. "<b>Titel:</b> " .. title .. "<br>"
    result = result .. "<b>Autor(en):</b> " .. author .. "<br>"
    result = result .. "<b>" .. bandAusgabe .. "</b><br>"
    result = result .. "</div>"

    return result
end

return buch