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