Difference between revisions of "Module:Effective protection expiry"

From Northumberland Climbing
Jump to navigation Jump to search
module>Hasley
m (Protected "Module:Effective protection expiry": Highly visible page or template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)))
m (1 revision imported)
Line 13: Line 13:
 
end
 
end
 
pagename = title.prefixedText
 
pagename = title.prefixedText
if action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
+
if action == 'autoreview' then
error( 'First parameter must be one of edit, move, create, upload', 2 )
+
local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title)
 +
return stabilitySettings and stabilitySettings.expiry or 'unknown'
 +
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
 +
error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )
 
end
 
end
 
local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)
 
local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)
Line 22: Line 25:
 
return 'unknown'
 
return 'unknown'
 
else
 
else
local year = mw.ustring.sub( rawExpiry, 1, 4 )
+
local year, month, day, hour, minute, second = rawExpiry:match(
local month = mw.ustring.sub( rawExpiry, 5, 6 )
+
'^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$'
local day = mw.ustring.sub( rawExpiry, 7, 8 )
+
)
return year .. '-' .. month .. '-' .. day
+
if year then
 +
return string.format(
 +
'%s-%s-%sT%s:%s:%s',
 +
year, month, day, hour, minute, second
 +
)
 +
else
 +
error('internal error in Module:Effective protection expiry; malformed expiry timestamp')
 +
end
 
end
 
end
 
end
 
end

Revision as of 10:38, 20 July 2020

This module provides a way to retrieve the expiry of a restriction over a given action on a page.

Usage

This module will use up to 1 expensive parser function call each time it is ran. It will not use any if Module:Effective protection level was already called.

From other modules

To load this module:

local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main

The function accepts two parameters. The first is a string containing the action to check, which must be one of "edit", "create", "move", or "upload". The second is optional, and can either be the name of the page to check, or a title returned from the mw.title functions. If the second parameter is omitted, the page being displayed is the one checked against.

The return value is either a date string in YY-MM-DDThh:mm:ss format, or one of the following strings:

  • infinity - for pages protected indefinitely
  • unknown - for pages which are not protected or where the expiry is unknown

Note that if the page is not protected for the requested action, this will return 'infinity'. You need to check separately with Module:Effective protection level.

From wikitext

The parameters are the same as when it is called directly.

{{#invoke:Effective protection expiry|action|title}}

See also


local p = {}

-- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known.
-- 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 stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title)
		return stabilitySettings and stabilitySettings.expiry or 'unknown'
	elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
		error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )
	end
	local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)
	if rawExpiry == 'infinity' then
		return 'infinity'
	elseif rawExpiry == '' then
		return 'unknown'
	else
		local year, month, day, hour, minute, second = rawExpiry:match(
			'^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$'
		)
		if year then
			return string.format(
				'%s-%s-%sT%s:%s:%s',
				year, month, day, hour, minute, second
			)
		else
			error('internal error in Module:Effective protection expiry; malformed expiry timestamp')
		end
	end
end

setmetatable(p, { __index = function(t, k)
	return function(frame)
		return t._main(k, frame.args[1])
	end
end })

return p