Módulo:Usuário

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

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 = 
}}
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]

Notas

  1. 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 e sysop-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 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 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 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