Documentation for this module may be created at Module:NewsLanding/Transfers/doc
local cargo = mw.ext.cargo
local Flags = require('Module:Flags')
local getTeamLogo = require('Module:Functions').getTeamLogo
local p = {}
function p.main()
local tables = 'Transfers'
local fields = '_pageName, id, flag, joindate, leavedate, inactivedate, maxdate'
local cargoArgs = {
orderBy = 'maxdate DESC',
limit = 30
}
local size = '25px'
local results = cargo.query(tables, fields, cargoArgs)
if #results > 0 then
local prevTransfers = {}
local transfersContainer = mw.html.create('div'):addClass('news-transfer-container')
local transfersWrapper = mw.html.create('div'):addClass('news-transfers-wrapper'):node(mw.html.create('div'):addClass('news-transfers-title'):wikitext('Latest transfers')):node(transfersContainer)
-- Header row
-- local transferHeader = mw.html.create('div'):addClass('news-transfer-row news-transfer-header')
-- transferHeader:node(mw.html.create('div'):wikitext('Date')):node(mw.html.create('div'):wikitext('Player')):node(mw.html.create('div'):wikitext('From')):node(mw.html.create('div'):wikitext('To'))
-- transfersContainer:node(transferHeader)
local monthNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
-- Loop through all transfers
for i = 1, #results do
local result = results[i]
local game = mw.text.split(result._pageName, '/')[1]
-- Prevent duplicate if joined a new team on same date as they left the previous one
if not tableContains(prevTransfers, result.id, result.date) then
table.insert(prevTransfers, {id = result.id, date = result.date})
local gameLogo = mw.html.create():wikitext('[[File:' .. game .. '_logo.png|20x20px|link=' .. game .. '/Transfers]]')
local transfer = mw.html.create('div'):addClass('news-transfer-row')
if result.flag then
flag = Flags.icon(result.flag, game)
else
tables = 'People'
fields = '_pageName, nationality, name, romanized'
cargoArgs = {
where = '_pageName="' .. result.id .. '"'
}
local personResult = cargo.query(tables, fields, cargoArgs)
if #personResult > 0 then
flag = Flags.icon(personResult[1].nationality, game)
end
end
local player = mw.html.create('div'):addClass('news-transfer-player'):node(flag):node('[[' .. result.id .. '|' .. string.gsub(result.id, 'People/', '') .. ']]')
local team = mw.html.create('div'):node(getTeamLogo(result._pageName, game, size))
local action = mw.html.create('div'):attr('title', result.leavedate and 'Left' or 'Joined'):wikitext(result.leavedate and 'X' or '=>')
transfer:node(gameLogo):node(player):node(action):node(team)
transfersContainer:node(transfer)
-- OLD TYPE TABLE
-- local year, month, day = result.joindate:match("(%d+)-(%d+)-(%d+)")
-- local monthName = monthNames[tonumber(month)]
-- local joinDate = monthName .. " " .. day .. ", " .. year
-- local leaveDate = nil
-- if result.leavedate then
-- year, month, day = result.leavedate:match("(%d+)-(%d+)-(%d+)")
-- monthName = monthNames[tonumber(month)]
-- leaveDate = monthName .. " " .. day .. ", " .. year
-- end
-- local transfer = mw.html.create('div'):addClass('news-transfer-row')
-- local transferDate = mw.html.create('div'):wikitext(leaveDate or joinDate)
-- local flag = ''
-- if result.flag then
-- flag = Flags.icon(result.flag, game)
-- else
-- tables = 'People'
-- fields = '_pageName, nationality, name, romanized'
-- cargoArgs = {
-- where = '_pageName="' .. result.id .. '"'
-- }
-- local personResult = cargo.query(tables, fields, cargoArgs)
-- if #personResult > 0 then
-- flag = Flags.icon(personResult[1].nationality, game)
-- end
-- end
-- local player = mw.html.create('div'):addClass('transfer__player'):node(flag):node('[[' .. result.id .. '|' .. string.gsub(result.id, 'People/', '') .. ']]')
-- local from = mw.html.create('div')
-- local to = mw.html.create('div')
-- -- If left the current team then check if has joined a new one, else check for older entries from the same player to see which team he joined from
-- if leaveDate then
-- tables = 'Transfers'
-- fields = '_pageName, id, flag, joindate, leavedate, inactivedate'
-- cargoArgs = {
-- where = '_pageName LIKE "' .. game .. '/%" AND id="' .. result.id .. '" AND joindate = "' .. result.leavedate.. '"',
-- orderBy = 'joindate ASC',
-- limit = 10
-- }
-- local newTeamResult = cargo.query(tables, fields, cargoArgs)
-- from:node(getTeamLogo(result._pageName, game, size))
-- if #newTeamResult > 0 then to:node(getTeamLogo(newTeamResult[1]._pageName, game, size))
-- else to:wikitext('X') end
-- else
-- tables = 'Transfers'
-- fields = '_pageName, id, flag, joindate, leavedate, inactivedate'
-- cargoArgs = {
-- where = '_pageName LIKE "' .. game .. '/%" AND id="' .. result.id .. '" AND joindate < "' .. result.joindate .. '" AND leavedate="' .. result.joindate .. '"',
-- orderBy = 'joindate DESC',
-- limit = 10
-- }
-- local fromResults = cargo.query(tables, fields, cargoArgs)
-- -- If had previous teams
-- if #fromResults > 0 then
-- from:node(getTeamLogo(fromResults[1]._pageName, game, size))
-- to:node(getTeamLogo(result._pageName, game, size))
-- else
-- from:wikitext('X')
-- to:node(getTeamLogo(result._pageName, game, size))
-- end
-- end
-- transfer:node(transferDate):node(player):node(from):node(to)
-- transfersContainer:node(transfer)
end
end
return transfersWrapper
end
return nil
end
function tableContains(tbl, targetId, targetDate)
for _, transfer in ipairs(tbl) do
if transfer.id == targetId and transfer.date == targetDate then
return true -- The table with the specified id and date exists
end
end
return false
end
return p