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

déplacer le fichier une fois envoyé, pour le moment on ne gère pas les erreurs

parent aa946dc4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -5,6 +5,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/flock');
include_spip('inc/documents');
if (!defined('_DIR_FICHIERS')) { // En attendant que ce soit natif spip
define ('_DIR_FICHIERS', _DIR_ETC . 'fichiers/');
}
......@@ -18,19 +19,21 @@ if (!defined('_DIR_FICHIERS_FORMIDABLE')) {
* Vérifier que ce dossier soit accessible en écriture.
* Vérifier qu'on ne puisse pas y accéder de l'exterieur.
*
* @param $id_formulaire
* @param int $id_formulaire
* @param bool $forcer, pour forcer la création du dossier même si pas de saisie fichiers
* @return $erreur
**/
function formidable_creer_dossier_formulaire($id_formulaire) {
include_spip('formulaires/formidable');
$saisies_fichiers = formulaires_formidable_fichiers($id_formulaire); // Récuperer la liste des saisies de type fichier
**/
function formidable_creer_dossier_formulaire($id_formulaire, $forcer=false) {
if (!$forcer){
include_spip('formulaires/formidable');
$saisies_fichiers = formulaires_formidable_fichiers($id_formulaire); // Récuperer la liste des saisies de type fichier
if (!is_array($saisies_fichiers) or $saisies_fichiers == array ()) {//pas de saisie fichiers?
return '';
if (!is_array($saisies_fichiers) or $saisies_fichiers == array ()) {//pas de saisie fichiers?
return '';
}
}
$nom_dossier = "formulaire_$id_formulaire";
// On crée le dossier
sous_repertoire(_DIR_FICHIERS,'',true,true);
sous_repertoire(_DIR_FICHIERS_FORMIDABLE,'',true,true);
......@@ -49,7 +52,7 @@ function formidable_creer_dossier_formulaire($id_formulaire) {
array('dossier'=>_DIR_FICHIERS_FORMIDABLE . $nom_dossier)
);
}
include_spip('inc/distant');
$url = url_absolue($fichier);
if (recuperer_page ($url)) { // si on peut récuperer la page avec un statut http 200, c'est qu'il y a un problème. recuperer_page() est obsolète en 3.1, mais recuperer_url() n'existe pas en 3.0
......@@ -61,3 +64,53 @@ function formidable_creer_dossier_formulaire($id_formulaire) {
// Et si tout va bien
return '';
}
/**
* Déplace un fichier uploadé de son adresse temporaire vers son adresse définitive.
* Crée si besoin les dossiers de stockage.
*
* @param string $fichier l'adresse temporaire du fichier
* @param string $nom le nom du fichiera
* @param int $id_formulaire l'identifiant du formulaire
* @param string $champ le champ concerné
* @param int $id_formulaires_reponse l'identifiant de la réponse
* @return string $nom_definitif le nom définitif du fichier tel que stocké dans son dossier, vide s'il y a eu un souci lors du déplacement (dans ce cas un courriel sera envoyé au webmestre)
*
**/
function formidable_deplacer_fichier_emplacement_definitif($fichier, $nom, $id_formulaire, $champ, $id_formulaires_reponse = null){
// déterminer l'extension
$path_info = pathinfo($nom);
$basename = $path_info['basename'];
$extension = $path_info['extension'];
// d'abord, créer si besoin le dossier pour le formulaire, si on a une erreur, on ne déplace pas le fichier
if (formidable_creer_dossier_formulaire($id_formulaire, true) != '') {
return '';
}
// puis on créer le dossier pour la réponse
$dossier_formulaire = "formulaire_$id_formulaire";
$dossier_reponse = "reponse_$id_formulaires_reponse";
$dossier_reponse = sous_repertoire(_DIR_FICHIERS_FORMIDABLE.$dossier_formulaire."/", $dossier_reponse,false,true);
// puis le dossier pour le champ
$dossier_champ = sous_repertoire($dossier_reponse,$champ,false,true);
$appendice_nom = 0;
// S'assurer qu'il n'y a pas un fichier du même nom à destination
$chemin_final = $dossier_champ.$nom;
$n = 1;
while (@file_exists($chemin_final)){
$nom = $basename."_$n.".$extension;
$chemin_final = $dossier_champ.$nom;
$n++;
}
// On peut déplacer le fichier
if ($fichier = deplacer_fichier_upload($fichier, $chemin_final,true)){
return $nom;
}
else{
return '';
}
}
......@@ -112,8 +112,18 @@ function traiter_enregistrement_dist($args, $retours) {
$champs = array();
$insertions = array();
foreach ($saisies as $nom => $saisie) {
// On ne prend que les champs qui ont effectivement été envoyés par le formulaire
if (($valeur = _request($nom)) !== null) {
if ($saisie['saisie'] == 'fichiers') { // traiter à part le cas des saisies fichiers
$valeur = traiter_enregistrement_fichiers($saisie, $id_formulaire, $id_formulaires_reponse);
if (($valeur !== null)) {
$champs[] = $nom;
$insertions[] = array(
'id_formulaires_reponse' => $id_formulaires_reponse,
'nom' => $nom,
'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
);
}
}
if (($valeur = _request($nom)) !== null) {// Pour le saisies différentes de fichiers, on ne prend que les champs qui ont effectivement été envoyés par le formulaire
$champs[] = $nom;
$insertions[] = array(
'id_formulaires_reponse' => $id_formulaires_reponse,
......@@ -180,3 +190,49 @@ function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisie
);
}
}
/**
* Pour une saisie 'fichiers' particulière,
* déplace chaque fichier envoyé dans le dossier config/fichiers/formidable/formulaire_$id_formulaire/reponse_$id_formulaires_reponse.
* @param array $saisie la description de la saisie
* @param int $id_formulaire le formulaire
* @param int $id_formulaires_reponse
* return array|null un tableau organisé par fichier, contenant 'nom', 'extension','mime','taille'
**/
function traiter_enregistrement_fichiers($saisie, $id_formulaire, $id_formulaires_reponse){
include_spip('inc/formidable_fichiers');
$nb_fichiers_max = $saisie['options']['nb_fichiers']; // on va parcourir $_FILES en nous limitant aux nombres de fichiers définies par la saisie, pour éviter les éventuelles ajout supplémentaire de fichiers par modif du html
$champ = $saisie['options']['nom'];
if (!isset($_FILES[$champ])) {//précaution
return null;
}
$description_fichiers = array();
$mon_file = $_FILES[$champ];
$i = 0;
while ($i < $nb_fichiers_max) {
if ($mon_file['error'][$i] == 0) { // la saisie fichiers est forcément structurée sous la forme d'un tableau, on peut donc vérifier qu'il n'y a pas d'erreur facilement
$description = array(); // tableau pour stocker la description de ce fichier
// les infos qu'on peut récuperer directement de $files
$description['taille'] = $mon_file['size'][$i];
$description['mime'] = $mon_file['type'][$i];
// l'adresse du nouveau fichier, sans le chemin
if ($nouveau_nom = formidable_deplacer_fichier_emplacement_definitif(
$mon_file['tmp_name'][$i],
$mon_file['name'][$i],
$id_formulaire,
$champ,
$id_formulaires_reponse
)
) {
$description['nom'] = $nouveau_nom;
$description['extension'] = pathinfo($nouveau_nom, PATHINFO_EXTENSION);
}
$description_fichiers[] = $description;//On ajoute la description au tableau global
}
$i++;
}
return $description_fichiers;
}
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