Skip to content
Extraits de code Groupes Projets
Valider 61a90025 rédigé par Maïeul Rouquette's avatar Maïeul Rouquette
Parcourir les fichiers

Merge branch 'pj_embarque'

parents ef3574bb 7268411d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -21,23 +21,7 @@ function action_formidable_recuperer_fichier_par_email() {
or $hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere_ancien')) {
$arg = unserialize($arg);
// Construire le chemin du fichier, en fonction de ce qu'on reçoit
if (isset($arg['reponse'])) {
$chemin_fichier = _DIR_FICHIERS_FORMIDABLE
.'formulaire_'.$arg['formulaire']
.'/reponse_'.$arg['reponse']
.'/'.$arg['saisie']
.'/'.$arg['fichier'];
} elseif (isset($arg['timestamp'])) {
$chemin_fichier = _DIR_FICHIERS_FORMIDABLE
. 'timestamp/'
. $arg['timestamp'].'/'
. $arg['saisie'].'/'
. $arg['fichier'];
} else {
include_spip('inc/minipres');
echo minipres(_T('formidable:erreur_fichier_introuvable'));
}
$chemin_fichier = formidable_generer_chemin_fichier($arg);
// Vérifier que le fichier existe, qu'il n'est pas trop vieux, et l'envoyer le cas échéant
if (@file_exists($chemin_fichier)) {
$f = $arg['fichier'];
......
......@@ -6,6 +6,10 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
include_spip('inc/flock');
include_spip('inc/documents');
if (!defined('_FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL')) {// la taille maximum (en Mio) des fichiers qu'on autorise directement en PJ dans les emails.
define('_FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL', 10);
}
if (!defined('_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL')) {
// Combien de temps un lien par email dans fichier est valable (en seconde)
define('_FORMIDABLE_EXPIRATION_FICHIERS_EMAIL', 24*3600);
......@@ -283,7 +287,7 @@ function formidable_retourner_fichier($chemin, $f) {
* @param array $options
* des options, dépendantes du type de traitement,
* qui permettent d'indiquer où l'on déplace le fichier
* return array un tableau de "vue" de la saisie
* @return array un tableau de "vue" de la saisie
**/
function formidable_deplacer_fichiers_produire_vue_saisie($saisie, $options) {
$nb_fichiers_max = $saisie['options']['nb_fichiers'];
......@@ -517,3 +521,29 @@ function formidable_generer_url_action_recuperer_fichier_email($saisie, $fichier
$url = generer_url_action($action, "arg=$arg&hash=$hash", true, true);
return $url;
}
/** Générer le chemin d'un fichier d'après les paramètres passés en argument
* @param array $param, paramètres décrivant le fichiers: nom, timestamp de la réponse ou numéro d'enregistrement de la réponse, id du formulaire, champ formidable
* @return string $chemin;
**/
function formidable_generer_chemin_fichier($param){
$chemin_fichier = '';
if (isset($param['reponse'])) {
$chemin_fichier = _DIR_FICHIERS_FORMIDABLE
.'formulaire_'.$param['formulaire']
.'/reponse_'.$param['reponse']
.'/'.$param['saisie']
.'/'.$param['fichier'];
} elseif (isset($param['timestamp'])) {
$chemin_fichier = _DIR_FICHIERS_FORMIDABLE
. 'timestamp/'
. $param['timestamp'].'/'
. $param['saisie'].'/'
. $param['fichier'];
} else {
include_spip('inc/minipres');
echo minipres(_T('formidable:erreur_fichier_introuvable'));
}
return $chemin_fichier;
}
......@@ -31,8 +31,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'cfg_analyse_classe_explication' => 'Vous pouvez indiquer des classes CSS qui seront ajoutées
sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !',
sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !',
'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression',
'cfg_objets_explication' => 'Choisir les contenus auxquels pourront être liés les formulaires.',
'cfg_objets_label' => 'Lier les formulaires aux contenus',
......@@ -224,7 +224,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'traiter_email_option_destinataires_plus_explication' => 'Une liste d’adresses séparées par des virgules.',
'traiter_email_option_destinataires_plus_label' => 'Destinataires supplémentaires',
'traiter_email_option_destinataires_selon_champ_explication' => 'Permet d’indiquer un ou plusieurs destinataires en fonction de la valeur d’un champ.
Indiquer le champ, sa valeur, et le ou les courriels concernés (séparés par une virgule) suivant ce format, tel que : "@selection_1@/choix1 : mail@example.tld". Vous pouvez indiquer plusieurs tests, en revenant à ligne entre chaque test.',
Indiquer le champ, sa valeur, et le ou les courriels concernés (séparés par une virgule) suivant ce format, tel que : "@selection_1@/choix1 : mail@example.tld". Vous pouvez indiquer plusieurs tests, en revenant à ligne entre chaque test.',
'traiter_email_option_destinataires_selon_champ_label' => 'Destinataires en fonction d’un champ',
'traiter_email_option_envoyeur_courriel_explication' => 'Choisissez le champ qui contiendra le courriel de l’envoyeur.',
'traiter_email_option_envoyeur_courriel_label' => 'Courriel de l’envoyeur',
......@@ -233,6 +233,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'traiter_email_option_masquer_liens_label_case' => 'Masquer les liens d’administration dans le courriel.',
'traiter_email_option_nom_envoyeur_accuse_explication' => 'Précisez le nom de l’expéditeur utilisé pour envoyer l’accusé de réception. À défaut, le destinataire sera l’expéditeur.',
'traiter_email_option_nom_envoyeur_accuse_label' => 'Nom de l’expéditeur de l’accusé de réception',
'traiter_email_option_pj_explication' => 'Si les documents postés pèsent moins de '._FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL.' Mio (constante modifiable par le·la webmestre).',
'traiter_email_option_pj_label' => 'Joindre les fichiers dans le courriel',
'traiter_email_option_sujet_accuse_label' => 'Sujet de l’accusé de réception',
'traiter_email_option_sujet_explication' => 'Construisez le sujet à l’aide des @raccourcis@. Si vous ne mettez rien, le sujet sera construit automatiquement.',
'traiter_email_option_sujet_label' => 'Sujet du message',
......
<paquet
prefix="formidable"
categorie="communication"
version="3.4.0"
version="3.5.0"
etat="stable"
compatibilite="[3.0.0;3.2.*]"
logo="images/formidable-64.png"
......
......@@ -22,7 +22,8 @@ function traiter_email_dist($args, $retours) {
$traitements = unserialize($formulaire['traitements']);
$champs = saisies_lister_champs($saisies);
$destinataires = array();
$taille_fichiers = 0; //taille des fichiers en email
$fichiers_facteur = array(); // tableau qui stockera les fichiers à envoyer avec facteur
// On récupère les destinataires
if ($options['champ_destinataires']) {
$destinataires = _request($options['champ_destinataires']);
......@@ -96,6 +97,11 @@ function traiter_email_dist($args, $retours) {
if ($ajouter_fichier) {
$retours['fichiers'][$champ] = $valeurs[$champ];
}
$taille_fichiers += formidable_calculer_taille_fichiers_saisie($valeurs[$champ]);
$fichiers_facteur = array_merge(
$fichiers_facteur,
vue_fichier_to_tableau_facteur($valeurs[$champ])
);
} else {
$valeurs[$champ] = _request($champ);
}
......@@ -144,7 +150,17 @@ function traiter_email_dist($args, $retours) {
} else {
$notification = 'notifications/formulaire_email';
}
// Est-ce qu'on est assez léger pour joindre les pj
$joindre_pj = false;
if ($taille_fichiers < 1024 * 1024 * _FORMIDABLE_TAILLE_MAX_FICHIERS_EMAIL
and
$traitements['email']['pj'] == 'on'
) {
$joindre_pj = true;
foreach (array_keys($saisies_fichiers) as $nom) {
$saisies = saisies_supprimer($saisies,$nom);
}
}
// On génère le mail avec le fond
$html = recuperer_fond(
$notification,
......@@ -164,12 +180,17 @@ function traiter_email_dist($args, $retours) {
include_spip('facteur_fonctions');
$texte = facteur_mail_html2text($html);
// On utilise la forme avancé de Facteur
// On utilise la forme avancée de Facteur
$corps = array(
'html' => $html,
'texte' => $texte,
'nom_envoyeur' => filtrer_entites($nom_envoyeur),
);
// Joindre les pj si léger
if ($joindre_pj) {
$corps['pieces_jointes'] = $fichiers_facteur;
}
// Si l'utilisateur n'a pas indiqué autrement, on met le courriel de l'envoyeur dans
// Reply-To et on laisse le from par defaut de Facteur car sinon ca bloque sur les
// SMTP un peu restrictifs.
......@@ -263,6 +284,11 @@ function traiter_email_dist($args, $retours) {
'nom_envoyeur' => filtrer_entites($nom_envoyeur_accuse),
);
// Joindre les pj si léger et nécessaire
if ($joindre_pj and _FORMIDABLE_LIENS_FICHIERS_ACCUSE_RECEPTION == false) {
$corps['pieces_jointes'] = $fichiers_facteur;
}
$ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from_accuse, 'X-Originating-IP: '.$GLOBALS['ip']);
}
......@@ -454,6 +480,39 @@ function vues_saisies_supprimer_action_recuperer_fichier_par_email($saisies, $vu
}
return $vues;
}
/**
* Calcule la taille totale des fichiers
* d'après une saisie de type fichiers
* @param array $saisie
* @return int $taille (en octets)
**/
function formidable_calculer_taille_fichiers_saisie($saisie) {
$taille = 0;
foreach ($saisie as $k => $info) {
$taille += $info['taille'];
}
return $taille;
}
/**
* Converti une description d'une vue fichiers en description passable à facteur
* @param array $vue
* @return array $tableau_facteur
**/
function vue_fichier_to_tableau_facteur($vue) {
$tableau_facteur = array();
foreach ($vue as $fichier) {
$arg = unserialize(parametre_url($fichier['url'],'arg'));
$tableau_facteur[] = array(
'chemin' => formidable_generer_chemin_fichier($arg),
'nom' => $fichier['fichier'],
'encodage' => 'base64',
'mime' => $fichier['mime']);
}
return $tableau_facteur;
}
/**
* Retourne des secondes sous une jolie forme, du type xx jours, yy heures, zz minutes, aa secondes
* @param int $seconde
......
......@@ -59,6 +59,13 @@ options:
nom: 'champ_sujet'
label: '<:formidable:traiter_email_option_sujet_label:>'
explication: '<:formidable:traiter_email_option_sujet_explication:>'
-
saisie: 'case'
options:
nom: 'pj'
li_class: 'pleine_largeur'
label_case: '<:formidable:traiter_email_option_pj_label:>'
explication: '<:formidable:traiter_email_option_pj_explication:>'
-
saisie: 'case'
options:
......
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