Configuration requise
Afin de pouvoir accéder à la fonction d’envoi de fichiers il vous faut:
- Le plugin CVTupload dans sa version 1.9.4 au minimum. Attention, il reste possible d’activer Formidable sans avoir ce plugin. Simplement, il sera alors impossible d’envoyer des fichiers avec Formidable.
- L’extension PHP
fileinfo. - Le plugin Formidable en version 3.0.0, lequel nécessite notamment:
Configuration des fichiers à envoyer
Lors de la création d’un formulaire, il est possible de choisir un champ de type «Fichier(s)».
Ce type de champ possède un certain nombre de propriétés configurables. Certaines, telles le titre, sont communes à l’ensemble des champs proposés par Formidable. Nous ne nous attarderons pas dessus, et n’exposerons que les propriétés spécifiques au type de champ «Fichier(s)».
Nombre de fichiers
Dans la configuration du champ, l’onglet «Utilisation» permet de choisir le nombre de fichiers à envoyer pour ce champ. Par défaut, la valeur est 1.
Notez qu’il s’agit du nombre de fichiers pour ce champ, mais qu’il est possible d’ajouter des champs supplémentaires pour d’autres fichiers, ce qui permet de distinguer les fichiers selon les besoins.
Pour l’instant, chaque fichier est associé à un input unique, afin d’être compatible avec un maximum de navigateur. Dans le futur, des versions améliorées de la saisie pourront être disponibles pour améliorer l’ergonomie.
Notez que si une internaute triche et modifie le HTML afin d’envoyer plus de fichiers, le système n’enregistrera pas plus de fichiers que configurés.
Puisque chaque fichier est associé à un input unique, chaque input reçoit un label individuel. Il est cependant possible de désactiver ce label pour n’afficher que le label commun à l’ensemble des fichiers.
Validation
L’onglet « Validation » de la configuration du champ permet de régler les propriétés des fichiers envoyés.
Cet onglet est assez long, car il permet de choisir finement les types de fichiers autorisés à l’envoi.
Caractère obligatoire
La première option dans cet onglet, est, comme pour tous les champs, le caractère obligatoire ou non de l’envoi de fichier.
Notez que dans le cas d’un champ permettant d’envoyer plusieurs fichiers, on considère que l’obligation d’envoi est remplie à partir du moment où un fichier est envoyé. Si vous souhaitez imposer l’envoi de trois fichiers, il vous faut créer trois champs [1].
Type Mime et extension
Une première série de boutons radio permet de choisir types de fichiers sont autorisés:
- Autoriser tous les types et extensions cette option est très déconseillée;
- Autoriser tous les types Mime et extensions connues de SPIP dans sa table
spip_types_documents[2]; - Autoriser uniquement les les images web (gif, jpg, png) (
.jpg,.png,.gif); - Autoriser uniquement les types et extensions sélectionnés parmi les cases à cocher; utile par exemple pour n’autoriser que l’envoi de pdf. Les cases à cocher de choix de type n’apparaissent que si on choisit cette option.
Notez les points suivants:
- Dans tous les cas, Formidable zippera automatiquement les fichiers d’un type et/ou d’une extension absente de la table
spip_types_documents, afin notamment d’empêcher son exécution sur le serveur. - Si vous choisissez l’option « Tous les types Mime et extension autorisés par SPIP » ou « Un type Mime associé à une extension précisée ci-dessous» la vérification se fera:
- la plupart du temps, sur la base du type Mime détecté par PHP et de l’extension du fichier
- lorsque PHP détecte un type Mime
text/plainouapplication/octet-stream, qui sont très génériques, sur la seule base de l’extension [3].
Taille du fichier
La taille du fichier est, de facto, limitée par la configuration de votre serveur. Souvent par défaut, 32 kio [4].
L’ami Marcimat travaille actuellement sur un projet «BigUp» qui permet d’envoyer des fichiers plus gros. Si cela est nécessaire pour vos besoins, le contacter.
En dehors même des limites techniques, il peut être utile de limiter pour des raisons éditoriales la taille des fichiers envoyés. Pour cela, il vous suffit de remplir le champ «taille» en indiquant une taille maximale en kio.
Notez ces deux points:
- la vérification de la taille a lieu après l’envoi du fichier sur le serveur
- la vérification de la taille se comprend fichier par fichier, et non pour l’ensemble des fichiers d’un même champ.
Dimension de l’image
Une dernière série de réglages permet de vérifier la dimension des images envoyées.
Notez qu’il faut dans ce cas s’assurer que le document envoyé est bien une image en choisissant la bonne option auparavant. De plus, la fonction utilisée pour déterminer la taille de l’image est getimagesize(), qui ne comprend pas tous les types d’images.
Il est possible de préciser une largeur maximum (en pixels) et une hauteur maximum (en pixels). Une option permet également d’autoriser les images qui rentrent dans ces dimensions lorsqu’on les tourne de 90°.
Configuration des traitements
Comme pour tous les formulaires Formidable, un formulaire proposant l’envoi de fichier peut enregistrer les réponses et/ou les envoyer par courriel. Il n’y a rien de particulier à faire dans le cas qui nous occupe.
Confidentialité des fichiers
Au moment de l’enregistrement des traitements, Formidable vérifie s’il est possible d’enregistrer les fichiers à un endroit inaccessible par http. En cas de problème, un message est affiché, et dans ce cas l’envoi des fichiers ne pourra avoir lieu tant que le problème ne sera pas résolu. Voir plus bas, le paragraphe sur «Où les fichiers sont-ils stockés?».
Durée du lien par email
Il est conseillé de choisir l’enregistrement des réponses, et de ne pas se contenter de l’envoi par courriel. En effet, les fichiers ne sont pas joints dans le courriel, pour éviter des problèmes en cas de fichiers lourds, mais un lien y est inséré.
Le lien dans l’email expire 24h après l’envoi du formulaire. Il est possible d’augmenter ce délai en mettant la ligne suivant dans votre fichier mes_options.php:
define ('_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL', <une_durée_exprimée_en_seconde>);Si la durée est mise sur 0, le lien est valable ad vitam aeternam.
Joindre directement les fichiers dans le courriel
Depuis la version 3.5.0, il est possible de joindre les fichiers directement dans le courriel.
Mais :
- le lien entre les fichiers et les champ associé est perdu
- les fichiers sont à la fin du courriel
- si la taille (en Mio) dépasse la valeur de la constante _FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL (par défaut 10), les fichiers ne sont pas joints et on repasse à une présentation classique par insertion d’un lien.
Utiliser le formulaire en tant que visiteur⋅euse
Une fois le formulaire publié sur le site public, lela visiteur⋅euse peut le remplir et choisir les fichiers à envoyer.
Si ielle envoie une réponse avec des erreurs dans un champ, les fichiers déjà envoyés sont conservés, et il n’a pas besoin de les renvoyer. Ielle peut cependant décider, le cas échéant, de supprimer des fichiers déjà envoyés.
Si vous autorisez une visiteureuse à modifier une réponse envoyée, le formulaire de modification de réponse lui propose automatiquement les fichiers qu’ielle a auparavant envoyés, avec la possibilité de supprimer – et donc de remplacer – des fichiers.
Notez que, comme pour les autres champs, il n’est fait aucune sauvegarde des anciennes valeurs.
Récupérer les fichiers envoyés
Les fichiers envoyés sont stockés dans un endroit normalement inaccessible au public. Dans la présentation des réponses, que ce soit dans l’espace privé de SPIP ou par courriel, un lien est inséré.
Ce lien est sécurisé de telle sorte que seules les personnes ayant le droit de voir les réponses ou ayant reçue le courriel puissent télécharger le fichier.
Notez que quelques changements sont effectués dans le nom des fichiers envoyés:
- passage en minuscule;
- suppression des accents;
- remplacement des espaces par des tirets-bas;
- suppression des points initiaux si le nom du fichier commence par un point;
- ajout éventuel de suffixe pour distinguer les fichiers homonymes;
- mise en zip du fichier s’il n’est pas d’un type ou d’une extension listée dans la table
spip_types_documents
Dans l’accusé de réception, ces liens sont également insérés.
Cependant, il est possible désactiver cela en mettant la ligne suivante dans le fichier mes_options.php:
define('_FORMIDABLE_LIENS_FICHIERS_ACCUSE_RECEPTION', false);Où les fichiers sont-ils stockés?
Cette partie de la documentation intéresse surtout les webmestres et non les administrateurtrices.
Dans tous les cas, les fichiers sont enregistrés dans le dossier config/fichiers/formidable, qui est automatiquement créé. Il vous faut donc transférer le dossier config/fichiers [5] lorsque vous migrez un site d’un serveur à un autre, et si possible sauvegarder régulièrement ce dossier.
Normalement SPIP s’assure que le dossier config n’est pas accessible en lecture à l’extérieur.
Par précaution, Formidable s’assure également de cela à chaque envoi du fichier.
Si ce critère n’est pas rempli, ou s’il est impossible d’écrire dans config/fichiers/formidable:
- un message de log est enregistré dans
formidable.log; - le fichier n’est pas déplacé dans
config/fichiers; - un courriel est envoyé à l’adresse du webmestre configuré dans les réglages d’identité du site [6], ce qui lui permet de récupérer en urgence le fichier dans le dossier
tmp/cvtupload;
À l’intérieur de config/fichiers/formidable, les fichiers sont stockés selon la structure suivante:
- Si les réponses sont enregistrées en base de données, un dossier par formulaire, puis un dossier par réponse, puis un dossier par champ. Par exemple
formulaire_1/reponse_2/fichiers_3. - Si les réponses ne sont pas enregistrées, mais simplement envoyées par courriel, nous utilisons un dossier
timestamp: à l’intérieur de ce dossier est créé un dossier par réponse, dont le nom correspond au timestamp de la réponse. Au sein de chaque dossier de réponse, un dossier est créé par champs.
Effacement des fichiers
Ces fichiers sont effacés:
- Lorsque la réponse est effacée de la base de données, quand Formidable efface les réponses «à la poubelle».
- Lorsque le formulaire est effacé de la base de données quand Formidable efface les formulaires en statut «à la poubelle».
- Pour les réponses qui ne sont pas stockées en base de données, lorsque les fichiers sont plus vieux que la constante
_FORMIDABLE_EFFACEMENT_FICHIERS_EMAIL, qui par défaut est égale à la constante_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL, qui est égale par défaut à 24*3600 secondes. Vous pouvez modifier cette constante en ajoutant dans votre fichiermes_options.phpla ligne suivante:define ('_FORMIDABLE_EFFACEMENT_FICHIERS_EMAIL', <une_durée_exprimée_en_seconde>);Si la durée est mise à 0, les fichiers sont conservés ad vitam aeternam.
Dans tous les cas, veillez à ce que la constante_FORMIDABLE_EFFACEMENT_FICHIERS_EMAILsoit au moins égale à_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL.



