* * GPL v3 (siehe COPYING). */ /** * \file htdocs/custom/mahnung/ajax/sendmail.php * \ingroup mahnung * \brief AJAX-Endpoint: Mahnung per E-Mail an Kunde senden. * * POST: * mahnung_id ID des Mahnvorgangs (PDF muss existieren) * token CSRF * * Response: JSON {success, message} */ if (!defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); if (!defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); ob_start(); require_once $_SERVER['DOCUMENT_ROOT'].'/main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/custom/mahnung/class/mahnung.class.php'; require_once DOL_DOCUMENT_ROOT.'/custom/mahnung/class/mahnungstufe.class.php'; global $db, $user, $langs, $conf, $mysoc; $langs->loadLangs(array('mahnung@mahnung')); /** * @param bool $success * @param string $message */ function jsonExit($success, $message) { while (ob_get_level() > 0) { ob_end_clean(); } header('Content-Type: application/json; charset=utf-8'); echo json_encode(array('success' => (bool) $success, 'message' => $message)); exit; } // CSRF $postedToken = GETPOST('token', 'alphanohtml'); if (empty($postedToken) || empty($_SESSION['newtoken']) || $postedToken !== $_SESSION['newtoken']) { jsonExit(false, $langs->trans('MahnungCsrfTokenUngueltig')); } if (!$user->hasRight('mahnung', 'send')) { jsonExit(false, $langs->trans('MahnungNichtBerechtigtSend')); } $mahnungId = GETPOSTINT('mahnung_id'); if ($mahnungId <= 0) { jsonExit(false, $langs->trans('MahnungIdFehlt')); } $mahnung = new Mahnung($db); if ($mahnung->fetch($mahnungId) <= 0) { jsonExit(false, $langs->trans('MahnungNichtGefunden', $mahnungId)); } if (empty($mahnung->pdf_path) || !file_exists($mahnung->pdf_path)) { jsonExit(false, $langs->trans('MahnungPdfFehlt', $mahnung->ref)); } $societe = new Societe($db); if ($societe->fetch((int) $mahnung->fk_soc) <= 0) { jsonExit(false, $langs->trans('MahnungKundeNichtLadbar')); } $toEmail = trim((string) ($societe->email ?? '')); if (empty($toEmail)) { jsonExit(false, $langs->trans('MahnungKundeKeineEmail')); } $facture = new Facture($db); $facture->fetch((int) $mahnung->fk_facture); $stufeObj = new MahnungStufe($db); $stufeObj->fetchByStufe((int) $mahnung->stufe); $replacements = array( '{ref}' => $mahnung->ref, '{stufe}' => (string) (int) $mahnung->stufe, '{summe}' => price((float) $mahnung->summe_mahnung).' EUR', '{rechnung}' => $facture->ref ?? '', '{frist}' => dol_print_date($mahnung->date_lim_reglement_neu, 'day'), '{kunde}' => $societe->name ?? '', ); $subject = strtr($stufeObj->email_subject ?: $langs->trans('MahnungEmailDefaultSubject'), $replacements); $body = strtr($stufeObj->email_body ?: defaultMailBody((int) $mahnung->stufe), $replacements); $fromEmail = $mysoc->email ?? getDolGlobalString('MAIN_MAIL_EMAIL_FROM'); $fromName = $mysoc->name ?? ''; $from = !empty($fromName) ? $fromName.' <'.$fromEmail.'>' : $fromEmail; $attachments = array($mahnung->pdf_path); $mimes = array('application/pdf'); $names = array(basename($mahnung->pdf_path)); $mailFile = new CMailFile( $subject, $toEmail, $from, $body, $attachments, $mimes, $names, '', '', 0, 1 ); if (!$mailFile->error) { if ($mailFile->sendfile()) { $mahnung->status = Mahnung::STATUS_VERSENDET; $mahnung->update($user); jsonExit(true, $langs->trans('MahnungEmailGesendet', $toEmail)); } } jsonExit(false, $langs->trans('MahnungEmailFehlgeschlagen', $mailFile->error)); /** * Default-Body je Stufe. * * @param int $stufe * @return string */ function defaultMailBody($stufe) { global $langs; $langs->load('mahnung@mahnung'); switch ((int) $stufe) { case 1: return $langs->trans('MahnungEmailDefaultBody1'); case 2: return $langs->trans('MahnungEmailDefaultBody2'); case 3: default: return $langs->trans('MahnungEmailDefaultBody3'); } }