Module:Effective protection expiry/sandbox
![]() | This is the module sandbox page for Module:Effective protection expiry (diff). |
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
![]() | This Lua module is used on approximately 65,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
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", "upload", or "autoreview". 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, or pages which exist and are not protectedunknown
- for pages where the expiry is unknown, or pages which do not exist and are not protected
Note that if an existing 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 effectiveProtectionLevel = require('Module:Effective protection level/sandbox')._main
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
local _, rawExpiry = effectiveProtectionLevel(action, title)
if rawExpiry == 'infinity' then
return 'infinity'
elseif rawExpiry == nil then
-- a nil expiry gets returned for cascading-protected pages, since it's extra work to see their expiry, and not all uses of effective protection level need it. if we're called, we do need it, so find out what it is
local frame = mw.getCurrentFrame()
rawExpiry = 0
for _,v in title.cascadingProtection.sources do
local cascadingExpiry = frame:callParserFunction('PROTECTIONEXPIRY', action, v)
if cascadingExpiry == 'infinity' then
return 'infinity'
end
cascadingExpiry = tonumber(cascadingExpiry)
if rawExpiry < cascadingExpiry then
rawExpiry = cascadingExpiry
end
end
elseif rawExpiry == '' then
-- should never happen
mw.log(string.format('Module:Effective_protection_level returned a blank expiry for action %s and pagename %s', action, pagename))
return 'unknown'
end
local year = mw.ustring.sub( rawExpiry, 1, 4 )
local month = mw.ustring.sub( rawExpiry, 5, 6 )
local day = mw.ustring.sub( rawExpiry, 7, 8 )
return year .. '-' .. month .. '-' .. day
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p