Aller au contenu

Module:Population totale

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 25 novembre 2013 à 16:54 et modifiée en dernier par Hexasoft (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[créer] [purger]
--[[
  Test : module pour calculer la population totale d'un groupement de communes
--]]

local p = {}

function p.erreur(texte)
	return '<span class="error" style="font-size: 0.9em;">' .. (texte or "Erreur non définie") .. '</span>'
end


--[[
  Retourne le total des populations des communes indiquées
  Paramètres :
    - paramètres non nommés : le nom des communes (titre des articles)
    - absent : gère que faire en cas de commune dont les données sont inconnues
     → "fatal" : ne traite pas les données (ne fait rien). Sinon l'entrée erronée est ignorée
    - erreur : méthode utilisée pour prévenir d'une erreur
     → "rien" : ne pas générer d'erreur
     → "texte" : insérer l'erreur dans le texte retourné
     → "cat" : insérer une catégorie d'erreur (Catégorie:Commune invalide pour Population totale)
--]]
function p.population(frame)
	local pargs = frame:getParent().args
	-- récupération des options
	local absent = frame.args["absent"] or pargs["absent"]
	local erreur = frame.args["erreur"] or pargs["erreur"]
	
	local err = ""  -- erreur à ajouter à la fin
	local db = ""   -- debug

	-- vérification paramètres
	if (absent ~= "fatal" and absent ~= nil) then
		return p.erreur("Paramètre 'absent' invalide.")
	end
	if (erreur ~= "rien" and erreur ~= "texte" and erreur ~= "cat" and erreur ~= nil) then
		return p.erreur("Paramètre 'erreur' invalide.")
	end
	if (erreur == nil) then erreur = "texte" end -- valeur par défaut
	
	-- présence d'au moins une commune
	if (pargs[1] == nil) then
		p.erreur("Aucune commune fournie.")
	end
	
	db = "absent=" .. (absent or "nil") .. " ; erreur=" .. erreur .. " / "
	
	-- compte population
	local total = 0
	-- parcours des communes
	local i = 1
	-- while (pargs[i] ~= nil) do  -- pour tester. cette ligne est la bonne normalement
	while (frame.args[i] ~= nil) do
		-- local c = mw.text.trim(pargs[i])  -- idem
		local c = mw.text.trim(frame.args[i])
		-- nettoyage
		local res, tmp = pcall(frame:expandTemplate{ title = 'Données/' .. c .. '/évolution population', args = { 'pop' } })
		if (res == true) then
			-- on récupère le nombre et on l'ajoute
			local val = tonumber(tmp)
			if (val == nil) then
				res = false
			else
				-- ok, on ajoute le nombre
				total = total + val
			end -- si pas un nombre on traite comme une erreur
		end
		if (res == false) then -- if et pas else car res peut avoir changé de valeur
			-- une erreur
			if (absent == "fatal") then
				-- on quitte sans traiter. Type d'erreur à insérer ?
				if (erreur == "texte") then
					err = err .. "Pas de données pour la commune '" .. pargs[i] .. "' "
				elseif (erreur == "cat") then
					err = "[[Catégorie:Commune invalide pour Population totale]]"
				end -- else "rien"
				return err -- on retourne juste l'erreur
			end
			-- pas fatal, on prépare l'erreur à ajouter (ou pas)
			if (erreur == "texte") then
				err = err .. "Pas de données pour la commune '" .. pargs[i] .. "' "
			elseif (erreur == "cat") then
				err = "[[Catégorie:Commune invalide pour Population totale]]"
			end -- else "rien"
		end
	end
	
	-- on retourne la valeur calculée + les erreurs éventuelles
	return tostring(total) .. err
end

return p