Lisää puhelinnumero yrityksen asetuksiin ja allekirjoituksiin

Puhelinnumero-kenttä yrityksen asetuksissa tallennetaan tietokantaan
ja näkyy automaattisesti kaikissa oletusallekirjoituksissa viimeisenä
rivinä (sekä SMTP- että Zammad-postilaatikoille).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 01:30:11 +02:00
parent a105ec7cd9
commit 7a20345701
4 changed files with 26 additions and 14 deletions

View File

@@ -1499,7 +1499,7 @@ switch ($action) {
foreach ($allCompanies as $comp) {
// Superadmin näkee kaikki yritykset
if ($u['role'] === 'superadmin' || in_array($comp['id'], $userCompanies)) {
$entry = ['id' => $comp['id'], 'nimi' => $comp['nimi']];
$entry = ['id' => $comp['id'], 'nimi' => $comp['nimi'], 'phone' => $comp['phone'] ?? ''];
// Merkitse IP-estetyt yritykset (superadmin ohittaa)
if ($u['role'] !== 'superadmin' && !isIpAllowed($ip, $comp['allowed_ips'] ?? '')) {
$entry['ip_blocked'] = true;
@@ -1559,7 +1559,7 @@ switch ($action) {
foreach ($allCompanies as $comp) {
// Superadmin näkee kaikki yritykset
if ($isSuperAdmin || in_array($comp['id'], $userCompanyIds)) {
$entry = ['id' => $comp['id'], 'nimi' => $comp['nimi']];
$entry = ['id' => $comp['id'], 'nimi' => $comp['nimi'], 'phone' => $comp['phone'] ?? ''];
if (!$isSuperAdmin && !isIpAllowed($ip, $comp['allowed_ips'] ?? '')) {
$entry['ip_blocked'] = true;
} else {
@@ -3922,6 +3922,7 @@ switch ($action) {
'smtp_from_email' => $mb['smtp_from_email'] ?? $mb['imap_user'] ?? '',
'company_id' => $comp['id'],
'company_nimi' => $comp['nimi'],
'company_phone' => $comp['phone'] ?? '',
];
}
}
@@ -4029,6 +4030,7 @@ switch ($action) {
}
if (isset($input['primary_color'])) $c['primary_color'] = trim($input['primary_color']);
if (isset($input['subtitle'])) $c['subtitle'] = trim($input['subtitle']);
if (isset($input['phone'])) $c['phone'] = trim($input['phone']);
if (isset($input['enabled_modules']) && is_array($input['enabled_modules'])) {
$c['enabled_modules'] = array_values($input['enabled_modules']);
}

7
db.php
View File

@@ -768,11 +768,11 @@ function dbSaveCompany(array $company): void {
$enabledModules = $company['enabled_modules'] ?? [];
$enabledModulesJson = is_array($enabledModules) ? json_encode($enabledModules) : ($enabledModules ?: '');
_dbExecute("
INSERT INTO companies (id, nimi, luotu, aktiivinen, primary_color, subtitle, logo_file, api_key, cors_origins, enabled_modules, allowed_ips)
VALUES (:id, :nimi, :luotu, :aktiivinen, :primary_color, :subtitle, :logo_file, :api_key, :cors_origins, :enabled_modules, :allowed_ips)
INSERT INTO companies (id, nimi, luotu, aktiivinen, primary_color, subtitle, phone, logo_file, api_key, cors_origins, enabled_modules, allowed_ips)
VALUES (:id, :nimi, :luotu, :aktiivinen, :primary_color, :subtitle, :phone, :logo_file, :api_key, :cors_origins, :enabled_modules, :allowed_ips)
ON DUPLICATE KEY UPDATE
nimi = VALUES(nimi), aktiivinen = VALUES(aktiivinen),
primary_color = VALUES(primary_color), subtitle = VALUES(subtitle),
primary_color = VALUES(primary_color), subtitle = VALUES(subtitle), phone = VALUES(phone),
logo_file = VALUES(logo_file), api_key = VALUES(api_key), cors_origins = VALUES(cors_origins),
enabled_modules = VALUES(enabled_modules), allowed_ips = VALUES(allowed_ips)
", [
@@ -782,6 +782,7 @@ function dbSaveCompany(array $company): void {
'aktiivinen' => $company['aktiivinen'] ?? true,
'primary_color' => $company['primary_color'] ?? '#0f3460',
'subtitle' => $company['subtitle'] ?? '',
'phone' => $company['phone'] ?? '',
'logo_file' => $company['logo_file'] ?? '',
'api_key' => $company['api_key'] ?? '',
'cors_origins' => $company['cors_origins'] ?? '',

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Noxus HUB</title>
<link rel="stylesheet" href="style.css?v=20260313e">
<link rel="stylesheet" href="style.css?v=20260313f">
</head>
<body>
<!-- Login -->
@@ -1615,6 +1615,10 @@
<label>Alaotsikko</label>
<input type="text" id="company-edit-subtitle" placeholder="esim. Asiakashallinta">
</div>
<div class="form-group">
<label>Puhelinnumero</label>
<input type="text" id="company-edit-phone" placeholder="esim. 020 778 0730">
</div>
<div class="form-group">
<label>Pääväri</label>
<div style="display:flex;align-items:center;gap:0.5rem;">
@@ -2229,6 +2233,6 @@
</div>
</div>
<script src="script.js?v=20260313e"></script>
<script src="script.js?v=20260313f"></script>
</body>
</html>

View File

@@ -2392,15 +2392,17 @@ async function initTicketSettings() {
return;
}
// Oletusallekirjoitus: Käyttäjänimi + Yritys + sähköposti
// Oletusallekirjoitus: Käyttäjänimi + Yritys + sähköposti + puhelin (jos asetettu)
const userName = currentUser?.nimi || currentUser?.username || '';
function defaultSig(companyName, email) {
return userName + '\n' + companyName + '\n' + email;
function defaultSig(companyName, email, phone) {
let sig = userName + '\n' + companyName + '\n' + email;
if (phone) sig += '\n' + phone;
return sig;
}
// Allekirjoitukset per postilaatikko
let sigHtml = mailboxes.map(mb => {
const sig = currentUserSignatures[mb.id] || defaultSig(mb.company_nimi, mb.smtp_from_email);
const sig = currentUserSignatures[mb.id] || defaultSig(mb.company_nimi, mb.smtp_from_email, mb.company_phone);
return `<div style="margin-bottom:0.75rem;">
<label style="font-weight:600;font-size:0.85rem;color:#333;">${esc(mb.company_nimi)}${esc(mb.nimi)}</label>
<textarea class="ticket-sig-textarea" data-mailbox-id="${mb.id}" rows="3"
@@ -2415,9 +2417,10 @@ async function initTicketSettings() {
if (zammadEmails.length > 0) {
sigHtml += '<div style="margin-top:0.75rem;padding-top:0.75rem;border-top:1px solid #eee;"><strong style="font-size:0.85rem;color:#666;">Zammad-sähköpostit</strong></div>';
const companyName = currentCompany?.nimi || '';
const companyPhone = currentCompany?.phone || '';
zammadEmails.forEach(email => {
const key = 'zammad:' + email;
const sig = currentUserSignatures[key] || defaultSig(companyName, email);
const sig = currentUserSignatures[key] || defaultSig(companyName, email, companyPhone);
sigHtml += `<div style="margin-bottom:0.75rem;">
<label style="font-weight:600;font-size:0.85rem;color:#333;">${esc(email)} <span style="color:#888;font-size:0.8rem;">(Zammad)</span></label>
<textarea class="ticket-sig-textarea" data-mailbox-id="${esc(key)}" rows="3"
@@ -2748,6 +2751,7 @@ async function showCompanyDetail(id) {
document.getElementById('company-edit-nimi').value = comp ? comp.nimi : '';
// Brändäyskentät
document.getElementById('company-edit-subtitle').value = comp?.subtitle || '';
document.getElementById('company-edit-phone').value = comp?.phone || '';
const color = comp?.primary_color || '#0f3460';
document.getElementById('company-edit-color').value = color;
document.getElementById('company-edit-color-text').value = color;
@@ -3027,6 +3031,7 @@ document.getElementById('btn-save-company-settings').addEventListener('click', a
const nimi = document.getElementById('company-edit-nimi').value.trim();
if (!nimi) return;
const subtitle = document.getElementById('company-edit-subtitle').value.trim();
const phone = document.getElementById('company-edit-phone').value.trim();
const primary_color = document.getElementById('company-edit-color').value;
const domainsText = document.getElementById('company-edit-domains').value;
const domains = domainsText.split('\n').map(d => d.trim()).filter(d => d);
@@ -3037,11 +3042,11 @@ document.getElementById('btn-save-company-settings').addEventListener('click', a
});
const allowed_ips = document.getElementById('company-edit-allowed-ips').value.trim();
try {
await apiCall('company_update', 'POST', { id: currentCompanyDetail, nimi, subtitle, primary_color, domains, enabled_modules, allowed_ips });
await apiCall('company_update', 'POST', { id: currentCompanyDetail, nimi, subtitle, phone, primary_color, domains, enabled_modules, allowed_ips });
alert('Asetukset tallennettu!');
// Päivitä paikalliset tiedot
const comp = companiesTabData.find(c => c.id === currentCompanyDetail);
if (comp) { comp.nimi = nimi; comp.subtitle = subtitle; comp.primary_color = primary_color; comp.domains = domains; comp.enabled_modules = enabled_modules; comp.allowed_ips = allowed_ips; }
if (comp) { comp.nimi = nimi; comp.subtitle = subtitle; comp.phone = phone; comp.primary_color = primary_color; comp.domains = domains; comp.enabled_modules = enabled_modules; comp.allowed_ips = allowed_ips; }
const avail = availableCompanies.find(c => c.id === currentCompanyDetail);
if (avail) avail.nimi = nimi;
populateCompanySelector();