source: spip-zone/_plugins_/catalogue/formulaires/catalogue.php @ 58179

Last change on this file since 58179 was 58179, checked in by gildas.cotomale@…, 9 years ago

refinement of the example form

File size: 7.9 KB
Line 
1<?php
2//!\ ceci est un exemple a adapter selon le besoin !
3
4// Sécurité
5if (!defined('_ECRIRE_INC_VERSION'))
6    return;
7
8
9// Chargement de l'environnement
10function formulaires_catalogue_charger($id_article=0)
11{
12    $contexte = array();
13    if ($id_article)
14        $contexte['id_article'] = intval($id_article);
15    else { // pas en parametre, alors dans l'environnement ?
16        $contexte['id_article'] = intval(_request('id_article')?_request('id_article'):_request('id'));
17    }
18
19        return $contexte;
20}
21
22
23// Verification des saisies (traitement si ok, sinon rechargement avec messages d'erreurs)
24function formulaires_catalogue_verifier($id_article=0)
25{
26        $erreurs = array();
27
28
29        return $erreurs;
30}
31
32
33// Traitement des saisies (ayant passe la validation)
34function formulaires_catalogue_traiter($id_article=0)
35{
36        $retours = array();
37        $ok = true;
38    // recuperer les parametres du formulaire.
39    $quantite = floatval(_request('quantite'));
40    $id_article = intval(_request('id_article'));
41    $id_variante = intval(_request('id_cat_variante'));
42    // preparer les parametres
43
44    if (test_plugin_actif('PANIERS')) {
45        include_spip('inc/paniers');
46        include_spip('inc/session');
47        // recuperer l'ID du panier...
48        if ($id_panier = paniers_id_panier_encours()) {
49            session_set(’id_panier’, $id_panier) ; // le mettre dans la session
50        } else {
51            session_set(’id_panier’) ; // s'assurer que la session ne contient pas un vieux panier
52            $id_panier = paniers_creer_panier(); // creer un nouveau panier
53        }
54        // y rajouter la variante d'article choisie (en fait on fait le lien avec la table, il ira chercher prix_ht+tva ou prix...) -- idealement, il aurait fallu verifier que ca n'y est pas deja et le mettre a jour si c'est le cas, mais par chance la clef empeche les doublons grossiers et comme on sera redirige vers le panier on pourra modifier la quantite...
55        if ($id_variante) {
56            $ok = intval(sql_insertq(
57                'spip_paniers_liens',
58                array(
59                    'id_panier' => $id_panier,
60                    'id_objet' => $id_variante,
61                    'objet' => 'cat_variantes',
62                    'quantite' => $quantite,
63                )
64            ));
65        } else {
66            $ok = intval(sql_insertq(
67                'spip_paniers_liens',
68                array(
69                    'id_panier' => $id_panier,
70                    'id_objet' => $id_article,
71                    'objet' => 'articles',
72                    'quantite' => $quantite,
73                )
74            ));
75        }
76        // se presenter sur la page du panier pou valider+payer sa commande ou poursuivre ses achats
77        $page = 'panier'; // il s'agit du squelette "panier.html" qui contiendrait #FORMULAIRE{panier,id_panier=#ENV{id_panier}}
78        $retours['redirect'] = parametre_url($page, 'id_panier', $id_panier, '&'); //@: http://groups.google.com/group/spip/browse_thread/thread/a78e26d38d2ddecb
79        if ($ok) {
80            $retours['editable'] = TRUE;
81            $retours['message_ok'] = _L("Article ajout&eacute;e au panier.<br />"). _T('paniers:panier_quantite_ok');
82        } else {
83            $retours['editable'] = TRUE;
84            $retours['message_erreur'] = _L("Un probl&egrave;me technique est survenu lors de l'ajout de votre article au panier. Merci de recommencer.");
85        }
86        return $retours;
87        header("Location: $page&id_panier=$id_panier"); exit;
88    } elseif (test_plugin_actif('SPIPAL')) {
89        // ajouter les champs supplementaires requis (et configures par/avec le plugin)
90        $ref_produit = "$id_article-$id_variante-0";
91        $code_devise = _request('monnaie');
92        if (!$code_devise)
93            $code_devise = 'EUR';
94        $data = sql_fetsel('titre', 'spip_articles', "id_article=$id_article" );
95        $nom_com = $data['titre'];
96        // inserer l'achat dans la table des produits achetes
97        if ($id_variante) {
98            $data = sql_fetsel('prix_ht, tva, titre', 'spip_cat_variantes', "id_cat_variante=$id_variante" );
99            $nom_com .= ' - '.$data['titre'];
100        } else {
101            $data = @sql_fetsel('prix_ht, tva', 'spip_articles', "id_article=$id_article" );
102            if (!count($data))
103                $data = @sql_fetsel('prix AS prix_ht, tva', 'spip_articles', "id_article=$id_article" );
104            if (!count($data))
105                $data = @sql_fetsel('prix AS prix_ht, 0 AS tva', 'spip_articles', "id_article=$id_article" );
106        }
107        $ok = intval(sql_insertq(
108            'spip_produits',
109            array(
110                //'id_article' => $id_article,
111                'ref_produit' => $ref_produit,
112                'nom_com' => $nom_com,
113                'don' => 0,
114                'prix_unitaire_ht' => $data['prix_ht'],
115                'tva' => $data['tva'],
116            )
117        ));
118        if ($ok) {
119            // ajouter les champs supplementaires requis (et configures par/avec le plugin)
120            set_request('lc', utiliser_langue_visiteur() );
121//          set_request('lc', $GLOBALS['visiteur_session']['lang'] );
122            set_request('cmd', '_xclick');
123            set_request('item_number', $ref_produit);
124            set_request('business', $GLOBALS['spipal_metas']['compte_paypal']);
125            set_request('quantity', $quantite);
126            set_request('amount', (1+($data['tva']>1?$data['tva']/100:$data['tva']))*$data['prix_ht']); // prix_unitaire_ttc
127            set_request('currency_code', $code_devise); // monnaie
128            set_request('item_name', $nom_com); // nom_com
129            set_request('page_style', $GLOBALS['spipal_metas']['style_page']);
130            set_request('custom', _request('custom') ); // custom
131            set_request('return', $GLOBALS['spipal_metas']['url_retour']);
132            set_request('notify_url', $GLOBALS['spipal_metas']['notify_url']);
133            // on renvoie le formulaire ainsi cree...
134            $retours['action'] = $GLOBALS['spipal_metas']['url_paypal']; //@ http://programmer.spip.org/Autres-options-de-chargement
135            $retours['redirect'] = $GLOBALS['spipal_metas']['url_paypal']; //@ http://www.mail-archive.com/spip@rezo.net/msg28067.html
136            $retours['editable'] = FALSE; // pour verification+confirmation avant redirection (nouvelle adresse d'action)
137            return $retours;
138//            echo redirige_action_post('activer_plugins','activer', 'admin_plugin','', $corps); // http://programmer.spip.org/Fonctions-predefinies-d-actions
139        }
140    } else {
141        $envoyer_mail = charger_fonction('envoyer_mail','inc');
142        $email_to = $GLOBALS['meta']['email_webmaster'];
143        $email_from = $GLOBALS['visiteur_session']['email']; //!\ on est dans le cas ou les personnes qui commandent sont inscrites sur le site et sont connectees avant de soumettre le formulaire... sinon prevoir par exemple un champ email dans le formulaire et le recuperer avec _request('email'); et penser aussi a traiter le paiement et la livraison (bref plus complexe)
144        $sujet = _L("Commande d'un article du catalogue");
145        $data = sql_fetsel('titre', 'spip_articles', "id_article=$id_article" );
146        $nom_article = $data['titre'];
147        $data = sql_fetsel('titre', 'spip_cat_variantes', "id_cat_variante=$id_variante" );
148        $nom_variante = $data['titre'];
149        $message = "Article: $id_article - $nom_article\nVariante: $id_variante - $nom_variante\nQuantite: $quantite\nTarifs ".$GLOBALS['meta']['url_site'].': '.$GLOBALS['meta']['url_site']."/ecrire/?exec=articles&id_article=$id_article";
150        $ok = $envoyer_mail($email_to,$sujet,$message,$email_from);
151        if ($ok) {
152            $retours['message_ok'] = _L("Votre commande est bien prise en compte.");
153            $retours['editable'] = FALSE;
154        } else {
155            $retours['message_erreur'] = _L("Probl&egrave;me technique rencontr&eacute; lors de l'envoie ; meric de r&eacute;essayer ult&eacute;rieurement.");
156            $retours['editable'] = TRUE;
157        }
158    }
159
160
161        return $retours;
162}
163
164?>
Note: See TracBrowser for help on using the repository browser.