Przejdź do zawartości

Moduł:HistoriaWystepow

Z Encyklopedia Poznanskiego Sportu

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

local p = {}

function p.main(frame)

    local zawodnik = frame.args.zawodnik

    if not zawodnik or zawodnik == "" then
        zawodnik = mw.title.getCurrentTitle().text
    end

    -- ==========================================
    -- BEZPIECZNE PRZYGOTOWANIE NAZWY
    -- ==========================================

    local zawodnikSQL = mw.ustring.gsub(zawodnik, "'", "''")

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

    local fields = table.concat({
        "UdzialZawodnika.mecz=mecz",
        "UdzialZawodnika.druzyna=druzyna",
        "UdzialZawodnika.minuty=minuty",
        "UdzialZawodnika.minuty_format=minuty_format",
        "UdzialZawodnika.gol=gol",
        "UdzialZawodnika.eval=eval",
        "UdzialZawodnika.plusminus=plusminus",
        "Mecze.data=data",
        "Mecze.druzyna1=druzyna1",
        "Mecze.druzyna2=druzyna2",
        "Mecze.wynik=wynik",
        "Mecze.strona_meczu=strona_meczu"
    }, ",")

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

    local args = {
        join = "UdzialZawodnika.mecz=Mecze.id",
        where = "UdzialZawodnika.zawodnik='" .. zawodnikSQL .. "' AND UdzialZawodnika.minuty > 0",
        orderBy = "Mecze.data ASC",
        limit = 5000
    }

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

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

    if not rows or #rows == 0 then
        return "''Brak wprowadzonych występów w bazie.''"
    end

    -- ==========================================
    -- PODSUMOWANIE - WSZYSTKIE MECZE
    -- ==========================================

    local suma = {
        wystepy = 0,
        zwyciestwa = 0,
        porazki = 0,
        remisy = 0,
        punkty = 0,
        minuty = 0,
        eval = 0,
        plusminus = 0
    }

    -- ==========================================
    -- PODSUMOWANIE - MECZE DOMOWE
    -- ==========================================

    local dom = {
        wystepy = 0,
        zwyciestwa = 0,
        porazki = 0,
        remisy = 0,
        punkty = 0,
        minuty = 0,
        eval = 0,
        plusminus = 0
    }

    -- ==========================================
    -- PODSUMOWANIE - MECZE WYJAZDOWE
    -- ==========================================

    local wyjazd = {
        wystepy = 0,
        zwyciestwa = 0,
        porazki = 0,
        remisy = 0,
        punkty = 0,
        minuty = 0,
        eval = 0,
        plusminus = 0
    }

    -- ==========================================
    -- OKREŚLENIE WYNIKU MECZU
    -- ==========================================

    local function okreslWynik(row)

        local d1 = row.druzyna1 or ""
        local d2 = row.druzyna2 or ""
        local druzyna = row.druzyna or ""
        local wynikMeczu = row.wynik or ""

        local g1, g2 = wynikMeczu:match("(%d+)%s*:%s*(%d+)")

        if not g1 or not g2 then
            return nil
        end

        g1 = tonumber(g1)
        g2 = tonumber(g2)

        if druzyna == d1 then

            if g1 > g2 then
                return "W"
            elseif g1 < g2 then
                return "P"
            else
                return "R"
            end

        elseif druzyna == d2 then

            if g2 > g1 then
                return "W"
            elseif g2 < g1 then
                return "P"
            else
                return "R"
            end

        end

        return nil
    end

    -- ==========================================
    -- DODANIE MECZU DO PODSUMOWANIA
    -- ==========================================

    local function dodajDoPodsumowania(stat, row)

        stat.wystepy = stat.wystepy + 1

        stat.punkty = stat.punkty + tonumber(row.gol or 0)
        stat.minuty = stat.minuty + tonumber(row.minuty or 0)
        stat.eval = stat.eval + tonumber(row.eval or 0)
        stat.plusminus = stat.plusminus + tonumber(row.plusminus or 0)

        local wynik = okreslWynik(row)

        if wynik == "W" then

            stat.zwyciestwa = stat.zwyciestwa + 1

        elseif wynik == "P" then

            stat.porazki = stat.porazki + 1

        elseif wynik == "R" then

            stat.remisy = stat.remisy + 1

        end
    end

    -- ==========================================
    -- PRZEJŚCIE PRZEZ WSZYSTKIE WYSTĘPY
    -- ==========================================

    for _, row in ipairs(rows) do

        -- Wszystkie spotkania
        dodajDoPodsumowania(suma, row)

        local d1 = row.druzyna1 or ""
        local d2 = row.druzyna2 or ""
        local druzyna = row.druzyna or ""

        -- Dom
        if druzyna == d1 then

            dodajDoPodsumowania(dom, row)

        -- Wyjazd
        elseif druzyna == d2 then

            dodajDoPodsumowania(wyjazd, row)

        end

    end

    -- ==========================================
    -- FORMATOWANIE MINUT
    -- ==========================================

    local function formatujMinuty(minuty)

        local godziny = math.floor(minuty / 60)
        local min = minuty % 60

        return string.format(
            "%d:%02d",
            godziny,
            min
        )
    end

    -- ==========================================
    -- WYNIK
    -- ==========================================

    local wynik = {}

    table.insert(
        wynik,
        "== Historia występów =="
    )

    table.insert(wynik, "")

    -- ==========================================
    -- TABELA PODSUMOWANIA
    -- ==========================================

    table.insert(
        wynik,
        "=== Podsumowanie ==="
    )

    table.insert(wynik, "")

    table.insert(
        wynik,
        '{| class="wikitable" style="width:100%; text-align:center;"'
    )

    -- Nagłówki

    table.insert(
        wynik,
        "! "
    )

    table.insert(
        wynik,
        "! Wszystkie spotkania"
    )

    table.insert(
        wynik,
        "! Mecze domowe"
    )

    table.insert(
        wynik,
        "! Mecze wyjazdowe"
    )

    -- Występy

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! Występy"
    )

    table.insert(
        wynik,
        "| '''" .. suma.wystepy .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. dom.wystepy .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. wyjazd.wystepy .. "'''"
    )

    -- Zwycięstwa

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! Zwycięstwa"
    )

    table.insert(
        wynik,
        "| '''" .. suma.zwyciestwa .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. dom.zwyciestwa .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. wyjazd.zwyciestwa .. "'''"
    )

    -- Porażki

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! Porażki"
    )

    table.insert(
        wynik,
        "| '''" .. suma.porazki .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. dom.porazki .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. wyjazd.porazki .. "'''"
    )

    -- Remisy

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! Remisy"
    )

    table.insert(
        wynik,
        "| '''" .. suma.remisy .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. dom.remisy .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. wyjazd.remisy .. "'''"
    )

    -- Punkty

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! Punkty"
    )

    table.insert(
        wynik,
        "| '''" .. suma.punkty .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. dom.punkty .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. wyjazd.punkty .. "'''"
    )

    -- Minuty

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! Minuty"
    )

    table.insert(
        wynik,
        "| '''" .. formatujMinuty(suma.minuty) .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. formatujMinuty(dom.minuty) .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. formatujMinuty(wyjazd.minuty) .. "'''"
    )

    -- EVAL

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! EVAL"
    )

    table.insert(
        wynik,
        "| '''" .. suma.eval .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. dom.eval .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. wyjazd.eval .. "'''"
    )

    -- Plus/minus

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! +/-"
    )

    table.insert(
        wynik,
        "| '''" .. suma.plusminus .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. dom.plusminus .. "'''"
    )

    table.insert(
        wynik,
        "| '''" .. wyjazd.plusminus .. "'''"
    )

    table.insert(
        wynik,
        "|}"
    )

    table.insert(wynik, "")

    -- ==========================================
    -- TABELA WYSTĘPÓW
    -- ==========================================

    table.insert(
        wynik,
        '{| class="wikitable sortable" style="width:100%;"'
    )

    table.insert(wynik, "! Nr")
    table.insert(wynik, "! Data")
    table.insert(wynik, "! Miejsce")
    table.insert(wynik, "! Przeciwnik")
    table.insert(wynik, "! Wynik")
    table.insert(wynik, "! Min.")
    table.insert(wynik, "! Pkt")
    table.insert(wynik, "! EVAL")
    table.insert(wynik, "! +/-")
    table.insert(wynik, "! Jubileusz")

    -- ==========================================
    -- POSZCZEGÓLNE MECZE
    -- ==========================================

    for i, row in ipairs(rows) do

        local data = row.data or ""

        local d1 = row.druzyna1 or ""
        local d2 = row.druzyna2 or ""

        local druzyna = row.druzyna or ""

        local wynikMeczu = row.wynik or ""

        local strona = row.strona_meczu or ""

        local minutyFormat = row.minuty_format or ""

        local pkt = row.gol or "0"

        local eval = row.eval or "0"

        local plusminus = row.plusminus or "0"

        -- ======================================
        -- MIEJSCE MECZU
        -- ======================================

        local miejsce = ""

        if druzyna == d1 then

            miejsce = "🏠 Dom"

        elseif druzyna == d2 then

            miejsce = "✈️ Wyjazd"

        end

        -- ======================================
        -- PRZECIWNIK
        -- ======================================

        local przeciwnik = ""

        if druzyna == d1 then

            przeciwnik = d2

        elseif druzyna == d2 then

            przeciwnik = d1

        else

            przeciwnik = d1

        end

        -- ======================================
        -- LINK DO STRONY MECZU
        -- ======================================

        local meczTekst = przeciwnik

        if strona ~= "" then

            meczTekst =
                "[["
                .. strona
                .. "|"
                .. przeciwnik
                .. "]]"

        end

        -- ======================================
        -- JUBILEUSZ
        -- ======================================

        local jubileusz = ""

        if i % 50 == 0 then

            jubileusz =
                "'''🏆 "
                .. i
                .. ". występ'''"

        end

        -- ======================================
        -- WIERSZ TABELI
        -- ======================================

        table.insert(wynik, "|-")

        table.insert(
            wynik,
            "| " .. i
        )

        table.insert(
            wynik,
            "| " .. data
        )

        table.insert(
            wynik,
            "| " .. miejsce
        )

        table.insert(
            wynik,
            "| " .. meczTekst
        )

        table.insert(
            wynik,
            "| " .. wynikMeczu
        )

        table.insert(
            wynik,
            "| " .. minutyFormat
        )

        table.insert(
            wynik,
            "| " .. pkt
        )

        table.insert(
            wynik,
            "| " .. eval
        )

        table.insert(
            wynik,
            "| " .. plusminus
        )

        table.insert(
            wynik,
            "| " .. jubileusz
        )

    end

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

    table.insert(
        wynik,
        "|}"
    )

    return table.concat(
        wynik,
        "\n"
    )
end

return p