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

Last change on this file since 6077 was 6077, checked in by kent1, 8 years ago

Toujours retourner un $flux même s'il n'existe pas

File size: 6.4 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5/**
6 * Insertion dans le formulaire DIOGENE_AJOUTER_MEDIA
7 *
8 * @param array $flux Le contexte du pipeline
9 * @return array $flux le contexte modifié passé aux suivants
10 */
11function diogene_mots_diogene_ajouter_saisies($flux){
12        $id_article = $flux['args']['contexte']['id_article'];
13        if (is_array(unserialize($flux['args']['champs_ajoutes'])) && in_array('mots',unserialize($flux['args']['champs_ajoutes']))) {
14                if ($id_article) {
15                        if (intval($id_article)) {
16                                if (!is_array(unserialize($flux['args']['options_complements']['mots_obligatoires']))) {
17                                        $mots_obligatoires = array();
18                                } else {
19                                        $mots_obligatoires = unserialize($flux['args']['options_complements']['mots_obligatoires']);
20                                }
21                                if(!is_array(unserialize($flux['args']['options_complements']['mots_facultatifs']))) {
22                                        $mots_facultatifs = array();
23                                } else {
24                                        $mots_facultatifs = unserialize($flux['args']['options_complements']['mots_facultatifs']);
25                                }
26                                $valeurs_mots['id_groupes'] = $groupes_possibles = array_merge($mots_obligatoires,$mots_facultatifs);
27                                //On récupÚre les mots qui sont peut être associés
28                                foreach($groupes_possibles as $groupe){
29                                        if (sql_getfetsel('unseul','spip_groupes_mots','id_groupe='.intval($groupe))== 'oui') {
30                                                $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));
31                                        } else {
32                                                $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));
33                                                while ($row = sql_fetch($result)) {
34                                                        $valeurs_mots['groupe_'.$groupe][] = $row['id_mot'];
35                                                }
36                                        }       
37                                }
38                                if (is_array($valeurs_mots)) {
39                                        $flux['args']['contexte'] = array_merge($flux['args']['contexte'],$valeurs_mots);
40                                }
41                        }
42                $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_medias_mots',$flux['args']['contexte']);
43                }
44        }
45        return $flux;
46}
47
48function diogene_mots_diogene_verifier($flux){
49        $id_diogene = _request('id_diogene');
50        if(intval($id_diogene)){
51                $diogene = sql_fetsel("*","spip_diogenes","id_diogene=$id_diogene");
52                $options_complements = unserialize($diogene['options_complements']);
53                $erreurs = &$flux['args']['erreurs'];
54                // On teste si les groupes obligatoires sont ok
55                if (is_array($options_complements['mots_obligatoires'])) {
56                        foreach($options_complements['mots_obligatoires'] as $groupe_obligatoire){
57                                $mots_groupe = _request('groupe_'.$groupe_obligatoire);
58                                if(empty($mots_groupe)){
59                                        $erreurs['groupe_'.$groupe_obligatoire] = _T('info_obligatoire');
60                                }
61                        }
62                }
63        }
64        return $flux;
65}
66
67/**
68 * Fonction s'exécutant au traitement du formulaire DIOGENE_AJOUTER_MEDIA
69 *
70 * @param array $flux Le contexte du pipeline
71 * @return array $flux le contexte modifié passé aux suivants
72 */
73function diogene_mots_diogene_traiter($flux){
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        $champs = $flux['args']['champs_ajoutes'];
156        if((is_array($champs) OR is_array($champs = unserialize($champs)))
157                && in_array('mots',$champs)){
158                $flux['data'] .= recuperer_fond('prive/diogene_mots_champs_texte', $flux['args']);
159        }
160        return $flux;
161}
162
163function diogene_mots_diogene_champs_pre_edition($array){
164        $array[] = 'mots_obligatoires';
165        $array[] = 'mots_facultatifs';
166        return $array;
167}
168
169?>
Note: See TracBrowser for help on using the repository browser.