Module:Protection banner: Difference between revisions

From TEPwiki, Urth's Encyclopedia
Jump to navigation Jump to search
Content added Content deleted
(try fairly ugly hack for office protection)
(use the default mediawiki protection level names after all)
Line 3: Line 3:


local categories = {
local categories = {
['edit-semi-user-all-all'] = 'Wikipedia semi-protected user and user talk pages',
['edit-autoconfirmed-user-all-all'] = 'Wikipedia semi-protected user and user talk pages',
['edit-semi-project-all-all'] = 'Semi-protected project pages',
['edit-autoconfirmed-project-all-all'] = 'Semi-protected project pages',
['edit-semi-file-all-all'] = 'Semi-protected images',
['edit-autoconfirmed-file-all-all'] = 'Semi-protected images',
['edit-semi-template-all-all'] = 'Wikipedia semi-protected templates',
['edit-autoconfirmed-template-all-all'] = 'Wikipedia semi-protected templates',
['edit-semi-portal-all-all'] = 'Semi-protected portals',
['edit-autoconfirmed-portal-all-all'] = 'Semi-protected portals',
['edit-semi-talk-all-all'] = 'Semi-protected talk pages',
['edit-autoconfirmed-talk-all-all'] = 'Semi-protected talk pages',
['edit-semi-all-vandalism-all'] = 'Wikipedia pages semi-protected against vandalism',
['edit-autoconfirmed-all-vandalism-all'] = 'Wikipedia pages semi-protected against vandalism',
['edit-full-user-all-all'] = 'Wikipedia protected user and user talk pages',
['edit-sysop-user-all-all'] = 'Wikipedia protected user and user talk pages',
['edit-full-file-all-all'] = 'Protected images',
['edit-sysop-file-all-all'] = 'Protected images',
['edit-full-project-all-all'] = 'Protected project pages',
['edit-sysop-project-all-all'] = 'Protected project pages',
['edit-full-template-all-all'] = 'Wikipedia protected templates',
['edit-sysop-template-all-all'] = 'Wikipedia protected templates',
['edit-full-talk-all-all'] = 'Protected talk pages',
['edit-sysop-talk-all-all'] = 'Protected talk pages',
['edit-full-all-vandalism-all'] = 'Wikipedia pages protected against vandalism',
['edit-sysop-all-vandalism-all'] = 'Wikipedia pages protected against vandalism',
['edit-semi-all-dispute-all'] = 'Wikipedia pages semi-protected due to dispute',
['edit-autoconfirmed-all-dispute-all'] = 'Wikipedia pages semi-protected due to dispute',
['edit-full-all-dispute-all'] = 'Wikipedia pages protected due to dispute',
['edit-sysop-all-dispute-all'] = 'Wikipedia pages protected due to dispute',
['move-full-all-dispute-all'] = 'Wikipedia pages move-protected due to dispute',
['move-sysop-all-dispute-all'] = 'Wikipedia pages move-protected due to dispute',
['move-full-user-all-all'] = 'Wikipedia move-protected user and user talk pages',
['move-sysop-user-all-all'] = 'Wikipedia move-protected user and user talk pages',
['move-full-project-all-all'] = 'Wikipedia move-protected project pages',
['move-sysop-project-all-all'] = 'Wikipedia move-protected project pages',
['move-full-portal-all-all'] = 'Wikipedia move-protected portals',
['move-sysop-portal-all-all'] = 'Wikipedia move-protected portals',
['move-full-all-vandalism-all'] = 'Wikipedia pages move-protected due to vandalism',
['move-sysop-all-vandalism-all'] = 'Wikipedia pages move-protected due to vandalism',
['edit-semi-template-all-all'] = 'Wikipedia semi-protected templates',
['edit-autoconfirmed-template-all-all'] = 'Wikipedia semi-protected templates',
['move-full-template-all-all'] = 'Wikipedia move-protected templates',
['move-sysop-template-all-all'] = 'Wikipedia move-protected templates',
['edit-all-template-all-all'] = 'Wikipedia protected templates',
['edit-all-template-all-all'] = 'Wikipedia protected templates',
['move-full-portal-all-all'] = 'Wikipedia move-protected portals',
['move-sysop-portal-all-all'] = 'Wikipedia move-protected portals',
['edit-semi-all-sock-all'] = 'Wikipedia pages semi-protected from banned users',
['edit-autoconfirmed-all-sock-all'] = 'Wikipedia pages semi-protected from banned users',
['edit-full-all-sock-all'] = 'Wikipedia pages protected from banned users',
['edit-sysop-all-sock-all'] = 'Wikipedia pages protected from banned users',
['edit-semi-all-blp-temp'] = 'Wikipedia temporarily semi-protected biographies of living people',
['edit-autoconfirmed-all-blp-temp'] = 'Wikipedia temporarily semi-protected biographies of living people',
['edit-full-all-blp-temp'] = 'Wikipedia temporarily protected biographies of living people',
['edit-sysop-all-blp-temp'] = 'Wikipedia temporarily protected biographies of living people',
['edit-semi-all-blp-all'] = 'Wikipedia indefinitely semi-protected biographies of living people',
['edit-autoconfirmed-all-blp-all'] = 'Wikipedia indefinitely semi-protected biographies of living people',
['edit-full-all-blp-all'] = 'Wikipedia indefinitely protected biographies of living people',
['edit-sysop-all-blp-all'] = 'Wikipedia indefinitely protected biographies of living people',
['edit-semi-all-all-indef'] = 'Wikipedia indefinitely semi-protected pages',
['edit-autoconfirmed-all-all-indef'] = 'Wikipedia indefinitely semi-protected pages',
['move-full-talk-all-all'] = 'Wikipedia move-protected talk pages',
['move-sysop-talk-all-all'] = 'Wikipedia move-protected talk pages',
['move-full-all-all-indef'] = 'Wikipedia indefinitely move-protected pages',
['move-sysop-all-all-indef'] = 'Wikipedia indefinitely move-protected pages',
['edit-semi-all-all-all'] = 'Wikipedia semi-protected pages',
['edit-autoconfirmed-all-all-all'] = 'Wikipedia semi-protected pages',
['all-all-all-all-all'] = 'Wikipedia protected pages',
['all-all-all-all-all'] = 'Wikipedia protected pages',
['edit-semi-category-all-all'] = 'Wikipedia semi-protected categories',
['edit-autoconfirmed-category-all-all'] = 'Wikipedia semi-protected categories',
['edit-full-category-all-all'] = 'Wikipedia protected categories',
['edit-sysop-category-all-all'] = 'Wikipedia protected categories',
['move-full-all-all-all'] = 'Wikipedia move-protected pages',
['move-sysop-all-all-all'] = 'Wikipedia move-protected pages',
['all-all-all-office-all'] = 'Wikipedia Office-protected pages',
['all-all-all-office-all'] = 'Wikipedia Office-protected pages',
['pc-semi-all-all-all'] = 'Wikipedia pending changes protected pages (level 1)',
['pc-autoconfirmed-all-all-all'] = 'Wikipedia pending changes protected pages (level 1)',
['pc-reviewer-all-all-all'] = 'Wikipedia pending changes protected pages (level 2)',
['pc-reviewer-all-all-all'] = 'Wikipedia pending changes protected pages (level 2)',
}
}

