Przejdź do zawartości

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

Z Encyklopedia Poznanskiego Sportu
Nie podano opisu zmian
Nie podano opisu zmian
Linia 9: Linia 9:
-- team2 = przeciwnik
-- team2 = przeciwnik
--
--
-- IDENTYFIKACJA RYWALIZACJI:
-- Identyfikacja rywalizacji:
-- nazwa_statystyki1 / nazwa_statystyki2
-- nazwa_statystyki1 / nazwa_statystyki2
--
--
-- Dzięki temu zmiana nazwy sponsorskiej nie rozbija H2H.
-- Zawiera:
--
-- ZAWIERA:
-- 1. Bilans ogółem / dom / wyjazd
-- 1. Bilans ogółem / dom / wyjazd
-- 2. Trenerów team1
-- 2. Trenerów team1
Linia 21: Linia 19:
-- 5. Serie zwycięstw / porażek
-- 5. Serie zwycięstw / porażek
-- 6. Analizę kwart
-- 6. Analizę kwart
-- 7. Rekordy meczowe
-- 7. Wszystkie mecze
-- 8. Wszystkie mecze
-- 8. Dogrywkę 1 / 2 / 3
-- 9. Dogrywkę 1, 2 i 3
-- =========================================================
-- =========================================================


Linia 29: Linia 26:
function p.main(frame)
function p.main(frame)


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


     if team1 == "" then
     if team1 == "" then
Linia 50: Linia 39:


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


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


Linia 67: Linia 51:
     local team2SQL = sql(team2)
     local team2SQL = sql(team2)


    -- =====================================================
    -- LICZBA
    -- =====================================================


     local function liczba(value)
     local function liczba(value)
Linia 78: Linia 58:
         end
         end


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


         return tonumber(value) or 0
         return tonumber(value) or 0
Linia 90: Linia 67:




    -- =====================================================
     local function procent(wygrane, mecze)
    -- PROCENT
    -- =====================================================
 
     local function procent(
        wygrane,
        mecze
    )


         if not mecze or mecze == 0 then
         if not mecze or mecze == 0 then
