source: spip-zone/_plugins_/spip-listes/spip-listes_1_9_3/formulaires/spip_listes_inscription.php @ 48911

Last change on this file since 48911 was 48911, checked in by paladin@…, 10 years ago

Revision du formulaire pour FORMULAIRE_SPIP_LISTES_INSCRIPTION. Il est possible de s'abonner à l'inscription/abonnement.

File size: 6.2 KB
Line 
1<?php
2/**
3 * Formulaire d'inscription
4 *
5 * @since SPIP 2.0
6 * @see http://www.spip.net/fr_article3796.html
7 * @see formulaires/spip_listes_inscription.html
8 *              qui est le squelette de construction
9 *              utilisé ici
10 * @package spiplistes
11 */
12 // $LastChangedRevision: 47063 $
13 // $LastChangedBy: paladin@quesaco.org $
14 // $LastChangedDate: 2011-04-25 18:46:50 +0200 (Lun 25 avr 2011) $
15       
16include_spip('inc/acces');
17include_spip('inc/spiplistes_api');
18
19
20/**
21 * @return array
22 */
23function formulaires_spip_listes_inscription_charger_dist ($id_liste='')
24{
25        $valeurs = array(
26                'email' => '',
27                'id_liste' => $id_liste
28        );
29       
30        return $valeurs;
31}
32
33/**
34 * @return array
35 */
36function formulaires_spip_listes_inscription_verifier_dist ($id_liste='')
37{
38        $erreurs = array();
39       
40        // verifier que les champs obligatoires sont bien la :
41        foreach(array('email') as $obligatoire) {
42                if (!_request($obligatoire))
43                {
44                        $erreurs[$obligatoire] = _T('spiplistes:champ_obligatoire');
45                }
46        }
47       
48        if (!in_array(_request('format_abo'), array('html','texte')))
49        {
50                $erreurs['format'] = 'format inconnu';
51        }
52       
53        $listes = _request('listes');
54       
55        $listes_sel = array();
56       
57        if (is_array($listes))
58        {
59                foreach($listes as $liste)
60                {
61                        $id_liste = intval($liste);
62                        if ($id_liste > 0) 
63                        {
64                                $listes_sel[] = $id_liste;
65                        }
66                }
67        }
68
69        // verifier que si un email a ete saisi, il est bien valide :
70        include_spip('inc/filtres');
71        $email = _request('email');
72        if ($email && !email_valide($email)) 
73        {
74                $erreurs['email'] = _T('spiplistes:cet_email_pas_valide');
75        }
76       
77        //// Verifier si le mail est deja connu
78        //if (email_valide(_request('email'))) {
79        //      if (sql_getfetsel('id_auteur','spip_auteurs',"id_auteur !='".intval($id_auteur)."' AND email = '$email'")) {
80        //              $erreurs['email'] = _T('spiplistes:cet_email_deja_enregistre');
81        //      }
82        //}
83
84        if (count($erreurs)) {
85                $erreurs['message_erreur'] = _T('spiplistes:saisie_erreurs');
86        }
87       
88    return ($erreurs); // si c'est vide, traiter sera appele, sinon le formulaire sera re-soumis
89}
90
91/**
92 * Traite les donnees du formulaire de saisie
93 * - valide l'adresse mail
94 * - l'enregistre si manquant
95 * - l'abonne aux listes souhaitees
96 * - envoie un mail de confirmation
97 * @return array
98 */
99function formulaires_spip_listes_inscription_traiter_dist ($id_liste = '') {
100       
101        /**
102         * Un abonné doit etre enregistre
103         * dans spip_auteurs,
104         * spip_auteurs_elargis, (historique, pour le format de réception)
105         * spip_auteurs_listes (table des abonnements)
106         */
107       
108        include_spip('inc/spiplistes_api_courrier');
109       
110        $val['email'] = _request('email');
111        $val['email'] = email_valide ($val['email']);
112       
113        if ($val['email'])
114        {
115                $val['nom'] = _request('email');
116                $val['lang'] = _request('lang');
117                if (!$val['lang']) {
118                        $val['lang'] = $GLOBALS['meta']['langue_site'];
119                }
120                $val['alea_actuel'] = creer_uniqid();
121                $val['alea_futur'] = creer_uniqid();
122                $val['low_sec'] = '';
123                $val['statut'] = 'aconfirmer';
124               
125                $format = _request('format_abo');
126                if (!$format) {
127                        $format = spiplistes_format_abo_default ();
128                }
129                $listes = _request('listes');
130        }
131       
132        /**
133         * Verifier si l'auteur existe deja,
134         */
135        if ($val['email'])
136        {
137                $auteur = spiplistes_auteurs_auteur_select('id_auteur,nom,statut,lang'
138                                                                                           , 'email='.sql_quote($val['email'])
139                                        );
140        }
141       
142        if ($auteur)
143        {
144                /**
145                 * Si le compte existe, le reactivier
146                 */
147                $contexte['id_auteur'] = $id_auteur = $auteur['id_auteur'];
148                if ($auteur['statut'] == '5poubelle')
149                {
150                        $new_statut = 'aconfirmer';
151                        spiplistes_auteurs_auteur_statut_modifier ($id_auteur, $new_statut);
152                        $auteur['statut'] = $new_statut;
153                }
154                $contexte['nouvel_inscription'] = 'non';
155                $contexte['nom'] = $auteur['nom'];
156                $contexte['statut'] = $auteur['statut'];
157                $contexte['lang'] = ($auteur['lang'])
158                                                        ? $auteur['lang']
159                                                        : $GLOBALS['meta']['langue_site']
160                                                        ;
161                spiplistes_abonnements_auteur_desabonner ($id_auteur, 'toutes');
162               
163                spiplistes_debug_log ('inscription auteur #'.$id_auteur.' email:'.$val['email']);
164        }
165        else
166        {
167                /**
168                 * Si le compte n'existe pas, le créer
169                 */
170                if ($id_auteur = spiplistes_auteurs_auteur_insertq ($val))
171                {
172                        spiplistes_format_abo_modifier ($id_auteur, $format);
173                }
174                $contexte['nouvel_inscription'] = 'oui';
175                $contexte['id_auteur'] = $id_auteur;
176                $contexte['nom'] = $val['nom'];
177                $contexte['statut'] = $val['statut'];
178                $contexte['lang'] = $GLOBALS['meta']['langue_site'];
179
180                spiplistes_debug_log ('NEW inscription email:'.$val['email']);
181        }
182       
183        if ($listes && is_array($listes) && count($listes))
184        {
185                spiplistes_abonnements_ajouter ($id_auteur, $listes);
186                $contexte['ids_abos'] = array_values($listes);
187        }
188       
189        /**
190         * Construit le message à partir du patron
191         */
192        if ($id_auteur > 0)
193        {
194                $cur_format = spiplistes_format_abo_demande ($id_auteur);
195                if (!$cur_format)
196                {
197                        $cur_format = $format;
198                        spiplistes_format_abo_modifier ($id_auteur, $format);
199                }
200                $contexte['format'] = $cur_format;
201                $nom_site_spip = spiplistes_nom_site_texte ($lang);
202                $email_objet = '['.$nom_site_spip.'] '._T('spiplistes:confirmation_inscription');
203
204                /**
205                 * Le cookie pour le lien direct
206                 */
207                $cookie = creer_uniqid();
208                spiplistes_auteurs_cookie_oubli_updateq($cookie, $email);
209                $contexte['cookie_oubli'] = $cookie;
210               
211                /**
212                * Assemble le patron
213                * Obtient en retour le contenu en version html et texte
214                */
215                $path_patron = _SPIPLISTES_PATRONS_MESSAGES_DIR . spiplistes_patron_message();
216               
217                list($courrier_html, $courrier_texte) = spiplistes_courriers_assembler_patron (
218                        $path_patron
219                        , $contexte);
220                //spiplistes_debug_log ('Messages size: html: '.strlen($courrier_html));
221                //spiplistes_debug_log ('Messages size: text: '.strlen($courrier_texte));
222               
223                $email_contenu = array(
224                                /**
225                                 * La version HTML du message
226                                 */
227                                'html' => '<html>' . PHP_EOL
228                                        . '<body>' . PHP_EOL
229                                        . $courrier_html
230                                        . '</body>' . PHP_EOL
231                                        . '</html>' . PHP_EOL
232                                /**
233                                 * Et la version texte
234                                 */
235                                , 'texte' => $courrier_texte
236                                );
237        }
238       
239        /**
240         * envoyer mail de confirmation
241         */
242        if ($id_auteur
243                && spiplistes_envoyer_mail (
244                        $val['email']
245                        , $email_objet
246                        , $email_contenu
247                        , false
248                        , ''
249                        , $format
250           )
251        ) {
252                $contexte = array('message_ok'=>_T('spiplistes:demande_ok'),'editable' => false,);
253        }
254        else {
255                $contexte = array('message_ok'=>_T('spiplistes:demande_ko'),'editable' => false,);
256        }
257       
258        return ($contexte);
259}
260
Note: See TracBrowser for help on using the repository browser.