diff --git a/.gitattributes b/.gitattributes index 542cd0d89ef1f744599af8988d75e5bbced30913..973d88893b4f6a9a99a9e7ddd4803c58b03e3f4f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -46,6 +46,7 @@ verifier/email.php -text verifier/email.yaml -text verifier/entier.php -text verifier/entier.yaml -text +verifier/fichiers.php -text verifier/id_document.php -text verifier/id_document.yaml -text verifier/id_objet.php -text diff --git a/lang/verifier_fr.php b/lang/verifier_fr.php index 71bdc8acb04ffe1723610ac2a365e11de510f45c..4fd1d577a9309b39259e74a5b687d6e4a901f6f9 100644 --- a/lang/verifier_fr.php +++ b/lang/verifier_fr.php @@ -20,7 +20,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_date_format' => 'Le format de la date n’est pas accepté.', 'erreur_decimal' => 'La valeur doit être un nombre décimal.', 'erreur_decimal_nb_decimales' => 'Le nombre ne doit pas avoir plus de @nb_decimales@ chiffres après la virgule.', - 'erreur_dimension_image' => 'Le fichier @name@ est trop grand : @taille@ (maximum @taille_max@).', + 'erreur_dimension_image' => 'Le fichier « @name@ » est trop grand : @taille@ (maximum @taille_max@).', 'erreur_email' => 'L’adresse de courriel <em>@email@</em> n’a pas un format valide.', 'erreur_email_nondispo' => 'L’adresse de courriel <em>@email@</em> est déjà utilisée.', 'erreur_entier' => 'La valeur doit être un entier.', @@ -46,12 +46,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_siret' => 'Le numéro de SIRET n’est pas valide.', 'erreur_taille_egal' => 'La valeur doit comprendre exactement @egal@ caractères (actuellement @nb@).', 'erreur_taille_entre' => 'La valeur doit comprendre entre @min@ et @max@ caractères (actuellement @nb@).', - 'erreur_taille_image' => 'Le fichier @name@ est trop lourd : @taille@ (maximum @taille_max@).', + 'erreur_taille_image' => 'Le fichier « @name@ » est trop lourd : @taille@ (maximum @taille_max@).', 'erreur_taille_max' => 'La valeur doit comprendre au maximum @max@ caractères (actuellement @nb@).', 'erreur_taille_min' => 'La valeur doit comprendre au minimum @min@ caractères (actuellement @nb@).', 'erreur_telephone' => 'Le numéro n’est pas valide.', - 'erreur_type_image' => 'Le fichier @name@ n’est pas une image.', - 'erreur_type_non_autorise' => 'Le fichier @name@ n’est pas d’un type autorisé.', + 'erreur_type_image' => 'Le fichier « @name@ » n\'est pas une image.', + 'erreur_type_non_autorise' => 'Le fichier « @name@ » n\'est pas d\'un type autorisé.', 'erreur_url' => 'L’adresse <em>@url@</em> n’est pas valide.', 'erreur_url_protocole' => 'L’adresse saisie <em>(@url@)</em> doit commencer par @protocole@.', 'erreur_url_protocole_exact' => 'L’adresse saisie <em>(@url@)</em> ne commence pas par un protocole valide (http:// par exemple).', diff --git a/verifier/fichiers.php b/verifier/fichiers.php new file mode 100755 index 0000000000000000000000000000000000000000..661f4fd0edb34c483aa334d9cc3ce5d7b9aa50cd --- /dev/null +++ b/verifier/fichiers.php @@ -0,0 +1,67 @@ +<?php + +// Sécurité +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} + +/** + * Vérifier une saisie d'envoi de fichiers + * + * @param array $valeur + * Le sous tableau de $_FILES à vérifier, $_FILES['logo'] par exemple + * Doit être un champ avec un ou plusieurs upload + * @param array $options + * Options à vérifier : + * - mime au choix 'image','tous_spip','specifique' + * - mime_specifique (si l'option 'mime_specifique' est choisi ci-dessus) + * - taille_max (en Kio) + * - largeur_max (en px) + * - hauteur_max (en px) + * @param array &$erreurs_par_fichier + * Un tableau, passé par référence, qui contient le détail des erreurs fichier de $_FILES['fichier'] par fichier + * @return string + */ +function verifier_fichiers_dist($valeur, $options, &$erreurs_par_fichier) { + if (!is_array($valeur['tmp_name'])){//si on reçoit une info de type fichier unique, on bascule comme si on était fichier multiple + $old_valeur = $valeur; + $valeur = array(); + foreach ($old_valeur as $propriete=>$val){ + $valeur[$propriete][0] = $val; + } + } + + foreach ($valeur['tmp_name'] as $cle=>$tmp_name){//On parcourt tous les fichiers + if ($valeur['error'][$cle]!=0){//On vérifie uniquement les fichiers bien expediés + continue; + } + if ($erreur=verifier_fichier_mime($valeur,$cle,$options)){// On commence par vérifier le type + $erreurs_par_fichier[$cle] = $erreur; + } + } + if (!empty($erreurs_par_fichier)){ + return implode($erreurs_par_fichier,"<br />"); + } + return ''; +} + +/** + * Vérifier le mime type d'une saisie d'envoi de fichiers + * + * @param array $valeur + * Le sous tableau de $_FILES à vérifier, $_FILES['logo'] par exemple + * Doit être un champ plusieurs uploads + * @param int $cle + * La clé du tableau qu'on vérifie + * @param array $options + * Les options tels que passés à verifier_fichiers() + * @return string + */ +function verifier_fichier_mime($valeur,$cle,$options){ + if ($options['mime'] == 'specifique'){ + if (!in_array($valeur['type'][$cle],$options['mime_specifique'])){ + return _T('verifier:erreur_type_non_autorise',array('name'=>$valeur['name'][$cle])); + } + } + return ''; +}