Module:Protection banner: Difference between revisions

finish converting p.getCategoryName
(start converting the getCategoryName function)
(finish converting p.getCategoryName)
Line 224: Line 224:
local ProtectionCategory = Category:subclass('ProtectionCategory')
local ProtectionCategory = Category:subclass('ProtectionCategory')


function ProtectionCategory:setName(name, configObj, protectionStatusObj, namespace)
function ProtectionCategory:setName(
name,
configObj,
protectionStatusObj,
namespace
)
--[[
--[[
-- Sets the protection category. If a category name is not provided, this
-- Sets the protection category. If a category name is not provided, this
Line 231: Line 236:
-- reason for protection, and the expiry date.
-- reason for protection, and the expiry date.
--]]
--]]
local cats = configObj:getConfigTable('categories')
-- If a name was provided, use that.
if name then
Category.setName(self, name)
end
-- Get the namespace category key from the namespace number.
-- Get the namespace category key from the namespace number.
Line 253: Line 262:
--]]
--]]
local properties = {
local properties = {
expiry = {order = 1, keypos = 5, val = expiry},
expiry = {order = 1, keypos = 5, val = protectionStatusObj:getExpiry()},
namespace = {order = 2, keypos = 3, val = nskey},
namespace = {order = 2, keypos = 3, val = nskey},
reason = {order = 3, keypos = 4, val = reason},
reason = {order = 3, keypos = 4, val = protectionStatusObj:getReason()},
level = {order = 4, keypos = 2, val = level},
level = {order = 4, keypos = 2, val = protectionStatusObj:getLevel()},
action = {order = 5, keypos = 1, val = action}
action = {order = 5, keypos = 1, val = protectionStatusObj:getAction()}
}
}
   
   
--[[
--[[
-- Load the category order configuration for the reason specified.
-- Apply the category order configuration, if any. The configuration value
-- The configuration is stored in the categoryOrder field of each reason
-- will be a property string, e.g. 'reason', 'namespace', etc. The property
-- subtable of cfg.reasons. If the value is a table, then the order is the
-- corresponding to that string is tested last (i.e. it is the most
-- values specified in the table. If the value is a string, then the
-- property corresponding to that string is tested last (i.e. it is the most
-- important, because it keeps its specified value the longest) and the
-- important, because it keeps its specified value the longest) and the
-- other properties are tested in the canonical order. If the value is of
-- other properties are tested in the canonical order. If no configuration
-- any other type then the canonical order is used.
-- value is specified then the canonical order is used.
--]]
--]]
local reasonTable = reason and cfg.reasons[reason]
local categoryOrder = reasonTable and reasonTable.categoryOrder
local categoryOrderType = type(categoryOrder)
local configOrder = {}
local configOrder = {}
if categoryOrderType == 'table' then
do
local dupes = {}
local bannerConfig = configObj:getBannerConfig(protectionStatusObj)
for i = 1, 5 do
local categoryOrder = bannerConfig.categoryOrder
local propertiesKey = categoryOrder[i]
if not propertiesKey then
local msg = 'no entry found for key '
.. i
.. ' in the cfg.reasons.'
.. reason
.. '.categoryOrder table'
error(msg)
end
local property = properties[propertiesKey]
if not property then
local msg = 'invalid value "'
.. propertiesKey
.. '" detected in the cfg.reasons.'
.. reason
.. '.categoryOrder table'
error(msg)
end
if dupes[propertiesKey] then
local msg = 'duplicate values "'
.. propertiesKey
.. '" detected in the cfg.reasons.'
.. reason
.. '.categoryOrder table'
error(msg)
else
dupes[propertiesKey] = true
end
configOrder[i] = property
end
else
for propertiesKey, t in pairs(properties) do
for propertiesKey, t in pairs(properties) do
configOrder[t.order] = t
configOrder[t.order] = t
end
end
if categoryOrderType == 'string' then
if categoryOrder then
local property = properties[categoryOrder]
local property = properties[categoryOrder]
if not property then
if not property then
Line 321: Line 294:
error(msg)
error(msg)
end
end
toTableEnd(configOrder, property.order)
table.insert(configOrder, table.remove(configOrder, property.order))
end
end
end
end
Line 333: Line 306:
-- parameter.
-- parameter.
--]]
--]]
local active, inactive = {}, {}
local noActive, attemptOrder
for i, t in ipairs(configOrder) do
do
if t.val then
local active, inactive = {}, {}
active[#active + 1] = t
for i, t in ipairs(configOrder) do
else
if t.val then
inactive[#inactive + 1] = t
active[#active + 1] = t
else
inactive[#inactive + 1] = t
end
end
noActive = #active
attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
end
local noActive = #active
local attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
   
   
Line 379: Line 355:
-- pos field in the property table.
-- pos field in the property table.
--]]
--]]
local cats = configObj:getConfigTable('categories')
local cat
for i = 1, 2^noActive do
for i = 1, 2^noActive do
local key = {}
local key = {}
Line 397: Line 375:
local attempt = cats[key]
local attempt = cats[key]
if attempt then
if attempt then
return attempt
cat = attempt
break
end
end
end
end
error(
if cat then
'No category match found;'
Category.setName(self, cat)
.. ' please define the category for key "all-all-all-all-all"'
else
)
error(
'No category match found;'
.. ' please define the category for key "all-all-all-all-all"'
)
end
end
end