Valider e9f6f1e4 rédigé par cedric@yterium.com's avatar cedric@yterium.com
Parcourir les fichiers

Attention, modification substantielle sur les traitements :

- les traitements doivent noter qu'ils ont bien ete executes dans ['traitements'] pour ne pas etre executes plusieurs fois
- un traitement qui veut/doit passer apres un autre peut ne rien faire et rendre la main au premier tour pour laisser l'autre se faire
- on refait la boucle 5 fois au maximum pour executer tous les traitements
- si des traitements n'ont pas pu etre executes, on declenche un mail au webmestre avec l'erreur et un dump de  dans le mail pour ne pas perdre de donnees
- si aucun traitement n'a ete execute (defaut de configuration?) on declenche un mail au webmestre et un dump de  dans le mail pour ne pas perdre de donnees

Cette modification entraine une petite incompatibilite sur les traitements perso : ceux-ci seront executes 5 fois et une erreur sera generee si ils ne sont pas modifies pour renseigner ['traitements']
parent 584bf377
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+51 −12
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -247,9 +247,21 @@ function formulaires_formidable_traiter($id, $valeurs = array(), $id_formulaires
		$retours['redirect'] = $url_redirect;
	}

	// les traitements deja faits se notent ici
	// pour etre sur de ne pas etre appeles 2 fois
	// ainsi si un traitement A a besoin d'un traitement B,
	// et que B n'est pas fait quand il est appele, il peut rendre la main sans rien faire au premier coup
	// et sera rappele au second tour
	$retours['traitements'] = array();
	$erreur_texte = "";

	// Si on a des traitements
	if (is_array($traitements) and !empty($traitements)){
		$maxiter = 5;
		do {
			foreach ($traitements as $type_traitement => $options){
				// si traitement deja appele, ne pas le relancer
				if (!isset($retours['traitements'][$type_traitement])){
				  if ($appliquer_traitement = charger_fonction($type_traitement, 'traiter/', true)){
						$retours = $appliquer_traitement(
							array(
@@ -259,16 +271,45 @@ function formulaires_formidable_traiter($id, $valeurs = array(), $id_formulaires
							$retours
						);
					}
					else {
						// traitement introuvable, ne pas retenter
						$retours['traitements'][$type_traitement] = true;
					}
				}
			}
		}
		while (count($retours['traitements'])<count($traitements) AND $maxiter--);

		// si on ne peut pas traiter correctement, alerter le webmestre
		if (count($retours['traitements'])<count($traitements)){
			$erreur_texte = "Impossible de traiter correctement le formulaire $id\n"
				. "Traitements attendus :".array_keys($type_traitement)."\n"
				. "Traitements realises :".array_keys($retours['traitements'])."\n";
		}

		// Si on a personnalisé le message de retour, c'est lui qui est affiché uniquement
		if ($formulaire['message_retour']){
			$retours['message_ok'] = _T_ou_typo($formulaire['message_retour']);
		}
	} else {
	}
	else {
		$retours['message_ok'] = _T('formidable:retour_aucun_traitement');
	}

	// si aucun traitement, alerter le webmestre pour ne pas perdre les donnees
	if (!$erreur_texte AND !count($retours['traitements'])){
		$erreur_texte = "Aucun traitement pour le formulaire $id\n";
	}

	if ($erreur_texte){
		$erreur_sujet = "[ERREUR] Traitement Formulaire $id";
		// dumper la saisie pour ne pas la perdre
		$erreur_texte .= "\n".var_export($_REQUEST,true);
		$envoyer_mail = charger_fonction("envoyer_mail","inc");
		$envoyer_mail($GLOBALS['meta']['email_webmaster'],$erreur_sujet,$erreur_texte);
	}
	unset($retours['traitements']);

	return $retours;
}

@@ -304,5 +345,3 @@ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_rep

	return $contexte;
}

?>
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="formidable"
	categorie="communication"
	version="2.4.7"
	version="2.5.0"
	etat="test"
	compatibilite="[3.0.0;3.0.*]"
	logo="images/formidable-64.png"
+2 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -192,6 +192,8 @@ function traiter_email_dist($args, $retours){
		}
	}
	
	// noter qu'on a deja fait le boulot, pour ne pas risquer double appel
	$retours['traitements']['email'] = true;
	return $retours;
}

+3 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -103,6 +103,9 @@ function traiter_enregistrement_dist($args, $retours){
        $retours['message_ok'] .= "\n"._T('formidable:traiter_enregistrement_message_ok');
	      $retours['id_formulaires_reponse'] = $id_formulaires_reponse;
    }

    // noter qu'on a deja fait le boulot, pour ne pas risquer double appel
    $retours['traitements']['enregistrement'] = true;
    return $retours;
}