source: spip-zone/_plugins_/reservation_evenement/trunk/action/editer_reservations_detail.php @ 87382

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

logs

File size: 8.1 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION')) return;
3
4function reservations_detail_modifier($id_reservations_detail, $set=null) {
5
6        $table_sql = table_objet_sql('reservations_detail');
7        $trouver_table = charger_fonction('trouver_table','base');
8        $desc = $trouver_table($table_sql);
9        if (!$desc OR !isset($desc['field'])) {
10                spip_log("Objet $objet inconnu dans objet_modifier",_LOG_ERREUR);
11                return _L("Erreur objet $objet inconnu");
12        }
13        include_spip('inc/modifier');
14
15        $champ_date = '';
16        if (isset($desc['date']) AND $desc['date'])
17                $champ_date = $desc['date'];
18        elseif (isset($desc['field']['date']))
19                $champ_date = 'date';
20
21        $white = array_keys($desc['field']);
22        // on ne traite pas la cle primaire par defaut, notamment car
23        // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
24        $white = array_diff($white, array($desc['key']['PRIMARY KEY']));
25
26        if (isset($desc['champs_editables']) AND is_array($desc['champs_editables'])) {
27                $white = $desc['champs_editables'];
28        }
29        $c = collecter_requests(
30                // white list
31                $white,
32                // black list
33                array($champ_date,'statut','id_parent','id_secteur'),
34                // donnees eventuellement fournies
35                $set
36        );
37
38        $donnees_reservations_details=charger_fonction('donnees_reservations_details','inc');
39       
40        //On retient le prix original pour le cas ou celui est modifié par la suite
41
42        $details=$donnees_reservations_details($id_reservations_detail,$c);
43        $details['prix original']=isset($details['prix_ht'])?$details['prix_ht']:'';
44       
45        //Pipeline permettant aux plugins de modifier les détails de la réservation
46        $c = pipeline('reservation_evenement_donnees_details',array(
47                                        'args'=>$set, 
48                                        'data'=>array_merge($c,$details)
49                                        )
50                                );
51
52        // Si l'objet est publie, invalider les caches et demander sa reindexation
53        if (objet_test_si_publie($objet,$id)){
54                $invalideur = "id='reservations_detail/$id_reservations_detail'";
55                $indexation = true;
56        }
57        else {
58                $invalideur = "";
59                $indexation = false;
60        }
61
62        if ($err = objet_modifier_champs('reservations_detail',$id_reservations_detail,
63                array(
64                        'nonvide' => '',
65                        'invalideur' => $invalideur,
66                        'indexation' => $indexation,
67                         // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
68                        'date_modif' => (isset($desc['field']['date_modif'])?'date_modif':'')
69                ),
70                $c))
71                return $err;
72
73        // Modification de statut, changement de rubrique ?
74        // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
75        //         le tableau $set hors black liste, mais du coup on a possiblement des champs en trop.
76        $c = collecter_requests(array($champ_date, 'statut', 'id_parent'),array(),$set);
77        $err = reservations_detail_instituer($id_reservations_detail, $c);
78
79        return $err;
80}
81
82
83function reservations_detail_inserer( $id_parent=null, $set=null) {
84        $objet='reservations_detail';
85
86        $table_sql = table_objet_sql($objet);
87        $trouver_table = charger_fonction('trouver_table','base');
88        $desc = $trouver_table($table_sql);
89        if (!$desc OR !isset($desc['field']))
90                return 0;
91
92        $champs = array();
93
94
95
96        if (isset($desc['field']['statut'])){
97                if (isset($desc['statut_textes_instituer'])){
98                        $cles_statut = array_keys($desc['statut_textes_instituer']); 
99                        $champs['statut'] = reset($cles_statut);
100                }
101                else
102                        $champs['statut'] = 'attente';
103        }
104
105
106        if ((isset($desc['date']) AND $d=$desc['date']) OR isset($desc['field'][$d='date']))
107                $champs[$d] = date('Y-m-d H:i:s');
108
109        if ($set)
110                $champs = array_merge($champs, $set);
111       
112
113        // Envoyer aux plugins
114        $champs = pipeline('pre_insertion',
115                array(
116                        'args' => array(
117                                'table' => $table_sql,
118                        ),
119                        'data' => $champs
120                )
121        );
122
123        $id = sql_insertq($table_sql, $champs);
124
125        if ($id){
126                pipeline('post_insertion',
127                        array(
128                                'args' => array(
129                                        'table' => $table_sql,
130                                        'id_objet' => $id,
131                                ),
132                                'data' => $champs
133                        )
134                );
135        }
136
137        return $id;
138}
139
140function reservations_detail_instituer($id_reservations_detail, $c, $calcul_rub=true) {
141
142        include_spip('inc/autoriser');
143        include_spip('inc/rubriques');
144        include_spip('inc/modifier');
145       
146       
147        $row = sql_fetsel('*','spip_reservations_details','id_reservations_detail='.intval($id_reservations_detail));
148        $id_reservation=$row['id_reservation'];
149        $id_evenement=$row['id_evenement'];
150
151        $envoi_separe_actif=_request('envoi_separe_actif');     
152       
153        if(!$places=$c[places]){
154                $places=sql_getfetsel('places','spip_evenements','id_evenement='.$id_evenement);
155                }
156        $statut_ancien = $statut = $row['statut'];
157
158        $s = isset($c['statut']) ? $c['statut'] : $statut;
159
160        $champs['statut']= $s ;
161       
162        // Vérifier si le statut peut être modifiés
163        $statuts_complets=charger_fonction('complet','inc/statuts');
164        $statuts=$statuts_complets();   
165       
166        /* Si on change depuis un statut non compris dans statuts_complet
167         * vers un statut compris dans statuts_complet,
168         * on vérifie si l'événement n'est pas complet
169         */
170        if ($s != $statut AND in_array($s,$statuts) AND !in_array($statut,$statuts)) {
171                // Si il y a une limitation de places prévu, on sélectionne les détails de réservation qui ont le statut_complet
172                if($places AND $places>0){
173                        $sql=sql_select('quantite','spip_reservations_details','id_evenement='.$id_evenement.' AND statut IN ("'.implode('","',$statuts).'")');         
174                        $reservations=array();
175                        while($data=sql_fetch($sql)){
176                                $reservations[]=$data['quantite'];
177                        }
178                        if(array_sum($reservations)>=$places)$champs['statut']='attente';                                                 
179                }
180        }
181       
182
183        // Envoyer aux plugins
184        $champs = pipeline('pre_edition',
185                array(
186                        'args' => array(
187                                'table' => 'spip_reservations_details',
188                                'id_reservation_detail' => $id,
189                                'action'=>'instituer',
190                                'statut_ancien' => $statut_ancien,
191                                'date_ancienne' => $date_ancienne,
192                        ),
193                        'data' => $champs
194                )
195        );
196
197        if (!count($champs)) return '';
198        // Envoyer les modifs.
199        objet_editer_heritage('reservations_detail', $id_reservations_detail,'', $statut_ancien, $champs);
200
201        // Invalider les caches
202        include_spip('inc/invalideur');
203        suivre_invalideur("id='reservations_detail/$id_reservations_detail'");
204
205
206        // Pipeline
207        pipeline('post_edition',
208                array(
209                        'args' => array(
210                                'table' => 'spip_reservations_details',
211                                'id_reservation_detail' => $id_reservations_detail,
212                                'action'=>'instituer',
213                                'statut_ancien' => $statut_ancien,
214                                'date_ancienne' => $date_ancienne,
215                        ),
216                        'data' => $champs
217                )
218        );
219       
220
221       
222        // Notifications si en mode différé et ne pas déclencher par le changement de statut de la réservation
223       
224        if($envoi_separe_actif!='non'){
225                //Déterminer la langue pour les notifications   
226                if(!$lang=sql_getfetsel('lang','spip_reservations','id_reservation='.$id_reservation)) $lang=lire_config('langue_site');                               
227
228                lang_select($lang);     
229                include_spip('inc/config');     
230                $config = lire_config('reservation_evenement');
231                $envoi_separe_config=isset($config['envoi_separe'])?$config['envoi_separe']:array(); 
232               
233                if(in_array($s, $envoi_separe_config) OR $s == 'cloture'){
234                       
235                         if ((!$statut_ancien OR $s != $statut_ancien ) &&
236                         ($config['activer']) &&
237                         (in_array($s,$config['quand'])) &&
238                         ($notifications = charger_fonction('notifications', 'inc', true))
239                        ) {
240                                $row=sql_fetsel('id_auteur,email','spip_reservations','id_reservation='.$id_reservation);
241                                $id_auteur=$row['id_auteur'];
242                                $email=$row['email'];
243                               
244                                // Determiner l'expediteur
245                                $options = array('statut'=>$s,'id_reservations_detail'=>$id_reservations_detail,'lang'=>$lang);
246                                if( $config['expediteur'] != "facteur" )
247                                        $options['expediteur'] = $config['expediteur_'.$config['expediteur']];
248               
249                                // Envoyer au vendeur et au client
250                                //Pour le moment pas d'envoi à l'administrateur, prévoir un seul mail pour tout l'événement.
251                                if ($s!='cloture') {
252                                        spip_log('envoi mail differe vendeur email:'.$options['email'].', statut:'.$s ,'reservation_evenement'.LOG_INFO);       
253                                        $notifications('reservation_vendeur', $id_reservation, $options);
254                                }
255                                       
256                                if($config['client']){
257                                       
258                                                if(intval($id_auteur) AND $id_auteur>0)$options['email']=sql_getfetsel('email','spip_auteurs','id_auteur='.$id_auteur);
259                                                else $options['email']=$email;
260                                               
261                                        spip_log('envoi mail differe client email:'.$email.', statut:'.$s ,'reservation_evenement'._LOG_INFO); 
262                                                                                       
263                                        $notifications('reservation_client', $id_reservation, $options);
264                                       
265                                        }
266                                }
267                        }               
268                }
269
270        return ''; // pas d'erreur
271}
Note: See TracBrowser for help on using the repository browser.