Module:NewsLanding/Transfers

From TwogPedia
< Module:NewsLanding
Revision as of 14:39, 12 February 2024 by Couchor (talk | contribs) (Created page with "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 = {} loca...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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