Przejdź do zawartości

Moduł:StatystykiHistoryczne: Różnice pomiędzy wersjami

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
Linia 10: Linia 10:
-- 1. Mecze
-- 1. Mecze
-- 2. Punkty
-- 2. Punkty
-- 3. Asysty
-- 3. Minuty
-- 4. Zbiórki
-- 4. Asysty
-- 5. Bloki
-- 5. Zbiórki
-- 6. Minuty
-- 6. Bloki
--
--
-- Użycie:
-- Użycie:
Linia 24: Linia 24:
-- =========================================================
-- =========================================================


-- =========================================================
-- GŁÓWNA FUNKCJA
-- =========================================================


function p.main(frame)
function p.main(frame)


     -- -----------------------------------------------------
     -- =====================================================
     -- DRUŻYNA
     -- DRUŻYNA
     -- -----------------------------------------------------
     -- =====================================================


     local druzyna =
     local druzyna =
Linia 49: Linia 45:




     -- -----------------------------------------------------
     -- =====================================================
     -- BEZPIECZNE PRZYGOTOWANIE NAZWY DRUŻYNY
     -- BEZPIECZNE PRZYGOTOWANIE NAZWY DRUŻYNY
     -- -----------------------------------------------------
     -- =====================================================


     local druzynaSQL =
     local druzynaSQL =
Linia 62: Linia 58:


     -- =====================================================
     -- =====================================================
     -- POLA CARGO
     -- POLA POBIERANE Z CARGO
     -- =====================================================
     -- =====================================================


Linia 134: Linia 130:


     -- =====================================================
     -- =====================================================
     -- FUNKCJA NOWEGO REKORDU
     -- NOWY REKORD ZAWODNIKA
     -- =====================================================
     -- =====================================================


Linia 144: Linia 140:


             punkty = 0,
             punkty = 0,
            minuty = 0,


             asysty = 0,
             asysty = 0,
Linia 149: Linia 147:
             zbiorki = 0,
             zbiorki = 0,


             bloki = 0,
             bloki = 0
 
            minuty = 0


         }
         }
Linia 159: Linia 155:


     -- =====================================================
     -- =====================================================
     -- POMOCNICZA FUNKCJA LICZBOWA
     -- BEZPIECZNE POBIERANIE LICZBY
     -- =====================================================
     -- =====================================================


Linia 198: Linia 194:


             -- ---------------------------------------------
             -- ---------------------------------------------
             -- MECZ
             -- MECZE
             -- ---------------------------------------------
             -- ---------------------------------------------


Linia 212: Linia 208:
                 stat.punkty
                 stat.punkty
                 + liczba(row.gol)
                 + liczba(row.gol)
            -- ---------------------------------------------
            -- MINUTY
            -- ---------------------------------------------
            stat.minuty =
                stat.minuty
                + liczba(row.minuty)




Linia 239: Linia 244:
                 stat.bloki
                 stat.bloki
                 + liczba(row.blok)
                 + liczba(row.blok)
            -- ---------------------------------------------
            -- MINUTY
            --
            -- Cargo przechowuje minuty jako Integer.
            -- Przyjmujemy, że jest to liczba minut.
            -- ---------------------------------------------
            stat.minuty =
                stat.minuty
                + liczba(row.minuty)


         end
         end
Linia 308: Linia 301:


     -- =====================================================
     -- =====================================================
     -- LINK DO ZAWODNIKA
     -- LINK DO STRONY ZAWODNIKA
    --
    -- Zakładamy, że strona zawodnika ma nazwę identyczną
    -- z polem "zawodnik" w Cargo.
     -- =====================================================
     -- =====================================================


Linia 327: Linia 317:


     -- =====================================================
     -- =====================================================
     -- GENEROWANIE JEDNEJ TABELI
     -- GENEROWANIE TABELI
     -- =====================================================
     -- =====================================================


