Przejdź do zawartości

Moduł:Rekordy sezon: Różnice pomiędzy wersjami

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
(Nie pokazano 4 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 4: Linia 4:
-- Moduł:Rekordy_sezon
-- Moduł:Rekordy_sezon
--
--
-- Wspólny moduł rekordów sezonu.
-- Jeden moduł dla różnych dyscyplin.
--
--
-- Wywołanie:
-- Wywołanie:
Linia 14: Linia 14:
-- }}
-- }}
--
--
-- Obsługiwane dyscypliny:
-- lub:
--  - koszykówka
--  - piłka nożna
--
--
-- {{#invoke:Rekordy_sezon|main
--  |sezon=2026/2027
--  |druzyna=Enea Basket Poznań
--  |dyscyplina=koszykówka
-- }}
-- =========================================================
-- =========================================================


Linia 24: Linia 27:
-- FUNKCJE WSPÓLNE
-- FUNKCJE WSPÓLNE
-- =========================================================
-- =========================================================
local function escapeSQL(value)
    value = value or ""
    return mw.ustring.gsub(
        tostring(value),
        "'",
        "''"
    )
end


local function liczba(value)
local function liczba(value)
Linia 58: Linia 48:


-- =========================================================
-- =========================================================
-- WYNIK MECZU
-- MINUTY
--
-- Obsługuje:
-- 32
-- 32.0
-- 32:15
-- 32:15.5
--
--
-- WAŻNE:
-- Do porównywania rekordów używamy sekund.
-- funkcja jest lokalna i dostępna dla całego modułu.
-- =========================================================
-- =========================================================


local function wynikMeczu(row)
local function minutyNaSekundy(value)


     local g1 = tonumber(
     if value == nil or value == "" then
        row.gole1 or ""
         return 0
    )
 
    local g2 = tonumber(
        row.gole2 or ""
    )
 
    if g1 and g2 then
         return g1, g2
     end
     end


    value = tostring(value)


     local wynik =
     value = mw.ustring.gsub(
         row.wynik or ""
        value,
        "%s+",
         ""
    )


 
     local minuty, sekundy =
     local a, b =
         mw.ustring.match(
         wynik:match(
            value,
             "(%d+)%s*:%s*(%d+)"
             "^(%d+):(%d+)$"
         )
         )


 
     if minuty and sekundy then
     if a and b then


         return
         return
             tonumber(a),
             tonumber(minuty) * 60 +
             tonumber(b)
             tonumber(sekundy)


     end
     end


    local liczbaMinut =
        tonumber(value)
    if liczbaMinut then
        return liczbaMinut * 60
    end


     return nil, nil
     return 0


end
end
Linia 104: Linia 100:


-- =========================================================
-- =========================================================
-- MIEJSCE MECZU
-- FORMAT MINUT
-- =========================================================
-- =========================================================


local function miejsceMeczu(
local function formatMinut(sekundy)
    row,
    druzyna
)


     local d1 =
     sekundy = tonumber(sekundy) or 0
        row.druzyna1 or ""


     local d2 =
     local minuty =
         row.druzyna2 or ""
         math.floor(
            sekundy / 60
        )


    local sek =
        sekundy % 60


     if d1 == druzyna then
     if sek == 0 then
         return "dom"
         return tostring(minuty) .. " min"
     end
     end


    return
        tostring(minuty) ..
        ":" ..
        string.format(
            "%02d",
            sek
        ) ..
        " min"


    if d2 == druzyna then
end
        return "wyjazd"
    end




     return nil
local function escapeSQL(value)
 
 
end
    value = tostring(value or "")
 
     return mw.ustring.gsub(
        value,
        "'",
        "''"
    )
 
end




-- =========================================================
-- =========================================================
-- NAZWA MECZU
-- ROZPOZNANIE MIEJSCA MECZU
-- =========================================================
-- =========================================================


local function nazwaMeczu(row)
local function miejsceMeczu(row, druzyna)


     local d1 =
     local d1 =
         row.druzyna1 or ""
         tostring(row.druzyna1 or "")


     local d2 =
     local d2 =
         row.druzyna2 or ""
         tostring(row.druzyna2 or "")


     local tekst =
     if d1 == druzyna then
         d1 .. " " .. d2
         return "dom"
    end


    if d2 == druzyna then
        return "wyjazd"
    end


     local strona =
     return nil
        row.strona_meczu or ""


end


    if strona ~= "" then


        return "[[" ..
-- =========================================================
            strona ..
-- WYNIK MECZU
            "|" ..
-- =========================================================
            tekst ..
            "]]"


    end
