Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:MatchDay: Difference between revisions

From eSportsAmaze
Created page with "local p = {} local cargo = mw.ext.cargo function p.store(frame) local args = frame:getParent().args local tournament = args.tournament or mw.title.getCurrentTitle().text local date = args.date or "" local stage = args.stage or "" if date == "" then return "Error: Date is required." end -- 1. Look up the Game Type from Tournaments Table local game = "BGMI" -- Default fallback local match_type = "BR" if cargo and cargo.query..."
 
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}
local cargo = mw.ext.cargo
local cargo = mw.ext.cargo
local function sqlEscape(s)
    if not s then return "" end
    s = s:gsub("\\", "\\\\")
    s = s:gsub("'", "\\'")
    return s
end


function p.store(frame)
function p.store(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
     local tournament = args.tournament or mw.title.getCurrentTitle().text
    local pageTitle = mw.title.getCurrentTitle().text
     local tournament = args.tournament
 
    if not tournament or tournament == "" then
        local parts = mw.text.split(pageTitle, '/')
        if parts[2] == "Tournaments" and parts[3] then
            tournament = parts[3]
        else
            tournament = mw.title.getCurrentTitle().baseText
        end
    end
 
     local date = args.date or ""
     local date = args.date or ""
     local stage = args.stage or ""
     local stage = args.stage or ""
      
      
    -- TIMEZONE LOGIC
    local timezone = args.timezone or "IST"
    local tz_offset = "+00:00"
    if timezone == "IST" then tz_offset = "+05:30"
    elseif timezone == "JST" then tz_offset = "+09:00"
    elseif timezone == "PST" then tz_offset = "-08:00"
    elseif timezone == "EST" then tz_offset = "-05:00"
    elseif timezone == "CET" then tz_offset = "+01:00"
    elseif timezone:match("^[%+%-]%d%d:%d%d$") then tz_offset = timezone
    end
     if date == "" then return "Error: Date is required." end
     if date == "" then return "Error: Date is required." end


    -- 1. Look up the Game Type from Tournaments Table
     local game = "BGMI"  
     local game = "BGMI" -- Default fallback
     local match_type = "BR"  
     local match_type = "BR"
 
   
     if cargo and cargo.query then
     if cargo and cargo.query then
         local tData = cargo.query("Tournaments", "game", { where = "name='" .. tournament:gsub("'", "\\'") .. "'", limit = 1 })
         local tData = cargo.query("Tournaments", "game", { where = "name='" .. sqlEscape(tournament) .. "'", limit = 1 })
         if tData and #tData > 0 and tData[1].game then
         if tData and #tData > 0 and tData[1].game then
             game = tData[1].game
             game = tData[1].game
             local gLower = game:lower()
             local gLower = game:lower()
             if gLower:find("pokemon") or gLower:find("mlbb") or gLower:find("honor of kings") then
             local vs_games = {"pokemon", "mlbb", "mobile legends", "honor of kings", "hok", "league of legends", "lol", "dota", "counter-strike", "cs2", "valorant", "rainbow six", "r6", "overwatch", "ow2", "rocket league", "ea sports fc", "fifa", "street fighter", "tekken", "fatal fury", "starcraft", "crossfire", "chess", "black ops", "modern warfare"}
                 match_type = "MOBA"
            for _, v in ipairs(vs_games) do
                 if gLower:find(v) then match_type = "VS"; break end
             end
             end
         end
         end
     end
     end


     -- 2. Build the Match Data JSON
     -- MULTIPLE STREAMS LOGIC
    local streams = {}
    for k, v in pairs(args) do
        if type(k) == "string" and k:match("^stream") and v ~= "" then
            local label = "Watch"
            if k:match("^stream_(.+)$") then
                label = k:match("^stream_(.+)$")
                label = label:gsub("_", " ") -- Convert underscores to spaces (e.g., Watch_Party -> Watch Party)
            end
            streams[label] = v
        end
    end
   
    local stream_json = ""
    if next(streams) ~= nil then
        stream_json = mw.text.jsonEncode(streams)
    end
 
    -- MATCH DATA LOGIC
     local matches = {}
     local matches = {}
     for i = 1, 15 do
     for i = 1, 15 do
         local mTime = args['m'..i..'_time']
         local mTime = args['m'..i..'_time']
         if mTime and mTime ~= "" then
         if mTime and mTime ~= "" then
             local match = { time = mTime }
             local match = {}
            match.time = date .. "T" .. mTime .. ":00" .. tz_offset
              
              
            -- If Battle Royale
             if match_type == "BR" then
             if match_type == "BR" then
                 match.map = args['m'..i..'_map'] or "TBD"
                 match.map = args['m'..i..'_map'] or "TBD"
                 match.group = args['m'..i..'_group'] or ""
                 match.group = args['m'..i..'_group'] or ""
            -- If MOBA
             else
             else
                 match.t1 = args['m'..i..'_t1'] or "TBD"
                 match.t1 = args['m'..i..'_t1'] or "TBD"
Line 42: Line 88:
                 match.group = args['m'..i..'_group'] or ""
                 match.group = args['m'..i..'_group'] or ""
             end
             end
           
             table.insert(matches, match)
             table.insert(matches, match)
         end
         end
     end
     end
   
 
    -- Convert Lua table to JSON string for storage
     local json_data = mw.text.jsonEncode(matches)
     local json_data = mw.text.jsonEncode(matches)


    -- 3. Store in Cargo
     if cargo and cargo.store then
     if cargo and cargo.store then
         cargo.store("Tournament_Schedule", {
         cargo.store("Tournament_Schedule", {
Line 58: Line 101:
             date = date,
             date = date,
             stage = stage,
             stage = stage,
            stream = stream_json,
             day_data = json_data
             day_data = json_data
         })
         })
     end
     end


    -- 4. Temporary Visual Output (So you know it worked before we build the calendar UI)
     return "<div style='display:none;'>Schedule saved.</div>"
     return "<div style='display:none;'>Schedule saved for " .. date .. " (" .. match_type .. ")</div>"
end
end


return p
return p

Latest revision as of 01:33, 3 March 2026

Documentation for this module may be created at Module:MatchDay/doc

local p = {}
local cargo = mw.ext.cargo

local function sqlEscape(s)
    if not s then return "" end
    s = s:gsub("\\", "\\\\")
    s = s:gsub("'", "\\'")
    return s
end

function p.store(frame)
    local args = frame:getParent().args
    local pageTitle = mw.title.getCurrentTitle().text
    local tournament = args.tournament

    if not tournament or tournament == "" then
        local parts = mw.text.split(pageTitle, '/')
        if parts[2] == "Tournaments" and parts[3] then
            tournament = parts[3]
        else
            tournament = mw.title.getCurrentTitle().baseText
        end
    end

    local date = args.date or ""
    local stage = args.stage or ""
    
    -- TIMEZONE LOGIC
    local timezone = args.timezone or "IST"
    local tz_offset = "+00:00"
    if timezone == "IST" then tz_offset = "+05:30"
    elseif timezone == "JST" then tz_offset = "+09:00"
    elseif timezone == "PST" then tz_offset = "-08:00"
    elseif timezone == "EST" then tz_offset = "-05:00"
    elseif timezone == "CET" then tz_offset = "+01:00"
    elseif timezone:match("^[%+%-]%d%d:%d%d$") then tz_offset = timezone
    end

    if date == "" then return "Error: Date is required." end

    local game = "BGMI" 
    local match_type = "BR" 

    if cargo and cargo.query then
        local tData = cargo.query("Tournaments", "game", { where = "name='" .. sqlEscape(tournament) .. "'", limit = 1 })
        if tData and #tData > 0 and tData[1].game then
            game = tData[1].game
            local gLower = game:lower()
            local vs_games = {"pokemon", "mlbb", "mobile legends", "honor of kings", "hok", "league of legends", "lol", "dota", "counter-strike", "cs2", "valorant", "rainbow six", "r6", "overwatch", "ow2", "rocket league", "ea sports fc", "fifa", "street fighter", "tekken", "fatal fury", "starcraft", "crossfire", "chess", "black ops", "modern warfare"}
            for _, v in ipairs(vs_games) do
                if gLower:find(v) then match_type = "VS"; break end
            end
        end
    end

    -- MULTIPLE STREAMS LOGIC
    local streams = {}
    for k, v in pairs(args) do
        if type(k) == "string" and k:match("^stream") and v ~= "" then
            local label = "Watch"
            if k:match("^stream_(.+)$") then
                label = k:match("^stream_(.+)$")
                label = label:gsub("_", " ") -- Convert underscores to spaces (e.g., Watch_Party -> Watch Party)
            end
            streams[label] = v
        end
    end
    
    local stream_json = ""
    if next(streams) ~= nil then
        stream_json = mw.text.jsonEncode(streams)
    end

    -- MATCH DATA LOGIC
    local matches = {}
    for i = 1, 15 do
        local mTime = args['m'..i..'_time']
        if mTime and mTime ~= "" then
            local match = {}
            match.time = date .. "T" .. mTime .. ":00" .. tz_offset
            
            if match_type == "BR" then
                match.map = args['m'..i..'_map'] or "TBD"
                match.group = args['m'..i..'_group'] or ""
            else
                match.t1 = args['m'..i..'_t1'] or "TBD"
                match.t2 = args['m'..i..'_t2'] or "TBD"
                match.group = args['m'..i..'_group'] or ""
            end
            table.insert(matches, match)
        end
    end

    local json_data = mw.text.jsonEncode(matches)

    if cargo and cargo.store then
        cargo.store("Tournament_Schedule", {
            tournament = tournament,
            game = game,
            match_type = match_type,
            date = date,
            stage = stage,
            stream = stream_json,
            day_data = json_data
        })
    end

    return "<div style='display:none;'>Schedule saved.</div>"
end

return p