Módulo:Testes/Gkiyoshinishimoto/Effective protection level
Este módulo fornece uma maneira de recuperar o grupo necessário para executar uma determinada ação em uma página. Atualmente 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.)[a] 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.)[b] 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
[editar código-fonte]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
[editar código-fonte]Para carregar este módulo:
local effectiveProtectionLevel = require('Módulo:Testes/Gkiyoshinishimoto/Effective protection level')._main
A função aceita dois parâmetros. A primeira é uma sequência[c] 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[c] contendo o nome do grupo necessário para executar a ação especificada.
A partir de texto wiki
[editar código-fonte]Os parâmetros são os mesmos da chamada direta.
Predefinição:Teste/Gkiyoshinishimoto/Module link expanded
Ver também
[editar código-fonte]Notas
[editar código-fonte]A documentação acima é transcluída de Módulo:Testes/Gkiyoshinishimoto/Effective protection level/doc. (editar | histórico) Editores podem experimentar nas páginas de teste (criar | espelhar) e de exemplos para testes (criar) deste módulo. Subpáginas deste módulo. |
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 exibida 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