222 lines
6.4 KiB
PHP
222 lines
6.4 KiB
PHP
<?php
|
|
if (!defined('_ECRIRE_INC_VERSION')){
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* fonction pour préparer et envoyer un mail basé sur un slug gamumail
|
|
*
|
|
* @param string $slug
|
|
* @param string|array $destinataires = adresses mails et id_auteur séparées par , ou en array
|
|
* si un des destinataire est au format numérique, on considère que c'est un id_auteur et on va choper son mail dans spip_auteurs
|
|
* @param array $options :
|
|
* $options['debug' => true] pour afficher le $corps final sans envoyer le mail
|
|
* $options['cci' => true] pour passer les destinataires en cci si il y en a plus qu'un
|
|
*
|
|
**/
|
|
function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
|
|
include_spip('inc/texte');
|
|
include_spip('classes/facteur');
|
|
|
|
$retour = array();
|
|
|
|
// sécu
|
|
if (preg_match('/[^a-zA-Z0-9_\-]/', $slug)) {
|
|
$retour['message_erreur'] = _T("gamumail:erreur_format_slug");
|
|
return $retour;
|
|
}
|
|
|
|
// contenus du slug
|
|
$res = sql_fetsel('*', 'spip_gamumails', 'slug = "'.$slug.'"');
|
|
if ($res) {
|
|
$sujet = $res['sujet'];
|
|
$html = propre($res['texte']);
|
|
$texte = facteur_mail_html2text($html);
|
|
$id_docs = $res['id_docs'];
|
|
}
|
|
else {
|
|
$retour['message_erreur'] = _T("gamumail:pas_de_slug");
|
|
return $retour;
|
|
}
|
|
|
|
// destinataires
|
|
if (!is_array($destinataires)) {
|
|
$destinataires = explode(',', $destinataires);
|
|
}
|
|
$pour = array();
|
|
foreach ($destinataires as $dest) {
|
|
if (is_numeric($dest)) {
|
|
if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
|
|
$pour[] = $mail;
|
|
}
|
|
}
|
|
elseif (email_valide($dest)) {
|
|
$pour[] = $dest;
|
|
}
|
|
}
|
|
|
|
$non_vide = function ($elem) {
|
|
return ($elem != NULL AND $elem != '');
|
|
};
|
|
$cc = array_filter(explode(',', lire_config('gamumail/mail_cc')), $non_vide);
|
|
$cci = array_filter(explode(',', lire_config('gamumail/mail_cci')), $non_vide);
|
|
|
|
// si on a plusieurs destinataires et $options['cci' => true] les passer en cci et mettre le compte expéditeur du site en to
|
|
if (count($pour) > 1 AND isset($options['cci']) AND $options['cci']) {
|
|
$cci = array_unique(array_merge($cci, $pour));
|
|
$pour = [lire_config('facteur/adresse_envoi_email',lire_config('email_webmaster'))];
|
|
}
|
|
|
|
// documents joints
|
|
$pieces_jointes = [];
|
|
|
|
// filtrage des id_docs attachés au slug (ici on ne veut que des id_docs valides)
|
|
$Tid_doc = [];
|
|
$id_docs = array_filter(explode(',', $id_docs), 'is_numeric');
|
|
foreach ($id_docs as $doc) {
|
|
if ($res = sql_getfetsel('id_document', 'spip_documents', 'id_document='.$doc)) {
|
|
$Tid_doc[] = $doc;
|
|
}
|
|
}
|
|
// récup des paramètres des fichiers à attacher
|
|
if (!empty($Tid_doc)) {
|
|
foreach ($Tid_doc as $id_document) {
|
|
$Tdocument = sql_fetsel('titre,fichier,extension','spip_documents','id_document='.intval($id_document));
|
|
$destination = _DIR_IMG.$Tdocument['fichier'];
|
|
$extension = $Tdocument['extension'];
|
|
if ($Tdocument['titre']) {
|
|
$nom_fichier = $Tdocument['titre'] .".".$extension;
|
|
}
|
|
else {
|
|
$nom_fichier = basename($Tdocument['fichier']);
|
|
}
|
|
$type_mime = bigup_get_mime_type_extension($extension);
|
|
$pieces_jointes[] = [
|
|
'chemin' => $destination,
|
|
'nom' => $nom_fichier,
|
|
'encodage' => 'base64',
|
|
'mime' => $type_mime
|
|
];
|
|
}
|
|
}
|
|
/*
|
|
// les pdfs
|
|
$Tpdfs_ok = _request('Tpdfs_ok');
|
|
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) {
|
|
$options = $f($options, $auteur, $Tclient, $Tpdf);
|
|
}
|
|
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) {
|
|
$options = $f($options, $auteur, $Tclient, $Tpdf);
|
|
}
|
|
|
|
$Tpdf_dell = [];
|
|
if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) {
|
|
if (array_key_exists('fichier', $Tpdf)) {
|
|
$Tpdf = [$Tpdf];
|
|
}
|
|
|
|
$recup_pdf = charger_fonction('charger_pdf','inc');
|
|
foreach ($Tpdfs_ok as $pdf) {
|
|
foreach ($Tpdf as $p) {
|
|
if ($p['fichier'] === $pdf) {
|
|
$c = $p['contexte'];
|
|
$nom = $p['nom'];
|
|
}
|
|
}
|
|
|
|
$pdf = $recup_pdf($pdf, $c);
|
|
$nom_fichier = $nom.'.pdf';
|
|
$destination = _DIR_TMP.basename($nom_fichier);
|
|
$Tpdf_dell[] = $destination;
|
|
file_put_contents($destination,$pdf);
|
|
$pieces_jointes[] = [
|
|
'chemin' => $destination,
|
|
'nom' => $nom_fichier,
|
|
'encodage' => 'base64',
|
|
'mime' => 'application/pdf'
|
|
];
|
|
}
|
|
}
|
|
*/
|
|
$html_header = '';
|
|
if (find_in_path('gamumail/'.$slug .'_html_header.html')) {
|
|
$html_header = recuperer_fond('gamumail/'.$slug . '_html_header', $options);
|
|
}
|
|
elseif(find_in_path('gamumail/html_header.html')) {
|
|
$html_header = recuperer_fond('gamumail/html_header', $options);
|
|
}
|
|
$html_footer = '';
|
|
if (find_in_path('gamumail/'.$slug . '_html_footer.html')) {
|
|
$html_footer = recuperer_fond('gamumail/'.$slug . '_html_footer', $options);
|
|
}
|
|
elseif (find_in_path('gamumail/html_footer.html')) {
|
|
$html_footer = recuperer_fond('gamumail/html_footer', $options);
|
|
}
|
|
$html = $html_header . $html . $html_footer;
|
|
|
|
// pipeline pour les traitement du contenu des slugs spécifiques de chaque plugins
|
|
$args = $options;
|
|
$args['slug'] = $slug;
|
|
$args['destinataires'] = $destinataires;
|
|
$html = pipeline('remplacements_slug', array(
|
|
'args' => $args,
|
|
'data' => $html
|
|
));
|
|
|
|
$corps = [
|
|
'html' => $html,
|
|
'texte' => $texte,
|
|
'cc' => $cc,
|
|
'cci' => $cci,
|
|
'pieces_jointes' => $pieces_jointes
|
|
];
|
|
/*
|
|
if ($f = charger_fonction('traiter', 'gamumail', true)) {
|
|
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
|
}
|
|
*/
|
|
// appel d'une éventuelle fonction de traitement du contenu spécifique du slug
|
|
if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) {
|
|
$corps = $f($corps, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
|
}
|
|
|
|
// si debug on affiche sans envoyer le mail
|
|
if (isset($options['debug']) AND $options['debug']) {
|
|
echo '<br>slug : '.$slug;
|
|
echo '<br>$options :';
|
|
var_dump($options);
|
|
echo '<br>$pour : ';
|
|
var_dump($pour);
|
|
echo '<br>$sujet : '.$sujet;
|
|
echo '<br>$corps : ';
|
|
var_dump($corps);
|
|
$ok = true;
|
|
}
|
|
else {
|
|
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
|
|
$ok = $envoyer_mail($pour, $sujet, $corps);
|
|
}
|
|
|
|
if (!$ok) {
|
|
spip_log("Erreur d'envoi du mail : ","gamumail");
|
|
spip_log($corps,"gamumail");
|
|
$retour['message_erreur'] = _T("gamumail:erreur_envoi_mail");
|
|
}
|
|
else {
|
|
$retour['message_ok'] = _T('gamumail:mail_envoye');
|
|
}
|
|
/*
|
|
// on supprime les pdfs temporaires
|
|
if (count($Tpdf_dell)) {
|
|
foreach ($Tpdf_dell as $pdf) {
|
|
unlink($pdf);
|
|
}
|
|
}
|
|
|
|
if ($redirect) {
|
|
$retour['redirect'] = $redirect;
|
|
}
|
|
*/
|
|
|
|
return $retour;
|
|
}
|