Permanently protected module
From Wikipedia, the free encyclopedia


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( 'First parameter must be one of 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.protectionLevelsaction and title.protectionLevelsaction][1

	if level == 'sysop' or level == 'editprotected' then

		return 'sysop'

	elseif title.cascadingProtection.restrictionsaction and title.cascadingProtection.restrictionsaction][1 then -- used by a cascading-protected page

		return 'sysop'

	elseif level == 'templateeditor' then

		return 'templateeditor'

	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 == '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 == '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

		if title.namespace == 0 then

			return 'autoconfirmed' -- Per [[WP:ACPERM]], you need to be autoconfirmed to create pages in mainspace

		end

		return 'user'

	else

		return '*'

	end

end



setmetatable(p, { __index = function(t, k)

	return function(frame)

		return t._main(k, frame.args1])

	end

end })



return p
Permanently protected module
From Wikipedia, the free encyclopedia


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( 'First parameter must be one of 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.protectionLevelsaction and title.protectionLevelsaction][1

	if level == 'sysop' or level == 'editprotected' then

		return 'sysop'

	elseif title.cascadingProtection.restrictionsaction and title.cascadingProtection.restrictionsaction][1 then -- used by a cascading-protected page

		return 'sysop'

	elseif level == 'templateeditor' then

		return 'templateeditor'

	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 == '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 == '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

		if title.namespace == 0 then

			return 'autoconfirmed' -- Per [[WP:ACPERM]], you need to be autoconfirmed to create pages in mainspace

		end

		return 'user'

	else

		return '*'

	end

end



setmetatable(p, { __index = function(t, k)

	return function(frame)

		return t._main(k, frame.args1])

	end

end })



return p

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook