source: spip-zone/_plugins_/mots_objets/mots_objets_pipelines.php @ 45357

Last change on this file since 45357 was 45357, checked in by marcimat@…, 9 years ago
  • Suppression également des liaisons lorsqu'un mot n'existe plus ! (complément à [45353])
File size: 6.6 KB
Line 
1<?php
2/**
3 * Plugin mots-objets pour Spip 2.0
4 * Licence GPL
5 * Adaptation Cyril MARION - (c) 2010 Ateliers CYM http://www.cym.fr
6 * Grâce au soutien actif de Matthieu Marcillaud - Magraine
7 *
8 */
9
10include_spip('inc/gouverneur_de_mots');
11 
12
13
14/**
15 * Ajout du bloc d'attribution de mot-clé
16 * sur la page de visualisation d'un auteur
17**/
18function mots_objets_affiche_milieu($flux) {
19
20        static $ou = false;
21        if ($ou === false) {
22                $ou = mots_objets_get_affiche_milieu();
23        }
24
25        // si on est sur une page ou il faut inserer les mots cles...
26        if (in_array($flux['args']['exec'], array_keys($ou))) {
27
28                $me = $ou[ $flux['args']['exec'] ];
29
30                // on récupère l'identifiant de l'objet...
31                if ($id_objet = $flux['args'][ $me->_id_objet ]
32                OR  $id_objet = _request($me->_id_objet) ) {
33                        $flux['data'] .= mots_objets_ajouter_selecteur_mots($me->objet, $id_objet, array(
34                                'exec_url' => $flux['args']['exec']
35                        ));
36                       
37                }
38        }
39
40        // pour selecteur generique de Grappes... (toutati)
41        if (defined('_DIR_PLUGIN_GRAPPES')) {
42                $flux = mots_objets_ajouter_selecteur_mots_grappes($flux);
43        }
44         
45        return $flux;
46}
47
48
49
50/**
51 * Retourne le selecteur de mots pour un objet donnee
52 *
53 * @param string $objet : nom de l'objet
54 * @param int $id_objet : identifiant de l'objet
55 * @param array $opt options
56 *              @param string $cherche_mot      un mot cherché particulier
57 *              @param string $select_groupe    un/des groupe particulier ?
58 *              @param bool $editable   autorisé ou non à voir ajouter des mots
59 *              @param bool
60 *              @param string $exec_url url de exec de retour.
61 *
62 * @return string       HTML produit.
63**/
64function mots_objets_ajouter_selecteur_mots($objet, $id_objet, $opt = array()) {
65
66        if (!isset($opt['flag_editable'])) {
67                $opt['flag_editable'] = autoriser('modifier', $objet, $id_objet);
68        }
69        // pas beau !
70        if (!isset($opt['cherche_mot'])) {
71                $opt['cherche_mot'] = _request('cherche_mot');
72        }
73        // pas beau !
74        if (!isset($opt['select_groupe'])) {
75                $opt['select_groupe'] = _request('select_groupe');
76        }
77        // pas beau !
78        if (!isset($opt['exec_url'])) {
79                $opt['exec_url'] = '';
80        }
81       
82        $editer_mots = charger_fonction('editer_mots', 'inc');
83
84        return $editer_mots(
85                $objet, $id_objet,
86                $opt['cherche_mot'], $opt['select_groupe'],
87                $opt['flag_editable'], false, $opt['exec_url']
88        );
89
90}
91
92
93/**
94 * (toutati [41274] et suivants)
95 *
96 * Ajoute un selecteur générique d'auteur ou document sur la page mots
97 * (avec le plugin grappes)
98 *
99 * @param
100 * @return
101**/
102function mots_objets_ajouter_selecteur_mots_grappes($flux) {
103        ///alm
104        if ($exec = $flux['args']['exec']) {
105                switch ($exec){
106                        case 'mots_edit':
107                                $source = 'mots';
108                                $id_source = $flux['args']['id_mot'];
109                                break;
110                        default:
111                                $source = $id_source = '';
112                                break;
113                }
114                if ($source && $id_source) {
115                // grappes recup du code +prive/lister_objets.html +prive/inc-lister-auteurs.html
116                                                $lister_objet = charger_fonction('grappes_lister_objets','inc');
117
118                       
119                        //On affiche la liste des auteurs liŽs ou des documents sur la page du mot-clef (si auteur liŽ ˆ groupe)
120                        if($source == 'mots') {
121                                $plusource='documents';
122                                $parent = sql_fetsel('id_groupe','spip_mots',"id_mot=$id_source");
123                                $parent = $parent['id_groupe']; 
124                                $res = sql_allfetsel('id_groupe,titre','spip_groupes_mots',"tables_liees REGEXP '(^|,)$plusource($|,)' AND id_groupe=$parent");
125                                //retourne 1 seul groupe ou rien
126                                foreach($res as $row) {
127                                $flux['data'] .= $lister_objet($plusource,$source,$id_source);
128                                }
129                               
130                                $plusource='auteurs';
131                                $parent = sql_fetsel('id_groupe','spip_mots',"id_mot=$id_source");
132                                $parent = $parent['id_groupe']; 
133                                $res = sql_allfetsel('id_groupe,titre','spip_groupes_mots',"tables_liees REGEXP '(^|,)$plusource($|,)' AND id_groupe=$parent");
134                                //retourne 1 seul groupe ou rien
135                                foreach($res as $row) {
136                                 $flux['data'] .= $lister_objet('auteurs',$source,$id_source); 
137                                }
138                               
139                                       
140                        }
141                       
142                }
143         }
144         return $flux;
145}
146
147
148
149
150// Ajout de l'objet de type auteur
151function mots_objets_libelle_association_mots($flux){
152        $objets_mots = gouverneur_de_mots();
153        foreach ($objets_mots as $objet) {
154                if ($objet->libelle_objet) {
155                        $flux[ $objet->nom ] = _T( $objet->libelle_objet );
156                }
157        }
158        return $flux;
159}
160
161
162// Ajout du contenu aux formulaires CVT du core.
163function mots_objets_editer_contenu_objet($flux){
164
165        // Concernant le formulaire CVT 'editer_groupe_mot', on veut faire apparaitre l'objet auteurs
166        if ($flux['args']['type']=='groupe_mot') {
167
168                $liste = gouverneur_de_mots();
169               
170                // Si le formulaire concerne les groupes de mots-cles, alors recupere le resultat
171                // de la compilation du squelette 'inc-groupe-mot-mots_objets.html' qui contient les lignes
172                // a ajouter au formulaire CVT,
173                $mots_objets_checkbox = '';
174                foreach ($liste as $objet) {
175                        $mots_objets_checkbox .=
176                                recuperer_fond('formulaires/inc-groupe-mot-mots_objets', array_merge($flux['args']['contexte'], array(
177                                        'table' => $objet->nom,
178                                        'label' => _T( $objet->libelle_liaisons_objets ),
179                                )));
180                }
181                // que l'on insere ensuite a l'endroit approprie, a savoir avant le texte <!--choix_tables--> du formulaire
182                $flux['data'] = preg_replace('%(<!--choix_tables-->)%is', $mots_objets_checkbox."\n".'$1', $flux['data']);
183        }
184        return $flux;
185}
186
187
188
189// compter le nombre d'auteurs sur les mots cles
190function mots_objets_afficher_nombre_objets_associes_a($flux){
191       
192        if ($flux['args']['objet'] == 'mot'
193          AND $id_mot = $flux['args']['id_objet'])
194        {
195                $liste = gouverneur_de_mots();
196               
197                foreach ($liste as $objet) {
198                        if ($nb = sql_countsel('spip_mots_' . $objet->nom, "id_mot=".intval($id_mot))) {
199                                $flux['data'][] = singulier_ou_pluriel($nb,
200                                        _T( $objet->singulier ),
201                                        _T( $objet->pluriel )
202                                );
203                        }
204                }
205
206        }
207        return $flux;
208}
209
210
211/**
212 * Enlever les liaisons d'objets qui ont ete supprimes
213**/
214function mots_objets_optimiser_base_disparus($flux){
215       
216        $objets_mots = gouverneur_de_mots();
217       
218        foreach ($objets_mots as $objet) {
219                $liaison = 'spip_mots_' . $objet->nom;
220                $_id = $objet->_id_objet;
221               
222                # les liens de mots-objets affectes a des objets effaces
223                $res = sql_select(
224                        "L.$_id AS id",
225                        "$liaison AS L LEFT JOIN {$objet->table_sql} AS O ON L.$_id = O.$_id",
226                        "O.$_id IS NULL");
227
228                $flux['data'] += optimiser_sansref($liaison, $_id, $res);
229
230
231                # les liens de mots-objets sur des mots effaces
232                $res = sql_select(
233                        "L.id_mot AS id",
234                        "$liaison AS L LEFT JOIN spip_mots AS mots ON L.id_mot = mots.id_mot",
235                        "mots.id_mot IS NULL");
236
237                $n+= optimiser_sansref($liaison, 'id_mot', $res);
238        }
239       
240        return $flux;
241}
242
243
244?>
Note: See TracBrowser for help on using the repository browser.