'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] * @param array $Tpdf = un ou plusieurs fichiers PDF générés par spiPDF (le contexte permet la personnalisation du contenu) * []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] * @param string $redirect * @param array $options = un gros fourre-tout sous forme d'un array * utilisé en particulier par les inclure HTML de gamumail/#SLUG_soustexte et gamumail/#SLUG_fichiers * * @return array $valeurs * */ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){ $Tmails = []; if (!is_array($destinataires)) { $destinataires = explode(',', $destinataires); } foreach ($destinataires as $dest) { if (is_numeric($dest)) { if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) { $Tmails[] = $mail; } } elseif (email_valide($dest)) { $Tmails[] = $dest; } } if (is_array($Tclient) and count($Tclient)) { if (array_key_exists('objet', $Tclient)) { $Tclient = [$Tclient]; } foreach ($Tclient as $o) { $table = table_objet_sql($o['objet']); $id = id_table_objet($o['objet']); $mail = sql_getfetsel("{$o['champ']}", $table, "$id=".intval($o['id_objet'])); if (email_valide($mail)) { $Tmails[] = $mail; } } } $TFichierPdf = []; if (is_array($Tpdf) and count($Tpdf)) { if (array_key_exists('fichier', $Tpdf)) { $Tpdf = [$Tpdf]; } foreach ($Tpdf as $pdf) { $TFichierPdf[] = $pdf['fichier']; } } $gamuMail = sql_fetsel('sujet, texte, id_docs', 'spip_gamumails', 'slug='.sql_quote($slug)); $valeurs = array( "slug" => $slug, 'sujet' => $gamuMail['sujet'], 'texte' => $gamuMail['texte'], 'pour' => implode(',', $Tmails), 'cc' => lire_config('gamumail/mail_cc'), 'cci' => lire_config('gamumail/mail_cci'), 'TFichierpdfs' => $TFichierPdf, 'Tpdfs_ok' => [], 'docs_spip' => $gamuMail['id_docs'], 'options' => $options ); if ($f = charger_fonction('charger', 'gamumail', true)) { $valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); } if ($f = charger_fonction($slug . '_charger', 'gamumail', true)) { $valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); } return $valeurs; } function formulaires_gamumail_verifier_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{ $erreurs = array(); //champs obligatoire foreach (array ('pour', 'sujet', 'texte') as $obligatoire) { if (!_request($obligatoire)) $erreurs[$obligatoire] = 'Ce champs est obligatoire'; } // le slug est il OK ? if (preg_match('/[^a-zA-Z0-9_\-]/', $slug)) { $erreurs['message_erreur'] = _T("gamumail:erreur_format_slug"); } $res = sql_fetsel('slug', 'spip_gamumails', 'slug = "'.$slug.'"'); if (!$res) { $erreurs['message_erreur'] = _T("gamumail:pas_de_slug"); } // vérif des destinataires $Tid_erreur = $Tmails_erreur = []; $pour = explode(',', _request('pour')); foreach ($pour as $dest) { if (is_numeric($dest)) { if (!$mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) { $Tid_erreur[] = $dest; } } elseif (!email_valide($dest)) { $Tmails_erreur[] = $dest; } } if (count($Tid_erreur)) { $erreurs['pour'] = _T("gamumail:id_destinataires_sans_mails", ['ids_erreur' => join(', ', $Tid_erreur)]).' '; } if (count($Tmails_erreur)) { $erreurs['pour'] .= _T("gamumail:mails_destinataires_en_erreur", ['mails_erreur' => join(', ', $Tmails_erreur)]); } // les id_document attachés sont-ils OK ? $Tid_docs = []; if (_request('docs_spip') != '') { $Tid_docs = explode(',', _request('docs_spip')); } if (count($Tid_docs)) { $Tid_docs_erreurs = []; foreach($Tid_docs as $id_doc) { if (intval($id_doc) != $id_doc OR !sql_getfetsel('id_document', 'spip_documents', 'id_document='.$id_doc)) { $Tid_docs_erreurs[] = $id_doc; } } if (count($Tid_docs_erreurs)) { $erreurs['docs_spip'] = _T("gamumail:id_docs_en_erreur", ['id_docs_erreurs' => join(', ', $Tid_docs_erreurs)]); } } // surcharges if ($f = charger_fonction('verifier', 'gamumail', true)) { $erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); } if ($f = charger_fonction($slug . '_verifier', 'gamumail', true)) { $erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); } return $erreurs; } function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{ include_spip('inc/texte'); include_spip('classes/facteur'); $retour = array(); $pour = _request('pour'); $cc = _request('cc'); $cci = _request('cci'); $sujet = _request('sujet'); $html = propre(_request('texte')); $docs_spip = _request('docs_spip'); $Tpdfs_ok = _request('Tpdfs_ok'); $texte = facteur_mail_html2text($html); $pour = explode(',', $pour); $cc = explode(',', $cc); $cci = explode(',', $cci); $docs_spip = ($docs_spip != '' ? explode(',', $docs_spip) : []); $destinataires = []; foreach ($pour as $dest) { if (is_numeric($dest)) { if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) { $destinataires[] = $mail; } } elseif (email_valide($dest)) { $destinataires[] = $dest; } } $pieces_jointes = []; if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) { $options = $f($options, $destinataires, $Tclient, $Tpdf); } if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) { $options = $f($options, $destinataires, $Tclient, $Tpdf); } // les documents joints if (!empty($docs_spip)) { foreach ($docs_spip 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 $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 plugin $args = $options; $args['slug'] = $slug; $args['destinataires'] = $destinataires; $html = pipeline('remplacements_slug', array( 'args' => $args, 'data' => $html )); $texte = facteur_mail_html2text($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, $destinataires, $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); } $envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $ok = $envoyer_mail($destinataires, $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 AND $redirect != '') { $retour['redirect'] = $redirect; } return $retour; } // report depuis gamumail_roc (pas certain que ça serve encore à qq chose...) function gamumail_supprimer_si_vide($v){ if (!empty($v)) { return $v; } }