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