From e3c8f168b0a047ed2ee5403b0672c3d4e1bcb3e5 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Tue, 1 Nov 2005 17:54:35 +0000
Subject: [PATCH] le formulaire d'inscription avait perdu son focus
 automatique, contenait du code mort et d'autres a l'agonie. Ca va mieux

---
 formulaires/formulaire_inscription.html     |  46 ++++----
 formulaires/inc-formulaire_inscription.php3 | 115 ++++++++++++--------
 spip_inscription.php3                       |   2 +-
 3 files changed, 93 insertions(+), 70 deletions(-)

diff --git a/formulaires/formulaire_inscription.html b/formulaires/formulaire_inscription.html
index 7587d2d64f..d67bbe4be8 100644
--- a/formulaires/formulaire_inscription.html
+++ b/formulaires/formulaire_inscription.html
@@ -1,39 +1,37 @@
-<h3 class='spip'><:pass_vousinscrire:></h3>
-[
+<h3 class='spip'><:pass_vousinscrire:></h3>[
 (#ENV*{message})
 ][
 (#ENV*{message}|?{'',' '})[
  (#ENV{mode}|=={forum}|?{' ',''})
 	<:pass_forum_bla:><br /><br />
 ][
- (#ENV{mode}|=={redac}|?{' ',''})
-	<:pass_espace_prive_bla:><br /><br />
-]
-<div class='spip_serif'><:form_forum_indiquer_nom_email:>
+ (#ENV{mode}|=={redac}|?{' ',''})<:pass_espace_prive_bla:>
+<br /><br />
+]<div class='spip_serif'><:form_forum_indiquer_nom_email:>
 <br /><br />
- <form	id="inscription" method='post' action="[(#ENV{self})]">
-      <fieldset class='spip_sanscadre'>
-	<legend><:form_forum_identifiants:></legend>
-	<label>
-	  <:form_pet_votre_nom:>
-	  <input type="text" class="forml" name="nom_inscription" value="" size="30" />
-	</label>
-	<label>
-	  <:form_pet_votre_email:>
-	  <input type="text" class="forml" name="mail_inscription" value="" size="30" />
-	</label>
-      </fieldset>
-      <div align="right"><input type="submit" class="spip_bouton" value="<:bouton_valider:>" />
+<form	id="inscription" method='post' action="[(#ENV{self})]">
+	<fieldset class='spip_sanscadre'>
+		<legend><:form_forum_identifiants:></legend>
+		<label>
+		  <:form_pet_votre_nom:>
+		  <input type="text" class="forml" name="nom_inscription" value="" size="30" />
+		</label>
+		<label>
+		  <:form_pet_votre_email:>
+		  <input type="text" class="forml" name="mail_inscription" value="" size="30" />
+		</label>
+	</fieldset>
+	<div align="right">
+		<input type="submit" class="spip_bouton" value="<:bouton_valider:>" />
 	</div> 
- </form>[
-</div>
+</form>
+</div>[
 <script type="text/javascript"><!--
 document.inscription.(#ENV{focus}).focus()
---></script>
- ]
+--></script>]
 ][<br />
 <div align="right">
-(#ENV{target}|?{' ',''})
+(#ENV{focus}|?{' ',''})
 <script type="text/javascript"><!--
 document.write("<a href='")
 document.write((window.opener) ? "javascript:close()" : "./")
diff --git a/formulaires/inc-formulaire_inscription.php3 b/formulaires/inc-formulaire_inscription.php3
index 72c3d3336e..5cfe277cb6 100644
--- a/formulaires/inc-formulaire_inscription.php3
+++ b/formulaires/inc-formulaire_inscription.php3
@@ -8,19 +8,25 @@ include_ecrire('inc_abstract_sql.php3');
 global $balise_FORMULAIRE_INSCRIPTION_collecte ;
 $balise_FORMULAIRE_INSCRIPTION_collecte = array();
 
-// args[0] est le parametre 'focus' -- [(#FORMULAIRE_INSCRIPTION{focus})]
+// args[0] indique le focus eventuel
+// args[1] indique la rubrique eventuelle de proposition
+// [(#FORMULAIRE_INSCRIPTION{nom_inscription, #ID_RUBRIQUE})]
 function balise_FORMULAIRE_INSCRIPTION_stat($args, $filtres) {
 	if (lire_meta('accepter_inscriptions') != 'oui')
 		return '';
 	else
-		return array('redac', ($args[0] == 'focus' ? 'nom_inscription' : ''));
+	  return array('redac', $args[0], $args[1]);
 }
 
-function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus) {
+// Si inscriptions pas autorisees, retourner une chaine d'avertissement
+// Sinon inclusion du squelette
+// Si pas de mon ou pas de mail valide, premier appel rien d'autre a faire
+// Autrement 2e appel, envoyer un mail et le squelette ne produira pas de
+// formulaire.
+
+
+function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus, $id_rubrique=0) {
 
-	// Si une inscription est autorisee, 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())
 	if (!(($mode == 'redac' AND lire_meta('accepter_inscriptions') == 'oui')
 	OR ($mode == 'forum' AND (
 		lire_meta('accepter_visiteurs') == 'oui'
@@ -29,69 +35,82 @@ function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus) {
 	    )))
 		return _T('pass_rien_a_faire_ici');
 
-	if (!_request('nom_inscription')) 
+	$nom = _request('nom_inscription');
+	$mail = _request('mail_inscription');
+	if (!$nom)
 		$message = '';
-	elseif (!test_mail_ins($mode, _request('mail_inscription')))
-		$message = _T('info_email_invalide');
-	else	$message = message_inscription(_request('mail_inscription'),
-					       _request('nom_inscription'),
-					       false,
-					       ($mode == 'forum')  ?
-					       'form_forum_voici1' :
-					       'form_forum_voici2');
-
+	else {
+		$message = message_inscription($mail, $nom, false, $mode);
+		if (is_array($message)) {
+			if (function_exists('envoyer_inscription'))
+				$f = 'envoyer_inscription';
+			else 
+				$f = 'envoyer_inscription_dist';
+			$message = $f($message, $nom, $mode, $id_rubrique);
+		}
+	}
 	return array("formulaire_inscription", $GLOBALS['delais'],
 			array('focus' => $focus,
-				'target' => _request('target'),
 				'message' => $message,
 				'mode' => $mode,
 				'self' => $GLOBALS["clean_link"]->getUrl()
 				));
 }
 
-// fonction qu'on peut redefinir pour filtrer selon l'adresse mail
+// fonction qu'on peut redefinir pour filtrer les adresses mail
 // cas general: controler juste que l'adresse n'est pas vide et est valide
 
-function test_mail_ins($mode, $mail) {
+function test_inscription_dist($mode, $mail) {
 	include_ecrire('inc_filtres.php3');
 	return email_valide($mail);
 }
 
-// creer un nouvel utilisateur et lui envoyer un mail avec ses identifiants
+// 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_inscription, $nom_inscription, $force, $mode) {
-	$mail_inscription = email_valide(_request('mail_inscription'));
 
-	$s = spip_query("SELECT statut, id_auteur, login
-		FROM spip_auteurs WHERE email='".addslashes($mail_inscription)."'");
+	if (function_exists('test_inscription'))
+	    $f = 'test_inscription';
+	else 
+	  $f  = 'test_inscription_dist';
+	if (!($mail_inscription = $f($mode, $mail_inscription)))
+		return  _T('info_email_invalide');
+
+	$mail = addslashes($mail_inscription);
+	$s = spip_query("SELECT statut, id_auteur, login, email
+		FROM spip_auteurs WHERE email='". $mail ."'");
 	$row = spip_fetch_array($s);
 
 	if (!$row) {
 	// il n'existe pas, creer les identifiants 
-		$login = test_login($nom_inscription, $mail_inscription);
-		$pass = creer_pass_pour_auteur(spip_abstract_insert('spip_auteurs', 
-				'(nom, email, login, statut)',
-				"('".
-				addslashes($nom_inscription) .
-				"', '".
-				addslashes($mail_inscription) .
-				"', '" .
-				$login .
-				"', 'nouveau')"));
-
-		return envoyer_inscription($mail_inscription, 'nouveau', $mode, $login, $pass, $nom_inscription);
+		$row['email'] = $mail_inscription;
+		$row['login'] = test_login($nom_inscription, $mail_inscription);
+		$row['id_auteur'] = spip_abstract_insert('spip_auteurs', 
+							 '(nom, email, login, statut)',
+							 "('".
+							 addslashes($nom_inscription) .
+							 "', '".
+							 $mail .
+							 "', '" .
+							 $row['login'] .
+							 "', 'nouveau')");
+		$row['pass'] = creer_pass_pour_auteur($row['id_auteur']);
+		return $row;
 	} else {
 		// existant mais encore muet, ou ressucite: renvoyer les infos
 		if ((($row['statut'] == 'nouveau') && !$force) ||
-		(($row['statut'] == '5poubelle') && $force)) {
+			(($row['statut'] == '5poubelle') && $force)) {
 			// recreer le pass
-			$pass = creer_pass_pour_auteur($row['id_auteur']);
-			return envoyer_inscription($mail_inscription, $row['statut'], $mode,
-				     $row['login'], $pass, $nom_inscription);
+			$row['pass'] = creer_pass_pour_auteur($row['id_auteur']);
+			return $row;
 		} else {
 			// irrecuperable
 			if ($row['statut'] == '5poubelle')
-				return_T('form_forum_access_refuse');
+				return _T('form_forum_access_refuse');
 			else
 				// deja inscrit
 				return _T('form_forum_email_deja_enregistre');
@@ -101,18 +120,24 @@ function message_inscription($mail_inscription, $nom_inscription, $force, $mode)
 
 
 // envoyer identifiants par mail
-function envoyer_inscription($mail, $statut, $mode, $login, $pass, $nom) {
+// fonction redefinissable
+
+function envoyer_inscription_dist($ids, $nom, $mode, $id_rubrique) {
 	$nom_site_spip = lire_meta("nom_site");
 	$adresse_site = lire_meta("adresse_site");
 	
 	$message = _T('form_forum_message_auto')."\n\n"
 	  . _T('form_forum_bonjour', array('nom'=>$nom))."\n\n"
-	  . _T($mode, array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site)) . "\n\n"
-	  . "- "._T('form_forum_login')." $login\n"
-	  . "- "._T('form_forum_pass')." $pass\n\n";
+	  . _T((($mode == 'forum')  ?
+		'form_forum_voici1' :
+		'form_forum_voici2'),
+	       array('nom_site_spip' => $nom_site_spip,
+		     'adresse_site' => $adresse_site))
+	  . "\n\n- "._T('form_forum_login')." " . $ids['login']
+	  . "\n- ".  _T('form_forum_pass'). " " . $ids['pass'] . "\n\n";
 
 	include_ecrire("inc_mail.php3");
-	if (envoyer_mail($mail,
+	if (envoyer_mail($ids['email'],
 			 "[$nom_site_spip] "._T('form_forum_identifiants'),
 			 $message))
 		return _T('form_forum_identifiant_mail');
diff --git a/spip_inscription.php3 b/spip_inscription.php3
index 20e4eab424..6a8ff5a436 100644
--- a/spip_inscription.php3
+++ b/spip_inscription.php3
@@ -31,6 +31,6 @@ echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   '</title>
 <link rel="stylesheet" type="text/css" href="spip_style.css" />
 </head><body>';
-inclure_balise_dynamique(balise_formulaire_inscription_dyn($mode, $mail_inscription, $nom_inscription, $focus, $target));
+inclure_balise_dynamique(balise_formulaire_inscription_dyn($mode, $focus));
 echo "</body></html>";
 ?>
-- 
GitLab