From 7d4aad7ef33187ef355f29cd753e69d4e722e64d Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 3 Mar 2008 14:46:08 +0000
Subject: [PATCH] #1270 : ne pas se prendre les pieds dans le tapis dans les
 cas de saisie rapide ou par remplissage des champs par le navigateur
 permettre aussi la surcharge du logo dans le formulaire, en deportant celui
 ci dans un inclure qui est aussi evalue par action/informer_auteur

---
 .gitattributes                    |  1 +
 dist/formulaires/login.html       | 78 +++++++++++++++++++++----------
 dist/formulaires/logo_auteur.html |  2 +
 ecrire/action/informer_auteur.php | 10 ++--
 4 files changed, 59 insertions(+), 32 deletions(-)
 create mode 100644 dist/formulaires/logo_auteur.html

diff --git a/.gitattributes b/.gitattributes
index ec82313a2f..5f60863328 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -7,6 +7,7 @@ dist/feed.png -text
 dist/formulaires/choix_mots.html -text
 dist/formulaires/formulaire_.html -text
 dist/formulaires/login_forum_abo.html -text
+dist/formulaires/logo_auteur.html -text
 dist/formulaires/oubli/charger.php -text
 dist/formulaires/oubli/modifier.php -text
 dist/formulaires/oubli/valider.php -text