Discussions by date of activity
23 discussions
Bonjour
J’ai une erreur qui vient d’apparaître sur mon spip (4.2.17) avec formidable (7.2.0) et cvt-upload (2.3.2).
J’ai PHP 8.2.29 et php8.2-zip
Quand je télécharge les réponses avec les pièces jointes l’archive créée est différente d’avant et cela empêche son ouverture sur les postes windows notamment.
L’archive contient les fichiers suivants
Précédemment, les chemins des fichiers de l’archive commençaient avec
formulaire_19Le chemin relatif “../config/” empêche l’ouverture via les outils Windows. J’y arrive en ligne de commande sous unix mais avec des erreurs :
je ne saurais pas dire quand le problème est apparu.
Est-ce volontaire ? Ou y-a-t-il un réglage à mettre quelque part ?
Merci de votre aide
Ce n’est ni volontaire ni réglable. C’est un souci apparu avec les dernières versions de SPIP, et il y a un ticket ouvert depuis un bout de temps... mais personne pour s’en occuper.
Mince :(
Sait-on dans quel fichier se situe le problème ? dans la distrib spip ? ou dans le plugin cvt-upload ?
Je peux tenter d’y jeter un oeil et proposer une solution (je suis très motivée pour régler le pb, je ne tiens pas à devoir faire l’intermédiaire pour mes utilisateurs)
C’est dans le plugin-dist archivist.
https://git.spip.net/spip/archiviste/-/issues/4430
Je pense trouver la source. Je tente des choses et vous reviens.
Oui, cela devrait être bon. Je vais faire une MR. cela sortira sans doute avec la prochaine version de spip.
Super ! merci !
En fait, non le problème est bien dans formidable, mais suite à des changements dans spip.
Bref https://git.spip.net/spip-contrib-extensions/formidable/-/merge_requests/348/diffs
et j’espère sortir une version de formidable tantot, mais j’ai pas beaucoup de gens pour relire toutes les MR en attentes...
Reply to this message
Je teste sur un SPIP 4.4.6 (PHP 7.4 ou PHP 8.1 avec l’extension fileinfo activée) avec un plugin formidable et cvt-upload à jour
Le panel de validation de la saisie des pièces jointes affiche uniquement un champs obligatoire et on n’a pas les conditions sur le poids, le mime-type, ... Quelqu’un rencontre t-’il aussi le bug ?
J’ai ouvert un ticket: https://git.spip.net/spip-contrib-extensions/cvt-upload/-/issues/21
Sitôt signalé, sitôt corrigé !
Merci Maïeul pour la réactivité
Reply to this message
Bonjour,
Depuis les dernières mises à jour des plugins Formidable et Saisies, l’option “Envoi de fichier” ne semble plus fonctionner. Du coup tous mes formulaires qui prédatent la mise à jour affiche un message d’erreur : Aucun squelette saisies/fichiers n’est disponible...
Est-ce que cette modif est permanente ou peut-elle être corrigée ? Est-ce qu’une astuce m’a echappée
Merci pour ton aide
Je réponds à moi-même.
Il faut activer le plugin CVT-upload.
Merci ChatGPT
Donc si je comprend bien, plutôt que de lire la première ligne de cette documentation qui dit explicitement qu’il faut utiliser cvt-upload, vous avez préféré utiliser une soit disante intelligence artificielle et faire cramer ainsi la moitié de la planète ????
Les bras m’en tombent....
Oui désolé
Reply to this message
Bonjour Maïeul, et la communauté !
Avec ce super plugin que j’utilise depuis un moment, je viens d’implémenter CVTupload pour l’ajout de fichier (première utilisation de CVT pour moi), et il fonctionne très bien.
En revanche, dès que j’ajoute ces 2 lignes dans le php de mes_options, catastrophe !
Je n’ai plus accès au site, ni public ni privé, et j’obtiens l’erreur suivante :
Parse error: syntax error, unexpected token “<”, expecting “)” à la ligne concernée de mes_options.php en local et une erreur 500 en production.
Je ne sais pas si j’ai besoin de la seconde ligne dans la mesure où je souhaite récupérer les fichiers en BDD plutôt que dans les mails (et je souhaite conserver le lien des mails vers le fichier stocké), mais dans tous les cas, avec la seule première ligne, j’ai ces mêmes erreurs.
Spip 4.4.4, plugins à jour, PHP 8.2 en local et distant… Qu’est-ce que j’’ai raté ?
Dans une doc sur sur du code informatique, si on met
<xx>il faut remplacer tout<xx>par la valeur de x, et ne pas garder les chevrons (c’est une convention pour documenter de l’information).Donc
Mille mercis Maïeul pour cette réponse ultra rapide et efficace :D
Je n’avais pas la convention, et en effet, ça fonctionne beaucoup mieux comme ça !! Top :)
Reply to this message
Bonjour,
Y a-t-il une façon de faire propre lors d’un traitement, pour transformer des fichiers envoyés par Formidable en documents SPIP ?
Peut-être un exemple dans un plugin existant déjà ?
Merci pour vos pistes !
C’est un ticket ouvert depuis des années.
A ma connaissance ca n’existe pas encore.
Il faudrait je pense faire un nouveau traitement “mettre les fichiers dans la médiathèque”. Soit dans le corps de formidable, soit en plugin à part.
Vu que je devais associer des documents à un évènement, le code suivant semble fonctionner, si c’est comme ça qu’il faut procéder ?
C’est un peu crade et pas générique, mais cela marche sans doute dans ton cas d’usage. Mais il vaudrait quand même mieux passer par
formidable_generer_chemin_fichier()https://git.spip.net/spip-contrib-extensions/formidable/src/branch/master/inc/formidable_fichiers.php#L560.Oui ce n’est pas générique.
La question de la liaison des documents se pose.
Merci pour la fonction
formidable_generer_chemin_fichier(), je ne l’avais plus en tête.Pour l’instant le code suivant fonctionne dans un de mes traitements :
Reply to this message
Bonjour,
J’ai deux sites sous Spip 4.1.1 avec le mode compatibilité des plugins activé, et sur les deux, quand je veux envoyer un fichier joint ( formulaire Formidable avec CVTupload installé et à jour) j’obtiens une page blanche, et le mail ne part pas. Voici ce que j’obtiens en activant toutes les erreurs dans mes_options :
Fatal error: Uncaught TypeError: array_merge(): Argument #1 must be of type array, string given in /racine_de_mon_site/plugins/auto/saisies/v4.3.3/inc/saisies_verifier.php:104 Stack trace: #0 /racine_de_mon_site/plugins/auto/saisies/v4.3.3/inc/saisies_verifier.php(104): array_merge(’’, Array) #1 /racine_de_mon_site/plugins/auto/saisies/v4.3.3/saisies_pipelines.php(267): saisies_verifier(Array) #2 /racine_de_mon_site/ecrire/inc/utils.php(236): saisies_formulaire_verifier(Array) #3 /racine_de_mon_site/tmp/cache/charger_pipelines.php(581): minipipe(’saisies_formula...’, Array) #4 /racine_de_mon_site/ecrire/inc/utils.php(303): execute_pipeline_formulaire_verifier(Array) #5 /racine_de_mon_site/ecrire/public/aiguiller.php(255): pipeline(’formulaire_veri...’, Array) #6 /racine_de_mon_site/ecrire/public.php(105): traiter_formulaires_dynamiques() #7 /racine_de_mon_site/spip.php(20): include(’/home/offmays/w...’) #8 main thrown in /racine_de_mon_site/plugins/auto/saisies/v4.3.3/inc/saisies_verifier.php on line 104
Une idée de ce qui peut causer cela ?
Merci d’avance.
Il faudrait pour en savoir plus
1. Avoir la version PHP
2. Avoir l’export yaml du formulaire.
PHP Version 8.0.12
Yaml : https://ismayotte.lautre.net/tmp/formulaire-contact.yaml
Le problème est identique avec PHP Version 8.1.0
La ligne en question concerne donc le plugin Saisies (ni Formidable ni CVT Upload), et est :
On aurait donc un cas où
$verifier['options']serait bien défini non null mais SANS être un tableau… Chelou…Je viens de tester le .yaml, je ne reproduis pas...
Reply to this message
Depuis le frontend, est-il possible, dynamiquement, d’ajouter de nouveaux destinataires dans le traitement du formulaire ?
Merci.
Reply to this message
Bonjour,
Il m’est impossible de choisir le champs “Fichiers” . Il n’apparaît pas.
Pouvez-vous m’orienter pour résoudre ce problème ?
J’ai la version 4.4.0 du plugin Formidable.
Merci
Avez vous, comme indiqué dans cet article, le plugin cvtupload ?
Reply to this message
Bonjour,
J’ai des erreurs dans les logs du serveur lorsqu’un formulaire est posté avec un fichier joint :
[Mon Jun 29 13:58:51.640953 2020] [authz_core:error] [pid 28436:tid 22930138228480] [client 102.xxx.xxx.xx:0] AH01630: client denied by server configuration: /home/site/www/site.org/config/fichiers/formidable/formulaire_2/test.txt, referer: https://www.site.org/
Les droits du fichier test.txt sont actuellement à “666”. Est-ce que c’est correct ?
Merci
oui c’est normal. pour s’assurer que les fichiers ne sont pas accessibles en externes, formidable crée des fichiers bidons test.txt et essaie de les appeler. Et donc si le serveur rale, c’est que les fichiers sont pas accesibles et c’est bon signe :)
Reply to this message
Bonsoir, et meilleurs vœux...
J’affiche les réponses d’un formulaire dans un site public, mais le lien vers le fichier joint ne fonctionne que pour les administrateurs à priori (fonction formidable_recuperer_fichier), y a-t-il un moyen de le rendre fonctionnel également pour d’autres auteurs connectés (rédacteurs ou visiteurs) ? Merci d’avance.
La fonction vérifier le droit de voir une réponse, qui est défini par l’autorisation “voir” / “formulairesreponse”.
Il faut donc surcharger. Cf la doc sur les autorisation
https://programmer.spip.net/Creer-ou-surcharger-des
Du reste, vous devriez utiliser la balise
#AUTORISERpour vous assurer des autorisations.Exemple pour permettre de télécharger les réponses de toute les formulaires pour les personnes connectées.
Attention, il faut faire vraiemnt attention, en terme de confidentialité et autre, ce n’est pas top.
Bonjour, merci beaucoup pour ce retour. Je vais essayer ça. Comme ça ne concerne qu’un seul formulaire, je devrais pouvoir circonscrire les risques éventuels. Bon début de semaine.
Reply to this message
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Follow the comments:
|
