source: spip-zone/_plugins_/diogene/diogene_complements/diogene_agenda/trunk/diogene_agenda_pipelines.php @ 84739

Last change on this file since 84739 was 84739, checked in by kent1@…, 5 years ago

Gérer correctement les évènements multiples

File size: 10.0 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5/**
6 * Insertion dans le formulaire diogene_ajouter_saisies
7 *
8 * @param array $flux Le contexte du pipeline
9 * @return array $flux le contexte modifié passé aux suivants
10 */
11function diogene_agenda_diogene_ajouter_saisies($flux){
12        if(is_array(unserialize($flux['args']['champs_ajoutes'])) && in_array('agenda',unserialize($flux['args']['champs_ajoutes']))){
13                $objet = $flux['args']['type'];
14                $id_table_objet = id_table_objet($flux['args']['type']);
15                $id_objet = $flux['args']['contexte'][$id_table_objet];
16
17                $flux['args']['contexte']['agenda_caches'] = array();
18               
19                if(is_array(unserialize($flux['args']['options_complements']['agenda_caches'])))
20                        $flux['args']['contexte']['agenda_caches'] = unserialize($flux['args']['options_complements']['agenda_caches']);
21               
22                $evenement = array();
23                $evenement['repetitions'] = array();
24                /**
25                 * Charger les champs de l'évènement
26                 */
27                if(intval($id_objet) && $flux['args']['options_complements']['agenda_multiple'] != 'on'){
28                        $evenement = sql_fetsel('*','spip_evenements','id_article='.intval($id_objet).' AND statut != "poubelle"');
29                        if($evenement['titre'] != sql_getfetsel('titre','spip_evenements','id_article='.intval($id_objet)))
30                                $evenement['titre_evenement'] = $evenement['titre'];
31                       
32                        $evenement['descriptif_evenement'] = $evenement['descriptif'];
33                        unset($evenement['titre']);
34                        unset($evenement['descriptif']);
35                        unset($evenement['statut']);
36                        unset($evenement['id_article']);
37                        if(intval($evenement['id_evenement']) > 0){
38                                $repetitons = sql_allfetsel("date_debut","spip_evenements","id_evenement_source=".intval($evenement['id_evenement']),'','date_debut');
39                                foreach($repetitons as $d){
40                                        $evenement['repetitions'][] = date('d/m/Y',strtotime($d['date_debut']));
41                                }
42                        }
43                        else
44                                $evenement = array();
45                }
46               
47                /**
48                 * Quels sont les champs à charger depuis l'environnement lors du chargement
49                 * Par exemple lorsqu'il y a une erreur dans verifier :
50                 * Les champs editables de la table "evenements"
51                 * On ajoute manuellement heure_debut et heure_fin
52                 */
53                $champs = objet_info('evenement','champs_editables');
54                $champs[] = 'heure_debut';
55                $champs[] = 'heure_fin';
56                $champs[] = 'titre_evenement';
57                $champs[] = 'descriptif_evenement';
58                unset($champs['descriptif']);
59                foreach($champs as $champ){
60                        if(_request($champ))
61                                $evenement[$champ] = _request($champ);
62                }
63               
64                if(count($evenement['repetitions']) > 0)
65                        $evenement['repetitions'] = implode(',',$evenement['repetitions']);
66
67                if(isset($flux['args']['options_complements']['agenda_legende']) && strlen($flux['args']['options_complements']['agenda_legende']) > 0){
68                        $evenement['agenda_legende'] = $flux['args']['options_complements']['agenda_legende'];
69                }
70                /**
71                 * dispatcher date et heure s'ils existent
72                 * On ne le fait que si :
73                 * - date_debut et date_fin existent
74                 * - date_debut et date_fin sont des dates mysql (pas récupérées de l'environnement)
75                 */
76                if($evenement["date_debut"] && preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$evenement["date_debut"]))
77                        list($evenement["date_debut"],$evenement["heure_debut"]) = explode(' ',date('d/m/Y H:i',strtotime($evenement["date_debut"])));
78
79                if($evenement["date_fin"] && preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$evenement["date_fin"]))
80                        list($evenement["date_fin"],$evenement["heure_fin"]) = explode(' ',date('d/m/Y H:i',strtotime($evenement["date_fin"])));
81
82                // traiter specifiquement l'horaire qui est une checkbox
83                if (_request('date_debut') AND !_request('horaire'))
84                        $evenement['horaire'] = 'oui';
85               
86                if(isset($flux['args']['options_complements']['agenda_obligatoire']) && $flux['args']['options_complements']['agenda_obligatoire'] == 'on')
87                        $evenement['agenda_obligatoire'] = "on";
88                $evenement['supprimer_evenement'] = _request('supprimer_evenement');
89                $flux['args']['contexte'] = array_merge($flux['args']['contexte'],$evenement);
90                $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_agenda',$flux['args']['contexte']);
91        }
92        return $flux;
93}
94
95/**
96 * Insertion dans le pipeline diogene_vérifier
97 * Fonction s'exécutant à la vérification du formulaire
98 *
99 * @param array $flux Le contexte du pipeline
100 * @return array $flux le contexte modifié passé aux suivants
101 */
102function diogene_agenda_diogene_verifier($flux){
103        $id_diogene = _request('id_diogene');
104        if(intval($id_diogene) && !_request('supprimer_evenement')){
105                $champs_ajoutes = unserialize(sql_getfetsel("champs_ajoutes","spip_diogenes","id_diogene=".intval($id_diogene)));
106                $erreurs = $flux['args']['erreurs'];
107                if (is_array($champs_ajoutes) && in_array('agenda',$champs_ajoutes)){
108                        include_spip('formulaires/editer_evenement');
109                        $erreurs = formulaires_editer_evenement_verifier_dist(_request('id_evenement'), $id_article,false, false, 'evenements_edit_config');
110                        unset($erreurs['id_parent']);
111                       
112                        if(!isset($flux['args']['options_complements']['agenda_obligatoire']) OR $flux['args']['options_complements']['agenda_obligatoire'] != 'on'){
113                                $champs_post = false;
114                                $champs = objet_info('evenement','champs_editables');
115                                $champs[] = 'titre_evenement';
116                                $champs[] = 'descriptif_evenement';
117                                unset($champs['descriptif']);
118                                foreach($champs as $champ){
119                                        if(!in_array($champ,array('titre','horaire')) && _request($champ)){
120                                                $champs_post = true;
121                                                break;
122                                        }
123                                }
124                                if(count($erreurs) > 0 && !$champs_post)
125                                        $erreurs = array();
126                        }
127                }
128                $flux['data'] = array_merge($flux['data'], $erreurs);
129        }
130        return $flux;
131}
132
133/**
134 * Insertion dans le pipeline diogene_traiter
135 * Fonction s'exécutant au traitement du formulaire
136 *
137 * @param array $flux Le contexte du pipeline
138 * @return array $flux le contexte modifié passé aux suivants
139 */
140function diogene_agenda_diogene_traiter($flux){
141        $pipeline = pipeline('diogene_objets');
142        if (in_array($flux['args']['type'],array_keys($pipeline)) && isset($pipeline[$flux['args']['type']]['champs_sup']['agenda']) AND ($id_diogene = _request('id_diogene'))) {
143                $id_article = $flux['args']['id_objet'];
144
145                /**
146                 * On a un id_evenement => on met à jour
147                 */
148                if(intval($id_article) > 0 && !_request('supprimer_evenement')){
149                        if(!isset($flux['args']['options_complements']['agenda_obligatoire']) OR $flux['args']['options_complements']['agenda_obligatoire'] != 'on'){
150                                $champs_post = false;
151                                foreach(objet_info('evenement','champs_editables') as $champ){
152                                        if(!in_array($champ,array('titre','horaire')) && _request($champ)){
153                                                $champs_post = true;
154                                                break;
155                                        }
156                                }
157                                if(!$champs_post)
158                                        return $flux;
159                        }
160                        include_spip('formulaires/editer_evenement');
161                        set_request('id_parent',$id_article);
162                       
163                        /**
164                         * On fait attention à donner le titre de l'évènement si envoyé
165                         * sinon ce sera le titre de l'article
166                         */
167                        $titre_article = false;
168                        if(strlen(_request('titre_evenement')) > 0){
169                                $titre_article = _request('titre');
170                                set_request('titre',_request('titre_evenement'));
171                        }
172                       
173                        if(strlen(_request('descriptif_evenement')) > 0){
174                                set_request('descriptif',_request('descriptif_evenement'));
175                        }
176                        /**
177                         * On fait attention à donner un statut existant au statut
178                         */
179                        $statuts = array_keys(objet_info('evenement','statut_titres'));
180                        if(!in_array(_request('statut'),$statuts)){
181                                $statut_article = _request('statut');
182                                set_request('statut',$statuts[0]);
183                        }
184
185                        if(intval(_request('id_evenement')) > 0)
186                                formulaires_editer_evenement_traiter_dist(_request('id_evenement'), $id_article,false, false, 'evenements_edit_config');
187                        else
188                                formulaires_editer_evenement_traiter_dist('new', $id_article,false, false, 'evenements_edit_config');
189                       
190                        /**
191                         * On remet le statut et le titre de l'article dans l'environnement du $_POST
192                         */
193                        if($statut_article)
194                                set_request('statut',$statut_article);
195                        if($titre_article)
196                                set_request('titre',$titre_article);
197                }
198                // Supprimer l'évènement
199                else{
200                        include_spip('action/editer_evenement');
201                        evenement_instituer(_request('id_evenement'), array('statut'=>'poubelle','id_article'=>$id_article));
202                }
203        }
204        return $flux;
205}
206
207/**
208 * Insertion dans le pipeline diogene_objets
209 * On ajoute l'agenda dans les articles
210 *
211 * @param array $flux La liste des champs pour les diogenes
212 */
213function diogene_agenda_diogene_objets($flux){
214        $flux['article']['champs_sup']['agenda'] = _T('diogene_agenda:label_cfg_ajout_agenda');
215        return $flux;
216}
217
218function diogene_agenda_diogene_champs_texte($flux){
219        $champs = $flux['args']['champs_ajoutes'];
220        if((is_array($champs) OR is_array($champs = unserialize($champs)))
221                && in_array('agenda',$champs)){
222                $flux['data'] .= recuperer_fond('prive/diogene_agenda_champs_texte', $flux['args']);
223        }
224        return $flux;
225}
226
227function diogene_agenda_diogene_champs_pre_edition($array){
228        $array[] = 'agenda_caches';
229        $array[] = 'agenda_legende';
230        $array[] = 'agenda_multiple';
231        $array[] = 'agenda_obligatoire';
232        return $array;
233}
234
235function diogene_agenda_insert_head_css($flux){
236        $flux .= '<link rel="stylesheet" href="'.direction_css(find_in_path('css/diogene_agenda.css')).'" type="text/css" media="all" />';
237        return $flux;
238}
239
240/**
241 * Insertion dans le formulaire diogene_avant_formulaire (plugin Diogene)
242 *
243 * Insert des scripts javascript nécessaire au bon fonctionnement des formulaires d'édition :
244 * -* prive/javascript/presentation.js
245 * -* formulaires/dateur/inc-dateur.html si une date est présente dans le formulaire
246 *
247 * @param array $flux
248 *              Le contexte du pipeline
249 * @return array $flux
250 *              Le contexte modifié
251 */
252function diogene_agenda_diogene_avant_formulaire($flux){
253        if(is_array(unserialize($flux['args']['champs_ajoutes'])) &&
254                (in_array('agenda',unserialize($flux['args']['champs_ajoutes'])))){
255                        spip_log($flux['args']['options_complements']['agenda_multiple'],'test.'._LOG_ERREUR);
256                        if($flux['args']['type'] && isset($flux['args']['id']) && intval($flux['args']['id']) > 0)
257                                $flux['data'] .= recuperer_fond('inclure/diogene_liste_evenements',array('id_article'=>$flux['args']['id'],'editer_id_evenement' => _request('editer_id_evenement'),'agenda_multiple' => $flux['args']['options_complements']['agenda_multiple'],'debut_evenements' => _request('debut_evenements')));
258        }
259        return $flux;
260}
261?>
Note: See TracBrowser for help on using the repository browser.