source: plugins_spip/diogene_complements/diogene_mots/diogene_mots_pipelines.php @ 4680

Last change on this file since 4680 was 4680, checked in by b_b, 9 years ago

un oubli dans r4417

File size: 6.7 KB
Line 
1<?php
2
3/**
4 * Insertion dans le formulaire DIOGENE_AJOUTER_MEDIA
5 *
6 * @param array $flux Le contexte du pipeline
7 * @return array $flux le contexte modifié passé aux suivants
8 */
9function diogene_mots_diogene_ajouter_saisies($flux){
10        $id_article = $flux['args']['contexte']['id_article'];
11        if (is_array(unserialize($flux['args']['champs_ajoutes'])) && in_array('mots',unserialize($flux['args']['champs_ajoutes']))) {
12                if ($id_article) {
13                        if (intval($id_article)) {
14                                if (!is_array(unserialize($flux['args']['options_complements']['mots_obligatoires']))) {
15                                        $mots_obligatoires = array();
16                                } else {
17                                        $mots_obligatoires = unserialize($flux['args']['options_complements']['mots_obligatoires']);
18                                }
19                                if(!is_array(unserialize($flux['args']['options_complements']['mots_facultatifs']))) {
20                                        $mots_facultatifs = array();
21                                } else {
22                                        $mots_facultatifs = unserialize($flux['args']['options_complements']['mots_facultatifs']);
23                                }
24                                $valeurs_mots['id_groupes'] = $groupes_possibles = array_merge($mots_obligatoires,$mots_facultatifs);
25                                //On récupÚre les mots qui sont peut être associés
26                                foreach($groupes_possibles as $groupe){
27                                        if (sql_getfetsel('unseul','spip_groupes_mots','id_groupe='.intval($groupe))== 'oui') {
28                                                $valeurs_mots['groupe_'.$groupe] = sql_fetsel('mot.id_mot','spip_mots as mot left join spip_mots_articles as mots_articles ON (mot.id_mot=mots_articles.id_mot)','mots_articles.id_article='.intval($id_article).' AND mot.id_groupe='.intval($groupe));
29                                        } else {
30                                                $result = sql_select('mot.id_mot','spip_mots as mot left join spip_mots_articles as articles ON mot.id_mot=articles.id_mot','id_groupe='.intval($groupe).' AND id_article='.intval($id_article));
31                                                while ($row = sql_fetch($result)) {
32                                                        $valeurs_mots['groupe_'.$groupe][] = $row['id_mot'];
33                                                }
34                                        }       
35                                }
36                                if (is_array($valeurs_mots)) {
37                                        $flux['args']['contexte'] = array_merge($flux['args']['contexte'],$valeurs_mots);
38                                }
39                        }
40                $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_medias_mots',$flux['args']['contexte']);
41                }
42        }
43        return $flux;
44}
45
46function diogene_mots_diogene_verifier($flux){
47        spip_log("DIOGENE_MOTS : Verification des mots cles");
48
49        $id_diogene = _request('id_diogene');
50        $diogene = sql_fetsel("*","spip_diogenes","id_diogene=$id_diogene");
51        $options_complements = unserialize($diogene['options_complements']);
52        $erreurs = &$flux['args']['erreurs'];
53        // On teste si les groupes obligatoires sont ok
54        if (is_array($options_complements['mots_obligatoires'])) {
55                foreach($options_complements['mots_obligatoires'] as $groupe_obligatoire){
56                        $mots_groupe = _request('groupe_'.$groupe_obligatoire);
57                        if(empty($mots_groupe)){
58                                $erreurs['groupe_'.$groupe_obligatoire] = _T('info_obligatoire');
59                        }
60                }
61        }
62        return $flux;
63}
64
65/**
66 * Fonction s'exécutant au traitement du formulaire DIOGENE_AJOUTER_MEDIA
67 *
68 * @param array $flux Le contexte du pipeline
69 * @return array $flux le contexte modifié passé aux suivants
70 */
71function diogene_mots_diogene_traiter($flux){
72        spip_log("DIOGENE_MOTS : Traitement des mots cles");
73       
74        if (($flux['args']['type'] == 'article') AND ($id_diogene = _request('id_diogene'))) {
75                $id_article = $flux['args']['id_objet'];
76
77                $diogene = sql_fetsel("*","spip_diogenes","id_diogene=$id_diogene");
78                $options_complements = unserialize($diogene['options_complements']);
79
80                $mots_obligatoires = is_array(unserialize($options_complements['mots_obligatoires']))
81                        ? unserialize($options_complements['mots_obligatoires'])
82                        : array();
83                       
84                $mots_facultatifs = is_array(unserialize($options_complements['mots_facultatifs']))
85                        ? unserialize($options_complements['mots_facultatifs'])
86                        : array();
87
88                //On traite les mots clés obligatoires ou pas
89                include_spip('inc/editer_mots');
90                $groupes_possibles = array_merge($mots_obligatoires,$mots_facultatifs);
91               
92                $mots_multiples = array();
93               
94                /*
95                 * On traite chaque groupe séparément
96                 * Si c'est une modification d'article il se peut qu'il faille supprimer les anciens mots
97                 * On fait une vérifications sur chaque groupe
98                 */
99                foreach($groupes_possibles as $groupe){
100                        /*
101                         * Si le select est multiple
102                         */
103                        if(is_array(_request('groupe_'.$groupe))){
104                                $result = sql_select('mot.id_mot','spip_mots as mot left join spip_mots_articles as articles ON mot.id_mot=articles.id_mot','id_groupe='.intval($groupe).' AND id_article='.intval($id_article));
105                                while ($row = sql_fetch($result)) {
106                                        $mots_multiples[] = $row['id_mot'];
107                                }
108                                foreach(_request('groupe_'.$groupe) as $cle => $mot){
109                                        /*
110                                         * Si le mot est déja dans les mots, on le supprime juste
111                                         * de l'array des mots originaux
112                                         */
113                                        if(in_array($mot, $mots_multiples)){
114                                                unset($mots_multiples[$cle]);
115                                        }
116                                        else{
117                                                sql_insertq('spip_mots_articles', array('id_mot' =>$mot,  'id_article' => $id_article));
118                                        }
119                                }
120                        }
121                        /*
122                         * Si le select est simple
123                         */
124                        else{
125                                if(!is_array($mots_uniques = sql_fetsel('mot.id_mot','spip_mots as mot left join spip_mots_articles as mots_articles ON (mot.id_mot=mots_articles.id_mot)','mots_articles.id_article='.intval($id_article).' AND mot.id_groupe='.intval($groupe))))
126                                        $mots_uniques = array();
127                                if(in_array(_request('groupe_'.$groupe), $mots_uniques)){
128                                        unset($mots_uniques);
129                                }
130                                else{
131                                        sql_insertq('spip_mots_articles', array('id_mot' =>_request('groupe_'.$groupe),  'id_article' => $id_article));
132                                }
133                        }
134                        /*
135                         * S'il reste quelque chose dans les mots d'origine, on les délie de l'article
136                         */
137                        if(count($mots_uniques)>0){
138                                sql_delete('spip_mots_articles','id_article='.intval($id_article).' AND id_mot IN ('.implode(',',$mots_uniques).')');
139                        }
140                        if(count($mots_multiples)>0){
141                                sql_delete('spip_mots_articles','id_article='.intval($id_article).' AND id_mot IN ('.implode(',',$mots_multiples).')');
142                        }
143                }
144        }
145        return $flux;
146}
147
148function diogene_mots_diogene_champs_sup($flux){
149        $flux['article']['mots'] = _T('diogene_mots:form_legend');
150        $flux['emballe_media']['mots'] = _T('diogene_mots:form_legend');
151        return $flux;
152}
153
154function diogene_mots_diogene_champs_texte($flux){
155        if(is_array(unserialize($flux['args']['champs_ajoutes'])) && in_array('mots',unserialize($flux['args']['champs_ajoutes']))){
156                $flux['data'] .= recuperer_fond('prive/diogene_mots_champs_texte', $flux['args']);
157                return $flux;
158        }
159}
160
161function diogene_mots_pre_edition($flux){
162        if(($flux['args']['table'] == 'spip_diogenes') && ($flux['args']['action'] == 'instituer')){
163                $options_complements = unserialize($flux['data']['options_complements']);
164                foreach(array(
165                        'mots_obligatoires','mots_facultatifs'
166                ) as $champ){
167                        $val = _request($champ);
168                        if(is_array($val)){
169                                $options_complements[$champ] = serialize($val);
170                        }
171                }
172                $flux['data']['options_complements'] = serialize($options_complements);
173        }
174        return $flux;
175}
176
177?>
Note: See TracBrowser for help on using the repository browser.