[PLUGINS] ~formidable 1.3.6 --> 1.9.1
[lhc/web/www.git] / www / plugins / formidable_1_0 / traiter / email.php
1 <?php
2
3 // Sécurité
4 if (!defined("_ECRIRE_INC_VERSION")) return;
5
6 function traiter_email_dist($args, $retours){
7 $formulaire = $args['formulaire'];
8 $options = $args['options'];
9 $saisies = unserialize($formulaire['saisies']);
10 $traitements = unserialize($formulaire['traitements']);
11 $champs = saisies_lister_champs($saisies);
12
13 // On récupère les destinataires
14 if ($options['champ_destinataires']){
15 $destinataires = _request($options['champ_destinataires']);
16 if (!is_array($destinataires) and intval($destinataires)){
17 $destinataires = array($destinataires);
18 }
19 if (is_array($destinataires)){
20 // On récupère les mails des destinataires
21 $destinataires = array_map('intval', $destinataires);
22 $destinataires = sql_allfetsel(
23 'email',
24 'spip_auteurs',
25 sql_in('id_auteur', $destinataires)
26 );
27 $destinataires = array_map('reset', $destinataires);
28 }
29 }
30 if (!$destinataires)
31 $destinataires = array();
32 if ($options['champ_courriel_destinataire_form']) {
33 $courriel_champ_form = _request($options['champ_courriel_destinataire_form']);
34 $destinataires[] = $courriel_champ_form;
35 }
36
37
38 // On ajoute les destinataires en plus
39 if ($options['destinataires_plus']){
40 $destinataires_plus = explode(',', $options['destinataires_plus']);
41 $destinataires_plus = array_map('trim', $destinataires_plus);
42 $destinataires = array_merge($destinataires, $destinataires_plus);
43 $destinataires = array_unique($destinataires);
44 }
45
46 // On récupère le courriel de l'envoyeur s'il existe
47 if ($options['champ_courriel']){
48 $courriel_envoyeur = _request($options['champ_courriel']);
49 }
50 if (!$courriel_envoyeur) $courriel_envoyeur = '';
51
52 // Si on a bien des destinataires, on peut continuer
53 if ($destinataires or ($courriel_envoyeur and $options['activer_accuse'])){
54 include_spip('inc/filtres');
55 include_spip('inc/texte');
56
57 $nom_site_spip = supprimer_tags(typo($GLOBALS['meta']['nom_site']));
58
59 // On parcourt les champs pour générer le tableau des valeurs
60 $valeurs = array();
61 foreach ($champs as $champ){
62 $valeurs[$champ] = _request($champ);
63 }
64
65 // On récupère le nom de l'envoyeur
66 if ($options['champ_nom']){
67 $a_remplacer = array();
68 if (preg_match_all('/@[\w]+@/', $options['champ_nom'], $a_remplacer)){
69 $a_remplacer = $a_remplacer[0];
70 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
71 $a_remplacer = array_flip($a_remplacer);
72 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
73 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
74 }
75 $nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer));
76 }
77 if (!$nom_envoyeur) $nom_envoyeur = $nom_site_spip;
78
79 // On récupère le sujet s'il existe sinon on le construit
80 if ($options['champ_sujet']){
81 $a_remplacer = array();
82 if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)){
83 $a_remplacer = $a_remplacer[0];
84 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
85 $a_remplacer = array_flip($a_remplacer);
86 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
87 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
88 }
89 $sujet = trim(_L($options['champ_sujet'], $a_remplacer));
90 }
91 if (!$sujet) $sujet = _T('formidable:traiter_email_sujet', array('nom'=>$nom_envoyeur));
92 $sujet = filtrer_entites($sujet);
93
94 // Mais quel va donc être le fond ?
95 if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_email.html'))
96 $notification = 'notifications/formulaire_'.$formulaire['identifiant'].'_email';
97 else
98 $notification = 'notifications/formulaire_email';
99
100 // On génère le mail avec le fond
101 $html = recuperer_fond(
102 $notification,
103 array(
104 'id_formulaire' => $formulaire['id_formulaire'],
105 'titre' => _T_ou_typo($formulaire['titre']),
106 'traitements' => $traitements,
107 'saisies' => $saisies,
108 'valeurs' => $valeurs
109 )
110 );
111
112 // On génère le texte brut
113 include_spip('facteur_fonctions');
114 $texte = facteur_mail_html2text($html);
115
116 // On utilise la forme avancé de Facteur
117 $corps = array(
118 'html' => $html,
119 'texte' => $texte,
120 'nom_envoyeur' => filtrer_entites($nom_envoyeur),
121 );
122 // Si l'utilisateur n'a pas indiqué autrement, on met le courriel de l'envoyeur dans
123 // Reply-To et on laisse le from par defaut de Facteur car sinon ca bloque sur les
124 // SMTP un peu restrictifs.
125 $courriel_from = "";
126 if ($courriel_envoyeur && $options['activer_vrai_envoyeur']){
127 $courriel_from = $courriel_envoyeur;
128 } else if ($courriel_envoyeur) {
129 $corps['repondre_a'] = $courriel_envoyeur;
130 }
131
132 // On envoie enfin le message
133 $envoyer_mail = charger_fonction('envoyer_mail','inc');
134
135 // On envoie aux destinataires
136 if ($destinataires)
137 $ok = $envoyer_mail($destinataires, $sujet, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
138
139 // Si c'est bon, on envoie l'accusé de réception
140 if ($ok and $courriel_envoyeur and $options['activer_accuse']){
141 // On récupère le sujet s'il existe sinon on le construit
142 if ($options['sujet_accuse']){
143 $a_remplacer = array();
144 if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)){
145 $a_remplacer = $a_remplacer[0];
146 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
147 $a_remplacer = array_flip($a_remplacer);
148 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
149 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
150 }
151 $sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer));
152 }
153 if (!$sujet_accuse) $sujet_accuse = _T('formidable:traiter_email_sujet_accuse');
154 $sujet_accuse = filtrer_entites($sujet_accuse);
155
156 // Mais quel va donc être le fond ?
157 if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_accuse.html'))
158 $accuse = 'notifications/formulaire_'.$formulaire['identifiant'].'_accuse';
159 else
160 $accuse = 'notifications/formulaire_accuse';
161
162 // On génère l'accusé de réception
163 $html_accuse = recuperer_fond(
164 $accuse,
165 array(
166 'id_formulaire' => $formulaire['id_formulaire'],
167 'titre' => _T_ou_typo($formulaire['titre']),
168 'message_retour' => $formulaire['message_retour'],
169 'traitements' => $traitements,
170 'saisies' => $saisies,
171 'valeurs' => $valeurs
172 )
173 );
174
175 // On génère le texte brut
176 $texte = facteur_mail_html2text($html_accuse);
177
178 $corps = array(
179 'html' => $html_accuse,
180 'texte' => $texte,
181 'nom_envoyeur' => filtrer_entites($nom_site_spip),
182 );
183
184 $ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
185 }
186
187 if ($ok){
188 $retours['message_ok'] .= "\n"._T('formidable:traiter_email_message_ok');
189 }
190 else{
191 $retours['message_erreur'] .= "\n"._T('formidable:traiter_email_message_erreur');
192 }
193 }
194
195 return $retours;
196 }
197
198 ?>