Jump to content

Module:Effective protection level

Permanently protected module
From Wikipedia, the free encyclopedia

localp={}

-- 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.
functionp._main(action,pagename)
localtitle
iftype(pagename)=='table'andpagename.prefixedTextthen
title=pagename
elseifpagenamethen
title=mw.title.new(pagename)
else
title=mw.title.getCurrentTitle()
end
pagename=title.prefixedText
ifaction=='autoreview'then
locallevel=mw.ext.FlaggedRevs.getStabilitySettings(title)
level=levelandlevel.autoreview
iflevel=='review'then
return'reviewer'
elseiflevel~=''then
returnlevel
else
returnnil-- 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
elseifaction~='edit'andaction~='move'andaction~='create'andaction~='upload'andaction~='undelete'then
error('First parameter must be one of edit, move, create, upload, undelete, autoreview',2)
end
iftitle.namespace==8then-- MediaWiki namespace
iftitle.text:sub(-3)=='.js'ortitle.text:sub(-4)=='.css'ortitle.contentModel=='javascript'ortitle.contentModel=='css'then-- site JS or CSS page
return'interfaceadmin'
else-- any non-JS/CSS MediaWiki page
return'sysop'
end
elseiftitle.namespace==2andtitle.isSubpagethen
iftitle.contentModel=='javascript'ortitle.contentModel=='css'then-- user JS or CSS page
return'interfaceadmin'
elseiftitle.contentModel=='json'then-- user JSON page
return'sysop'
end
end
ifaction=='undelete'then
return'sysop'
end
locallevel=title.protectionLevels[action]andtitle.protectionLevels[action][1]
iflevel=='sysop'orlevel=='editprotected'then
return'sysop'
elseiftitle.cascadingProtection.restrictions[action]andtitle.cascadingProtection.restrictions[action][1]then-- used by a cascading-protected page
return'sysop'
elseiflevel=='templateeditor'then
return'templateeditor'
elseifaction=='move'then
localblacklistentry=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.
ifblacklistentryandnotblacklistentry.params.autoconfirmedthen
return'templateeditor'
elseiftitle.namespace==6then
return'filemover'
elseiflevel=='extendedconfirmed'then
return'extendedconfirmed'
else
return'autoconfirmed'
end
end
localblacklistentry=mw.ext.TitleBlacklist.test(action,pagename)
ifblacklistentrythen
ifnotblacklistentry.params.autoconfirmedthen
return'templateeditor'
elseiflevel=='extendedconfirmed'then
return'extendedconfirmed'
else
return'autoconfirmed'
end
elseiflevel=='editsemiprotected'then-- create-semiprotected pages return this for some reason
return'autoconfirmed'
elseiflevelthen
returnlevel
elseifaction=='upload'then
return'autoconfirmed'
elseifaction=='create'andtitle.namespace%2==0andtitle.namespace~=118then-- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts
iftitle.namespace==0then
return'autoconfirmed'-- Per [[WP:ACPERM]], you need to be autoconfirmed to create pages in mainspace
end
return'user'
else
return'*'
end
end

setmetatable(p,{__index=function(t,k)
returnfunction(frame)
returnt._main(k,frame.args[1])
end
end})

returnp