Difference between revisions of "Module:Effective protection level"
Module:Effective protection level (view source)
Revision as of 14:26, 25 April 2020
, 14:26, 25 April 2020Reverted edits by 2806:2F0:51E1:9FE9:D4EC:D0C2:C56:2DB9 (talk) to last version by Pppery
>Jackmcbarn (Use new protection retrieval, and prepare for when titleblacklist works here) |
>Tegel m (Reverted edits by 2806:2F0:51E1:9FE9:D4EC:D0C2:C56:2DB9 (talk) to last version by Pppery) |
||
| (22 intermediate revisions by 7 users not shown) | |||
| 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 title | local title | ||
if type(pagename) == 'table' then | if type(pagename) == 'table' and pagename.prefixedText then | ||
title = pagename | title = pagename | ||
elseif pagename then | |||
title = mw.title.new(pagename) | |||
else | else | ||
title = | title = mw.title.getCurrentTitle() | ||
end | end | ||
pagename = title.prefixedText | |||
if action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then | 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 ) | error( 'First parameter must be one of edit, move, create, upload', 2 ) | ||
end | end | ||
if title.namespace == 8 then -- MediaWiki namespace | 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' | return 'sysop' | ||
elseif title. | elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page | ||
return 'sysop' | return 'sysop' | ||
elseif action == 'move' then | |||
local | 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 | if blacklistentry and not blacklistentry.params.autoconfirmed then | ||
return 'sysop' | return 'sysop' | ||
elseif | elseif title.namespace == 6 then | ||
return 'sysop' | return 'sysop' | ||
else | else | ||
return 'autoconfirmed' | |||
end | 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 | ||
end | end | ||
setmetatable(p, { __index = function(t, k) | |||
function | return function(frame) | ||
return t._main(k, frame.args[1]) | |||
end | |||
end | end }) | ||
return p | return p | ||