Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
 
(Nie pokazano 12 pośrednich wersji utworzonych przez tego samego użytkownika)
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:
-- nazwa_statystyki1 / nazwa_statystyki2 służą do identyfikacji
--  nazwa_statystyki1
-- drużyn niezależnie od historycznych nazw sponsorskich.
--   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. Dogrywki 1, 2 i 3
-- =========================================================
-- =========================================================


Linia 37: Linia 34:


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


    local team2SQL =
         return mw.ustring.gsub(
         mw.ustring.gsub(team2, "'", "''")
            tostring(value or ""),
            "'",
            "''"
        )
 
    end
 
 
    local team1SQL = sql(team1)
    local team2SQL = sql(team2)




Linia 66: Linia 71:
         end
         end


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


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


     end
     end




     local function minutyNaSekundy(value)
     local function procent(wygrane, mecze)


         if value == nil or value == "" then
         if mecze == 0 then
             return 0
             return "0,0%"
         end
         end


         local tekst = tostring(value)
         local wartosc =
            (wygrane / mecze) * 100


         local min, sek =
         return string.format(
             tekst:match("^(%d+):(%d+)$")
             "%.1f%%",
            wartosc
        ):gsub("%.", ",")


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


        return tonumber(tekst) or 0


     end
     -- =====================================================
    -- IDENTYFIKACJA STRONY TEAM1
    -- =====================================================


    local function miejsce(row)


    local function sekundyNaMinuty(sek)
        if row.ns1 == team1 then
            return "dom"
        end


         if not sek then
         if row.ns2 == team1 then
             return "0:00"
             return "wyjazd"
         end
         end


         local min =
         return nil
            math.floor(sek / 60)


        local s =
    end
            sek % 60


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


     end
     -- =====================================================
    -- WYNIK TEAM1
    -- =====================================================


 
     local function wynikDruzyny(row)
     local function wynikMeczu(row)


         local g1 =
         local g1 =
             tonumber(row.gole1 or "")
             liczba(row.gole1)


         local g2 =
         local g2 =
             tonumber(row.gole2 or "")
             liczba(row.gole2)
 
 
        if row.ns1 == team1 then


        if g1 and g2 then
             return g1, g2
             return g1, g2
        end


         local wynik =
         elseif row.ns2 == team1 then
            row.wynik or ""


        local a, b =
            return g2, g1
            wynik:match(
                "(%d+)%s*:%s*(%d+)"
            )


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


