[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / squelettes-dist / formulaires / inscription.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 function formulaires_inscription_charger_dist($mode, $focus, $id=0) {
16 $valeurs = array('nom_inscription'=>'','mail_inscription'=>'', 'id'=>$id);
17 if ($mode=='1comite')
18 $valeurs['_commentaire'] = _T('pass_espace_prive_bla');
19 else
20 $valeurs['_commentaire'] = _T('pass_forum_bla');
21
22 include_spip('inc/autoriser');
23 if (!autoriser('inscrireauteur', $mode, $id))
24 $valeurs['editable'] = false;
25
26 return $valeurs;
27 }
28
29 // Si inscriptions pas autorisees, retourner une chaine d'avertissement
30 function formulaires_inscription_verifier_dist($mode, $focus, $id=0) {
31
32 $erreurs = array();
33 include_spip('inc/filtres');
34 include_spip('inc/autoriser');
35 if (!autoriser('inscrireauteur', $mode, $id) OR (strlen(_request('nobot'))>0))
36 $erreurs['message_erreur'] = _T('rien_a_faire_ici');
37
38 if (!$nom = _request('nom_inscription'))
39 $erreurs['nom_inscription'] = _T("info_obligatoire");
40 elseif (!nom_acceptable(_request('nom_inscription')))
41 $erreurs['nom_inscription'] = _T("ecrire:info_nom_pas_conforme");
42 if (!$mail = _request('mail_inscription'))
43 $erreurs['mail_inscription'] = _T("info_obligatoire");
44
45 // compatibilite avec anciennes fonction surchargeables
46 // plus de definition par defaut
47 if (!count($erreurs)){
48 if (function_exists('test_inscription'))
49 $f = 'test_inscription';
50 else
51 $f = 'test_inscription_dist';
52 $declaration = $f($mode, $mail, $nom, $id);
53 if (is_string($declaration)) {
54 $k = (strpos($declaration, 'mail') !== false) ?
55 'mail_inscription' : 'nom_inscription';
56 $erreurs[$k] = _T($declaration);
57 } else {
58 include_spip('base/abstract_sql');
59
60 if ($row = sql_fetsel("statut, id_auteur, login, email", "spip_auteurs", "email=" . sql_quote($declaration['email']))){
61 if (($row['statut'] == '5poubelle') AND !$declaration['pass'])
62 // irrecuperable
63 $erreurs['message_erreur'] = _T('form_forum_access_refuse');
64 elseif (($row['statut'] != 'nouveau') AND !$declaration['pass'])
65 // deja inscrit
66 $erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
67 spip_log($row['id_auteur'] . " veut se resinscrire");
68 }
69 }
70 }
71 return $erreurs;
72 }
73
74 function formulaires_inscription_traiter_dist($mode, $focus, $id=0) {
75
76 $nom = _request('nom_inscription');
77 $mail_complet = _request('mail_inscription');
78
79 if (function_exists('test_inscription'))
80 $f = 'test_inscription';
81 else $f = 'test_inscription_dist';
82 $desc = $f($mode, $mail_complet, $nom, $id);
83
84 if (!is_array($desc)) {
85 $desc = _T($desc);
86 } else {
87 include_spip('base/abstract_sql');
88 $res = sql_select("statut, id_auteur, login, email", "spip_auteurs", "email=" . sql_quote($desc['email']));
89 if (!$res)
90 $desc = _T('titre_probleme_technique');
91 else {
92 $row = sql_fetch($res);
93 // s'il n'existe pas deja, creer les identifiants
94 $desc = $row ? $row : inscription_nouveau($desc);
95 }
96 }
97
98 if (is_array($desc)) {
99 // generer le mot de passe (ou le refaire si compte inutilise)
100 $desc['pass'] = creer_pass_pour_auteur($desc['id_auteur']);
101 // charger de suite cette fonction, pour ses utilitaires
102 $envoyer_mail = charger_fonction('envoyer_mail','inc');
103 if (function_exists('envoyer_inscription'))
104 $f = 'envoyer_inscription';
105 else $f = 'envoyer_inscription_dist';
106 list($sujet,$msg,$from,$head) = $f($desc, $nom, $mode, $id);
107 if (!$envoyer_mail($mail_complet, $sujet, $msg, $from, $head))
108 $desc = _T('form_forum_probleme_mail');
109 // Notifications
110 if (is_array($desc) and $notifications = charger_fonction('notifications', 'inc')) {
111 $notifications('inscription', $desc['id_auteur'],
112 array('nom' => $desc['nom'], 'email' => $desc['email'])
113 );
114 }
115 }
116
117 return array('message_ok'=>is_string($desc) ? $desc : _T('form_forum_identifiant_mail'));
118 }
119
120 // fonction qu'on peut redefinir pour filtrer les adresses mail et les noms,
121 // et donner des infos supplementaires
122 // Std: controler que le nom (qui sert a calculer le login) est plausible
123 // et que l'adresse est valide. On les normalise au passage (trim etc).
124 // Retour:
125 // - si ok un tableau avec au minimum email, nom, mode (redac / forum)
126 // - si ko une chaine de langue servant d'argument a _T expliquant le refus
127
128 // http://doc.spip.org/@test_inscription_dist
129 function test_inscription_dist($mode, $mail, $nom, $id=0) {
130
131 include_spip('inc/filtres');
132 $nom = trim(corriger_caracteres($nom));
133 if((strlen ($nom) < _LOGIN_TROP_COURT) OR (strlen($nom) > 64))
134 return 'ecrire:info_login_trop_court';
135 if (!$r = email_valide($mail)) return 'info_email_invalide';
136 return array('email' => $r, 'nom' => $nom, 'bio' => $mode);
137 }
138
139 // On enregistre le demandeur comme 'nouveau', en memorisant le statut final
140 // provisoirement dans le champ Bio, afin de ne pas visualiser les inactifs
141 // A sa premiere connexion il obtiendra son statut final.
142
143 // http://doc.spip.org/@inscription_nouveau
144 function inscription_nouveau($desc)
145 {
146 if (!isset($desc['login']))
147 $desc['login'] = test_login($desc['nom'], $desc['email']);
148
149 $desc['statut'] = 'nouveau';
150
151 $n = sql_insertq('spip_auteurs', $desc);
152
153 if (!$n) return _T('titre_probleme_technique');
154
155 $desc['id_auteur'] = $n;
156
157 return $desc;
158 }
159
160 // construction du mail envoyant les identifiants
161 // fonction redefinissable qui doit retourner un tableau
162 // dont les elements seront les arguments de inc_envoyer_mail
163
164 // http://doc.spip.org/@envoyer_inscription_dist
165 function envoyer_inscription_dist($desc, $nom, $mode, $id) {
166
167 $nom_site_spip = nettoyer_titre_email($GLOBALS['meta']["nom_site"]);
168 $adresse_site = $GLOBALS['meta']["adresse_site"];
169 if ($mode == '6forum') {
170 $adresse_login = generer_url_public('login');
171 $msg = 'form_forum_voici1';
172 } else {
173 $adresse_login = $adresse_site .'/'. _DIR_RESTREINT_ABS;
174 $msg = 'form_forum_voici2';
175 }
176
177 $msg = _T('form_forum_message_auto')."\n\n"
178 . _T('form_forum_bonjour', array('nom'=>$nom))."\n\n"
179 . _T($msg, array('nom_site_spip' => $nom_site_spip,
180 'adresse_site' => $adresse_site . '/',
181 'adresse_login' => $adresse_login)) . "\n\n- "
182 . _T('form_forum_login')." " . $desc['login'] . "\n- "
183 . _T('form_forum_pass'). " " . $desc['pass'] . "\n\n";
184
185 return array("[$nom_site_spip] "._T('form_forum_identifiants'), $msg);
186 }
187
188 // http://doc.spip.org/@test_login
189 function test_login($nom, $mail) {
190 include_spip('inc/charsets');
191 $nom = strtolower(translitteration($nom));
192 $login_base = preg_replace("/[^\w\d_]/", "_", $nom);
193
194 // il faut eviter que le login soit vraiment trop court
195 if (strlen($login_base) < 3) {
196 $mail = strtolower(translitteration(preg_replace('/@.*/', '', $mail)));
197 $login_base = preg_replace("/[^\w\d]/", "_", $mail);
198 }
199 if (strlen($login_base) < 3)
200 $login_base = 'user';
201
202 // eviter aussi qu'il soit trop long (essayer d'attraper le prenom)
203 if (strlen($login_base) > 10) {
204 $login_base = preg_replace("/^(.{4,}(_.{1,7})?)_.*/",
205 '\1', $login_base);
206 $login_base = substr($login_base, 0,13);
207 }
208
209 $login = $login_base;
210
211 for ($i = 1; ; $i++) {
212 if (!sql_countsel('spip_auteurs', "login='$login'"))
213 return $login;
214 $login = $login_base.$i;
215 }
216 }
217
218 // http://doc.spip.org/@creer_pass_pour_auteur
219 function creer_pass_pour_auteur($id_auteur) {
220 include_spip('inc/acces');
221 $pass = creer_pass_aleatoire(8, $id_auteur);
222 include_spip('action/editer_auteur');
223 instituer_auteur($id_auteur, array('pass'=>$pass));
224 return $pass;
225 }
226
227 ?>