Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
Linia 2: Linia 2:


-- =========================================================
-- =========================================================
-- Module:Rekordy_sezon
-- Moduł:Rekordy_sezon
--
--
-- Jeden moduł dla wielu dyscyplin.
-- Wspólny moduł rekordów sezonu.
--
--
-- Wywołanie:
-- Wywołanie:
Linia 14: Linia 14:
-- }}
-- }}
--
--
-- lub:
-- Obsługiwane dyscypliny:
--
--   - koszykówka
-- {{#invoke:Rekordy_sezon|main
--   - piłka nożna
--  |sezon=2026/2027
--  |druzyna=Enea Basket Poznań
-- |dyscyplina=koszykówka
-- }}
--
-- Opcjonalnie:
--
-- |rozgrywki=Ekstraklasa
--
--
-- =========================================================
-- =========================================================




function p.main(frame)
-- =========================================================
-- FUNKCJE WSPÓLNE
-- =========================================================


    -- =====================================================
local function escapeSQL(value)
    -- PARAMETRY
    -- =====================================================


     local sezon =
     value = value or ""
        mw.text.trim(frame.args.sezon or "")


     local druzyna =
     return mw.ustring.gsub(
        mw.text.trim(frame.args.druzyna or "")
        tostring(value),
        "'",
        "''"
    )


    local dyscyplina =
end
        mw.text.trim(frame.args.dyscyplina or "koszykówka")


    local rozgrywki =
        mw.text.trim(frame.args.rozgrywki or "")


local function liczba(value)


     if sezon == "" then
     if value == nil or value == "" then
         return "'''Błąd:''' nie podano sezonu."
         return 0
     end
     end


     if druzyna == "" then
     value = tostring(value)
        return "'''Błąd:''' nie podano drużyny."
    end


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


     -- =====================================================
     return tonumber(value) or 0
    -- ESCAPOWANIE SQL
    -- =====================================================


    local sezonSQL =
end
        mw.ustring.gsub(sezon, "'", "''")


    local druzynaSQL =
        mw.ustring.gsub(druzyna, "'", "''")


    local rozgrywkiSQL =
-- =========================================================
        mw.ustring.gsub(rozgrywki, "'", "''")
-- WYNIK MECZU
--
-- WAŻNE:
-- funkcja jest lokalna i dostępna dla całego modułu.
-- =========================================================


local function wynikMeczu(row)


     -- =====================================================
     local g1 = tonumber(
    -- FUNKCJE POMOCNICZE
        row.gole1 or ""
     -- =====================================================
     )


     local function liczba(value)
     local g2 = tonumber(
 
         row.gole2 or ""
        if value == nil or value == "" then
    )
            return 0
        end
 
        value = tostring(value)
 
         value =
            mw.ustring.gsub(
                value,
                "%s+",
                ""
            )
 
        return tonumber(value) or 0


    if g1 and g2 then
        return g1, g2
     end
     end




     local function miejsceMeczu(row)
     local wynik =
        row.wynik or ""


        local d1 =
            row.druzyna1 or ""


        local d2 =
    local a, b =
             row.druzyna2 or ""
        wynik:match(
             "(%d+)%s*:%s*(%d+)"
        )


        if d1 == druzyna then
            return "dom"
        end


        if d2 == druzyna then
    if a and b then
            return "wyjazd"
        end


         return nil
         return
            tonumber(a),
            tonumber(b)


     end
     end




     local function wynikMeczu(row)
     return nil, nil


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


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


        if g1 and g2 then
-- =========================================================
            return g1, g2
-- MIEJSCE MECZU
        end
-- =========================================================


        local wynik =
local function miejsceMeczu(
            row.wynik or ""
    row,
    druzyna
)


        local a, b =
    local d1 =
            wynik:match(
        row.druzyna1 or ""
                "(%d+)%s*:%s*(%d+)"
            )


        if a and b then
    local d2 =
            return tonumber(a), tonumber(b)
         row.druzyna2 or ""
         end


        return nil, nil


    if d1 == druzyna then
        return "dom"
     end
     end




     local function nazwaMeczu(row)
     if d2 == druzyna then
        return "wyjazd"
    end


        local d1 =
            row.druzyna1 or ""


        local d2 =
    return nil
            row.druzyna2 or ""


        local strona =
