Aller au contenu

Module:RbpNote

Depi Wikipedya, ansiklopedi lib

La documentation pour ce module peut être créée à Module:RbpNote/doc

--[[ Version: 1/06/2018 à usage restreint à l'"existant" 
	sur modèles à parseur (multiples),
	vérification du paramétrage avec alias,
	génère une liste d'erreur à imprimer,
	catégorie cachée optionnelle,
	option analyse de syntaxe organique par valeur / contenu d'adresse (grille écran valeurs refusées; valeur(s) obligatoire(s))
	option analyse de syntaxe fonctionnelle par fonction d'alias / paramètre (grille filtre des doublons fonctionnels)	et dépendance simple d'un paramètre à un autre à respecter
	impression dans et hors corps de rendu, selon implantation.
	utilise (insérées dans le modèle en littéraux) les tables config du module, alias dans article, valeur modélisées 
	]]
local p = {}
-->
local function _tablov(tablovT, tablovname)
	local Tname = tablovname
	local tflag = ''
	local renvoi = "<br><br><br>>>>>dump récapitulatif de la TABLE: "..Tname.."<br>"
	local T = tablovT
	local tak = ''
	local tav = ''
	for tak, tav in pairs(T) do
			if (tav ~= nil) then 
				tflag = true 
				renvoi = renvoi.."<br> tablovkey: "..tak.." tablovvalue:"..tav..""
			else
				tflag = false
				renvoi = "pas d'éléments"
			end
	end
  return tflag, renvoi