Linia 333: Linia 323:
         tytul,
         tytul,
         pole,
         pole,
         formatWartosci,
         formatWartosci
        ikona
     )
     )


         -- ---------------------------------------------
         -- -------------------------------------------------
         -- SORTOWANIE
         -- SORTOWANIE
         -- ---------------------------------------------
         -- -------------------------------------------------


         table.sort(
         table.sort(
Linia 357: Linia 346:
                 if wartoscA ~= wartoscB then
                 if wartoscA ~= wartoscB then


                     return wartoscA > wartoscB
                     return
                        wartoscA > wartoscB


                 end
                 end
Linia 372: Linia 362:




         -- ---------------------------------------------
         -- -------------------------------------------------
         -- TABELA
         -- TABELA
         -- ---------------------------------------------
         -- -------------------------------------------------


         local wynik = {}
         local wynik = {}
Linia 381: Linia 371:
         table.insert(
         table.insert(
             wynik,
             wynik,
            "==== "
             '{| class="wikitable sortable" style="width:100%; text-align:center; margin:0;"'
            .. ikona
            .. " "
            .. tytul
            .. " ===="
        )
 
 
        table.insert(
            wynik,
            ""
        )
 
 
        table.insert(
            wynik,
             '{| class="wikitable sortable" style="width:100%; text-align:center;"'
         )
         )


Linia 420: Linia 394:




         -- ---------------------------------------------
         -- -------------------------------------------------
         -- WIERSZE
         -- WIERSZE
         -- ---------------------------------------------
         -- -------------------------------------------------


         for i, rekord in ipairs(lista) do
         for i, rekord in ipairs(lista) do
Linia 489: Linia 463:


     -- =====================================================
     -- =====================================================
     -- WYNIK KOŃCOWY
     -- WYNIK
     -- =====================================================
     -- =====================================================


Linia 510: Linia 484:


     -- =====================================================
     -- =====================================================
     -- UKŁAD 2 KOLUMNY
     -- TABELA GŁÓWNA
    --
    -- 3 KOLUMNY × 2 RZĘDY
     --
     --
     -- Każda tabela znajduje się w osobnym bloku.
     -- MECZE | PUNKTY | MINUTY
     -- MediaWiki może je układać obok siebie dzięki CSS.
     -- ASYSTY | ZBIÓRKI | BLOKI
     -- =====================================================
     -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div class="statystyki-historyczne">'
         '{| style="width:100%; border-collapse:separate; border-spacing:10px; background:transparent;"'
     )
     )




     -- =====================================================
     -- =====================================================
     -- 1. MECZE
     -- PIERWSZY RZĄD
     -- =====================================================
     -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div class="statystyki-historyczne-tabela">'
         "|- valign=\"top\""
     )
     )


    -- =====================================================
    -- MECZE
    -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         generujTabele(
         "| style=\"width:33.33%; vertical-align:top;\" |\n"
        .. "'''MECZE'''\n\n"
        .. generujTabele(
             "Mecze",
             "Mecze",
             "mecze",
             "mecze",
             nil,
             nil
            "🏀"
         )
         )
    )
    table.insert(
        wynik,
        "</div>"
     )
     )




     -- =====================================================
     -- =====================================================
     -- 2. PUNKTY
     -- PUNKTY
     -- =====================================================
     -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div class="statystyki-historyczne-tabela">'
         "| style=\"width:33.33%; vertical-align:top;\" |\n"
    )
        .. "'''PUNKTY'''\n\n"
 
         .. generujTabele(
 
    table.insert(
        wynik,
         generujTabele(
             "Punkty",
             "Punkty",
             "punkty",
             "punkty",
             nil,
             nil
            "🏀"
         )
         )
     )
     )


    -- =====================================================
    -- MINUTY
    -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         "</div>"
         "| style=\"width:33.33%; vertical-align:top;\" |\n"
        .. "'''MINUTY'''\n\n"
        .. generujTabele(
            "Minuty",
            "minuty",
            formatujMinuty
        )
     )
     )




     -- =====================================================
     -- =====================================================
     -- 3. ASYSTY
     -- DRUGI RZĄD
     -- =====================================================
     -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div class="statystyki-historyczne-tabela">'
         "|- valign=\"top\""
     )
     )


    -- =====================================================
    -- ASYSTY
    -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         generujTabele(
         "| style=\"width:33.33%; vertical-align:top;\" |\n"
        .. "'''ASYSTY'''\n\n"
        .. generujTabele(
             "Asysty",
             "Asysty",
             "asysty",
             "asysty",
             nil,
             nil
            "🎯"
         )
         )
    )
    table.insert(
        wynik,
        "</div>"
     )
     )




     -- =====================================================
     -- =====================================================
     -- 4. ZBIÓRKI
     -- ZBIÓRKI
     -- =====================================================
     -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div class="statystyki-historyczne-tabela">'
         "| style=\"width:33.33%; vertical-align:top;\" |\n"
    )
        .. "'''ZBIÓRKI'''\n\n"
 
         .. generujTabele(
 
    table.insert(
        wynik,
         generujTabele(
             "Zbiórki",
             "Zbiórki",
             "zbiorki",
             "zbiorki",
             nil,
             nil
            "🏀"
         )
         )
    )
    table.insert(
        wynik,
        "</div>"
     )
     )




     -- =====================================================
     -- =====================================================
     -- 5. BLOKI
     -- BLOKI
     -- =====================================================
     -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div class="statystyki-historyczne-tabela">'
         "| style=\"width:33.33%; vertical-align:top;\" |\n"
    )
        .. "'''BLOKI'''\n\n"
 
         .. generujTabele(
 
    table.insert(
        wynik,
         generujTabele(
             "Bloki",
             "Bloki",
             "bloki",
             "bloki",
             nil,
             nil
            "🛡️"
         )
         )
    )
    table.insert(
        wynik,
        "</div>"
     )
     )




     -- =====================================================
     -- =====================================================
     -- 6. MINUTY
     -- KONIEC TABELI GŁÓWNEJ
     -- =====================================================
     -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div class="statystyki-historyczne-tabela">'
         "|}"
    )
 
 
    table.insert(
        wynik,
        generujTabele(
            "Minuty",
            "minuty",
            formatujMinuty,
            "⏱️"
        )
    )
 
 
    table.insert(
        wynik,
        "</div>"
    )
 
 
    table.insert(
        wynik,
        "</div>"
     )
     )