Revision as of 01:26, 6 March 2014

Documentation for this module may be created at Module:Protection banner/doc

-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.

local categories = {
	['edit-autoconfirmed-user-all-all'] = 'Wikipedia semi-protected user and user talk pages',
	['edit-autoconfirmed-project-all-all'] = 'Semi-protected project pages',
	['edit-autoconfirmed-file-all-all'] = 'Semi-protected images',
	['edit-autoconfirmed-template-all-all'] = 'Wikipedia semi-protected templates',
	['edit-autoconfirmed-portal-all-all'] = 'Semi-protected portals',
	['edit-autoconfirmed-talk-all-all'] = 'Semi-protected talk pages',
	['edit-autoconfirmed-all-vandalism-all'] = 'Wikipedia pages semi-protected against vandalism',
	['edit-sysop-user-all-all'] = 'Wikipedia protected user and user talk pages',
	['edit-sysop-file-all-all'] = 'Protected images',
	['edit-sysop-project-all-all'] = 'Protected project pages',
	['edit-sysop-template-all-all'] = 'Wikipedia protected templates',
	['edit-sysop-talk-all-all'] = 'Protected talk pages',
	['edit-sysop-all-vandalism-all'] = 'Wikipedia pages protected against vandalism',
	['edit-autoconfirmed-all-dispute-all'] = 'Wikipedia pages semi-protected due to dispute',
	['edit-sysop-all-dispute-all'] = 'Wikipedia pages protected due to dispute',
	['move-sysop-all-dispute-all'] = 'Wikipedia pages move-protected due to dispute',
	['move-sysop-user-all-all'] = 'Wikipedia move-protected user and user talk pages',
	['move-sysop-project-all-all'] = 'Wikipedia move-protected project pages',
	['move-sysop-portal-all-all'] = 'Wikipedia move-protected portals',
	['move-sysop-all-vandalism-all'] = 'Wikipedia pages move-protected due to vandalism',
	['edit-autoconfirmed-template-all-all'] = 'Wikipedia semi-protected templates',
	['move-sysop-template-all-all'] = 'Wikipedia move-protected templates',
	['edit-all-template-all-all'] = 'Wikipedia protected templates',
	['move-sysop-portal-all-all'] = 'Wikipedia move-protected portals',
	['edit-autoconfirmed-all-sock-all'] = 'Wikipedia pages semi-protected from banned users',
	['edit-sysop-all-sock-all'] = 'Wikipedia pages protected from banned users',
	['edit-autoconfirmed-all-blp-temp'] = 'Wikipedia temporarily semi-protected biographies of living people',
	['edit-sysop-all-blp-temp'] = 'Wikipedia temporarily protected biographies of living people',
	['edit-autoconfirmed-all-blp-all'] = 'Wikipedia indefinitely semi-protected biographies of living people',
	['edit-sysop-all-blp-all'] = 'Wikipedia indefinitely protected biographies of living people',
	['edit-autoconfirmed-all-all-indef'] = 'Wikipedia indefinitely semi-protected pages',
	['move-sysop-talk-all-all'] = 'Wikipedia move-protected talk pages',
	['move-sysop-all-all-indef'] = 'Wikipedia indefinitely move-protected pages',
	['edit-autoconfirmed-all-all-all'] = 'Wikipedia semi-protected pages',
	['all-all-all-all-all'] = 'Wikipedia protected pages',
	['edit-autoconfirmed-category-all-all'] = 'Wikipedia semi-protected categories',
	['edit-sysop-category-all-all'] = 'Wikipedia protected categories',
	['move-sysop-all-all-all'] = 'Wikipedia move-protected pages',
	['all-all-all-office-all'] = 'Wikipedia Office-protected pages',
	['pc-autoconfirmed-all-all-all'] = 'Wikipedia pending changes protected pages (level 1)',
	['pc-reviewer-all-all-all'] = 'Wikipedia pending changes protected pages (level 2)',
}

