From bfa30009a9021af2ee87f631be0e758ead0d5b85 Mon Sep 17 00:00:00 2001 From: Jukka Lampikoski Date: Thu, 12 Mar 2026 20:11:31 +0200 Subject: [PATCH] =?UTF-8?q?Integraatiot:=20checkboxit=20vain=20p=C3=A4?= =?UTF-8?q?=C3=A4lle/pois=20Yrityksiss=C3=A4,=20kaikki=20asetukset=20API-t?= =?UTF-8?q?abissa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Yritykset-tab: integraatio-checkboxit tallentavat vain enabled-tilan - API-tab: Zammad/Saatavuus/Telegram kortit näkyvät kun integraatio päällä - Zammad-asetukset (URL, token, ryhmät, synkronointi) kokonaan API-tabissa - integration_save: tyhjä config ei ylikirjoita olemassaolevia asetuksia Co-Authored-By: Claude Opus 4.6 --- api.php | 17 +++++++++++------ script.js | 41 ++++++++--------------------------------- 2 files changed, 19 insertions(+), 39 deletions(-) diff --git a/api.php b/api.php index d34b6aa..951ab74 100644 --- a/api.php +++ b/api.php @@ -4990,14 +4990,19 @@ switch ($action) { $input = json_decode(file_get_contents('php://input'), true); $type = $input['type'] ?? ''; $enabled = (bool)($input['enabled'] ?? false); - $config = $input['config'] ?? []; + $config = $input['config'] ?? null; if (!$type) { http_response_code(400); echo json_encode(['error' => 'Tyyppi puuttuu']); break; } - // Jos token on maskattua (********), säilytä vanha - if (isset($config['token']) && preg_match('/^\*+$/', $config['token'])) { - $old = dbGetIntegration($companyId, $type); - if ($old && isset($old['config']['token'])) { - $config['token'] = $old['config']['token']; + // Jos config ei lähetetty tai on tyhjä, säilytä vanha config (toggle ei ylikirjoita asetuksia) + $old = dbGetIntegration($companyId, $type); + if ($config === null || (is_array($config) && empty($config))) { + $config = ($old && isset($old['config'])) ? (is_string($old['config']) ? json_decode($old['config'], true) : $old['config']) : []; + } else { + // Jos token on maskattua (********), säilytä vanha + if (isset($config['token']) && preg_match('/^\*+$/', $config['token'])) { + if ($old && isset($old['config']['token'])) { + $config['token'] = is_string($old['config']) ? json_decode($old['config'], true)['token'] : $old['config']['token']; + } } } diff --git a/script.js b/script.js index 67938bf..c70b65e 100644 --- a/script.js +++ b/script.js @@ -2623,42 +2623,15 @@ async function showCompanyDetail(id) { async function loadCompanyIntegrations() { try { const integrations = await apiCall('integrations'); - - // Aseta kaikkien integraatioiden checkboxit + // Aseta vain checkboxit — konfiguraatio ladataan API-tabissa ['zammad', 'saatavuus_api', 'telegram'].forEach(type => { const integ = integrations.find(i => i.type === type); const cb = document.querySelector(`#integrations-checkboxes input[data-integration="${type}"]`); if (cb) cb.checked = integ?.enabled || false; }); - - // Zammad-config näkyvyys - const zammad = integrations.find(i => i.type === 'zammad'); - toggleCompanyZammadConfig(zammad?.enabled || false); - - // Zammad-asetukset - if (zammad?.config) { - document.getElementById('company-zammad-url').value = zammad.config.url || ''; - document.getElementById('company-zammad-token').value = zammad.config.token || ''; - if (zammad.config.group_ids && zammad.config.group_names) { - renderCompanyZammadGroups( - zammad.config.group_names.map((name, i) => ({ id: zammad.config.group_ids[i], name })), - zammad.config.group_ids - ); - } - } else { - document.getElementById('company-zammad-url').value = ''; - document.getElementById('company-zammad-token').value = ''; - document.getElementById('company-zammad-groups').innerHTML = 'Tallenna ensin, sitten valitse ryhmät.'; - } } catch (e) { console.error('loadCompanyIntegrations:', e); } } -function toggleCompanyZammadConfig(show) { - // Zammad-kortti on nyt API-tabissa - const card = document.getElementById('settings-zammad-card'); - if (card) card.style.display = show ? '' : 'none'; -} - function renderCompanyZammadGroups(groups, selectedIds = []) { const container = document.getElementById('company-zammad-groups'); if (!groups.length) { container.innerHTML = 'Ei ryhmiä.'; return; } @@ -2673,7 +2646,6 @@ function renderCompanyZammadGroups(groups, selectedIds = []) { async function saveCompanyZammad() { const url = document.getElementById('company-zammad-url').value.trim(); const token = document.getElementById('company-zammad-token').value.trim(); - const enabled = document.querySelector('#integrations-checkboxes input[data-integration="zammad"]')?.checked || false; const groupCbs = document.querySelectorAll('.company-zammad-group-cb:checked'); const groupIds = Array.from(groupCbs).map(cb => cb.value); @@ -2681,7 +2653,7 @@ async function saveCompanyZammad() { await apiCall('integration_save', 'POST', { type: 'zammad', - enabled, + enabled: true, // Jos ollaan API-tabissa säätämässä, integraatio on päällä config: { url, token, group_ids: groupIds, group_names: groupNames }, }); } @@ -2691,10 +2663,13 @@ async function saveSimpleIntegration(type, enabled) { await apiCall('integration_save', 'POST', { type, enabled, config: {} }); } -// Zammad checkbox toggle +// Zammad checkbox toggle (vain enabled päälle/pois, asetukset API-tabissa) document.querySelector('#integrations-checkboxes input[data-integration="zammad"]')?.addEventListener('change', async function() { - toggleCompanyZammadConfig(this.checked); - try { await saveCompanyZammad(); } catch (e) { console.error(e); } + try { + await saveSimpleIntegration('zammad', this.checked); + const card = document.getElementById('settings-zammad-card'); + if (card) card.style.display = this.checked ? '' : 'none'; + } catch (e) { console.error(e); } }); // Saatavuus-API checkbox toggle