Module:Date/Vérification Data

From CryptoWiki

< Module:Date

Revision as of 08:36, 2 January 2022 by 5imp5on (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Date/Vérification Data/doc

local p = {}

local listeMois = { 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre', }

---
-- erreurModuleData affiche d'un message d'erreur si le Module:Langue/Data n'a pas été chargé correctement,
-- pour la page de discussion de la base de donnée et ceux qui veulent surveiller cette page.
function p.erreurModuleData()
	local success, resultat = pcall ( mw.loadData, 'Module:Date/Data' )
	if success == false then
		local message = [[<strong class="error">Le chargement du module Date/Data génère une erreur : </strong><br />%s<br />

<span class="error">Cette erreur doit être corrigée au plus vite car des milliers de page ne s'affichent pas correctement</span>
]]
		return string.format( message, resultat )
	end
end

---
-- checkDataCat génère des liens vers les pages annuelles, mensuelles et d'éphémérides liè aux
-- catégories du Module:Date/Data. La date la plus ancienne dépend de 'aucun' et 'seul[1]'
-- Paramètres :
-- 	1 : la catégorie. Il y aura une section par qualificatif de cette catégorie.
-- 	mois : oui pour avoir les liens vers les pages mensuelles et éphémérides (4 jours dans l'année)
-- 	alias : pour avoir des liens pour les alias en plus des qualificatifs
function p.checkDataCat( frame )
	local category = frame.args[1] and mw.text.trim(frame.args[1])
	local cat2 = frame.args[2] and mw.text.trim(frame.args[2])
	local cat3 = frame.args[3] and mw.text.trim(frame.args[3])
	local reqDataLink, dataLink = require( 'Module:Date/Data' ), {}
	local wikiList =  {}
	local currentYear = tonumber( os.date( '%Y' ) )
	local newSection = '\n\n== %s ==\n'
	
	-- copie de la table pour pouvoir la trier
	for field, dataSet in pairs( reqDataLink ) do
		-- boucle sur tous les qualificatifs ayant pour catégorie le premier paramètre
		if dataSet.cat == category
			or dataSet.cat == cat2
			or dataSet.cat == cat3
			or ( category == 'cat' and dataSet.cat == field )
		then
			if dataSet.qualificatif == field then
				table.insert( dataLink, dataSet )
			else
				if dataSet.alias then
					table.insert( dataSet.alias, field )
				else
					dataSet.alias = { field }
				end
			end
		end
	end
	table.sort(
		dataLink, 
		function(v1, v2)
			return (v1.tri or '') < (v2.tri or '')
		end
	)
	for _, dataSet in ipairs( dataLink ) do
		local monthInitialYear, initialYear
		-- définition de l'année à partir de laquelle on va tester toutes les années / mois
		if dataSet.annee and dataSet.annee.aucun and dataSet.annee.aucun < currentYear then
			local aucun = ( dataSet.annee.seul and dataSet.annee.seul[1] ) or dataSet.annee.aucun
			initialYear = math.min( aucun - math.ceil( (currentYear - aucun) / 4 ), currentYear - 50 )
		else
			initialYear = currentYear - 50
		end
		if dataSet.mois and tonumber( dataSet.mois.aucun ) and ( tonumber( dataSet.mois.aucun ) < currentYear ) then
			local aucun = dataSet.mois.aucun
			monthInitialYear = math.min( aucun - math.ceil( (currentYear - aucun) / 4 ), currentYear - 8 )
		else
			monthInitialYear = currentYear - 8
		end
		
		-- création de l'ensemble des liens
		-- ajout de lien vers les pages annuelles de l'année en court + 5 jusqu'à initialYear
		table.insert( wikiList,  string.format( newSection, dataSet.qualificatif ) )
		local suffix = ' ' .. dataSet.qualificatif
		if dataSet.alias then
			table.insert( wikiList, 'Alias : ' .. table.concat( dataSet.alias, ', ' ) )
		end
		if dataSet.mois then
			table.insert( wikiList,  '\n\n=== Années ===\n' )
		end
		table.insert( wikiList, '<div class="colonnes" style="column-width:4em;column-gap:1em;text-align:left;">' )
		for year = ( currentYear + 5 ), initialYear, -1  do
			table.insert( wikiList,  '\n* [[' .. year .. suffix ..'|' .. year .. ']]' )
		end
		table.insert( wikiList,  '\n</div>' )
		
		if dataSet.mois then
			-- insertion de liens vers les mois de l'année en cours + 1 jusqu'à monthInitialYear
			table.insert( wikiList,  '\n\n=== Mois ==='  )
			local month, sep
			for year = ( currentYear + 1 ), monthInitialYear, -1  do
				table.insert( wikiList,  '\n* ' .. year .. ' : ' )
				sep = ' • '
				for j = 1, 12 do
					month = listeMois[j] .. ' '
					if j == 12 then sep = ''
					end
					table.insert( wikiList,  '[[' .. month .. year .. suffix .. '|' .. month .. ']]' .. sep )
				end
			end
		end
	end
	
	return table.concat( wikiList )
end

return p