Documentation[voir] [modifier] [historique] [purger]

Cette page définit un module d'infobox. Pour les conseils sur l'usage de ce module, voyez Modèle:Infobox Archives/Bac à sable.


local general = require "Module:Infobox/Fonctions"
local wikidata = require "Module:Wikidata"
local wd = require "Module:Wikidata"
--local url = require "Module:URL"
local link = require "Module:Weblink"
--local iwd = require "Module:Interface Wikidata" (pour tests)
local localdata = require "Module:Infobox/Localdata"
local loc = require "Module:Infobox/Fonctions/Géolocalisation"
-- local locadmin = require "Module:Infobox/Fonctions/Bâtiment" cf. dernier commentaire du module
local p = {}

-- Insérer ici les fonctions

local function pays() 
	if loc.country() then
		return loc.country()
		else
		return nil
	end
end

-- Titres programmables

-- Fonctions wikidata

-- Sélection de l'entité assurant la maintenance pour lien vers requête

local function selectmaintain()
	local maintainid = wd.getIds(localdata.item, {property = 'P126'}) --, condition = function(claim) return wd.getId(claim.mainsnak) end})
		if (not maintainid) then
			return localdata.wikidata or localdata.item else
--				return wd.stringTable{entity = item, property = 'P126', claims = maintainid, conjtype = 'comma'}, #maintainid
				end
return tostring(maintainid)
end

local function wqs(wdquery)
	local item = selectmaintain()
	if not item then
		return nil else
	local wdquery = "SELECT ?maintenanceLabel ?maintenance ?itemLabel ?item WHERE { ?item (wdt:P31/wdt:P279*) wd:Q2668072. ?item wdt:P126+ ?maintenance. FILTER(?maintenance=wd:"..item..") SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE],en\". }} ORDER BY ?maintenanceLabel"
	return "https://query.wikidata.org/#".. mw.uri.encode(wdquery, 'PATH')
	end
end

localdata['sparql'] = wqs()

local function lien()
	return link.makelink (localdata.sparql, "Voir les fonds de l'institution dépositaire")
end

localdata['lien'] = lien()

local function sparql()
	local rows = {}
	do
		table.insert (rows, {
			type = 'row',
		value = 'lien'
		})
	end
	return rows
end

-- Sélection du bâtiment

