From 4eac3e803408428b3b232e6968ff2a872edc33de Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sat, 6 May 2006 08:22:11 +0000 Subject: [PATCH] =?UTF-8?q?S=C3=A9paration=20des=20statuts=20redacteurs/vi?= =?UTF-8?q?siteurs.=20R=C3=A9alise=20la=20t=C3=A2che=20#259?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/balise/formulaire_inscription.php | 12 +-- ecrire/inc/auth.php | 94 ++++++++++++++---------- ecrire/inc/auth_spip.php | 15 ++-- ecrire/inc/indexation.php | 3 +- 4 files changed, 71 insertions(+), 53 deletions(-) diff --git a/ecrire/balise/formulaire_inscription.php b/ecrire/balise/formulaire_inscription.php index 1d33173647..84e19063da 100644 --- a/ecrire/balise/formulaire_inscription.php +++ b/ecrire/balise/formulaire_inscription.php @@ -75,7 +75,8 @@ function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus, $id_rubrique=0) { // et donner des infos supplémentaires // 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'])) diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php index 5d742e96b2..d2df00aa4a 100644 --- a/ecrire/inc/auth.php +++ b/ecrire/inc/auth.php @@ -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('&', '&', self()))); + return generer_url_public('login', "url=$url" . ($_GET['bonjour'] == 'oui' ? '&var_echec_cookie=true' : ''),true); + } + + ?> diff --git a/ecrire/inc/auth_spip.php b/ecrire/inc/auth_spip.php index dd2253e15a..0928b7136e 100644 --- a/ecrire/inc/auth_spip.php +++ b/ecrire/inc/auth_spip.php @@ -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); } } } + ?> diff --git a/ecrire/inc/indexation.php b/ecrire/inc/indexation.php index f7b27239fc..22d38827c4 100644 --- a/ecrire/inc/indexation.php +++ b/ecrire/inc/indexation.php @@ -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 = ''; -- GitLab