Skip to content
Extraits de code Groupes Projets
Valider 4eac3e80 rédigé par esj's avatar esj
Parcourir les fichiers

Séparation des statuts redacteurs/visiteurs. Réalise la tâche #259

parent 0ef9f584
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -75,7 +75,8 @@ function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus, $id_rubrique=0) {
// et donner des infos supplmentaires
// Std: controler que le nom (qui sert a calculer le login) est assez long
// et que l'adresse est valide (et on la normalise)
// Retour: une chaine message d'erreur ou un tableau email/nom au minimum
// Retour: une chaine message d'erreur
// ou un tableau avec au minimum email, nom, mode (redac / forum)
function test_inscription_dist($mode, $mail, $nom, $id_rubrique=0) {
......@@ -84,14 +85,11 @@ function test_inscription_dist($mode, $mail, $nom, $id_rubrique=0) {
if (!$nom || strlen($nom) > 64)
return _T('ecrire:info_login_trop_court');
if (!$r = email_valide($mail)) return _T('info_email_invalide');
return array('email' => $r, 'nom' => ($nom));
return array('email' => $r, 'nom' => $nom, 'bio' => $mode);
}
// cree un nouvel utilisateur et renvoie un message d'impossibilite ou la
// ligne SQL le decrivant.
// On enregistre le demandeur comme 'nouveau'
// et on lui envoie ses codes par email ; lors de
// sa premiere connexion il obtiendra son statut final (auth->activer())
function message_inscription($mail, $nom, $mode, $id_rubrique=0) {
......@@ -123,6 +121,10 @@ function message_inscription($mail, $nom, $mode, $id_rubrique=0) {
return $row;
}
// On enregistre le demandeur comme 'nouveau', en memorisant le statut final
// provisoirement dans le champ Bio, afin de ne pas visualiser les inactifs
// A sa premiere connexion il obtiendra son statut final (auth->activer())
function inscription_nouveau($declaration)
{
if (!isset($declaration['login']))
......
......@@ -32,6 +32,22 @@ function acces_restreint_rubrique($id_rubrique) {
}
// Un nouvel inscrit prend son statut definitif a la 1ere connexion
// Le statut a ete memorise dans bio (cf formulaire_inscription)
// Si vide se rabattre sur le mode d'inscription
// (compatibilite vieille version ou redac/forum etait mutuellement exclusif)
function acces_statut($id_auteur, $statut, $bio)
{
if ($statut == 'nouveau') {
$statut = ($bio ? ($bio == 'redac' ? '1comite' : '6forum'):
(($GLOBALS['meta']['accepter_inscriptions'] == 'oui') ? '1comite' : '6forum'));
spip_query("UPDATE spip_auteurs SET bio='', statut='$statut' WHERE id_auteur=$id_auteur");
}
return $statut;
}
function inc_auth_dist() {
global $_GET, $_COOKIE, $_SERVER;
global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user;
......@@ -90,32 +106,28 @@ function inc_auth_dist() {
$auth_htaccess = true;
}
// pas authentifie par cookie ni rien: demander login / mdp
// pas authentifie,
// demander login / mdp et nettoyer en cas de login en echec
if (!$auth_login) {
if ($_GET['bonjour'] == 'oui') {
$erreurcookie = '&var_echec_cookie=true';
}
return (generer_url_public('login',
"url=".rawurlencode(str_replace('/./', '/',
(_DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS)
. str_replace('&', '&', self()))),true).$erreurcookie);
return auth_arefaire();
}
//
// Chercher le login dans la table auteurs
//
$auth_login = addslashes($auth_login);
$result = @spip_query("SELECT * FROM spip_auteurs WHERE login='$auth_login' AND statut!='5poubelle' AND statut!='6forum'");
$result = @spip_query("SELECT * FROM spip_auteurs WHERE login='" . addslashes($auth_login) . "' AND statut!='5poubelle'");
if ($row = spip_fetch_array($result)) {
if (!$row = spip_fetch_array($result)) {
auth_areconnecter($auth_login);
exit;
}
elseif ($row['statut']=='6forum')
return auth_arefaire();
else {
$connect_id_auteur = $row['id_auteur'];
$connect_login = $row['login'];
$connect_pass = $row['pass'];
$connect_statut = $row['statut'];
$connect_statut = acces_statut($connect_id_auteur, $row['statut'], $row['bio']);
// Special : si dans la fiche auteur on modifie les valeurs
// de messagerie, utiliser ces valeurs plutot que celle de la base.
......@@ -165,37 +177,41 @@ function inc_auth_dist() {
$connect_toutes_rubriques = false;
$connect_id_rubrique = array();
}
} else {
}
// l'auteur a ete identifie mais on n'a pas d'info sur lui
// C'est soit parce que le serveur MySQL ne repond pas,
// soit parce que la table des auteurs a changee (restauration etc)
// Pas la peine d'insister. Envoyer un message clair au client.
if (!$auth_pass_ok)
return generer_url_public('login', 'var_erreur=pass', true);
include_spip('inc/minipres');
if (!$GLOBALS['db_ok']) {
spip_log("Erreur base de donnees");
return "";
}
install_debut_html(_T('info_travaux_titre')); echo _T('titre_probleme_technique'), "<p><tt>".spip_sql_errno()." ".spip_sql_error()."</tt></p>";install_fin_html();
} else {
install_debut_html(_T('avis_erreur_connexion')); echo "<br><br><p>", _T('texte_inc_auth_1', array('auth_login' => $auth_login)), " <a href='", generer_url_public('spip_cookie',"logout=$auth_login"), "'>", _T('texte_inc_auth_2'), "</A>",_T('texte_inc_auth_3');install_fin_html();
}
exit;
}
// Cas ou l'auteur a ete identifie mais on n'a pas d'info sur lui
// C'est soit parce que le serveur MySQL ne repond pas,
// soit parce que la table des auteurs a changee (restauration etc)
// Pas la peine d'insister. Envoyer un message clair au client.
if (!$auth_pass_ok)
return generer_url_public('login', 'var_erreur=pass', true);
function auth_areconnecter($auth_login)
{
include_spip('inc/minipres');
if (!$GLOBALS['db_ok']) {
spip_log("Erreur base de donnees");
// un nouvel inscrit prend son statut definitif
// (en supposant que le mode d'inscription est toujours le meme!)
install_debut_html(_T('info_travaux_titre')); echo _T('titre_probleme_technique'), "<p><tt>".spip_sql_errno()." ".spip_sql_error()."</tt></p>";install_fin_html();
} else {
if ($connect_statut == 'nouveau') {
$connect_statut =
($GLOBALS['meta']['accepter_inscriptions'] == 'oui') ? '1comite' : '6forum';
spip_query("UPDATE spip_auteurs SET statut='$connect_statut' WHERE id_auteur=$connect_id_auteur");
install_debut_html(_T('avis_erreur_connexion')); echo "<br><br><p>", _T('texte_inc_auth_1', array('auth_login' => $auth_login)), " <a href='", generer_url_public('spip_cookie',"logout=$auth_login"), "'>", _T('texte_inc_auth_2'), "</A>",_T('texte_inc_auth_3');install_fin_html();
}
return "";
}
// redemande login, avec nettoyage
function auth_arefaire()
{
$url = rawurlencode(str_replace('/./', '/',
(_DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS) . str_replace('&amp;', '&', self())));
return generer_url_public('login', "url=$url" . ($_GET['bonjour'] == 'oui' ? '&var_echec_cookie=true' : ''),true);
}
?>
......@@ -13,7 +13,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
class Auth_spip {
var $nom, $login, $email, $md5pass, $md5next, $alea_futur, $statut;
var $id_auteur, $nom, $login, $email, $md5pass, $md5next, $alea_futur, $statut, $bio;
function init() {
return true;
......@@ -27,10 +27,12 @@ class Auth_spip {
$result = spip_query("SELECT * FROM spip_auteurs WHERE login='".addslashes($login)."' AND pass='".addslashes($mdpass_actuel)."' AND statut<>'5poubelle'");
if ($row = spip_fetch_array($result)) {
$this->id_auteur = $row['id_auteur'];
$this->nom = $row['nom'];
$this->login = $row['login'];
$this->email = $row['email'];
$this->statut = $row['statut'];
$this->bio = $row['bio'];
$this->md5pass = $mdpass_actuel;
$this->md5next = $mdpass_futur;
return true;
......@@ -58,19 +60,16 @@ class Auth_spip {
}
function activer() {
if ($this->statut == 'nouveau') { // nouvel inscrit
$connect_statut =
($GLOBALS['meta']['accepter_inscriptions'] == 'oui') ?
'1comite' : '6forum';
spip_query("UPDATE spip_auteurs SET statut='$connect_statut' WHERE login='".addslashes($this->login)."'");
}
include_spip('inc/auth');
$this->statut = acces_statut($this->id_auteur, $this->statut, $this->bio);
if ($this->md5next) {
include_spip('inc/session');
// fait tourner le codage du pass dans la base
$nouvel_alea_futur = creer_uniqid();
@spip_query("UPDATE spip_auteurs SET alea_actuel = alea_futur, pass = '".addslashes($this->md5next)."', alea_futur = '$nouvel_alea_futur' WHERE login='".$this->login."'");
@spip_query("UPDATE spip_auteurs SET alea_actuel = alea_futur, pass = '".addslashes($this->md5next)."', alea_futur = '$nouvel_alea_futur' WHERE id_auteur=" . $this->id_auteur);
}
}
}
?>
......@@ -704,7 +704,8 @@ function requete_hash ($rech) {
// Attention en MySQL 3.x il faut passer par HEX(hash)
// alors qu'en MySQL 4.1 c'est interdit !
$vers = spip_fetch_array(spip_query("SELECT VERSION() AS v"));
$vers = spip_query("SELECT VERSION() AS v");
$vers = spip_fetch_array($vers);
if (substr($vers['v'], 0, 1) >= 4
AND substr($vers['v'], 2, 1) >= 1 ) {
$hex_fmt = '';
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter