Módulo:Manutenção
A documentação para este módulo pode ser criada em Módulo:Manutenção/doc
Erro de script: Erro em Lua: Não é possível criar o processo: proc_open(/dev/null): failed to open stream: Operation not permitted
-- 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