Módulo:Usuário
Aspeto
Este módulo é usado em aproximadamente 11 300 páginas. (Ver Wikipedia:Predefinições em alto risco) Para evitar sobrecargas desnecessárias ao servidor e outros transtornos, quaisquer mudanças devem ser previamente testadas, seja na subpágina de testes deste módulo, na subpágina de testes de módulos (ou ainda em sua subpágina de testes). Por favor, sempre considere expor eventuais mudanças na página de discussão, antes de implementá-las. |
Descrição
Esse módulo é utilizado para gerar um link para a página de usuário e outros links relacionados à conta.
A princípio, ela não deve ser utilizada diretamente. Utilize-a através das predefinições {{Usuário}}, {{Usuário1}}, {{Usuário2}} etc.
Uso
Para utilizar esse módulo é necessário informar apenas o parâmetro usuário. Os demais parâmetros são opcionais.
Quando um dos parâmetros opcionais é informado, o texto padrão para eles é utilizado. Se o parâmetro é informado, mas nenhum valor é associado a ele, o link não é exibido.
{{#invoke:Usuário|link | usuário = | apelido = | separador = | prefixo = | sufixo = | discussão = | contribuições = | contribuições globais = | contribuições eliminadas = | número de edições = | registros = | registros de bloqueio = | registros de movimento = | bloquear = | fantoches confirmados = | fantoches suspeitos = }}
Parâmetro | Descrição | Link |
---|---|---|
usuário | (obrigatório) Nome da conta do usuário. |
[[User:???|???]] |
apelido | (opcional) Apelido do usuário (nome que utiliza para se identificar, que pode ser diferente do nome da conta). Se omitido, o valor passado ao parâmetro "usuário" é utilizado como apelido. |
[[User:???|???]] |
separador | (opcional. padrão = " · ") Texto a ser utilizado para separar os links (para inserir um espaço simples, utilize  , ou  ). |
|
prefixo | (opcional. padrão = "(") Texto a ser inserido após o nome do usuário e antes do primeiro link. |
|
sufixo | (opcional. padrão = ")") Texto a ser após o último link. |
|
discussão | (opcional. padrão = "discussão") Texto a ser utilizado no link para a página de discussão do(a) usuário(a). |
|
contribuições | (opcional. padrão = "contribuições") Texto a ser utilizado no link para a página que lista as contribuições do(a) usuário(a). |
Special:Contributions/??? |
contribuições globais | (opcional. padrão = "contribuições globais") Texto a ser utilizado no link para a página de contribuições globais do(a) usuário(a). |
Special:CentralAuth/??? |
contribuições eliminadas | (opcional. padrão = "contribuições eliminadas") Texto a ser utilizado no link para a página que lista as contribuições eliminadas do(a) usuário(a). |
Special:DeletedContributions/???[nota 1] |
número de edições | (opcional. padrão = "número de edições") Texto a ser utilizado no link para o relatório de edições do(a) usuário(a). O link gerado para esse link é obtido através da predefinição {{EstatísticasUsuário}}, que atualmente produz: //xtools.wmflabs.org/ec/pt.wikipedia.org/?uselang=pt??? |
{{EstatísticasUsuário|???}} |
registros | (opcional. padrão = "registros") Texto a ser utilizado no link para a página que lista todos os registros públicos do usuário (bloqueios, moções etc.) |
Special:Log/??? |
registros de bloqueio | (opcional. padrão = "registros de bloqueio") Texto a ser utilizado no link para a página que lista o histórico de bloqueios do(a) usuário(a). |
Special:Log/??? (type=block) |
registros de movimento | (opcional. padrão = "registros de movimento") Texto a ser utilizado no link para a página que lista as moções feitas pelo usuário. |
Special:Log/??? (type=move) |
bloquear | (opcional. padrão = "bloquear") Texto a ser utilizado no link para a página que permite bloquear o usuário. |
Special:Block/???[nota 1] |
fantoches suspeitos | (opcional. padrão = "fantoches suspeitos") Texto a ser utilizado no link para a categoria de fantoches suspeitos do usuário. |
[[:Categoria:!Fantoches suspeitos de ???]] |
fantoches confirmados | (opcional. padrão = "fantoches confirmados") Texto a ser utilizado no link para a categoria de fantoches confirmados do usuário. |
[[:Categoria:!Fantoches de ???]] |
Notas
- ↑ a b Os links para a página de registro de edições eliminadas e para a página de bloqueio apenas são exibidos se o usuário logado tiver permissão para ver o conteúdo (Reversor, Eliminador ou Administrador). No caso da página de bloqueio, ela apenas é exibida para reversores se o usuário for um IP. Tais restrições são feitas através das classes CSS
rollbacker-show
,eliminator-show
esysop-show
definidas no MediaWiki:Common.css. A detecção de usuários IPs é feita através de regex imbutido no código desse Módulo.
Ver também
local p = {}
function p.link(frame)
local usuario = frame.args['usuário'] or ''
local apelido = frame.args['apelido'] or ''
local separador = frame.args['separador'] or ' · '
local prefixo = frame.args['prefixo'] or '('
local sufixo = frame.args['sufixo'] or ')'
if apelido == '' then apelido = usuario end
-- ​ é o ZERO WIDTH SPACE, e é um workaround para um bug que
-- eventualmente remove os espaços no começo e no final da string
-- Sem ele o código produz algumas formatações erradas. Não tirar.
separador = '​' .. separador
-- Quando esse script foi feito, mw.language não estava disponível no Scribunto
---- local sexo = mw.language:gender(usuario, 'o', 'a', 'o(a)')
-- utilizada a Magic Word {{GENDER|..}}
local sexo = frame:callParserFunction( 'gender', usuario, 'o', 'a', 'o(a)' )
local discussao = frame.args['discussão' ] or "discussão"
local contribuicoes = frame.args['contribuições' ] or "contribuições"
local contribuicoes_globais = frame.args['contribuições globais' ] or "contribuições globais"
local contribuicoes_eliminadas = frame.args['contribuições eliminadas'] or "contribuições eliminadas"
local numero_edicoes = frame.args['número de edições' ] or "número de edições"
local registros = frame.args['registros' ] or "registros"
local registros_usuario = frame.args['registros do usuário' ] or "registros d" .. sexo .. " usuári" .. sexo
local registros_bloqueio = frame.args['registros de bloqueio' ] or "registros de bloqueio"
local registros_movimento = frame.args['registros de movimento' ] or "registros de movimento"
local registros_filtros = frame.args['registros dos filtros' ] or "registros dos filtros"
local bloquear = frame.args['bloquear' ] or "bloquear"
local fantoches_confirmados = frame.args['fantoches confirmados' ] or 'fantoches confirmados'
local fantoches_suspeitos = frame.args['fantoches suspeitos' ] or 'fantoches suspeitos'
local discussao_alt = "Página de discussão d" .. sexo .. " usuári" .. sexo
local contribuicoes_alt = "Contribuições d" .. sexo .. " usuári" .. sexo
local contribuicoes_globais_alt = "Contribuições globais d" .. sexo .. " usuári" .. sexo
local contribuicoes_eliminadas_alt = "Contribuições eliminadas"
local numero_edicoes_alt = "Relatório de edições d" .. sexo .. " usuári" .. sexo
local registros_alt = "Registros públicos d" .. sexo .. " usuári" .. sexo
local registros_usuario_alt = "Registros que afetam " .. sexo .. " usuári" .. sexo
local registros_bloqueio_alt = "Registros de bloqueio"
local registros_movimento_alt = "Registros de movimentação de páginas"
local registros_filtros_alt = "Registros dos filtros de edição"
local bloquear_alt = "Bloquear usuári" .. sexo
local fantoches_confirmados_alt = "Fantoches confirmados d" .. sexo .. " usuári" .. sexo
local fantoches_suspeitos_alt = "Fantoches suspeitos d" .. sexo .. " usuári" .. sexo
local usuarioURL = frame:callParserFunction('urlencode', usuario, 'QUERY')
-- recupera link das estatísticas do usuário pela página [[Predefinição:EstatísticasUsuário]]
local numero_edicoes_link = frame:expandTemplate{ title = 'EstatísticasUsuário', args = { usuario } }
-- outros links que não podem ser informados através de Wikilinks
local registros_usuario_link = frame:callParserFunction('fullurl', 'Special:Log', 'page=User:' .. usuarioURL)
local registros_bloqueio_link = frame:callParserFunction('fullurl', 'Special:Log', 'type=block&page=User:' .. usuarioURL)
local registros_movimento_link = frame:callParserFunction('fullurl', 'Special:Log', 'type=move&user=' .. usuarioURL)
local registros_filtros_link = frame:callParserFunction('fullurl', 'Special:AbuseLog', 'wpSearchUser=' .. usuarioURL)
local txt = ''
if discussao ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. discussao_alt .. '">[[User talk:' .. usuario .. '|' .. discussao .. ']]</span>'
end
if contribuicoes ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. contribuicoes_alt .. '">[[Special:Contributions/' .. usuario .. '|' .. contribuicoes .. ']]</span>'
end
if contribuicoes_globais ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. contribuicoes_globais_alt .. '">[[Special:CentralAuth/' .. usuario .. '|' .. contribuicoes_globais .. ']]</span>'
end
if contribuicoes_eliminadas ~= "" then
txt = txt .. '<span class="sysop-show eliminator-show">' .. (txt ~= '' and separador or '')
txt = txt .. '<span title="' .. contribuicoes_eliminadas_alt .. '">[[Special:DeletedContributions/' .. usuario .. '|' .. contribuicoes_eliminadas .. ']]</span>'
txt = txt .. '</span>'
end
if numero_edicoes ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. numero_edicoes_alt .. '">[' .. numero_edicoes_link .. ' ' .. numero_edicoes .. ']</span>'
end
if registros ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. registros_alt .. '">[[Special:Log/' .. usuario .. '|' .. registros .. ']]</span>'
end
if registros_usuario ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. registros_usuario_alt .. '">[' .. registros_usuario_link .. ' ' .. registros_usuario .. ']</span>'
end
if registros_bloqueio ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. registros_bloqueio_alt .. '">[' .. registros_bloqueio_link .. ' ' .. registros_bloqueio .. ']</span>'
end
if registros_movimento ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. registros_movimento_alt .. '">[' .. registros_movimento_link .. ' ' .. registros_movimento .. ']</span>'
end
if registros_filtros ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. registros_filtros_alt .. '">[' .. registros_filtros_link .. ' ' .. registros_filtros .. ']</span>'
end
if bloquear ~= "" then
if isIP(usuario) then
txt = txt .. '<span class="sysop-show rollbacker-show">' .. (txt ~= '' and separador or '')
else
txt = txt .. '<span class="sysop-show">' .. (txt ~= '' and separador or '')
end
txt = txt .. '<span title="' .. bloquear_alt .. '">[[Special:Block/' .. usuario .. '|' .. bloquear .. ']]</span>'
txt = txt .. '</span>'
end
if fantoches_confirmados ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. fantoches_confirmados_alt .. '">[[:Categoria:!Fantoches de ' .. usuario .. '|' .. fantoches_confirmados .. ']]</span>'
end
if fantoches_suspeitos ~= "" then
if txt ~= '' then txt = txt .. separador end
txt = txt .. '<span title="' .. fantoches_suspeitos_alt .. '">[[:Categoria:!Fantoches suspeitos de ' .. usuario .. '|' .. fantoches_suspeitos .. ']]</span>'
end
if txt ~= '' then
txt = ' ' .. prefixo .. txt .. sufixo
end
txt = '<span class="plainlinks">[[User:' .. usuario .. '|' .. apelido .. ']]' .. txt .. '</span>'
return txt
end
function isIP(usuario)
return GetIPType(usuario) ~= 0
end
-- code from http://stackoverflow.com/questions/10975935/lua-function-check-if-ipv4-or-ipv6-or-string
function GetIPType(ip)
local R = {NOT_IP = 0, IPV4 = 1, IPV6 = 2}
if type(ip) ~= "string" then return R.NOT_IP end
-- check for format 1.11.111.111 for ipv4
local chunks = {ip:match("(%d+)%.(%d+)%.(%d+)%.(%d+)")}
if #chunks == 4 then
for _,v in pairs(chunks) do
if tonumber(v) > 255 then return R.STRING end
end
return R.IPV4
end
-- check for ipv6 format, should be 8 'chunks' of numbers/letters
-- without trailing chars
local chunks = {ip:match(("([a-fA-F0-9]*):"):rep(8):gsub(":$","$"))}
if #chunks == 8 then
for _,v in pairs(chunks) do
if #v > 0 and tonumber(v, 16) > 65535 then return R.STRING end
end
return R.IPV6
end
return R.NOT_IP
end
return p