end --fin _tablov
-->
-->
local function _xist(objet)	-->	transforme localement un objet composite "qui n'existe pas" nil &  '' (taille 0) en valeur false d'objet pour Rbp testable sans passer par pcall
	if (tostring(objet) ~= nil and #tostring(objet) > 0 ) then	return objet else return false	end
end	--fin _xist
-->
-->
local function _coulerr (objet)	 -- rouge
	local objet ='<span style="color:#d00000;">' .. objet .. '</span>'
  return objet
end	--fin _coulerr
-->
-->
local function _validation_ecran(articleargs, choix, ecran, parame, balisesargs, modelid, nb_erreurs, liste_err, RV )
--m	RV=RV.."<br>==== début écran  avec valeur reçue: "..ecran.." paramètre: "..parame
	local article_args = articleargs
	local option = choix
	local modeleid = modelid 
	local balises_args = balisesargs
	local parametre = parame
	local tableecran = ecran
	local table_ecran = {}
	table_ecran = mw.text.split( tableecran, balises_args[2] )
	local wapparie = 0 -- régime obligatoire, inf à 1  égale message d'erreur					
	for ec, ep in pairs(table_ecran) do --[[
	>2ABCDE fouille écran pour valeur paramètre-article impérative/refusée]]
--m	RV=RV.."<br>===== fouille écran (ec): "..ec.." valeur étudiée (ep): "..ep.." pour: "..parametre	
--m	if _xist(article_args[parametre]) then RV=RV.."<br> parametre à valeur dans l'article: "..article_args[parametre] else RV=RV.."<br>parametre VIDE "	end					
		if option == "refus" and article_args[parametre] == ep and ec > 1 then
		--2ABCDEF  en refus  1 item 
--m	RV=RV.."<br>======  valeur étudiée en refus  trouvée dans article  (ep): "..ep.." pour: "..parametre.."<br>==== valeur "..article_args[parametre].." en erreur par valeur refusée !"
			nb_erreurs = nb_erreurs + 1
			liste_err = liste_err.."Erreur. Modèle:"..modeleid..". Le paramètre « "..parametre.." » a une valeur non admise: « "..article_args[parametre].." ». "..table_ecran[1].."<br>"
			break
		end -- fin 2ABCDEF étude du refus
		if option == "obligatoire" and article_args[parametre] == ep  then
		--2ABCDEG étude ensemble valeurs imposées si 1 choisi
--m	RV=RV.."<br>======  valeur étudiée obligatoire trouvée  dans article  (ep): "..ep.." pour paramètre transmis: "..parametre
--m	RV=RV.."<br>======  valeur "..article_args[parametre].."acceptée par valeur obligatoire !"
			wapparie = wapparie + 1
			break
--m	else RV=RV.."<br>======  cette  valeur du modèle (ep): "..ep.." n'est pas choisie pour faire l'article avec le paramètre considéré: "..parametre.." "	
		end -- fin 2ABCDEG étude ensemble valeurs imposées
	end -- fin >2ABCDE fouille écran (impératif/refus)					
	if wapparie < 1  and option == "obligatoire" and _xist(article_args[parametre])  then -- clause pas respectée sur impératif
		nb_erreurs = nb_erreurs + 1
		liste_err = liste_err.."Erreur. Modèle:"..modeleid..". Le paramètre « "..parametre.." » a une valeur non admise: « "..article_args[parametre].." ». "..table_ecran[1].."<br>"
	end					
 return nb_erreurs, liste_err, RV
end --	 fin _ecran_valeur-non-admise			
-->
-->
local function _traitement_liste_alias(articleargs, tablealipar, parali, balisesargs, modelid, nb_erreurs, liste_err, RV)
	local article_args = articleargs
	local table_alipar = tablealipar
	local parametre = string.gsub( parali, '_P:', '', 1 )
	local modeleid = modelid 
	local balises_args = balisesargs
	local aliparnom = '' 
	local nb_alias = 0	
	for tk, tv in pairs (table_alipar) do --[[
	>2ABC fouille table alias vérifier les doublons]]
--m	RV=RV.."<br>--dans une vérif des doublons alias (et écran) tk: "..tk..", tv de la fouille: >"..tv.."<"
--m	RV=RV.."<br>--+ parametre défini: "..parametre--w.." (et  ecran: "..ecran..")"
		if (_xist(article_args[tv])) then 
		-- 2ABCE test vérif doublon alias
--m	RV=RV.."<br>---d dans article testé existe paramètre: "..tv.." à valeur dans l'article: "..article_args[tv]			
			nb_alias = nb_alias + 1
			if (nb_alias > 1) then
				nb_erreurs = nb_erreurs + 1
				liste_err = liste_err.." Erreur. Modèle:"..modeleid..". Définition de paramètre en double, doublon: « "..aliparnom.." » de valeur: « "..article_args[aliparnom].." » et « "..tv.." » de valeur: « "..article_args[tv].." »,<br> "
			end
			aliparnom = tv			
--m	RV=RV.."<br>---d nombre de valeurs dans l'article: "..nb_alias.." avec: "..tv	
		end -- fin 2ABCE test vérif doublon alias
		-->partie dissociée écran pour des erreurs de saisie
--m	RV=RV.."<br>--e"		
		if string.find(tv,'_v') == 1 then
			-- 2ABCD procédure ecran
--m	RV=RV.."<br>== écran: >"..tv.."<"
--m	RV=RV.."<br>==> début procédure refus obligatoire (aliparnom) "..aliparnom
			local option = ''
			local ecran = ' '
			if string.find(tv,'_vrefus:') == 1 then
				option = "refus"
				ecran = string.gsub( tv, '_vrefus:', '', 1 )
			elseif string.find(tv,'_vobligatoire:') == 1 then
				option = "obligatoire"
				ecran = string.gsub( tv, '_vobligatoire:', '', 1 )
			else liste_err=liste_err.."<br>!!!<br>!!!<br>ERREUR: MODELE MAL PROGRAMMÉ POUR LA GRILLE DES VALEURS EN  « refus/obligatoire » DES ALIAS. <br>!!!<br>!!!<br>"
			end	
--m	if string.find( ecran, aliparnom )  == 1 and article_args[aliparnom] ~= nil then RV=RV.."<br>===> déclenche option: "..option			
				nb_erreurs, liste_err, RV =  _validation_ecran(article_args, option, ecran, aliparnom, balises_args, modeleid, nb_erreurs, liste_err, RV) 
--m	end
		end -- fin 2ABCD partie écran procédure écran			
	end -- fin >2ABC fouille table alias vérifier les doublons et valeurs saisies
  return nb_erreurs, liste_err, RV
end -- fin _traitement_liste_alias
-->
-->
local function _chargement_alias_parametre_doublon_ecran(modeleargs, articleargs, balisesargs, modelid, nb_erreurs, liste_err, RV)										
--les alias partie 2 contiennent la séquence ;_vrefus:message-erreur-de-saisie-affiché,valeur1-refusée,valeur2...;_vobligatoire:message-erreur-de-saisie-de-valeur-affiché,valeur1-parmi-les-obligatoires,valeur2...
	local modeleid = modelid 
	local balises_args = balisesargs
	local modele_args = modeleargs
	local article_args = articleargs
	local modelindex = 0 
	for mc , mp in pairs (modele_args) do --[[
	>2A fouille modèle pour alias-paramètres avec écran]]
		modelindex = modelindex + 1
--m	RV=RV.."<br> fouille MODELE: "..modeleid.." pour alias-paramètres index: "..modelindex.."  mc: "..mc.." mp: "..mp
		local table_alipar = {}
		if string.find(mc, '_P:') == 1 then
		-- 2AB procédure des alias-paramètres écran
--m	RV=RV.."<br>-dans une définition  d' alias-paramètre écran"	
			table_alipar = mw.text.split( mp, balises_args[1] )
			-->partie exploitation liste alias
				nb_erreurs, liste_err, RV = _traitement_liste_alias(article_args, table_alipar, mc, balises_args, modeleid, nb_erreurs, liste_err, RV)
		end -- fin 2AB procédure alias-paramètre 
	end -- fin >2A fouille modèle pour alias-paramètres  et écran
  return nb_erreurs, liste_err, RV
end -- fin 2A (partie 2) _chargement_alias_parametre_doublon_ecran
-->
-->
-->partie 1
local function _validation_filtre_liaison(articleargs, tableparams, paramf, balisesargs, modelid, nb_erreurs, liste_err, RV )
--les paramètres partie 1 contiennent la séquence ;_filtre:paramètre-concerné,message-de-filtrage-affiché,autre-paramètre-prééminent,...,dernier-paramètre-normé-sur-édition-visuelle
	local article_args = articleargs
	local modeleid = modelid 
	local balises_args = balisesargs
	local parametre = paramf
	local table_params = tableparams
--m	RV=RV.."<br> ¤ DEBUT filtrage de parametre article: "..parametre
	local fflag = false
	for fc, fp in pairs(table_params) do --[[
	>1ABCD selection filtre - selection liaison]]
--m	RV=RV.."<br> ¤¤ dans filtrage de parametre article: "..parametre..", recherche des filtres pour lui sur: "..fp
		local selecte = fp
		local table_selecte = mw.text.split(selecte,balises_args[2])
		--> filtre
		if 	table_selecte[1] == ("_filtre:"..parametre )	 then
		--1ABCDE ventilation des éléments du filtre	
--m	RV=RV.."<br> ¤¤* paramètre article sélectionné: "..parametre.." pour liste: "..fp.." <<<<<filtre<<<<<"
			for sc, sp in pairs(table_selecte) do --[[
			>1ABCDEFG fouille sélection prééminent]]
--m	RV=RV.."<br> ¤¤**  fouille de table_selecte (sc):"..sc..", valeur (sp): "..sp			
				if sc > 2 then 
					if _xist(article_args[sp]) then
--m	RV=RV.."<br> ¤¤** un paramètre d'article plus select nom:"..sp..", valeur: "..article_args[sp].." EXISTE pour le paramètre donné: "..parametre									
						if nb_erreurs < 1 then	nb_erreurs = 1	end
						liste_err = liste_err.."Avertissement! Modèle:"..modeleid..". Le paramètre « "..sp.." », valeur: « "..article_args[sp].." » est en double avec le paramètre «  "..parametre..", » de valeur: « "..article_args[parametre].." » , ce dernier est à supprimer. "..table_selecte[2].."<br>"
					end
				end
			end -- fin >1ABCDEFG
--m	else
--m	RV=RV.."<br> ¤¤¤ paramètre article pas sélectionné: "..parametre.." pour liste, la valeur (fp): "..fp.." le string gsub (fp): "..string.gsub( fp, '_filtre:', '', 1 )
		end -- fin 1ABCDE ventilation des éléments du filtre
		-->liaison 
		if 	table_selecte[1] == ("_liaison:"..parametre )	 then
		--1ABCDH ventilation des éléments de la liaison hiérarchique	
--m	RV=RV.."<br> ¤¤# paramètre article sélectionné: "..parametre.." à valeur: "..article_args[parametre].." pour liste: "..fp.." <<<<<liaison<<<<<"
			for sc, sp in pairs(table_selecte) do --[[
			>1ABCDHI fouille sélection dépendance]]
--m	RV=RV.."<br> ¤¤##  fouille de table_selecte (sc):"..sc..", valeur (sp): "..sp	
				if not(_xist(article_args[sp])) and sc > 2 then
--m	RV=RV.."<br> ¤¤### EXISTE PAS  paramètre PERE chargé (sp):"..sp.." pour le paramètre donné: "..parametre									
					nb_erreurs = nb_erreurs + 1	
					liste_err = liste_err.."Erreur. Modèle:"..modeleid..". Le paramètre « "..sp.." » n'existe pas, le paramètre «  "..parametre.." », de valeur: « "..article_args[parametre].." » , en est dépendant. "..table_selecte[2].."<br>"
--m		else  RV=RV.."<br> ¤¤### EXISTE ou l < 2 !!!!!!!! paramètre PERE chargé (article_args[sp]) ou 2 premiers: "				
				end
			end -- fin >1ABCDHI
--m	else	RV=RV.."<br> ¤¤¤ paramètre article pas sélectionné: "..parametre.." pour liste, la valeur (fp): "..fp.." le string gsub liaison (fp): "..string.gsub( fp, '_liaison:', '', 1 )
		end -- fin 1ABCDH liaison
	end -- fin >1ABCD selection filtre selection liaison								
 return nb_erreurs, liste_err, RV
end -- fin _validation_filtre_liaison
-->
-->
local function _traitement_liste_parametres(articleargs,tableparams, paramp, balisesargs, modelid, pvalide, nb_erreurs, liste_err, RV)
	local article_args = articleargs
	local modeleid = modelid 
	local balises_args = balisesargs
	local parametre = paramp
	local table_params = tableparams
	local pvalide = false
	for tk, tv in pairs(table_params) do --[[
	>1AB fouille table-parametres déclarés pour appariement parametre article]]
--m	RV=RV.."<br>°° fouille des paramètres déclarés, tableindex: "..tk..", paramètre déclaré: >"..tv.."< face au paramètre article: >"..parametre.."<"
--m	if string.find(tv,parametre,1) == 1 then RV=RV.."<br>!!!!!!!!!!!!!oui" else RV=RV.." (NON PAS IDENTIQUE)" end	
		if (parametre == tv) then	
		-- 1ABC validation du paramètre article
			pvalide = true
--m	RV=RV.."<br>°°° paramètre article valide: "..parametre..", idem valeur modèle-table: "..tv.." "
------> ;_filtre:filtré,message-de-filtrage-affiché,auteur,auteur1,nom1,prénom1 (suivants préférés au premier si écriture doublon fonctionnel)
			nb_erreurs, liste_err, RV =  _validation_filtre_liaison(article_args, table_params, parametre, balisesargs, modelid, nb_erreurs, liste_err, RV)
--			break -- retour, paramètre traité		
	else -- 1ABC RV=RV.."<br>°°° paramètre article non valide: "..parametre..", valeur: "..tv
		end -- fin 1ABC procédure de validation parametre article
	end -- fin >1AB fouille modèle paramètres trouver déclaré appareillé au parametre article
	if not(pvalide) then 
		nb_erreurs = nb_erreurs + 1
		liste_err = liste_err.." Erreur. Modèle:"..modeleid..". Paramètre non valide « "..parametre.." » valeur: « "..article_args[parametre].." »,<br> "
	end	
---->			
 return nb_erreurs, liste_err, RV
end --fin _traitement_liste_parametres
-->
-->
local function _validation_parametres_article_filtre_liaison(modeleargs, articleargs, balisesargs, modelid, double_barre, nb_erreurs, liste_err, RV)
	local modele_args = modeleargs
	local article_args = articleargs
	local modeleid = modelid 
	local balises_args = balisesargs
	--> modele_args
	local mc = ''	-- pairs	clef
	local mp = ''	-- pairs	paramètre
	--> article_args
	local ac = ''	-- pairs	clef
	local ap = ''	-- pairs	paramètre							
	local parametres = modele_args["_parametres"] -- ensemble des paramètres valides
--m	RV = RV.."<br> PARAMETRES ensemble: "..parametres	
	table_params = mw.text.split( parametres, balises_args[1] )
	local i = 0	
	for ac,ap in pairs(article_args) do --[[
	>1A fouille validation des paramètres article]]
		i = i + 1
--m	RV=RV.."<br>°validation paramètres article, index: "..i.."; ac: "..ac..", ap: "..ap.." double_barre: >"..double_barre.."<"	
		if (modele_args[i] == nil  and ap == '' and double_barre == 'refus') then --> ||
			nb_erreurs = nb_erreurs + 1
			liste_err = liste_err.."[[:Catégorie:DOUBLE BARRE]]".." Erreur. Modèle:"..modeleid..". Définition de paramètre non-nommé à valeur absente par || ou |}} ,<br> "
		end -- fin test DOUBLE BARRE
		local parametre = tostring(ac)
		nb_erreurs, liste_err, RV = _traitement_liste_parametres(article_args, table_params, parametre, balises_args, modeleid, pvalide, nb_erreurs, liste_err, RV)								
	end -- fin >B fouille validation paramètres article	
  return nb_erreurs, liste_err, RV
end -- fin 1A ( partie 1)  _validation_parametres-article_filtre
-->
-->
-->
function p.verifier_parametres_ (frame)
local RV = "TRACE:VVVV<br>" -- y compris les fonctions
	local referr = '' -- résultat final renvoyé
	local modeleid = " "
	local double_barre = " "
	local caterr = ''
	local nb_erreurs = 0 -- pour les fonctions
	local liste_err = '' -- pour les fonctions
	--> 
	local modele_args = frame.args -- entrée des fonctions
	local article_args = frame:getParent().args -- entrée des fonctions
	-->
	local configliste = modele_args["__configuration"]
	local config_args = {}
	config_args = mw.text.split(configliste,"¿")
	local baliseslist = ''
	local balises_args = {}
	---->entrer la configuration des balises pour le décodage des tables 
	---->du modèle sans avoir à recompiler ce module général		
			baliseslist = config_args[1]
			balises_args = mw.text.split(baliseslist,"÷")
--m	RV=RV.."<br> baliseslist:>"..baliseslist.."<"		
--m RV=RV.."<br> balise1:>"..balises_args[1].."<"	--profondeur 1	table
--m	RV=RV.."<br> balise2:>"..balises_args[2].."<"	--profondeur 2	sous-table
--m	RV=RV.."<br> balise1:>"..balises_args[3].."<"	--ne sert pas actuellement
	for cc, cp in pairs(config_args) do
--m	RV=RV.."<br> cc: "..cc.." cp: >"..cp.."<"
		if string.find(cp, '__modèle≈',1) == 1 then	modeleid = string.gsub( cp, '__modèle≈', '', 1 )	end
		if string.find(cp, '__double_barre≈',1) == 1 then	double_barre = string.gsub( cp, '__double_barre≈', '', 1 )	end
		if string.find(cp, '__catégorie≈',1) == 1 then	caterr = string.gsub( cp, '__catégorie≈', '', 1 )	end
	end
--m	if _xist(modeleid) then RV=RV.."<br> existe: "..modeleid else RV=RV.."<br> modelid VIDE " end
--m	if _xist(double_barre) then RV=RV.."<br> existe: "..double_barre else RV=RV.."<br> double_barre VIDE " end
--m	if _xist(caterr) then RV=RV.."<br> existe: "..caterr else RV=RV.."<br> caterr VIDE " end
	--> partie 1
		nb_erreurs, liste_err, RV = _validation_parametres_article_filtre_liaison(modele_args, article_args, balises_args, modeleid, double_barre, nb_erreurs, liste_err, RV)
	--> partie 2			
		nb_erreurs, liste_err, RV = _chargement_alias_parametre_doublon_ecran(modele_args, article_args, balises_args, modeleid, nb_erreurs, liste_err, RV)
	--> partie 3 renvoi à modèle
		if (nb_erreurs > 0) then --> 
			referr = caterr.._coulerr("<br> nb erreurs: "..nb_erreurs.."<br>"..liste_err)		
		end
 return referr --..RV-- fin liste des erreurs avec catégorisation	
end --fin verifier_parametres_
-->				
return p