This site is no longer actively maintained. It exists for historical purposes as an example of Phabricator integration and Lua scripting.

Difference between revisions of "Module:Reports"

From cpt
No edit summary
No edit summary
Line 68: Line 68:
s = s .. '|-\n'
s = s .. '|-\n'
for k1,v1 in pairs( sorted_columns ) do
for k1,v1 in pairs( sorted_columns ) do
s = s .. '| style="vertical-align:top;width=50px;" |\n'
s = s .. '| style="vertical-align:top;width:50px;" |\n'
for k2,v2 in pairs ( tasks ) do
for k2,v2 in pairs ( tasks ) do
if v1 == v2 then
if v1 == v2 then
Line 75: Line 75:
end
end
end
end
s = s .. '| style="vertical-align:top;width=50px;" |\n'
s = s .. '| style="vertical-align:top;width:50px;" |\n'
for k1,v1 in pairs ( tasks ) do
for k1,v1 in pairs ( tasks ) do
if v1 == false then
if v1 == false then

Revision as of 23:06, 10 June 2019

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

local p = {}

function p.cleanse(frame)
	local s = frame.args[1]
	s = string.gsub( s, '{', '{' )
	s = string.gsub( s, '}', '}' )
	s = string.gsub( s, '%[', '[' )
	s = string.gsub( s, '%]', ']' )
	s = string.gsub( s, '|', '|' )
	return s
end

function p.cptWorkboardsTableRow(frame)
	local s = ''
	local link = frame.args[1]
	local category = frame.args[2]
	local kanban = frame.args[3]
	local backlog = frame.args[4]
	if ( #category > 0 and ( #kanban == 0 and #backlog == 0 )) or
		( #category == 0 and ( #kanban > 0 or ( #backlog > 0 and backlog ~= 'Watching / External' ))) then
		s = s .. '\n|' .. link
		s = s .. '\n|' .. category
		s = s .. '\n|' .. kanban
		s = s .. '\n|' .. backlog
		s = s .. '\n|-'
	end
	return s	
end

function p.Workboard(frame)
	local s = ''
	local epic = frame.args[1]
	local result = mw.smw.getQueryResult(
		'[[Has subobject::<q>[[Project::Core Platform Team]][[Column::' ..
		epic .. ']]</q>]][[Status::open||stalled]]' ..
		'|?CPT Kanban Column|?CPT Backlog Column|link=none|limit=500' )
	if result ~= nil then
		local tasks = {}
		local columns = {}
		local empty = true
		for k1,v1 in pairs( result.results ) do
			local kanban_column = v1.printouts['CPT Kanban Column'][1]
			local backlog_column = v1.printouts['CPT Backlog Column'][1]
			empty = false
			if kanban_column ~= nil then
				tasks[v1.fulltext] = kanban_column
				columns[kanban_column] = true
			elseif backlog_column ~= nil then
				tasks[v1.fulltext] = backlog_column
				columns[backlog_column] = true
			else
				tasks[v1.fulltext] = false
			end
		end
		if ( empty ) then
			s = 'No results'
		else
			local sorted_columns = {}
			for k1,v1 in pairs ( columns ) do
				table.insert( sorted_columns, k1 )
			end
			table.sort( sorted_columns )
			s = s .. '{|\n'
			for k1,v1 in pairs( sorted_columns ) do
				s = s .. '!' .. v1 .. '\n'
			end
			s = s .. '!Missing Column\n'
			s = s .. '|-\n'
			for k1,v1 in pairs( sorted_columns ) do
				s = s .. '| style="vertical-align:top;width:50px;" |\n'
				for k2,v2 in pairs ( tasks ) do
					if v1 == v2 then
						s = s .. '*[[' .. k2 .. ']]\n'
					end
				end
			end
			s = s .. '| style="vertical-align:top;width:50px;" |\n'
			for k1,v1 in pairs ( tasks ) do
				if v1 == false then
					s = s .. '*[[' .. k1 .. ']]\n'
				end
			end
			s = s .. '|}'
		end
	end
	return s
end
return p