Module:Organization: Difference between revisions

From TwogPedia
mNo edit summary
mNo edit summary
 
Line 9: Line 9:
function Organization.main(frame)
function Organization.main(frame)
local args = getArgs(frame)
local args = getArgs(frame)
 
if VariablesLua.varexists('Employees') == false then return '' end
if VariablesLua.varexists('Employees') == false or VariablesLua.var('Employees') == '' then return '' end
local tables = mw.text.split(VariablesLua.var( 'Employees' ), '&&&')
local tables = mw.text.split(VariablesLua.var( 'Employees' ), '&&&')


Line 179: Line 179:
end
end


    VariablesLua.vardefine( 'Employees', '')
return tableContainer
return tableContainer
end
end


return Organization
return Organization

Latest revision as of 08:33, 25 April 2024

Documentation for this module may be created at Module:Organization/doc

local getArgs = require('Module:Arguments').getArgs
local stringifyDate = require('Module:Functions').stringifyDate
local Flags = require('Module:Flags')
local cargo = mw.ext.cargo
local Organization = {}

local VariablesLua = mw.ext.VariablesLua

function Organization.main(frame)
	local args = getArgs(frame)

	if VariablesLua.varexists('Employees') == false or VariablesLua.var('Employees') == '' then return '' end
	local tables = mw.text.split(VariablesLua.var( 'Employees' ), '&&&')

	-- Get all unique properties from Person templates
	properties = {}
	for i = 1, #tables do
		local values = mw.text.jsonDecode(tables[i])
		for key2, value2 in pairs ( values ) do
			if  string.find(mw.text.jsonEncode(properties), '"' .. key2 .. '"') then
			else
				table.insert(properties, key2)
			end
		end
	end
	
	properties = mw.text.jsonEncode(properties)
		
	local tableContainer = mw.html.create('table')
	tableContainer:addClass('striped-table')
	
	if args.title then
		local title = mw.html.create('tr')
			:addClass('headerRow'):node(mw.html.create('th'):addClass('table-title'):attr('colspan', 10):wikitext(args.title))
		tableContainer:node(title)
	end
	
	local titleRow = mw.html.create('tr')
	titleRow:addClass('headerRow')

	
	local nameCell = mw.html.create('th')
		nameCell:wikitext('Name')
	local positionCell = mw.html.create('th')
		positionCell:addClass('position')
		positionCell:wikitext('Position')
	local joindateCell = mw.html.create('th')
		joindateCell:wikitext('Join Date')
	
	if ( string.find(properties, '"id"') ) then
		local idCell = mw.html.create('th')
			idCell:wikitext('ID')
		titleRow:node(idCell)
	end
	
	titleRow:node(nameCell):node(positionCell):node(joindateCell)
	
	-- If status is not active, then see what other th tags need to be added
	if ( args.status ~= 'active' ) then
		if ( string.find(properties, '"leavedate"') ) then
			local leaveDate = mw.html.create('th')
				leaveDate:wikitext('Leave Date')
				titleRow:node(leaveDate)
		end
		
		if ( string.find(properties, '"inactivedate"') ) then
			local inactiveDate = mw.html.create('th')
				inactiveDate:wikitext('Inactive Since')
				titleRow:node(inactiveDate)
		end
		
		if ( string.find(properties, '"newcompany"') ) then
			local newCompany = mw.html.create('th')
				newCompany:wikitext('New company')
				titleRow:node(newCompany)
		end
	end
	
	titleRow:node(titleHeader)
	
	tableContainer:node(titleRow)
	-- Go through all the Person template instances
	for i = 1, #tables do
		local values = mw.text.jsonDecode(tables[i])
		local personRow = mw.html.create('tr')
			personRow:addClass('bodyRow')
			
		-- if ( string.find(properties, '"id"') ) then
		-- 	local idCell = mw.html.create('th')
		-- 		idCell:wikitext('ID')
		-- 	titleRow:node(idCell)
		-- end

        -- Check if person is added for the name and nationality
        local tables = 'People'
		local fields = '_pageName, nationality, name, romanized'
        local pageName = values.id or ''
		local cargoArgs = {
			where = '_pageName="People/' .. pageName .. '"'
		}
		local results = cargo.query(tables, fields, cargoArgs)

        if #results > 0 then
            values.name = results[1].romanized or results[1].name or values.name
            values.flag = results[1].nationality or values.flag 
        end
		
		if values.id then
			local idFlagDiv = mw.html.create('div'):addClass('flag')
			local id = mw.html.create('td')
				:addClass('linkID')
				:node(idFlagDiv)
			if ( values.flag ) then
				local idFlag = Flags.icon(values.flag, 'Management')
				idFlagDiv:wikitext(idFlag)
			end
            local link = mw.title.new('People' .. values.id) and 'People/' .. values.id or 'People/' .. values.id .. '|' .. values.id

			idFlagDiv:wikitext('<span>[[' .. link .. '|' .. values.id .. ']]</span>')
			personRow:node(id)
		end
 
        
		
		if values.name then
			local flagDiv = mw.html.create('div'):addClass('flag')
			local name = mw.html.create('td')
				:addClass('playerName')
				:node(flagDiv)
				
			if values.flag and values.id == nil then
				local flag = Flags.icon(values.flag, 'Management')
				flagDiv:wikitext(flag)
			end
			
			flagDiv:wikitext(values.name)
			
			if string.find(properties, '"id"') == nil and values.id then
				name:attr('colspan', 2)
			end
			personRow:node(name)
		end
		
		
		local position = mw.html.create('td')
			:addClass('tc')
			:wikitext(values.position)
		local joindate = mw.html.create('td')
			joindate:wikitext(stringifyDate(values.joindate))
		
		personRow:node(position):node(joindate)
		
		-- If not active squad, then go add additional columns to table
		if ( args.status ~= 'active' ) then
			if ( string.find(properties, '"leavedate"') ) then
				local leaveText = mw.html.create('td')
					:addClass('tc')
					:wikitext(values.leavedate or '-')
				personRow:node(leaveText)
			end
			
			if ( string.find(properties, '"inactivedate"') ) then
				local inactiveDate = mw.html.create('td')
					:addClass('tc')
					:wikitext(stringifyDate(values.inactivedate) or '-')
				personRow:node(inactiveDate)
			end

			if ( string.find(properties, '"newcompany"')) then
				local newComapny = mw.html.create('td')
				if values.newteam then
					newComapny:wikitext('[[' .. values.newteam .. ']]')
				end
				personRow:node(newComapny)
			end
		end
		
		titleRow:node(personRow)
	end

    VariablesLua.vardefine( 'Employees', '')
	return tableContainer
end

return Organization