Linia 146: Linia 147:




     local function miejsceMeczu(row)
    -- =====================================================
    -- NAZWA MECZU
    -- =====================================================
 
     local function nazwaMeczu(row)


         local d1 =
         local d1 =
             row.nazwa_statystyki1 or ""
             row.druzyna1 or ""


         local d2 =
         local d2 =
             row.nazwa_statystyki2 or ""
             row.druzyna2 or ""


         if d1 == team1 then
         local strona =
             return "dom"
             row.strona_meczu or ""
        end


        if d2 == team1 then
            return "wyjazd"
        end


         return nil
         local tekst =
            d1 .. " – " .. d2


    end


        if strona ~= "" then


    local function przeciwnik(row)
            return "[[" ..
                strona ..
                "|" ..
                tekst ..
                "]]"


        local d1 =
            row.nazwa_statystyki1 or ""
        local d2 =
            row.nazwa_statystyki2 or ""
        if d1 == team1 then
            return d2
         end
         end


        if d2 == team1 then
            return d1
        end


         return ""
         return tekst


     end
     end




     local function linkMeczu(row)
     -- =====================================================
    -- PARSOWANIE CZĘŚCI WYNIKU
    -- =====================================================


        local strona =
    local function parseWynikCzesciowy(value)
            row.strona_meczu or ""


         local d1 =
         if value == nil or value == "" then
            row.druzyna1 or ""
            return nil, nil
 
         end
         local d2 =
            row.druzyna2 or ""


         local tekst =
         local tekst =
             d1 .. " – " .. d2
             tostring(value)


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


        if not a or not b then
            return nil, nil
         end
         end


         return tekst
         return
            tonumber(a),
            tonumber(b)


     end
     end




     local function bezpiecznyLinkOsoby(osoba)
     -- =====================================================
    -- WARUNEK H2H
    -- =====================================================


         if not osoba or osoba == "" then
    local whereH2H =
            return ""
        "(" ..
         end
         "(Mecze.nazwa_statystyki1='" ..
        team1SQL ..
        "' AND " ..
        "Mecze.nazwa_statystyki2='" ..
         team2SQL ..
        "')" ..


         return "[[" ..
         " OR " ..
            osoba ..
            "|" ..
            osoba ..
            "]]"


    end
        "(Mecze.nazwa_statystyki1='" ..
        team2SQL ..
        "' AND " ..
        "Mecze.nazwa_statystyki2='" ..
        team1SQL ..
        "')" ..


        ")"


    local function wartoscNajwieksza(lista)


        if not lista or #lista == 0 then
    -- =====================================================
            return nil
    -- POBRANIE MECZÓW
        end
    --
    -- UWAGA:
    -- pola nazywają się KWARTA1, KWARTA2 itd.
    -- a nie KWART1.
    -- =====================================================


        local max = lista[1].wartosc
    local fieldsMecze = table.concat({


         for _, item in ipairs(lista) do
         "Mecze.id=mecz",


            if item.wartosc > max then
        "Mecze.data=data",
                max = item.wartosc
        "Mecze.sezon=sezon",
            end


         end
         "Mecze.druzyna1=druzyna1",
        "Mecze.druzyna2=druzyna2",


         return max
         "Mecze.nazwa_statystyki1=ns1",
        "Mecze.nazwa_statystyki2=ns2",


    end
        "Mecze.gole1=gole1",
        "Mecze.gole2=gole2",


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


    local function dodajRekord(lista, item)
        "Mecze.kwarta1=kwarta1",
        "Mecze.kwarta2=kwarta2",
        "Mecze.kwarta3=kwarta3",
        "Mecze.kwarta4=kwarta4",


         if #lista == 0 then
         "Mecze.dogrywka1=dogrywka1",
        "Mecze.dogrywka2=dogrywka2",
        "Mecze.dogrywka3=dogrywka3",


            table.insert(
        "Mecze.hala=hala",
                lista,
        "Mecze.widzowie=widzowie",
                item
        "Mecze.sedziowie=sedziowie",
            )
        "Mecze.strona_meczu=strona_meczu"


            return
    }, ",")


        end


        local max =
    local mecze =
             lista[1].wartosc
        mw.ext.cargo.query(
             "Mecze",
            fieldsMecze,
            {
                where = whereH2H,


        if item.wartosc > max then
                orderBy =
                    "Mecze.data ASC",


             lista = {}
                limit = 5000
             }
        )


         end
 
    if not mecze or #mecze == 0 then
 
         return
            "'''Brak meczów pomiędzy ''" ..
            team1 ..
            "'' a ''" ..
            team2 ..
            "''.'''"


     end
     end
Linia 279: Linia 309:


     -- =====================================================
     -- =====================================================
     -- POBRANIE MECZÓW H2H
     -- BILANS
     -- =====================================================
     -- =====================================================


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


         "M.id=mecz",
         wszystkie = {
        "M.data=data",
            mecze = 0,
        "M.sezon=sezon",
            wygrane = 0,
        "M.rozgrywki=rozgrywki",
            przegrane = 0,
         "M.kolejka=kolejka",
            punktyZdobyte = 0,
            punktyStracone = 0
         },


         "M.druzyna1=druzyna1",
         dom = {
         "M.druzyna2=druzyna2",
            mecze = 0,
            wygrane = 0,
            przegrane = 0,
            punktyZdobyte = 0,
            punktyStracone = 0
         },


         "M.nazwa_statystyki1=nazwa_statystyki1",