source: spip-zone/_plugins_/commandes_abonnements/trunk/formulaires/commander_abonnement.php @ 108525

Last change on this file since 108525 was 108525, checked in by rastapopoulos@…, 3 years ago

Un début de plugin qui fournit des outils clé-en-main pour permettre à vos visiteurs de commander un abonnement en ligne sans rien avoir à coder !

Le plugin fournit donc un formulaire de commande ergonomique (pas finalisé ya des styles en dur encore) qui se base sur les offres publiées et quelques champs supplémentaires ajoutées (renouvellement auto, montant personnalisable, etc).

Dans chaque offre, on peut dire que le montant est personnalisable, et dans ce cas les visiteurs auront un champ libre en plus pour proposer un montant suppérieur.

Le résultat du choix est gardé en session, un peu comme pour un panier mais pas tout à fait pareil (car un seul élément mais avec des infos précises, pas juste l'id). Ensuite le plugin doit revenir à la charge une fois qu'on est sûr que nos visiteurs sont bien inscrits et connectés avec un compte qui a toutes les infos que l'on désire. Donc après l'inscription, ou après l'édition de son profil etc. Cette partie n'est pas terminée et doit être configurable ou doit savoir gérer plusieurs cas (inscription3 ou autre méthode de profil). Pour l'instant ça s'inscrit après "editer_auteur" pour montrer, et ça crée donc la Commande final à partir des infos que l'on avait gardé en session.

File size: 3.0 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7include_spip('inc/config');
8include_spip('inc/session');
9
10function formulaires_commander_abonnement_charger_dist($retour = ''){
11        $contexte = array(
12                'id_abonnements_offre' => 0,
13                'montants_persos' => array(),
14        );
15       
16        return $contexte;
17}
18
19function formulaires_commander_abonnement_verifier_dist($retour = ''){
20        $erreurs = array();
21        $id_abonnements_offre = intval(_request('id_abonnements_offre'));
22        $montants_persos = _request('montants_persos');
23       
24        // Trouver le prix par défaut de l'offre choisie
25        $trouver_prix = charger_fonction('prix', 'inc');
26        $prix_defaut = $trouver_prix('abonnements_offre', $id_abonnements_offre);
27       
28        // Si déjà on a pas trouvé de prix par défaut
29        if (!$prix_defaut) {
30                $erreurs['message_erreur'] = 'Impossible de trouver le prix de l’offre demandée.';
31        }
32       
33        // S'il y a une demande de montant perso
34        if (is_array($montants_persos) and isset($montants_persos[$id_abonnements_offre])) {
35                if ($montants_persos[$id_abonnements_offre]['libre'] !== '') {
36                        $montant_perso = $montants_persos[$id_abonnements_offre]['libre'];
37                }
38                elseif (isset($montants_persos[$id_abonnements_offre]['predef'])) {
39                        $montant_perso = $montants_persos[$id_abonnements_offre]['predef'];
40                }
41                // On va chercher le montant minimum
42                $montant_minimum = sql_getfetsel('montant_minimum', 'spip_abonnements_offres', 'id_abonnements_offre = '.$id_abonnements_offre);
43                // On ne prend que le tout premier
44                $montant_minimum = array_map('trim', explode('|', $montant_minimum));
45                $montant_minimum = floatval($montant_minimum[0]);
46                // Si le montant minimum est plus petit que le prix de base
47                if ($montant_minimum < $prix_defaut) {
48                        $montant_minimum = $prix_defaut;
49                }
50               
51                if (!is_numeric($montant_perso)) {
52                        $erreurs['montant_'.$id_abonnements_offre] = 'Le montant doit être un nombre.';
53                }
54                elseif ($montant_perso != $prix_defaut and $montant_perso < $montant_minimum) {
55                        $erreurs['montant_'.$id_abonnements_offre] = "Le montant personnalisé doit être d’au moins ${montant_minimum}€";
56                }
57        }
58       
59        // S'il n'y a aucune erreur, on évite de refaire des tests et on garde le bon montant
60        if (!$erreurs) {
61                set_request('montant', $montant_perso ? $montant_perso : $prix_defaut);
62        }
63       
64        return $erreurs;
65}
66
67function formulaires_commander_abonnement_traiter_dist($retour = '') {
68        $retours = array(
69                'redirect' => $retour,
70        );
71        $id_abonnements_offre = _request('id_abonnements_offre');
72        $montant = _request('montant');
73        $renouvellement_auto = sql_getfetsel('renouvellement_auto', 'spip_abonnements_offres', 'id_abonnements_offre = '.$id_abonnements_offre);
74       
75        // On va enregistrer en session les infos nécessaires à la commande
76        // elle sera créée quand on aura un utilisateur sous la main et qu'on sera sûr d'avoir ses infos à jour
77        $commande_abonnement = array(
78                'id_abonnements_offre' => $id_abonnements_offre,
79                'montant' => $montant,
80                'renouvellement_auto' => $renouvellement_auto,
81        );
82       
83        session_set('commande_abonnement', $commande_abonnement);
84       
85        return $retours;
86}
Note: See TracBrowser for help on using the repository browser.