diff --git a/formulaires/formidable.php b/formulaires/formidable.php index 2facdf6110deb58c548ea64472b1f7b4351e69ed..bc516a207859406f8b8b1a471d90a71908d4ce32 100644 --- a/formulaires/formidable.php +++ b/formulaires/formidable.php @@ -95,15 +95,29 @@ function formulaires_formidable_saisies_dist($id, $valeurs = array(), $id_formul * @param array $valeurs * Valeurs par défauts passées au contexte du formulaire * Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli -* @param int|bool $id_formulaires_reponse -* Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique -* @param bool|str $url_redirect Url de redirection qui prend éventuellement la main +* @param array $options_appel options diverses à l'appel, pour l'heure : +* - id_formulaires_reponse (int) : identifiant d'une réponse pour forcer la reedition de cette reponse spécifique +* - url_redirect (string) : url de redirection qui prend éventuellement la main +* - forcer_modif (bool) : permet de forcer la modif de la réponse, même si non autorisé (cas de l'édition des réponses dans l'espace privé) +* <!> Anciennement c'était id_formulaires_reponse. On assure la retrocompat. +* @param bool|str $deprecated_url_redirect +* @param bool $deprecated_url_redirect * @return array * Contexte envoyé au squelette HTML du formulaire. **/ -function formulaires_formidable_charger_dist($id, $valeurs = array(), $id_formulaires_reponse = false, $url_redirect = false, $forcer_modif = false) { +function formulaires_formidable_charger_dist($id, $valeurs = array(), $options_appel = [], $deprecated_url_redirect = false, $deprecated_forcer_modif = false) { $contexte = array(); + // Retrocompatiblité + if (!is_array($options_appel)) { + $options_appel = ['id_formulaires_reponse' => $options_appel]; + $options_appel['url_redirect'] = $deprecated_url_redirect; + $options_appel['forcer_modif'] = $deprecated_forcer_modif; + } + + // Valeur par défaut pour les options + $id_formulaires_reponse = $options_appel['id_formulaires_reponse'] ?? false; + // On peut donner soit un id soit un identifiant if (!$id_formulaire = formidable_id_formulaire($id)) { return; @@ -214,22 +228,40 @@ function formulaires_formidable_charger_dist($id, $valeurs = array(), $id_formul * @param array $valeurs * Valeurs par défauts passées au contexte du formulaire * Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli -* @param int|bool $id_formulaires_reponse -* Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique -* @param bool|str $url_redirect Url de redirection qui prend éventuellement la main -* @param bool $forcer_modif permet de forcer la modif d'une réponse existante, même si le formulaire n'est pas configuré pour (cas de modif des réponses depuis l'espace privé) +* @param array $options_appel options diverses à l'appel, pour l'heure : +* - id_formulaires_reponse (int) : identifiant d'une réponse pour forcer la reedition de cette reponse spécifique +* - url_redirect (string) : url de redirection qui prend éventuellement la main +* - forcer_modif (bool) : permet de forcer la modif de la réponse, même si non autorisé (cas de l'édition des réponses dans l'espace privé) +* <!> Anciennement c'était id_formulaires_reponse. On assure la retrocompat. +* @param bool|str $deprecated_url_redirect +* @param bool $deprecated_url_redirect +* @param int|string $id +* Identifiant numerique ou textuel du formulaire formidable +* @param array $valeurs +* Valeurs par défauts passées au contexte du formulaire +* Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli * @return array * Tableau des erreurs **/ -function formulaires_formidable_verifier_dist($id, $valeurs = array(), $id_formulaires_reponse = false, $url_redirect = false, $forcer_modif = false) { +function formulaires_formidable_verifier_dist($id, $valeurs = [], $options_appel = [], $deprecated_url_redirect = false, $deprecated_forcer_modif = false) { $erreurs = array(); + // Retrocompatiblité + if (!is_array($options_appel)) { + $options_appel = ['id_formulaires_reponse' => $options_appel]; + $options_appel['url_redirect'] = $deprecated_url_redirect; + $options_appel['forcer_modif'] = $deprecated_forcer_modif; + } + + // Valeur par défaut pour les options + $id_formulaires_reponse = $options_appel['id_formulaires_reponse'] ?? false; + include_spip('inc/saisies'); $saisies = saisies_chercher_formulaire('formidable', array($id, $valeurs, $id_formulaires_reponse)); // Si on n'est pas dans un formulaire à étape, on lance les vérifications des traitements if ($saisies and !saisies_lister_par_etapes($saisies)) { - $erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $id_formulaires_reponse); + $erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $options_appel); } // Sale bête ! Ça on le fait tout le temps @@ -248,21 +280,31 @@ function formulaires_formidable_verifier_dist($id, $valeurs = array(), $id_formu * @param array $valeurs * Valeurs par défauts passées au contexte du formulaire * Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli -* @param int|bool $id_formulaires_reponse -* Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique -* +* @param array $options_appel options diverses à l'appel, pour l'heure : +* - id_formulaires_reponse (int) : identifiant d'une réponse pour forcer la reedition de cette reponse spécifique +* - url_redirect (string) : url de redirection qui prend éventuellement la main +* - forcer_modif (bool) : permet de forcer la modif de la réponse, même si non autorisé (cas de l'édition des réponses dans l'espace privé) +* <!> Anciennement c'était id_formulaires_reponse. On assure la retrocompat. * @return array * Tableau des erreurs **/ -function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = array(), $id_formulaires_reponse = false) { +function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = array(), $options_appel = []) { $erreurs = array(); + + // Retrocompatiblité + if (!is_array($options_appel)) { + $options_appel['id_formulaires_reponse'] = $options_appel; + } + // Valeur par défaut pour les options + $id_formulaires_reponse = $options_appel['id_formulaires_reponse'] ?? false; + include_spip('inc/saisies'); $saisies = saisies_chercher_formulaire('formidable', array($id, $valeurs, $id_formulaires_reponse)); // On lance les vérifications propres aux traitements à chaque étape, pour avoir les messages d'erreurs à chaque étape if ($saisies and $etapes = saisies_lister_par_etapes($saisies)) { - $erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $id_formulaires_reponse, $etapes, $etape); + $erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $options_appel, $etapes, $etape); } return $erreurs; @@ -276,17 +318,18 @@ function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = arra * @param array $valeurs * Valeurs par défauts passées au contexte du formulaire * Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli - * @param int|bool $id_formulaires_reponse - * Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique + * @param array $options_appel : options passés à l'appel du formulaire (pour la doc, voir la doc de `formulaire_formidable_verifier()`) * @param array $etapes * Liste des saisies, ordonnées par étape * @param int|null $etape le numéro de l'étape courante * @return array * Tableau des erreurs */ -function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $id_formulaires_reponse = false, $etapes = array(), $etape = null) { +function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $options_appel = [], $etapes = array(), $etape = null) { $erreurs = array(); + $id_formulaires_reponse = $options_appel['id_formulaires_reponse'] ?? false; + if ( $id_formulaire = formidable_id_formulaire($id) and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire)) @@ -303,6 +346,7 @@ function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $i 'id_formulaire' => $formulaire['id_formulaire'], 'valeurs' => $valeurs, 'id_formulaires_reponse' => $id_formulaires_reponse, + 'options_appel' => $options_appel, 'etapes' => $etapes, 'etape' => $etape ), @@ -336,16 +380,30 @@ function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $i * @param array $valeurs * Valeurs par défauts passées au contexte du formulaire * Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli - * @param int|bool $id_formulaires_reponse - * Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique - * @param bool|str $url_redirect Url de redirection qui prend éventuellement la main - * @param bool $forcer_modif permet de forcer la modif d'une réponse existante, même si le formulaire n'est pas configuré pour (cas de modif des réponses depuis l'espace privé) - * @return array + * @param array $options_appel options diverses à l'appel, pour l'heure : + * - id_formulaires_reponse (int) : identifiant d'une réponse pour forcer la reedition de cette reponse spécifique + * - url_redirect (string) : url de redirection qui prend éventuellement la main + * - forcer_modif (bool) : permet de forcer la modif de la réponse, même si non autorisé (cas de l'édition des réponses dans l'espace privé) + * <!> Anciennement c'était id_formulaires_reponse. On assure la retrocompat. + * @param bool|str $deprecated_url_redirect + * @param bool $deprecated_url_redirect * Tableau des erreurs **/ -function formulaires_formidable_traiter_dist($id, $valeurs = array(), $id_formulaires_reponse = false, $url_redirect = false, $forcer_modif = false) { +function formulaires_formidable_traiter_dist($id, $valeurs = [], $options_appel = [], $deprecated_url_redirect = false, $deprecated_forcer_modif = false) { $retours = array(); + // Retrocompatiblité + if (!is_array($options_appel)) { + $options_appel = ['id_formulaires_reponse' => $options_appel]; + $options_appel['url_redirect'] = $deprecated_url_redirect; + $options_appel['forcer_modif'] = $deprecated_forcer_modif; + } + + // Valeur par défaut pour les options + $id_formulaires_reponse = $options_appel['id_formulaires_reponse'] ?? false; + $url_redirect = $options_appel['url_redirect'] ?? false; + $forcer_modif = $options_appel['forcer_modif'] ?? false; + include_spip('inc/texte'); // POST Mortem de securite : on log le $_POST pour ne pas le perdre si quelque chose se passe mal include_spip('inc/json'); @@ -439,6 +497,7 @@ function formulaires_formidable_traiter_dist($id, $valeurs = array(), $id_formul array( 'formulaire' => $formulaire, 'options' => $options, + 'options_appel' => $options_appel, 'id_formulaire' => $id_formulaire, 'valeurs' => $valeurs, 'id_formulaires_reponse' => $id_formulaires_reponse,