mahnung/ajax/sendmail.php
Eduard Wisch 10cf41a687
All checks were successful
Deploy mahnung / deploy (push) Successful in 14s
i18n: Alle Texte über $langs->trans() — ~100 neue Sprachschlüssel de_DE + en_US [deploy]
Umlaute in allen lang-Dateien korrigiert. Alle hardcodierten deutschen Strings
in 22 PHP-Dateien durch $langs->trans('Key') ersetzt. Neue Schlüssel für
Cron-Meldungen, Dokument-Aktionen, Bonität, Vorschlag-Status, Template-Vars u.a.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-13 16:25:50 +02:00

149 lines
4.1 KiB
PHP

<?php
/* Copyright (C) 2026 Eduard Wisch <data@data-it-solution.de>
*
* 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');
}
}