Przejdź do zawartości

Moduł:StatystykiHistoryczne: 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 24: Linia 24:
-- }}
-- }}
--
--
-- Zawodnicy występujący w sezonie_biezacy są
-- Zawodnicy występujący w wybranym sezonie
-- wyróżniani pogrubieniem.
-- wyróżniani pogrubieniem.
-- =========================================================
-- =========================================================


Linia 85: Linia 85:


     -- =====================================================
     -- =====================================================
     -- POBRANIE DANYCH Z CARGO
    -- FUNKCJA LICZBOWA
    -- =====================================================
 
    local function liczba(value)
 
        return
            tonumber(value or 0)
            or 0
 
    end
 
 
    -- =====================================================
    -- USTALENIE SEZONU WYRÓŻNIENIA
    -- =====================================================
 
    local sezonWyroznienia = ""
    local znalezionoBiezacy = false
 
 
    -- -----------------------------------------------------
    -- Najpierw sprawdzamy sezon podany przez użytkownika
    -- -----------------------------------------------------
 
    if sezonSQL ~= "" then
 
        local sprawdzenieSezonu =
            mw.ext.cargo.query(
                "UdzialZawodnika,Mecze",
 
                "UdzialZawodnika.zawodnik=zawodnik",
 
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",
 
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND Mecze.sezon='"
                        .. sezonSQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",
 
                    groupBy =
                        "UdzialZawodnika.zawodnik",
 
                    limit = 5000
                }
            )
 
 
        if sprawdzenieSezonu
            and #sprawdzenieSezonu > 0 then
 
            sezonWyroznienia = sezonBiezacy
            znalezionoBiezacy = true
 
        end
 
    end
 
 
    -- =====================================================
    -- JEŻELI NIE MA DANYCH DLA PODANEGO SEZONU
    -- SZUKAMY OSTATNIEGO SEZONU
    -- =====================================================
 
    if not znalezionoBiezacy then
 
        local sezony =
            mw.ext.cargo.query(
                "UdzialZawodnika,Mecze",
 
                "Mecze.sezon=sezon",
 
                {
                    join =
                        "UdzialZawodnika.mecz=Mecze.id",
 
                    where =
                        "UdzialZawodnika.druzyna='"
                        .. druzynaSQL
                        .. "'"
                        .. " AND UdzialZawodnika.minuty > 0",
 
                    groupBy =
                        "Mecze.sezon",
 
                    orderBy =
                        "Mecze.sezon DESC",
 
                    limit = 100
                }
            )
 
 
        if sezony and #sezony > 0 then
 
            sezonWyroznienia =
                mw.text.trim(
                    sezony[1].sezon or ""
                )
 
        end
 
    end
 
 
    -- =====================================================
     -- POBRANIE ŁĄCZNYCH DANYCH STATYSTYCZNYCH
     -- =====================================================
     -- =====================================================


Linia 111: Linia 222:
     -- =====================================================
     -- =====================================================


    local where =
local where =
        "UdzialZawodnika.druzyna='"
    "UdzialZawodnika.druzyna='"
        .. druzynaSQL
    .. druzynaSQL
        .. "'"
    .. "'"
    .. " AND UdzialZawodnika.minuty > 0"




Linia 151: Linia 263:


     -- =====================================================
     -- =====================================================
     -- FUNKCJA LICZBOWA
     -- AKTUALNI ZAWODNICY
     -- =====================================================
     -- =====================================================


     local function liczba(value)
     local aktualni = {}
 
        return
            tonumber(value or 0)
            or 0


    end


    if sezonWyroznienia ~= "" then


    -- =====================================================
        local sezonAktualnySQL =
    -- SPRAWDZENIE AKTUALNYCH ZAWODNIKÓW
            mw.ustring.gsub(
    --
                sezonWyroznienia,
    -- Zawodnik jest uznawany za obecnego, jeżeli ma
                "'",
    -- przynajmniej jeden występ w podanym sezonie.
                "''"
    -- =====================================================
            )


    local aktualni = {}
    if sezonSQL ~= "" then


         local currentRows =
         local currentRows =
Linia 190: Linia 294:
                         .. "'"
                         .. "'"
                         .. " AND Mecze.sezon='"
                         .. " AND Mecze.sezon='"
                         .. sezonSQL
                         .. sezonAktualnySQL
                         .. "'"
                         .. "'"
                         .. " AND UdzialZawodnika.minuty > 0",
                         .. " AND UdzialZawodnika.minuty > 0",
Linia 254: Linia 358:
                         liczba(row.punkty),
                         liczba(row.punkty),


                    -- Cargo przechowuje minuty jako SEKUNDY
                     minuty =
                     minuty =
                         liczba(row.minuty),
                         liczba(row.minuty),
Linia 280: Linia 385:
     -- FORMATOWANIE MINUT
     -- FORMATOWANIE MINUT
     --
     --
     -- Wartość Cargo jest traktowana jako liczba sekund.
     -- WAŻNE:
     -- Wynik: HH:MM:SS
    -- Pole UdzialZawodnika.minuty jest zapisane w SEKUNDACH.
    --
    -- Przykład:
    -- 103775 sekund = 1729 minut 35 sekund
    --
     -- Wynik:
    -- 1729:35
     -- =====================================================
     -- =====================================================


     local function formatujMinuty(sekundy)
     local function formatujMinuty(sekundy)


         sekundy =
         local wartosc =
             math.floor(
             tonumber(sekundy or 0)
                tonumber(sekundy or 0)
            or 0
                or 0
            )




         local godziny =
         wartosc =
             math.floor(
             math.floor(
                 sekundy / 3600
                 wartosc + 0.5
             )
             )




         local minuty =
         local caleMinuty =
             math.floor(
             math.floor(
                 (sekundy % 3600) / 60
                 wartosc / 60
             )
             )




         local sekundyPozostale =
         local pozostaleSekundy =
             sekundy % 60
             wartosc % 60




         return string.format(
         return string.format(
             "%d:%02d:%02d",
             "%d:%02d",
             godziny,
             caleMinuty,
             minuty,
             pozostaleSekundy
            sekundyPozostale
         )
         )


