Subversion Repositories Sites.tela-botanica.org

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 david 1
<?php
2
 
3
if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
4
 
5
include_ecrire('inc_abstract_sql.php3');
6
 
7
// Balise independante du contexte
8
global $balise_FORMULAIRE_INSCRIPTION_collecte ;
9
$balise_FORMULAIRE_INSCRIPTION_collecte = array();
10
 
11
// args[0] est le parametre 'focus' -- [(#FORMULAIRE_INSCRIPTION{focus})]
12
function balise_FORMULAIRE_INSCRIPTION_stat($args, $filtres) {
13
	if (lire_meta('accepter_inscriptions') != 'oui')
14
		return '';
15
	else
16
		return array('redac', ($args[0] == 'focus' ? 'nom_inscription' : ''));
17
}
18
 
19
function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus) {
20
 
21
	// Si une inscription est autorisee, on enregistre le demandeur
22
	// comme 'nouveau' et on lui envoie ses codes par email ; lors de
23
	// sa premiere connexion il obtiendra son statut final (auth->activer())
24
	if (($mode == 'redac' AND lire_meta('accepter_inscriptions') == 'oui')
25
	OR ($mode == 'forum' AND (
26
		lire_meta('accepter_visiteurs') == 'oui'
27
		OR lire_meta('forums_publics') == 'abo'
28
		)
29
	))
30
		$statut = 'nouveau';
31
	else
32
		return _T('pass_rien_a_faire_ici');
33
 
34
	// recuperer les donnees envoyees
35
	$mail_inscription = _request('mail_inscription');
36
	$nom_inscription = _request('nom_inscription');
37
 
38
	if (test_mail_ins($mode, $mail_inscription)
39
	AND _request('nom_inscription')) {
40
		// envoyer les identifiants si l'abonne n'existe pas deja.
41
		$s = spip_query("SELECT statut, id_auteur, login, pass
42
		FROM spip_auteurs WHERE email='".addslashes($mail_inscription)."'");
43
		if (!$row = spip_fetch_array($s)) {
44
			$login = test_login($nom_inscription, $mail_inscription);
45
			$id_auteur = spip_abstract_insert('spip_auteurs',
46
				'(nom, email, login, statut)',
47
				"('".addslashes($nom_inscription)."',
48
				'".addslashes($mail_inscription)."', '$login', '$statut')");
49
			$pass = creer_pass_pour_auteur($id_auteur);
50
			$message = envoyer_inscription($mail_inscription,
51
				$statut, $mode, $login, $pass, $nom_inscription);
52
		}
53
 
54
		else {
55
			// existant mais encore muet, renvoyer les infos
56
			if ($row['statut'] == 'nouveau') {
57
				// recreer le pass
58
				$pass = creer_pass_pour_auteur($row['id_auteur']);
59
				$message = envoyer_inscription(
60
					$mail_inscription, $row['statut'], $mode,
61
					$row['login'], $pass, $nom_inscription);
62
			} else {
63
				// dead
64
				if ($row['statut'] == '5poubelle')
65
					$message = _T('form_forum_access_refuse');
66
				// deja inscrit
67
				else
68
					$message = _T('form_forum_email_deja_enregistre');
69
			}
70
		}
71
	}
72
 
73
	// demande du formulaire
74
	else {
75
		if (!$nom_inscription)
76
			$message = '';
77
		else {
78
			spip_log("Mail incorrect: '$mail_inscription'");
79
			$message = _T('info_email_invalide');
80
		}
81
	}
82
 
83
	return array("formulaire_inscription", 0,
84
		array('focus' => $focus,
85
			'target' => _request('target'),
86
			'message' => $message,
87
			'mode' => $mode));
88
}
89
 
90
// fonction qu'on peut redefinir pour filtrer selon l'adresse mail
91
// cas general: controler juste que l'adresse n'est pas vide et est valide
92
 
93
function test_mail_ins($mode, $mail) {
94
	if ($mail = trim($mail))
95
		return email_valide($mail);
96
}
97
 
98
 
99
// envoyer identifiants par mail
100
function envoyer_inscription($mail, $statut, $type, $login, $pass, $nom) {
101
	$nom_site_spip = lire_meta("nom_site");
102
	$adresse_site = lire_meta("adresse_site");
103
 
104
	$message = _T('form_forum_message_auto')."\n\n"
105
	._T('form_forum_bonjour', array('nom'=>$nom))."\n\n";
106
	if ($type == 'forum') {
107
		$message .= _T('form_forum_voici1', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site)) . "\n\n";
108
	} else {
109
		$message .= _T('form_forum_voici2', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site)) . "\n\n";
110
	}
111
	$message .= "- "._T('form_forum_login')." $login\n";
112
	$message .= "- "._T('form_forum_pass')." $pass\n\n";
113
 
114
	include_ecrire("inc_mail.php3");
115
	if (envoyer_mail($mail,
116
	"[$nom_site_spip] "._T('form_forum_identifiants'), $message))
117
		return _T('form_forum_identifiant_mail');
118
	else
119
		return _T('form_forum_probleme_mail');
120
}
121
 
122
function test_login($nom, $mail) {
123
	include_ecrire('inc_charsets.php3');
124
	$nom = strtolower(translitteration($nom));
125
	$login_base = ereg_replace("[^a-zA-Z0-9_]", "_", $nom);
126
 
127
	// il faut eviter que le login soit vraiment trop court
128
	if (strlen($login_base) < 3) {
129
		$mail = strtolower(translitteration(preg_replace('/@.*/', '', $mail)));
130
		$login_base = ereg_replace("[^a-zA-Z0-9]", "_", $nom);
131
	}
132
	if (strlen($login_base) < 3)
133
		$login_base = 'user';
134
 
135
	// eviter aussi qu'il soit trop long (essayer d'attraper le prenom)
136
	if (strlen($login_base) > 10) {
137
		$login_base = preg_replace("/^(.{4,}(_.{1,7})?)_.*/",
138
			'\1', $login_base);
139
		$login_base = substr($login_base, 0,13);
140
	}
141
 
142
	$login = $login_base;
143
 
144
	for ($i = 1; ; $i++) {
145
		$s = spip_query("SELECT id_auteur FROM spip_auteurs
146
		WHERE login='$login'");
147
		if (!spip_num_rows($s))
148
			return $login;
149
		$login = $login_base.$i;
150
	}
151
}
152
 
153
function creer_pass_pour_auteur($id_auteur) {
154
	include_ecrire("inc_acces.php3");
155
	$pass = creer_pass_aleatoire(8, $id_auteur);
156
	$mdpass = md5($pass);
157
	$htpass = generer_htpass($pass);
158
	spip_query("UPDATE spip_auteurs
159
		SET pass='$mdpass', htpass='$htpass'
160
		WHERE id_auteur = ".$id_auteur);
161
	ecrire_acces();
162
 
163
	return $pass;
164
}
165
 
166
?>