Garçon devant un ordinateur.jpg
Hollie Little Pink Laptop.jpg
À propos • Aide • Le Livre d'or
Les lecteurs de Vikidia demandent des articles en plus. Voyez la liste d'articles à créer, et venez nous aider à les rédiger !
Cette page est protégée.

Module:Utilisateur

Aller à la navigation Aller à la recherche
 Documentation[modifier] [purger]

Le module : User implémente les modèles qui servent à afficher des liens utiles pour étudier les contributions d’un utilisateur (voir leurs documentations). Il fournit :

La plupart des fonctions fonctionnent de la même manière, aussi y a-t-il la fonction locale user pour synthétiser la majorité des appels ; la fonction IP fait elle appel à la fonction locale ip, car le modèle : IP offre divers outils qui ne font pas sens pour les comptes enregistrés. La fonction locale plus est commune aux deux fonctions locales.

Tous les modèles sont substables, même si cela ne fait pas vraiment sens ici.

local p = {}

--
-- Fonction générique pour ajouter certains liens
--

local function plus( utilisateur, ip )
	local puce = ' • '
	local pipe = ' | '

	local utilisateur2 = mw.uri.encode( utilisateur, "WIKI" )

	-- antiabus : filtres déclenchés par l’utilisateur
	local titre = mw.title.new( 'Special:Journal du filtre antiabus' )
	local antiabus = titre:fullUrl{ wpSearchUser = utilisateur2 }

	-- deleted1 : liste des contributions de l’utilisateur masquées par un administrateur
	titre = mw.title.new( 'Special:Contributions' )
	local deleted1 = titre:fullUrl{ target = utilisateur2, deletedOnly = '1' }

	-- deleted2 : liste des contributions de l’utilisateur masquées par un bureaucrate
	titre = mw.title.new( 'Special:Log/suppress' )
	local deleted2 = titre:fullUrl{ user = utilisateur2 }

	-- checkuser1 : checkuser sur l’utilisateur
	titre = mw.title.new( 'Special:CheckUser' )
	local checkuser1 = titre:fullUrl{ user = utilisateur2 }

	-- checkuser2 : requêtes checkuser faites par l’utilisateur
	titre = mw.title.new( 'Special:CheckUserLog' )
	local checkuser2 = titre:fullUrl{ cuSearch = utilisateur2 }

	-- ajout des options
	local retour = pipe
	            .. '[[special:Log/'
	            .. utilisateur
	            .. '|<span title="Journaux générés par '
	            .. utilisateur
	            .. '">j</span>]]'

	if not ip then
		retour = retour .. puce
		                .. '[[Spécial:Liste_des_fichiers/'
		                .. utilisateur
		                .. '|<span title="Fichiers importés par '
		                .. utilisateur
		                .. '">i</span>]]'
	end

	retour = retour .. puce
	                .. '['
	                .. antiabus
	                .. ' '
	                .. '<span title="Journaux des filtres anti-abus pour '
	                .. utilisateur
	                .. '">AF</span>]'

	                .. puce
	                .. '['
	                .. deleted1
	                .. ' '
	                .. '<span title="Contributions masquées (admin) de '
	                .. utilisateur
	                .. '">Cm-</span>]'

	                .. puce
	                .. '['
	                .. deleted2
	                .. ' '
	                .. '<span title="Contributions masquées lourdement (bubu) de '
	                .. utilisateur
	                .. '">Cm+</span>]'

	                .. puce
	                .. '[[special:Contributions_supprimées/'
	                .. utilisateur
	                .. '|<span title="Contributions supprimées de '
	                .. utilisateur
	                .. '">Cs</span>]]'

	if not ip then
		retour = retour .. puce
		                .. '[[special:Permissions/'
		                .. utilisateur
		                .. '|<span title="Droits utilisateurs de '
		                .. utilisateur
		                .. '">P</span>]]'
	end

	retour = retour .. puce
	                .. '['
	                .. checkuser1
	                .. ' '
	                .. '<span title="CheckUser sur '
	                .. utilisateur
	                .. '">CU</span>]'

	                .. puce
	                .. '['
	                .. checkuser2
	                .. ' '
	                .. '<span title="CheckUser faits sur '
	                .. utilisateur
	                .. '">LogCU</span>]'

	return retour
