[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / plugins-dist / mots / inc / mots.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15 include_spip('inc/presentation');
16 include_spip('inc/actions');
17 include_spip('base/abstract_sql');
18
19 function filtre_objets_associes_mot_dist($id_mot,$id_groupe) {
20 static $occurrences = array();
21
22 // calculer tous les liens du groupe d'un coup
23 if (!isset ($occurrences[$id_groupe]))
24 $occurrences[$id_groupe] = calculer_utilisations_mots($id_groupe);
25
26 $associes = array();
27 $tables = lister_tables_objets_sql();
28 foreach ($tables as $table_objet_sql=>$infos) {
29 $nb = (isset($occurrences[$id_groupe][$table_objet_sql][$id_mot]) ? $occurrences[$id_groupe][$table_objet_sql][$id_mot] : 0);
30 if ($nb)
31 $associes[] = objet_afficher_nb($nb,$infos['type']);
32 }
33
34 $associes = pipeline('afficher_nombre_objets_associes_a',array('args'=>array('objet'=>'mot','id_objet'=>$id_mot),'data'=>$associes));
35 return $associes;
36
37 }
38
39 /**
40 * Calculer les nombres d'elements (articles, etc.) lies a chaque mot
41 *
42 * @param int $id_groupe
43 * @return array
44 */
45 function calculer_utilisations_mots($id_groupe)
46 {
47 $retour = array();
48 $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)));
49
50 foreach($objets as $o) {
51 $objet=$o['objet'];
52 $_id_objet = id_table_objet($objet);
53 $table_objet_sql = table_objet_sql($objet);
54 $infos = lister_tables_objets_sql($table_objet_sql);
55 if (isset($infos['field']) AND $infos['field']){
56 // uniquement certains statut d'objet,
57 // et uniquement si la table dispose du champ statut.
58 $statuts = "";
59 if (isset($infos['field']['statut']) OR isset($infos['statut'][0]['champ'])) {
60 // on s'approche au mieux de la declaration de l'objet.
61 // il faudrait ameliorer ce point.
62 $c_statut = isset($infos['statut'][0]['champ']) ? $infos['statut'][0]['champ'] : 'statut';
63
64 // bricoler les statuts d'apres la declaration de l'objet (champ previsu a defaut de mieux)
65 if (array_key_exists('previsu', $infos['statut'][0]) AND strlen($infos['statut'][0]['previsu'])>1) {
66 $str_statuts = $infos['statut'][0]['previsu'];
67 if ($GLOBALS['connect_statut'] !="0minirezo")
68 $str_statuts = str_replace('prepa','',$str_statuts);
69 $not = (substr($str_statuts, 0, 1) == '!'? 'NOT' : '');
70 $str_statuts = str_replace('!','',$str_statuts);
71 $Tstatuts = array_filter(explode(',', $str_statuts));
72 $statuts = " AND " . sql_in("O.$c_statut", $Tstatuts, $not);
73 }
74 // objets sans champ previsu ou avec un previsu == '!' (par ex les rubriques)
75 else
76 $statuts = " AND " . sql_in("O.$c_statut", ($GLOBALS['connect_statut'] =="0minirezo") ? array('prepa','prop','publie') : array('prop','publie'));
77 }
78 $res = sql_allfetsel(
79 "COUNT(*) AS cnt, L.id_mot",
80 "spip_mots_liens AS L
81 LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot
82 AND L.objet=" . sql_quote($objet) . "
83 LEFT JOIN " . $table_objet_sql . " AS O ON L.id_objet=O.$_id_objet" ,
84 "M.id_groupe=$id_groupe$statuts",
85 "L.id_mot");
86 foreach($res as $row) {
87 $retour[$table_objet_sql][$row['id_mot']] = $row['cnt'];
88 }
89 }
90 }
91
92 return $retour;
93 }
94 ?>