Aller au contenu

Module:Population EPCI

Une page de Wikipédia, l'encyclopédie libre.

 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


--[[
  Permet de calculer la population d'un syndicat constitué de plusieurs EPCI en retournant le total des populations des EPCI indiqués. 
  Ne permet toutefois pas de calculer la population d'un syndicat constitué d'EPCI et de communes isolées. Pour la population d'un ensemble de communes isolées, il convient d'utiliser le module "Population totale".
  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
	
-- temp : pour tester
pargs = frame.args

	-- présence d'au moins un EPCI
	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
		local c = mw.text.trim(pargs[i]) -- nettoyage
		local tmp = frame:preprocess("{{Données/" .. c .. '/population|pop}}')
		local res = true
		-- 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
		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 .. p.erreur("Pas de données pour l'EPCI '" .. pargs[i] .. "' (" .. (tmp or "") .. ") ")
				elseif (erreur == "cat") then
					err = "[[Catégorie:EPCI 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 .. p.erreur("Pas de données pour l'EPCI '" .. pargs[i] .. "' (" .. (tmp or "") .. ") ")
			elseif (erreur == "cat") then
				err = "[[Catégorie:Commune invalide pour Population totale]]"
			end -- else "rien"
		end
		i = i + 1
	end
	
	-- on retourne la valeur calculée + les erreurs éventuelles
	return tostring(total) .. err
end

return p