Module:Infobox/Tournament

local lang = mw.getLanguage('en') local m_team = require('Module:Team') local m_region = require('Module:Region') local m_country = require('Module:Country') local social = require('Module:Infobox/Social') local teamhist = require('Module:Infobox/TeamHist') local util_infobox = require('Module:InfoboxUtil') local util_html = require('Module:HTMLUtil') local util_cargo = require('Module:CargoUtil') local util_dpl = require('Module:DPLUtil') local util_table = require('Module:TableUtil') local util_form = require('Module:FormUtil')

local NOIMAGE = 'Unknown Infobox Image - Tournament.png'

LAYOUT = { sections = { 'Tournament Information', 'Location & Dates', 'Broadcast', 'Results' }, contents = { { 'Organizer', 'Rulebook', 'Sponsor', 'Format', 'PrizePool','ParticipantNumber', 'Type', 'Tier', 'Mode', 'Platform', 'Links' }, { 'Region', 'Server', 'Country', 'Location', 'Venue', 'StartDate', 'EndDate', 'Date', }, { 'Casters', 'Streams', 'Schedule' }, { 'Winner', 'Second', 'Third', 'Fourth', 'Qualified', }, },	i18n = { Type = 'Type', Mode = 'Mode', Casters = 'Caster(s)', Streams = 'Stream(s)', PrizePool = 'Prize Pool', ParticipantNumber = 'Number of Teams', StartDate = 'Start Date', EndDate = 'End Date', } }

local h = {}

function h.getProcessed(args) local pagename = args.pagename or mw.title.getCurrentTitle.text local result = util_cargo.getOneRow({		tables = 'CCMTournaments',		fields = { 'StandardName', 'Region', 'League' },		where = ('OverviewPage="%s"'):format(pagename)	}) local tbl = { pagename = pagename, name = result.StandardName or args.storedname or args.name, region = result.Region or (args.region and m_region.medium(args.region)), league = result.League or args.league }	return tbl end

function h.processDisplay(args, processed) local frame = mw.getCurrentFrame local tbl = { title = args.name, image = util_infobox.getFile(args.image, NOIMAGE), notice = args.rednotice, Organizer = args.organizer and util_table.concatFromArgs(args, 'organizer', ' '), Rulebook = args.rulebook and ('[%s Rulebook]'):format(args.rulebook), Sponsor = args.sponsor, Server = args.server, Type = args.type, Tier = args.tier, Mode = args.mode, Platform = args.platform, Region = processed.region and m_region.rightmedium(processed.region), Country = args.country and m_country.rightlong(args.country), Location = args.location, Venue = args.venue, Format = args.format, PrizePool = args.prizepool, ParticipantNumber = args.participantnumber, Date = args.date, StartDate = args.sdate, EndDate = args.edate, Links = args.web and ('[%s Website]'):format(args.web), Casters = args.caster or args.casters, Streams = args.streams and (args.streams .. (args.linkstreams and ' Full List' or '')), Schedule = h.makeSchedule(processed.pagename), }	h.addResults(tbl, args) return tbl end

function h.makeSchedule(pagename) if util_cargo.getOneResult('GameSchedule','Tournament',{ where = ('_pageName="%s"'):format(pagename) }) then local url = util_form.fullURL('SpoilerFreeSchedule','SFS', { pagename }) return ('[%s Link (Spoiler-Free)]'):format(url) end return nil end

function h.addResults(tbl, args) local format = lang:lc(args.freeedit or '') ~= 'true' local places = { first = 'Winner', second = 'Second', third = 'Third', fourth = 'Fourth' } for k, v in pairs(places) do		if args[k] then tbl[v] = format and m_team.rightmediumlinked(args[k]) or args[k] end end if args.third1 or args.third2 then tbl.Third = util_table.concatFromArgs(args, 'third', ' ', format and m_team.rightmediumlinked) end tbl.Qualified = args.qual1 and util_table.concatFromArgs(args, 'qual', ' ', format and m_team.rightmediumlinked) return end

function h.processCargo(args, processed) local tbl = { {			_table = 'InfoboxTournament', Name = processed.name, DateStart = args.sdate, Date = args.edate or args.date or '', League = processed.league, Region = processed.region, Prizepool = args.prizepool, Country = args.country, Location = args.location, Rulebook = args.rulebook, Type = args.type, Tier = args.tier, Mode = args.mode, Links = args.web, Sponsors = args.sponsors, Organizer = args.organizer, ParticipantNumber = args.participantnumber, First = args.first, Second = args.second, }	}	return tbl end

function h.processCategories(args, processed) local tbl = { args.country and ('%s Tournaments'):format(m_country.localization(args.country) or ''), not processed.region and 'Tournaments Without Region', args.tier and args.tier .. ' Tournaments', args.type and args.type .. ' Tournaments', args.mode and args.mode .. ' Tournaments', 'Tournaments', processed.name:find(' ') and 'Tournaments with br In Stored Name', }	return tbl end

function h.processVariables(args, processed) local tbl = { ['Event Date'] = args.edate or args.date, ['Event Prizepool'] = args.prizepool, ['Event Name'] = processed.name, ['Event League'] = processed.league, ['Event Region'] = processed.region, }	return tbl end

local p = {} function p.main(args) local processed = h.getProcessed(args) local settings = { lc = processed.lc, nocargo = mw.title.getCurrentTitle.nsText ~= '' or args.nocargo, nocat = mw.title.getCurrentTitle.nsText ~= '' or args['no-cat'], }	return { display = h.processDisplay(args, processed), cargo = h.processCargo(args, processed), settings = settings, categories = h.processCategories(args, processed), variables = h.processVariables(args, processed), layout = LAYOUT } end

return p