Módulo:Nível efetivo de proteção
![]() | Este módulo está na categoria sujeitos a proteção de página. Ele é um módulo de alta visibilidade em uso por um grande número de páginas, ou é transcluído muito frequentemente. Por causa do vandalismo ou erros que podem afectar muitas páginas, e mesmo edições triviais podem causar cargas substanciais nos servidores, ele está protegido de editar. |
Este módulo fornece uma maneira de recuperar o grupo necessário para executar uma determinada ação em uma página.[a] Atualmente ele testa os seguintes critérios:
- A página sendo protegida por alterações pendentes: autoconfirmed
- A página sendo uma subpágina de JavaScript (J.S.) ou de folhas de estilos em cascatas (F.E.C.)[b] no espaço de usuário ou no espaço nomeado MediaWiki: interfaceadmin
- A página sendo do espaço nomeado MediaWiki: sysop
- A página sendo uma subpágina de notação de objeto JavaScript (N.O.J.S.)[c] no espaço do usuário: sysop
- A página que está sendo protegida: sysop, templateeditor, extendedconfirmed, ou autoconfirmed
- A página que está sendo usada em uma página protegida em cascata: sysop
- O título da página que corresponde à lista negra de títulos: templateeditor ou autoconfirmed
- Um arquivo sendo movido: filemover
- Uma página sendo movida ou um arquivo sendo carregado: autoconfirmed
- Uma página que não é de discussão e não é rascunho sendo criada: user
- Qualquer outra coisa: *
Observe que, se um arquivo protegido por predefinição for movido, "filemover" e "templateeditor" serão necessários, mas ele retornará apenas "templateeditor". Não é provável que isso seja alterado tão cedo, já que a proteção de predefinição atualmente não deve ser usada em arquivos.
Uso
Aviso: Este módulo usará até 4 chamadas caras de função de analisador cada vez que for executado. Só deve ser usado se o nível de proteção efetivo exato for necessário. Se não, considere usar "title.protectionLevels" em vez dele.
A partir de outros módulos
Para carregar este módulo:
local effectiveProtectionLevel = require('Módulo:Nível efetivo de proteção')._main
A função aceita dois parâmetros. A primeira é uma sequência[d] contendo a ação a ser verificada, que deve ser "editar", "criar", "mover", "carregar", "desfazer exclusão" ou "revisão automática" ("edit", "create", "move", "upload", "undelete", ou "autoreview"). O segundo é opcional e pode ser o nome da página a ser verificada ou um título retornado das funções "mw.title". Se o segundo parâmetro for omitido, a página que está sendo mostrada é a verificada. O valor de retorno é uma sequência[d] contendo o nome do grupo necessário para executar a ação especificada.
A partir de texto wiki
Os parâmetros são os mesmos da chamada direta.
{{#invoke:Nível efetivo de proteção|ação|título}}
Ver também
Notas
- ↑ Este módulo foi traduzido como está na enwiki (a atualização mais recente foi em setembro de 2020). Pode ser interessante verificar se os níveis de acesso e os nomes dos grupos ainda correspondem e, se necessário, adaptar o módulo à configuração correspondente na ptwiki.
- ↑ do inglês C.S.S. – cascading style sheets
- ↑ do inglês J.S.O.N. – JavaScript object notation
- ↑ a b do inglês string
local p = {}
-- Retorna a permissão necessária para executar uma determinada ação em um determinado título.
-- Se nenhum título for especificado, o título da página mostrada será usado.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local level = mw.ext.FlaggedRevs.getStabilitySettings(title)
level = level and level.autoreview
if level == 'review' then
return 'reviewer'
elseif level ~= '' then
return level
else
return nil -- Não '*'. Uma página que não está protegida por proteção em cascata é diferente de uma página protegida por proteção em cascata com qualquer pessoa capaz de revisar. Também não '', pois isso significaria proteção para proteção em cascata, mas ninguém pode revisar.
end
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then
error( 'O primeiro parâmetro deve ser um dos seguintes: edit, move, create, upload, undelete, autoreview', 2 )
end
if title.namespace == 8 then -- Espaço nomeado MediaWiki.
if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- página de 'JavaScript' ('JS.') ou de folhas de estilos em cascatas (F.E.C., 'C.S.S.').
return 'interfaceadmin'
else -- qualquer página que não é de 'JavaScript' ('JS.') ou de folhas de estilos em cascatas (F.E.C., 'C.S.S.') em MediaWiki.
return 'sysop'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- página de 'JavaScript' ('JS.') ou de folhas de estilos em cascatas (F.E.C., 'C.S.S.') de usuário.
return 'interfaceadmin'
elseif title.contentModel == 'json' then -- página de notação de objeto 'JavaScript' (N.O.'JS.', 'JS.O.N.') de usuário.
return 'sysop'
end
end
if action == 'undelete' then
return 'sysop'
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
if level == 'sysop' or level == 'editprotected' then
return 'sysop'
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- Usado por uma página protegida em cascata.
return 'sysop'
elseif level == 'templateeditor' then
return 'templateeditor'
elseif action == 'move' then
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testando se a ação "edit" está correta, já que esta é para a página de origem. O nome da página de destino é testado com a ação "move".
if blacklistentry and not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif title.namespace == 6 then
return 'filemover'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
end
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
if blacklistentry then
if not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
elseif level == 'editsemiprotected' then -- Criar páginas semiprotegidas retorna isso por algum motivo.
return 'autoconfirmed'
elseif level then
return level
elseif action == 'upload' then
return 'autoconfirmed'
elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- Você precisa ser registrado, mas não autoconfirmado, para criar páginas que não são de discussão que não sejam rascunhos/esboços.
return 'user'
else
return '*'
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p