Module:Nsm/Lib/Category
< Module:Nsm | Lib
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