source: spip-zone/_plugins_/reservation_evenement/trunk/action/editer_reservation.php @ 88283

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

récupérer les quantités

File size: 5.8 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION')) return;
3
4function reservation_inserer($id_parent=null, $set=null) {
5        $table_sql = table_objet_sql('reservation');
6        $champs = array();
7        $champs['statut'] = 'encours';
8        $champs['date'] = date('Y-m-d H:i:s');
9
10        if ($set)
11                $champs = array_merge($champs, $set);
12
13        // Envoyer aux plugins
14        $champs = pipeline('pre_insertion',
15                array(
16                        'args' => array(
17                                'table' => $table_sql,
18                        ),
19                        'data' => $champs
20                )
21        );
22
23        $id = sql_insertq($table_sql, $champs);
24
25        if ($id){
26                pipeline('post_insertion',
27                        array(
28                                'args' => array(
29                                        'table' => $table_sql,
30                                        'id_objet' => $id,
31                                ),
32                                'data' => $champs
33                        )
34                );
35        }
36        return $id;
37}
38
39function reservation_instituer($id_reservation, $c, $calcul_rub=true) {
40        $table_sql = table_objet_sql('reservation');
41        $trouver_table = charger_fonction('trouver_table','base');
42
43        include_spip('inc/autoriser');
44        include_spip('inc/rubriques');
45        include_spip('inc/modifier');
46        include_spip('inc/config');     
47        $config = lire_config('reservation_evenement');
48       
49        $row = sql_fetsel('statut,date,id_auteur,email,lang','spip_reservations','id_reservation='.intval($id_reservation));
50        $statut_ancien = $statut = $row['statut'];
51        $date_ancienne = $date = $row['date'];
52       
53       
54        $d = isset($c['date']) ? $c['date'] : null;
55        $s = isset($c['statut']) ? $c['statut'] : $statut;
56       
57
58        $champs = array();
59        // cf autorisations dans inc/instituer_objet
60        if ($s != $statut OR ($d AND $d != $date)) {
61                if (autoriser('modifier','reservation', $id_reservation))
62                        $statut = $champs['statut'] = $s;
63                else
64                        spip_log("editer_reservation $id_reservation refus " . join(' ', $c));
65
66                // En cas de publication, fixer la date a "maintenant"
67                // sauf si $c commande autre chose
68                // ou si l'objet est deja date dans le futur
69                // En cas de proposition d'un objet (mais pas depublication), idem
70                if ($champ_date) {
71                        if ($champs['statut'] == 'publie'
72                         OR ($champs['statut'] == 'prop' AND !in_array($statut_ancien, array('publie', 'prop')))
73                         OR $d
74                        ) {
75                                if ($d OR strtotime($d=$date)>time())
76                                        $champs[$champ_date] = $date = $d;
77                                else
78                                        $champs[$champ_date] = $date = date('Y-m-d H:i:s');
79                        }
80                }
81        }
82
83
84        // Envoyer aux plugins
85        $champs = pipeline('pre_edition',
86                array(
87                        'args' => array(
88                                'table' => 'spip_reservations',
89                                'id_reservation' => $id_reservation,
90                                'action'=>'instituer',
91                                'statut_ancien' => $statut_ancien,
92                                'date_ancienne' => $date_ancienne,
93                        ),
94                        'data' => $champs
95                )
96        );
97
98        if (!count($champs)) return '';
99       
100        // Envoyer les modifs.
101        objet_editer_heritage('reservation', $id_reservation,'', $statut_ancien, $champs);
102
103        // Invalider les caches
104        include_spip('inc/invalideur');
105        suivre_invalideur("id='reservation/$id_reservation'");
106
107
108        // Pipeline
109        pipeline('post_edition',
110                array(
111                        'args' => array(
112                                'table' => 'spip_reservations',
113                                'id_reservation' => $id_reservation,
114                                'action'=>'instituer',
115                                'statut_ancien' => $statut_ancien,
116                                'date_ancienne' => $date_ancienne,
117                                'id_parent_ancien' => $id_rubrique,
118                        ),
119                        'data' => $champs
120                )
121        );
122       
123       
124        // Les traitements spécifiques
125
126
127        $action=charger_fonction('editer_objet','action');
128        $quantite=_request('quantite');
129        $set=array(
130                'id_reservation'=>$id_reservation,
131                'statut'=>$statut
132        );
133       
134        // Gérer les détails des réservations
135        $evenements=_request('id_evenement');
136
137        // Si les déclinaisons sont actives on récupère les évenements via le prix
138         if(test_plugin_actif('declinaisons')){
139                 $evenements=array();
140                if($id_prix_objet=_request('id_objet_prix')){
141                        foreach(array_keys($id_prix_objet )AS $id_evenement){
142                                $evenements[]=$id_evenement;
143                        }
144                }
145         }
146        // Si on n'est pas dans le cas d'une création, on récupère les détails attachées ' la réservation
147        if(!is_array($evenements) OR (is_array($evenements) AND count($evenements)==0)){
148                       
149                $evenements=array();
150                $sql=sql_select('id_evenement','spip_reservations_details','id_reservation='. $id_reservation);
151                while($data=sql_fetch($sql)){
152                        $evenements[]=$data['id_evenement'];
153                }
154        }
155        else  {
156                $set['evenements']=$evenements;
157                set_request('evenements',$evenements);
158        }
159        // Pour chaque évènement on crée un détail de la réservation
160
161        foreach($evenements AS  $id_evenement){ 
162                // Si aucun détail n'est attaché à l'évènement, on le crée
163                if(!$reservations_detail=sql_fetsel('*','spip_reservations_details','id_reservation='.$id_reservation.' AND id_evenement='.$id_evenement)) {
164                        $id_reservations_detail='new';
165                        $set['id_prix_objet']=$id_prix_objet[$id_evenement];
166                }
167                else $id_reservations_detail=$reservations_detail['id_reservations_detail'];
168               
169                // Pour l'enregistrement
170                $set['id_evenement']=$id_evenement;
171
172                // Eviter l'envoi d'une notification pour chaque détail   
173                set_request('envoi_separe_actif','non');                       
174
175                $detail=$action($id_reservations_detail,'reservations_detail',$set);
176               
177        }
178
179        // Notifications
180
181        if ((!$statut_ancien OR $statut != $statut_ancien ) &&
182                 (isset($config['activer'])) &&
183                 (isset($config['quand']) && is_array($config['quand']) && in_array($statut,$config['quand'])) &&
184                 ($notifications = charger_fonction('notifications', 'inc', true))
185                ) {
186           //Déterminer la langue pour les notifications       
187           $lang=isset($row['lang'])?$row['lang']:lire_config('langue_site');
188           lang_select($lang); 
189                // Determiner l'expediteur
190                $options = array('statut'=>$statut,'lang'=>$lang);
191                if( $config['expediteur'] != "facteur" )
192                        $options['expediteur'] = $config['expediteur_'.$config['expediteur']];
193
194                // Envoyer au vendeur et au client
195                $notifications('reservation_vendeur', $id_reservation, $options);
196                if($config['client']){
197                        //$row['email']=trim($row['email']);
198                        if(intval($row['id_auteur']) AND $row['id_auteur']>0)$options['email']=sql_getfetsel('email','spip_auteurs','id_auteur='.$row['id_auteur']);
199                        else $options['email']=$row['email'];
200                               
201                        $notifications('reservation_client', $id_reservation, $options);
202                }
203                       
204        }
205
206        return ''; // pas d'erreur
207}
Note: See TracBrowser for help on using the repository browser.