Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Utworzono nową stronę "local p = {} function p.main(frame) local team1 = frame.args.team1 or "" local team2 = frame.args.team2 or "" if team1 == "" or team2 == "" then return "'''Błąd:''' należy podać team1 i team2." end -- ========================================================= -- FUNKCJE POMOCNICZE -- ========================================================= local function esc(value) value = tostring(value or "") return…"
 
Nie podano opisu zmian
 
(Nie pokazano 15 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
local p = {}
local p = {}
-- =========================================================
-- MODUŁ:H2H
--
-- Historia bezpośrednich spotkań dwóch drużyn.
--
-- team1 = drużyna analizowana
-- team2 = przeciwnik
--
-- nazwa_statystyki1 / nazwa_statystyki2 służą do identyfikacji
-- drużyn niezależnie od historycznych nazw sponsorskich.
--
-- Zawiera:
-- 1. Bilans ogółem / dom / wyjazd
-- 2. Trenerów team1 w rywalizacji
-- 3. Najlepszych strzelców obu drużyn
-- 4. Rekordy indywidualne team1
-- 5. Serie zwycięstw / porażek
-- 6. Analizę kwart
-- 7. Wszystkie mecze
-- 8. Dogrywki 1, 2 i 3
-- =========================================================


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


     local team1 = frame.args.team1 or ""
    -- =====================================================
     local team2 = frame.args.team2 or ""
    -- PARAMETRY
    -- =====================================================
 
     local team1 = mw.text.trim(frame.args.team1 or "")
     local team2 = mw.text.trim(frame.args.team2 or "")
 
    if team1 == "" then
        return "'''Błąd:''' nie podano team1."
    end


     if team1 == "" or team2 == "" then
     if team2 == "" then
         return "'''Błąd:''' należy podać team1 i team2."
         return "'''Błąd:''' nie podano team2."
     end
     end


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


     local function esc(value)
    -- =====================================================
        value = tostring(value or "")
    -- BEZPIECZEŃSTWO SQL
         return mw.ustring.gsub(value, "'", "''")
    -- =====================================================
 
     local function sql(value)
 
         return mw.ustring.gsub(
            tostring(value or ""),
            "'",
            "''"
        )
 
     end
     end


    local t1 = esc(team1)
    local t2 = esc(team2)


     local function num(value)
    local team1SQL = sql(team1)
    local team2SQL = sql(team2)
 
 
    -- =====================================================
    -- FUNKCJE POMOCNICZE
    -- =====================================================
 
     local function liczba(value)
 
         if value == nil or value == "" then
         if value == nil or value == "" then
             return 0
             return 0
         end
         end


         value = tostring(value)
         local tekst =
        value = mw.ustring.gsub(value, "%s+", "")
            mw.ustring.gsub(
                tostring(value),
                "%s+",
                ""
            )
 
        return tonumber(tekst) or 0


        return tonumber(value) or 0
     end
     end


    local function wynik(row)


        local g1 = num(row.gole1)
    local function procent(wygrane, mecze)
        local g2 = num(row.gole2)


         if row.gole1 ~= nil and row.gole2 ~= nil then
         if mecze == 0 then
             return g1, g2
             return "0,0%"
         end
         end


         local w = row.wynik or ""
         local wartosc =
            (wygrane / mecze) * 100


         local a, b = w:match("(%d+)%s*:%s*(%d+)")
         return string.format(
            "%.1f%%",
            wartosc
        ):gsub("%.", ",")
 
    end


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


        return nil, nil
    -- =====================================================
     end
    -- IDENTYFIKACJA STRONY TEAM1
     -- =====================================================


     local function strona(row)
     local function miejsce(row)


         if row.druzyna1 == team1 then
         if row.ns1 == team1 then
             return "dom"
             return "dom"
         end
         end


         if row.druzyna2 == team1 then
         if row.ns2 == team1 then
             return "wyjazd"
             return "wyjazd"
         end
         end


         return nil
         return nil
    end
    -- =====================================================
    -- WYNIK TEAM1
    -- =====================================================
    local function wynikDruzyny(row)
        local g1 =
            liczba(row.gole1)
        local g2 =
            liczba(row.gole2)
        if row.ns1 == team1 then
            return g1, g2
        elseif row.ns2 == team1 then
            return g2, g1
        end
        return nil, nil
     end
     end
    -- =====================================================
    -- NAZWA MECZU
    -- =====================================================


     local function nazwaMeczu(row)
     local function nazwaMeczu(row)


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


         local nazwa =
 
         local tekst =
             d1 .. " – " .. d2
             d1 .. " – " .. d2


         if row.strona_meczu and row.strona_meczu ~= "" then
 
         if strona ~= "" then
 
             return "[[" ..
             return "[[" ..
                 row.strona_meczu ..
                 strona ..
                 "|" .. nazwa .. "]]"
                 "|" ..
                tekst ..
                "]]"
 
         end
         end


         return nazwa
 
         return tekst
 
     end
     end


    local function linkOsoby(osoba)


         if not osoba or osoba == "" then
    -- =====================================================
             return ""
    -- PARSOWANIE CZĘŚCI WYNIKU
    -- =====================================================
 
    local function parseWynikCzesciowy(value)
 
         if value == nil or value == "" then
             return nil, nil
        end
 
        local tekst =
            tostring(value)
 
        local a, b =
            tekst:match(
                "(%d+)%s*:%s*(%d+)"
            )
 
        if not a or not b then
            return nil, nil
         end
         end


         return "[[" .. osoba .. "]]"
         return
            tonumber(a),
            tonumber(b)
 
     end
     end




     -- =========================================================
     -- =====================================================
     -- MECZE H2H
    -- WARUNEK H2H
    -- =====================================================
 
    local whereH2H =
        "(" ..
        "(Mecze.nazwa_statystyki1='" ..
        team1SQL ..
        "' AND " ..
        "Mecze.nazwa_statystyki2='" ..
        team2SQL ..
        "')" ..
 
        " OR " ..
 
        "(Mecze.nazwa_statystyki1='" ..
        team2SQL ..
        "' AND " ..
        "Mecze.nazwa_statystyki2='" ..
        team1SQL ..
        "')" ..
 
        ")"
 
 
    -- =====================================================
     -- POBRANIE MECZÓW
     --
     --
     -- KLUCZOWE:
     -- UWAGA:
     -- używamy nazwa_statystyki1 / nazwa_statystyki2,
     -- pola nazywają się KWARTA1, KWARTA2 itd.
     -- a nie aktualnej nazwy sponsorskiej drużyny.
     -- a nie KWART1.
     -- =========================================================
     -- =====================================================


     local fieldsMecze = table.concat({
     local fieldsMecze = table.concat({


         "Mecze.id=mecz",
         "Mecze.id=mecz",
         "Mecze.data=data",
         "Mecze.data=data",
         "Mecze.sezon=sezon",
         "Mecze.sezon=sezon",
         "Mecze.druzyna1=druzyna1",
         "Mecze.druzyna1=druzyna1",
         "Mecze.druzyna2=druzyna2",
         "Mecze.druzyna2=druzyna2",
         "Mecze.nazwa_statystyki1=ns1",
         "Mecze.nazwa_statystyki1=ns1",
         "Mecze.nazwa_statystyki2=ns2",
         "Mecze.nazwa_statystyki2=ns2",
         "Mecze.gole1=gole1",
         "Mecze.gole1=gole1",
         "Mecze.gole2=gole2",
         "Mecze.gole2=gole2",
         "Mecze.wynik=wynik",
         "Mecze.wynik=wynik",
         "Mecze.kolejka=kolejka",
         "Mecze.wynik_do_przerwy=wynik_do_przerwy",
        "Mecze.hala=hala",
 
        "Mecze.widzowie=widzowie",
        "Mecze.sedziowie=sedziowie",
        "Mecze.strona_meczu=strona_meczu",
         "Mecze.kwarta1=kwarta1",
         "Mecze.kwarta1=kwarta1",
         "Mecze.kwarta2=kwarta2",
         "Mecze.kwarta2=kwarta2",
         "Mecze.kwarta3=kwarta3",
         "Mecze.kwarta3=kwarta3",
         "Mecze.kwarta4=kwarta4",
         "Mecze.kwarta4=kwarta4",
         "Mecze.dogrywka1=dogrywka1",
         "Mecze.dogrywka1=dogrywka1",
         "Mecze.dogrywka2=dogrywka2",
         "Mecze.dogrywka2=dogrywka2",
         "Mecze.dogrywka3=dogrywka3"
         "Mecze.dogrywka3=dogrywka3",
 
        "Mecze.hala=hala",
        "Mecze.widzowie=widzowie",
        "Mecze.sedziowie=sedziowie",
        "Mecze.strona_meczu=strona_meczu"


     }, ",")
     }, ",")


    local whereH2H =
        "(" ..
        "(Mecze.nazwa_statystyki1='" .. t1 ..
        "' AND Mecze.nazwa_statystyki2='" .. t2 .. "')" ..
        " OR " ..
        "(Mecze.nazwa_statystyki1='" .. t2 ..
        "' AND Mecze.nazwa_statystyki2='" .. t1 .. "')" ..
        ")"


     local mecze = mw.ext.cargo.query(
     local mecze =
        "Mecze",
        mw.ext.cargo.query(
        fieldsMecze,
            "Mecze",
        {
            fieldsMecze,
            where = whereH2H,
            {
            orderBy = "Mecze.data ASC",
                where = whereH2H,
            limit = 5000
 
        }
                orderBy =
    )
                    "Mecze.data ASC",
 
                limit = 5000
            }
        )




     if not mecze or #mecze == 0 then
     if not mecze or #mecze == 0 then
         return "'''Brak danych H2H dla podanych drużyn.'''"
 
         return
            "'''Brak meczów pomiędzy ''" ..
            team1 ..
            "'' a ''" ..
            team2 ..
            "''.'''"
 
     end
     end




     -- =========================================================
     -- =====================================================
     -- BILANS
     -- BILANS
     -- =========================================================
     -- =====================================================


     local bilans = {
     local bilans = {
        mecze = 0,
        wygrane1 = 0,
        wygrane2 = 0,
        punkty1 = 0,
        punkty2 = 0
    }


    for _, row in ipairs(mecze) do
        wszystkie = {
            mecze = 0,
            wygrane = 0,
            przegrane = 0,
            punktyZdobyte = 0,
            punktyStracone = 0
        },
 
        dom = {
            mecze = 0,
            wygrane = 0,
            przegrane = 0,
            punktyZdobyte = 0,
            punktyStracone = 0
        },
 
        wyjazd = {
            mecze = 0,
            wygrane = 0,
            przegrane = 0,
            punktyZdobyte = 0,
            punktyStracone = 0
        }


        local g1, g2 = wynik(row)
    }


        if g1 and g2 then


            bilans.mecze =
    -- =====================================================
                bilans.mecze + 1
    -- SERIE
    -- =====================================================


            if row.ns1 == team1 then
    local serie = {


                bilans.punkty1 =
        wszystkie = {
                    bilans.punkty1 + g1
            W = 0,
            P = 0
        },


                bilans.punkty2 =
        dom = {
                    bilans.punkty2 + g2
            W = 0,
            P = 0
        },


                if g1 > g2 then
        wyjazd = {
                    bilans.wygrane1 =
            W = 0,
                        bilans.wygrane1 + 1
            P = 0
                elseif g2 > g1 then
        }
                    bilans.wygrane2 =
                        bilans.wygrane2 + 1
                end


            else
    }