Bước tới nội dung

Mô đun:Effective protection level/sandbox

Bách khoa toàn thư mở Wikipedia

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 title	if type(pagename) == 'table' and pagename.prefixedText then		title = pagename	elseif pagename then		title = mw.title.new(pagename)	else		title = mw.title.getCurrentTitle()	end	pagename = title.prefixedText	if action == 'autoreview' then		local level = mw.ext.FlaggedRevs.getStabilitySettings(title)		level = level and level.autoreview		if level == 'review' then			return 'reviewer'		elseif level ~= '' then			return level		else			return 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 review		end	elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then		error( 'Tham số đầu tiên phải là một trong tham số edit, move, create, upload, undelete, autoreview', 2 )	end	if title.namespace == 8 then -- MediaWiki namespace		if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or 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	if action == 'undelete' then		return 'sysop'	end	local level = title.protectionLevels[action] and title.protectionLevels[action][1]	if level == 'sysop' or level == 'editprotected' then		return 'sysop'	elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page		return 'sysop'	elseif level == 'templateeditor' then		return 'templateeditor'	elseif level == 'editautopatrolprotected' then		return 'editautopatrolprotected'	elseif action == 'move' then		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 'templateeditor'		elseif title.namespace == 6 then			return 'filemover'		elseif level == 'editautopatrolprotected' then			return 'editautopatrolprotected'		elseif level == 'extendedconfirmed' then			return 'extendedconfirmed'		else			return 'autoconfirmed'		end	end	local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)	if blacklistentry then		if not blacklistentry.params.autoconfirmed then			return 'templateeditor'		elseif level == 'editautopatrolprotected' then			return 'editautopatrolprotected'		elseif level == 'extendedconfirmed' then			return 'extendedconfirmed'		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 '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 '*'	endendsetmetatable(p, { __index = function(t, k)	return function(frame)		return t._main(k, frame.args[1])	endend })return p