Module:Item as quest reward

From Little-Known Galaxy Wiki
Jump to navigation Jump to search

This module is used in the {{Item as quest reward}} template.

Subpages

local argsUtil = require("Module:ArgsUtil")
local cargoUtil = require("Module:CargoUtil")
local iconListModule = require("Module:Icon list")

local p = {}

function p.main(frame)
    local args = argsUtil.merge(frame.args, frame:getParent().args)
    local itemName = args[1] or mw.title.getCurrentTitle().text

    -- Manually escape single quotes by doubling them
    local escapedItemName = itemName:gsub("'", "''")
    
    -- Construct the SQL WHERE clause manually
    local whereClause = "`cargo__missionRewards`.`rewards`='" .. escapedItemName .. "'"
        .. " OR `cargo__missionRewards`.`rewards`='" .. escapedItemName .. " recipe'"
        .. " OR `cargo__missionRewards`.`rewards`='" .. escapedItemName .. " data'"
        .. " OR `cargo__missionRewards`.`rewards`='" .. escapedItemName .. " schematic'"

    local queryOptions = {
        tables = "Missions, missionNPCs, missionRequirements, missionRewards, missionRewards=mr2",
        fields = "Missions._pageTitle, Missions.name, Missions.objective, GROUP_CONCAT(DISTINCT CONCAT(missionRequirements.requirements, '*', COALESCE(missionRequirements.quantity, 1), '/', COALESCE(missionRequirements.quality, 0)))=requirements, GROUP_CONCAT(DISTINCT CONCAT(mr2.rewards, '*', COALESCE(mr2.quantity, 1)))=rewards",
        join = "Missions.missionID=missionNPCs.missionID, Missions.missionID=missionRequirements.missionID, Missions.missionID=mr2.missionID, Missions.missionID=missionRewards.missionID",
        where = whereClause,
        groupBy = "Missions.missionID",
        limit = 100,
        orderBy = ""
    }

    local results = cargoUtil.queryData(queryOptions)

    -- Debugging: Log the raw results
    mw.logObject(results)

    -- Check if results are empty
    if not results or #results == 0 then
        return "No missions reward '''" .. itemName .. "''' when they are completed."
    end

    -- Build the result table
    local html = mw.html.create('table')
        :addClass('lkg-table tablelarge tdt3 td20wid3 tdt4 td20wid4')
        :tag('tr')
            :tag('th'):wikitext('Mission Name'):done()
            :tag('th'):wikitext('Mission Objective'):done()
            :tag('th'):wikitext('Mission Requirements'):done()
            :tag('th'):wikitext('Mission Rewards'):done()
        :done()

    for _, row in ipairs(results) do
        -- Debugging: Log each row's data to check its structure
        mw.log("Row data:", row)

        -- Retrieve and log specific fields
        local pagename = row["Missions._pageTitle"]
        local questName = row["Missions.name"]
        local objective = row["Missions.objective"]
        local requirements = row["requirements"]
        local rewards = row["rewards"]
        mw.log("Page Name:", pagename, "Quest Name:", questName, "Objective:", objective, "Requirements:", requirements, "Rewards:", rewards)
        
        -- Pass the requirements and rewards to the Icon list module
        local reqList = tostring(iconListModule._main{ requirements, delim = ',' })
        local rewardsList = tostring(iconListModule._main{ rewards, delim = ',' })

        -- Build the table row with retrieved data
        html:tag('tr')
            :tag('td'):wikitext("[[" .. pagename  .. "|" .. (questName or 'N/A') .. "]]"):done()
            :tag('td'):wikitext(objective or 'N/A'):done()
            :tag('td'):wikitext(reqList or 'N/A'):done()
            :tag('td'):wikitext(rewardsList or 'N/A'):done()
        :done()
    end

    return tostring(html)
end

return p