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

Lorsque les arguments d'un CVT contiennent une url de retour, et que celle-ci...

Lorsque les arguments d'un CVT contiennent une url de retour, et que celle-ci est construite par l'appelant sur la base de #SELF, 
celle-ci peut etre polluee par une variable postee dans le formulaire. 
Du coup les arguments changent et la balise #FORMULAIRE ne reconait pas le formulaire responsable du post. La seule solution etait de forcer la prise en compte du POST, ce qui interdit d'avoir plusieurs formulaires sur la meme page.

Pour y remedier, on introduit en sus des 3 fonctionc charger, verifier, traiter, une fonction optionnelle identifier qui est chargee de retourner une signature en fonction des arguments du formulaire, en ignorant ceux qui ne reprensentent pas l'objet saisi.

On aurait pu demander a charger de retourner cette signature dans la table des valeurs, mais ca aurait oblige a faire un double appel a la fonction charger() du formulaire.
parent d2ecb646
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+30 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -89,7 +89,7 @@ function balise_FORMULAIRE__contexte($form, $args)
	 AND is_array($p = decoder_contexte_ajax($p, $post_form))) {
		// enlever le faux attribut de langue masque
		array_shift($p);
		if ($args === $p)
		if (formulaire__identifier($form, $args, $p))
			$je_suis_poste = true;
	}

@@ -182,6 +182,14 @@ function balise_FORMULAIRE__contexte($form, $args)
	return $valeurs;
}

/**
 * Charger les valeurs de saisie du formulaire
 *
 * @param string $form
 * @param array $args
 * @param bool $poste
 * @return array
 */
function formulaire__charger($form, $args, $poste)
{
	if ($charger_valeurs = charger_fonction("charger","formulaires/$form",true))
@@ -196,4 +204,25 @@ function formulaire__charger($form, $args, $poste)
	);
	return $valeurs;
}

/**
 * Verifier que le formulaire en cours est celui qui est poste
 * on se base sur la fonction identifier (si elle existe) qui fournit
 * une signature identifiant le formulaire a partir de ses arguments
 * significatifs
 *
 * En l'absence de fonction identifier, on se base sur l'egalite des
 * arguments, ce qui fonctionne dans les cas simples
 *
 * @param string $form
 * @param array $args
 * @param array $p
 * @return bool
 */
function formulaire__identifier($form, $args, $p) {
	if ($identifier_args = charger_fonction("identifier","formulaires/$form",true)) {
		return call_user_func_array($identifier_args,$args)===call_user_func_array($identifier_args,$p);
	}
	return $args===$p;
}
?>
+8 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -25,6 +25,14 @@ function formulaires_editer_article_charger_dist($id_article='new', $id_rubrique
	return $valeurs;
}

/**
 * Identifier le formulaire en faisant abstraction des parametres qui
 * ne representent pas l'objet edite
 */
function formulaires_editer_article_identifier_dist($id_article='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='articles_edit_config', $row=array(), $hidden=''){
	return serialize(array($id_article,$lier_trad,$row));
}

// Choix par defaut des options de presentation
// http://doc.spip.org/@articles_edit_config
function articles_edit_config($row)
+9 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -18,6 +18,15 @@ function formulaires_editer_auteur_charger_dist($id_auteur='new', $retour='', $l
	return $valeurs;
}

/**
 * Identifier le formulaire en faisant abstraction des parametres qui
 * ne representent pas l'objet edite
 */
function formulaires_editer_auteur_identifier_dist($id_auteur='new', $retour='', $lier_id_article=0, $config_fonc='auteurs_edit_config', $row=array(), $hidden=''){
	return serialize(array($id_auteur,$lier_id_article,$row));
}


// Choix par defaut des options de presentation
// http://doc.spip.org/@articles_edit_config
function auteurs_edit_config($row)
+9 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -26,6 +26,15 @@ function formulaires_editer_breve_charger_dist($id_breve='new', $id_rubrique=0,
	return $valeurs;
}

/**
 * Identifier le formulaire en faisant abstraction des parametres qui
 * ne representent pas l'objet edite
 */
function formulaires_editer_breve_identifier_dist($id_breve='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='breves_edit_config', $row=array(), $hidden=''){
	return serialize(array($id_breve,$lier_trad,$row));
}


// Choix par defaut des options de presentation
function breves_edit_config($row)
{
+8 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -30,6 +30,14 @@ function formulaires_editer_groupe_mot_charger_dist($id_groupe='new',$retour='',
	return $valeurs;
}

/**
 * Identifier le formulaire en faisant abstraction des parametres qui
 * ne representent pas l'objet edite
 */
function formulaires_editer_groupe_mot_identifier_dist($id_groupe='new',$retour='', $config_fonc='groupes_mots_edit_config', $row=array(), $hidden=''){
	return serialize(array($id_groupe,$row));
}

// Choix par defaut des options de presentation
// http://doc.spip.org/@articles_edit_config
function groupes_mots_edit_config($row)
Chargement en cours