From 41f414db5caae6536f7cea9fef92222b9b186669 Mon Sep 17 00:00:00 2001 From: solocla Date: Wed, 13 May 2026 14:58:13 +0200 Subject: [PATCH] 2 main --- .../userarea/mapping_template_xls_scheme2.php | 57 +++++++++++-------- public/userarea/update_main_field.php | 54 ++++++++++++++---- 2 files changed, 74 insertions(+), 37 deletions(-) diff --git a/public/userarea/mapping_template_xls_scheme2.php b/public/userarea/mapping_template_xls_scheme2.php index 028e9b1..544aed2 100644 --- a/public/userarea/mapping_template_xls_scheme2.php +++ b/public/userarea/mapping_template_xls_scheme2.php @@ -1445,6 +1445,7 @@ $apiSampleJson = $template['api_sample_json'] ?? ''; document.getElementById('updateSchemaButton').addEventListener('click', updateSchemaDetails); document.getElementById('schemaFieldsBody').addEventListener('change', function(event) { + if (event.target.classList.contains('mapping-select')) { let tr = event.target.closest('tr'); let mappingId = event.target.getAttribute('data-id'); @@ -1560,19 +1561,22 @@ $apiSampleJson = $template['api_sample_json'] ?? ''; if (sourceType === 'XLS') updateXlsDropdowns(); if (sourceType === 'API') updateJsonDropdowns(); - } else if (event.target.classList.contains('main-field-checkbox')) { + return; + } + + if (event.target.classList.contains('main-field-checkbox')) { const checkbox = event.target; const mappingId = checkbox.dataset.mappingId; const value = checkbox.checked ? 1 : 0; - // Se checked, deseleziona tutti gli altri visivamente - if (checkbox.checked) { - document.querySelectorAll('.main-field-checkbox').forEach(cb => { - if (cb !== checkbox) cb.checked = false; - }); + const checkedMainFields = document.querySelectorAll('.main-field-checkbox:checked'); + + if (checkedMainFields.length > 2) { + checkbox.checked = false; + alert('Puoi selezionare al massimo 2 campi Main.'); + return; } - // Salva l'aggiornamento fetch('update_main_field.php', { method: 'POST', headers: { @@ -1583,36 +1587,43 @@ $apiSampleJson = $template['api_sample_json'] ?? ''; mapping_id: mappingId, value: value }) - }).then(response => response.json()) + }) + .then(response => response.json()) .then(data => { if (!data.success) { console.error("❌ Error updating main_field:", data.message); - checkbox.checked = !checkbox.checked; + document.querySelectorAll('.main-field-checkbox').forEach(cb => { cb.checked = cb.dataset.originalChecked === 'true'; }); - } else { - document.querySelectorAll('.main-field-checkbox').forEach(cb => { - cb.dataset.originalChecked = cb.checked; - }); + + alert(data.message || 'Errore durante il salvataggio del campo Main.'); + return; } + + document.querySelectorAll('.main-field-checkbox').forEach(cb => { + cb.dataset.originalChecked = cb.checked ? 'true' : 'false'; + }); }) .catch(error => { console.error("❌ Fetch error:", error); - checkbox.checked = !checkbox.checked; + document.querySelectorAll('.main-field-checkbox').forEach(cb => { cb.checked = cb.dataset.originalChecked === 'true'; }); + + alert('Errore di comunicazione durante il salvataggio del campo Main.'); }); - } else if (event.target.classList.contains('visible-parts-checkbox')) { + + return; + } + + if (event.target.classList.contains('visible-parts-checkbox')) { const checkbox = event.target; const mappingId = checkbox.dataset.mappingId; const value = checkbox.checked ? 1 : 0; - - // salva stato per rollback const prevChecked = checkbox.checked; - // ✅ UI: se sto mettendo a 1, tolgo la spunta a tutti gli altri SUBITO if (value === 1) { document.querySelectorAll('.visible-parts-checkbox').forEach(cb => { if (cb !== checkbox) cb.checked = false; @@ -1634,26 +1645,22 @@ $apiSampleJson = $template['api_sample_json'] ?? ''; .then(data => { if (!data.success) { console.error("❌ Error updating is_visible_parts:", data.message); - - // rollback UI checkbox.checked = !prevChecked; - - // se avevo tolto le spunte agli altri, ricarico per riallineare la UI al DB - // (semplice e safe) location.reload(); } }) .catch(error => { console.error("❌ Fetch error:", error); - - // rollback UI checkbox.checked = !prevChecked; location.reload(); }); + + return; } }); + // Salva lo stato originale dei checkbox al caricamento document.querySelectorAll('.main-field-checkbox').forEach(cb => { cb.dataset.originalChecked = cb.checked; diff --git a/public/userarea/update_main_field.php b/public/userarea/update_main_field.php index 6500480..127d6d2 100644 --- a/public/userarea/update_main_field.php +++ b/public/userarea/update_main_field.php @@ -3,14 +3,16 @@ ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); -include('include/headscript.php'); // Assumi che questo includa la connessione DB +include('include/headscript.php'); -// Recupera il payload JSON +header('Content-Type: application/json'); + +// Read JSON payload $data = json_decode(file_get_contents('php://input'), true); -$template_id = intval($data['template_id']); -$mapping_id = intval($data['mapping_id']); -$value = intval($data['value']); +$template_id = intval($data['template_id'] ?? 0); +$mapping_id = intval($data['mapping_id'] ?? 0); +$value = intval($data['value'] ?? 0); if ($template_id <= 0 || $mapping_id <= 0) { echo json_encode(['success' => false, 'message' => 'Invalid IDs']); @@ -23,19 +25,47 @@ $pdo = $db->getConnection(); try { $pdo->beginTransaction(); + // If user is trying to activate a Main field, check current number of active Main fields if ($value === 1) { - // Setta tutti main_field a 0 per questo template - $stmt = $pdo->prepare("UPDATE template_mapping SET main_field = 0 WHERE template_id = ?"); - $stmt->execute([$template_id]); + $stmt = $pdo->prepare(" + SELECT COUNT(*) + FROM template_mapping + WHERE template_id = ? + AND main_field = 1 + AND id <> ? + "); + $stmt->execute([$template_id, $mapping_id]); + $currentMainCount = (int)$stmt->fetchColumn(); + + if ($currentMainCount >= 2) { + $pdo->rollBack(); + echo json_encode([ + 'success' => false, + 'message' => 'Maximum 2 Main fields allowed' + ]); + exit; + } } - // Setta il valore per questo mapping - $stmt = $pdo->prepare("UPDATE template_mapping SET main_field = ? WHERE id = ? AND template_id = ?"); + // Update only this mapping + $stmt = $pdo->prepare(" + UPDATE template_mapping + SET main_field = ? + WHERE id = ? + AND template_id = ? + "); $stmt->execute([$value, $mapping_id, $template_id]); $pdo->commit(); + echo json_encode(['success' => true]); } catch (Exception $e) { - $pdo->rollBack(); - echo json_encode(['success' => false, 'message' => $e->getMessage()]); + if ($pdo->inTransaction()) { + $pdo->rollBack(); + } + + echo json_encode([ + 'success' => false, + 'message' => $e->getMessage() + ]); }