Skip to content
Extraits de code Groupes Projets
Valider ccaa81e1 rédigé par maieul@maieul.net's avatar maieul@maieul.net
Parcourir les fichiers

finalement il faut utiliser une action securisée, qui renvoie le document

parent 711096ad
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -2,6 +2,7 @@
action/dupliquer_formulaire.php -text
action/editer_formulaire.php -text
action/exporter_formulaire.php -text
action/formidable_recuperer_fichier.php -text
action/supprimer_formulaire.php -text
action/supprimer_formulaires_reponse.php -text
action/vider_formulaire.php -text
......
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/autoriser');
include_spip('inc/formidable_fichiers');
/**
* Récupère, si on est autorisé à voir la réponse du formulaire,
* un fichier
* et l'envoi en http
**/
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'])) {
$chemin_fichier = _DIR_FICHIERS_FORMIDABLE
."formulaire_".$arg['formulaire']
."/reponse_".$arg['reponse']
."/".$arg['saisie']
."/".$arg['fichier'];
if (@file_exists($chemin_fichier)){
$f = $arg['fichier'];
formidable_retourner_fichier($chemin_fichier, $f);
}
else {
include_spip('inc/minipres');
echo minipres(_T("formidable:erreur_fichier_introuvable"));
}
} else {
include_spip('inc/minipres');
echo minipres();
}
exit;
}
......@@ -11,7 +11,6 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
include_spip('inc/formidable');
include_spip('inc/utils');
include_spip('public/formidable_criteres');
/**
......@@ -164,14 +163,16 @@ function formidable_ajouter_action_vue_saisie_fichiers($saisie_a_modifier, $nom_
$id_formulaire = strval($id_formulaire);
$id_formulaires_reponse = strval($id_formulaires_reponse);
$vignette_par_defaut = charger_fonction('vignette', 'inc/');
$securiser_action = charger_fonction('securiser_action','inc');
if (array_key_exists($nom_saisie, saisies_lister_avec_type($saisies_du_formulaire, 'fichiers'))) { //saisies SPIP
foreach ($saisie_a_modifier as $i => $valeur){
$param = 'id_formulaire='.$id_formulaire
. '&id_formulaires_reponse='.$id_formulaires_reponse
. '&fichier='.$valeur['nom']
. '&saisie='.$nom_saisie;
$url = generer_url_action('formidable_recuperer_fichier',$param,true,false);
$param = serialize(array(
'formulaire' => $id_formulaire,
'reponse' => $id_formulaires_reponse,
'fichier' => $valeur['nom'],
'saisie' => $nom_saisie
));
$url = $securiser_action('formidable_recuperer_fichier',$param,'',false);
$saisie_a_modifier[$i]['url'] = $url;
$saisie_a_modifier[$i]['vignette'] = $vignette_par_defaut($valeur['extension'],false);
}
......
......@@ -114,3 +114,27 @@ function formidable_deplacer_fichier_emplacement_definitif($fichier, $nom, $id_f
}
}
/**
* Fournit à l'utilisateur·trice un fichier qui se trouve normalement dans un endroit inaccessible, par exemple dans config.
* La fonction ne vérifie ni l'existence effective du fichier,
* ni le droit effectif de l'utilisateur.
* Ceci doit être fait dans l'action qui appelle cette fonction
* @param string $chemin le chemin du fichier
* @param string $f le nom du fichier qui sera envoyé à l'utilisateur·trice.
*
**/
function formidable_retourner_fichier($chemin, $f) {
header('Content-Type: '.mime_content_type($chemin));
header("Content-Disposition: attachment; filename=\"$f\";");
header("Content-Transfer-Encoding: binary");
// fix for IE catching or PHP bug issue (inspiré de plugins-dist/dump/action/telecharger_dump.php
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
if ($cl = filesize($chemin)) {
header("Content-Length: " . $cl);
}
readfile($chemin);
exit;
}
......@@ -78,6 +78,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'editer_unicite_label' => 'Vérifier l’unicité d’un champ',
'erreur_autorisation' => 'Vous n’avez pas le droit d’éditer les formulaires du site.',
'erreur_base' => 'Une erreur technique est survenue durant l’enregistrement.',
'erreur_fichier_introuvable' => 'Le fichier demandé est introuvable.',
'erreur_generique' => 'Il y a des erreurs dans les champs ci-dessous, veuillez vérifier votre envoi.',
'erreur_identifiant' => 'Cet identifiant est déjà utilisé.',
'erreur_identifiant_format' => 'L’identifiant ne peut contenir que des chiffres, lettres et le caractère "_"',
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter