Module:Effective protection level: Difference between revisions

    From Nonbinary Wiki
    (Use new protection retrieval, and prepare for when titleblacklist works here)
    (enable titleblacklist checks)
    Line 28: Line 28:
    return 'templateeditor'
    return 'templateeditor'
    elseif action == 'move' then
    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.
    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
    if blacklistentry and not blacklistentry.params.autoconfirmed then
    return 'accountcreator'
    return 'accountcreator'
    else]]if title.namespace == 6 then
    elseif title.namespace == 6 then
    return 'filemover'
    return 'filemover'
    else
    else
    Line 37: Line 37:
    end
    end
    else
    else
    --[[local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
    local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
    if blacklistentry then
    if blacklistentry then
    return blacklistentry.params.autoconfirmed and 'autoconfirmed' or 'accountcreator'
    return blacklistentry.params.autoconfirmed and 'autoconfirmed' or 'accountcreator'
    else]]if level then
    elseif level then
    return level
    return level
    elseif action == 'upload' then
    elseif action == 'upload' then

    Revision as of 01:12, 7 February 2014

    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 frame = mw.getCurrentFrame()
    	local title
    	if type(pagename) == 'table' then
    		title = pagename
    		pagename = title.prefixedText
    	else
    		title = mw.title.new(pagename) or mw.title.getCurrentTitle()
    	end
    	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
    		return 'sysop'
    	elseif title.namespace == 2 and ( mw.ustring.find( pagename, '/.*%.js$') or mw.ustring.find( pagename, '/.*%.css$') ) then -- user .js or .css page
    		return 'sysop'
    	else
    		local level = title.protectionLevels[action] and title.protectionLevels[action][1]
    		if level == 'sysop' then
    			return 'sysop'
    		elseif frame:callParserFunction('CASCADINGSOURCES', pagename) ~= '' 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 'accountcreator'
    			elseif title.namespace == 6 then
    				return 'filemover'
    			else
    				return 'autoconfirmed'
    			end
    		else
    			local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
    			if blacklistentry then
    				return blacklistentry.params.autoconfirmed and 'autoconfirmed' or 'accountcreator'
    			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
    	end
    end
    
    -- Make this usable from wikitext rather than just other lua modules
    function p.p(frame)
    	local parent = frame:getParent()
    	return p.main(parent.args.action or parent.args[1], parent.args.title or parent.args[2])
    end
    
    return p