diff --git a/action/formidable_recuperer_fichier.php b/action/formidable_recuperer_fichier.php index a688259018f71ce5cd2b8f213831f1920074d009..4385ba2fb217fcac6486d90be2e410ed7e853839 100644 --- a/action/formidable_recuperer_fichier.php +++ b/action/formidable_recuperer_fichier.php @@ -1,6 +1,7 @@ <?php if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/autoriser'); +include_spip('inc/formidable'); include_spip('inc/formidable_fichiers'); /** * Récupère, si on est autorisé à voir la réponse du formulaire, @@ -10,9 +11,22 @@ include_spip('inc/formidable_fichiers'); function action_formidable_recuperer_fichier() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); - $arg = unserialize($arg); - if (autoriser('voir', 'formulaires_reponse', $arg['formulaire'])) { + + // test si autorisation de voir la réponse par cookie + $cookie_ok = False; + if (isset($arg['cookie'])) { + $nom_cookie = formidable_generer_nom_cookie($arg['formulaire']); + if (isset($_COOKIE[$nom_cookie])) { + if ($arg['cookie'] == sha1($_COOKIE[$nom_cookie].secret_du_site())) { + $cookie_bdd = sql_getfetsel('cookie', 'spip_formulaires_reponses', 'id_formulaires_reponse='.sql_quote($arg['reponse'])); + if ($cookie_bdd = $_COOKIE[$nom_cookie]) { + $cookie_ok = True; + } + } + } + } + if (autoriser('voir', 'formulaires_reponse', $arg['formulaire']) or $cookie_ok) { $chemin_fichier = _DIR_FICHIERS_FORMIDABLE ."formulaire_".$arg['formulaire'] ."/reponse_".$arg['reponse'] diff --git a/formulaires/formidable.php b/formulaires/formidable.php index c00cd10fb2c981605f89a5e5b8178d21a5b04ff2..d1ccc9eb6f6e3fb8346a3f0b128905e063b70ba4 100644 --- a/formulaires/formidable.php +++ b/formulaires/formidable.php @@ -417,7 +417,7 @@ function formulaires_formidable_traiter($id, $valeurs = array(), $id_formulaires * * @return array * Tableau des champs de type fichier -**/ + **/ function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaires_reponse = false) { // On peut donner soit un id soit un identifiant if (!$id_formulaire = formidable_id_formulaire($id)) { @@ -452,7 +452,7 @@ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_rep $saisies_fichiers = saisies_lister_avec_type($contexte['_saisies'], 'fichiers');// les saisies de type fichier $fichiers = array(); $id_formulaire = $contexte['_formidable']['id_formulaire']; - + // On va chercher tous les champs $champs = sql_allfetsel( 'nom, valeur', diff --git a/inc/formidable_fichiers.php b/inc/formidable_fichiers.php index 5ea09c811b7febc6f002f5cd49a6e02b22f48c31..9a3e7f326347a02ac52f2afe3a7fc12142753d39 100644 --- a/inc/formidable_fichiers.php +++ b/inc/formidable_fichiers.php @@ -270,6 +270,14 @@ function formidable_generer_url_action_recuperer_fichier($id_formulaire, $id_for 'saisie' => $saisie, 'fichier' => $fichier ); + + // Pour les utilisateurs non authentifiés, on se base sur le cookier + $nom_cookie = formidable_generer_nom_cookie($id_formulaire); + if (isset($_COOKIE[$nom_cookie])) { + include_spip('inc/securiser_action'); + $param['cookie'] = sha1($_COOKIE[$nom_cookie].secret_du_site()); + } + $param = serialize($param); $securiser_action = charger_fonction('securiser_action','inc'); return $securiser_action('formidable_recuperer_fichier',$param,'', false);