[ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 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; #securite 14 15 include_spip('base/abstract_sql'); 16 17 // Balise independante du contexte 18 19 // http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION 20 function balise_FORMULAIRE_INSCRIPTION ($p) { 21 22 return calculer_balise_dynamique($p, 'FORMULAIRE_INSCRIPTION', array()); 23 } 24 25 // args[0] peut valoir "redac" ou "forum" 26 // args[1] indique la rubrique eventuelle de proposition 27 // args[2] indique le focus eventuel 28 // [(#FORMULAIRE_INSCRIPTION{nom_inscription, #ID_RUBRIQUE})] 29 30 // http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION_stat 31 function balise_FORMULAIRE_INSCRIPTION_stat($args, $filtres) { 32 list($mode, $id, $focus) = $args; 33 //initialiser_mode_inscription 34 if(!$mode) $mode = $GLOBALS['meta']['accepter_inscriptions'] == 'oui' ? 'redac' : ''; 35 if (!test_mode_inscription($mode)) 36 return ''; 37 else return array($mode, $focus, $id); 38 } 39 40 // Si inscriptions pas autorisees, retourner une chaine d'avertissement 41 // Sinon inclusion du squelette 42 // Si pas de mon ou pas de mail valide, premier appel rien d'autre a faire 43 // Autrement 2e appel, envoyer un mail et le squelette ne produira pas de 44 // formulaire. 45 46 // http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION_dyn 47 function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus, $id=0) { 48 49 if (!test_mode_inscription($mode)) return _T('pass_rien_a_faire_ici'); 50 51 $nom = _request('nom_inscription'); 52 $mail = _request('mail_inscription'); 53 $commentaire = ($mode=='redac') ? _T('pass_espace_prive_bla') : _T('pass_forum_bla'); 54 55 if ($mail) { 56 include_spip('inc/filtres'); // pour email_valide 57 $commentaire = message_inscription($mail, $nom, $mode, $id); 58 if (is_array($commentaire)) { 59 if (function_exists('envoyer_inscription')) 60 $f = 'envoyer_inscription'; 61 else 62 $f = 'envoyer_inscription_dist'; 63 $commentaire = $f($commentaire, $nom, $mode, $id); 64 } 65 } 66 67 $message = $commentaire ? '' : _T('form_forum_identifiant_mail'); 68 69 // #ENV*{message} doit etre non vide lorsque tout s'est bien passé 70 // #ENV*{commentaire} doit etre non vide pour afficher le formulaire 71 // et il indique si on s'inscrit a l'espace public ou prive 72 // ou donne un message d'erreur aux appels suivants si pb 73 74 return array("formulaires/inscription", $GLOBALS['delais'], 75 array('focus' => $focus, 76 'message' => $message, 77 'mode' => $mode, 78 'commentaire' => $commentaire, 79 'nom_inscription' => _request('nom_inscription'), 80 'mail_inscription' => _request('mail_inscription'), 81 'self' => str_replace('&','&',(self())))); 82 } 83 84 // http://doc.spip.org/@test_mode_inscription 85 function test_mode_inscription($mode) { 86 87 return (($mode == 'redac' AND $GLOBALS['meta']['accepter_inscriptions'] == 'oui') 88 OR ($mode == 'forum' 89 AND ($GLOBALS['meta']['accepter_visiteurs'] == 'oui' 90 OR $GLOBALS['meta']['forums_publics'] == 'abo'))); 91 } 92 93 // fonction qu'on peut redefinir pour filtrer les adresses mail et les noms, 94 // et donner des infos supplémentaires 95 // Std: controler que le nom (qui sert a calculer le login) est plausible 96 // et que l'adresse est valide (et on la normalise) 97 // Retour: une chaine message d'erreur 98 // ou un tableau avec au minimum email, nom, mode (redac / forum) 99 100 // http://doc.spip.org/@test_inscription_dist 101 function test_inscription_dist($mode, $mail, $nom, $id=0) { 102 103 include_spip('inc/filtres'); 104 $nom = trim(corriger_caracteres($nom)); 105 if (!$nom || strlen($nom) > 64) 106 return _T('ecrire:info_login_trop_court'); 107 if (!$r = email_valide($mail)) return _T('info_email_invalide'); 108 return array('email' => $r, 'nom' => $nom, 'bio' => $mode); 109 } 110 111 // cree un nouvel utilisateur et renvoie un message d'impossibilite 112 // ou le tableau representant la ligne SQL le decrivant. 113 114 // http://doc.spip.org/@message_inscription 115 function message_inscription($mail, $nom, $mode, $id=0) { 116 117 if (function_exists('test_inscription')) 118 $f = 'test_inscription'; 119 else 120 $f = 'test_inscription_dist'; 121 $declaration = $f($mode, $mail, $nom, $id); 122 123 if (is_string($declaration)) 124 return $declaration; 125 126 $row = spip_query("SELECT statut, id_auteur, login, email FROM spip_auteurs WHERE email=" . _q($declaration['email'])); 127 $row = spip_fetch_array($row); 128 129 if (!$row) 130 // il n'existe pas, creer les identifiants 131 return inscription_nouveau($declaration); 132 if (($row['statut'] == '5poubelle') AND !$declaration['pass']) 133 // irrecuperable 134 return _T('form_forum_access_refuse'); 135 136 if (($row['statut'] != 'nouveau') AND !$declaration['pass']) 137 // deja inscrit 138 return _T('form_forum_email_deja_enregistre'); 139 140 // existant mais encore muet, ou ressucite: renvoyer les infos 141 $row['pass'] = creer_pass_pour_auteur($row['id_auteur']); 142 return $row; 143 } 144 145 // On enregistre le demandeur comme 'nouveau', en memorisant le statut final 146 // provisoirement dans le champ Bio, afin de ne pas visualiser les inactifs 147 // A sa premiere connexion il obtiendra son statut final (auth->activer()) 148 149 // http://doc.spip.org/@inscription_nouveau 150 function inscription_nouveau($declaration) 151 { 152 if (!isset($declaration['login'])) 153 $declaration['login'] = test_login($declaration['nom'], $declaration['email']); 154 155 $declaration['statut'] = 'nouveau'; 156 157 $n = spip_abstract_insert('spip_auteurs', ('(' .join(',',array_keys($declaration)).')'), ("(" .join(", ",array_map('_q', $declaration)) .")")); 158 159 $declaration['id_auteur'] = $n; 160 161 $declaration['pass'] = creer_pass_pour_auteur($declaration['id_auteur']); 162 return $declaration; 163 } 164 165 // envoyer identifiants par mail 166 // fonction redefinissable qui doit retourner false si tout est ok 167 // ou une chaine non vide expliquant pourquoi le mail n'a pas ete envoye 168 169 // http://doc.spip.org/@envoyer_inscription_dist 170 function envoyer_inscription_dist($ids, $nom, $mode, $id) { 171 include_spip('inc/mail'); 172 $nom_site_spip = nettoyer_titre_email($GLOBALS['meta']["nom_site"]); 173 $adresse_site = $GLOBALS['meta']["adresse_site"]; 174 175 $message = _T('form_forum_message_auto')."\n\n" 176 . _T('form_forum_bonjour', array('nom'=>$nom))."\n\n" 177 . _T((($mode == 'forum') ? 178 'form_forum_voici1' : 179 'form_forum_voici2'), 180 array('nom_site_spip' => $nom_site_spip, 181 'adresse_site' => $adresse_site . '/', 182 'adresse_login' => $adresse_site .'/'. _DIR_RESTREINT_ABS)) 183 . "\n\n- "._T('form_forum_login')." " . $ids['login'] 184 . "\n- ". _T('form_forum_pass'). " " . $ids['pass'] . "\n\n"; 185 186 if (envoyer_mail($ids['email'], 187 "[$nom_site_spip] "._T('form_forum_identifiants'), 188 $message)) 189 return false; 190 else 191 return _T('form_forum_probleme_mail'); 192 } 193 194 // http://doc.spip.org/@test_login 195 function test_login($nom, $mail) { 196 include_spip('inc/charsets'); 197 $nom = strtolower(translitteration($nom)); 198 $login_base = ereg_replace("[^a-zA-Z0-9_]", "_", $nom); 199 200 // il faut eviter que le login soit vraiment trop court 201 if (strlen($login_base) < 3) { 202 $mail = strtolower(translitteration(preg_replace('/@.*/', '', $mail))); 203 $login_base = ereg_replace("[^a-zA-Z0-9]", "_", $nom); 204 } 205 if (strlen($login_base) < 3) 206 $login_base = 'user'; 207 208 // eviter aussi qu'il soit trop long (essayer d'attraper le prenom) 209 if (strlen($login_base) > 10) { 210 $login_base = preg_replace("/^(.{4,}(_.{1,7})?)_.*/", 211 '\1', $login_base); 212 $login_base = substr($login_base, 0,13); 213 } 214 215 $login = $login_base; 216 217 for ($i = 1; ; $i++) { 218 $n = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs WHERE login='$login' LIMIT 1")); 219 if (!$n) return $login; 220 $login = $login_base.$i; 221 } 222 } 223 224 // http://doc.spip.org/@creer_pass_pour_auteur 225 function creer_pass_pour_auteur($id_auteur) { 226 include_spip('inc/acces'); 227 $pass = creer_pass_aleatoire(8, $id_auteur); 228 $mdpass = md5($pass); 229 $htpass = generer_htpass($pass); 230 spip_query("UPDATE spip_auteurs SET pass='$mdpass', htpass='$htpass' WHERE id_auteur = ".intval($id_auteur)); 231 ecrire_acces(); 232 233 return $pass; 234 } 235 236 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |