source: spip-zone/_core_/plugins/mots/inc/mots.php @ 93092

Last change on this file since 93092 was 93092, checked in by gilles.vincent@…, 5 years ago

Mise en forme plus homegene et plus lisible, pour les declarations des fonctions
Regles :

  • un espace après chaque virgule
  • un espace avant et apres chaque '='
File size: 4.4 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2015                                                *
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/**
14 * Déclaration de filtres pour les squelettes
15 *
16 * @package SPIP\Mots\Filtres
17**/
18if (!defined("_ECRIRE_INC_VERSION")) return;
19
20include_spip('inc/presentation');
21include_spip('inc/actions');
22include_spip('base/abstract_sql');
23
24/**
25 * Compte le nombre d'objets associés pour chaque type d'objet, liés
26 * à un mot clé donné.
27 *
28 * @pipeline_appel afficher_nombre_objets_associes_a
29 *
30 * @param int $id_mot
31 *     Identifiant du mot clé
32 * @param int $id_groupe
33 *     Identifiant du groupe parent
34 * @return string[]
35 *     Tableau de textes indiquant le nombre d'éléments tel que '3 articles'
36**/
37function filtre_objets_associes_mot_dist($id_mot, $id_groupe) {
38        static $occurrences = array();
39
40        // calculer tous les liens du groupe d'un coup
41        if (!isset ($occurrences[$id_groupe]))
42                $occurrences[$id_groupe] = calculer_utilisations_mots($id_groupe);
43
44        $associes = array();
45        $tables = lister_tables_objets_sql();
46        foreach ($tables as $table_objet_sql=>$infos) {
47                $nb = (isset($occurrences[$id_groupe][$table_objet_sql][$id_mot]) ? $occurrences[$id_groupe][$table_objet_sql][$id_mot] : 0);
48                if ($nb)
49                        $associes[] = objet_afficher_nb($nb,$infos['type']);
50        }
51
52        $associes = pipeline('afficher_nombre_objets_associes_a',array('args'=>array('objet'=>'mot','id_objet'=>$id_mot),'data'=>$associes));
53        return $associes;
54
55}
56
57/**
58 * Calculer les nombres d'éléments (articles, etc.) liés à chaque mot
59 * d'un groupe de mots
60 *
61 * @param int $id_groupe
62 *     Identifiant du groupe de mots
63 * @return array
64 *     Couples (tables de liaison => mots).
65 *     Mots est un tableau de couples (id_mot => nombre d'utilisation)
66 */
67function calculer_utilisations_mots($id_groupe)
68{
69        $retour = array();
70        $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)));
71
72        foreach($objets as $o) {
73                $objet=$o['objet'];
74                $_id_objet = id_table_objet($objet);
75                $table_objet_sql = table_objet_sql($objet);
76                $infos = lister_tables_objets_sql($table_objet_sql);
77                if (isset($infos['field']) AND $infos['field']){
78                        // uniquement certains statut d'objet,
79                        // et uniquement si la table dispose du champ statut.
80                        $statuts = "";
81                        if (isset($infos['field']['statut']) OR isset($infos['statut'][0]['champ'])) {
82                                // on s'approche au mieux de la declaration de l'objet.
83                                // il faudrait ameliorer ce point.
84                                $c_statut = isset($infos['statut'][0]['champ']) ? $infos['statut'][0]['champ'] : 'statut';
85
86                                // bricoler les statuts d'apres la declaration de l'objet (champ previsu a defaut de mieux)
87                                if (array_key_exists('previsu', $infos['statut'][0]) AND strlen($infos['statut'][0]['previsu'])>1) {
88                                        $str_statuts = $infos['statut'][0]['previsu'];
89                                        if ($GLOBALS['connect_statut'] !="0minirezo")
90                                                $str_statuts = str_replace('prepa','',$str_statuts);
91                                        $not = (substr($str_statuts, 0, 1) == '!'? 'NOT' : '');
92                                        $str_statuts = str_replace('!','',$str_statuts);
93                                        $Tstatuts = array_filter(explode(',', $str_statuts));
94                                        $statuts = " AND " . sql_in("O.$c_statut",  $Tstatuts, $not);
95                                }
96                                // objets sans champ previsu ou avec un previsu == '!' (par ex les rubriques)
97                                else
98                                        $statuts = " AND " . sql_in("O.$c_statut",  ($GLOBALS['connect_statut'] =="0minirezo")  ? array('prepa','prop','publie') : array('prop','publie'));
99                        }
100                        $res = sql_allfetsel(
101                                "COUNT(*) AS cnt, L.id_mot",
102                                "spip_mots_liens AS L
103                                        LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot
104                                                AND L.objet=" . sql_quote($objet) . "
105                                        LEFT JOIN " . $table_objet_sql . " AS O ON L.id_objet=O.$_id_objet" ,
106                                "M.id_groupe=$id_groupe$statuts",
107                                "L.id_mot");
108                        foreach($res as $row) {
109                                $retour[$table_objet_sql][$row['id_mot']] = $row['cnt'];
110                        }
111                }
112        }
113
114        return $retour;
115}
116?>
Note: See TracBrowser for help on using the repository browser.