Przejdź do zawartości

Moduł:HistoriaWystepowPiłka

Z Encyklopedia Poznanskiego Sportu

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

local p = {}

-- =========================================================
-- MODUŁ:HISTORIAWYSTĘPÓW
--
-- Historia występów zawodnika - PIŁKA NOŻNA
--
-- Pokazuje wyłącznie występy zawodnika
-- w drużynach poznańskich.
-- =========================================================


-- =========================================================
-- DRUŻYNY POZNAŃSKIE
-- =========================================================

local druzynyPoznanskie = {

    ["Lech Poznań"] = true,

    ["Warta Poznań"] = true,

    ["Lech Poznań UAM"] = true,

    ["Enea Basket Poznań"] = true,

    ["Enea AZS Politechnika Poznań"] = true,

    ["AZS Politechnika Poznań"] = true,

    ["MUKS Poznań"] = true

}


function p.main(frame)

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


    if zawodnik == "" then

        zawodnik =
            mw.title
                .getCurrentTitle()
                .text

    end


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

    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.asysta=asysta",

        "Mecze.data=data",
        "Mecze.sezon=sezon",

        "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
        )


    -- =====================================================
    -- FILTR DRUŻYN POZNAŃSKICH
    -- =====================================================

    local tylkoPoznanskie = {}


    if rows then

        for _, row in ipairs(rows) do

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


            if druzynyPoznanskie[druzyna] then

                table.insert(
                    tylkoPoznanskie,
                    row
                )

            end

        end

    end


    rows =
        tylkoPoznanskie


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

    if not rows or #rows == 0 then

        return
            "''Brak wprowadzonych występów zawodnika "
            .. "dla drużyn poznańskich w bazie.''"

    end


    -- =====================================================
    -- PODSUMOWANIE
    -- =====================================================

    local function nowePodsumowanie()

        return {

            wystepy = 0,

            zwyciestwa = 0,
            porazki = 0,
            remisy = 0,

            gole = 0,
            minuty = 0,

            asysty = 0

        }

    end


    -- =====================================================
    -- PODSUMOWANIA
    -- =====================================================

    local suma =
        nowePodsumowanie()


    local dom =
        nowePodsumowanie()


    local wyjazd =
        nowePodsumowanie()


    -- =====================================================
    -- SEZONY
    -- =====================================================

    local sezony = {}


    -- =====================================================
    -- KLUBY
    -- =====================================================

    local kluby = {}


    -- =====================================================
    -- 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.gole =
            stat.gole
            + (
                tonumber(row.gol or 0)
                or 0
            )


        stat.minuty =
            stat.minuty
            + (
                tonumber(row.minuty or 0)
                or 0
            )


        stat.asysty =
            stat.asysty
            + (
                tonumber(row.asysta or 0)
                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 MECZE
    -- =====================================================

    for _, row in ipairs(rows) do


        -- -----------------------------------------------
        -- WSZYSTKIE
        -- -----------------------------------------------

        dodajDoPodsumowania(
            suma,
            row
        )


        -- -----------------------------------------------
        -- DOM / WYJAZD
        -- -----------------------------------------------

        local d1 =
            row.druzyna1 or ""


        local d2 =
            row.druzyna2 or ""


        local druzyna =
            row.druzyna or ""


        if druzyna == d1 then

            dodajDoPodsumowania(
                dom,
                row
            )


        elseif druzyna == d2 then

            dodajDoPodsumowania(
                wyjazd,
                row
            )

        end


        -- -----------------------------------------------
        -- SEZON
        -- -----------------------------------------------

        local sezon =
            row.sezon or ""


        if sezon == "" then

            sezon =
                "Brak sezonu"

        end


        if not sezony[sezon] then

            sezony[sezon] =
                nowePodsumowanie()

        end


        dodajDoPodsumowania(
            sezony[sezon],
            row
        )


        -- -----------------------------------------------
        -- KLUB
        -- -----------------------------------------------

        if druzyna == "" then

            druzyna =
                "Brak klubu"

        end


        if not kluby[druzyna] then

            kluby[druzyna] =
                nowePodsumowanie()

        end


        dodajDoPodsumowania(
            kluby[druzyna],
            row
        )

    end


    -- =====================================================
    -- SORTOWANIE SEZONÓW
    -- =====================================================

    local listaSezonow = {}


    for sezon, _ in pairs(sezony) do

        table.insert(
            listaSezonow,
            sezon
        )

    end


    table.sort(
        listaSezonow,
        function(a, b)

            return a > b

        end
    )


    -- =====================================================
    -- SORTOWANIE KLUBÓW
    -- =====================================================

    local listaKlubow = {}


    for klub, _ in pairs(kluby) do

        table.insert(
            listaKlubow,
            klub
        )

    end


    table.sort(
        listaKlubow
    )


    -- =====================================================
    -- OPIS MECZU
    -- =====================================================

    local function rekordMecz(row)

        local d1 =
            row.druzyna1 or ""


        local d2 =
            row.druzyna2 or ""


        local data =
            row.data or ""


        local wynikMeczu =
            row.wynik or ""


        local strona =
            row.strona_meczu or ""


        local meczTekst =
            d1
            .. " – "
            .. d2


        if strona ~= "" then

            meczTekst =
                "[["
                .. strona
                .. "|"
                .. d1
                .. " – "
                .. d2
                .. "]]"

        end


        if data ~= "" then

            meczTekst =
                meczTekst
                .. " ("
                .. data
                .. ")"

        end


        if wynikMeczu ~= "" then

            meczTekst =
                meczTekst
                .. " "
                .. wynikMeczu

        end


        return meczTekst

    end


    -- =====================================================
    -- REKORDY
    -- =====================================================

    local rekordGole = -1
    local rekordAsysty = -1


    local meczeGole = {}
    local meczeAsysty = {}


    -- =====================================================
    -- WYSZUKIWANIE REKORDÓW
    -- =====================================================

    for _, row in ipairs(rows) do

        local gole =
            tonumber(row.gol or 0)
            or 0


        local asysty =
            tonumber(row.asysta or 0)
            or 0


        -- -----------------------------------------------
        -- GOLE
        -- -----------------------------------------------

        if gole > rekordGole then

            rekordGole =
                gole

            meczeGole =
                { row }


        elseif gole == rekordGole then

            table.insert(
                meczeGole,
                row
            )

        end


        -- -----------------------------------------------
        -- ASYSTY
        -- -----------------------------------------------

        if asysty > rekordAsysty then

            rekordAsysty =
                asysty

            meczeAsysty =
                { row }


        elseif asysty == rekordAsysty then

            table.insert(
                meczeAsysty,
                row
            )

        end

    end


    -- =====================================================
    -- LISTA REKORDÓW
    -- =====================================================

    local function listaRekordow(lista)

        local wynikRekordu = {}


        for _, row in ipairs(lista) do

            table.insert(
                wynikRekordu,
                rekordMecz(row)
            )

        end


        return table.concat(
            wynikRekordu,
            "<br>"
        )

    end


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

    local wynik = {}


    -- =====================================================
    -- HISTORIA
    -- =====================================================

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


    table.insert(
        wynik,
        ""
    )


    -- =====================================================
    -- PODSUMOWANIE
    -- =====================================================

    table.insert(
        wynik,
        "=== Podsumowanie wszystkich spotkań ==="
    )


    table.insert(
        wynik,
        ""
    )


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


    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 .. "'''")



    -- GOLE

    table.insert(wynik, "|-")
    table.insert(wynik, "! Gole")
    table.insert(wynik, "| '''" .. suma.gole .. "'''")
    table.insert(wynik, "| '''" .. dom.gole .. "'''")
    table.insert(wynik, "| '''" .. wyjazd.gole .. "'''")



    -- MINUTY

    table.insert(wynik, "|-")
    table.insert(wynik, "! Minuty")
    table.insert(wynik, "| '''" .. suma.minuty .. "'''")
    table.insert(wynik, "| '''" .. dom.minuty .. "'''")
    table.insert(wynik, "| '''" .. wyjazd.minuty .. "'''")



    -- ASYSTY

    table.insert(wynik, "|-")
    table.insert(wynik, "! Asysty")
    table.insert(wynik, "| '''" .. suma.asysty .. "'''")
    table.insert(wynik, "| '''" .. dom.asysty .. "'''")
    table.insert(wynik, "| '''" .. wyjazd.asysty .. "'''")



    table.insert(
        wynik,
        "|}"
    )


    table.insert(
        wynik,
        ""
    )


    -- =====================================================
    -- NAJLEPSZE WYSTĘPY
    -- =====================================================

    table.insert(
        wynik,
        "=== Najlepsze występy ==="
    )


    table.insert(
        wynik,
        ""
    )


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


    table.insert(
        wynik,
        "! Rekord"
    )


    table.insert(
        wynik,
        "! Wynik"
    )


    table.insert(
        wynik,
        "! Mecz / mecze"
    )


    -- GOLE

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! ⚽ Najwięcej goli"
    )

    table.insert(
        wynik,
        "| '''" .. rekordGole .. "'''"
    )

    table.insert(
        wynik,
        "| " .. listaRekordow(meczeGole)
    )


    -- ASYSTY

    table.insert(wynik, "|-")

    table.insert(
        wynik,
        "! 🎯 Najwięcej asyst"
    )

    table.insert(
        wynik,
        "| '''" .. rekordAsysty .. "'''"
    )

    table.insert(
        wynik,
        "| " .. listaRekordow(meczeAsysty)
    )


    table.insert(
        wynik,
        "|}"
    )


    table.insert(
        wynik,
        ""
    )


    -- =====================================================
    -- PODSUMOWANIE SEZONÓW
    -- =====================================================

    table.insert(
        wynik,
        "=== Podsumowanie sezonów ==="
    )


    table.insert(
        wynik,
        ""
    )


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


    table.insert(wynik, "! Sezon")
    table.insert(wynik, "! Występy")
    table.insert(wynik, "! Zwycięstwa")
    table.insert(wynik, "! Porażki")
    table.insert(wynik, "! Remisy")
    table.insert(wynik, "! Gole")
    table.insert(wynik, "! Minuty")
    table.insert(wynik, "! Asysty")


    for _, sezon in ipairs(listaSezonow) do

        local stat =
            sezony[sezon]


        table.insert(
            wynik,
            "|-"
        )


        table.insert(
            wynik,
            "| '''"
            .. sezon
            .. "'''"
        )


        table.insert(
            wynik,
            "| " .. stat.wystepy
        )


        table.insert(
            wynik,
            "| " .. stat.zwyciestwa
        )


        table.insert(
            wynik,
            "| " .. stat.porazki
        )


        table.insert(
            wynik,
            "| " .. stat.remisy
        )


        table.insert(
            wynik,
            "| " .. stat.gole
        )


        table.insert(
            wynik,
            "| " .. stat.minuty
        )


        table.insert(
            wynik,
            "| " .. stat.asysty
        )

    end


    table.insert(
        wynik,
        "|}"
    )


    table.insert(
        wynik,
        ""
    )


    -- =====================================================
    -- PODSUMOWANIE WEDŁUG KLUBU
    -- =====================================================

    table.insert(
        wynik,
        "=== Podsumowanie według klubu ==="
    )


    table.insert(
        wynik,
        ""
    )


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


    table.insert(wynik, "! Klub")
    table.insert(wynik, "! Występy")
    table.insert(wynik, "! Zwycięstwa")
    table.insert(wynik, "! Porażki")
    table.insert(wynik, "! Remisy")
    table.insert(wynik, "! Gole")
    table.insert(wynik, "! Minuty")
    table.insert(wynik, "! Asysty")


    for _, klub in ipairs(listaKlubow) do

        local stat =
            kluby[klub]


        table.insert(
            wynik,
            "|-"
        )


        table.insert(
            wynik,
            "| '''"
            .. klub
            .. "'''"
        )


        table.insert(
            wynik,
            "| " .. stat.wystepy
        )


        table.insert(
            wynik,
            "| " .. stat.zwyciestwa
        )


        table.insert(
            wynik,
            "| " .. stat.porazki
        )


        table.insert(
            wynik,
            "| " .. stat.remisy
        )


        table.insert(
            wynik,
            "| " .. stat.gole
        )


        table.insert(
            wynik,
            "| " .. stat.minuty
        )


        table.insert(
            wynik,
            "| " .. stat.asysty
        )

    end


    table.insert(
        wynik,
        "|}"
    )


    table.insert(
        wynik,
        ""
    )


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

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


    table.insert(
        wynik,
        ""
    )


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


    table.insert(wynik, "! Nr")
    table.insert(wynik, "! Sezon")
    table.insert(wynik, "! Data")
    table.insert(wynik, "! Miejsce")
    table.insert(wynik, "! Przeciwnik")
    table.insert(wynik, "! Wynik")
    table.insert(wynik, "! Min.")
    table.insert(wynik, "! Gole")
    table.insert(wynik, "! As.")
    table.insert(wynik, "! Jubileusz")


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

    for i, row in ipairs(rows) do

        local data =
            row.data or ""


        local sezon =
            row.sezon 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 gole =
            row.gol or "0"


        local asysty =
            row.asysta or "0"



        -- -----------------------------------------------
        -- DOM / WYJAZD
        -- -----------------------------------------------

        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 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
        -- -----------------------------------------------

        table.insert(
            wynik,
            "|-"
        )


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


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


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


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


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


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


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


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


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


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

    end


    -- =====================================================
    -- KONIEC TABELI
    -- =====================================================

    table.insert(
        wynik,
        "|}"
    )


    -- =====================================================
    -- ZWRÓCENIE WYNIKU
    -- =====================================================

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

end


return p