diff --git a/dist/formulaires/login.html b/dist/formulaires/login.html
index ebbc11fbc1..8735a4faa6 100644
--- a/dist/formulaires/login.html
+++ b/dist/formulaires/login.html
@@ -28,9 +28,7 @@
 	<legend><:form_forum_identifiants:></legend>
 		[<p class="reponse_formulaire">(#ENV*{erreur})</p>]
 
-[(#LOGO_AUTEUR||reduire_image{100,80}|inserer_attribut{alt,#ENV{login_alt}}
-|sinon{<span id="spip_logo_auteur" class="spip_logos"></span>})]
-
+		<span id="spip_logo_auteur" class="spip_logos">[(#INCLURE{fond=formulaires/logo_auteur}{id_auteur}|inserer_attribut{alt,#ENV{login_alt}})]</span>
 
 		[<p><label for="var_login"><:login_login2:></label>(#ENV{login}|?{'',' '})<br />
 		<input type="text" class="forml" id="var_login" name="var_login" value="" size="40" /></p>]
@@ -94,37 +92,67 @@ document.getElementById('var_login[_(#ENV{login})]').focus();
 var alea_actuel;
 var alea_futur;
 var login;
-$('#pass_ajax').show().after('<input type="hidden" name="session_login_hidden" id="session_login_hidden" value="" />');
+var informe_auteur_en_cours = false;
+function informe_auteur(c){
+	eval('c = '+c); // JSON
+	if (c) {
+		alea_actuel = c.alea_actuel;
+		alea_futur = c.alea_futur;
+		$('input#session_login_hidden').attr('value',c.login);
+		// indiquer le cnx si on n'y a pas touche
+		$('input#session_remember.intact')
+		.attr('checked',c.cnx=='1'?'checked':'');
+		$('#spip_logo_auteur').html(c.logo);
+	} else {
+		$('#spip_logo_auteur').html('');
+	}
+	informe_auteur_en_cours = false;
+}
+function calcule_md5_pass(pass){
+	$('input\u005b@name=session_password\u005d').attr('value','');
+	$('form#login').attr('action','#ENV{pose_cookie}');
+	$('input\u005b@name=session_password_md5\u005d').attr('value',calcMD5(alea_actuel + pass));
+	$('input\u005b@name=next_session_password_md5\u005d').attr('value',calcMD5(alea_futur + pass));
+}
+$('#boite-login li.pass_ajax').show().parent('ol').after('<input type="hidden" name="session_login_hidden" id="session_login_hidden" value="" />');
 $('#var_login').blur(function(){
 	if (login!=$(this).attr('value')) {
 		login = $(this).attr('value');
-		$.get('#URL_ACTION{informer_auteur}',
-			{var_login:$(this).attr('value')},
-			function (c) {
-				eval('c = '+c); // JSON
-				if (c) {
-					alea_actuel = c.alea_actuel;
-					alea_futur = c.alea_futur;
-					$('input#session_login_hidden').attr('value',c.login);
-					// indiquer le cnx si on n'y a pas touche
-					$('input#session_remember.intact')
-					.attr('checked',c.cnx=='1'?'checked':'');
-					$('#spip_logo_auteur').html(c.logo);
-				} else {
-					$('#spip_logo_auteur').html('');
-				}
-		});
+		informe_auteur_en_cours = true;
+		$.get('#URL_ACTION{informer_auteur}',{var_login:$(this).attr('value')},informe_auteur);
 	}
 });
 $('form#login').submit(function(){
 	pass = $('input\u005b@name=session_password\u005d').attr('value');
 	// ne jamais laisser le pass circuler en clair
-	$('input\u005b@name=session_password\u005d').attr('value','');
 	if (pass) {
-		if (alea_actuel!=undefined) {
-			$(this).attr('action','#ENV{pose_cookie}');
-			$('input\u005b@name=session_password_md5\u005d').attr('value',calcMD5(alea_actuel + pass));
-			$('input\u005b@name=next_session_password_md5\u005d').attr('value',calcMD5(alea_futur + pass));
+		if (alea_actuel)
+			// on a l'alea, on peut lancer le submit apres avoir hashe le pass
+			calcule_md5_pass(pass);
+		else {
+			// on a pas encore l'alea de l'auteur
+			// retrouver les alea de l'auteur qui ne sont pas encore arrives (remplissage auto des champs par le navigateur) !
+			
+			// si l'information est en cours, retenter sa chance
+			if (informe_auteur_en_cours) {
+				setTimeout(function(){$('form#login').submit();},300);
+				return false;
+			}
+
+			// sinon lancer une demande
+			informe_auteur_en_cours = true;
+			$.get('#URL_ACTION{informer_auteur}',{var_login:$('#var_login').attr('value')},function(c) {
+				informe_auteur(c);
+				// le formulaire sera soumis apres reception des info auteur
+				$('form#login').submit();
+			});
+			// ou dans un delai maxi de 5s (pour eviter le blocage a cette etape)
+			// mais sans le pass, ce qui fait retomber sur le scenario de repli du login en 2 passes
+			setTimeout(function(){
+				$('input\u005b@name=session_password\u005d').attr('value','');
+				$('form#login').submit();
+			},3000);
+			return false;
 		}
 	}
 });
diff --git a/dist/formulaires/logo_auteur.html b/dist/formulaires/logo_auteur.html
new file mode 100644
index 0000000000..c9c270427e
--- /dev/null
+++ b/dist/formulaires/logo_auteur.html
@@ -0,0 +1,2 @@
+#HTTP_HEADER{Content-type:text/html;charset=#ENV{charset}}
+[(#LOGO_AUTEUR||reduire_image{100,80})]
\ No newline at end of file
diff --git a/ecrire/action/informer_auteur.php b/ecrire/action/informer_auteur.php
index 8e9d4272a3..f3798c648c 100644
--- a/ecrire/action/informer_auteur.php
+++ b/ecrire/action/informer_auteur.php
@@ -28,13 +28,9 @@ function action_informer_auteur_dist() {
 			$prefs = unserialize($row['prefs']);
 			$row['cnx'] = $prefs['cnx'] == 'perma' ? '1' : '0';
 			unset($row['prefs']);
-
-			if ($chercher_logo = charger_fonction('chercher_logo', 'inc')
-			AND list($logo) = $chercher_logo($row['id_auteur'], 'id_auteur', 'on')) {
-				include_spip('inc/filtres');
-				$row['logo'] = reduire_image($logo,100,80);
-			}
-			else $row['logo']='';
+			
+			$page = evaluer_fond('formulaires/logo_auteur', array('id_auteur'=>$row['id_auteur']));
+			$row['logo'] = $page['texte'];
 		}
 		unset($row['id_auteur']);
 
-- 
GitLab