Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Utworzono nową stronę "local p = {} -- ========================================================= -- Module:Rekordy_sezon -- -- Rekordy drużyny w danym sezonie: -- - najwyższe zwycięstwo dom / wyjazd -- - najwyższa porażka dom / wyjazd -- - najwięcej punktów zawodnika dom / wyjazd -- - najwięcej minut dom / wyjazd -- - najwięcej asyst dom / wyjazd -- - najwięcej zbiórek dom / wyjazd -- - najwyższy EVAL dom / wyjazd -- - najwyższy +/- dom / wyjazd -- - najd…"
 
Nie podano opisu zmian
 
(Nie pokazano 12 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 2: Linia 2:


-- =========================================================
-- =========================================================
-- Module:Rekordy_sezon
-- Moduł:Rekordy_sezon
--
--
-- Rekordy drużyny w danym sezonie:
-- Jeden moduł dla różnych dyscyplin.
--   - najwyższe zwycięstwo dom / wyjazd
--
--   - najwyższa porażka dom / wyjazd
-- Wywołanie:
--   - najwięcej punktów zawodnika dom / wyjazd
--
--   - najwięcej minut dom / wyjazd
-- {{#invoke:Rekordy_sezon|main
--   - najwięcej asyst dom / wyjazd
-- |sezon=2026/2027
--   - najwięcej zbiórek dom / wyjazd
-- |druzyna=Lech Poznań
--   - najwyższy EVAL dom / wyjazd
-- |dyscyplina=piłka nożna
--   - najwyższy +/- dom / wyjazd
-- }}
--   - najdłuższa seria zwycięstw ogółem / dom / wyjazd
--
--   - najdłuższa seria porażek ogółem / dom / wyjazd
-- lub:
--
-- {{#invoke:Rekordy_sezon|main
-- |sezon=2026/2027
-- |druzyna=Enea Basket Poznań
-- |dyscyplina=koszykówka
-- }}
--
--
-- Dane pobierane są wyłącznie z istniejących wpisów Cargo.
-- =========================================================
-- =========================================================




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


    local sezon = frame.args.sezon or ""
local function liczba(value)
    local druzyna = frame.args.druzyna or ""


     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


     -- Bezpieczne SQL
     value = mw.ustring.gsub(
    local sezonSQL =
        value,
        mw.ustring.gsub(sezon, "'", "''")
        "%s+",
        ""
    )


     local druzynaSQL =
     return tonumber(value) or 0
        mw.ustring.gsub(druzyna, "'", "''")


end


    -- =====================================================
    -- FUNKCJE POMOCNICZE
    -- =====================================================


    local function liczba(value)
local function escapeSQL(value)


        if value == nil or value == "" then
    value = tostring(value or "")
            return 0
        end


         value = tostring(value)
    return mw.ustring.gsub(
         value,
        "'",
        "''"
    )


        -- usuwamy ewentualne spacje
end
        value = mw.ustring.gsub(value, "%s+", "")


        return tonumber(value) or 0


    end
-- =========================================================
-- ROZPOZNANIE MIEJSCA MECZU
-- =========================================================


local function miejsceMeczu(row, druzyna)


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


        local g1 = tonumber(row.gole1 or "")
    local d2 =
         local g2 = tonumber(row.gole2 or "")
         tostring(row.druzyna2 or "")


        if g1 and g2 then
    if d1 == druzyna then
            return g1, g2
        return "dom"
        end
    end


         local wynik = row.wynik or ""
    if d2 == druzyna then
         return "wyjazd"
    end


        local a, b =
    return nil
            wynik:match("(%d+)%s*:%s*(%d+)")


        if a and b then
end
            return tonumber(a), tonumber(b)
        end


        return nil, nil


    end
-- =========================================================
-- WYNIK MECZU
-- =========================================================


local function wynikMeczu(row)


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


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


        if d1 == druzyna then
    if g1 ~= nil and g2 ~= nil then
            return "dom"
        return g1, g2
        end
    end


        if d2 == druzyna then
            return "wyjazd"
        end


         return nil
    local wynik =
         tostring(row.wynik or "")


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


    if a and b then


    local function nazwaMeczu(row)
        return
            tonumber(a),
            tonumber(b)


        local d1 = row.druzyna1 or ""
    end
        local d2 = row.druzyna2 or ""
        local strona = row.strona_meczu or ""


        local tekst = ""


        if d1 == druzyna then
    return nil, nil


            tekst =
end
                druzyna .. " – " .. d2


        elseif d2 == druzyna then


            tekst =
-- =========================================================
                d1 .. " – " .. druzyna
-- WYNIK Z PERSPEKTYWY DRUŻYNY
-- =========================================================


        else
local function wynikZPerspektywy(row, druzyna)


            tekst =
    local g1, g2 =
                d1 .. " – " .. d2
        wynikMeczu(row)


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


         if strona ~= "" then
    local miejsce =
         miejsceMeczu(
            row,
            druzyna
        )


            if d1 == druzyna then
    if miejsce == "dom" then


                return "[[" .. strona .. "|" ..
        return g1, g2
                    druzyna .. " – " .. d2 .. "]]"


            elseif d2 == druzyna then
    elseif miejsce == "wyjazd" then


                return "[[" .. strona .. "|" ..
        return g2, g1
                    d1 .. " – " .. druzyna .. "]]"


            else
    end


                return "[[" .. strona .. "|" ..
    return nil, nil
                    tekst .. "]]"


            end
end


        end


        return tekst
-- =========================================================
-- NAZWA MECZU
-- =========================================================


    end
local function nazwaMeczu(row)


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


     local function rekordowyWpis(lista, wartosc)
     local d2 =
        tostring(row.druzyna2 or "")


        local wynik = {}
    local strona =
        tostring(row.strona_meczu or "")


         for _, item in ipairs(lista) do
    local tekst =
         d1 ..
        " – " ..
        d2


            if item.wartosc == wartosc then


                table.insert(
    if strona ~= "" then
                    wynik,
 
                    item
        return
                )
            "[[" ..
            strona ..
            "|" ..
            tekst ..
            "]]"
 
    end
 
    return tekst
 
end


            end


        end
-- =========================================================
-- FUNKCJA DODAWANIA REKORDU
-- UŻYWANA PRZEZ PIŁKĘ NOŻNĄ
-- =========================================================


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


    if wartosc == nil then
        return
     end
     end


    local lista =
        tabela[miejsce]


     local function dodajDoRekordu(lista, item)
     if #lista == 0 then


         table.insert(
         table.insert(
Linia 185: Linia 222:
             item
             item
         )
         )
        return


     end
     end




     -- =====================================================
     local obecna =
    -- POBRANIE MECZÓW
        lista[1].wartosc
    -- =====================================================
 


     local fieldsMecze = table.concat({
     if wartosc > obecna then


         "Mecze.id=mecz",
         tabela[miejsce] = {
        "Mecze.data=data",
            item
        "Mecze.sezon=sezon",
         }
         "Mecze.druzyna1=druzyna1",
        "Mecze.druzyna2=druzyna2",
        "Mecze.gole1=gole1",
        "Mecze.gole2=gole2",
        "Mecze.wynik=wynik",
        "Mecze.strona_meczu=strona_meczu"


     }, ",")
     elseif wartosc == obecna then


        table.insert(
            lista,
            item
        )


     local argsMecze = {
     end


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


        orderBy = "Mecze.data ASC",


        limit = 5000
-- =========================================================
-- FORMAT REKORDÓW MECZOWYCH
-- =========================================================


    }
local function tekstMeczow(lista)


    if not lista or #lista == 0 then
        return "—"
    end


     local mecze =
     local wynik = {}
        mw.ext.cargo.query(
            "Mecze",
            fieldsMecze,
            argsMecze
        )


    for _, item in ipairs(lista) do


    if not mecze or #mecze == 0 then
        local roznica =
            item.roznica or 0


         return
         local roznicaTekst
            "''Brak wprowadzonych meczów dla tej drużyny w podanym sezonie.''"


    end
        if roznica >= 0 then


            roznicaTekst =
                "+" ..
                tostring(roznica)


    -- =====================================================
        else
    -- REKORDY MECZOWE
    -- =====================================================


    local najwyzszeZwyciestwo = {
            roznicaTekst =
        dom = {},
                tostring(roznica)
        wyjazd = {}
    }


    local najwyzszaPorazka = {
         end
         dom = {},
        wyjazd = {}
    }




    -- =====================================================
        table.insert(
    -- PRZETWARZANIE MECZÓW
            wynik,
    -- =====================================================


    for _, row in ipairs(mecze) do
            item.tekst ..
            " (" ..
            item.wynik ..
            ", " ..
            roznicaTekst ..
            ")"


         local g1, g2 =
         )
            wynikMeczu(row)


        local miejsce =
    end
            miejsceMeczu(row)


        if g1 and g2 and miejsce then


            local zdobyte = 0
    return table.concat(
            local stracone = 0
        wynik,
        "<br>"
    )


            if miejsce == "dom" then
end


                zdobyte = g1