Module:Music shop songs

From Sekaipedia

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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.