Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
Linia 2: Linia 2:


-- =========================================================
-- =========================================================
-- Moduł:H2H
-- MODUŁ:H2H
--
--
-- Historia bezpośrednich spotkań dwóch drużyn
-- Historia bezpośrednich spotkań dwóch drużyn.
--
--
-- Funkcje:
-- team1 = drużyna analizowana
--   • bilans spotkań
-- team2 = przeciwnik
--  • suma punktów obu drużyn
--  • wszystkie mecze
--  • najlepsi strzelcy rywalizacji
--  • trenerzy prowadzący zespół przeciwko rywalowi
--  • rekordy meczowe dom / wyjazd
--  • rekordy indywidualne dom / wyjazd
--  • serie zwycięstw / porażek
--  • porównanie wyniku poszczególnych kwart
--  • obsługa do 3 dogrywek
--
--
-- Identyfikacja drużyn odbywa się przez:
-- Wykorzystuje nazwa_statystyki1 / nazwa_statystyki2,
--  nazwa_statystyki1
-- dzięki czemu zmiana nazwy sponsorskiej nie rozbija H2H.
--   nazwa_statystyki2
--
--
-- Dzięki temu można zachować jedną nazwę drużyny
-- Zawiera:
-- niezależnie od późniejszych zmian sponsora.
-- 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. Dogrywkę 1, 2 i 3
-- =========================================================
-- =========================================================




function p.main(frame)
function p.main(frame)
    -- =====================================================
    -- PARAMETRY
    -- =====================================================


     local team1 = mw.text.trim(frame.args.team1 or "")
     local team1 = mw.text.trim(frame.args.team1 or "")
Linia 37: Linia 30:


     if team1 == "" then
     if team1 == "" then
         return "'''Błąd:''' nie podano parametru '''team1'''."
         return "'''Błąd:''' nie podano team1."
     end
     end


     if team2 == "" then
     if team2 == "" then
         return "'''Błąd:''' nie podano parametru '''team2'''."
         return "'''Błąd:''' nie podano team2."
     end
     end




     -- =====================================================
     -- =====================================================
     -- BEZPIECZNE SQL
     -- BEZPIECZEŃSTWO SQL
     -- =====================================================
     -- =====================================================


     local team1SQL =
     local function sql(value)
         mw.ustring.gsub(team1, "'", "''")
         return mw.ustring.gsub(value, "'", "''")
    end


     local team2SQL =
    local team1SQL = sql(team1)
        mw.ustring.gsub(team2, "'", "''")
     local team2SQL = sql(team2)




