Module:Event cards: Difference between revisions

From Sekaipedia
Content added Content deleted
(use id instead of name)
mNo edit summary
Line 118: Line 118:
local args = getArgs( frame )
local args = getArgs( frame )


local eventName = args['event name'] or VariablesLua.var( 'event name' )
local eventId = args['event id'] or VariablesLua.var( 'event id' )
local eventId = args['event id'] or VariablesLua.var( 'event id' )
local gachaName = args['debut gacha name']
local gachaId = args['debut gacha id']
local gachaId = args['debut gacha id']
Line 132: Line 129:
local shopCardsQuery = makeBasicQueryBuilder( eventId )
local shopCardsQuery = makeBasicQueryBuilder( eventId )
:addWhere(
:addWhere(
'Cards.obtain',
'Cards.acquire',
'HOLDS',
'HOLDS',
'Event Shop'
'Event Shop'

Revision as of 01:56, 14 April 2022


To generate {{Event cards}}, invoke using the main function.


local getArgs          = require('Module:Arguments').getArgs
local DatatableBuilder = require('Module:DatatableBuilder')
local QueryBuilder     = require('Module:QueryBuilder')
local VariablesLua     = mw.ext.VariablesLua

local p = {}

local function formatThumbnail( thumbnail )
	return string.format( '[[File:%s|64px]]', thumbnail )
end

local function formatPageLink( page, name )
	if page and name then
		return string.format( '[[%s|%s]]', page, name )
	end
	
	return nil
end

local function formatLink( page )
	if page then
		return string.format( '[[%s]]', page )
	end
	
	return nil
end


local function makeBasicQueryBuilder( eventId )
	local qb = QueryBuilder.new()
	qb
		:setTables( 'Cards, Card_Skills' )
		:setFields( [[
			Cards._pageName = cardPageName,
			Cards.card_id,
			Cards.card_name,
			Cards.thumbnail,
			Cards.card_character,
			Cards.attribute,
			Cards.rarity,
			Cards.status,
			Card_Skills.skill_type
		]] )
		:setJoinOn( [[
			Cards._pageID = Card_Skills._pageID
		]] )
		:addWhere( 'card_id', '>', 0 )
		:setOrderBy( 'Cards.card_id ASC' )
		:setGroupBy( 'Cards._pageID' )
		:setLimit( 10 )
	qb
		:addWhere(
			'Cards.event_id',
			'=',
			eventId
		)

	return qb
end

local function makeTable( caption, data )
	local datatable = DatatableBuilder.new()
	datatable
		:setCaption( caption )
		:setColumns{
			{
				name = 'id',
				header = 'ID',
				dataFields = { 'Cards.card_id' }
			},
			{
				name = 'thumbnail',
				header = 'Thumbnail',
				dataFields = { 'Cards.thumbnail' },
				func = formatThumbnail,
				sortable = false
			},
			{
				name = 'name',
				header = 'Card name',
				dataFields = { 'cardPageName', 'Cards.card_name' },
				func = formatPageLink
			},
			{
				name = 'character',
				header = 'Character',
				dataFields = { 'Cards.card_character' }
			},
			{
				name = 'attribute',
				header = 'Attribute',
				dataFields = { 'Cards.attribute' }
			},
			{
				name = 'rarity',
				header = 'Rarity',
				dataFields = { 'Cards.rarity' }
			},
			{
				name = 'status',
				header = 'Status',
				dataFields = { 'Cards.status' }
			},
			{
				name = 'skill',
				header = 'Skill',
				dataFields = { 'Card_Skills.skill_type' },
				func = formatLink
			},
		}
		:setData( data )

	return datatable
end


function p.main( frame )
	local args = getArgs( frame )

	local eventId   = args['event id'] or VariablesLua.var( 'event id' )
	local gachaId   = args['debut gacha id']
	
	local gachaCardsQuery = makeBasicQueryBuilder( eventId, 'Gacha' )
		:addWhere(
			'Cards.gacha_id',
			'=',
			gachaId
		)
	local shopCardsQuery  = makeBasicQueryBuilder( eventId )
		:addWhere(
			'Cards.acquire',
			'HOLDS',
			'Event Shop'
		)
	
	local gachaCardsTable = makeTable( 'Gacha cards', gachaCardsQuery:query() )
	local shopCardsTable = makeTable( 'Event Shop cards', shopCardsQuery:query() )

	return gachaCardsTable:tostring() .. shopCardsTable:tostring()
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.