local nskeys = {
	[2] = 'user',
	[3] = 'user',
	[4] = 'project',
	[6] = 'file',
	[10] = 'template',
	[12] = 'project',
	[14] = 'category',
	[100] = 'portal',
}

local error_categories = {
	incorrect = 'Wikipedia pages with incorrect protection templates',
	no_expiry = 'Wikipedia protected pages without expiry',
	create = 'Wikipedia pages tagged as create-protected',
	template = 'Wikipedia template-protected pages other than templates and modules'
}

local template_types = {
	vandalism = {
		namespaces = false, -- defaults to all namespaces
		editLevels = false, -- all edit protection levels
		moveLevels = false, -- all move protection levels
		createLevels = false, -- all create protection levels
		header = false,
		reason = 'due to [[Wikipedia:Vandalism|vandalism]]',
		icon_reason = 'due to vandalism',
	}
}

--------------------------------------------------------------------------------
-- Main functions
--------------------------------------------------------------------------------

local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')

local p = {}

function p.main(frame)
	-- Get data
	local args = getArgs(frame)
	local title = p.getTitle(args.page)
	local protType, protLevel = p.getProtectionStatus(title)
	local namespace = p.getNamespace(title)
	local expiry = p.getExpiry(args.expiry)
	local reason = p.getReason(args.reason)

	-- Sort categories and build a category link with the best match
	categories = p.sortCategories(categories, protType, protLevel, namespace, expiry, reason)
	local category = categories[1].name
	category = string.format('[[Category:%s]]', category)

	-- Find whether we are small or not and output a padlock or a banner as appropriate
	local isSmall = yesno(args.small, true)
	if isSmall then
		return p.exportPadlock()
	else
		return p.exportBanner()
	end