end

--
-- Fonctions pour assembler le texte de retour
--

local function user( utilisateur, block, admin, full )
	local puce = '&nbsp;&bull;&#32;'
	local pipe = '&nbsp;|&#32;'

	local retour = '[[Utilisateur:'
	            .. utilisateur
	            .. '|<span title="Page utilisateur de '
	            .. utilisateur
	            .. '">'
	            .. utilisateur
	            .. '</span>]]'

	-- ouverture de la parenthèse, ajout des options : d, c
	            .. '<span class="plainlinks" style="font-size: 80%;"> ('
	            .. '[[Discussion utilisateur:'
	            .. utilisateur
	            .. '|<span title="Page de discussion de '
	            .. utilisateur
	            .. '">d</span>]]'

	            .. puce
	            .. '[[Special:Contributions/'
	            .. utilisateur
	            .. '|<span title="Contributions de '
	            .. utilisateur
	            .. '">c</span>]]'

	-- lien pour voir si l’utilisateur a été bloqué
	if block then
		-- journal des blocages de l’utilisateur
		local titre = mw.title.new( 'Special:Log' )
		local appel = titre:fullUrl{ type = 'block', page = 'User:' .. mw.uri.encode( utilisateur, "WIKI" ) }

		-- ajout de l’option : b
		retour = retour .. puce
		                .. '['
		                .. appel
		                .. ' '
		                .. '<span title="Blocages sur le compte '
		                .. utilisateur
		                .. '">b</span>]'
	end

	-- liens pour surveiller les contributions en tant qu’administrateur de l’utilisateur
	if admin then
		local utilisateur2 = mw.uri.encode( utilisateur, "WIKI" )

		-- block : blocages effectués par l’administrateur
		local titre = mw.title.new( 'Special:Log/block' )
		local blocage = titre:fullUrl{ user = utilisateur2 }

		-- protect : pages protégées par l’administrateur
		titre = mw.title.new( 'Special:Log/protect' )
		local protect = titre:fullUrl{ user = utilisateur2 }

		-- delete : pages supprimées par l’administrateur
		titre = mw.title.new( 'Special:Log/delete' )
		local delete = titre:fullUrl{ user = utilisateur2 }

		-- ajout des options : B, P (le premier), S
		retour = retour .. pipe
		                .. '['
		                .. blocage
		                .. ' '
		                .. '<span title="Blocages effectués par '
		                .. utilisateur
		                .. '">B</span>]'

		                .. puce
		                .. '['
		                .. protect
		                .. ' '
		                .. '<span title="Protections effectuées par '
		                .. utilisateur
		                .. '">P</span>]'

		                .. puce
		                .. '['
		                .. delete
		                .. ' '
		                .. '<span title="Suppressions effectuées par '
		                .. utilisateur
		                .. '">S</span>]'
	end

	-- liens supplémentaire
	if full then
		retour = retour .. plus( utilisateur, false )
	end

	-- fermeture de la parenthèse
	retour = retour .. ')</span>'
	return retour
end

local function ip( adresse, block, whois, full )
	local puce = '&nbsp;&bull;&#32;'
	local pipe = '&nbsp;|&#32;'

	local retour = 'IP [[Special:Contributions/'
	            .. adresse
	            .. '|<span title="Contributions de '
	            .. adresse
	            .. '">'
	            .. adresse
	            .. '</span>]]'

	-- ouverture de la parenthèse, ajout de l’option : d
	            .. '<span class="plainlinks" style="font-size: 80%;"> ('
	            .. '[[Discussion utilisateur:'
	            .. adresse
	            .. '|<span title="Page de discussion de l’IP '
	            .. adresse
	            .. '">d</span>]]'

	-- lien pour voir si l’utilisateur a été bloqué
	if block then
		-- journal des blocages de l’ip
		local titre = mw.title.new( 'Special:Log' )
		local appel = titre:fullUrl{ type = 'block', page = 'User:' .. mw.uri.encode( adresse, "WIKI" ) }

		-- ajout de l’option : b
		retour = retour .. puce
		                .. '['
		                .. appel
		                .. ' '
		                .. '<span title="Blocages sur l’IP '
		                .. adresse
		                .. '">b</span>]'
	end

	-- lien vers des outils pour identifier l’IP
	if whois then
		local adresse2 = mw.uri.encode( adresse, "WIKI" )

		-- ajout de l’option : geo (whatismyipaddress)
		retour = retour .. puce
		                .. '['
		                .. 'https://whatismyipaddress.com/ip/'
		                .. adresse2
		                .. ' '
		                .. '<span title="Géolocalisation de l’IP '
		                .. adresse
		                .. '">geo</span>]'

		-- ajout de l’option : WhoIs (whois.toolforge.org)
		                .. puce
		                .. '['
		                .. 'https://whois.toolforge.org/gateway.py?lookup=true&ip='
		                .. adresse2
		                .. ' '
		                .. '<span title="WhoIs de l’IP '
		                .. adresse
		                .. '">WhoIs</span>]'
	end

	-- liens supplémentaire
	if full then
		retour = retour .. plus( adresse, true )
	end

	-- fermeture de la parenthèse
	retour = retour .. ')</span>'
	return retour
