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:


-- =========================================================
-- =========================================================
-- Module:H2H
-- Moduł:H2H
--
--
-- Historia bezpośrednich spotkań dwóch drużyn.
-- Historia bezpośrednich spotkań dwóch drużyn
--
--
-- Drużyny są rozpoznawane po:
-- Funkcje:
--  Mecze.nazwa_statystyki1
--  • bilans spotkań
--  Mecze.nazwa_statystyki2
--  • suma punktów obu drużyn
--
--   • wszystkie mecze
-- Dzięki temu zmiana sponsora / nazwy drużyny nie rozbija H2H.
--  • 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
--
--
-- Funkcje:
-- Identyfikacja drużyn odbywa się przez:
--  1. bilans spotkań
--  nazwa_statystyki1
--  2. suma punktów
--  nazwa_statystyki2
--  3. wszystkie mecze
--  4. najlepsi strzelcy
--  5. trenerzy
--  6. rekordy meczowe
--  7. rekordy indywidualne
--  8. serie zwycięstw / porażek
--  9. kwartowe porównanie wyników
--
--
-- Dzięki temu można zachować jedną nazwę drużyny
-- niezależnie od późniejszych zmian sponsora.
-- =========================================================
-- =========================================================


Linia 32: Linia 33:
     -- =====================================================
     -- =====================================================


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


    local team2 =
     if team1 == "" then
        mw.text.trim(frame.args.team2 or "")
         return "'''Błąd:''' nie podano parametru '''team1'''."
 
    end
 
     if team1 == "" or team2 == "" then
 
         return "'''Błąd:''' należy podać obie drużyny."


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




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


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


     local t1 = sql(team1)
     local team2SQL =
    local t2 = sql(team2)
         mw.ustring.gsub(team2, "'", "''")
 
 
    -- =====================================================
    -- WARUNEK H2H DLA TABELI Mecze
    --
    -- WAŻNE:
    -- tutaj używamy nazwa_statystyki.
    -- Dzięki temu zmiana nazwy sponsorskiej nie rozbija H2H.
    -- =====================================================
 
    local whereMecze =
        "(" ..
         "M.nazwa_statystyki1='" .. t1 ..
        "' AND M.nazwa_statystyki2='" .. t2 ..
        "')" ..
        " OR " ..
        "(" ..
        "M.nazwa_statystyki1='" .. t2 ..
        "' AND M.nazwa_statystyki2='" .. t1 ..
        "')"




Linia 89: Linia 60:
     -- =====================================================
     -- =====================================================


     local function number(value)
     local function liczba(value)


         if value == nil or value == "" then
         if value == nil or value == "" then
Linia 98: Linia 69:


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


         return tonumber(value) or 0
         return tonumber(value) or 0
Linia 109: Linia 76:




     local function parseScore(value)
     local function minutyNaSekundy(value)
 
        if value == nil or value == "" then
            return 0
        end
 
        local tekst = tostring(value)
 
        local min, sek =
            tekst:match("^(%d+):(%d+)$")


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


         local a, b =
         return tonumber(tekst) or 0
            tostring(value):match(
 
                "(%d+)%s*:%s*(%d+)"
    end
            )
 
 
    local function sekundyNaMinuty(sek)


         if a and b then
         if not sek then
             return tonumber(a), tonumber(b)
             return "0:00"
         end
         end


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


     end
     end




     local function matchScore(row)
     local function wynikMeczu(row)


         local g1 =
         local g1 =
Linia 141: Linia 129:
         end
         end


         return parseScore(row.wynik)
         local wynik =
            row.wynik or ""
 
        local a, b =
            wynik:match(
                "(%d+)%s*:%s*(%d+)"
            )
 
        if a and b then
            return tonumber(a), tonumber(b)
        end
 
        return nil, nil


     end
     end




     local function location(row)
     local function miejsceMeczu(row)


         local d1 =
         local d1 =
Linia 153: Linia 153:
         local d2 =
         local d2 =
             row.nazwa_statystyki2 or ""
             row.nazwa_statystyki2 or ""


         if d1 == team1 then
         if d1 == team1 then
