Module:User group rights
Jump to navigation
Jump to search
Documentation
This template has no documentation. If you know how to use this template, please add some.
[purge]
local p = {}
local i18n = {
user_rights = 'User rights',
extension_ns = 'Extension',
non_default_ext = 'From non-default extensions',
groups = 'Groups',
addgroups = '* Can add: ',
rmvgroups = '* Can remove: ',
middlesep = ', ',
lastsep= ' and '
}
function p.removeLinks(message)
local cleanmsg = mw.text.trim(string.gsub(message,'%[%[[^%|%]]-%|([^%|%]]-)%]%]','%1'),'%p')
return cleanmsg
end
function p.rightsSort(t1, t2)
local l1 = p.removeLinks(mw.message.new('right-' .. t1['right']):inLanguage(mw.getContentLanguage()):plain())
local l2 = p.removeLinks(mw.message.new('right-' .. t2['right']):inLanguage(mw.getContentLanguage()):plain())
if l1 < l2 then
return true
end
return false
end
function p.findIndex(et,ext)
for i,v in ipairs(et) do
if v.extName == ext then
return i
end
end
return -1
end
function p.extensionSort(t1,t2)
if t1['extName'] < t2['extName'] then
return true
end
return false
end
function p.main(frame)
local rights = mw.loadData('Module:User_group_rights/data')
local group = frame:getParent().args[1]
local grouprights = {}
local text = '<h2>' .. i18n['user_rights'] .. '</h2>\n'
--get the rights in the selected group
for i, right in ipairs(rights) do
for i2, g in ipairs(right['groups']) do
if g == group then
table.insert(grouprights, right)
end
end
end
--now we sort the rights by the localized right description
table.sort(grouprights,p.rightsSort)
local extensionrights = {}
--and now process default rights
for i, right in ipairs(grouprights) do
if right['extension'] == nil then
text = text .. '* ' .. frame:preprocess(mw.message.new('right-' .. right['right']):inLanguage(mw.getContentLanguage()):plain()) .. ' <code>(' .. right['right'] .. ')</code>\n'
else
local idx = p.findIndex(extensionrights, right['extension'])
if idx == -1 then
table.insert(extensionrights,{ extName = right['extension'], rights = {right} })
else
table.insert(extensionrights[idx]['rights'], right)
end
end
end
table.sort(extensionrights,p.extensionSort)
local exttext = ''
--and extension rights
for i, extrights in ipairs(extensionrights) do
local extension = extrights['extName']
local rights = extrights['rights']
exttext = exttext .. '\n<h4>[[' .. i18n['extension_ns'] .. ':'..extension..'|'..extension..']]</h4>\n'
for i, right in ipairs(rights) do
exttext = exttext .. '\n* ' .. frame:preprocess(mw.message.new('right-' .. right['right']):inLanguage(mw.getContentLanguage()):plain()) .. ' <code>(' .. right['right'] .. ')</code>'
end
end
if exttext > '' then
text = text .. '<h3>' .. i18n['non_default_ext'] .. '</h3>\n' .. exttext
end
-- prepare group tables
local addgroups = {}
local removegroups = {}
local groupdata = mw.loadData('Module:User group rights/groupdata')
for i, tgroup in ipairs(groupdata) do
for i2, a in ipairs(tgroup['addedby']) do
if a == group then
table.insert(addgroups, tgroup['group'])
end
end
for i2, a in ipairs(tgroup['removedby']) do
if a == group then
table.insert(removegroups, tgroup['group'])
end
end
end
-- sort group tables
table.sort(addgroups, function(a, b) return a:byte() < b:byte() end)
table.sort(removegroups, function(a, b) return a:byte() < b:byte() end)
-- make group text
local addgroupstext = ''
for i, g in ipairs(addgroups) do
g = '[[' .. frame:preprocess(mw.message.new('Grouppage-' .. g):inLanguage(mw.getContentLanguage()):plain()) .. '|' .. frame:preprocess(mw.message.new('Group-' .. g):inLanguage(mw.getContentLanguage()):plain()) .. ']]'
if i == 1 then
addgroupstext = g
else
if i == table.getn(addgroups) then
addgroupstext = addgroupstext .. i18n['lastsep'] .. g
else
addgroupstext = addgroupstext .. i18n['middlesep'] .. g
end
end
end
local removegroupstext = ''
for i, g in ipairs(removegroups) do
g = '[[' .. frame:preprocess(mw.message.new('Grouppage-' .. g):inLanguage(mw.getContentLanguage()):plain()) .. '|' .. frame:preprocess(mw.message.new('Group-' .. g):inLanguage(mw.getContentLanguage()):plain()) .. ']]'
if i == 1 then
removegroupstext = g
else
if i == table.getn(removegroups) then
removegroupstext = removegroupstext .. i18n['lastsep'] .. g
else
removegroupstext = removegroupstext .. i18n['middlesep'] .. g
end
end
end
-- add group text
if addgroupstext > '' or removegroupstext > '' then
text = text .. '\n<h3>' .. i18n['groups'] .. '</h3>'
if addgroupstext > '' then
text = text .. '\n' .. i18n['addgroups'] .. addgroupstext
end
if removegroupstext > '' then
text = text .. '\n\n' .. i18n['rmvgroups'] .. removegroupstext
end
end
return text
end
return p