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

Last change on this file since 3980 was 3980, checked in by b_b, 10 years ago

report de http://zone.spip.org/trac/spip-zone/changeset/40522 et 40523 de gis + un log en moins

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