Lisää sähköpostiallekirjoitus per käyttäjä per postilaatikko

- Allekirjoitukset tallennetaan users.json:iin (signatures-objekti, avaimena mailbox_id)
- Käyttäjälomakkeessa dynaamiset textareat jokaiselle postilaatikolle
- Allekirjoitus liitetään automaattisesti sähköpostivastauksiin (ticket_reply)
- Esikatselu näkyy tikettivastauslomakkeen alla
- Muistiinpanoihin (ticket_note) ei lisätä allekirjoitusta
- Uusi all_mailboxes endpoint palauttaa kaikki käyttäjän postilaatikot
- check_auth ja login palauttavat nyt myös user_id ja signatures

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 13:09:30 +02:00
parent 11e1103eb4
commit 918a5ff120
3 changed files with 125 additions and 5 deletions

67
api.php
View File

@@ -1067,6 +1067,7 @@ switch ($action) {
'role' => $u['role'],
'companies' => $companyList,
'company_id' => $_SESSION['company_id'],
'signatures' => $u['signatures'] ?? [],
]);
$found = true;
break;
@@ -1107,13 +1108,23 @@ switch ($action) {
$companyList[] = ['id' => $comp['id'], 'nimi' => $comp['nimi']];
}
}
// Hae allekirjoitukset
$userSignatures = [];
foreach ($users as $uu) {
if ($uu['id'] === $_SESSION['user_id']) {
$userSignatures = $uu['signatures'] ?? [];
break;
}
}
echo json_encode([
'authenticated' => true,
'user_id' => $_SESSION['user_id'],
'username' => $_SESSION['username'],
'nimi' => $_SESSION['nimi'],
'role' => $_SESSION['role'],
'companies' => $companyList,
'company_id' => $_SESSION['company_id'] ?? '',
'signatures' => $userSignatures,
]);
} else {
echo json_encode(['authenticated' => false]);
@@ -1232,6 +1243,12 @@ switch ($action) {
$allCompanies = loadCompanies();
$validIds = array_column($allCompanies, 'id');
$companies = array_values(array_filter($companies, fn($c) => in_array($c, $validIds)));
$signatures = [];
if (isset($input['signatures']) && is_array($input['signatures'])) {
foreach ($input['signatures'] as $mbId => $sig) {
$signatures[(string)$mbId] = (string)$sig;
}
}
$newUser = [
'id' => generateId(),
'username' => $username,
@@ -1240,6 +1257,7 @@ switch ($action) {
'email' => $email,
'role' => $role,
'companies' => $companies,
'signatures' => $signatures,
'luotu' => date('Y-m-d H:i:s'),
];
$users[] = $newUser;
@@ -1269,6 +1287,13 @@ switch ($action) {
if (!empty($input['password'])) {
$u['password_hash'] = password_hash($input['password'], PASSWORD_DEFAULT);
}
if (isset($input['signatures']) && is_array($input['signatures'])) {
$sigs = [];
foreach ($input['signatures'] as $mbId => $sig) {
$sigs[(string)$mbId] = (string)$sig;
}
$u['signatures'] = $sigs;
}
$found = true;
addLog('user_update', '', '', "Muokkasi käyttäjää: {$u['username']}");
// Päivitä sessio jos muokattiin kirjautunutta käyttäjää
@@ -2022,8 +2047,20 @@ switch ($action) {
$replyMailbox = $companyConf['mailboxes'][0];
}
// Hae käyttäjän allekirjoitus tälle postilaatikolle
$mailboxId = $t['mailbox_id'] ?? '';
$signature = '';
$usersForSig = loadUsers();
foreach ($usersForSig as $sigUser) {
if ($sigUser['id'] === $_SESSION['user_id']) {
$signature = trim($sigUser['signatures'][$mailboxId] ?? '');
break;
}
}
$emailBody = $signature ? $body . "\n\n-- \n" . $signature : $body;
$subject = 'Re: ' . $t['subject'];
$sent = sendTicketMail($t['from_email'], $subject, $body, $lastMsgId, trim($allRefs), $replyMailbox);
$sent = sendTicketMail($t['from_email'], $subject, $emailBody, $lastMsgId, trim($allRefs), $replyMailbox);
if (!$sent) {
http_response_code(500);
@@ -2031,13 +2068,13 @@ switch ($action) {
break 2;
}
// Add reply to ticket
// Add reply to ticket (tallennetaan allekirjoituksen kanssa)
$reply = [
'id' => generateId(),
'type' => 'reply_out',
'from' => currentUser(),
'from_name' => $_SESSION['nimi'] ?? currentUser(),
'body' => $body,
'body' => $emailBody,
'timestamp' => date('Y-m-d H:i:s'),
'message_id' => '',
];
@@ -2399,6 +2436,30 @@ switch ($action) {
echo json_encode(loadCompanies());
break;
case 'all_mailboxes':
requireAuth();
// Palauttaa kaikki postilaatikot käyttäjän yrityksistä (allekirjoituksia varten)
$userCompanyIds = $_SESSION['companies'] ?? [];
$allCompanies = loadCompanies();
$result = [];
foreach ($allCompanies as $comp) {
if (!in_array($comp['id'], $userCompanyIds)) continue;
$oldCompanyId = $_SESSION['company_id'] ?? '';
$_SESSION['company_id'] = $comp['id'];
$conf = loadCompanyConfig();
$_SESSION['company_id'] = $oldCompanyId;
foreach ($conf['mailboxes'] ?? [] as $mb) {
$result[] = [
'id' => $mb['id'],
'nimi' => $mb['nimi'] ?? $mb['imap_user'] ?? '',
'company_id' => $comp['id'],
'company_nimi' => $comp['nimi'],
];
}
}
echo json_encode($result);
break;
case 'company_create':
requireAdmin();
if ($method !== 'POST') break;