Lisää oletusallekirjoitus kaikille käyttäjille

Jos käyttäjä ei ole asettanut omaa allekirjoitusta mailboxille,
generoidaan automaattisesti oletus:
  Etunimi
  Yrityksen nimi
  Postilaatikon sähköpostiosoite

Toimii sekä esikatselu-previewssä että sähköpostin lähetyksessä.
Käyttäjä voi yliajaa oletuksen tallentamalla oman allekirjoituksen
profiilin kautta.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 23:21:35 +02:00
parent 2da63262a7
commit 5ea01ce7b3

34
api.php
View File

@@ -568,6 +568,31 @@ function sendTelegramAlert(string $companyId, array $ticket): void {
curl_close($ch);
}
/**
* Generoi oletusallekirjoitukset käyttäjälle niille mailboxeille joille ei ole omaa.
* Palauttaa yhdistetyn allekirjoitukset-arrayn (omat + generoitut oletukset).
*/
function buildSignaturesWithDefaults(array $user, array $userCompanyIds): array {
$sigs = $user['signatures'] ?? [];
$allCompanies = dbLoadCompanies();
foreach ($allCompanies as $comp) {
if (!in_array($comp['id'], $userCompanyIds)) continue;
$mailboxes = dbLoadMailboxes($comp['id']);
foreach ($mailboxes as $mb) {
if (!empty($sigs[$mb['id']])) continue; // käyttäjällä on jo oma allekirjoitus
// Generoi oletus: Etunimi \n Yritys \n sähköposti
$etunimi = trim(explode(' ', $user['nimi'] ?? '')[0]);
$yritys = $comp['nimi'] ?? '';
$email = $mb['smtp_from_email'] ?? $mb['imap_user'] ?? '';
$parts = array_filter([$etunimi, $yritys, $email]);
if (!empty($parts)) {
$sigs[$mb['id']] = implode("\n", $parts);
}
}
}
return $sigs;
}
function sendTicketMail(string $to, string $subject, string $body, string $inReplyTo = '', string $references = '', ?array $mailbox = null, string $cc = ''): bool {
$fromEmail = $mailbox['smtp_from_email'] ?? $mailbox['imap_user'] ?? MAIL_FROM;
$fromName = $mailbox['smtp_from_name'] ?? $mailbox['nimi'] ?? 'Asiakaspalvelu';
@@ -1059,7 +1084,7 @@ switch ($action) {
'role' => $u['role'],
'companies' => $companyList,
'company_id' => $_SESSION['company_id'],
'signatures' => $u['signatures'] ?? [],
'signatures' => buildSignaturesWithDefaults($u, $u['companies'] ?? []),
]);
} else {
dbRecordLoginAttempt($ip);
@@ -1093,8 +1118,8 @@ switch ($action) {
$companyList[] = ['id' => $comp['id'], 'nimi' => $comp['nimi']];
}
}
// Hae allekirjoitukset
$userSignatures = $u ? ($u['signatures'] ?? []) : [];
// Hae allekirjoitukset (oletus generoituna jos omaa ei ole)
$userSignatures = $u ? buildSignaturesWithDefaults($u, $u['companies'] ?? []) : [];
// Brändäystiedot domain-pohjaisesti (sama kuin branding-endpoint)
$host = strtolower(explode(':', $_SERVER['HTTP_HOST'] ?? '')[0]);
$branding = dbGetBranding($host);
@@ -2235,7 +2260,8 @@ switch ($action) {
if (!$noSignature) {
$sigUser = dbGetUser($_SESSION['user_id']);
if ($sigUser) {
$signature = trim($sigUser['signatures'][$mailboxId] ?? '');
$allSigs = buildSignaturesWithDefaults($sigUser, $sigUser['companies'] ?? []);
$signature = trim($allSigs[$mailboxId] ?? '');
}
}
$emailBody = $signature ? $body . "\n\n-- \n" . $signature : $body;