Modulo:Progetti interessati

Versione del 30 nov 2015 alle 14:40 di Rotpunkt (discussione | contributi) (Nuovo modulo)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Info Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Progetti interessati/man (modifica · cronologia)
Sandbox: Modulo:Progetti interessati/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Progetti interessati/test (modifica · cronologia · esegui)

Modulo che implementa il template {{Progetti interessati}}.

Ha due sottopagine di configurazione:


--[[
* Modulo che implementa il template Monitoraggio.
]]--

require('Modulo:No globals')

local getArgs = require('Modulo:Arguments').getArgs

-- Configurazione
local cfg = mw.loadData('Modulo:Monitoraggio/Configurazione')

-- Variabili globali
local projParams = { 'progetto', 'progetto2', 'progetto3', 'progetto4' }
local gradeParams = { 'accuratezza', 'scrittura', 'fonti', 'immagini' }

-------------------------------------------------------------------------------
--                             Funzioni di utilità
-------------------------------------------------------------------------------

-- Wrapper di mw.title.exists, verifica sia che name sia valido, sia che esista
local function titleExists(name)
	local title = mw.title.new(name)
	return title and title.exists
end

local function project(param, args)
	return cfg.alias[args[param]] or args[param]
end

local function grade(param, args)
	return args[param] or 'nc'
end

local function lowestGrade(args)
	local t = { args.accuratezza, args.scrittura, args.fonti, args.immagini }
	table.sort(t)
	return t[4]
end

local function parseArgs(args)
	local validGrades = { a = true, b = true, c = true, d = true, e = true }
	
	for _, param in ipairs(gradeParams) do
		args[param] = validGrades[args[param]] and args[param] or nil
	end

	return args
end

-------------------------------------------------------------------------------
--                             Monitoraggio
-------------------------------------------------------------------------------

local function getLivello(args)
	local ret

	-- è presente accuratezza
	if args.accuratezza then
		if not args.scrittura then
			ret = '0.4'
		elseif not args.fonti then
			ret = '0.3'
		elseif not args.immagini then
			ret = '0.2'
		else
			-- sono presenti tutti e quattro i parametri di valutazione
			if args.accuratezza == 'e' then
				ret = 'BOZZA'
			elseif args.scrittura == 'e' then
				ret = 'W'
			elseif args.fonti == 'e' then
				ret = 'F'
			elseif args.immagini == 'e' then
				ret = 'IMMAGINI'
			else
				local values = { a = 4, b = 3, c = 2, d = 1 }
				ret = tostring(values[lowestGrade(args)])
			end
		end
	-- manca accuratezza
	else
		if args.scrittura or args.fonti or args.immagini then
			ret = '0.5'
		else
			ret = nil
		end
	end

	return ret
end

local function getCategories(livello, args)
	local ret = {}
	local cat

	for _, param in ipairs(projParams) do
		if args[param] then
			cat = string.format('[[Categoria:Voci monitorate Progetto %s]]', project(param, args))
			table.insert(ret, cat)
		end
	end

	-- per la "Situazione monitoraggio per mese" di [[Progetto:Qualità/Monitoraggio voci/Tabella]]
	if args.data then
		cat = string.format('Categoria:Voci monitorate - %s', args.data)
		if titleExists(cat) then
			table.insert(ret, '[[' .. cat .. ']]')
		else
			table.insert(ret, '[[Categoria:Errori di compilazione del template Monitoraggio]]')
		end
	else
		table.insert(ret, '[[Categoria:Voci monitorate - non datate]]')
	end

	for _, gradeParam in ipairs(gradeParams) do
		-- per la "Situazione monitoraggio per parametro" di [[Progetto:Qualità/Monitoraggio voci/Tabella]]
		cat = string.format('[[Categoria:Voci monitorate - %s %s]]',
							gradeParam, string.upper(grade(gradeParam, args)))
		table.insert(ret, cat)

		-- categorie per il [[template:Tabella monitoraggio]]
		for _, projParam in ipairs(projParams) do
			if args[projParam] then
				cat = string.format('Categoria:Progetto:%s/Tabella monitoraggio automatico - %s %s',
									project(projParam, args), gradeParam, grade(gradeParam, args))
				if titleExists(cat) then
					table.insert(ret, '[[' .. cat .. ']]')
				end
			end
		end
	end

	local suffix = livello and cfg.livello[livello].cat or 'non compilate'

	-- per la "Situazione generale" di [[Progetto:Qualità/Monitoraggio voci/Tabella]]
	cat = string.format('[[Categoria:Voci monitorate - %s]]', suffix)
	table.insert(ret, cat)

	-- categorie per il [[template:Tabella monitoraggio]]
	for _, param in ipairs(projParams) do
		if args[param] then
			cat = string.format('Categoria:Voci monitorate Progetto %s - %s',
								project(param, args), suffix)
			if titleExists(cat) then
				table.insert(ret, '[[' .. cat .. ']]')
			end
		end
	end

	return table.concat(ret)
end

-------------------------------------------------------------------------------
--                                    API
-------------------------------------------------------------------------------

local p = {}

-- Entry-point per {{#invoke:monitoraggio|livello}}
function p.livello(frame)
	local args = parseArgs(getArgs(frame))
	return getLivello(args)	
end

-- Entry-point per {{Monitoraggio}}
function p.main(frame)
	local args = parseArgs(getArgs(frame, {parentOnly = true}))
	local livello = getLivello(args)	
	return getCategories(livello, args)
end

return p