Documentation for this module may be created at Module:ListOfTeams/doc
local util_args = require('Module:ArgsUtil')
local util_cargo = require("Module:CargoUtil")
local util_esports = require("Module:EsportsUtil")
local util_html = require("Module:HtmlUtil")
local util_map = require("Module:MapUtil")
local util_sort = require("Module:SortUtil")
local util_table = require("Module:TableUtil")
local util_text = require("Module:TextUtil")
local util_vars = require("Module:VarsUtil")
local i18n = require('Module:i18nUtil')
local m_team = require('Module:Team')
local RoleList = require('Module:RoleList')
local RegionList = require('Module:RegionList')
local CountryList = require('Module:CountryList')
local Socials = require('Module:Infobox/Social').makeSocialSection
local COLUMNS = { 'TeamDisplay', 'Socials', 'Roster' }
local h = {}
local p = {}
function p.main(frame)
local args = util_args.merge()
i18n.init('ListOfTeams')
h.castArgs(args)
local data = h.makeAndRunTeamsQuery(args)
h.getTeamRosters(data)
h.formatRows(data)
return h.makeOutput(data)
end
function h.castArgs(args)
args.region = RegionList(args.region)
args.country = CountryList(args.country)
end
function h.makeAndRunTeamsQuery(args)
return util_cargo.queryAndCast(h.makeTeamsQuery(args))
end
function h.makeTeamsQuery(args)
local query = {
tables = {
'Teams=T',
'TeamsWithAutoRosters=TWAR',
},
join = {
'T._pageName=TWAR._pageName',
},
fields = {
'T._pageName=Team',
'T.Twitter=twitter',
-- 'T.Youtube=youtube',
'T.Facebook=facebook',
'T.Instagram=instagram',
'T.Vk=vk',
'TWAR._pageName=hasTWAR',
},
where = {
util_cargo.whereFromCompoundEntity('T.Region="%s"', args.region),
util_cargo.whereFromCompoundEntity('T.Location="%s"', args.country),
'T.IsDisbanded="0"',
'T.RenamedTo IS NULL',
},
orderBy = 'T._pageName ASC',
groupBy = ('T._pageName'),
}
return query
end
function h.getTeamRosters(data)
util_map.rowsInPlace(data, h.getOneTeamRoster)
end
function h.getOneTeamRoster(row)
local rosterResult = util_cargo.queryAndCast(h.makeRosterQuery(row))
row.Players = rosterResult
end
function h.makeRosterQuery(row)
local query = {}
if not row.hasTWAR then
query.tables = { 'ListplayerCurrent=LPC' }
query.fields = {
'LPC.Role=Role',
'LPC.Link=Player',
'LPC.IsSubstitute [boolean]',
'LPC.IsTrainee [boolean]',
}
query.groupBy = 'LPC.Link'
query.where = { ('LPC.Team = "%s"'):format(row.Team) }
else
query.tables = { 'Tenures=Ten', 'RosterChanges=RCJ', 'PlayerRedirects=PR' }
query.fields = {
'RCJ.Role=Role',
'RCJ.RoleModifier',
'Ten.Player=Player',
'PR.OverviewPage=PlayerOverview',
}
query.join = { 'Ten.RosterChangeIdJoin=RCJ.RosterChangeId', 'Ten.Player=PR.AllName' }
query.where = {
('Ten.Team = "%s"'):format(row.Team),
'Ten.IsCurrent="1"',
'RCJ.RolesIngame__FULL IS NOT NULL',
'RCJ.RoleModifier IS NULL OR RCJ.RoleModifier != "Trainee"',
}
query.groupBy = 'Ten.Player'
end
return query
end
function h.formatRows(data)
util_map.rowsInPlace(data, h.formatOneRow)
end
function h.formatOneRow(row)
util_map.rowsInPlace(row.Players, h.formatOnePlayer, row.hasTWAR)
util_sort.tablesByKeys(row.Players, 'SortKeyRole', true)
row.Roster = util_table.concat(row.Players, ' • ', h.linkPlayer)
row.TeamDisplay = m_team.rightmediumlinked(row.Team)
row.Socials = table.concat(Socials(row))
end
function h.formatOnePlayer(playerRow, hasTWAR)
if not hasTWAR then
playerRow.RoleModifier = h.getRoleModifier(playerRow)
end
playerRow.Player = playerRow.PlayerOverview or playerRow.Player
playerRow.roleObj = RoleList(playerRow.Role, { modifier = playerRow.RoleModifier })
playerRow.SortKeyRole = playerRow.roleObj:sortnumber()
end
function h.getRoleModifier(playerRow)
if playerRow.IsSubstitute then return 'Sub' end
if playerRow.IsTrainee then return 'Trainee' end
return nil
end
function h.linkPlayer(playerRow)
-- return (playerRow.RoleModifier or '') .. playerRow.Player
return util_esports.playerWithRole({ player = playerRow.Player, role = playerRow.roleObj })
end
function h.makeOutput(data)
local output = mw.html.create()
local tbl = output:tag('table')
:addClass('wikitable')
:addClass('sortable')
util_html.printHeaderFromI18n(tbl, COLUMNS)
util_html.printRowsByList(tbl, data, COLUMNS)
return output
end
return p