مۆدیوول:Effective protection level

بەڵگەدارکردنی مۆدیوول
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 titleif type(pagename) == 'table' and pagename.prefixedText thentitle = pagenameelseif pagename thentitle = mw.title.new(pagename)elsetitle = mw.title.getCurrentTitle()endpagename = title.prefixedTextif action == 'autoreview' thenlocal level = mw.ext.FlaggedRevs.getStabilitySettings(title)level = level and level.autoreviewif level == 'review' thenreturn 'reviewer'elseif level ~= '' thenreturn levelelsereturn nil -- 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 reviewendelseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' thenerror( 'دەبێت یەکەم پارامەتر یەکێک لەمانە edit، move، create، upload، autoreview بێت.', 2 )endif title.namespace == 8 then -- MediaWiki namespaceif title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS pagereturn 'interfaceadmin'else -- any non-JS/CSS MediaWiki pagereturn 'sysop'endelseif title.namespace == 2 and title.isSubpage thenif title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS pagereturn 'interfaceadmin'elseif title.contentModel == 'json' then -- user JSON pagereturn 'sysop'endendif action == 'undelete' thenreturn 'sysop'endlocal level = title.protectionLevels[action] and title.protectionLevels[action][1]if level == 'sysop' or level == 'editprotected' thenreturn 'sysop'elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected pagereturn 'sysop'elseif level == 'templateeditor' thenreturn 'templateeditor'elseif action == 'move' thenlocal 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 thenreturn 'templateeditor'elseif title.namespace == 6 thenreturn 'filemover'elseif level == 'extendedconfirmed' thenreturn 'extendedconfirmed'elsereturn 'autoconfirmed'endendlocal blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)if blacklistentry thenif not blacklistentry.params.autoconfirmed thenreturn 'templateeditor'elseif level == 'extendedconfirmed' thenreturn 'extendedconfirmed'elsereturn 'autoconfirmed'endelseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reasonreturn 'autoconfirmed'elseif level thenreturn levelelseif action == 'upload' thenreturn '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 draftsreturn 'user'elsereturn '*'endendsetmetatable(p, { __index = function(t, k)return function(frame)return t._main(k, frame.args[1])endend })return p