Linia 66: Linia 60:
         end
         end


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


        value =
    end
            mw.ustring.gsub(value, "%s+", "")


         return tonumber(value) or 0
 
    local function procent(wygrane, mecze)
 
        if mecze == 0 then
            return "0,0%"
        end
 
         return string.format(
            "%.1f%%",
            (wygrane / mecze) * 100
        ):gsub("%.", ",")


     end
     end




     local function minutyNaSekundy(value)
     local function wynikDruzyny(row)
 
        local g1 = liczba(row.gole1)
        local g2 = liczba(row.gole2)
 
        if row.ns1 == team1 then


        if value == nil or value == "" then
             return g1, g2
             return 0
        end


         local tekst = tostring(value)
         elseif row.ns2 == team1 then


        local min, sek =
            return g2, g1
            tekst:match("^(%d+):(%d+)$")


        if min and sek then
            return tonumber(min) * 60 + tonumber(sek)
         end
         end


         return tonumber(tekst) or 0
         return nil, nil


     end
     end




     local function sekundyNaMinuty(sek)
     local function miejsce(row)


         if not sek then
         if row.ns1 == team1 then
             return "0:00"
             return "dom"
         end
         end


         local min =
         if row.ns2 == team1 then
             math.floor(sek / 60)
             return "wyjazd"
        end


        local s =
         return nil
            sek % 60
 
         return string.format(
            "%d:%02d",
            min,
            s
        )


     end
     end




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


         local g1 =
         local d1 = row.druzyna1 or ""
            tonumber(row.gole1 or "")
        local d2 = row.druzyna2 or ""


         local g2 =
         local strona = row.strona_meczu or ""
            tonumber(row.gole2 or "")


         if g1 and g2 then
         local tekst =
             return g1, g2
             d1 .. " – " .. d2
        end


         local wynik =
         if strona ~= "" then
            row.wynik or ""


        local a, b =
            return "[[" ..
            wynik:match(
                strona ..
                 "(%d+)%s*:%s*(%d+)"
                 "|" ..
            )
                tekst ..
                "]]"


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


         return nil, nil
         return tekst


     end
     end




     local function miejsceMeczu(row)
     local function parseWynikCzesciowy(value)


         local d1 =
         if not value or value == "" then
             row.nazwa_statystyki1 or ""
             return nil, nil
        end


         local d2 =
         local a, b =
             row.nazwa_statystyki2 or ""
             tostring(value):match(
                "(%d+)%s*:%s*(%d+)"
            )


         if d1 == team1 then
         if not a or not b then
             return "dom"
             return nil, nil
         end
         end


         if d2 == team1 then
         return tonumber(a), tonumber(b)
            return "wyjazd"
        end
 
        return nil


     end
     end




     local function przeciwnik(row)
     -- =====================================================
    -- POBRANIE MECZÓW
    -- =====================================================


        local d1 =
    local fieldsMecze = table.concat({
            row.nazwa_statystyki1 or ""


         local d2 =
         "Mecze.id=mecz",
            row.nazwa_statystyki2 or ""
        "Mecze.data=data",
        "Mecze.sezon=sezon",


         if d1 == team1 then
         "Mecze.druzyna1=druzyna1",
            return d2
         "Mecze.druzyna2=druzyna2",
         end


         if d2 == team1 then
         "Mecze.nazwa_statystyki1=ns1",
            return d1
         "Mecze.nazwa_statystyki2=ns2",
         end


         return ""
         "Mecze.gole1=gole1",
        "Mecze.gole2=gole2",


    end
        "Mecze.wynik=wynik",
        "Mecze.wynik_do_przerwy=wynik_do_przerwy",


        "Mecze.kwart1=kwart1",
        "Mecze.kwart2=kwart2",
        "Mecze.kwart3=kwart3",
        "Mecze.kwart4=kwart4",


    local function linkMeczu(row)
        "Mecze.dogrywka1=dogrywka1",
        "Mecze.dogrywka2=dogrywka2",
        "Mecze.dogrywka3=dogrywka3",


         local strona =
         "Mecze.hala=hala",
            row.strona_meczu or ""
        "Mecze.widzowie=widzowie",
        "Mecze.sedziowie=sedziowie",
        "Mecze.strona_meczu=strona_meczu"


        local d1 =
    }, ",")
            row.druzyna1 or ""


        local d2 =
            row.druzyna2 or ""


        local tekst =
    local mecze =
             d1 .. " " .. d2
        mw.ext.cargo.query(
             "Mecze",
            fieldsMecze,
            {
                where =
                    "(" ..
                    "Mecze.nazwa_statystyki1='" ..
                    team1SQL ..
                    "' AND " ..
                    "Mecze.nazwa_statystyki2='" ..
                    team2SQL ..
                    "')" ..
                    " OR (" ..
                    "Mecze.nazwa_statystyki1='" ..
                    team2SQL ..
                    "' AND " ..
                    "Mecze.nazwa_statystyki2='" ..
                    team1SQL ..
                    "')",
 
                orderBy =
                    "Mecze.data ASC",


         if strona ~= "" then
                limit = 5000
            }
         )


            return "[[" ..
                strona ..
                "|" ..
                tekst ..
                "]]"


        end
    if not mecze or #mecze == 0 then


         return tekst
         return
            "'''Brak meczów pomiędzy ''" ..
            team1 ..
            "'' a ''" ..
            team2 ..
            "''.'''"


     end
     end




     local function bezpiecznyLinkOsoby(osoba)
     -- =====================================================
    -- BILANS
    -- =====================================================


        if not osoba or osoba == "" then
    local bilans = {
            return ""
        end


         return "[[" ..
         wszystkie = {
             osoba ..
             mecze = 0,
             "|" ..
             wygrane = 0,
             osoba ..
             przegrane = 0,
             "]]"
             punktyZdobyte = 0,
            punktyStracone = 0
        },


    end
        dom = {
            mecze = 0,
            wygrane = 0,
            przegrane = 0,
            punktyZdobyte = 0,
            punktyStracone = 0
        },


        wyjazd = {
            mecze = 0,
            wygrane = 0,
            przegrane = 0,
            punktyZdobyte = 0,
            punktyStracone = 0
        }


     local function wartoscNajwieksza(lista)
     }


        if not lista or #lista == 0 then
            return nil
        end


        local max = lista[1].wartosc
    -- =====================================================
    -- SERIE
    -- =====================================================


        for _, item in ipairs(lista) do
    local serie = {


             if item.wartosc > max then
        wszystkie = {
                max = item.wartosc
             W = 0,
            end
            P = 0
        },


         end
         dom = {
            W = 0,
            P = 0
        },


         return max
         wyjazd = {
            W = 0,
            P = 0
        }


     end
     }




     local function dodajRekord(lista, item)
     local aktualnaSeria = {


         if #lista == 0 then
         wszystkie = {
            W = 0,
            P = 0
        },


             table.insert(
        dom = {
                lista,
             W = 0,
                item
            P = 0
            )
        },


             return
        wyjazd = {
             W = 0,
            P = 0
        }


        end
    }


        local max =
            lista[1].wartosc


        if item.wartosc > max then
    -- =====================================================
    -- REKORDY MECZOWE
    -- =====================================================