Module:User group rights

De Gamepedia Help Wiki
Aller à : navigation, rechercher

Ce module contient trois paramètres configurables :

  • user_rights = 'Liste de droits',
  • extension_ns = 'Extension',
  • non_default_ext = 'Droits pour les extensions non standard'

Ceux-ci doivent être traduit vers la langue cible.

[visualiser | modifier | purger]La documentation ci-dessus est insérée depuis Module:User group rights/doc.
local p = {}

local i18n = {
	user_rights = 'Liste des droits',
	extension_ns = 'Extension',
	non_default_ext = 'Droits pour les extensions non standard',
	groups = 'Rôles',
    addgroups = '* Peut ajouter : ',
    rmvgroups = '*  Peut supprimer: ',
    middlesep = ', ',
    lastsep= ' et '
}

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