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

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

Le cookie oubli pour le lien direct sur la page d'abonnement

File size: 6.3 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        if (is_array($listes))
56        {
57                foreach($listes as $liste)
58                {
59                        $id_liste = intval($liste);
60                        if(!$id_liste) 
61                        {
62                                $erreurs['liste'] = _T('spiplistes:liste_inconnue');
63                        }
64                }
65        }
66
67        // verifier que si un email a ete saisi, il est bien valide :
68        include_spip('inc/filtres');
69        $email = _request('email');
70        if ($email && !email_valide($email)) 
71        {
72                $erreurs['email'] = _T('spiplistes:cet_email_pas_valide');
73        }
74       
75        //// Verifier si le mail est deja connu
76        //if (email_valide(_request('email'))) {
77        //      if (sql_getfetsel('id_auteur','spip_auteurs',"id_auteur !='".intval($id_auteur)."' AND email = '$email'")) {
78        //              $erreurs['email'] = _T('spiplistes:cet_email_deja_enregistre');
79        //      }
80        //}
81
82        if (count($erreurs)) {
83                $erreurs['message_erreur'] = _T('spiplistes:saisie_erreurs');
84        }
85       
86    return ($erreurs); // si c'est vide, traiter sera appele, sinon le formulaire sera re-soumis
87}
88
89/**
90 * Traite les donnees du formulaire de saisie
91 * - valide l'adresse mail
92 * - l'enregistre si manquant
93 * - l'abonne aux listes souhaitees
94 * - envoie un mail de confirmation
95 * @return array
96 */
97function formulaires_spip_listes_inscription_traiter_dist ($id_liste = '') {
98       
99        /**
100         * Un abonné doit etre enregistre
101         * dans spip_auteurs,
102         * spip_auteurs_elargis, (historique, pour le format de réception)
103         * spip_auteurs_listes (table des abonnements)
104         */
105       
106        include_spip('inc/spiplistes_api_courrier');
107       
108        $val['email'] = _request('email');
109        $val['email'] = email_valide ($val['email']);
110       
111        if ($val['email'])
112        {
113                $val['nom'] = _request('email');
114                $val['lang'] = _request('lang');
115                if (!$val['lang']) {
116                        $val['lang'] = $GLOBALS['meta']['langue_site'];
117                }
118                $val['alea_actuel'] = creer_uniqid();
119                $val['alea_futur'] = creer_uniqid();
120                $val['low_sec'] = '';
121                $val['statut'] = 'aconfirmer';
122               
123                $format = _request('format_abo');
124                if (!$format) {
125                        $format = spiplistes_format_abo_default ();
126                }
127                $listes = _request('listes');
128                //spiplistes_debug_log ('format '.$format);
129        }
130       
131        /**
132         * Verifier si l'auteur existe deja,
133         */
134        if ($val['email'])
135        {
136                $auteur = spiplistes_auteurs_auteur_select('id_auteur,nom,statut,lang'
137                                                                                           , 'email='.sql_quote($val['email'])
138                                        );
139        }
140       
141        if ($auteur)
142        {
143                /**
144                 * Si le compte existe, le reactivier
145                 */
146                $contexte['id_auteur'] = $id_auteur = $auteur['id_auteur'];
147                if ($auteur['statut'] == '5poubelle')
148                {
149                        $new_statut = 'aconfirmer';
150                        spiplistes_auteurs_auteur_statut_modifier ($id_auteur, $new_statut);
151                        $auteur['statut'] = $new_statut;
152                }
153                $contexte['nouvel_inscription'] = 'non';
154                $contexte['nom'] = $auteur['nom'];
155                $contexte['statut'] = $auteur['statut'];
156                $contexte['lang'] = ($auteur['lang'])
157                                                        ? $auteur['lang']
158                                                        : $GLOBALS['meta']['langue_site']
159                                                        ;
160                spiplistes_debug_log ('inscription auteur #'.$id_auteur.' email:'.$val['email']);
161        }
162        else
163        {
164                /**
165                 * Si le compte n'existe pas, le créer
166                 */
167                if ($id_auteur = spiplistes_auteurs_auteur_insertq ($val))
168                {
169                        spiplistes_format_abo_modifier ($id_auteur, $format);
170                }
171                $contexte['nouvel_inscription'] = 'oui';
172                $contexte['id_auteur'] = $id_auteur;
173                $contexte['nom'] = $val['nom'];
174                $contexte['statut'] = $val['statut'];
175                $contexte['lang'] = $GLOBALS['meta']['langue_site'];
176
177                spiplistes_debug_log ('NEW inscription email:'.$val['email']);
178        }
179       
180        if ($listes) {
181                /**
182                 * @todo a optimiser (une seule req)
183                 */
184                foreach($listes as $liste) {
185                        sql_insertq ('spip_auteurs_listes'
186                                        , array('id_auteur' => $id_auteur
187                                                        ,'id_liste' => $liste
188                                                        )
189                                        );
190                }
191        }
192       
193        /**
194         * Construit le message à partir du patron
195         */
196        if ($id_auteur > 0)
197        {
198                $cur_format = spiplistes_format_abo_demande ($id_auteur);
199                if (!$cur_format)
200                {
201                        $cur_format = $format;
202                        spiplistes_format_abo_modifier ($id_auteur, $format);
203                }
204                $contexte['format'] = $cur_format;
205                $nom_site_spip = spiplistes_nom_site_texte ($lang);
206                $email_objet = '['.$nom_site_spip.'] '._T('spiplistes:confirmation_inscription');
207
208                /**
209                 * Le cookie pour le lien direct
210                 */
211                $cookie = creer_uniqid();
212                spiplistes_auteurs_cookie_oubli_updateq($cookie, $email);
213                $contexte['cookie_oubli'] = $cookie;
214               
215                /**
216                *
217                * Assemble le patron
218                * Obtient en retour le contenu en version html et texte
219                */
220                $path_patron = _SPIPLISTES_PATRONS_MESSAGES_DIR . spiplistes_patron_message();
221                spiplistes_debug_log ('Patron: '.$path_patron);
222                list($courrier_html, $courrier_texte) = spiplistes_courriers_assembler_patron (
223                        $path_patron
224                        , $contexte);
225                spiplistes_debug_log ('Messages size: html: '.strlen($courrier_html));
226                spiplistes_debug_log ('Messages size: text: '.strlen($courrier_texte));
227               
228                $email_contenu = array(
229                                /**
230                                 * La version HTML du message
231                                 */
232                                'html' => '<html>' . PHP_EOL
233                                        . '<body>' . PHP_EOL
234                                        . $courrier_html
235                                        . '</body>' . PHP_EOL
236                                        . '</html>' . PHP_EOL
237                                /**
238                                 * Et la version texte
239                                 */
240                                , 'texte' => $courrier_texte
241                                );
242        }
243       
244        /**
245         * envoyer mail de confirmation
246         */
247        if ($id_auteur
248                && spiplistes_envoyer_mail (
249                        $val['email']
250                        , $email_objet
251                        , $email_contenu
252                        , false
253                        , ''
254                        , $format
255           )
256        ) {
257                $contexte = array('message_ok'=>_T('spiplistes:demande_ok'),'editable' => false,);
258        }
259        else {
260                $contexte = array('message_ok'=>_T('spiplistes:demande_ko'),'editable' => false,);
261        }
262       
263        return ($contexte);
264}
265
Note: See TracBrowser for help on using the repository browser.