Module:Infobox/Fonctions/Personne

La documentation pour ce module peut être créée à Module:Infobox/Fonctions/Personne/Documentation

-- Functions utilisées par les infobox personnes
local p = {}
local wikidata = require('Module:Wikidata')
local general = require('Module:Infobox/Fonctions')
local gender -- set by setgender

local datelinks = { -- lien vers le domaine d'activité approprié
	Q483501 = 'en arts plastiques', -- artiste
	Q1028181 = 'en arts plastiques', -- peintre
	Q1281618 = 'en arts plastiques', -- sculpteur
} 

local function getdatetopic(item) -- obtien le lien le plus approprié pour une date en fonction de la profession
	local val = wikidata._formatStatements{displayformat = 'raw', item = item, property = 'P106', numval = 1}
	return datelinks[val]
end

-- ========== Fonctions d'aide ====================================

local function dateandplace(thedate, theplace) 
	if thedate and theplace then
		return thedate .. '<br />' .. theplace
	else
		return thedate or theplace --retourne tout ce qu’il trouve
	end
end


local function setgender(localdata, item) -- établit la valeur de la variable "gender" qui sert à adapter la grammaire au sexe de la personne
	if localdata['sexe'] or localdata['genre'] then
		gendertable = {f = 'f' , ['féminin'] = 'f', femme = 'f', homme = 'm', m = 'm', masculin = 'm'}
		gender = gendertable[(localdata['sexe'] or localdata['genre'])]
		if not gender then gender = '?' end
		return
	end
	local g = wikidata._formatStatements{item= item, property = 'P21', format = 'raw'}
	if g == 'Q6581072' then
		gender = 'f'
	elseif g == 'Q6581097' then
		gender = 'm'
	else
		gender = '?'
	end
end

--Titre
function p.title()
	return {
			type = 'title',
			value = 'nom',
			icon = 'Picto_infobox_manwoman.png', 
	}
end

--Image
function p.mainimage()
	return  general.mainimage('Article à illustrer/Biographie', '240px')
end

--Naissance, décès 
function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième
	return {
		type = 'mixed',
		label = 'Naissance',
		value =
			function(localdata, item)
					local thedate = localdata['date de naissance'] or localdata['naissance'] 
					local theplace = localdata['lieu de naissance']
					if not thedate then
						local link = getdatetopic(item)
						thedate = wikidata._formatAndCat({item = item, property= 'P569', rank = 'best', conjtype= ' ou ', linktopic = link})
						if not theplace then
							-- mis ici  pour ne pas récupérer le lieu Wikidata si la date ne vient pas de Wikidata (risque de collision)
							theplace =  wikidata._formatAndCat({item = item, property= 'P19', rank = 'best', conjtype= ' ou '})
						end
					end
					return dateandplace(thedate, theplace)
			end
	}
end

function p.death() -- même fonctionnement que la fonction p.birth
	return {
		type = 'mixed',
		label = 'Décès',
		value =
			function(localdata, item)
					local thedate = localdata['date de décès'] or localdata['décès']
					local theplace = localdata['lieu de décès']
					if not thedate then
						local link = getdatetopic(item)
						thedate = wikidata._formatAndCat{item= item, property= 'P570', rank = 'best', conjtype= ' ou ', linktopic = link}
						if not theplace then
							-- mis ici  pour ne pas récupérer le lieu Wikidata si la date ne vient pas de Wikidata (risque de collision)
							theplace =  wikidata._formatAndCat({item = item, property= 'P20', rank = 'best', conjtype= ' ou '})
						end
					end
					return dateandplace(thedate, theplace)
			end
	}
end

function p.nationality() --
	return {
		type = 'mixed',
		label = 'Nationalité',
		value = 'nationalité',
--		property = 'P27' que faire avec les données Wikidata Parfois, elle peuvent paraitre discutable du type Platon : "Athènes" ou "Goethe: Allemagne".
	}
end

-- parcours professionel
function p.education() -- à améliorer
	return {
		type = 'mixed',
		label = 'Formation',
		value = function(localdata) return locadata['éducation'] or localdata['formation'] end,
		wikidata = function(item) return wikidata._formatAndCat{item=item, property = 'P69', showdate = true, conjtype = '<br />'} end
	}
end

function p.awards() -- à améliorer
	return {
		type = 'mixed',
		label = 'Distinctions',
		value = function(localdata) return localdata['prix'] or localdata['récompenses'] or localdata['distinctions'] end,
		wikidata = function(item) return wikidata._formatAndCat{item = item, property= 'P166', sorttype= 'chronological' , showdate= true, conjtype= '<br />'} end,
	}
end


-- Influences 
function p.influencedby()
	return {
		type = 'mixed',
		label = 
		function(localdata, item) 
		if not gender then setgender(localdata, item) end
		if gender == 'f' then
			return 'Influencée par'
		elseif gender == 'm' then
			return 'Influencé par'
		else
			return 'Influencé(e) par'
		end
		end,
		value = 'influencé par',
		property = 'P737',
    }
end

function p.influenced()
	return {
		type = 'mixed',
		label = 'A influencé',
		value = function(localdata) return localdata['a influencé'] or localdata['influence de'] end,
		property = 'P738',
}
end

-- Signature
function p.signature(default)
	return {
		type = 'images',
		imageparameters =  {'signature'},
		defaultimage = {default},
		defaultsize = '150px',
		captionparameter = 'légende signature',
		defaultcaption = 'signature',
		property = 'P109',
		numval = 1
	}
end

--== Site web
function p.website()
	return p.website()
end

return p