Módulo:Manutenção

Fonte: Enciclopédia de conhecimento da Igreja de Deus
Saltar para a navegação Saltar para a pesquisa

A documentação para este módulo pode ser criada na página Módulo:Manutenção/doc

-- Configuração dos assuntos
local assuntos = {
		['de ambiente'] = {'ambiente', 'amb'},
		['de arte'] = {'arte'},
		['de biografia'] = {'biografia', 'bio'},
		['de biografia histórica'] = {'bioh'},
		['do Brasil'] = {'brasil', 'bra', 'br'},
		['de ciência'] = {'ciência', 'ciencia', 'ci'},
		['sobre cinema e TV'] = {'cinema', 'cine', 'tv'},
		['de economia'] = {'economia', 'eco'},
		['de empresa'] = {'empresa', 'emp'},
		['de esporte'] = {'esporte', 'desp', 'esp'},
		['de ficção'] = {'ficção', 'fic'},
		['de futebol'] = {'futebol', 'fut'},
		['de geografia'] = {'geografia', 'geo'},
		['de geografia (África)'] = {'geo-af'},
		['de geografia (América)'] = {'geo-am'},
		['de geografia (Europa)'] = {'geo-eu'},
		['de geografia (Extremo Oriente)'] = {'geo-eo'},
		['de geografia (Médio Oriente)'] = {'geo-mo'},
		['de geografia (Oceania/Pacífico)'] = {'geo-oc'},
		['de história'] = {'história', 'hist'},
		['de história (África)'] = {'hist-af'},
		['de história (América)'] = {'hist-am'},
		['de história (Europa)'] = {'hist-eu'},
		['de história (Extremo Oriente)'] = {'hist-eo'},
		['de história (Médio Oriente)'] = {'hist-mo'},
		['de história (Oceania/Pacífico'] = {'hist-oc'},
		['de jogo'] = {'jogo'},
		['de localidade'] = {'localidade', 'loc'},
		['de lusofonia'] = {'lusofonia', 'lusof'},
		['de música'] = {'música', 'musica', 'mús', 'mus'},
		['de política'] = {'política', 'pol'},
		['de Portugal'] = {'portugal', 'por', 'pt'},
		['de sociedade'] = {'sociedade', 'soc'},
		['de saúde'] = {'saúde'},
		['de tecnologia'] = {'tecnologia', 'tec'}
}
local m = {}
m.assuntos = {}
-- inverte a tabela, de {['de ambiente']={'ambiente', 'amb'}, ...} para {['ambiente']='de ambiente', ['amb']='de ambiente', ...}
for v, t in pairs(assuntos) do
		for _, k in ipairs(t) do
				m.assuntos[k] = v
		end
end
assuntos = nil
-- verifica se o mês é válido e retorna o mês em letra minúscula
local valida_mes = function(mes)
		local meses = {'[Jj]aneiro', '[Ff]evereiro', '[Mm]arço', '[Aa]bril', '[Mm]aio', '[Jj]unho',
				'[Jj]ulho', '[Aa]gosto', '[Ss]etembro', '[Oo]utubro', '[Nn]ovembro', '[Dd]ezembro'}
		for n, m in ipairs(meses) do
				if string.find(mes, '^' .. m .. ' de %d+$') then
						return string.lower(mes)
				end
		end
