X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fplugins-dist%2Fmots%2Finc%2Fmots.php;h=2bc85d06a53b98243881d486e60c34e24098c8db;hb=4f443dce95ff6f8221c189880a70c74ce1c1f238;hp=06028cc664dc7fab8ba9ed65b8cd881804ec3887;hpb=4a628e9b277d3617535f99d663ca79fa2e891177;p=lhc%2Fweb%2Fwww.git diff --git a/www/plugins-dist/mots/inc/mots.php b/www/plugins-dist/mots/inc/mots.php index 06028cc6..2bc85d06 100644 --- a/www/plugins-dist/mots/inc/mots.php +++ b/www/plugins-dist/mots/inc/mots.php @@ -10,80 +10,119 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Déclaration de filtres pour les squelettes + * + * @package SPIP\Mots\Filtres + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/presentation'); include_spip('inc/actions'); include_spip('base/abstract_sql'); -function filtre_objets_associes_mot_dist($id_mot,$id_groupe) { +/** + * Compte le nombre d'objets associés pour chaque type d'objet, liés + * à un mot clé donné. + * + * @pipeline_appel afficher_nombre_objets_associes_a + * + * @param int $id_mot + * Identifiant du mot clé + * @param int $id_groupe + * Identifiant du groupe parent + * @return string[] + * Tableau de textes indiquant le nombre d'éléments tel que '3 articles' + **/ +function filtre_objets_associes_mot_dist($id_mot, $id_groupe) { static $occurrences = array(); // calculer tous les liens du groupe d'un coup - if (!isset ($occurrences[$id_groupe])) + if (!isset($occurrences[$id_groupe])) { $occurrences[$id_groupe] = calculer_utilisations_mots($id_groupe); + } $associes = array(); $tables = lister_tables_objets_sql(); - foreach ($tables as $table_objet_sql=>$infos) { + foreach ($tables as $table_objet_sql => $infos) { $nb = (isset($occurrences[$id_groupe][$table_objet_sql][$id_mot]) ? $occurrences[$id_groupe][$table_objet_sql][$id_mot] : 0); - if ($nb) - $associes[] = objet_afficher_nb($nb,$infos['type']); + if ($nb) { + $associes[] = objet_afficher_nb($nb, $infos['type']); + } } - $associes = pipeline('afficher_nombre_objets_associes_a',array('args'=>array('objet'=>'mot','id_objet'=>$id_mot),'data'=>$associes)); + $associes = pipeline( + 'afficher_nombre_objets_associes_a', + array('args' => array('objet' => 'mot', 'id_objet' => $id_mot), + 'data' => $associes) + ); + return $associes; } /** - * Calculer les nombres d'elements (articles, etc.) lies a chaque mot + * Calculer les nombres d'éléments (articles, etc.) liés à chaque mot + * d'un groupe de mots * * @param int $id_groupe + * Identifiant du groupe de mots * @return array + * Couples (tables de liaison => mots). + * Mots est un tableau de couples (id_mot => nombre d'utilisation) */ -function calculer_utilisations_mots($id_groupe) -{ +function calculer_utilisations_mots($id_groupe) { $retour = array(); - $objets = sql_allfetsel('DISTINCT objet', array('spip_mots_liens AS L', 'spip_mots AS M'), array('L.id_mot=M.id_mot', 'M.id_groupe='.intval($id_groupe))); + $objets = sql_allfetsel( + 'DISTINCT objet', + array('spip_mots_liens AS L', 'spip_mots AS M'), + array('L.id_mot=M.id_mot', 'M.id_groupe=' . intval($id_groupe)) + ); - foreach($objets as $o) { - $objet=$o['objet']; + foreach ($objets as $o) { + $objet = $o['objet']; $_id_objet = id_table_objet($objet); $table_objet_sql = table_objet_sql($objet); $infos = lister_tables_objets_sql($table_objet_sql); - if (isset($infos['field']) AND $infos['field']){ + if (isset($infos['field']) and $infos['field']) { // uniquement certains statut d'objet, // et uniquement si la table dispose du champ statut. - $statuts = ""; - if (isset($infos['field']['statut']) OR isset($infos['statut'][0]['champ'])) { + $statuts = ''; + if (isset($infos['field']['statut']) or isset($infos['statut'][0]['champ'])) { // on s'approche au mieux de la declaration de l'objet. // il faudrait ameliorer ce point. $c_statut = isset($infos['statut'][0]['champ']) ? $infos['statut'][0]['champ'] : 'statut'; // bricoler les statuts d'apres la declaration de l'objet (champ previsu a defaut de mieux) - if (array_key_exists('previsu', $infos['statut'][0]) AND strlen($infos['statut'][0]['previsu'])>1) { + if (array_key_exists('previsu', $infos['statut'][0]) and strlen($infos['statut'][0]['previsu']) > 1) { $str_statuts = $infos['statut'][0]['previsu']; - if ($GLOBALS['connect_statut'] !="0minirezo") - $str_statuts = str_replace('prepa','',$str_statuts); - $not = (substr($str_statuts, 0, 1) == '!'? 'NOT' : ''); - $str_statuts = str_replace('!','',$str_statuts); + if ($GLOBALS['connect_statut'] != '0minirezo') { + $str_statuts = str_replace('prepa', '', $str_statuts); + } + $not = (substr($str_statuts, 0, 1) == '!' ? 'NOT' : ''); + $str_statuts = str_replace('!', '', $str_statuts); $Tstatuts = array_filter(explode(',', $str_statuts)); - $statuts = " AND " . sql_in("O.$c_statut", $Tstatuts, $not); + $statuts = ' AND ' . sql_in("O.$c_statut", $Tstatuts, $not); + } // objets sans champ previsu ou avec un previsu == '!' (par ex les rubriques) + else { + $statuts = ' AND ' . sql_in( + "O.$c_statut", + ($GLOBALS['connect_statut'] == '0minirezo') ? array('prepa', 'prop', 'publie') : array('prop', 'publie') + ); } - // objets sans champ previsu ou avec un previsu == '!' (par ex les rubriques) - else - $statuts = " AND " . sql_in("O.$c_statut", ($GLOBALS['connect_statut'] =="0minirezo") ? array('prepa','prop','publie') : array('prop','publie')); } $res = sql_allfetsel( - "COUNT(*) AS cnt, L.id_mot", - "spip_mots_liens AS L + 'COUNT(*) AS cnt, L.id_mot', + 'spip_mots_liens AS L LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot - AND L.objet=" . sql_quote($objet) . " - LEFT JOIN " . $table_objet_sql . " AS O ON L.id_objet=O.$_id_objet" , + AND L.objet=' . sql_quote($objet) . ' + LEFT JOIN ' . $table_objet_sql . " AS O ON L.id_objet=O.$_id_objet", "M.id_groupe=$id_groupe$statuts", - "L.id_mot"); - foreach($res as $row) { + 'L.id_mot' + ); + foreach ($res as $row) { $retour[$table_objet_sql][$row['id_mot']] = $row['cnt']; } } @@ -91,4 +130,3 @@ function calculer_utilisations_mots($id_groupe) return $retour; } -?>