[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / formidable_1_0 / traiter / email.php
diff --git a/www/plugins/formidable_1_0/traiter/email.php b/www/plugins/formidable_1_0/traiter/email.php
new file mode 100644 (file)
index 0000000..c7a60e4
--- /dev/null
@@ -0,0 +1,193 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function traiter_email_dist($args, $retours){
+       $formulaire = $args['formulaire'];
+       $options = $args['options'];
+       $saisies = unserialize($formulaire['saisies']);
+       $traitements = unserialize($formulaire['traitements']);
+       $champs = saisies_lister_champs($saisies);
+       
+       // On récupère les destinataires
+       if ($options['champ_destinataires']){
+               $destinataires = _request($options['champ_destinataires']);
+               if (!is_array($destinataires) and intval($destinataires)){
+                       $destinataires = array($destinataires);
+               }
+               if (is_array($destinataires)){
+                       // On récupère les mails des destinataires
+                       $destinataires = array_map('intval', $destinataires);
+                       $destinataires = sql_allfetsel(
+                               'email',
+                               'spip_auteurs',
+                               sql_in('id_auteur', $destinataires)
+                       );
+                       $destinataires = array_map('reset', $destinataires);
+               }
+       }
+       if (!$destinataires)
+               $destinataires = array();
+       
+       // On ajoute les destinataires en plus
+       if ($options['destinataires_plus']){
+               $destinataires_plus = explode(',', $options['destinataires_plus']);
+               $destinataires_plus = array_map('trim', $destinataires_plus);
+               $destinataires = array_merge($destinataires, $destinataires_plus);
+               $destinataires = array_unique($destinataires);
+       }
+       
+       // On récupère le courriel de l'envoyeur s'il existe
+       if ($options['champ_courriel']){
+               $courriel_envoyeur = _request($options['champ_courriel']);
+       }
+       if (!$courriel_envoyeur) $courriel_envoyeur = '';
+       
+       // Si on a bien des destinataires, on peut continuer
+       if ($destinataires or ($courriel_envoyeur and $options['activer_accuse'])){
+               include_spip('inc/filtres');
+               include_spip('inc/texte');
+               
+               $nom_site_spip = supprimer_tags(typo($GLOBALS['meta']['nom_site']));
+               
+               // On parcourt les champs pour générer le tableau des valeurs
+               $valeurs = array();
+               foreach ($champs as $champ){
+                       $valeurs[$champ] = _request($champ);
+               }
+               
+               // On récupère le nom de l'envoyeur
+               if ($options['champ_nom']){
+                       $a_remplacer = array();
+                       if (preg_match_all('/@[\w]+@/', $options['champ_nom'], $a_remplacer)){
+                               $a_remplacer = $a_remplacer[0];
+                               foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+                               $a_remplacer = array_flip($a_remplacer);
+                               $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+                               $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+                       }
+                       $nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer));
+               }
+               if (!$nom_envoyeur) $nom_envoyeur = $GLOBALS['meta']['nom_site'];
+               
+               // On récupère le sujet s'il existe sinon on le construit
+               if ($options['champ_sujet']){
+                       $a_remplacer = array();
+                       if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)){
+                               $a_remplacer = $a_remplacer[0];
+                               foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+                               $a_remplacer = array_flip($a_remplacer);
+                               $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+                               $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+                       }
+                       $sujet = trim(_L($options['champ_sujet'], $a_remplacer));
+               }
+               if (!$sujet) $sujet = _T('formidable:traiter_email_sujet', array('nom'=>$nom_envoyeur));
+               $sujet = filtrer_entites($sujet);
+               
+               // Mais quel va donc être le fond ?
+               if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_email.html'))
+                       $notification = 'notifications/formulaire_'.$formulaire['identifiant'].'_email';
+               else
+                       $notification = 'notifications/formulaire_email';
+               
+               // On génère le mail avec le fond
+               $html = recuperer_fond(
+                       $notification,
+                       array(
+                               'id_formulaire' => $formulaire['id_formulaire'],
+                               'titre' => _T_ou_typo($formulaire['titre']),
+                               'traitements' => $traitements,
+                               'saisies' => $saisies,
+                               'valeurs' => $valeurs
+                       )
+               );
+               
+               // On génère le texte brut
+               include_spip('classes/facteur');
+               $texte = Facteur::html2text($html);
+               
+               // On utilise la forme avancé de Facteur
+               $corps = array(
+                       'html' => $html,
+                       'texte' => $texte,
+                       'nom_envoyeur' => $nom_envoyeur
+               );
+               // 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.
+               $courriel_from = "";
+               if ($courriel_envoyeur && $options['activer_vrai_envoyeur']){
+                       $courriel_from = $courriel_envoyeur;
+               } else if ($courriel_envoyeur) {
+                       $corps['repondre_a'] = $courriel_envoyeur;
+               }
+               
+               // On envoie enfin le message
+               $envoyer_mail = charger_fonction('envoyer_mail','inc');
+               
+               // On envoie aux destinataires
+               if ($destinataires)
+                       $ok = $envoyer_mail($destinataires, $sujet, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
+               
+               // Si c'est bon, on envoie l'accusé de réception
+               if ($ok and $courriel_envoyeur and $options['activer_accuse']){
+                       // On récupère le sujet s'il existe sinon on le construit
+                       if ($options['sujet_accuse']){
+                               $a_remplacer = array();
+                               if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)){
+                                       $a_remplacer = $a_remplacer[0];
+                                       foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+                                       $a_remplacer = array_flip($a_remplacer);
+                                       $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+                                       $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+                               }
+                               $sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer));
+                       }
+                       if (!$sujet_accuse) $sujet_accuse = _T('formidable:traiter_email_sujet_accuse');
+                       $sujet_accuse = filtrer_entites($sujet_accuse);
+                       
+                       // Mais quel va donc être le fond ?
+                       if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_accuse.html'))
+                               $accuse = 'notifications/formulaire_'.$formulaire['identifiant'].'_accuse';
+                       else
+                               $accuse = 'notifications/formulaire_accuse';
+                               
+                       // On génère l'accusé de réception
+                       $html_accuse = recuperer_fond(
+                               $accuse,
+                               array(
+                                       'id_formulaire' => $formulaire['id_formulaire'],
+                                       'titre' => _T_ou_typo($formulaire['titre']),
+                                       'message_retour' => $formulaire['message_retour'],
+                                       'traitements' => $traitements,
+                                       'saisies' => $saisies,
+                                       'valeurs' => $valeurs
+                               )
+                       );
+                       
+                       // On génère le texte brut
+                       $texte = Facteur::html2text($html_accuse);
+                       
+                       $corps = array(
+                               'html' => $html_accuse,
+                               'texte' => $texte,
+                               'nom_envoyeur' => $nom_site_spip
+                       );
+
+                       $ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
+               }
+               
+               if ($ok){
+                       $retours['message_ok'] .= "\n<br/>"._T('formidable:traiter_email_message_ok');
+               }
+               else{
+                       $retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_email_message_erreur');
+               }
+       }
+       
+       return $retours;
+}
+
+?>