end

--
-- Fonctions appelables depuis les modèles
--

-- pour le [[modèle : IP]]
function p.IP( frame )
	local args = frame.args

	local tmp = mw.text.trim( args[1] or '' )
	local utilisateur = (tmp ~= '') and tmp or error( "le nom d’utilisateur doit être précisé dans le modèle : IP" )

	local block = mw.text.trim( args['noblock'] or '' ) == ''
	local whois = mw.text.trim( args['nowhois'] or '' ) == ''
	local full  = mw.text.trim( args['full']    or '' ) ~= ''

	if require( 'Module:Lib adresse IP' ).isIP( nil, utilisateur ) then
		return ip( utilisateur, block, whois, full )
	else
		return user( utilisateur, block, false, full ) .. '[[Catégorie:Modèle IP mal utilisé]]'
	end
end

-- à appeler depuis d’autres modules
function p.user( canari, utilisateur, block, admin, full )
	if canari ~= nil then
		error( "utilisez la fonction « User » du même module" )
	end
	return user( utilisateur, block, admin, full )
end

-- pour le [[modèle : User]] aka [[modèle : U]]
function p.User( frame )
	local args = frame.args

	local tmp = mw.text.trim( args[1] or '' )
	local utilisateur = (tmp ~= '') and tmp or error( "le nom d’utilisateur doit être précisé dans le modèle : U" )

	local block = mw.text.trim( args['block'] or '' ) ~= 'non'
	local admin = mw.text.trim( args['admin'] or '' ) ~= ''
	local full  = mw.text.trim( args['full']  or '' ) ~= ''

	return user( utilisateur, block, admin, full )
end

-- pour le [[modèle : U-]]
function p.UMoins( frame )
	local args = frame.args
	local tmp

	tmp = mw.text.trim( args[1] or '' )
	local utilisateur = (tmp ~= '') and tmp or error( "le nom d’utilisateur doit être précisé dans le modèle : U-" )

	tmp = mw.text.trim( args[2] or '' )
	local texte = (tmp ~= '') and tmp or utilisateur

	return '[[Utilisateur:' .. utilisateur .. '|' .. texte .. ']]'
end

-- pour le [[modèle : U+]]
function p.UPlus( frame )
	local args = frame.args

	local tmp = mw.text.trim( args[1] or '' )
	local utilisateur = (tmp ~= '') and tmp or error( "le nom d’utilisateur doit être précisé dans le modèle : U+" )

	local block = mw.text.trim( args['block'] or '' ) ~= 'non'
	local admin = mw.text.trim( args['admin'] or '' ) ~= ''

	return user( utilisateur, block, admin, 'full' )
end

-- pour le [[modèle : U']]
function p.UPrime( frame )
	local args = frame.args

	local tmp = mw.text.trim( args[1] or '' )
	local utilisateur = (tmp ~= '') and tmp or error( "le nom d’utilisateur doit être précisé dans le modèle : U'" )

	local admin = mw.text.trim( args['admin'] or '' ) ~= ''
	local full  = mw.text.trim( args['full']  or '' ) ~= ''

	return user( utilisateur, false, admin, full )
end

return p