end
            row.strona_meczu or ""


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


        if strona ~= "" then
-- =========================================================
-- NAZWA MECZU
-- =========================================================


            return "[[" ..
local function nazwaMeczu(row)
                strona ..
                "|" ..
                tekst ..
                "]]"


         end
    local d1 =
         row.druzyna1 or ""


         return tekst
    local d2 =
         row.druzyna2 or ""


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




     local function kopiuj(item)
     local strona =
        row.strona_meczu or ""


        local nowy = {}


        for k, v in pairs(item) do
    if strona ~= "" then
            nowy[k] = v
        end


         return nowy
         return "[[" ..
            strona ..
            "|" ..
            tekst ..
            "]]"


     end
     end




     local function dodajRekord(
     return tekst
        tabela,
        miejsce,
        wartosc,
        item
    )


        local lista =
end
            tabela[miejsce]


        local nowy =
            kopiuj(item)


        nowy.wartosc =
-- =========================================================
            wartosc
-- PARSOWANIE MINUTY GOLA
--
-- Obsługujemy:
--
-- 14
-- 45
-- 45+2
-- 90+4
-- 105
-- 120+1
--
-- Zwracamy:
--  minuta podstawowa
--  doliczony czas
-- =========================================================
 
local function parsujMinute(value)


        if #lista == 0 then
    if value == nil or value == "" then
        return nil, 0
    end


            table.insert(
                lista,
                nowy
            )


            return
    value =
        tostring(value)


        end


         local obecna =
    value =
             lista[1].wartosc
         mw.ustring.gsub(
            value,
            "%s+",
             ""
        )


        if wartosc > obecna then


            tabela[miejsce] = {
    local minuta,
                nowy
          doliczona =
             }
        value:match(
             "^(%d+)%+(%d+)$"
        )


        elseif wartosc == obecna then


            table.insert(
    if minuta then
                lista,
                nowy
            )


         end
         return
            tonumber(minuta),
            tonumber(doliczona)


     end
     end




     -- =====================================================
     minuta =
    -- WYBÓR DYSCYPLINY
        value:match(
    -- =====================================================
            "^(%d+)"
        )
 


     if mw.ustring.lower(dyscyplina)
     if minuta then
        == "piłka nożna"
        or
        mw.ustring.lower(dyscyplina)
        == "pilka nozna"
    then


         return p.pilka(
         return
             sezon,
             tonumber(minuta),
             druzyna,
             0
            sezonSQL,
            druzynaSQL,
            rozgrywki,
            rozgrywkiSQL
        )


     end
     end




    -- Domyślnie koszykówka
     return nil, 0
     return p.koszykowka(
        sezon,
        druzyna,
        sezonSQL,
        druzynaSQL,
        rozgrywki,
        rozgrywkiSQL
    )


end
end




-- =========================================================
-- =========================================================
-- PRZEDZIAŁ CZASOWY GOLA
-- =========================================================
-- =========================================================
-- KOSZYKÓWKA
-- =========================================================
-- =========================================================


local function przedzialGola(value)
    local minuta,
          doliczona =
        parsujMinute(value)
    if not minuta then
        return nil
    end


function p.koszykowka(
    sezon,
    druzyna,
    sezonSQL,
    druzynaSQL,
    rozgrywki,
    rozgrywkiSQL
)


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


    -- =====================================================
    -- POBRANIE MECZÓW
    -- =====================================================


     local fieldsMecze =
     if minuta == 90 and doliczona > 0 then
         table.concat({
         return "90+"
    end


            "Mecze.id=mecz",
            "Mecze.data=data",
            "Mecze.sezon=sezon",
            "Mecze.rozgrywki=rozgrywki",
            "Mecze.druzyna1=druzyna1",
            "Mecze.druzyna2=druzyna2",
            "Mecze.gole1=gole1",
            "Mecze.gole2=gole2",
            "Mecze.wynik=wynik",
            "Mecze.strona_meczu=strona_meczu"


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




     local whereMecze =
     if minuta == 120 and doliczona > 0 then
        "(Mecze.druzyna1='" ..
         return "120+"
        druzynaSQL ..
    end
         "' OR Mecze.druzyna2='" ..