getConnection(); // Genera un UUID univoco per importreferencecode $importReferenceCode = date('YmdHis') . '-' . uniqid(); // Recupera tutti i mapping dal template (automatici e manuali) $stmt = $pdo->prepare("SELECT id, field_id, field_id AS excel_column, field_id AS mysql_column, data_type, is_required, manual_default, is_manual, field_label FROM template_mapping WHERE template_id = ?"); $stmt->execute([$template_id]); $allMappings = $stmt->fetchAll(PDO::FETCH_ASSOC); if (empty($allMappings)) { header("Location: import_xls.php?id=$template_id&status=error&message=" . urlencode("Nessun mapping trovato per il template")); exit; } // Separa i mapping automatici (is_manual = 0) da quelli manuali (is_manual = 1) $autoMappings = array_filter($allMappings, fn($m) => !$m['is_manual']); $manualMappings = array_filter($allMappings, fn($m) => $m['is_manual']); // Inserisci le righe selezionate in datadb $insertedIds = []; foreach ($selected_rows as $rowIndex) { $row = $rows[$rowIndex]; $values = []; $placeholders = []; $columnsToInsert = []; // Aggiungi i campi mappati dall'XLS (automatici) foreach ($autoMappings as $mapping) { $excelColumnIndex = array_search(trim($mapping['excel_column']), array_map('trim', $columns)); if ($excelColumnIndex !== false) { $mysqlColumn = $mapping['mysql_column']; $value = $row[$excelColumnIndex] ?? $mapping['manual_default']; if ($mapping['is_required'] && (is_null($value) || $value === '')) { $value = $mapping['manual_default']; if (is_null($value)) { header("Location: import_xls.php?id=$template_id&status=error&message=" . urlencode("Valore richiesto mancante per la colonna $mysqlColumn")); exit; } } switch ($mapping['data_type']) { case 'INT': $value = is_numeric($value) ? (int)$value : ($mapping['manual_default'] ?? 0); break; case 'DATE': $value = !empty($value) ? date('Y-m-d', strtotime($value)) : ($mapping['manual_default'] ?? null); if ($mapping['manual_default'] === 'today' && is_null($value)) { $value = date('Y-m-d'); } break; case 'CHAR': $value = !empty($value) ? substr($value, 0, 1) : ($mapping['manual_default'] ?? ''); break; case 'Testo': case 'VARCHAR': default: $value = !empty($value) ? htmlspecialchars($value) : ($mapping['manual_default'] ?? ''); break; } if (!is_null($value)) { $columnsToInsert[] = $mysqlColumn; $placeholders[] = '?'; $values[] = $value; } } } // Aggiungi i campi generici $columnsToInsert[] = 'importreferencecode'; $placeholders[] = '?'; $values[] = $importReferenceCode; $columnsToInsert[] = 'filename_import'; $placeholders[] = '?'; $values[] = $newFilename; $columnsToInsert[] = 'status'; $placeholders[] = '?'; $values[] = 'i'; $columnsToInsert[] = 'user_id'; $placeholders[] = '?'; $values[] = $user_id; $columnsToInsert[] = 'limscode'; $placeholders[] = '?'; $values[] = null; $columnsToInsert[] = 'importdate'; $placeholders[] = '?'; $values[] = date('Y-m-d'); $sql = "INSERT INTO datadb (" . implode(', ', $columnsToInsert) . ") VALUES (" . implode(', ', $placeholders) . ")"; $stmt = $pdo->prepare($sql); $stmt->execute($values); $iddatadb = $pdo->lastInsertId(); $insertedIds[] = $iddatadb; // Inserisci tutti i campi (automatici e manuali) in import_data_details foreach ($allMappings as $mapping) { $fieldValue = null; if (!$mapping['is_manual']) { // Campi automatici dall'XLS $excelColumn = trim($mapping['excel_column']); $excelColumnIndex = array_search($excelColumn, array_map('trim', $columns)); if ($excelColumnIndex !== false && isset($row[$excelColumnIndex]) && $row[$excelColumnIndex] !== '') { $fieldValue = $row[$excelColumnIndex]; error_log("Found Excel column '$excelColumn' at index $excelColumnIndex, value: " . var_export($fieldValue, true)); } else { $fieldValue = $mapping['manual_default'] ?? ''; error_log("Excel column '$excelColumn' not found or empty, using default: " . var_export($fieldValue, true)); } switch ($mapping['data_type']) { case 'INT': $fieldValue = is_numeric($fieldValue) ? (int)$fieldValue : ($mapping['manual_default'] ?? 0); break; case 'DATE': $fieldValue = !empty($fieldValue) ? date('Y-m-d', strtotime($fieldValue)) : ($mapping['manual_default'] === 'today' ? date('Y-m-d') : ($mapping['manual_default'] ?? '')); break; case 'CHAR': $fieldValue = !empty($fieldValue) ? substr((string)$fieldValue, 0, 1) : ($mapping['manual_default'] ?? ''); break; case 'Testo': case 'VARCHAR': default: $fieldValue = !empty($fieldValue) ? htmlspecialchars((string)$fieldValue) : ($mapping['manual_default'] ?? ''); break; } } else { // Campi manuali $fieldValue = $mapping['manual_default'] ?? ''; if ($mapping['data_type'] === 'DATE' && $mapping['manual_default'] === 'today') { $fieldValue = date('Y-m-d'); } } if ($mapping['is_required'] && (is_null($fieldValue) || $fieldValue === '')) { error_log("Required field missing for mapping ID: " . $mapping['id'] . ", field: " . $mapping['field_label']); } error_log("Inserting into import_data_details - Mapping ID: " . $mapping['id'] . ", Field Value: " . var_export($fieldValue, true) . ", Is Manual: " . $mapping['is_manual'] . ", Excel Column: " . ($mapping['excel_column'] ?? 'N/A') . ", Manual Default: " . ($mapping['manual_default'] ?? 'N/A')); $stmt = $pdo->prepare("INSERT INTO import_data_details (id, mapping_id, field_value) VALUES (?, ?, ?)"); $stmt->execute([$iddatadb, $mapping['id'], $fieldValue]); error_log("Inserted into import_data_details for ID $iddatadb, Mapping ID: " . $mapping['id'] . ", Field Value: " . var_export($fieldValue, true)); } } // Recupera i dati appena inseriti con i nomi degli utenti $stmt = $pdo->prepare(" SELECT d.*, CONCAT(u.first_name, ' ', u.last_name) AS user_name FROM datadb d LEFT JOIN auth_users u ON d.user_id = u.id WHERE d.iddatadb IN (" . implode(',', array_fill(0, count($insertedIds), '?')) . ") "); $stmt->execute($insertedIds); $importedData = $stmt->fetchAll(PDO::FETCH_ASSOC); // Recupera i dettagli manuali da import_data_details $stmt = $pdo->prepare(" SELECT d.id AS detail_id, d.id AS datadb_id, d.mapping_id, d.field_value, m.field_id, m.data_type, m.is_required, m.manual_default FROM import_data_details d JOIN template_mapping m ON d.mapping_id = m.id WHERE d.id IN (" . implode(',', array_fill(0, count($insertedIds), '?')) . ") "); $stmt->execute($insertedIds); $manualDetails = $stmt->fetchAll(PDO::FETCH_ASSOC); // Recupera il mapping globale per mostrare gli slug leggibili $stmt = $pdo->query("SELECT mysql_column_name, user_friendly_slug FROM column_mapping"); $slugMapping = []; foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { $slugMapping[$row['mysql_column_name']] = $row['user_friendly_slug']; } ?>