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 4: Linia 4:
-- Module:Rekordy_sezon
-- Module:Rekordy_sezon
--
--
-- Główny moduł rekordów sezonu.
-- Jeden moduł dla wielu dyscyplin.
--
--
-- Dyscyplina wybierana jest parametrem:
-- Wywołanie:
--   |dyscyplina=koszykówka
--
--   |dyscyplina=piłka nożna
-- {{#invoke:Rekordy_sezon|main
--  |sezon=2026/2027
--  |druzyna=Lech Poznań
-- |dyscyplina=piłka nożna
-- }}
--
-- lub:
--
-- {{#invoke:Rekordy_sezon|main
--  |sezon=2026/2027
--  |druzyna=Enea Basket Poznań
--  |dyscyplina=koszykówka
-- }}
--
-- Opcjonalnie:
--
-- |rozgrywki=Ekstraklasa
--
--
-- =========================================================
-- =========================================================




-- =========================================================
function p.main(frame)
-- KOSZYKÓWKA
-- =========================================================
 
local function mainKoszykowka(frame)


     -- =====================================================
     -- =====================================================
Linia 23: Linia 35:
     -- =====================================================
     -- =====================================================


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


     if sezon == "" then
     if sezon == "" then
Linia 33: Linia 55:
         return "'''Błąd:''' nie podano drużyny."
         return "'''Błąd:''' nie podano drużyny."
     end
     end
    -- =====================================================
    -- ESCAPOWANIE SQL
    -- =====================================================


     local sezonSQL =
     local sezonSQL =
Linia 39: Linia 66:
     local druzynaSQL =
     local druzynaSQL =
         mw.ustring.gsub(druzyna, "'", "''")
         mw.ustring.gsub(druzyna, "'", "''")
    local rozgrywkiSQL =
        mw.ustring.gsub(rozgrywki, "'", "''")




Linia 52: Linia 82:


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


         return tonumber(value) or 0
         return tonumber(value) or 0
Linia 59: Linia 95:




     local function wynikMeczu(row)
     local function miejsceMeczu(row)


         local g1 = tonumber(row.gole1 or "")
         local d1 =
        local g2 = tonumber(row.gole2 or "")
            row.druzyna1 or ""


         if g1 and g2 then
         local d2 =
             return g1, g2
             row.druzyna2 or ""
        end


        local wynik = row.wynik or ""
         if d1 == druzyna then
 
        local a, b =
            wynik:match("(%d+)%s*:%s*(%d+)")
 
        if a and b then
            return tonumber(a), tonumber(b)
        end
 
        return nil, nil
 
    end
 
 
    local function miejsceMeczu(row)
 
        local d1 = row.druzyna1 or ""
        local d2 = row.druzyna2 or ""
 
         if d1 == druzyna then
             return "dom"
             return "dom"
         end
         end
Linia 100: Linia 116:




     -- =====================================================
     local function wynikMeczu(row)
    -- NAZWA MECZU
    -- =====================================================


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


         local d1 = row.druzyna1 or ""
         local g2 =
        local d2 = row.druzyna2 or ""
            tonumber(row.gole2 or "")
        local strona = row.strona_meczu or ""


         local tekst =
         if g1 and g2 then
             d1 .. " – " .. d2
             return g1, g2
        end


         if strona ~= "" then
        local wynik =
            row.wynik or ""
 
        local a, b =
            wynik:match(
                "(%d+)%s*:%s*(%d+)"
            )
 
        if a and b then
            return tonumber(a), tonumber(b)
        end
 
        return nil, nil
 
    end
 
 
    local function nazwaMeczu(row)
 
        local d1 =
            row.druzyna1 or ""
 
        local d2 =
            row.druzyna2 or ""
 
        local strona =
            row.strona_meczu or ""
 
        local tekst =
            d1 .. " – " .. d2
 
         if strona ~= "" then


             return "[[" ..
             return "[[" ..
Linia 128: Linia 174:




    -- =====================================================
     local function kopiuj(item)
    -- KOPIOWANIE TABELI
    -- =====================================================
 
     local function kopiujItem(item)


         local nowy = {}
         local nowy = {}


         for klucz, wartosc in pairs(item) do
         for k, v in pairs(item) do
             nowy[klucz] = wartosc
             nowy[k] = v
         end
         end


