Valider 00859185 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

implementation de la prise en charge simplifiee des balises dynamiques, et...

implementation de la prise en charge simplifiee des balises dynamiques, et application au formulaire_oubli 
(ca n'est pas le meilleur exemple car on passe 4 fois sur le meme formulaires, mais sa transformation ne casse pas la compatibilite car il est nouveau)
Pour creer un formulaire dynamique, il suffit :
- de creer le squelette du formulaire formulaires/xx.html, qui contiendra dans le form la balise #ACTION_FORMULAIRE{url_action}
- de creer les 3 fonctions :
  - formulaires_xx_charger (dans formulaires/xx/charger.php) qui renvoie un tableau des champs et des valeurs par defaut
  - formulairesx_xx_valider (dans formulaires/xx/valider.php) qui test la validite de la saisie et renvoie les messages d'erreur champ par champ si besoin, ou un message global
  - formulaire_xx_modifier (dans forumlaires/xx/modifier.php) qui fait les mises a jour en base
les arguments passes a #FORMULAIRE_XX{truc,machin,id_article} sont transmis aux 3 fonctions charger valider et modifier
aucun argument n'est collecte automatiquement, tous les arguments doivent etre explicitement fournis

Ce shema de construction s'ajoute a l'ancien qui reste completement operationnel et peut rester utile pour traiter des cas complexes ou avec collecte auto de variables d'environnement

parent 3529bc00
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+4 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -6,6 +6,9 @@ dist/favicon.ico -text
dist/feed.png -text
dist/formulaires/choix_mots.html -text
dist/formulaires/login_forum_abo.html -text
dist/formulaires/oubli/charger.php -text
dist/formulaires/oubli/modifier.php -text
dist/formulaires/oubli/valider.php -text
dist/icones_barre/agrave-maj.png -text
dist/icones_barre/blanc.png -text
dist/icones_barre/eacute-maj.png -text
@@ -436,6 +439,7 @@ ecrire/action/tester.php -text
ecrire/action/tester_taille.php -text
ecrire/action/tourner.php -text
ecrire/action/virtualiser.php -text
ecrire/balise/formulaire_.php -text
ecrire/balise/index.php -text
ecrire/balise/logo_.php -text
ecrire/balise/url_.php -text
+8 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<div class="formulaire_spip formulaire_oubli">[
(#ENV*{message})
(#ENV*{message_erreur})
][
(#ENV*{message}|?{'',' '})
(#ENV*{message_ok})
][
(#ENV*{editable}|?{' '})

<form id="oubli_form" action="[(#ENV{action})]" method="post">
	[(#ENV{action}|form_hidden)]
	[(#REM) activer le traitement auto et dispatch sur charger/valider/modifier]
	#ACTION_FORMULAIRE{#ENV{action}}
	<fieldset>
	<legend><:pass_nouveau_pass:></legend>[
	<input type="hidden" name="p" value="(#ENV{p})" />
@@ -23,8 +26,7 @@
</div>

<script type="text/javascript"><!--
[
(#ENV*{message}|?{'',' '})
[(#ENV*{editable}|?{' '})
 document.getElementById('oubli').focus()
]
//--></script>
+24 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2008                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

if (!defined("_ECRIRE_INC_VERSION")) return;

// chargement des valeurs par defaut des champs du formulaire
function formulaires_oubli_charger_dist(){
	$valeurs = array('p'=>'','oubli'=>'');
	if (_request('oubli'))
		return false; // pas de saisie au second tour
	else
		return $valeurs;
}

?>
 No newline at end of file
+38 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2008                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

if (!defined("_ECRIRE_INC_VERSION")) return;

// la saisie a ete validee, on peut agir
function formulaires_oubli_modifier_dist(){
echo 'plop';
	$message = "";
	if (
	    ($p = _request('p'))
	 && ($oubli = _request('oubli'))) {
		include_spip('inc/acces');
		$mdpass = md5($oubli);
		$htpass = generer_htpass($oubli);
		include_spip('base/abstract_sql');
		$res = sql_select("login", "spip_auteurs", "cookie_oubli=" . sql_quote($p) . " AND statut<>'5poubelle' AND pass<>''");
		$row = sql_fetch($res);
		sql_updateq('spip_auteurs', array('htpass' =>$htpass, 'pass'=>$mdpass, 'alea_actuel'=>'', 'cookie_oubli'=>''), "cookie_oubli=" . sql_quote($p));
		
	
		$login = $row['login'];
		$message = "<b>" . _T('pass_nouveau_enregistre') . "</b>".
		"<p>" . _T('pass_rappel_login', array('login' => $login));
	}
	return $message;
}

?>
 No newline at end of file
+24 −45
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -27,6 +27,8 @@ function test_oubli($email)
// http://doc.spip.org/@message_oubli
function message_oubli($email, $param)
{
	include_spip('inc/filtres'); # pour email_valide()

	if (function_exists('test_oubli'))
		$f = 'test_oubli';
	else 
@@ -36,6 +38,7 @@ function message_oubli($email, $param)
	if (!is_array($declaration))
		return $declaration;

	include_spip('base/abstract_sql');
	$res = sql_select("id_auteur,statut,pass", "spip_auteurs", "email =" . sql_quote($declaration['mail']));

	if (!$row = sql_fetch($res)) 
@@ -56,57 +59,33 @@ function message_oubli($email, $param)
			  _T('pass_mail_passcookie',
			     array('nom_site_spip' => $nom,
				   'adresse_site' => url_de_base(),
				   'sendcookie' => generer_url_public('spip_pass', "$param=$cookie", true)))) )
				   'sendcookie' => generer_url_public('spip_pass', 
				   "$param=$cookie&formulaire_action="._request('formulaire_action')
				   ."&formulaire_action_cle="._request('formulaire_action_cle')
				   ."&formulaire_action_args="._request('formulaire_action_args')
				   , true)))) )
	  return _T('pass_recevoir_mail');
	else
	  return  _T('pass_erreur_probleme_technique');
}

// http://doc.spip.org/@balise_FORMULAIRE_OUBLI
function balise_FORMULAIRE_OUBLI ($p) {
  return calculer_balise_dynamique($p,'FORMULAIRE_OUBLI',array());
}

// http://doc.spip.org/@balise_FORMULAIRE_OUBLI_stat
function balise_FORMULAIRE_OUBLI_stat($args, $filtres) {

	return $args;
}

// http://doc.spip.org/@balise_FORMULAIRE_OUBLI_dyn
function balise_FORMULAIRE_OUBLI_dyn()
{
function formulaires_oubli_valider_dist(){
	$erreurs = array();
	$p = _request('p');
	$oubli= _request('oubli');
$message = '';

// au 3e appel la variable P est positionnee et oubli = mot passe.
// au 2e appel, P est vide et oubli vaut le mail a qui envoyer le cookie
// au 1er appel, P et oubli sont vides

 if (!$p) {
	  if ($oubli) $message = message_oubli($oubli, 'p');
 } else {
	// au second passage, afficher le message
	if (!$p && $oubli)
		$erreurs['message_erreur'] = message_oubli($oubli, 'p');
	elseif($p) {
		include_spip('base/abstract_sql');
		$res = sql_select("login", "spip_auteurs", "cookie_oubli=" . sql_quote($p) . " AND statut<>'5poubelle' AND pass<>''");
		if (!$row = sql_fetch($res))
		$message = _T('pass_erreur_code_inconnu');
	else {
		if ($oubli) {
			include_spip('inc/acces');
			$mdpass = md5($oubli);
			$htpass = generer_htpass($oubli);
			sql_updateq('spip_auteurs', array('htpass' =>$htpass, 'pass'=>$mdpass, 'alea_actuel'=>'', 'cookie_oubli'=>''), "cookie_oubli=" . sql_quote($p));

			$login = $row['login'];
			$message = "<b>" . _T('pass_nouveau_enregistre') . "</b>".
			"<p>" . _T('pass_rappel_login', array('login' => $login));
			$erreurs['message_erreur'] = _T('pass_erreur_code_inconnu');
		elseif (!$oubli)
			$erreurs['message_erreur'] = ' '; // activer la saisie a nouveau
	}
	}
 }
 return array('formulaires/oubli', 0, 
	      array('p' => $p,
		    'message' => $message,
		    'action' => self()));

	return $erreurs;
}

?>
 No newline at end of file
Chargement en cours