Saltar para o conteúdo

Módulo:Notificação projetos

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

Este módulo implementa a predefinição {{notificação projetos}}. É usado para enviar notificações para um Wikiprojeto ou outro grupo de utilizadores.

Uso com wikitexto[editar código-fonte]

Usualmente deve usar {{notificação projetos}} em vez de chamar este módulo directamente com #invoke. Contudo, se quiser, use com a sintaxe {{#invoke:Notificação projetos|main|nome do grupo}}. Veja a documentação da predefinição para detalhes sobre nomes de grupos.

Uso em módulos Lua[editar código-fonte]

Para usar este módulo em outros módulos Lua, primeiro carregue o módulo.

local mMassNotification = require('Módulo:Notificação projetos')

Pode depois gerar as ligações de notificação usando a função _main.

mMassNotification._main(groupName)

groupName é o nome do grupo, como um string, tal como explicado na documentação da predefinição.

-- This module sends out notifications to multiple users.

local MAX_USERS = 50 -- The Echo user limit as of September 2015.
local GROUP_PAGE_PATH = 'Módulo:Notificação projetos/grupos/'
local NO_NAME_ERROR = 'não foi especificado o nome do grupo'
local LOAD_ERROR = 'o grupo "[[$1|$2]]" não foi encontrado'
local MAX_USER_ERROR = 'foi tentado enviar notificações a mais do que $1 usuários'
local NO_USER_ERROR = 'não foi possível encontrar nomes de usuários em $1'
local INTRO_BLURB = 'A notificar todos os membros de $1'
    .. ' <small>([[Template:Notificação projetos|mais info]]'
    .. " '''·''' "
    .. '<span class="plainlinks">[$2 remover-se]</span>)</small>: '

local p = {}

local function message(msg, ...)
    return mw.message.newRawMessage(msg):params{...}:plain()
end

local function makeWikitextError(msg)
    return string.format(
        '<strong class="error">Error: %s.</strong>',
        msg
    )
end

function p.groupSubmodule(frame)
    -- Returns either the group link or the group name, depending on whether
    -- the submodule can be found. For use in edit notices.
    local groupName = frame.args[1]
    local success, data = pcall(mw.loadData, GROUP_PAGE_PATH .. groupName)
    if success and type(data) == 'table' and data.group_page then
        return string.format('[[%s|%s]]', data.group_page, groupName)
    else
        return groupName
    end
end

function p._main(groupName)
    -- Validate input.
    if type(groupName) ~= 'string' then
        return makeWikitextError(NO_NAME_ERROR)
    end

    local groupSubmodule = GROUP_PAGE_PATH .. groupName

    -- Load the group submodule and check for errors.
    local data
    do
        local success
        success, data = pcall(mw.loadData, groupSubmodule)
        if not success then
            return makeWikitextError(message(LOAD_ERROR, groupSubmodule, groupName))
        elseif type(data) ~= 'table' or not data[1] then -- # doesn't work with mw.loadData
            return makeWikitextError(message(NO_USER_ERROR, groupName))
        elseif data[MAX_USERS + 1] then -- # doesn't work with mw.loadData
            return makeWikitextError(message(MAX_USER_ERROR, tostring(MAX_USERS)))
        end
    end

    -- Make the intro blurb.
    local introBlurb
    do
        local optOutUrl = tostring(mw.uri.fullUrl(
            groupSubmodule,
            {action = 'edit'}
        ))
        local groupLink
        if data.group_page then
            groupLink = string.format('[[%s|%s]]', data.group_page, groupName)
        else
            groupLink = groupName
        end
        introBlurb = message(INTRO_BLURB, groupLink, optOutUrl)
    end

    -- Make the user links.
    local userLinks
    do
        local userNamespace = mw.site.namespaces[2].name
        local links = {}
        for i, username in ipairs(data) do
            username = tostring(username)
            links[i] = string.format(
                '[[%s:%s]]',
                userNamespace,
                username
            )
        end
        userLinks = string.format(
            '<span style="display: none;">(%s)</span>',
            table.concat(links, ', ')
        )
    end

    return introBlurb .. userLinks
end

function p.main(frame)
    local args = require('Module:Arguments').getArgs(frame, {
        wrappers = 'Template:Notificação projetos'
    })
    local groupName = args[1]
    return p._main(groupName)
end

return p