end
m.categorizar = function(frame)
		local config = frame.args
		local catbase, mes
		local cats = {}
		-- Esta função é só para manutenção de artigos
		if mw.title.getCurrentTitle().namespace ~= 0 then
				return
		end
		if config['1'] then
				catbase = config['1']
		else
				return
		end
		local catsecao = config['seção']
		local arg1 = config['arg1'] or '^Est[ae] .'
		local cat2 = config ['cat2']
		local args = frame:getParent().args or {}
		local secao = args['1'] and string.find(args['1'], '^Esta sec?ção')
		if secao and catsecao then
				catbase = catsecao
		elseif args['1'] and args['1'] ~= '' then
				-- permite passar a data no primeiro argumento
				if valida_mes(args['1']) or string.match(args['1'], '^2%d%d%d$') then
						mes = args['1']
				-- se o primeiro argumento não é um assunto e não começa com Este ou Esta
				elseif not m.assuntos[args['1']] and not mw.ustring.find(args['1'], arg1) then
						table.insert(cats, '!Páginas com argumentos incorretos em marca de manutenção')
				end
		end
		
		-- categoria de data
		mes = mes or args['data'] or args['Data'] or args['date'] or args['Date']
		if mes then
				local vmes = valida_mes(mes)
				if not vmes then
						local ano = string.match(mes, '^2%d%d%d$')
						if ano then
							mes = ano
						else
								table.insert(cats, '!Páginas com parâmetro de data formatado incorretamente')
								mes = nil
						end
				else
						mes = vmes
				end
		end
		if mes then
				local cat = '!Artigos ' .. catbase .. ' desde ' .. mes
				if mw.title.new(cat, 14).exists then
						table.insert(cats, cat)
				else
						-- se a categoria de mês não existir tenta ver se existe o mês com letra maiúscula
						cat = '!Artigos ' .. catbase .. ' desde ' .. string.gsub(mes, '^%a', string.upper)
						if mw.title.new(cat, 14).exists then
								table.insert(cats, cat)
						else
								-- se também não existe, tenta colocar somente o ano
								local ano = string.match(mes, '2%d%d%d')
								if ano then
										table.insert(cats, '!Artigos ' .. catbase .. ' desde ' .. ano)
								-- senão coloca na categoria base
								else
										table.insert(cats, '!Artigos ' .. catbase)
								end
						end
				end
				-- se tiver cat2, repete tudo para cat2
				if cat2 then
						cat = cat2 .. ' desde ' .. mes
						if mw.title.new(cat, 14).exists then
								table.insert(cats, cat)
						else
								cat = cat2 .. ' desde ' .. string.gsub(mes, '^%a', string.upper)
								if mw.title.new(cat, 14).exists then
										table.insert(cats, cat)
								else
										local ano = string.match(mes, '2%d%d%d')
										if ano then
												table.insert(cats, cat2 .. ' desde ' .. ano)
										else
												table.insert(cats, cat2)
										end
								end
						end
				end
		else -- não tem data válida, coloca a categoria base
				table.insert(cats, '!Artigos ' .. catbase)
				if cat2 then
						table.insert(cats, cat2)
				end
		end
		-- categoria de assunto
		local algum = false
		local semcat = false
		for k, v in pairs(args) do
				if string.find(k, '^%d%d-$') then
						v = string.lower(v)
						if m.assuntos[v] then
								algum = true
								local cat = '!Artigos ' .. m.assuntos[v] .. ' ' .. catbase
								if mw.title.new(cat, 14).exists then
										table.insert(cats, cat)
								else
										semcat = true
								end
						end
				else
						k = string.lower(k)
						if m.assuntos[k] and v ~= '' then
								algum = true
								local cat = '!Artigos ' .. m.assuntos[k] .. ' ' .. catbase
								if mw.title.new(cat, 14).exists then
										table.insert(cats, cat)
								else
										semcat = true
								end
						end
				end
		end
		if not algum then
				local cat = '!Artigos ' .. catbase .. ' sem indicação de tema'
				if mw.title.new(cat, 14).exists then
						table.insert(cats, cat)
				end
		elseif semcat then
				local cat = '!Artigos ' .. catbase .. ' por assunto'
				local cat2 = '!Artigos ' .. catbase .. ' por tema'
				if mw.title.new(cat, 14).exists then
						table.insert(cats, cat)
				elseif mw.title.new(cat2, 14).exists then
						table.insert(cats, cat2)
				end
		end
		-- finalizando
		for i, cat in ipairs(cats) do
				cats[i] = '[[Categoria:' .. cat .. ']]'
		end
		return table.concat(cats)
end
return m