Documentation for this module may be created at Module:QueryTeamMembers/doc
local util_args = require('Module:ArgsUtil')
local util_cargo = require("Module:CargoUtil")
local util_esports = require("Module:EsportsUtil")
local util_map = require("Module:MapUtil")
local util_sort = require("Module:SortUtil")
local util_text = require("Module:TextUtil")
local h = {}
local p = {}
function p.main(team, settings)
if h.hasAutoTeams(team) then
return h.getTeamMembers(team, settings)
end
return h.getListplayerCurrent(team, settings)
end
function h.hasAutoTeams(teamlink)
local query = {
tables = 'TeamsWithAutoRosters',
fields = 'OverviewPage',
where = string.format('OverviewPage="%s"',teamlink),
}
return util_cargo.getOneResult(query)
end
function h.getTeamMembers(team, settings)
if not settings then settings = {} end
local query = {
tables = {
'Tenures=Ten',
'PlayerRedirects=PR',
'Players=P',
'RosterChanges=RCJ',
'Alphabets=A',
},
join = {
'Ten.Player=PR.AllName',
'PR.OverviewPage=P._pageName',
'Ten.RosterChangeIdJoin=RCJ.RosterChangeId',
'P.NameAlphabet=A.Alphabet',
},
fields = {
'P._pageName=PlayerPage', -- for debugging
'P.Player=Link',
'P.ID',
'P.Name',
'CONCAT(CASE WHEN A.IsTransliterated="1" THEN P.NameFull ELSE P.Name END)=NameFull',
'COALESCE(P.NationalityPrimary, P.Country)=Country [country]',
'P.Residency [region]',
'RCJ.Roles',
'RCJ.RoleModifier',
},
complexTypes = {
RoleList = {
type = 'RoleList',
args = {
'Roles',
modifier = 'RoleModifier',
}
}
},
where = {
'Ten.IsCurrent="1"',
('Ten.Team="%s"'):format(team),
settings.hideTrainees and 'RCJ.RoleModifier IS NULL OR RCJ.RoleModifier != "Trainee"',
},
}
-- util_cargo.logQuery(query)
local result = util_cargo.queryAndCast(query)
-- should replace this with having a pre-store is_ingame check
if not settings.includeStaff then
for i = #result, 1, -1 do
if not result[i].RoleList:hasIngame() then
table.remove(result, i)
end
end
end
util_map.rowsInPlace(result, h.formatOneTeamMemberRow)
util_sort.tablesByKeys(result, { 'SortKeyRole', 'SortKeyName' }, { true, true })
return result
end
function h.formatOneTeamMemberRow(row)
row.SortKeyRole = row.RoleList:sortnumber()
if row.Link then
row.SortKeyName = mw.ustring.lower(row.Link)
end
end
function h.getListplayerCurrent(team, settings)
if not settings then settings = {} end
local query = {
tables = { 'ListplayerCurrent=LPC', '_pageData=_pD' },
join = 'LPC.Link=_pD._pageName',
fields = {
'_pD._pageName=Exists [boolean]',
'LPC.Link',
'LPC.ID',
'LPC.Name',
'LPC.Country [country]',
'LPC.Residency [region]',
'LPC.Role',
'LPC.IsSubstitute [boolean]',
'LPC.IsTrainee [boolean]',
},
where = h.getLpcWhere(team, settings),
groupBy = 'LPC.Link',
orderBy = 'LPC.N',
complexTypes = {
RoleList = {
type = 'RoleList',
args = {
'Role',
-- these were previously cast as boolean
sub = 'IsSubstitute',
trainee = 'IsTrainee',
}
}
}
}
local result = util_cargo.queryAndCast(query)
util_map.rowsInPlace(result, h.formatOneRowLPC)
util_sort.tablesByKeys(result, { 'SortKeyRole', 'SortKeyName' }, { true, true })
return result
end
function h.getLpcWhere(team, settings)
local where = {
('LPC._pageName="%s" AND ID IS NOT NULL'):format(team),
}
return where
end
function h.formatOneRowLPC(row)
row.ID = util_esports.playerDisplay(row.ID)
row.NameFull = row.Name
h.formatOneTeamMemberRow(row)
end
return p