Aller au contenu

Module:Nsm/Lib/Category

Une page de Wikiversité, la communauté pédagogique libre.

La documentation pour ce module peut être créée à Module:Nsm/Lib/Category/Documentation

-- Namespace monitor - Cette librairie regroupe les fonctions relatives aux catégories.
-- Interroge les donnés collectées par le script cat.py et stockées dans le module Nsm/TAble/14.


function category_members(cat_name) -- Reçoit le nom court de la catégorie et retourne la ligne de données relatives à la catégorie à partir de la table ns_catégorie
	local import_cat = require("Module:Nsm/Table/14") -- À partir du module
	local t_cat = import_cat.t_pages           -- Importe la table des catégories
	local my_cat = 'fr:Catégorie:' .. cat_name -- ATTENTION Compile prefixe de la catégorie
	local cat_set = {}                  -- Table des résultats
	for k_cat, v_cat in pairs(t_cat) do -- pour chaque page de ns categorie
		if v_cat.page == my_cat then    -- si le titre page = titre catégorie
			cat_set[k_cat] = v_cat		-- ajoute la ligne ns_catégorie
			--Modifier cat_set[k_cat] = tcat[k_cat]]
		end end 
	return cat_set -- retourne une table au format ns_t en sortie
end	

function articles(category) -- récupère la liste des articles depuis depuis la table ns_catégorie via category_members() ; retourne une table simple.
	local t = category_members(category)
	local articles = {} 
	for k, v in pairs(t) do articles = v.articles end --ATTENTION si maxn>1
	return articles
end

function ns_r_articles(cat_list) --[[ LIB ORGANISER Fusionner avec articles(category) reçoit la liste des subcategory et collecte les articles contenus, retourne une liste simple]]--
	local import_cat = require("Module:Nsm/Table/14") -- à partir du module ns_catégorie
	local t_cat = import_cat.t_pages --importe table des pages de catégorie
	local articles = {}              -- Tables des résultats
	for kc, category in pairs(cat_list) do -- Pour chaque catégorie
		for k, v in pairs(t_cat) do        -- Cherche dans la table ns
			if v.page == category then     -- Trouve la page de la catégorie
				if v.articles ~= nil and table.maxn(v.articles) > 0 then -- si article
					for ka, article in pairs(v.articles) do -- chaque article
						table.insert(articles, article)     -- copie dans la liste
					end	end end	end	end
	return articles -- ATTENTION RETOURNE LISTE SIMPLE
end

function ns_r_subcats(cat_name, rlist) --[[ LIB ORGANISER liste recursive des catégories, copier dans libraririe , attention table t_cat t_pages ; utilise format long des titres de catégorie.]]--
	local import_cat = require("Module:Nsm/Table/14") -- à partir du module ns_catégorie
	local t_cat = import_cat.t_pages --importe table des pages de catégorie
	local tmp =  {} --POSITION
	if cat_name ~= nil and table.maxn(cat_name) > 0 then --OUPS !
		for k, v in pairs(t_cat) do  -- Itération table des catégories
			for ks, subc in pairs(cat_name) do -- comparaison avec liste
				if v.page == subc then         -- catégorie dans la liste 
					if v.subcats ~= nil and table.maxn(v.subcats) > 0 then --si subcats
						for ks, subcat in pairs(v.subcats) do -- pour chaque subcat
							table.insert(rlist, subcat) -- Ajoute dans rlist
							table.insert(tmp, subcat)   -- Ajoute dans tmp
						end	end	end	end	end	end
	if tmp ~= nil and table.maxn(tmp) > 0 then -- Si tmp contient des subcats
		rlist = ns_r_subcats(tmp, rlist)       -- Execute de nouveau
	end
	return rlist -- Retourne la liste recursive des sous-catégories
end



function chk_subcat(cat_name) --[[Affiche les sous-catégories de la catégorie passée en argument (si la catégorie est python surveillée)]]
	local import_cat = require("Module:Nsm/Table/14") 
	local t_cat = import_cat.t_pages           -- Importe la table des catégories
	local my_cat = 'fr:Catégorie:' .. cat_name -- ATTENTION prefixe de la catégorie
	local t_subcats = {}                       -- table des résultats, sous-catégories
	for k_cat, v_cat in pairs(t_cat) do        -- pour chaque page de ns_categorie
		if v_cat.page == my_cat then           -- si le titre page = titre catégorie
			for k_sub, v_subcat in pairs(v_cat.subcats) do -- placer chaque sous-cat
				t_subcats[k_sub] = v_subcat end end end    -- dans la table de sortie
	return t_subcats  -- retourne une table (ns_t) en sortie
