Leaguepedia | League of Legends Esports Wiki
Advertisement

Edit the documentation or categories for this module. This module has an i18n file.


local util_args = require('Module:ArgsUtil')
local util_table = require('Module:TableUtil')
local util_cargo = require('Module:CargoUtil')
local util_esports = require("Module:EsportsUtil")
local util_form = require("Module:FormUtil")
local util_html = require('Module:HtmlUtil')
local util_map = require("Module:MapUtil")
local m_team = require('Module:Team')
local i18n = require('Module:I18nUtil')
local RoleList = require('Module:RoleList')
local RegionList = require('Module:RegionList')

local COLUMNS = { 'Region', 'Team', 'Residency', 'Player', 'Name', 'Role', 'Date' }

local FORM_INFO = { form = 'Contracts', template = 'EC' }

local h = {}
local p = {}
function p.main(frame)
	i18n.init('ExpiringContracts')
	local args = util_args.merge()
	local formArgs = h.getFormArgs(args)
	h.castArgs(args)
	local result = h.makeQuery(args)
	util_map.rowsInPlace(result, h.processRow)
	return h.makeIntro(args, formArgs), h.makeOutput(result), h.makeOutro(args, formArgs)
end

function h.castArgs(args)
	args.role = RoleList(args.role,{sep=','})
	args.region = RegionList(args.region)
	args.res = RegionList(args.res)
end

function h.getFormArgs(args)
	local formArgs = mw.clone(args)
	formArgs.showformlink = nil
	return formArgs
end

function h.makeQuery(args)
	local query = {
		tables = {
			'Teams=T',
			'Tenures=Ten',
			'PlayerRedirects=PR',
			'Players=P',
			'SisterTeams=ST',
			'Alphabets=A',
		},
		join = {
			'T._pageName=Ten.Team',
			'Ten.Player=PR.AllName',
			'PR.OverviewPage=P.OverviewPage',
			'T._pageName=ST.Team',
			'P.NameAlphabet=A.Alphabet',
		},
		fields = {
			'T.Region [region]',
			'T._pageName=Team',
			'Ten.Player',
			'P.ID',
			'CONCAT(CASE WHEN A.IsTransliterated="1" THEN P.NameFull ELSE P.Name END)=Name',
			'Ten.ContractEnd=Date',
			'P.Residency [region]',
			'P.Role [role]',
		},
		groupBy = 'P.Player, COALESCE(ST._pageName,T._pageName)',
		orderBy = 'T.Region ASC, Ten.ContractEnd ASC',
		where = {
			args.date and ('Ten.ContractEnd <= "%s"'):format(args.date),
			args.sdate and ('Ten.ContractEnd >= "%s"'):format(args.sdate),
			'Ten.ContractEnd >= NOW()',
			util_cargo.whereFromCompoundEntity('T.Region="%s"', args.region),
			util_cargo.whereFromCompoundEntity('P.Residency="%s"', args.res),
			util_cargo.whereFromCompoundEntity('P.Role="%s"', args.role),
			'Ten.ContractEnd IS NOT NULL',
			'Ten.IsCurrent="1"',
			'T._pageName IS NOT NULL',
		},
	}
	return util_cargo.queryAndCast(query)
end

function h.processRow(row)
	row.Region = row.Region:flair()
	row.Team = m_team.rightmediumlinked(row.Team)
	row.Residency = row.Residency:flair()
	row.Player = util_esports.playerLinked(row.Player)
	row.Role = row.Role:flair{len='name'}
end

function h.makeIntro(args, formArgs)
	-- print this only if we aren't printing an outro
	if util_args.castAsBool(args.showformlink) then return '' end
	return i18n.print('permalinkIntro', util_form.fullURL(FORM_INFO, formArgs))
end

function h.makeOutput(result)
	local tbl = mw.html.create('table'):addClass('cargoTable sortable')
	util_html.printHeaderFromI18n(tbl, COLUMNS)
	util_html.printRowsByList(tbl, result, COLUMNS)
	return tbl
end

function h.makeOutro(args, formArgs)
	if not util_args.castAsBool(args.showformlink) then return '' end
	return i18n.print('permalink', util_form.fullURL(FORM_INFO, formArgs))
end

return p
Advertisement