Documentation for this module may be created at Module:Musician tour stats/doc
local p = {}
local cargo = mw.ext.cargo
local function fetchShow(artist, firstShow)
local order = 'ASC'
if firstShow == false then
order = 'DESC'
end
return cargo.query(
'shows',
'shows._pageName=page_name, shows.artist=artist, shows.featuring_artist=featuring_artist, ' ..
'shows.date=date, shows.venue=venue, shows.location=location, ',
{
where = 'lineup HOLDS "' .. artist .. '"',
orderBy = 'date ' .. order,
limit = 1
}
)
end
local function createRowForShow(ulRoot, data, label)
local showRow = ulRoot:tag('li')
showRow:tag('b'):wikitext(label .. ': ')
local showStr = '[[' .. data['page_name'] .. '|' .. data['artist'] .. ' ' .. data['date'] .. ']] '
if data['featuring_artist'] ~= nil and data['featuring_artist'] ~= data['artist'] then
mw.logObject(data)
showStr = showStr .. '(featuring [[' .. data['featuring_artist'] .. ']]) '
end
if data['venue'] ~= nil then
showStr = showStr .. 'at ' .. data['venue']
if data['location'] ~= '' then
showStr = showStr .. ', '
else
showStr = showStr .. ' '
end
end
if data['location'] ~= '' then
showStr = showStr .. data['location']
end
showRow:tag('span'):wikitext(showStr)
end
function p._tour_stats(artist)
local root = mw.html.create()
local counts = cargo.query(
'shows',
"COUNT(_ID)=total",
{ where = 'lineup HOLDS "' .. artist .. '"' }
)[1]
if counts['total'] == '0' then
return ''
end
local statsRoot = root:tag('ul')
-- Totals
local totalShows = tonumber(counts['total'])
local totalsRow = statsRoot:tag('li')
totalsRow:tag('b'):wikitext('Total shows: ')
local totalsStr = "[https://spcodex.wiki/wiki/Special:CargoQuery?title=Special%3ACargoQuery&tables=shows%2C+live_show_photos%2C+live_show_videos&fields=shows._pageName%3Dpage_name%2C+shows.date%3Ddate%2C+shows.artist%3Dartist%2C+shows.featuring_artist%3Dfeaturing_artist%2C+shows.venue%3Dvenue%2C+shows.location%3Dlocation%2C+shows.festival%3Dfestival%2C+shows.notes%3Dnotes%2C+IF%28live_show_photos._pageName+IS+NULL+AND+shows.poster+IS+NULL%2C+%27%27%2C+%271%27%29%3Dphotos%2C+live_show_videos._ID%3Dvideo&where=shows.lineup+HOLDS+%22"
.. mw.uri.encode(artist) .. "%22&join_on=shows._pageName%3Dlive_show_photos._pageName%2C+shows._pageName%3Dlive_show_videos._pageName&group_by=shows._pageName&having=&order_by%5B0%5D=shows.date+ASC&order_by_options%5B0%5D=ASC&limit=1000&offset=&format=template&template=Live+show+row&named+args=yes&delimiter= " .. totalShows .. " shows]"
totalsRow:tag('span')
:addClass('plainlinks')
:wikitext(totalsStr)
-- First show
local firstShow = fetchShow(artist, true)[1]
createRowForShow(statsRoot, firstShow, 'First performance')
-- Last show
local lastShow = fetchShow(artist, false)[1]
createRowForShow(statsRoot, lastShow, 'Last performance')
return '== Touring stats ==\n' .. tostring(root)
end
function p.tour_stats(frame)
local artist = frame.args[1]
return p._tour_stats(artist)
end
return p