Module:Nível efetivo de proteção

    From TestWiki

    Documentation for this module may be created at Module:Nível efetivo de proteção/doc

    local p = {}
    
    -- Returns the permission required to perform a given action on a given title.
    -- If no title is specified, the title of the page being displayed is used.
    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 -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review
            end
        elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
            error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )
        end
        if title.namespace == 8 then -- MediaWiki namespace
            return 'sysop'
        elseif title.namespace == 2 and title.isSubpage and ( title.contentModel == 'javascript' or title.contentModel == 'css' ) then -- user JS or CSS page
            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 -- used by a cascading-protected page
            return 'sysop'
        elseif level == 'templateeditor' then
            return 'templateeditor'
        elseif action == 'move' then
            local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action 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 -- create-semiprotected pages return this for some reason
            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 -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts
            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