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

Gestion d'erreur sur le post ajax des formulaires :

en cas d'erreur ajax, ou si le retour est vide ou ne contient pas la chaine "ajax-form-is-ok" on affiche un message d'erreur en tete du formulaire et on invite à le soumettre à nouveau en POST normal, sans ajax (cela permet aussi de copier/coller son contenu si necessaire, au cas ou).
On teste aussi le cas du retour "noajax" en tolerant espace devant/derriere (cas des fichiers PHP mal formés)
Le message d'erreur type est inséré dans le head du privé, il faudra peut etre aussi l'inserer dans le public
+ timestamp sur les js et css inseres dans le head
parent c2b021bd
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -47,8 +47,10 @@ function f_jQuery_prive ($texte) {
			'prive/javascript/spip_barre.js',
		));
	foreach (array_unique($jquery_plugins) as $script)
		if ($script = find_in_path($script))
		if ($script = find_in_path($script)){
			$script = timestamp($script);
			$x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
		}
	// inserer avant le premier script externe ou a la fin
	if (preg_match(",<script[^><]*src=,",$texte,$match)
	  AND $p = strpos($texte,$match[0])){
+1 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -233,6 +233,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'erreur_balise_non_fermee' => 'dernière balise non refermée :',
	'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l\'enregistrement correct du champ @champs@.',
	'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l\'enregistrement.',
	'erreur_technique_ajaxform' => 'Ooops. Une erreur innatendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau.',
	'erreur_texte' => 'erreur(s)',
	'etape' => 'Étape',

+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -245,7 +245,8 @@ function traiter_formulaires_dynamiques($get=false){
				$retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn',$args),false);
				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
				// sans cela le formulaire n'est pas actif apres le hit ajax
				$retour = "<br class='bugajaxie' style='display:none;'/>".$retour;
				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>".$retour;
				ajax_retour($retour,false);
				return true; // on a fini le hit
			}
+12 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -207,6 +207,13 @@ jQuery.fn.formulaire_dyn_ajax = function(target) {
		jQuery('form:not(.noajax):not(.bouton_action_post)', this).each(function(){
		var leform = this;
		var leclk,leclk_x,leclk_y;
		var onError = function(xhr, status, error, $form){
			jQuery(leform).ajaxFormUnbind().find('input[name="var_ajax"]').remove();
			var msg = "Erreur";
			if (typeof(error_on_ajaxform)!=="undefined") msg = error_on_ajaxform;
			jQuery(leform).prepend("<p class='error ajax-error none'>"+msg+"</p>").find('.ajax-error').show('fast');
			jQuery(cible).closest('.ariaformprop').endLoading(true);
		}
		jQuery(this).prepend("<input type='hidden' name='var_ajax' value='form' />")
		.ajaxForm({
			beforeSubmit: function(){
@@ -225,8 +232,9 @@ jQuery.fn.formulaire_dyn_ajax = function(target) {
				if (scrollwhensubmit)
					jQuery(cible).positionner(false,false);
			},
			success: function(c){
				if (c=='noajax'){
			error: onError,
			success: function(c, status, xhr , $form){
				if (c.match(/\s*noajax\s*/)){
					// le serveur ne veut pas traiter ce formulaire en ajax
					// on resubmit sans ajax
					jQuery("input[name=var_ajax]",leform).remove();
@@ -246,6 +254,8 @@ jQuery.fn.formulaire_dyn_ajax = function(target) {
					jQuery(leform).ajaxFormUnbind().submit();
				}
				else {
					if (!c.length || c.indexOf("ajax-form-is-ok")==-1)
						return onError.apply(this,[status, xhr , $form]);
					// commencons par vider le cache des urls, si jamais un js au retour
					// essaye tout de suite de suivre un lien en cache
					// dans le doute sur la validite du cache il vaut mieux l'invalider
+9 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -13,23 +13,24 @@ function test_accepte_ajax(){jQuery.ajax({"url":"[(#URL_ECRIRE{test_ajax,js=1}|r
]var ajax_image_searching = '<img src="#CHEMIN_IMAGE{searching.gif}" alt="" />';
var stat = [(#CONFIG{activer_statistiques}|=={non}|?{0,1})];
var confirm_changer_statut = '<:confirm_changer_statut|html2unicode|addslashes|unicode_to_javascript:>';
var error_on_ajaxform='<:erreur_technique_ajaxform|html2unicode|addslashes|unicode_to_javascript:>';
/*]]>*/</script>
<meta name="viewport" content="width=device-width" />
[<link rel="stylesheet" type="text/css" href="(#VAL{reset.css}|find_in_theme|url_absolue)" id="csspriveereset" />]
[<link rel="stylesheet" type="text/css" href="(#VAL{reset.css}|find_in_theme|timestamp|url_absolue)" id="csspriveereset" />]
#PIPELINE{header_prive_css,''}
[<!--
(#REM) CSS de secours en cas de non fonct de la suivante
-->][<link rel="stylesheet" type="text/css" href="(#VAL{style_prive_defaut.css}|find_in_theme|url_absolue)" id="csspriveedef" />]
-->][<link rel="stylesheet" type="text/css" href="(#VAL{style_prive_defaut.css}|find_in_theme|timestamp|url_absolue)" id="csspriveedef" />]
[<!--
(#REM) spip-admin pour le debug
-->][<link rel="stylesheet" type="text/css" href="(#CHEMIN{spip_admin.css}|url_absolue)"/>]
-->][<link rel="stylesheet" type="text/css" href="(#CHEMIN{spip_admin.css}|timestamp|url_absolue)"/>]
[<!--
(#REM) CSS espace prive : la vraie
-->]<link rel="stylesheet" type="text/css" href="#URL_PAGE{style_prive.css,#ENV{paramcss}}" />
[<!--
(#REM) CSS optionelle minipres
-->][(#ENV{minipres,''}|oui)
[<link rel="stylesheet" type="text/css" href="(#CHEMIN{minipres.css}|url_absolue)" />]
[<link rel="stylesheet" type="text/css" href="(#CHEMIN{minipres.css}|timestamp|url_absolue)" />]
][<!--
(#REM) Favicon
-->][<link rel="shortcut icon" href="(#CHEMIN{spip.ico}|url_absolue)" type="image/x-icon" />]
@@ -40,7 +41,7 @@ var confirm_changer_statut = '<:confirm_changer_statut|html2unicode|addslashes|u
<link rel="alternate" type="application/rss+xml" title="<:info_breves_03|attribut_html:>" href="#URL_PAGE{backend-breves}" />
]

[<script type="text/javascript" src="(#CHEMIN{prive/javascript/layer_old.js})"></script>]
[<script type="text/javascript" src="(#CHEMIN{prive/javascript/layer.js})"></script>]
[<script type="text/javascript" src="(#CHEMIN{prive/javascript/presentation.js})"></script>]
[<script type="text/javascript" src="(#CHEMIN{prive/javascript/gadgets.js})"></script>]
[<script type="text/javascript" src="(#CHEMIN{prive/javascript/layer_old.js}|timestamp)"></script>]
[<script type="text/javascript" src="(#CHEMIN{prive/javascript/layer.js}|timestamp)"></script>]
[<script type="text/javascript" src="(#CHEMIN{prive/javascript/presentation.js}|timestamp)"></script>]
[<script type="text/javascript" src="(#CHEMIN{prive/javascript/gadgets.js}|timestamp)"></script>]