Fortnite Esports Wiki

Power Rankings of Brazil and Oceania at the moment are not updated to the last two competitive seasons, so the current positions of the players are not 100% accurate.

READ MORE

Fortnite Esports Wiki
Advertisement

Documentation for this module may be created at Module:PlayerCurrentTeam/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_source = require("Module:SourceUtil")
local util_table = require("Module:TableUtil")
local util_text = require("Module:TextUtil")
local util_title = require("Module:TitleUtil")
local util_vars = require("Module:VarsUtil")
local i18n = require('Module:i18nUtil')

local OD = require('Module:OrderedDict')

local PCT = require('Module:NewsCurrentStatusAbstract'):extends()

local h = {}

local p = {}

-- for testing to be called from MW
function p.test(frame)
	local args = util_args.merge()
	local result = p.main(args[1])
	local output = mw.html.create('table')
		:addClass('wikitable')
	for _, row in ipairs(result) do
		output:tag('tr')
			:tag('td'):wikitext(row.team)
			:tag('td'):wikitext(tostring(row.role))
			:tag('td'):wikitext(row.role:images())
	end
	return output
end

-- intended to be called by Infobox/Player
-- so this does not apply any processing to the output
-- and instead just returns a data table
function p.main(player)
	return PCT:init(player)
end

function PCT:defaultOutput()
	return { last = {}, contractDates = {} }
end

function PCT:getTables()
	local ret = {
		'NewsItems=News',
		'RosterChanges=RC',
		'PlayerRedirects=PR1',
		'Contracts',
		'PlayerRedirects=PR2',
		'TeamRedirects=TRed1', -- join from contracts to ST1
		'TeamRedirects=TRed2', -- join from news to ST2
		'SisterTeams=ST1', -- the sister team page (if one exists) of the contract team
		'SisterTeams=ST2', -- the sister team page (if one exists) of the news team
		
		'ResidencyChanges=ResC',
		'PlayerRedirects=PR3',
	}
	return ret
end

function PCT:getJoin()
	local ret = {
		'News.NewsId=RC.NewsId',
		'News.NewsId=Contracts.NewsId',
		'RC.Player=PR1.AllName',
		'Contracts.Player=PR2.AllName',
		
		-- contracts need to respect contracts from the same org
		'Contracts.Team=TRed1.AllName',
		'TRed1._pageName=ST1.Team',
		
		-- roster changes need to discover the org so we can pull contracts
		'RC.Team=TRed2.AllName',
		'TRed2._pageName=ST2.Team',
		
		-- residency changes are just the same news id that's it
		'News.NewsId=ResC.NewsId',
		'ResC.Player=PR3.AllName',
	}
	return ret
end

function PCT:getWhere(player)
	local where = {
		('PR1.OverviewPage="%s"'):format(player),
		('PR2.OverviewPage="%s"'):format(player),
		('PR3.OverviewPage="%s"'):format(player),
	}
	return util_cargo.concatWhereOr(where)
end

function PCT:getFields()
	local fields = self:super('getFields')
	fields[#fields+1] = 'Contracts.ContractEnd'
	fields[#fields+1] = 'COALESCE(ST1._pageName, Contracts.Team, ST2._pageName, RC.Team)=SisterTeamPage'
	fields[#fields+1] = 'COALESCE(PR1.OverviewPage, PR2.OverviewPage)=PlayerLink'
	fields[#fields+1] = 'Contracts.IsRemoval=IsContractRemoval [boolean]'
	fields[#fields+1] = 'ResC.ResidencyOld'
	return fields
end

function PCT:processOneChangeRow(row)
	row.Subject = row.Team
	row.team = row.Team
	row.role = row.Role
	if row.IsContractRemoval then
		self.CONTRACT_DATES[row.SisterTeamPage] = nil
	end
	if row.ContractEnd then
		self.CONTRACT_DATES[row.SisterTeamPage] = row.ContractEnd
	end
	
	-- this is plaintext so that we can cast it easily as a list when we're done
	self.PREVIOUS_RESIDENCIES[#self.PREVIOUS_RESIDENCIES+1] = row.ResidencyOld
end

function PCT:makeOutput(listOfSubjects, listOfChanges)
	listOfSubjects.last = h.getLastTeamList(listOfChanges)
	listOfSubjects.contractDates = self.CONTRACT_DATES
	listOfSubjects.resPrevList = self.PREVIOUS_RESIDENCIES
	return listOfSubjects
end

function h.getLastTeamList(listOfChanges)
	return h.getLastTeamInfo(listOfChanges[#listOfChanges])
end

function h.getLastTeamInfo(row)
	local ret = {
		team = row.Team,
		role = row.Role,
	}
	return ret
end

return p
Advertisement