Moduł:HistoriaWystepow: Różnice pomiędzy wersjami
Wygląd
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| Linia 90: | Linia 90: | ||
-- podsumowania poszczególnych sezonów | -- podsumowania poszczególnych sezonów | ||
local sezony = {} | local sezony = {} | ||
-- ===================================================== | |||
-- PODSUMOWANIA POSZCZEGÓLNYCH KLUBÓW | |||
-- ===================================================== | |||
local kluby = {} | |||
local kolejnoscKlubow = {} | |||
-- ===================================================== | -- ===================================================== | ||
| Linia 146: | Linia 153: | ||
stat.punkty = | stat.punkty = | ||
stat.punkty + | stat.punkty + | ||
tonumber(row.gol or 0) | (tonumber(row.gol or 0) or 0) | ||
stat.minuty = | stat.minuty = | ||
stat.minuty + | stat.minuty + | ||
tonumber(row.minuty or 0) | (tonumber(row.minuty or 0) or 0) | ||
stat.eval = | stat.eval = | ||
stat.eval + | stat.eval + | ||
tonumber(row.eval or 0) | (tonumber(row.eval or 0) or 0) | ||
stat.plusminus = | stat.plusminus = | ||
stat.plusminus + | stat.plusminus + | ||
tonumber(row.plusminus or 0) | (tonumber(row.plusminus or 0) or 0) | ||
local wynik = okreslWynik(row) | local wynik = okreslWynik(row) | ||
| Linia 238: | Linia 245: | ||
row | row | ||
) | ) | ||
-- ----------------------------------------------- | |||
-- KLUB | |||
-- ----------------------------------------------- | |||
if druzyna ~= "" then | |||
if not kluby[druzyna] then | |||
kluby[druzyna] = nowePodsumowanie() | |||
table.insert( | |||
kolejnoscKlubow, | |||
druzyna | |||
) | |||
end | |||
dodajDoPodsumowania( | |||
kluby[druzyna], | |||
row | |||
) | |||
end | |||
end | end | ||
| Linia 268: | Linia 299: | ||
for sezon, _ in pairs(sezony) do | for sezon, _ in pairs(sezony) do | ||
table.insert( | table.insert( | ||
listaSezonow, | listaSezonow, | ||
sezon | sezon | ||
) | ) | ||
end | end | ||
| Linia 476: | Linia 509: | ||
wynik, | wynik, | ||
"| '''" .. sezon .. "'''" | "| '''" .. sezon .. "'''" | ||
) | |||
table.insert( | |||
wynik, | |||
"| " .. stat.wystepy | |||
) | |||
table.insert( | |||
wynik, | |||
"| " .. stat.zwyciestwa | |||
) | |||
table.insert( | |||
wynik, | |||
"| " .. stat.porazki | |||
) | |||
table.insert( | |||
wynik, | |||
"| " .. stat.remisy | |||
) | |||
table.insert( | |||
wynik, | |||
"| " .. stat.punkty | |||
) | |||
table.insert( | |||
wynik, | |||
"| " .. formatujMinuty(stat.minuty) | |||
) | |||
table.insert( | |||
wynik, | |||
"| " .. stat.eval | |||
) | |||
table.insert( | |||
wynik, | |||
"| " .. stat.plusminus | |||
) | |||
end | |||
table.insert( | |||
wynik, | |||
"|}" | |||
) | |||
table.insert(wynik, "") | |||
-- ===================================================== | |||
-- PODSUMOWANIE WEDŁUG KLUBU | |||
-- ===================================================== | |||
table.insert( | |||
wynik, | |||
"=== Podsumowanie według klubu ===" | |||
) | |||
table.insert(wynik, "") | |||
table.insert( | |||
wynik, | |||
'{| class="wikitable sortable" style="width:100%; text-align:center;"' | |||
) | |||
table.insert( | |||
wynik, | |||
"! Klub" | |||
) | |||
table.insert( | |||
wynik, | |||
"! Występy" | |||
) | |||
table.insert( | |||
wynik, | |||
"! Zwycięstwa" | |||
) | |||
table.insert( | |||
wynik, | |||
"! Porażki" | |||
) | |||
table.insert( | |||
wynik, | |||
"! Remisy" | |||
) | |||
table.insert( | |||
wynik, | |||
"! Punkty" | |||
) | |||
table.insert( | |||
wynik, | |||
"! Minuty" | |||
) | |||
table.insert( | |||
wynik, | |||
"! EVAL" | |||
) | |||
table.insert( | |||
wynik, | |||
"! +/-" | |||
) | |||
for _, klub in ipairs(kolejnoscKlubow) do | |||
local stat = kluby[klub] | |||
table.insert( | |||
wynik, | |||
"|-" | |||
) | |||
table.insert( | |||
wynik, | |||
"| '''[[" .. klub .. "]]'''" | |||
) | ) | ||
Wersja z 05:21, 17 sie 2026
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:HistoriaWystepow/opis
local p = {}
function p.main(frame)
local zawodnik = frame.args.zawodnik
if not zawodnik or zawodnik == "" then
zawodnik = mw.title.getCurrentTitle().text
end
-- =====================================================
-- BEZPIECZNE PRZYGOTOWANIE NAZWY ZAWODNIKA
-- =====================================================
local zawodnikSQL = mw.ustring.gsub(zawodnik, "'", "''")
-- =====================================================
-- POLA POBIERANE Z CARGO
-- =====================================================
local fields = table.concat({
"UdzialZawodnika.mecz=mecz",
"UdzialZawodnika.druzyna=druzyna",
"UdzialZawodnika.minuty=minuty",
"UdzialZawodnika.minuty_format=minuty_format",
"UdzialZawodnika.gol=gol",
"UdzialZawodnika.eval=eval",
"UdzialZawodnika.plusminus=plusminus",
"Mecze.data=data",
"Mecze.sezon=sezon",
"Mecze.druzyna1=druzyna1",
"Mecze.druzyna2=druzyna2",
"Mecze.wynik=wynik",
"Mecze.strona_meczu=strona_meczu"
}, ",")
-- =====================================================
-- ZAPYTANIE CARGO
-- =====================================================
local args = {
join = "UdzialZawodnika.mecz=Mecze.id",
where = "UdzialZawodnika.zawodnik='" .. zawodnikSQL .. "' AND UdzialZawodnika.minuty > 0",
orderBy = "Mecze.data ASC",
limit = 5000
}
local rows = mw.ext.cargo.query(
"UdzialZawodnika,Mecze",
fields,
args
)
-- =====================================================
-- BRAK DANYCH
-- =====================================================
if not rows or #rows == 0 then
return "''Brak wprowadzonych występów w bazie.''"
end
-- =====================================================
-- FUNKCJA TWORZĄCA PODSUMOWANIE
-- =====================================================
local function nowePodsumowanie()
return {
wystepy = 0,
zwyciestwa = 0,
porazki = 0,
remisy = 0,
punkty = 0,
minuty = 0,
eval = 0,
plusminus = 0
}
end
-- =====================================================
-- PODSUMOWANIA
-- =====================================================
local suma = nowePodsumowanie()
local dom = nowePodsumowanie()
local wyjazd = nowePodsumowanie()
-- podsumowania poszczególnych sezonów
local sezony = {}
-- =====================================================
-- PODSUMOWANIA POSZCZEGÓLNYCH KLUBÓW
-- =====================================================
local kluby = {}
local kolejnoscKlubow = {}
-- =====================================================
-- OKREŚLENIE WYNIKU MECZU
-- =====================================================
local function okreslWynik(row)
local d1 = row.druzyna1 or ""
local d2 = row.druzyna2 or ""
local druzyna = row.druzyna or ""
local wynikMeczu = row.wynik or ""
local g1, g2 = wynikMeczu:match("(%d+)%s*:%s*(%d+)")
if not g1 or not g2 then
return nil
end
g1 = tonumber(g1)
g2 = tonumber(g2)
if druzyna == d1 then
if g1 > g2 then
return "W"
elseif g1 < g2 then
return "P"
else
return "R"
end
elseif druzyna == d2 then
if g2 > g1 then
return "W"
elseif g2 < g1 then
return "P"
else
return "R"
end
end
return nil
end
-- =====================================================
-- DODANIE MECZU DO PODSUMOWANIA
-- =====================================================
local function dodajDoPodsumowania(stat, row)
stat.wystepy = stat.wystepy + 1
stat.punkty =
stat.punkty +
(tonumber(row.gol or 0) or 0)
stat.minuty =
stat.minuty +
(tonumber(row.minuty or 0) or 0)
stat.eval =
stat.eval +
(tonumber(row.eval or 0) or 0)
stat.plusminus =
stat.plusminus +
(tonumber(row.plusminus or 0) or 0)
local wynik = okreslWynik(row)
if wynik == "W" then
stat.zwyciestwa =
stat.zwyciestwa + 1
elseif wynik == "P" then
stat.porazki =
stat.porazki + 1
elseif wynik == "R" then
stat.remisy =
stat.remisy + 1
end
end
-- =====================================================
-- PRZEJŚCIE PRZEZ WSZYSTKIE MECZE
-- =====================================================
for _, row in ipairs(rows) do
-- -----------------------------------------------
-- WSZYSTKIE MECZE
-- -----------------------------------------------
dodajDoPodsumowania(
suma,
row
)
-- -----------------------------------------------
-- DOM / WYJAZD
-- -----------------------------------------------
local d1 = row.druzyna1 or ""
local d2 = row.druzyna2 or ""
local druzyna = row.druzyna or ""
if druzyna == d1 then
dodajDoPodsumowania(
dom,
row
)
elseif druzyna == d2 then
dodajDoPodsumowania(
wyjazd,
row
)
end
-- -----------------------------------------------
-- SEZON
-- -----------------------------------------------
local sezon = row.sezon or ""
if sezon == "" then
sezon = "Brak sezonu"
end
if not sezony[sezon] then
sezony[sezon] = nowePodsumowanie()
end
dodajDoPodsumowania(
sezony[sezon],
row
)
-- -----------------------------------------------
-- KLUB
-- -----------------------------------------------
if druzyna ~= "" then
if not kluby[druzyna] then
kluby[druzyna] = nowePodsumowanie()
table.insert(
kolejnoscKlubow,
druzyna
)
end
dodajDoPodsumowania(
kluby[druzyna],
row
)
end
end
-- =====================================================
-- FORMATOWANIE MINUT
-- =====================================================
local function formatujMinuty(minuty)
local godziny =
math.floor(minuty / 60)
local min =
minuty % 60
return string.format(
"%d:%02d",
godziny,
min
)
end
-- =====================================================
-- SORTOWANIE SEZONÓW
-- =====================================================
local listaSezonow = {}
for sezon, _ in pairs(sezony) do
table.insert(
listaSezonow,
sezon
)
end
table.sort(
listaSezonow,
function(a, b)
return a > b
end
)
-- =====================================================
-- WYNIK
-- =====================================================
local wynik = {}
table.insert(
wynik,
"== Historia występów =="
)
table.insert(wynik, "")
-- =====================================================
-- PODSUMOWANIE WSZYSTKICH / DOM / WYJAZD
-- =====================================================
table.insert(
wynik,
"=== Podsumowanie wszystkich spotkań ==="
)
table.insert(wynik, "")
table.insert(
wynik,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! "
)
table.insert(
wynik,
"! Wszystkie spotkania"
)
table.insert(
wynik,
"! 🏠 Mecze domowe"
)
table.insert(
wynik,
"! ✈️ Mecze wyjazdowe"
)
-- Występy
table.insert(wynik, "|-")
table.insert(wynik, "! Występy")
table.insert(wynik, "| '''" .. suma.wystepy .. "'''")
table.insert(wynik, "| '''" .. dom.wystepy .. "'''")
table.insert(wynik, "| '''" .. wyjazd.wystepy .. "'''")
-- Zwycięstwa
table.insert(wynik, "|-")
table.insert(wynik, "! Zwycięstwa")
table.insert(wynik, "| '''" .. suma.zwyciestwa .. "'''")
table.insert(wynik, "| '''" .. dom.zwyciestwa .. "'''")
table.insert(wynik, "| '''" .. wyjazd.zwyciestwa .. "'''")
-- Porażki
table.insert(wynik, "|-")
table.insert(wynik, "! Porażki")
table.insert(wynik, "| '''" .. suma.porazki .. "'''")
table.insert(wynik, "| '''" .. dom.porazki .. "'''")
table.insert(wynik, "| '''" .. wyjazd.porazki .. "'''")
-- Remisy
table.insert(wynik, "|-")
table.insert(wynik, "! Remisy")
table.insert(wynik, "| '''" .. suma.remisy .. "'''")
table.insert(wynik, "| '''" .. dom.remisy .. "'''")
table.insert(wynik, "| '''" .. wyjazd.remisy .. "'''")
-- Punkty
table.insert(wynik, "|-")
table.insert(wynik, "! Punkty")
table.insert(wynik, "| '''" .. suma.punkty .. "'''")
table.insert(wynik, "| '''" .. dom.punkty .. "'''")
table.insert(wynik, "| '''" .. wyjazd.punkty .. "'''")
-- Minuty
table.insert(wynik, "|-")
table.insert(wynik, "! Minuty")
table.insert(wynik, "| '''" .. formatujMinuty(suma.minuty) .. "'''")
table.insert(wynik, "| '''" .. formatujMinuty(dom.minuty) .. "'''")
table.insert(wynik, "| '''" .. formatujMinuty(wyjazd.minuty) .. "'''")
-- EVAL
table.insert(wynik, "|-")
table.insert(wynik, "! EVAL")
table.insert(wynik, "| '''" .. suma.eval .. "'''")
table.insert(wynik, "| '''" .. dom.eval .. "'''")
table.insert(wynik, "| '''" .. wyjazd.eval .. "'''")
-- Plus/minus
table.insert(wynik, "|-")
table.insert(wynik, "! +/-")
table.insert(wynik, "| '''" .. suma.plusminus .. "'''")
table.insert(wynik, "| '''" .. dom.plusminus .. "'''")
table.insert(wynik, "| '''" .. wyjazd.plusminus .. "'''")
table.insert(
wynik,
"|}"
)
table.insert(wynik, "")
-- =====================================================
-- PODSUMOWANIE POSZCZEGÓLNYCH SEZONÓW
-- =====================================================
table.insert(
wynik,
"=== Podsumowanie sezonów ==="
)
table.insert(wynik, "")
table.insert(
wynik,
'{| class="wikitable sortable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! Sezon"
)
table.insert(
wynik,
"! Występy"
)
table.insert(
wynik,
"! Zwycięstwa"
)
table.insert(
wynik,
"! Porażki"
)
table.insert(
wynik,
"! Remisy"
)
table.insert(
wynik,
"! Punkty"
)
table.insert(
wynik,
"! Minuty"
)
table.insert(
wynik,
"! EVAL"
)
table.insert(
wynik,
"! +/-"
)
for _, sezon in ipairs(listaSezonow) do
local stat = sezony[sezon]
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"| '''" .. sezon .. "'''"
)
table.insert(
wynik,
"| " .. stat.wystepy
)
table.insert(
wynik,
"| " .. stat.zwyciestwa
)
table.insert(
wynik,
"| " .. stat.porazki
)
table.insert(
wynik,
"| " .. stat.remisy
)
table.insert(
wynik,
"| " .. stat.punkty
)
table.insert(
wynik,
"| " .. formatujMinuty(stat.minuty)
)
table.insert(
wynik,
"| " .. stat.eval
)
table.insert(
wynik,
"| " .. stat.plusminus
)
end
table.insert(
wynik,
"|}"
)
table.insert(wynik, "")
-- =====================================================
-- PODSUMOWANIE WEDŁUG KLUBU
-- =====================================================
table.insert(
wynik,
"=== Podsumowanie według klubu ==="
)
table.insert(wynik, "")
table.insert(
wynik,
'{| class="wikitable sortable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! Klub"
)
table.insert(
wynik,
"! Występy"
)
table.insert(
wynik,
"! Zwycięstwa"
)
table.insert(
wynik,
"! Porażki"
)
table.insert(
wynik,
"! Remisy"
)
table.insert(
wynik,
"! Punkty"
)
table.insert(
wynik,
"! Minuty"
)
table.insert(
wynik,
"! EVAL"
)
table.insert(
wynik,
"! +/-"
)
for _, klub in ipairs(kolejnoscKlubow) do
local stat = kluby[klub]
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"| '''[[" .. klub .. "]]'''"
)
table.insert(
wynik,
"| " .. stat.wystepy
)
table.insert(
wynik,
"| " .. stat.zwyciestwa
)
table.insert(
wynik,
"| " .. stat.porazki
)
table.insert(
wynik,
"| " .. stat.remisy
)
table.insert(
wynik,
"| " .. stat.punkty
)
table.insert(
wynik,
"| " .. formatujMinuty(stat.minuty)
)
table.insert(
wynik,
"| " .. stat.eval
)
table.insert(
wynik,
"| " .. stat.plusminus
)
end
table.insert(
wynik,
"|}"
)
table.insert(wynik, "")
-- =====================================================
-- TABELA WSZYSTKICH WYSTĘPÓW
-- =====================================================
table.insert(
wynik,
"=== Mecze ==="
)
table.insert(wynik, "")
table.insert(
wynik,
'{| class="wikitable sortable" style="width:100%;"'
)
table.insert(
wynik,
"! Nr"
)
table.insert(
wynik,
"! Sezon"
)
table.insert(
wynik,
"! Data"
)
table.insert(
wynik,
"! Miejsce"
)
table.insert(
wynik,
"! Przeciwnik"
)
table.insert(
wynik,
"! Wynik"
)
table.insert(
wynik,
"! Min."
)
table.insert(
wynik,
"! Pkt"
)
table.insert(
wynik,
"! EVAL"
)
table.insert(
wynik,
"! +/-"
)
table.insert(
wynik,
"! Jubileusz"
)
-- =====================================================
-- POSZCZEGÓLNE MECZE
-- =====================================================
for i, row in ipairs(rows) do
local data =
row.data or ""
local sezon =
row.sezon or ""
local d1 =
row.druzyna1 or ""
local d2 =
row.druzyna2 or ""
local druzyna =
row.druzyna or ""
local wynikMeczu =
row.wynik or ""
local strona =
row.strona_meczu or ""
local minutyFormat =
row.minuty_format or ""
local pkt =
row.gol or "0"
local eval =
row.eval or "0"
local plusminus =
row.plusminus or "0"
-- =================================================
-- DOM / WYJAZD
-- =================================================
local miejsce = ""
if druzyna == d1 then
miejsce = "🏠 Dom"
elseif druzyna == d2 then
miejsce = "✈️ Wyjazd"
end
-- =================================================
-- PRZECIWNIK
-- =================================================
local przeciwnik = ""
if druzyna == d1 then
przeciwnik = d2
elseif druzyna == d2 then
przeciwnik = d1
else
przeciwnik = d1
end
-- =================================================
-- LINK DO MECZU
-- =================================================
local meczTekst =
przeciwnik
if strona ~= "" then
meczTekst =
"[["
.. strona
.. "|"
.. przeciwnik
.. "]]"
end
-- =================================================
-- JUBILEUSZ
-- =================================================
local jubileusz = ""
if i % 50 == 0 then
jubileusz =
"'''🏆 "
.. i
.. ". występ'''"
end
-- =================================================
-- WIERSZ
-- =================================================
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"| " .. i
)
table.insert(
wynik,
"| " .. sezon
)
table.insert(
wynik,
"| " .. data
)
table.insert(
wynik,
"| " .. miejsce
)
table.insert(
wynik,
"| " .. meczTekst
)
table.insert(
wynik,
"| " .. wynikMeczu
)
table.insert(
wynik,
"| " .. minutyFormat
)
table.insert(
wynik,
"| " .. pkt
)
table.insert(
wynik,
"| " .. eval
)
table.insert(
wynik,
"| " .. plusminus
)
table.insert(
wynik,
"| " .. jubileusz
)
end
-- =====================================================
-- KONIEC TABELI
-- =====================================================
table.insert(
wynik,
"|}"
)
return table.concat(
wynik,
"\n"
)
end
return p