Módulo:Nível efetivo de proteção

Permanently protected module
Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]

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

  1. 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.
  2. do inglês C.S.S.cascading style sheets
  3. do inglês J.S.O.N.JavaScript object notation
  4. 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