Linia 104: Linia 74:


         local wynik =
         local wynik =
             (wygrane / mecze) * 100
             string.format(
                "%.1f",
                (wygrane / mecze) * 100
            )


         return string.format(
         wynik =
             "%.1f%%",
             mw.ustring.gsub(
            wynik
                wynik,
        ):gsub(
                "%.",
            "%.",
                ","
            ","
            )
        )


        return wynik .. "%"
     end
     end




     -- =====================================================
     local function parseWynik(value)
    -- WARUNEK H2H DLA TABELI MECZE
    --
    -- Tutaj NIE MA ALIASU.
    -- =====================================================


    local whereMecze =
        if not value or value == "" then
         "(" ..
            return nil, nil
         end


         "(Mecze.nazwa_statystyki1='" ..
         local a, b =
        team1SQL ..
            tostring(value):match(
        "' AND " ..
                "(%d+)%s*:%s*(%d+)"
            )


         "Mecze.nazwa_statystyki2='" ..
         if not a or not b then
        team2SQL ..
            return nil, nil
         "')" ..
         end


         " OR " ..
         return tonumber(a), tonumber(b)


        "(Mecze.nazwa_statystyki1='" ..
    end
        team2SQL ..
        "' AND " ..


        "Mecze.nazwa_statystyki2='" ..
        team1SQL ..
        "')" ..


        ")"
    local function wynikDruzyny(row)


        local g1 = liczba(row.gole1)
        local g2 = liczba(row.gole2)


    -- =====================================================
        if row.ns1 == team1 then
    -- WARUNEK H2H DLA ZAPYTAŃ Z ALIASEM M
            return g1, g2
    -- =====================================================
        end


    local whereM =
        if row.ns2 == team1 then
         "(" ..
            return g2, g1
         end


         "(M.nazwa_statystyki1='" ..
         return nil, nil
        team1SQL ..
        "' AND " ..


        "M.nazwa_statystyki2='" ..
    end
        team2SQL ..
        "')" ..


        " OR " ..


        "(M.nazwa_statystyki1='" ..
    local function miejsce(row)
        team2SQL ..
        "' AND " ..


         "M.nazwa_statystyki2='" ..
         if row.ns1 == team1 then
        team1SQL ..
            return "dom"
         "')" ..
         end


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


        return nil


     -- =====================================================
     end
    -- WYNIK DRUŻYNY
    -- =====================================================


    local function wynikDruzyny(row)


        local g1 =
    local function nazwaMeczu(row)
            liczba(row.gole1)


         local g2 =
         local d1 = row.druzyna1 or ""
            liczba(row.gole2)
        local d2 = row.druzyna2 or ""
        local strona = row.strona_meczu or ""


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


         if row.ns1 == team1 then
         if strona ~= "" then


             return g1, g2
             return "[[" ..
                strona ..
                "|" ..
                tekst ..
                "]]"


         elseif row.ns2 == team1 then
         end


            return g2, g1
        return tekst


        end
    end




        return nil, nil
    -- =====================================================
    -- WARUNEK H2H
    --
    -- UWAGA:
    -- Używamy nazw pól z aliasem M.
    -- =====================================================


     end
     local whereH2H =
        "(" ..
        "(M.nazwa_statystyki1='" ..
        team1SQL ..
        "' AND M.nazwa_statystyki2='" ..
        team2SQL ..
        "')" ..
        " OR " ..
        "(M.nazwa_statystyki1='" ..
        team2SQL ..
        "' AND M.nazwa_statystyki2='" ..
        team1SQL ..
        "')" ..
        ")"




     -- =====================================================
     -- =====================================================
     -- MIEJSCE TEAM1
     -- POBRANIE MECZÓW
     -- =====================================================
     -- =====================================================


     local function miejsce(row)
     local fieldsMecze = table.concat({


         if row.ns1 == team1 then
         "M.id=mecz",
            return "dom"
        "M.data=data",
         end
         "M.sezon=sezon",


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


         return nil
         "M.nazwa_statystyki1=ns1",
        "M.nazwa_statystyki2=ns2",


    end
        "M.gole1=gole1",
        "M.gole2=gole2",


        "M.wynik=wynik",
        "M.wynik_do_przerwy=wynik_do_przerwy",


    -- =====================================================
        "M.kwart1=kwart1",
    -- NAZWA MECZU
        "M.kwart2=kwart2",
    -- =====================================================
        "M.kwart3=kwart3",
        "M.kwart4=kwart4",


    local function nazwaMeczu(row)
        "M.dogrywka1=dogrywka1",
        "M.dogrywka2=dogrywka2",
        "M.dogrywka3=dogrywka3",


         local d1 =
         "M.hala=hala",
            row.druzyna1 or ""
        "M.widzowie=widzowie",
        "M.sedziowie=sedziowie",


         local d2 =
         "M.strona_meczu=strona_meczu"
            row.druzyna2 or ""


        local strona =
    }, ",")
            row.strona_meczu or ""




        local tekst =
    local mecze =
            d1 ..
        mw.ext.cargo.query(
             " " ..
             "Mecze=M",
             d2
            fieldsMecze,
             {
                where = whereH2H,


                orderBy =
                    "M.data ASC",


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


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


        end
    if not mecze or #mecze == 0 then


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


     end
     end
Linia 262: Linia 258:


     -- =====================================================
     -- =====================================================
     -- PARSOWANIE KWART / DOGRYWEK
     -- BILANS
    -- TYLKO TEAM1
     -- =====================================================
     -- =====================================================


     local function parseWynikCzesciowy(value)
     local bilans = {


         if not value or value == "" then
         wszystkie = {
             return nil, nil
            mecze = 0,
         end
            wygrane = 0,
            przegrane = 0,
             punktyZdobyte = 0,
            punktyStracone = 0
         },


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


         local a, b =
         wyjazd = {
             tostring(value):match(
            mecze = 0,
                "(%d+)%s*:%s*(%d+)"
            wygrane = 0,
             )
             przegrane = 0,
            punktyZdobyte = 0,
             punktyStracone = 0
        }


    }


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


    -- =====================================================
    -- SERIE
    -- =====================================================


        return
    local serie = {
            tonumber(a),
            tonumber(b)


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


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


    -- =====================================================
        wyjazd = {
    -- MECZE
            W = 0,
    -- =====================================================
            P = 0
        }


     local fieldsMecze =
     }
        table.concat({


            "Mecze.id=mecz",
            "Mecze.data=data",
            "Mecze.sezon=sezon",


            "Mecze.druzyna1=druzyna1",
    local aktualnaSeria = {
            "Mecze.druzyna2=druzyna2",


             "Mecze.nazwa_statystyki1=ns1",
        wszystkie = {
             "Mecze.nazwa_statystyki2=ns2",
             W = 0,
             P = 0
        },