source: spip-zone/_plugins_/commandes/trunk/action/editer_commande.php @ 91242

Last change on this file since 91242 was 91242, checked in by pierrekuhn82@…, 6 years ago

Mettre le inclure avant et up de version.

File size: 10.9 KB
Line 
1<?php
2/**
3 * API d'édition du plugin Commandes
4 *
5 * @plugin     Commandes
6 * @copyright  2014
7 * @author     Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
8 * @licence    GPL 3
9 * @package    SPIP\Commandes\Editer
10 */
11
12// Sécurité
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15/**
16 * Point d'entrée d'édition d'une commande
17 *
18 * On ne peut entrer que par un appel en fournissant `$id_commande`
19 * mais pas pas une url
20 *
21 * @uses commande_inserer()
22 * @uses commande_modifier()
23 *
24 * @param int $id_commande
25 *     Identifiant de la commande
26 * @return array
27 *     Identifiant de la commande et message d'erreur eventuel
28 */
29function action_editer_commande_dist($id_commande=null) {
30
31        // appel direct depuis une url interdit
32        if (is_null($id_commande)){
33                //$securiser_action = charger_fonction('securiser_action', 'inc');
34                //$id_commande = $securiser_action();
35                include_spip('inc/minipres');
36                echo minipres(_T('info_acces_interdit'));
37                die();
38        }
39
40        // si id_commande n'est pas un nombre, c'est une creation
41        if (!$id_commande = intval($id_commande)) {
42                $id_commande = commande_inserer(null,array('id_auteur'=>_request('id_auteur')));
43        }
44
45        if (!($id_commande = intval($id_commande))>0)
46                return array($id_commande,_L('echec enregistrement en base'));
47
48        // Enregistre l'envoi dans la BD
49        $err = commande_modifier($id_commande);
50
51        return array($id_commande,$err);
52}
53
54
55/**
56 * Crée une nouvelle commande et retourne son identifiant
57 *
58 * Les notifications par email sont traitées après l'insertion en base et l'appel des pipelines
59 *
60 * @uses traiter_notifications_commande()
61 *
62 * @pipeline_appel pre_insertion
63 * @pipeline_appel post_insertion
64 * @param null $id_parent
65 *     Paramètre inutilisé, présent pour compatibilité avec api modifier objet
66 * @param array $champs
67 *     Couples des champs/valeurs par défaut
68 * @return int|bool
69 *     - Identifiant de la commande si succès
70 *     - False en cas d'erreur
71 */
72 
73function commande_inserer($id_parent=null, $champs=array()) {
74        $id_commande = false;
75
76        // On insère seulement s'il y a un auteur correct
77        if (isset($champs['id_auteur']) and $champs['id_auteur'] = intval($champs['id_auteur'])){
78                // La date de tout de suite
79                $champs['date'] = date('Y-m-d H:i:s');
80               
81                // Le statut en cours par défaut
82                if (!isset($champs['statut'])) {
83                        $champs['statut'] = 'encours';
84                }
85
86                // La référence si elle n'est pas déjà donnée
87                if (!isset($champs['reference'])) {
88                        $fonction_reference = charger_fonction('commandes_reference', 'inc/');
89                        $champs['reference'] = $fonction_reference($champs['id_auteur']);
90                }
91               
92                // Envoyer aux plugins avant insertion
93                $champs = pipeline('pre_insertion',
94                        array(
95                                'args' => array(
96                                        'table' => 'spip_commandes',
97                                ),
98                                'data' => $champs
99                        )
100                );
101               
102                // Si on veut insérer des échéances et que ce n'est pas déjà sérialisé, on sérialise TOUJOURS ce champ
103                if (isset($champs['echeances']) and @unserialize($champs['echeances']) === false) {
104                        $champs['echeances'] = serialize($champs['echeances']);
105                }
106               
107                // Insérer l'objet
108                $id_commande = sql_insertq("spip_commandes", $champs);
109
110                // Envoyer aux plugins après insertion
111                pipeline('post_insertion',
112                        array(
113                                'args' => array(
114                                        'table' => 'spip_commandes',
115                                        'id_objet' => $id_commande
116                                ),
117                                'data' => $champs
118                        )
119                );
120               
121                // Envoi des notifications par email
122                spip_log("inserer_commande : appel des notifications pour la commande $id_commande",'commandes.'._LOG_INFO);
123                include_spip('inc/commandes');
124                traiter_notifications_commande($id_commande);
125
126        }
127
128        return $id_commande;
129}
130
131/**
132 * Appelle les fonctions de modification d'une commande
133 *
134 * @uses objet_modifier_champs()
135 * @uses commande_instituer()
136 *
137 * @param int $id_commande
138 *     Identifiant de la commande
139 * @param array|null $set
140 *     Couples des champs/valeurs à modifier
141 * @return mixed|string $err
142 *     Message d'erreur éventuel
143 */
144function commande_modifier($id_commande, $set=null) {
145        $err = '';
146
147        include_spip('inc/modifier');
148        include_spip('inc/filtres');
149        $c = collecter_requests(
150                // whitelist
151                objet_info('commande','champs_editables'),
152                // blacklist
153                array('date','statut'),
154                // donnees eventuellement fournies
155                $set
156        );
157       
158        // Si on veut insérer des échéances et que ce n'est pas déjà sérialisé, on sérialise TOUJOURS ce champ
159        if (isset($c['echeances']) and @unserialize($c['echeances']) === false) {
160                $c['echeances'] = serialize($c['echeances']);
161        }
162       
163        // Si l'objet est publie, invalider les caches et demander sa reindexation
164        if (objet_test_si_publie('commande',$id_commande)){
165                $invalideur = "id='id_commande/$id_commande'";
166                $indexation = true;
167        }
168        else {
169                $invalideur = "";
170                $indexation = false;
171        }
172
173        if ($err = objet_modifier_champs('commande', $id_commande,
174                array(
175                        'nonvide' => array('statut' => _T('info_sans_statut')),
176                        'invalideur' => $invalideur,
177                        'indexation' => $indexation,
178                ),
179                $c))
180                return $err;
181
182        // Modification de statut
183        $c = array();
184        foreach (array('id_auteur', 'date', 'statut',) as $champ)
185                $c[$champ] = _request($champ, $set);
186        $err = commande_instituer($id_commande, $c);
187
188        return $err;
189}
190
191/**
192 * Instituer une commande
193 *
194 * Modifie des éléments à part que sont l'auteur, la date, le statut
195 *
196 * @uses editer_commande_details()
197 * @uses traiter_notifications_commande()
198 *
199 * @pipeline_appel pre_edition
200 * @pipeline_appel post_edition
201 * @param int $id_commande
202 *     Identifiant de la commande
203 * @param array $c
204 *     Couples champ/valeur à modifier
205 * @param bool $calcul_details
206 *     (?) Inutilisé
207 * @return mixed|string
208 */
209function commande_instituer($id_commande, $c, $calcul_details=true){
210        include_spip('inc/autoriser');
211        include_spip('inc/modifier');
212
213        $row = sql_fetsel("statut, date, id_auteur", "spip_commandes", "id_commande=$id_commande");
214        $id_auteur = $row['id_auteur'];
215        $statut_ancien = $statut = $row['statut'];
216        $date_ancienne = $date = $row['date'];
217        $champs = array();
218
219        $d = isset($c['date']) ? $c['date'] : null;
220        $s = isset($c['statut']) ? $c['statut'] : $statut;
221
222        // On ne modifie le statut que si c'est autorisé
223        if ($s != $statut or ($d AND $d != $date)) {
224                //todo = donner l'autorisation a commandes_paypal_traitement_paypal
225                //if (autoriser('modifier', 'commande', $id_commande))
226                        $statut = $champs['statut'] = $s;
227                //else
228                //      spip_log("editer_commande $id_commande refus " . join(' ', $c),'commandes');
229
230                // Si on doit changer la date explicitement
231                if ($d){
232                        $champs['date'] = $date = $d;
233                }
234        }
235
236        $champs['id_auteur'] = $id_auteur;
237
238        // Mettre à jour les dates de paiement ou d'envoi pour les statuts correspondants
239        if ($statut != $statut_ancien)
240                foreach (array('partiel'=>'paiement', 'paye'=>'paiement', 'envoye'=>'envoi') as $k=>$v)
241                        if ($statut == $k)
242                                $champs["date_$v"] = date('Y-m-d H:i:s');
243
244        // Envoyer aux plugins avant édition
245        $champs = pipeline(
246                'pre_edition',
247                array(
248                        'args' => array(
249                                'table' => 'spip_commandes',
250                                'id_objet' => $id_commande,
251                                'action' => 'instituer',
252                                'statut_ancien' => $statut_ancien,
253                        ),
254                        'data' => $champs
255                )
256        );
257
258        if (!count($champs)) return;
259
260        // Envoyer les modifications et calculer les héritages
261        editer_commande_details($id_commande, $champs, $calcul_details);
262
263        // Invalider les caches
264        include_spip('inc/invalideur');
265        suivre_invalideur("id='id_commande/$id_commande'");
266
267        if ($date) {
268                $t = strtotime($date);
269                $p = @$GLOBALS['meta']['date_prochain_postdate'];
270                if ($t > time() AND (!$p OR ($t < $p))) {
271                        ecrire_meta('date_prochain_postdate', $t);
272                }
273        }
274
275        spip_log("instituer_commande : flux post_edition pour la commande $id_commande",'commandes.'._LOG_INFO);
276
277        // Envoyer aux plugins après édition
278        pipeline(
279                'post_edition',
280                array(
281                        'args' => array(
282                                'table' => 'spip_commandes',
283                                'id_objet' => $id_commande,
284                                'action' => 'instituer',
285                                'statut_ancien' => $statut_ancien,
286                        ),
287                        'data' => $champs
288                )
289        );
290
291        // Envoi des notifications par email
292        spip_log("instituer_commande : appel des notifications pour la commande $id_commande",'commandes.'._LOG_INFO);
293        include_spip('inc/commandes');
294        traiter_notifications_commande($id_commande);
295
296        return ''; // pas d'erreur
297}
298
299/**
300 * Fabrique la requête d'institution de la commande
301 *
302 * Modifie la commande en calculant les dépendances des détails
303 *
304 * @param int $id_commande
305 *     Identifiant de la commande
306 * @param array $champs
307 *     Couples des champs/valeurs à modifier
308 * @param bool $cond
309 *     (?) inutilisé
310 * @return void
311 */
312function editer_commande_details($id_commande, $champs, $cond=true) {
313
314        if (!$champs) return;
315
316        sql_updateq(table_objet_sql('commande'), $champs, "id_commande=$id_commande");
317
318        // Changer le statut des elements concernes ? (voir details)
319
320        /*
321        if ($cond) {
322                include_spip('inc/rubriques');
323                $postdate = ($GLOBALS['meta']["post_dates"] == "non" and isset($champs['date']) and (strtotime($champs['date']) < time())) ? $champs['date'] : false;
324                calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate);
325        }
326        */
327}
328
329// Ci dessous, fonctions dépréciées gardées pour rétro-compatibilité
330
331/**
332 * Enregistre une modification d'une commande
333 *
334 * @deprecated Alias de 'commande_modifier' pour rétro-compatibilité
335 * @uses commande_modifier()
336 *
337 * @param int $id_commande
338 *     Identifiant de la commande
339 * @param array $c
340 *     Couples des champs/valeurs modifiées
341 * @return mixed|string
342 */
343function revision_commande($id_commande, $c=false) {
344        return commande_modifier($id_commande, $c);
345}
346
347/**
348 * Crée une nouvelle commande
349 *
350 * @deprecated Alias de 'commande_inserer' pour rétro-compatibilité
351 * @uses commande_inserer()
352 *
353 * @param array $champs
354 *     Couples des champs/valeurs par défaut
355 * @return
356 */
357function commande_insert($champs=array()){
358        return commande_inserer(null,$champs);
359}
360
361/**
362 * Appelle les fonctions de modification d'une commande
363 *
364 * @deprecated Alias de 'commande_modifier' pour rétro-compatibilité
365 * @uses commande_modifier()
366 *
367 * @param int $id_commande
368 *     Identifiant de la commande
369 * @param array|null $set
370 *     Couples des champs/valeurs à modifier
371 * @return
372 */
373function commande_set($id_commande, $set=null){
374        return commande_modifier($id_commande, $set);
375}
376
377/**
378 * Modifie des éléments à part que sont l'auteur, la date, le statut
379 *
380 * @deprecated Alias de 'commande_instituer' pour rétro-compatibilité
381 * @uses commande_instituer()
382 *
383 * @param int $id_commande
384 *     Identifiant de la commande
385 * @param array $c
386 *     Couples des champs/valeurs à modifier
387 * @param bool $calcul_details
388 *     (?) Inutilisé
389 * @return
390 */
391function instituer_commande($id_commande, $c, $calcul_details=true){
392        return commande_instituer($id_commande, $c, $calcul_details);
393}
394
395?>
Note: See TracBrowser for help on using the repository browser.