Moduł:HistoriaWystepow
Wygląd
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
-- ==========================================
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.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
-- ==========================================
-- PODSUMOWANIE - WSZYSTKIE MECZE
-- ==========================================
local suma = {
wystepy = 0,
zwyciestwa = 0,
porazki = 0,
remisy = 0,
punkty = 0,
minuty = 0,
eval = 0,
plusminus = 0
}
-- ==========================================
-- PODSUMOWANIE - MECZE DOMOWE
-- ==========================================
local dom = {
wystepy = 0,
zwyciestwa = 0,
porazki = 0,
remisy = 0,
punkty = 0,
minuty = 0,
eval = 0,
plusminus = 0
}
-- ==========================================
-- PODSUMOWANIE - MECZE WYJAZDOWE
-- ==========================================
local wyjazd = {
wystepy = 0,
zwyciestwa = 0,
porazki = 0,
remisy = 0,
punkty = 0,
minuty = 0,
eval = 0,
plusminus = 0
}
-- ==========================================
-- 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)
stat.minuty = stat.minuty + tonumber(row.minuty or 0)
stat.eval = stat.eval + tonumber(row.eval or 0)
stat.plusminus = stat.plusminus + tonumber(row.plusminus 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 WYSTĘPY
-- ==========================================
for _, row in ipairs(rows) do
-- Wszystkie spotkania
dodajDoPodsumowania(suma, row)
local d1 = row.druzyna1 or ""
local d2 = row.druzyna2 or ""
local druzyna = row.druzyna or ""
-- Dom
if druzyna == d1 then
dodajDoPodsumowania(dom, row)
-- Wyjazd
elseif druzyna == d2 then
dodajDoPodsumowania(wyjazd, 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
-- ==========================================
-- WYNIK
-- ==========================================
local wynik = {}
table.insert(
wynik,
"== Historia występów =="
)
table.insert(wynik, "")
-- ==========================================
-- TABELA PODSUMOWANIA
-- ==========================================
table.insert(
wynik,
"=== Podsumowanie ==="
)
table.insert(wynik, "")
table.insert(
wynik,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
-- Nagłówki
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, "")
-- ==========================================
-- TABELA WYSTĘPÓW
-- ==========================================
table.insert(
wynik,
'{| class="wikitable sortable" style="width:100%;"'
)
table.insert(wynik, "! Nr")
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 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"
-- ======================================
-- MIEJSCE MECZU
-- ======================================
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 STRONY 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 TABELI
-- ======================================
table.insert(wynik, "|-")
table.insert(
wynik,
"| " .. i
)
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
-- ==========================================
-- ZAMKNIĘCIE TABELI
-- ==========================================
table.insert(
wynik,
"|}"
)
return table.concat(
wynik,
"\n"
)
end
return p