source: spip-zone/_core_/plugins/mots/mots_pipelines.php @ 43406

Last change on this file since 43406 was 43406, checked in by cedric@…, 10 years ago

Les extensions avaient deja rate le passage en 2010, ne ratons pas celui a 2011

File size: 6.8 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2011                                                *
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/**
15 * Definir les meta de configuration liee aux mots
16 *
17 * @param array $metas
18 * @return array
19 */
20function mots_configurer_liste_metas($metas){
21        $metas['articles_mots'] =  'non';
22        $metas['config_precise_groupes'] =  'non';
23        #$metas['mots_cles_forums'] =  'non';
24        return $metas;
25}
26
27
28
29
30/**
31 * Configuration des mots
32 *
33 * @param array $flux
34 * @return array
35 */
36function mots_affiche_milieu($flux){
37        static $ou = array(
38                'articles'    => array('objet' => 'article'),
39                'naviguer'    => array('objet' => 'rubrique', 'opt' => array('autoriser_faire' => 'publierdans')),
40                'breves_voir' => array('objet' => 'breve'),
41                'sites'       => array('objet' => 'syndic'),
42        );
43       
44        if ($flux["args"]["exec"] == "configurer_contenu") {
45                $flux["data"] .=  recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_mots'));
46        }
47
48        // si on est sur une page ou il faut inserer les mots cles...
49        if (in_array($flux['args']['exec'], array_keys($ou))) {
50
51                $me = $ou[ $flux['args']['exec'] ];
52                $objet = $me['objet']; // auteur
53                $_id_objet = id_table_objet($objet); // id_auteur
54                $opt = isset($me['opt']) ? $me['opt'] : array();
55               
56                // on récupère l'identifiant de l'objet...
57                if ($id_objet = $flux['args'][ $_id_objet ]) {
58                        $flux['data'] .= mots_ajouter_selecteur_mots($objet, $id_objet, $flux['args']['exec'], $opt);
59                }
60        }
61               
62        return $flux;
63}
64
65
66
67/**
68 * Retourne le selecteur de mots pour un objet donnee
69 *
70 * @param string $objet : nom de l'objet
71 * @param int $id_objet : identifiant de l'objet
72 * @param string $exec_retour : url de exec de retour
73 * @param array $opt options
74 *              @param string $cherche_mot      un mot cherché particulier
75 *              @param string $select_groupe    un/des groupe particulier ?
76 *              @param bool $editable   autorisé ou non à voir ajouter des mots
77 *              @param string $autoriser_faire  En cas d'absence de $editable, qu'elle nom d'autorisation utiliser
78 *
79 * @return string       HTML produit.
80**/
81function mots_ajouter_selecteur_mots($objet, $id_objet, $exec_retour='', $opt = array()) {
82
83        if (!isset($opt['flag_editable'])) {
84                $faire = isset($opt['autoriser_faire']) ? $opt['autoriser_faire'] : 'modifier';
85                $opt['flag_editable'] = autoriser($faire, $objet, $id_objet);
86        }
87       
88        // pas beau ces request ici...
89        // en attendant un formulaire CVT digne de ce nom...
90        if (!isset($opt['cherche_mot'])) {
91                $opt['cherche_mot'] = _request('cherche_mot');
92        }
93        if (!isset($opt['select_groupe'])) {
94                $opt['select_groupe'] = _request('select_groupe');
95        }
96
97       
98        $editer_mots = charger_fonction('editer_mots', 'inc');
99        return $editer_mots(
100                table_objet($objet), $id_objet,
101                $opt['cherche_mot'], $opt['select_groupe'],
102                $opt['flag_editable'], false, $exec_retour
103        );
104
105}
106
107
108
109
110
111
112/**
113 * Optimiser la base de donnee en supprimant les liens orphelins
114 *
115 * @param int $n
116 * @return int
117 */
118function mots_optimiser_base_disparus($flux){
119        $n = &$flux['data'];
120
121        $result = sql_delete("spip_mots", "length(titre)=0 AND maj < $mydate");
122       
123        #[todo] optimiser_table_liens_objet_lie_inexistant('spip_mots_liens');
124        # les liens des mots qui sont lies a un objet inexistant
125        $objets = allfetsel("DISTINCT objet","spip_mots_liens");
126        foreach ($objets as $t){
127                $type = $t['objet'];
128                $spip_table_objet = table_objet_sql($type);
129                $id_table_objet = id_table_objet($type);
130                $res = sql_select("L.id_mot AS id,id_objet",
131                              "spip_mots_liens AS L
132                                LEFT JOIN $spip_table_objet AS O
133                                  ON O.$id_table_objet=L.id_objet AND L.objet=".sql_quote($type),
134                                "O.$id_table_objet IS NULL");
135                // sur une cle primaire composee, pas d'autres solutions que de virer un a un
136                while ($row = sql_fetch($sel)){
137                        sql_delete("spip_mots_liens", array("id_mot=".$row['id'],"id_objet=".$row['id_objet'],"objet=".sql_quote($type)));
138                        spip_log("Entree ".$row['id']."/".$row['id_objet']."/$type supprimee dans la table spip_mots_liens");
139                }
140        }
141       
142        #[todo] optimiser_table_liens_id_lie_inexistant('spip_mots_liens');
143        # les liens des mots qui sont lies a un mot inexistant
144        $table_origine = substr("spip_mots_liens", 0, -6);
145        $id_table_origine = id_table_objet($table_origine);
146        $res = sql_select("L.$id_table_origine AS id,id_objet",
147                          "spip_mots_liens AS L
148                                LEFT JOIN $table_origine AS O
149                                  ON O.$id_table_origine=L.$id_table_origine",
150                        "O.$id_table_origine IS NULL");
151        // sur une cle primaire composee, pas d'autres solutions que de virer un a un
152        while ($row = sql_fetch($sel)){
153                sql_delete("spip_mots_liens", array("id_mot=".$row['id']));
154                spip_log("Entree id_mot=".$row['id']."/$type supprimee dans la table spip_mots_liens");
155        }
156       
157
158
159        return $flux;
160
161}
162
163
164
165/**
166 * Definir la liste des champs de recherche sur la table mots
167 *
168 * @param array $liste
169 * @return array
170 */
171function mots_rechercher_liste_des_champs($liste){
172        $liste['mot'] = array(
173          'titre' => 8, 'texte' => 1, 'descriptif' => 5
174        );
175
176        return $liste;
177}
178
179
180/**
181 * Definir la liste des champs de jointure sur la table mots
182 *
183 * @param array $liste
184 * @return array
185 */
186function mots_rechercher_liste_des_jointures($liste) {
187        $jointures = array(
188                'article' => array(
189                        'mot' => array('titre' => 3),
190                ),
191                'breve' => array(
192                        'mot' => array('titre' => 3),
193                ),
194                'rubrique' => array(
195                        'mot' => array('titre' => 3),
196                ),
197                'document' => array(
198                        'mot' => array('titre' => 3)
199                )
200        );
201       
202        return array_merge_recursive($liste, $jointures);
203}
204
205
206/**
207 * Copier le type des groupes sur la table spip_mots
208 * a chaque changement d'un groupe.
209 *
210 * @param array $flux
211 * @return array
212 */
213function mots_post_edition($flux){
214        if (($flux['args']['table'] == 'spip_groupes_mots')
215                and isset($flux['data']['titre']))
216        {
217                sql_updateq('spip_mots', array('type' => $flux['data']['titre']),
218                        'id_groupe=' . $flux['args']['id_objet']);
219        }
220
221        return $flux;
222}
223
224
225/**
226 * Permet des calculs de noms d'url sur les mots.
227 *
228 * @param array $array liste des objets acceptant des urls
229 * @return array
230**/
231function mots_declarer_url_objets($array){
232        $array[] = 'mot';
233        return $array;
234}
235
236/**
237 * Libelle des logos de mot et de groupe
238 * @param <type> $logo_libelles
239 * @return string
240 */
241function mots_libeller_logo($logo_libelles) {
242        $logo_libelles['mot'] = _T('logo_mot_cle').aide("breveslogo");
243        $logo_libelles['groupe'] = _T('logo_groupe').aide("breveslogo");
244        return $logo_libelles;
245}
246?>
Note: See TracBrowser for help on using the repository browser.