Linia 168: Linia 167:




     local function teamScore(row)
     local function przeciwnik(row)
 
        local d1 =
            row.nazwa_statystyki1 or ""


         local g1, g2 =
         local d2 =
             matchScore(row)
             row.nazwa_statystyki2 or ""


         if not g1 or not g2 then
         if d1 == team1 then
             return nil, nil
             return d2
         end
         end


 
         if d2 == team1 then
         if location(row) == "dom" then
             return d1
             return g1, g2
         end
         end


         return g2, g1
         return ""


     end
     end




     local function result(row)
     local function linkMeczu(row)


         local zdobyte, stracone =
         local strona =
             teamScore(row)
             row.strona_meczu or ""
 
        if not zdobyte or not stracone then
            return nil
        end
 
        if zdobyte > stracone then
            return "W"
        end
 
        if zdobyte < stracone then
            return "P"
        end
 
        return "R"
 
    end
 
 
    local function matchName(row)


         local d1 =
         local d1 =
Linia 217: Linia 199:
             row.druzyna2 or ""
             row.druzyna2 or ""


         local page =
         local tekst =
            row.strona_meczu or ""
             d1 .. " – " .. d2
 
 
        local text =
             d1 ..
            " – " ..
            d2
 


         if page ~= "" then
         if strona ~= "" then


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


         end
         end


         return text
         return tekst


     end
     end




     local function formatPlusMinus(value)
     local function bezpiecznyLinkOsoby(osoba)
 
        value =
            number(value)


         if value > 0 then
         if not osoba or osoba == "" then
             return "+" .. tostring(value)
             return ""
         end
         end


         return tostring(value)
         return "[[" ..
            osoba ..
            "|" ..
            osoba ..
            "]]"


     end
     end




     -- =====================================================
     local function wartoscNajwieksza(lista)
    -- POBRANIE MECZÓW
 
    -- =====================================================
        if not lista or #lista == 0 then
            return nil
        end


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


            "M.id=mecz",
        for _, item in ipairs(lista) do
            "M.data=data",
            "M.sezon=sezon",


             "M.druzyna1=druzyna1",
             if item.wartosc > max then
             "M.druzyna2=druzyna2",
                max = item.wartosc
             end


            "M.nazwa_statystyki1=ns1",
        end
            "M.nazwa_statystyki2=ns2",


            "M.gole1=gole1",
        return max
            "M.gole2=gole2",


            "M.wynik=wynik",
    end


            "M.kwart1=kwarta1",
            "M.kwart2=kwarta2",
            "M.kwart3=kwarta3",
            "M.kwart4=kwarta4",


            "M.dogrywka1=dogrywka1",
    local function dodajRekord(lista, item)
            "M.dogrywka2=dogrywka2",


            "M.hala=hala",
        if #lista == 0 then
            "M.widzowie=widzowie",
            "M.sedziowie=sedziowie",


             "M.strona_meczu=strona_meczu"
             table.insert(
                lista,
                item
            )


        }, ",")
            return


        end


    local mecze =
        local max =
        mw.ext.cargo.query(
             lista[1].wartosc
             "Mecze=M",
            fieldsMecze,
            {
                where = whereMecze,
                orderBy = "M.data ASC",
                limit = 20000
            }
        )


        if item.wartosc > max then


    if not mecze or #mecze == 0 then
            lista = {}


         return
         end
            "'''Brak wyników.'''"


     end
     end
Linia 317: Linia 279:


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


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


    local wygrane1 = 0
        "M.id=mecz",
    local wygrane2 = 0
        "M.data=data",
        "M.sezon=sezon",
        "M.rozgrywki=rozgrywki",
        "M.kolejka=kolejka",


    local remisy = 0
        "M.druzyna1=druzyna1",
        "M.druzyna2=druzyna2",


    local punkty1 = 0
        "M.nazwa_statystyki1=nazwa_statystyki1",
    local punkty2 = 0
        "M.nazwa_statystyki2=nazwa_statystyki2",


        "M.wynik=wynik",
        "M.gole1=gole1",
        "M.gole2=gole2",


    for _, row in ipairs(mecze) do
        "M.hala=hala",
        "M.widzowie=widzowie",
        "M.sedziowie=sedziowie",
        "M.strona_meczu=strona_meczu",


         local g1, g2 =
         "M.kwarta1=kwarta1",
            matchScore(row)
        "M.kwarta2=kwarta2",
        "M.kwarta3=kwarta3",
        "M.kwarta4=kwarta4",


         if g1 and g2 then
         "M.dogrywka1=dogrywka1",
        "M.dogrywka2=dogrywka2",
        "M.dogrywka3=dogrywka3"


            liczbaMeczow =
    }, ",")