Editing Module:Effective protection level
From MINR.ORG WIKI
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 3: | Line 3: | ||
-- Returns the permission required to perform a given action on a given title. | -- 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. | -- If no title is specified, the title of the page being displayed is used. | ||
− | function p. | + | function p.main(action, pagename, frame) |
+ | if not frame then | ||
+ | frame = mw.getCurrentFrame() | ||
+ | end | ||
local title | local title | ||
− | if type(pagename) == 'table' | + | if type(pagename) == 'table' then |
title = pagename | title = pagename | ||
− | + | pagename = title.prefixedText | |
− | |||
else | else | ||
− | title = mw.title.getCurrentTitle() | + | title = mw.title.new(pagename) or mw.title.getCurrentTitle() |
end | end | ||
− | |||
if action == 'autoreview' then | if action == 'autoreview' then | ||
− | local level = | + | local level = frame:callParserFunction('PENDINGCHANGELEVEL', pagename) |
− | |||
if level == 'review' then | if level == 'review' then | ||
return 'reviewer' | return 'reviewer' | ||
Line 28: | Line 28: | ||
if title.namespace == 8 then -- MediaWiki namespace | if title.namespace == 8 then -- MediaWiki namespace | ||
return 'sysop' | return 'sysop' | ||
− | elseif title.namespace == 2 and | + | elseif title.namespace == 2 and ( mw.ustring.find( pagename, '/.*%.js$') or mw.ustring.find( pagename, '/.*%.css$') ) then -- user .js or .css page |
return 'sysop' | 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' | return 'templateeditor' | ||
− | elseif | + | elseif action == 'move' then |
− | return ' | + | 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 | else | ||
− | return 'autoconfirmed' | + | 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 | end | ||
end | end | ||
− | + | -- Make the protection function usable from wikitext rather than just other lua modules | |
− | + | function p.p(frame) | |
− | + | local args = frame.args | |
− | + | local pargs = frame:getParent().args | |
− | end | + | return p.main(args.action or args[1] or pargs.action or pargs[1], args.title or args[2] or pargs.title or pargs[2], frame) |
+ | end | ||
return p | return p |