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 2 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 9: Linia 9:
-- team2 = przeciwnik
-- team2 = przeciwnik
--
--
-- Identyfikacja rywalizacji:
-- nazwa_statystyki1 / nazwa_statystyki2 służą do identyfikacji
-- nazwa_statystyki1 / nazwa_statystyki2
-- drużyn niezależnie od historycznych nazw sponsorskich.
--
--
-- Zawiera:
-- Zawiera:
-- 1. Bilans ogółem / dom / wyjazd
-- 1. Bilans ogółem / dom / wyjazd
-- 2. Trenerów team1
-- 2. Trenerów team1 w rywalizacji
-- 3. Najlepszych strzelców obu drużyn
-- 3. Najlepszych strzelców obu drużyn
-- 4. Rekordy indywidualne team1
-- 4. Rekordy indywidualne team1
Linia 20: Linia 20:
-- 6. Analizę kwart
-- 6. Analizę kwart
-- 7. Wszystkie mecze
-- 7. Wszystkie mecze
-- 8. Dogrywkę 1 / 2 / 3
-- 8. Dogrywki 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 39: Linia 43:


     -- =====================================================
     -- =====================================================
     -- FUNKCJE POMOCNICZE
     -- BEZPIECZEŃSTWO SQL
     -- =====================================================
     -- =====================================================


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


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


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


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


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


         return tonumber(value) or 0
         return tonumber(tekst) or 0


     end
     end
Linia 69: Linia 85:
     local function procent(wygrane, mecze)
     local function procent(wygrane, mecze)


         if not mecze or mecze == 0 then
         if mecze == 0 then
             return "0,0%"
             return "0,0%"
         end
         end


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


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


        return wynik .. "%"
     end
     end




     local function parseWynik(value)
    -- =====================================================
    -- IDENTYFIKACJA STRONY TEAM1
    -- =====================================================
 
     local function miejsce(row)


         if not value or value == "" then
         if row.ns1 == team1 then
             return nil, nil
             return "dom"
         end
         end


         local a, b =
         if row.ns2 == team1 then
             tostring(value):match(
             return "wyjazd"
                "(%d+)%s*:%s*(%d+)"
        end
            )


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


        return tonumber(a), tonumber(b)
    end


    end


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


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


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


         if row.ns1 == team1 then
         if row.ns1 == team1 then
             return g1, g2
             return g1, g2
        end


         if row.ns2 == team1 then
         elseif row.ns2 == team1 then
 
             return g2, g1
             return g2, g1
         end
         end


Linia 128: Linia 147:




     local function miejsce(row)
     -- =====================================================
    -- NAZWA MECZU
    -- =====================================================


        if row.ns1 == team1 then
    local function nazwaMeczu(row)
            return "dom"
        end
 
        if row.ns2 == team1 then
            return "wyjazd"
        end
 
        return nil


    end
        local d1 =
            row.druzyna1 or ""


        local d2 =
            row.druzyna2 or ""


    local function nazwaMeczu(row)
        local strona =
            row.strona_meczu or ""


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


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


         if strona ~= "" then
         if strona ~= "" then
Linia 161: Linia 176:


         end
         end


         return tekst
         return tekst
    end
    -- =====================================================
    -- 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
        return
            tonumber(a),
            tonumber(b)


     end
     end
Linia 169: Linia 214:
     -- =====================================================
     -- =====================================================
     -- WARUNEK H2H
     -- WARUNEK H2H
    --
    -- UWAGA:
    -- Używamy nazw pól z aliasem M.
     -- =====================================================
     -- =====================================================


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


