Moduł:Rekordy sezon: Różnice pomiędzy wersjami
Wygląd
m Zabezpieczył „Moduł:Rekordy sezon” ([Edytowanie=Dozwolone tylko dla administratorów] (na czas nieokreślony) [Przenoszenie=Dozwolone tylko dla administratorów] (na czas nieokreślony)) |
Nie podano opisu zmian |
||
| Linia 88: | Linia 88: | ||
-- ========================================================= | -- ========================================================= | ||
-- WYNIK MECZU | -- WYNIK MECZU | ||
-- ========================================================= | -- ========================================================= | ||
| Linia 132: | Linia 128: | ||
-- ========================================================= | -- ========================================================= | ||
-- WYNIK Z PERSPEKTYWY DRUŻYNY | -- WYNIK Z PERSPEKTYWY DRUŻYNY | ||
-- ========================================================= | -- ========================================================= | ||
| Linia 226: | Linia 212: | ||
-- ========================================================= | -- ========================================================= | ||
-- FUNKCJA DODAWANIA REKORDU | -- FUNKCJA DODAWANIA REKORDU | ||
-- | |||
-- WARTOŚĆ ZAWSZE JEST ZAPISYWANA W item.wartosc. | |||
-- To eliminuje błąd: | |||
-- | |||
-- attempt to compare nil with number | |||
-- | |||
-- ========================================================= | -- ========================================================= | ||
| Linia 238: | Linia 230: | ||
return | return | ||
end | end | ||
wartosc = | |||
tonumber(wartosc) | |||
if wartosc == nil then | |||
return | |||
end | |||
item.wartosc = | |||
wartosc | |||
local lista = | local lista = | ||
tabela[miejsce] | tabela[miejsce] | ||
if not lista then | |||
tabela[miejsce] = {} | |||
lista = | |||
tabela[miejsce] | |||
end | |||
if #lista == 0 then | if #lista == 0 then | ||
| Linia 255: | Linia 268: | ||
local obecna = | local obecna = | ||
lista[1].wartosc | tonumber( | ||
lista[1].wartosc | |||
) or 0 | |||
| Linia 291: | Linia 306: | ||
local roznica = | local roznica = | ||
item.roznica or 0 | tonumber(item.roznica or 0) or 0 | ||
local roznicaTekst | local roznicaTekst | ||
| Linia 362: | Linia 377: | ||
wartosc = | wartosc = | ||
tostring(item.punkty) .. | tostring(item.punkty or 0) .. | ||
" pkt" | " pkt" | ||
| Linia 390: | Linia 405: | ||
wartosc = | wartosc = | ||
tostring(item.asysty) .. | tostring(item.asysty or 0) .. | ||
" as." | " as." | ||
| Linia 397: | Linia 412: | ||
wartosc = | wartosc = | ||
tostring(item.zbiorki) .. | tostring(item.zbiorki or 0) .. | ||
" zb." | " zb." | ||
| Linia 404: | Linia 419: | ||
wartosc = | wartosc = | ||
tostring(item.eval) .. | tostring(item.eval or 0) .. | ||
" EVAL" | " EVAL" | ||
| Linia 411: | Linia 426: | ||
local pm = | local pm = | ||
item.plusminus or 0 | tonumber(item.plusminus or 0) or 0 | ||
if pm >= 0 then | if pm >= 0 then | ||
| Linia 603: | Linia 618: | ||
wynik = | wynik = | ||
tostring( | tostring(scobete or zdobyte) .. | ||
":" .. | ":" .. | ||
tostring( | tostring(stracone) | ||
} | } | ||
| Linia 627: | Linia 642: | ||
if roznica < 0 then | if roznica < 0 then | ||
local przegrana = | |||
math.abs(roznica) | |||
item.wartosc = | item.wartosc = | ||
przegrana | |||
item.przegrana = | item.przegrana = | ||
przegrana | |||
dodajRekord( | |||
najwyzszaPorazka | najwyzszaPorazka, | ||
miejsce, | |||
przegrana, | |||
item | |||
) | |||
end | end | ||
| Linia 825: | Linia 816: | ||
} | } | ||
-- ========================================= | |||
-- KLUCZOWA POPRAWKA: | |||
-- dodajRekord() zapisuje item.wartosc | |||
-- dla każdego rodzaju statystyki. | |||
-- ========================================= | |||
dodajRekord( | dodajRekord( | ||
| Linia 1101: | Linia 1098: | ||
-- MECZOWE | -- ===================================================== | ||
-- REKORDY MECZOWE | |||
-- ===================================================== | |||
table.insert( | table.insert( | ||
| Linia 1178: | Linia 1177: | ||
-- INDYWIDUALNE | -- ===================================================== | ||
-- REKORDY INDYWIDUALNE | |||
-- ===================================================== | |||
table.insert( | table.insert( | ||
| Linia 1271: | Linia 1272: | ||
table.insert( | table.insert( | ||
wynik, | wynik, | ||
"| " .. | "| " .. | ||
tekstZawodnikow( | tekstZawodnikow( | ||
rekord.tabela.wyjazd, | rekord.tabela.wyjazd, | ||
rekord.typ | rekord.typ | ||
) | ) | ||
) | ) | ||
end | end | ||
table.insert( | table.insert( | ||
wynik, | wynik, | ||
"|}" | "|}" | ||
) | ) | ||
-- SERIE | -- ===================================================== | ||
-- SERIE | |||
-- ===================================================== | |||
table.insert( | table.insert( | ||
| Linia 1494: | Linia 1497: | ||
local najczestszeWyniki = {} | local najczestszeWyniki = {} | ||
local wynikiRozgrywek = {} | local wynikiRozgrywek = {} | ||
| Linia 1568: | Linia 1570: | ||
-- ============================================= | -- ================================================= | ||
-- WYNIK Z PERSPEKTYWY DRUŻYNY | -- WYNIK Z PERSPEKTYWY DRUŻYNY | ||
-- | -- ================================================= | ||
local wynikPerspektywa = | local wynikPerspektywa = | ||
tostring( | tostring(scobete or zdobyte) .. | ||
":" .. | ":" .. | ||
tostring(stracone) | tostring(stracone) | ||
-- ============================================= | -- ================================================= | ||
-- NAJCZĘSTSZE WYNIKI | -- NAJCZĘSTSZE WYNIKI | ||
-- | -- ================================================= | ||
najczestszeWyniki[ | najczestszeWyniki[ | ||
| Linia 1602: | Linia 1592: | ||
-- ============================================= | -- ================================================= | ||
-- ROZGRYWKI | -- ROZGRYWKI | ||
-- ============================================= | -- ================================================= | ||
local rozgrywki = | local rozgrywki = | ||
| Linia 1660: | Linia 1650: | ||
-- ============================================= | -- ================================================= | ||
-- REZULTAT | -- REZULTAT | ||
-- ============================================= | -- ================================================= | ||
local rezultat | local rezultat | ||
| Linia 1722: | Linia 1712: | ||
-- ============================================= | -- ================================================= | ||
-- | -- NAJWYŻSZE ZWYCIĘSTWO | ||
-- ============================================= | -- ================================================= | ||
if rezultat == "W" then | if rezultat == "W" then | ||
| Linia 1770: | Linia 1760: | ||
-- ============================================= | -- ================================================= | ||
-- | -- NAJWYŻSZA PORAŻKA | ||
-- ============================================= | -- ================================================= | ||
if rezultat == "P" then | if rezultat == "P" then | ||
| Linia 1825: | Linia 1815: | ||
-- ============================================= | -- ================================================= | ||
-- SERIA BEZ PORAŻKI | -- SERIA BEZ PORAŻKI | ||
-- | -- ================================================= | ||
if rezultat == "W" | if rezultat == "W" | ||
| Linia 1860: | Linia 1849: | ||
-- ============================================= | -- ================================================= | ||
-- SERIE WYGRANYCH / BEZ WYGRANEJ / PORAŻEK | -- SERIE WYGRANYCH / BEZ WYGRANEJ / PORAŻEK | ||
-- ============================================= | -- ================================================= | ||
local obszary = { | local obszary = { | ||
| Linia 1925: | Linia 1914: | ||
-- ===================================================== | -- ========================================================= | ||
-- NAJCZĘSTSZY WYNIK | -- NAJCZĘSTSZY WYNIK | ||
-- ===================================================== | -- ========================================================= | ||
local listaWynikow = {} | local listaWynikow = {} | ||
| Linia 1967: | Linia 1956: | ||
-- ===================================================== | -- ========================================================= | ||
-- GENEROWANIE WYNIKU | -- GENEROWANIE WYNIKU | ||
-- ===================================================== | -- ========================================================= | ||
local wynik = {} | local wynik = {} | ||
| Linia 1985: | Linia 1974: | ||
-- ===================================================== | -- ========================================================= | ||
-- REKORDY MECZOWE | -- REKORDY MECZOWE | ||
-- ===================================================== | -- ========================================================= | ||
table.insert( | table.insert( | ||
| Linia 2070: | Linia 2059: | ||
-- ===================================================== | -- ========================================================= | ||
-- SERIE | -- SERIE | ||
-- ===================================================== | -- ========================================================= | ||
table.insert( | table.insert( | ||
| Linia 2141: | Linia 2130: | ||
-- ===================================================== | -- ========================================================= | ||
-- WYNIKI | -- WYNIKI | ||
-- ===================================================== | -- ========================================================= | ||
table.insert( | table.insert( | ||
| Linia 2204: | Linia 2193: | ||
-- ===================================================== | -- ========================================================= | ||
-- ROZGRYWKI | -- ROZGRYWKI | ||
-- ===================================================== | -- ========================================================= | ||
table.insert( | table.insert( | ||
Wersja z 14:21, 20 sie 2026
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Rekordy sezon/opis
local p = {}
-- =========================================================
-- Moduł:Rekordy_sezon
--
-- Jeden moduł dla różnych dyscyplin.
--
-- Wywołanie:
--
-- {{#invoke:Rekordy_sezon|main
-- |sezon=2026/2027
-- |druzyna=Lech Poznań
-- |dyscyplina=piłka nożna
-- }}
--
-- lub:
--
-- {{#invoke:Rekordy_sezon|main
-- |sezon=2026/2027
-- |druzyna=Enea Basket Poznań
-- |dyscyplina=koszykówka
-- }}
--
-- =========================================================
-- =========================================================
-- FUNKCJE WSPÓLNE
-- =========================================================
local function liczba(value)
if value == nil or value == "" then
return 0
end
value = tostring(value)
value = mw.ustring.gsub(
value,
"%s+",
""
)
return tonumber(value) or 0
end
local function escapeSQL(value)
value = tostring(value or "")
return mw.ustring.gsub(
value,
"'",
"''"
)
end
-- =========================================================
-- ROZPOZNANIE MIEJSCA MECZU
-- =========================================================
local function miejsceMeczu(row, druzyna)
local d1 =
tostring(row.druzyna1 or "")
local d2 =
tostring(row.druzyna2 or "")
if d1 == druzyna then
return "dom"
end
if d2 == druzyna then
return "wyjazd"
end
return nil
end
-- =========================================================
-- WYNIK MECZU
-- =========================================================
local function wynikMeczu(row)
local g1 =
tonumber(row.gole1 or "")
local g2 =
tonumber(row.gole2 or "")
if g1 ~= nil and g2 ~= nil then
return g1, g2
end
local wynik =
tostring(row.wynik or "")
local a, b =
mw.ustring.match(
wynik,
"(%d+)%s*:%s*(%d+)"
)
if a and b then
return
tonumber(a),
tonumber(b)
end
return nil, nil
end
-- =========================================================
-- WYNIK Z PERSPEKTYWY DRUŻYNY
-- =========================================================
local function wynikZPerspektywy(row, druzyna)
local g1, g2 =
wynikMeczu(row)
if g1 == nil or g2 == nil then
return nil, nil
end
local miejsce =
miejsceMeczu(
row,
druzyna
)
if miejsce == "dom" then
return g1, g2
elseif miejsce == "wyjazd" then
return g2, g1
end
return nil, nil
end
-- =========================================================
-- NAZWA MECZU
-- =========================================================
local function nazwaMeczu(row)
local d1 =
tostring(row.druzyna1 or "")
local d2 =
tostring(row.druzyna2 or "")
local strona =
tostring(row.strona_meczu or "")
local tekst =
d1 ..
" – " ..
d2
if strona ~= "" then
return
"[[" ..
strona ..
"|" ..
tekst ..
"]]"
end
return tekst
end
-- =========================================================
-- FORMAT DATY
-- =========================================================
local function dataTekst(data)
return tostring(
data or ""
)
end
-- =========================================================
-- FUNKCJA DODAWANIA REKORDU
--
-- WARTOŚĆ ZAWSZE JEST ZAPISYWANA W item.wartosc.
-- To eliminuje błąd:
--
-- attempt to compare nil with number
--
-- =========================================================
local function dodajRekord(
tabela,
miejsce,
wartosc,
item
)
if wartosc == nil then
return
end
wartosc =
tonumber(wartosc)
if wartosc == nil then
return
end
item.wartosc =
wartosc
local lista =
tabela[miejsce]
if not lista then
tabela[miejsce] = {}
lista =
tabela[miejsce]
end
if #lista == 0 then
table.insert(
lista,
item
)
return
end
local obecna =
tonumber(
lista[1].wartosc
) or 0
if wartosc > obecna then
tabela[miejsce] = {
item
}
elseif wartosc == obecna then
table.insert(
lista,
item
)
end
end
-- =========================================================
-- FORMAT REKORDÓW MECZOWYCH
-- =========================================================
local function tekstMeczow(lista)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
local roznica =
tonumber(item.roznica or 0) or 0
local roznicaTekst
if roznica >= 0 then
roznicaTekst =
"+" ..
tostring(roznica)
else
roznicaTekst =
tostring(roznica)
end
table.insert(
wynik,
item.tekst ..
" (" ..
item.wynik ..
", " ..
roznicaTekst ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
-- =========================================================
-- FORMAT REKORDÓW ZAWODNIKÓW
-- =========================================================
local function tekstZawodnikow(
lista,
typ
)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
local zawodnikLink =
"[[" ..
tostring(item.zawodnik or "") ..
"]]"
local wartosc = ""
if typ == "punkty" then
wartosc =
tostring(item.punkty or 0) ..
" pkt"
elseif typ == "minuty" then
wartosc =
tostring(
item.minuty_format or ""
)
if wartosc == "" then
wartosc =
tostring(
item.minuty or 0
)
end
wartosc =
wartosc ..
" min"
elseif typ == "asysty" then
wartosc =
tostring(item.asysty or 0) ..
" as."
elseif typ == "zbiorki" then
wartosc =
tostring(item.zbiorki or 0) ..
" zb."
elseif typ == "eval" then
wartosc =
tostring(item.eval or 0) ..
" EVAL"
elseif typ == "plusminus" then
local pm =
tonumber(item.plusminus or 0) or 0
if pm >= 0 then
wartosc =
"+" ..
tostring(pm)
else
wartosc =
tostring(pm)
end
wartosc =
wartosc ..
" +/-"
end
table.insert(
wynik,
zawodnikLink ..
" — " ..
wartosc ..
"<br>" ..
tostring(item.tekst or "") ..
" (" ..
tostring(item.wynik or "") ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
-- =========================================================
-- KOSZYKÓWKA
-- =========================================================
local function koszykowka(
frame,
sezon,
druzyna
)
local sezonSQL =
escapeSQL(sezon)
local druzynaSQL =
escapeSQL(druzyna)
-- =====================================================
-- MECZE
-- =====================================================
local fieldsMecze =
table.concat({
"Mecze.id=mecz",
"Mecze.data=data",
"Mecze.sezon=sezon",
"Mecze.rozgrywki=rozgrywki",
"Mecze.druzyna1=druzyna1",
"Mecze.druzyna2=druzyna2",
"Mecze.gole1=gole1",
"Mecze.gole2=gole2",
"Mecze.wynik=wynik",
"Mecze.strona_meczu=strona_meczu"
}, ",")
local mecze =
mw.ext.cargo.query(
"Mecze",
fieldsMecze,
{
where =
"(" ..
"Mecze.druzyna1='" ..
druzynaSQL ..
"'" ..
" OR " ..
"Mecze.druzyna2='" ..
druzynaSQL ..
"'" ..
")" ..
" AND Mecze.sezon='" ..
sezonSQL ..
"'",
orderBy =
"Mecze.data ASC",
limit = 5000
}
)
if not mecze or #mecze == 0 then
return
"''Brak wprowadzonych meczów dla tej drużyny w podanym sezonie.''"
end
-- =====================================================
-- REKORDY MECZOWE
-- =====================================================
local najwyzszeZwyciestwo = {
dom = {},
wyjazd = {}
}
local najwyzszaPorazka = {
dom = {},
wyjazd = {}
}
-- =====================================================
-- PRZETWARZANIE MECZÓW
-- =====================================================
for _, row in ipairs(mecze) do
local miejsce =
miejsceMeczu(
row,
druzyna
)
local zdobyte,
stracone =
wynikZPerspektywy(
row,
druzyna
)
if miejsce
and zdobyte ~= nil
and stracone ~= nil then
local roznica =
zdobyte - stracone
local item = {
mecz =
row.mecz or "",
data =
row.data or "",
miejsce =
miejsce,
zdobyte =
zdobyte,
stracone =
stracone,
roznica =
roznica,
tekst =
nazwaMeczu(row),
wynik =
tostring(scobete or zdobyte) ..
":" ..
tostring(stracone)
}
-- ZWYCIĘSTWO
if roznica > 0 then
dodajRekord(
najwyzszeZwyciestwo,
miejsce,
roznica,
item
)
end
-- PORAŻKA
if roznica < 0 then
local przegrana =
math.abs(roznica)
item.wartosc =
przegrana
item.przegrana =
przegrana
dodajRekord(
najwyzszaPorazka,
miejsce,
przegrana,
item
)
end
end
end
-- =====================================================
-- STATYSTYKI ZAWODNIKÓW
-- =====================================================
local fieldsZawodnicy =
table.concat({
"UdzialZawodnika.zawodnik=zawodnik",
"UdzialZawodnika.druzyna=druzyna_zawodnika",
"UdzialZawodnika.gol=gol",
"UdzialZawodnika.minuty=minuty",
"UdzialZawodnika.minuty_format=minuty_format",
"UdzialZawodnika.asysta=asysta",
"UdzialZawodnika.zbiorka=zbiorka",
"UdzialZawodnika.eval=eval",
"UdzialZawodnika.plusminus=plusminus",
"Mecze.id=mecz",
"Mecze.data=data",
"Mecze.druzyna1=druzyna1",
"Mecze.druzyna2=druzyna2",
"Mecze.gole1=gole1",
"Mecze.gole2=gole2",
"Mecze.wynik=wynik",
"Mecze.strona_meczu=strona_meczu"
}, ",")
local zawodnicy =
mw.ext.cargo.query(
"UdzialZawodnika,Mecze",
fieldsZawodnicy,
{
join =
"UdzialZawodnika.mecz=Mecze.id",
where =
"UdzialZawodnika.druzyna='" ..
druzynaSQL ..
"'" ..
" AND Mecze.sezon='" ..
sezonSQL ..
"'" ..
" AND UdzialZawodnika.minuty > 0",
orderBy =
"Mecze.data ASC",
limit = 10000
}
)
local rekordy = {
punkty = {
dom = {},
wyjazd = {}
},
minuty = {
dom = {},
wyjazd = {}
},
asysty = {
dom = {},
wyjazd = {}
},
zbiorki = {
dom = {},
wyjazd = {}
},
eval = {
dom = {},
wyjazd = {}
},
plusminus = {
dom = {},
wyjazd = {}
}
}
if zawodnicy then
for _, row in ipairs(zawodnicy) do
local miejsce =
miejsceMeczu(
row,
druzyna
)
if miejsce then
local item = {
zawodnik =
row.zawodnik or "",
mecz =
row.mecz or "",
data =
row.data or "",
miejsce =
miejsce,
tekst =
nazwaMeczu(row),
wynik =
row.wynik or "",
minuty_format =
row.minuty_format or "",
punkty =
liczba(row.gol),
minuty =
liczba(row.minuty),
asysty =
liczba(row.asysta),
zbiorki =
liczba(row.zbiorka),
eval =
liczba(row.eval),
plusminus =
liczba(row.plusminus)
}
-- =========================================
-- KLUCZOWA POPRAWKA:
-- dodajRekord() zapisuje item.wartosc
-- dla każdego rodzaju statystyki.
-- =========================================
dodajRekord(
rekordy.punkty,
miejsce,
item.punkty,
item
)
dodajRekord(
rekordy.minuty,
miejsce,
item.minuty,
item
)
dodajRekord(
rekordy.asysty,
miejsce,
item.asysty,
item
)
dodajRekord(
rekordy.zbiorki,
miejsce,
item.zbiorki,
item
)
dodajRekord(
rekordy.eval,
miejsce,
item.eval,
item
)
dodajRekord(
rekordy.plusminus,
miej