local buildingitem = localdata.item-- assuming same item for building and organization, but should not be the case, so checks the following:
local buildingcandidates = wd.stringTable{entity = localdata.item, property = 'P276', displayformat = 'raw', excludespecial = true}
if buildingcandidates then
	if (#buildingcandidates == 1) and (buildingcandidates ~= buildingitem) and wd.isInstance('Q41176', buildingcandidates[1], 2) or wd.isInstance('Q1497364', buildingcandidates[1], 1) then
		buildingitem =  buildingcandidates[1]
	end
end
local buildingdesignated = localdata['batId']
if buildingdesignated then
		buildingitem =  buildingdesignated
end

-- Désignation d'une collection
local collecitem = localdata.item
local collecdesignated = localdata['collecId']
if collecdesignated then
		collecitem =  collecdesignated
end
-- Retourne le nom original
local function noms(item)
	local noms = wd.getClaims{entity = item, property = 'P1705'}
	if (not noms) then
		return nil
	end
	if #noms > 3 then
		return wd.formatAndCat{property = 'P1705', entity = item, value = 'Divers'}, 2
	end
	return wd.formatAndCat{entity = item, property = 'P1705', claims = noms, conjtype = 'comma'}, #noms
end

-- Retourne l'année de construction
local function construction(item)
	local construction = wd.getClaims{entity = item, property = 'P571', condition = function(claim)
							return wikidata.isInstance('Q41176', item, 0)					
							end,}
	if (not construction) then
		return wd.keyDate('Q385378', buildingitem)
	end
	return wd.formatAndCat{entity = item, property = 'P571', claims = construction, conjtype = 'comma', precision = 'year', condition = function(claim)
							return wikidata.isInstance('Q41176', localdata.item, 6)					
							end,}, #construction
end

-- Retourne l'architecte ou les architectes
local function architects(item)
	local architects = wd.getClaims{entity = item, property = 'P84'}
	if (not architects) then
		return nil
	end
	if #architects > 3 then
		return wd.formatAndCat{property = 'P84', entity = item, value = 'Divers'}, 2
	end
	return wd.formatAndCat{entity = item, property = 'P84', claims = architects, conjtype = 'comma'}, #architects
end

-- Retourne le classement
local function classement(item)
	local classement = wd.getClaims{entity = item, property = 'P1435',condition = function(claim)
							return wikidata.isInstance('Q41176', item, 0)					
							end,}
	if (not classement) then
		return nil
	end
	return wd.formatAndCat{entity = item, property = 'P1435', claims = classement, conjtype = 'comma'}, #classement
end

-- Retourne les institutions
local function institutions(item)
	local institutions = wd.getClaims{entity = item, property = 'P466'}
	if (not institutions) then
		return nil
	end
	if #institutions > 3 then
		return wd.formatAndCat{property = 'P466', entity = item, value = 'Diverses'}, 2
	end
	return wd.formatAndCat{entity = item, property = 'P466', claims = institutions, conjtype = 'comma', condition = function(claim)
							return wikidata.isInstance('Q1497649', localdata.item, 6)					
							end,}, #institutions
end

-- Retourne l'ampleur
local function ampleur(item)
	local ampleur = wd.getClaims{entity = item, property = 'P1436'}
	if (not ampleur) then
		return nil
	end
	return wd.formatAndCat{entity = item, property = 'P1436', claims = ampleur, conjtype = 'comma', showunit = 'long', showqualifiers = {'P585'}, sourceproperty={withsource=any}}, #ampleur
end

-- Fin des fonctions

return 
	{
	maincolor = 'E9C6B0',
    parts =
    {
    	general.title('archives2', nil, 'sous-titre', nil), -- Titre
    	general.logo(), -- Logo
    	general.mainimage('Article à illustrer', 'Defaut 2.svg'), -- Image
    	
-- Partie 1 - Informations générales

		{type = 'table', title='Institution',
			rows =	{
					{type = 'row', label = 'Nom officiel', plurallabel = 'Noms officiels', value = 'nom officiel', wikidata = { property = 'P1448',
						condition = function(claim)
							return (not wikidata.isInstance('Q41176', localdata.item, 6))				
							end,
							}},
					{type = 'row', label = 'Autre nom', plurallabel = 'Autres noms', value = 'autre nom'},
					{type = 'row', label = 'Type', plurallabel = 'Types', value = 'type', property = 'P31'},
					{type = 'row', label = 'Création', value = 'création', wikidata = { property = 'P571',
					condition = function(claim)
							return (not wikidata.isInstance('Q41176', localdata.item, 6))				
							end,
							}},
					{type = 'row', label = 'Dissolution', value = 'dissolution', wikidata = { property = 'P576',
					condition = function(claim)
							return (not wikidata.isInstance('Q41176', localdata.item, 6))				
							end,
							}},
					{type = 'row', label = 'Période', plurallabel = 'Périodes', value = 'période'},
					{type = 'row', label = 'Affiliation', plurallabel = 'Affiliations', value = 'affiliation', property = 'P1416'},
					{type = 'row', label = 'Forme juridique', value = 'forme juridique', property = 'P1454'},
					{type = 'row', label = function ( localdata )
						if localdata['titre dirigeant'] then
							return localdata['titre dirigeant'] else return 'Dirigeant'
						end
					end, plurallabel = 'Dirigeants', value = 'dirigeant', property = 'P1037'},
					
					{type = 'row', label = function ( localdata )
						if localdata['titre dirigeant2'] then
							return localdata['titre dirigeant2'] else return 'Dirigeant'
						end
					end, value = 'dirigeant2'}, -- Pour la compatibilité avec l'ancienne infobox
					
--					{type = 'row', label = 'Période', plurallabel = 'Périodes', value = 'période'}, -- Propriété Wikidata manquante
					{type = 'row', label = 'Collaborateurs', value = 'personnel', property = 'P1128'},
					{type = 'row', label = 'Protection', plurallabel = 'Protections', value = 'protection', wikidata = { property = 'P1435',
						condition = function(claim)
							return (not wikidata.isInstance('Q41176', localdata.item, 6))					
							end,
							}},
					{type = 'row', label = 'Site web', plurallabel = 'Site web', value = 'site', property = 'P856'},
					{type = 'row', label = '[[ISO 15511|ISIL]]', value = 'ISIL', property = 'P791'},
					{type = 'row', label = 'Nom principal', plurallabel = 'Noms principaux', value = 'nomISIL'}, 
					{type = 'row', label = 'Siège', plurallabel = 'Sièges', value = 'siège', property = 'P159'}, 
					{type = 'row', label = 'Membre de', value = 'membre', property = 'P463'},
					},
				
		},
		
-- Partie 2 Collections
{type = 'table', title='Collections',
			rows =	{
					{type = 'row', label = 'Ampleur',  value = 'ampleur', wikidata = function() return ampleur(collecitem) end},
					
--Collection à laquelle appartient un fonds	(P361 : Partie de)				
					{type = 'row', label = 'Collection', plurallabel = 'Collections', value = 'collection', wikidata = {
						property = 'P361',
						condition = function(claim)
							local v = wikidata.getMainId(claim)
							return wikidata.isInstance('Q2668072', v, 2)					
							end,
						}
					},

--Institution conservant un fonds	(P126 : Maintenance assurée par)				
					{type = 'row', label = 'Conservateur', plurallabel = 'Conservateurs', value = 'conservateur', wikidata = {
						property = 'P126',
						condition = function(claim)
							local v = wikidata.getMainId(claim)
							return wikidata.isInstance('Q1497649', v, 2)					
							end,
						}
					},
				
--Fonds d'une collection				
					{type = 'row', label = 'Fonds', plurallabel = 'Fonds', value = 'fonds', wikidata = {
						property = 'P527',
						condition = function(claim)
							local v = wikidata.getMainId(claim)
							return wikidata.isInstance('Q3052382', v, 2)					
							end,
						}
					},
			}},
			{type = 'table', rows = sparql(), style = { ['text-align'] = 'center'}},
	-- Partie 3 - Bâtiment
	
		{type = 'table', title='Bâtiment',
			rows =	{
					{type = 'row', label = 'Article dédié', value = {'monument', 'article bâtiment'}, wikidata =
						function()
						if buildingitem and (buildingitem.id ~= localdata.item.id) and wd.siteLink(buildingitem) then
							str = wd.formatEntity(buildingitem)
							return wd.addLinkBack(str, item, 'P276')
						end
						end
				},
					{type = 'row', label = 'Bâtiment', plurallabel = 'Bâtiment', value = 'bâtiment', wikidata ={ property = 'P276',
						condition = function(claim)
							local v = wikidata.getMainId(claim)
							return wikidata.isInstance('Q41176', v, 6)					
							end,
							}},
					{type = 'row', label = 'Nom original', plurallabel = 'Noms originaux', value = 'nombat', wikidata = function() return noms(buildingitem) end},	
					{type = 'row', label = 'Type de bâtiment', plurallabel = 'Types de bâtiments', value = ''}, -- Requête à écrire pour obtenir les données WD du bâtiment
					{type = 'row', label = 'Construction', value = 'date de construction', wikidata = function() return construction(buildingitem) end},
					{type = 'row', label = 'Architecte', plurallabel = 'Architectes', value = 'architecte', wikidata = function() return architects(buildingitem) end},
					{type = 'row', label = 'Destination initiale', plurallabel = 'Destination initiales', value = 'destination initiale'}, -- Requête à écrire pour obtenir les données WD du bâtiment
					{type = 'row', label = 'Classement', plurallabel = 'Classements', value = 'classement', wikidata = function() return classement(buildingitem) end},
					--Institutions hébergées				
					{type = 'row', label = 'Institution hébergée', plurallabel = 'Institutions hébergées', value = 'institutions', wikidata = function() return institutions(buildingitem) end},
				-- Collections hébergées par un bâtiment				
					{type = 'row', label = 'Collection hébergée', plurallabel = 'Collections hébergées', value = 'collection hebergee'},
					{type = 'row', label = function ( localdata )
						if localdata['titre autre bâtiment'] then
							return localdata['titre autre bâtiment'] else return 'Autre bâtiment'
						end
					end, plurallabel = 'Autres bâtiments', value = 'autre bâtiment'}, -- Propriété Wikidata manquante
					pays(),
--					locadmin.adminloc(),		Voir si réellement utile. Code à adapter si oui
					{type = 'row', label = function ( localdata )
						if localdata['intitulé subdivision'] then
							return localdata['intitulé subdivision'] else return ''
						end
					end, value = 'subdivision'}, -- Propriété Wikidata manquante
					
					{type = 'row', label = function ( localdata )
						if localdata['intitulé subdivision2'] then
							return localdata['intitulé subdivision2'] else return ''
						end
					end, value = 'subdivision2'}, -- Propriété Wikidata manquante
					{type = 'row', label = 'Ville', plurallabel = 'Villes', value = 'ville'}, -- Propriété Wikidata manquante
					{type = 'row', label = 'Adresse', plurallabel = 'Adresses', value = 'adresse'}, -- Propriété Wikidata manquante
					loc.coordinates(),
					}
		},
		loc.geoloc({marker='library', default_zoom=7}),
	}
	}