end	

function find_cat(t, pfix) --[[ATTENTION RENOMMER PRODUIT LES STAT pour DPT dpt_cat_stat() reçoit une table de pages et un prefix à tronquer (option), lit la table des catégories et affiche le lien vers la catégorie éponyme]]-- 
	--local r = st_open .. st_title .. '!Catégorie\n!Nombre d\'articles\n|-\n' 
	local data_set = {} -- table de sortie
	local cut = string.len(pfix) + 1 --longueur prefixe plus 1 pour le separateur ":"
	index = 0 -- REMPLACER par '-i' dans st_print ?
	for k, v in pairs(t) do 
		index = index +1
		p_name = string.sub(v.page, cut) -- tronque prefix
		title = mw.title.new(p_name, 14) -- title = nom tronqué 14=ns_category
		title_category = lang .. ':' .. title.fullText -- RECOLLE LE pfix lang fr:
		all_in_cat = get_all_in_cat(title_category)
		-- Construire une table !
		incat = 'incat'
		v[incat] = title_category
		nr_art = 'nr_art'
		v[nr_art] = all_in_cat --Nombre Recursif d'articles dans la cat
		data_set[index] = v
		--r = r .. cel(index) .. cel(lnk(v.page)) .. cel(lnk(title.fullText)).. cel_opt(all_in_cat) .. st_endline
	end
	--r = r .. st_close
	colonnes = {'page', 'incat', 'nr_art'} 
	tab = st_print(data_set, colonnes)
	--return r
	return tab
end

function get_all_in_cat(title) -- Reçoit le titre de la page format Python. Retourne le nombre recursif de membres dans la catégorie.
	local n_members = 0 -- Initialise le compteur de membres
	local import_category = require("Module:Nsm/Table/14") -- Depuis le module catégorie
	local t_category = import_category.t_pages -- Importe la table des pages
	for kcat, category in pairs(t_category) do -- pour chaque page catégorie
		--test = category.page .. '\n' .. title
		if category.page == title then -- selectionne la page au titre correspondant
			n_members = category.all_in_cat -- nombre recursif de pagess dans la cat
		end end
	return n_members -- Retourne le nombre recursif de membres dans la catégorie
end

function chk_cat(cat_name, t) -- reçoit le titre court de la catégorie et la table à comparer. 
	local r=''
	local import_cat = require("Module:Nsm/Table/14") 
	local t_cat = import_cat.t_pages       -- Importe la table des catégories
	category = 'fr:Catégorie:' .. cat_name -- Compile le titre complet de la catégorie
	r = r .. ';Supervision de :' .. '[[:'..category..']]' ..'\n' -- Affiche le nom de la cat
	r1 = '' -- sous-chaine pour is_in_table : hors-sujet
	for k_cat, v_cat in pairs(t_cat) do -- parcours la table ns_catégories
		if v_cat.page == category then  -- si la page correspond à la catégorie cherchée
			r = r .. ';Les articles "hors-sujet" ne sont pas dans la table de données :\n' -- label de la liste
			for k_art, article in ipairs(v_cat.articles) do -- parcours la liste des articles
				is_in_table = false             -- initialise le test
				for k_t, v_table in pairs(t) do -- parcours la table à comparer
					--c = 0
					if v_table.page == article  -- La page est présente dans les articles de cette catégorie
					then is_in_table = true end -- test positif
				end  -- si test negatif affiche resultat
				if is_in_table == false then
					r1 = r1 .. '# L\'article [['.. article .. ']] de la catégorie '.. v_cat.page .. ' n\'est pas dans la table de données.\n' end
			end
			-- Teste résultat vide
			if r1 == '' then r1 = r1 .. '\'\'Aucune page hors-sujet\'\'\n' end
			r = r..r1 .. ';Les pages suivantes sont absentes de la catégorie :\n'  -- label de la liste
			-- processus inverse
			r2 ='' -- sous-chaine pour pages absentes
			for k, v2 in pairs(t) do -- Itération de la table à comparer
				is_in_cat = false    -- dans la catégorie
				for k, article in ipairs(v_cat.articles) do --liste des articles  
					if article == v2.page then is_in_cat = true end -- Cherche
				end
				if is_in_cat == false then
					-- Ajoute table résultats NOT_IN_NS
					r2 = r2  .. ': ' .. k .. ' : ' .. v2.page .. '\n' end end
			-- Teste si vide NOT_IN_NS
			if r2 == '' then r2 = '\'\'Aucune page absente\'\'\n' end -- tester et commenter si nul
		end end
	r = r ..r2 -- Compile le resultat
	return r
end