Linia 327: Linia 435:
         local nazwa =
         local nazwa =
             row.zawodnik
             row.zawodnik
        -- Bezpieczne przygotowanie nazwy strony.
        local strona =
            mw.uri.encode(
                nazwa,
                "WIKI"
            )




Linia 345: Linia 445:




         -- -----------------------------------------------
         -- -------------------------------------------------
         -- WYRÓŻNIENIE AKTUALNEGO ZAWODNIKA
         -- AKTUALNY ZAWODNIK = POGRUBIENIE
         -- -----------------------------------------------
         -- -------------------------------------------------


         if row.aktualny then
         if row.aktualny then
Linia 538: Linia 638:
         local lista = {}
         local lista = {}


        -- -----------------------------------------------
        -- KOPIA LISTY ZAWODNIKÓW
        -- -----------------------------------------------


         for _, zawodnik in ipairs(zawodnicy) do
         for _, zawodnik in ipairs(zawodnicy) do
Linia 552: Linia 648:
         end
         end


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


         table.sort(
         table.sort(
Linia 568: Linia 660:




         -- -----------------------------------------------
         -- -------------------------------------------------
        -- OTWARCIE TABELI
         -- TABELA
        --
         -- -------------------------------------------------
         -- Bardzo ważne:
         -- {| musi rozpoczynać nową linię.
        -- -----------------------------------------------


         table.insert(
         table.insert(
Linia 581: Linia 670:




         -- -----------------------------------------------
         -- -------------------------------------------------
         -- TYTUŁ
         -- NAGŁÓWEK
         -- -----------------------------------------------
         -- -------------------------------------------------


         table.insert(
         table.insert(
Linia 593: Linia 682:




         -- -----------------------------------------------
         table.insert(
         -- NAGŁÓWKI
            wynik,
         -- -----------------------------------------------
            "! Miejsce"
         )
 
 
         table.insert(
            wynik,
            "! Zawodnik"
        )
 


         table.insert(
         table.insert(
             wynik,
             wynik,
             "! Miejsce !! Zawodnik !! "
             "! "
             .. mw.ustring.upper(
             .. definicja.nazwa
                definicja.nazwa
            )
         )
         )




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


         for i, zawodnik in ipairs(lista) do
         for i, zawodnik in ipairs(lista) do
Linia 618: Linia 713:




             -- Miejsce
             -- miejsce


             table.insert(
             table.insert(
Linia 627: Linia 722:




             -- Zawodnik
             -- zawodnik


             table.insert(
             table.insert(
Linia 638: Linia 733:




             -- Wartość
             -- wartość


             table.insert(
             table.insert(
Linia 653: Linia 748:
         end
         end


        -- -----------------------------------------------
        -- ZAMKNIĘCIE TABELI
        -- -----------------------------------------------


         table.insert(
         table.insert(
Linia 694: Linia 785:


     -- =====================================================
     -- =====================================================
     -- INFORMACJA O WYRÓŻNIENIU
     -- INFORMACJA O AKTUALNYCH ZAWODNIKACH
     -- =====================================================
     -- =====================================================


     if sezonBiezacy ~= "" then
     if sezonWyroznienia ~= "" then


         table.insert(
         table.insert(
             wynik,
             wynik,
             "'''''"
             "'''''Pogrubieniem wyróżniono zawodników "
            .. "Pogrubieniem wyróżniono zawodników "
             .. "występujących w sezonie "
             .. "występujących w sezonie "
             .. sezonBiezacy
             .. sezonWyroznienia
             .. "."
             .. ".'''''"
            .. "'''''"
         )
         )


Linia 713: Linia 802:
             wynik,
             wynik,
             ""
             ""
         )
         )


Linia 721: Linia 811:
     -- UKŁAD 3 KOLUMNY
     -- UKŁAD 3 KOLUMNY
     --
     --
     -- 1. MECZE
     -- WAŻNE:
     -- 2. PUNKTY
     -- Każda tabela zaczyna się od początku linii.
     -- 3. MINUTY
     -- Dzięki temu MediaWiki poprawnie rozpoznaje
     --
     -- składnię {| ... |}.
    -- 4. ASYSTY
    -- 5. ZBIÓRKI
    -- 6. BLOKI
     -- =====================================================
     -- =====================================================


     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div style="display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:12px; align-items:start;">'
         '<div style="display:flex; flex-wrap:wrap; gap:12px; align-items:flex-start;">'
     )
     )


Linia 742: Linia 829:
     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div style="min-width:0;">'
         '<div style="flex:1 1 calc(33.333% - 12px); min-width:280px;">'
     )
     )


Linia 764: Linia 851:
     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div style="min-width:0;">'
         '<div style="flex:1 1 calc(33.333% - 12px); min-width:280px;">'
     )
     )


Linia 786: Linia 873:
     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div style="min-width:0;">'
         '<div style="flex:1 1 calc(33.333% - 12px); min-width:280px;">'
     )
     )


Linia 808: Linia 895:
     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div style="min-width:0;">'
         '<div style="flex:1 1 calc(33.333% - 12px); min-width:280px;">'
     )
     )


Linia 830: Linia 917:
     table.insert(
     table.insert(
         wynik,
         wynik,
         '<div style="min-width:0;">'
         '<div style="flex:1 1 calc(33.333% - 12px); min-width:280px;">'
     )
     )


Linia 852: Linia 939:
     table.insert(