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) |
+ | local frame = mw.getCurrentFrame() | ||
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 ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then | |
− | if | + | error( 'First parameter must be one of edit, move, create, upload', 2 ) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | error( 'First parameter must be one of edit, move, create, upload | ||
end | end | ||
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 = frame:callParserFunction('PROTECTIONLEVEL', action, pagename) | |
− | + | if level == 'sysop' then | |
− | + | return 'sysop' | |
− | + | elseif frame:callParserFunction('CASCADINGSOURCES', pagename) ~= '' then -- used by a cascading-protected page | |
− | + | return 'sysop' | |
− | + | elseif title.namespace == 6 and action == 'move' then -- Special permission is required to move files. Note this breaks the hierarchy, because both templateeditor and filemover are required to move template-protected files. This isn't a real concern currently, since template protection shouldn't be applied to files. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
return 'filemover' | return 'filemover' | ||
− | elseif level | + | elseif level ~= '' then |
− | return ' | + | return level |
− | + | -- If we get this far, the page is unprotected. Figure out what group is needed to perform the action they're trying to do normally, and return that. | |
+ | elseif action == 'upload' or action == 'move' then | ||
return 'autoconfirmed' | 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' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | return ' | ||
else | else | ||
− | return ' | + | return '*' |
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
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 | + | end |
return p | return p |