end

function p.parseNamespace(ns)
	-- The ns variable is the namespace number.
	if not ns or type(ns) ~= 'number' then
		return 'all'
	end
	local nskey = nskeys[ns]
	if not nskey and ns % 2 == 1 then
		nskey = 'talk'
	elseif not nskey then
		nskey = 'all'
	end
	return nskey
end

function p.getCategoryName(cats, protType, protLevel, namespace, reason, expiry)
	-- Preprocess parameters
	cats = cats or categories
	protType = protType or 'all'
	protLevel = protLevel or 'all'
	namespace = p.parseNamespace(namespace)
	reason = reason or 'all'
	if not expiry then
		expiry = 'all'
	elseif expiry ~= 'indef' then
		expiry = 'temp'
	end
	
	-- Define the key table and the order to test it in.
	-- This part is a little like playing regex golf - we have to make up a new
	-- rule for every idiosyncracy that was in the old template system.
	local keyTable = {protType, protLevel, namespace, reason, expiry}
	local attemptOrder = {
	--   type, level, ns, reason, expiry
		{true, true, true, true, true},     -- 1
		{true, true, true, true, false},    -- 2
		{true, true, false, true, true},    -- 3
		{true, true, true, false, true},    -- 4
		{true, true, false, true, false},   -- 5
		{true, true, true, false, false},   -- 6
		{true, true, false, false, true},   -- 7
		{true, true, false, false, false},  -- 8
		{true, false, true, false, false},  -- 9
		{true, false, false, false, false}, -- 10
		{false, false, false, false, false} -- 11
	}
	
	local reasonFirst = {
		vandalism = true,
		office = true
	}
	
	if reasonFirst[reason] then
		attemptOrder[3], attemptOrder[4] = attemptOrder[4], attemptOrder[3] 
		attemptOrder[5], attemptOrder[6] = attemptOrder[6], attemptOrder[5]
		table.insert(attemptOrder, 2, {false, false, false, true, false}) -- To deal with office-protection
	end
	
	-- Try successively generic matches until we run out of key combinations
	for i, t in ipairs(attemptOrder) do
		local key = {}
		for j, useKeyTable in ipairs(t) do
			if useKeyTable then
				key[j] = keyTable[j]
			else
				key[j] = 'all'
			end
		end
		key = table.concat(key, '-')
		mw.log(key) -- for debugging
		local attempt = cats[key]
		if attempt then
			return attempt
		end
	end
	error('No category match found; please define the category for key "all-all-all-all-all"')
end			

return p