Module:Infobox/Tournament

local lang = mw.getLanguage('en') local Currency = require('Module:Currency') local m_team = require('Module:Team') local teamhist = require('Module:Infobox/TeamHist') local util_args = require('Module:ArgsUtil') local util_infobox = require('Module:InfoboxUtil') local util_html = require('Module:HtmlUtil') local util_cargo = require('Module:CargoUtil') local util_table = require('Module:TableUtil') local util_time = require('Module:TimeUtil') local util_form = require('Module:FormUtil') local util_text = require('Module:TextUtil') local i18n = require('Module:i18nUtil')

local Country = require('Module:Country') local League = require('Module:League') local Region = require('Module:Region')

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

local Infobox = require('Module:Infobox'):extends

Infobox.LAYOUT = { sections = { 'Tournament Information', 'Location & Dates', 'Broadcast', 'Results' }, contents = { { 'Organizer', 'Host', 'Rulebook', 'Sponsor', 'Format', 'PrizePool','NumberofTeams', 'Links' }, { 'Server', 'Type', 'Game', 'Tier', 'Mode', 'Platform', 'Country', 'Location', 'Venue', 'StartDate', 'EndDate', 'Date', }, { 'Casters', 'Streams', 'Schedule' }, { 'Winner', 'Second', 'Third', 'Fourth', 'Qualified', }, }, } Infobox.type = 'Tournament'

local FORM_INFO = { SFS = { form = 'SpoilerFreeSchedule', template = 'SFS' }, MCE = { form = 'MatchCalendarExport', template = 'MCE' } }

local CCMT_PARAMS = { 'StandardName', 'TournamentLevel', 'IsQualifier', 'IsPlayoffs', 'IsOfficial', 'Year', 'LeagueIconKey' }

local ALLOWED_TIMEZONES = { 'PST', 'KST', 'CET' }

local h = {} local p = {}

function p.main(frame) local args = util_args.merge return Infobox(args):run end

function Infobox:validateArgs(args) if args.closest_timezone and not util_table.keyOf(ALLOWED_TIMEZONES, args.closest_timezone) then -- error(i18n.print('error_invalidTimezone')) end end

function Infobox:castArgs(args) args.league = League(args.CM_StandardLeague or args.league) args.region = Region(args.region) args.country = Country(args.country) args.currency = Currency(args.currency) end

function Infobox:getProcessed(args) local tbl = { pagename = args.pagename or mw.title.getCurrentTitle.text, name = args.CM_StandardName or args.storedname or args.name, type = util_text.ucfirst(args.type), }	return tbl end

function Infobox:getDisplay(args, processed) local display = self:super('getDisplay', args, processed) 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, Game = args.game, Tier = args.tier, Mode = args.mode, Platform = args.platform, Region = args.region:flair, EventType = processed.type, Country = args.country:flair, Location = args.location, Venue = args.venue, Format = args.format, PrizePool = args.prizepool, NumberofTeams = args.numberofteams, Date = args.date, StartDate = args.sdate, EndDate = args.edate, Links = h.getLinks(args), Casters = args.caster or args.casters, Streams = args.streams and (args.streams .. (args.linkstreams and ' Full List' or '')), Schedule = h.makeSchedule(processed.pagename), Host = h.getHost(args), }	h.addResults(tbl, args) return Infobox.mergeDisplay(display, tbl) end

function h.getHost(args) if args.host then return m_team.plainlinked(args.host) end end

function h.getHostForCargo(args) if args.host then return m_team.teamname(args.host) end end

function h.getLinks(args) if not args.bracket then return args.web and ('[%s Website]'):format(args.web) elseif not args.web then return args.bracket and ('[%s Bracket]'):format(args.bracket) else local links = { args.web and ('[%s Website]'):format(args.web), args.bracket and ('[%s Bracket]'):format(args.bracket), }		return util_table.concat(links, ' ') end end

function h.getPrizePool(args) if not args.currency then return args.prizepool end return args.currency:short(args.prizepool) end

function h.makeSchedule(pagename) if util_cargo.getOneResult({ tables = 'MatchSchedule', fields = 'OverviewPage', where = ('OverviewPage="%s"'):format(pagename) }) then local links = { ('[%s Spoiler-Free Schedule]'):format(util_form.fullURL(FORM_INFO.SFS, { pagename })), ('[%s Calendar Export]'):format(util_form.fullURL(FORM_INFO.MCE, { pagename })), }		return util_table.concat(links, ' ') end return nil end

function h.addResults(tbl, args) local format = not args.freeedit 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 Infobox:getCargo(args, processed) local cargo = self:super('getCargo', args, processed) if util_args.castAsBool(args.nocargo) then return cargo end local tbl = { {			_table = 'Tournaments', Name = processed.name, DateStart = util_time.strToDateStr(args.sdate or args.date or ) or , Date = util_time.strToDateStr(args.edate or args.date or ) or , ClosestTimezone = args.closest_timezone, League = args.league, StandardLeague = args.league, Region = args.region, Prizepool = args.prizepool, Currency = args.currency, Country = args.country, Location = args.location, Rulebook = args.rulebook, Platform = args.platform, Type = args.type, Game = args.game, Tier = args.tier, Mode = args.mode, EventType = processed.type, Links = args.web, Sponsors = args.sponsors, Organizer = args.organizer, Organizer2 = args.organizer2, NumberofTeams = args.numberofteams, First = args.first, Second = args.second, Host = h.getHostForCargo(args), SuppressTopSchedule = util_args.castAsBool(args.no_topschedule), OverviewPage = mw.title.getCurrentTitle.text, }	}	for _, param in ipairs(CCMT_PARAMS) do tbl[1][param] = args['CM_' .. param] end return util_table.mergeArrays(cargo, tbl) end

function Infobox:getCategories(args, processed) local tbl = { args.country:exists and ('%s Tournaments'):format(args.country:get('adjective')), not args.region:exists and 'Tournaments Without Region', args.game and args.game .. ' Tournaments', args.tier and args.tier .. ' Tournaments', args.type and args.type .. ' Tournaments', args.mode and args.mode .. ' Tournaments', args.platform and args.platform .. ' Tournaments', 'Tournaments', processed.name:find(' ') and 'Tournaments with br In Stored Name', }	return tbl end

function Infobox:getVariables(args, processed) local variables = self:super('getVariables', args, processed) local tbl = { ['Event Date'] = args.edate or args.date, ['Event Tier'] = processed.type, ['Event Prizepool'] = args.prizepool, ['Event Name'] = processed.name, ['Event League'] = processed.league, ['Event Region'] = args.region:get, }	return util_table.merge(variables, tbl) end

return p