Linia 145: Linia 187:




     -- =====================================================
     local function dodajRekord(
     -- POBRANIE MECZÓW
        tabela,
    -- =====================================================
        miejsce,
        wartosc,
        item
     )
 
        local lista =
            tabela[miejsce]


    local fieldsMecze = table.concat({
        local nowy =
            kopiuj(item)


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


    }, ",")
        if #lista == 0 then


            table.insert(
                lista,
                nowy
            )


    local argsMecze = {
            return


         where =
         end
            "(Mecze.druzyna1='" ..
            druzynaSQL ..
            "' OR Mecze.druzyna2='" ..
            druzynaSQL ..
            "')" ..
            " AND Mecze.sezon='" ..
            sezonSQL ..
            "'",


         orderBy = "Mecze.data ASC",
         local obecna =
            lista[1].wartosc


         limit = 5000
         if wartosc > obecna then


    }
            tabela[miejsce] = {
                nowy
            }


        elseif wartosc == obecna then


    local mecze =
            table.insert(
        mw.ext.cargo.query(
                lista,
            "Mecze",
                nowy
            fieldsMecze,
             )
             argsMecze
        )


 
         end
    if not mecze or #mecze == 0 then
 
         return
            "''Brak wprowadzonych meczów dla tej drużyny w podanym sezonie.''"


     end
     end
Linia 200: Linia 236:


     -- =====================================================
     -- =====================================================
     -- REKORDY MECZOWE
     -- WYBÓR DYSCYPLINY
     -- =====================================================
     -- =====================================================


     local najwyzszeZwyciestwo = {
     if mw.ustring.lower(dyscyplina)
         dom = {},
        == "piłka nożna"
         wyjazd = {}
         or
     }
        mw.ustring.lower(dyscyplina)
         == "pilka nozna"
     then


    local najwyzszaPorazka = {
        return p.pilka(
        dom = {},
            sezon,
         wyjazd = {}
            druzyna,
    }
            sezonSQL,
            druzynaSQL,
            rozgrywki,
            rozgrywkiSQL
         )


    end


    -- =====================================================
    -- PRZETWARZANIE MECZÓW
    -- =====================================================


     for _, row in ipairs(mecze) do
     -- Domyślnie koszykówka
    return p.koszykowka(
        sezon,
        druzyna,
        sezonSQL,
        druzynaSQL,
        rozgrywki,
        rozgrywkiSQL
    )


        local g1, g2 =
end
            wynikMeczu(row)


        local miejsce =
            miejsceMeczu(row)


        if g1 and g2 and miejsce then


            local zdobyte
-- =========================================================
            local stracone
-- =========================================================
-- KOSZYKÓWKA
-- =========================================================
-- =========================================================


            if miejsce == "dom" then


                zdobyte = g1
function p.koszykowka(
                stracone = g2
    sezon,
    druzyna,
    sezonSQL,
    druzynaSQL,
    rozgrywki,
    rozgrywkiSQL
)


            else


                zdobyte = g2
    -- =====================================================
                stracone = g1
    -- POBRANIE MECZÓW
    -- =====================================================


            end
    local fieldsMecze =
        table.concat({


             local roznica =
             "Mecze.id=mecz",
                zdobyte - stracone
            "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"


        }, ",")


            local item = {


                mecz = row.mecz or "",
    local whereMecze =
                data = row.data or "",
        "(Mecze.druzyna1='" ..
                miejsce = miejsce,
        druzynaSQL ..
        "' OR Mecze.druzyna2='" ..
        druzynaSQL ..
        "')" ..
        " AND Mecze.sezon='" ..
        sezonSQL ..
        "'"


                zdobyte = zdobyte,
                stracone = stracone,
                roznica = roznica,


                tekst =
    if rozgrywki ~= "" then
                    nazwaMeczu(row),
 
        whereMecze =
            whereMecze ..
            " AND Mecze.rozgrywki='" ..
            rozgrywkiSQL ..
            "'"
 
    end


                wynik =
                    tostring(g1) ..
                    ":" ..
                    tostring(g2)


    local mecze =
        mw.ext.cargo.query(
            "Mecze",
            fieldsMecze,
            {
                where = whereMecze,
                orderBy = "Mecze.data ASC",
                limit = 5000
             }
             }
        )




            -- =============================================
    if not mecze or #mecze == 0 then
            -- ZWYCIĘSTWO
            -- =============================================


             if roznica > 0 then
        return
             "''Brak wprowadzonych meczów dla tej drużyny w podanym sezonie.''"


                local lista =
    end
                    najwyzszeZwyciestwo[miejsce]


                if #lista == 0 then


                    table.insert(
    -- =====================================================
                        lista,
    -- REKORDY MECZOWE
                        item
    -- =====================================================