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