local function wynikMeczu(row)


    local g1 =
        tonumber(row.gole1 or "")


     return tekst
     local g2 =
        tonumber(row.gole2 or "")


end
    if g1 ~= nil and g2 ~= nil then
        return g1, g2
    end




-- =========================================================
    local wynik =
-- PARSOWANIE MINUTY GOLA
        tostring(row.wynik or "")
--
-- Obsługujemy:
--
-- 14
-- 45
-- 45+2
-- 90+4
-- 105
-- 120+1
--
-- Zwracamy:
--  minuta podstawowa
--  doliczony czas
-- =========================================================


local function parsujMinute(value)
    local a, b =
        mw.ustring.match(
            wynik,
            "(%d+)%s*:%s*(%d+)"
        )


     if value == nil or value == "" then
     if a and b then
        return nil, 0
    end


        return
            tonumber(a),
            tonumber(b)


     value =
     end
        tostring(value)




     value =
     return nil, nil
        mw.ustring.gsub(
            value,
            "%s+",
            ""
        )


end


    local minuta,
          doliczona =
        value:match(
            "^(%d+)%+(%d+)$"
        )


-- =========================================================
-- WYNIK Z PERSPEKTYWY DRUŻYNY
-- =========================================================


    if minuta then
local function wynikZPerspektywy(row, druzyna)


        return
    local g1, g2 =
            tonumber(minuta),
        wynikMeczu(row)
            tonumber(doliczona)


    if g1 == nil or g2 == nil then
        return nil, nil
     end
     end


 
     local miejsce =
     minuta =
         miejsceMeczu(
         value:match(
             row,
             "^(%d+)"
            druzyna
         )
         )


    if miejsce == "dom" then


     if minuta then
        return g1, g2
 
     elseif miejsce == "wyjazd" then


         return
         return g2, g1
            tonumber(minuta),
            0


     end
     end


 
     return nil, nil
     return nil, 0


end
end
Linia 243: Linia 244:


-- =========================================================
-- =========================================================
-- PRZEDZIAŁ CZASOWY GOLA
-- NAZWA MECZU
-- =========================================================
-- =========================================================


local function przedzialGola(value)
local function nazwaMeczu(row)


     local minuta,
     local d1 =
          doliczona =
         tostring(row.druzyna1 or "")
         parsujMinute(value)


    local d2 =
        tostring(row.druzyna2 or "")


     if not minuta then
     local strona =
         return nil
         tostring(row.strona_meczu or "")
    end


    local tekst =
        d1 ..
        " – " ..
        d2


    -- 45+ oraz 90+ itd.
    if minuta == 45 and doliczona > 0 then
        return "45+"
    end


    if strona ~= "" then


    if minuta == 90 and doliczona > 0 then
         return
         return "90+"
            "[[" ..
    end
            strona ..
 
            "|" ..
            tekst ..
            "]]"


    if minuta == 105 and doliczona > 0 then
        return "105+"
     end
     end


    return tekst


    if minuta == 120 and doliczona > 0 then
end
        return "120+"
    end




    if minuta >= 1 and minuta <= 15 then
-- =========================================================
        return "0–15"
-- DODAWANIE REKORDU
    end
--
 
-- KLUCZOWA POPRAWKA:
--
-- zapisujemy wartość rekordu bezpośrednio w item.wartosc.
--
-- Dzięki temu nie ma już:
-- attempt to compare nil with number
-- =========================================================


     if minuta >= 16 and minuta <= 30 then
local function dodajRekord(
        return "16–30"
     tabela,
     end
    miejsce,
     wartosc,
    item
)


 
     if wartosc == nil then
     if minuta >= 31 and minuta <= 45 then
         return
         return "31–45"
     end
     end


    wartosc =
        tonumber(wartosc)


     if minuta >= 46 and minuta <= 60 then
     if wartosc == nil then
         return "46–60"
         return
     end
     end


    item.wartosc =
        wartosc


     if minuta >= 61 and minuta <= 75 then
     local lista =
         return "61–75"
         tabela[miejsce]
    end


    if #lista == 0 then


    if minuta >= 76 and minuta <= 90 then
        table.insert(
         return "76–90"
            lista,
    end
            item
         )


        return


    if minuta >= 91 and minuta <= 105 then
        return "91–105"
     end
     end




     if minuta >= 106 and minuta <= 120 then
     local obecna =
         return "106–120"
         tonumber(
    end
            lista[1].wartosc
        ) or 0




     if minuta > 120 then
     if wartosc > obecna then
        return "120+"
    end


        tabela[miejsce] = {
            item
        }


     return nil
     elseif wartosc == obecna then