Documentation for this module may be created at Module:Music shop songs/doc
local getArgs = require('Module:Arguments').getArgs
local DatatableBuilder = require('Module:DatatableBuilder')
local QueryBuilder = require('Module:QueryBuilder')
local p = {}
local function formatJacket(jacket)
return string.format('[[File:%s|64px]]', jacket)
end
local function formatLink(page, name)
if page == nil or page == '' then return end
return string.format('[[%s|%s]]', page, name or page)
end
local function getData(unit)
if unit == nil or unit == '' then return {} end
local qb = QueryBuilder.new()
qb
:setTables('songs')
:setFields([[
_pageName,
song_name,
jacket,
producers,
release_date
]])
:addWhere('unlock_method', '=', 'Music Shop')
:setOrderBy('release_date ASC')
:setGroupBy('songs._pageID')
qb
:addWhere('units', 'HOLDS', unit)
return qb:query()
end
local function makeTable(data)
local datatable = DatatableBuilder.new()
datatable
:setColumns{
{
name = 'jacket',
header = '',
dataFields = { 'jacket' },
func = formatJacket,
sortable = false
},
{
name = 'name',
header = 'Song',
dataFields = { '_pageName', 'song_name' },
func = formatLink
},
{
name = 'producers',
header = 'Producer(s)',
dataFields = { 'producers' }
},
{
name = 'release_date',
header = 'Release date',
dataFields = { 'release_date' }
},
}
:setData(data)
return datatable
end
function p.main(frame)
local args = getArgs(frame)
local unit = args['unit']
local data = getData(unit)
local songTable = makeTable(data)
return songTable:tostring()
end
return p