Wersja z 09:41, 30 sie 2026

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:StatystykiHistoryczne/opis

local p = {}

-- =========================================================
-- MODUŁ: STATYSTYKISTORYCZNE
--
-- Łączne statystyki zawodników drużyny koszykarskiej
-- ze wszystkich wprowadzonych sezonów.
--
-- Tabele:
-- 1. Mecze
-- 2. Punkty
-- 3. Minuty
-- 4. Asysty
-- 5. Zbiórki
-- 6. Bloki
--
-- Użycie:
--
-- {{#invoke:StatystykiHistoryczne|main
-- |druzyna=Enea Basket Poznań
-- }}
--
-- Moduł jest uniwersalny dla drużyn koszykarskich.
-- =========================================================


function p.main(frame)

    -- =====================================================
    -- DRUŻYNA
    -- =====================================================

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


    if druzyna == "" then

        return
            "''Nie podano drużyny.''"

    end


    -- =====================================================
    -- BEZPIECZNE PRZYGOTOWANIE NAZWY DRUŻYNY
    -- =====================================================

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


    -- =====================================================
    -- POLA POBIERANE Z CARGO
    -- =====================================================

    local fields = table.concat({

        "UdzialZawodnika.zawodnik=zawodnik",

        "UdzialZawodnika.druzyna=druzyna",

        "UdzialZawodnika.mecz=mecz",

        "UdzialZawodnika.minuty=minuty",

        "UdzialZawodnika.minuty_format=minuty_format",

        "UdzialZawodnika.gol=gol",

        "UdzialZawodnika.asysta=asysta",

        "UdzialZawodnika.zbiorka=zbiorka",

        "UdzialZawodnika.blok=blok"

    }, ",")


    -- =====================================================
    -- ZAPYTANIE CARGO
    -- =====================================================

    local args = {

        where =
            "UdzialZawodnika.druzyna='"
            .. druzynaSQL
            .. "'",

        limit = 5000

    }


    local rows =
        mw.ext.cargo.query(
            "UdzialZawodnika",
            fields,
            args
        )


    -- =====================================================
    -- BRAK DANYCH
    -- =====================================================

    if not rows or #rows == 0 then

        return
            "''Brak statystyk dla drużyny "
            .. druzyna
            .. " w bazie.''"

    end


    -- =====================================================
    -- STRUKTURA ZAWODNIKA
    -- =====================================================

    local zawodnicy = {}


    -- =====================================================
    -- NOWY REKORD ZAWODNIKA
    -- =====================================================

    local function nowyZawodnik()

        return {

            mecze = 0,

            punkty = 0,

            minuty = 0,

            asysty = 0,

            zbiorki = 0,

            bloki = 0

        }

    end


    -- =====================================================
    -- BEZPIECZNE POBIERANIE LICZBY
    -- =====================================================

    local function liczba(wartosc)

        return
            tonumber(wartosc or 0)
            or 0

    end


    -- =====================================================
    -- ZLICZANIE STATYSTYK
    -- =====================================================

    for _, row in ipairs(rows) do

        local zawodnik =
            mw.text.trim(
                row.zawodnik or ""
            )


        if zawodnik ~= "" then

            if not zawodnicy[zawodnik] then

                zawodnicy[zawodnik] =
                    nowyZawodnik()

            end


            local stat =
                zawodnicy[zawodnik]


            -- ----------