Module:Protection banner: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
(allow specifying banner config by protection level as well as by action) |
(validate expiry and protection dates) |
||
Line 9: | Line 9: | ||
local yesno = require('Module:Yesno') |
local yesno = require('Module:Yesno') |
||
-- Lazily initialise modules we don't always need. |
-- Lazily initialise modules and objects we don't always need. |
||
local mArguments, mMessageBox |
local mArguments, mMessageBox, lang |
||
-------------------------------------------------------------------------------- |
|||
-- ProtectionStatus class |
|||
-------------------------------------------------------------------------------- |
|||
local ProtectionStatus = class('ProtectionStatus') |
|||
function ProtectionStatus:initialize(args, titleObj) |
|||
-- Set action |
|||
do |
|||
local actions = { |
|||
create = true, |
|||
edit = true, |
|||
move = true, |
|||
autoreview = true |
|||
} |
|||
if args.action and actions[args.action] then |
|||
self._action = args.action |
|||
else |
|||
self._action = 'edit' |
|||
end |
|||
end |
|||
-- Set level |
|||
do |
|||
local level = mProtectionLevel._main(self._action, titleObj) |
|||
if level == 'accountcreator' then |
|||
-- Lump titleblacklisted pages in with template-protected pages, |
|||
-- since templateeditors can do both. |
|||
level = 'templateeditor' |
|||
end |
|||
self._level = level or '*' |
|||
end |
|||
-- Set other params |
|||
self._reason = args.reason |
|||
self._expiry = args.expiry or 'indef' |
|||
self._protectionDate = args.date |
|||
end |
|||
function ProtectionStatus:getAction() |
|||
return self._action |
|||
end |
|||
function ProtectionStatus:getLevel() |
|||
return self._level |
|||
end |
|||
function ProtectionStatus:getReason() |
|||
return self._reason |
|||
end |
|||
function ProtectionStatus:getExpiry() |
|||
return self._expiry |
|||
end |
|||
function ProtectionStatus:getProtectionDate() |
|||
return self._protectionDate |
|||
end |
|||
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
||
Line 137: | Line 78: | ||
function Config:getMessage(key) |
function Config:getMessage(key) |
||
return self._msg[key] |
return self._msg[key] |
||
end |
|||
-------------------------------------------------------------------------------- |
|||
-- ProtectionStatus class |
|||
-------------------------------------------------------------------------------- |
|||
local ProtectionStatus = class('ProtectionStatus') |
|||
function ProtectionStatus:initialize(args, configObj, titleObj) |
|||
-- Set action |
|||
do |
|||
local actions = { |
|||
create = true, |
|||
edit = true, |
|||
move = true, |
|||
autoreview = true |
|||
} |
|||
if args.action and actions[args.action] then |
|||
self._action = args.action |
|||
else |
|||
self._action = 'edit' |
|||
end |
|||
end |
|||
-- Set level |
|||
do |
|||
local level = mProtectionLevel._main(self._action, titleObj) |
|||
if level == 'accountcreator' then |
|||
-- Lump titleblacklisted pages in with template-protected pages, |
|||
-- since templateeditors can do both. |
|||
level = 'templateeditor' |
|||
end |
|||
self._level = level or '*' |
|||
end |
|||
-- Validation function for the expiry and the protection date |
|||
local function validateDate(date, dateType) |
|||
lang = lang or mw.language.getContentLanguage() |
|||
local success, expiry = pcall(lang.formatDate, lang, 'U', args.expiry) |
|||
expiry = tonumber(expiry) |
|||
if success and expiry then |
|||
return expiry |
|||
else |
|||
return string.format( |
|||
'<strong class="error">Error: invalid %s ("%s")</strong>', |
|||
dateType, |
|||
tostring(args.expiry) |
|||
) |
|||
end |
|||
end |
|||
-- Set expiry |
|||
if args.expiry then |
|||
local indefStrings = configObj:getConfigTable('indefStrings') |
|||
if indefStrings[args.expiry] then |
|||
self._expiry = 'indef' |
|||
elseif type(args.expiry) == 'number' then |
|||
self._expiry = args.expiry |
|||
else |
|||
self._expiry = validateDate(args.expiry, 'expiry date') |
|||
end |
|||
end |
|||
-- Set other params |
|||
self._reason = args.reason |
|||
self._protectionDate = validateDate(args.date, 'protection date') |
|||
end |
|||
function ProtectionStatus:getAction() |
|||
return self._action |
|||
end |
|||
function ProtectionStatus:getLevel() |
|||
return self._level |
|||
end |
|||
function ProtectionStatus:getReason() |
|||
return self._reason |
|||
end |
|||
function ProtectionStatus:getExpiry() |
|||
return self._expiry |
|||
end |
|||
function ProtectionStatus:getProtectionDate() |
|||
return self._protectionDate |
|||
end |
end |
||
Line 273: | Line 300: | ||
-- parameter $5 |
-- parameter $5 |
||
local protectionDate = self._protectionStatusObj:getProtectionDate() |
local protectionDate = self._protectionStatusObj:getProtectionDate() |
||
if protectionDate then |
if type(protectionDate) == 'number' then |
||
local date = os.date('%e %B %Y', protectionDate) |
|||
local lang = mw.language.getContentLanguage() |
|||
date = date:gsub('^ ', '') -- The %e option replaces leading zeroes with spaces, but we don't want spaces. |
|||
local success, date = pcall( |
|||
return date |
|||
lang.formatDate, |
|||
else |
|||
lang, |
|||
return protectionDate |
|||
'j F Y', |
|||
protectionDate |
|||
) |
|||
if success and date then |
|||
return date |
|||
end |
|||
end |
end |
||
end |
end |
||
Line 827: | Line 849: | ||
-- Get data objects |
-- Get data objects |
||
local theProtectionStatus = ProtectionStatus:new(args, title) |
|||
local theConfig = Config:new() |
local theConfig = Config:new() |
||
local theProtectionStatus = ProtectionStatus:new(args, theConfig, title) |
|||
local ret = {} |
local ret = {} |