×
Create a new article
Write your page title here:
We currently have 223 articles on Farthest Frontier. Type your article name above or create one of the articles listed here!



    Farthest Frontier

    Module:Effective protection level

    Documentation for this module may be created at Module:Effective protection level/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 ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
    		error( 'First parameter must be one of edit, move, create, upload', 2 )
    	end
    	if title.namespace == 8 then -- MediaWiki namespace
    		if title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page
    			return 'interfaceadmin'
    		else -- any non-JS/CSS MediaWiki page
    			return 'sysop'
    		end
    	elseif title.namespace == 2 and title.isSubpage then
    		if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page
    			return 'interfaceadmin'
    		elseif title.contentModel == 'json' then -- user JSON page
    			return 'sysop'
    		end
    	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 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 'sysop'
    		elseif title.namespace == 6 then
    			return 'sysop'
    		else
    			return 'autoconfirmed'
    		end
    	end
    	local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
    	if blacklistentry then
    		if not blacklistentry.params.autoconfirmed then
    			return 'sysop'
    		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 'uploader'
    	else
    		return '*'
    	end
    end
    
    setmetatable(p, { __index = function(t, k)
    	return function(frame)
    		return t._main(k, frame.args[1])
    	end
    end })
    
    return p
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.