Linia 192: Linia 239:
     -- =====================================================
     -- =====================================================
     -- POBRANIE MECZÓW
     -- POBRANIE MECZÓW
    --
    -- UWAGA:
    -- pola nazywają się KWARTA1, KWARTA2 itd.
    -- a nie KWART1.
     -- =====================================================
     -- =====================================================


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


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


         "M.druzyna1=druzyna1",
         "Mecze.data=data",
         "M.druzyna2=druzyna2",
         "Mecze.sezon=sezon",


         "M.nazwa_statystyki1=ns1",
         "Mecze.druzyna1=druzyna1",
         "M.nazwa_statystyki2=ns2",
         "Mecze.druzyna2=druzyna2",


         "M.gole1=gole1",
         "Mecze.nazwa_statystyki1=ns1",
         "M.gole2=gole2",
         "Mecze.nazwa_statystyki2=ns2",


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


         "M.kwarta1=kwarta1",
         "Mecze.wynik=wynik",
         "M.kwarta2=kwarta2",
         "Mecze.wynik_do_przerwy=wynik_do_przerwy",
        "M.kwarta3=kwarta3",
        "M.kwarta4=kwarta4",


         "M.dogrywka1=dogrywka1",
         "Mecze.kwarta1=kwarta1",
         "M.dogrywka2=dogrywka2",
         "Mecze.kwarta2=kwarta2",
         "M.dogrywka3=dogrywka3",
         "Mecze.kwarta3=kwarta3",
        "Mecze.kwarta4=kwarta4",


         "M.hala=hala",
         "Mecze.dogrywka1=dogrywka1",
         "M.widzowie=widzowie",
         "Mecze.dogrywka2=dogrywka2",
         "M.sedziowie=sedziowie",
         "Mecze.dogrywka3=dogrywka3",


         "M.strona_meczu=strona_meczu"
         "Mecze.hala=hala",
        "Mecze.widzowie=widzowie",
        "Mecze.sedziowie=sedziowie",
        "Mecze.strona_meczu=strona_meczu"


     }, ",")
     }, ",")
Linia 232: Linia 283:
     local mecze =
     local mecze =
         mw.ext.cargo.query(
         mw.ext.cargo.query(
             "Mecze=M",
             "Mecze",
             fieldsMecze,
             fieldsMecze,
             {
             {
Linia 238: Linia 289:


                 orderBy =
                 orderBy =
                     "M.data ASC",
                     "Mecze.data ASC",


                 limit = 5000
                 limit = 5000
Linia 259: Linia 310:
     -- =====================================================
     -- =====================================================
     -- BILANS
     -- BILANS
    -- TYLKO TEAM1
     -- =====================================================
     -- =====================================================


Linia 362: Linia 412:
         if #lista == 0 then
         if #lista == 0 then


             item.wartosc = wartosc
             item.wartosc =
                wartosc


             table.insert(
             table.insert(
Linia 379: Linia 430:


         if wartosc > obecna then
         if wartosc > obecna then
            item.wartosc = wartosc


             lista = {
             lista = {
                 item
                 item
             }
             }
            item.wartosc =
                wartosc
            return lista


         elseif wartosc == obecna then
         elseif wartosc == obecna then


             item.wartosc = wartosc
             item.wartosc =
                wartosc


             table.insert(
             table.insert(
Linia 396: Linia 452:


         end
         end


         return lista
         return lista
Linia 408: Linia 465:
     for _, row in ipairs(mecze) do
     for _, row in ipairs(mecze) do


         local zdobyte, stracone =
         local zdobyte,
            stracone =
             wynikDruzyny(row)
             wynikDruzyny(row)


Linia 415: Linia 473:




         if zdobyte and stracone and miejsceMeczu then
         if zdobyte and
            stracone and
            miejsceMeczu then
 


             local wynikMeczu
             local wynikMeczu


             if zdobyte > stracone then
             if zdobyte > stracone then
                 wynikMeczu = "W"
                 wynikMeczu = "W"
             elseif zdobyte < stracone then
             elseif zdobyte < stracone then
                 wynikMeczu = "P"
                 wynikMeczu = "P"
             else
             else
                 wynikMeczu = "R"
                 wynikMeczu = "R"
             end
             end




             -- =============================================
             -- =============================================
             -- BILANS OGÓŁEM
             -- OGÓŁEM
             -- =============================================
             -- =============================================


             local b =
             local b =
                 bilans.wszystkie
                 bilans.wszystkie


             b.mecze =
             b.mecze =
Linia 461: Linia 530:


             -- =============================================
             -- =============================================
             -- BILANS DOM / WYJAZD
             -- DOM / WYJAZD
             -- =============================================
             -- =============================================


             local bm =
             local bd =
                 bilans[miejsceMeczu]
                 bilans[miejsceMeczu]


            bm.mecze =
                bm.mecze + 1


             bm.punktyZdobyte =
             bd.mecze =
                 bm.punktyZdobyte +
                bd.mecze + 1
 
            bd.punktyZdobyte =
                 bd.punktyZdobyte +
                 zdobyte
                 zdobyte


             bm.punktyStracone =
             bd.punktyStracone =