getConnection(); // Genera un UUID univoco per importreferencecode $importReferenceCode = date('YmdHis') . '-' . uniqid(); // Recupera il mapping per il template $stmt = $pdo->prepare("SELECT excel_column, mysql_column, data_type, is_required, default_value FROM excel_column_mappings WHERE template_id = ?"); $stmt->execute([$template_id]); $mappings = $stmt->fetchAll(PDO::FETCH_ASSOC); if (empty($mappings)) { header("Location: import_xls.php?id=$template_id&status=error&message=" . urlencode("Nessun mapping trovato per il template")); exit; } // Recupera il client_specific_fields dal template $stmt = $pdo->prepare("SELECT client_specific_fields FROM excel_templates WHERE id = ?"); $stmt->execute([$template_id]); $template = $stmt->fetch(PDO::FETCH_ASSOC); $clientSpecificFields = $template && !empty($template['client_specific_fields']) ? json_decode($template['client_specific_fields'], true) : []; // Crea un array per il mapping $columnMapping = []; foreach ($mappings as $mapping) { $excelColumnIndex = array_search($mapping['excel_column'], $columns); if ($excelColumnIndex !== false) { $columnMapping[$excelColumnIndex] = [ 'mysql_column' => $mapping['mysql_column'], 'data_type' => $mapping['data_type'], 'is_required' => $mapping['is_required'], 'default_value' => $mapping['default_value'] ]; } } // Inserisci le righe selezionate in datadb $insertedIds = []; foreach ($selected_rows as $rowIndex) { $row = $rows[$rowIndex]; $values = []; $placeholders = []; $columnsToInsert = []; foreach ($columnMapping as $excelIndex => $mapping) { $mysqlColumn = $mapping['mysql_column']; $value = $row[$excelIndex] ?? $mapping['default_value']; if ($mapping['is_required'] && (is_null($value) || $value === '')) { $value = $mapping['default_value']; 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['default_value'] ?? null); break; case 'DATE': $value = !empty($value) ? date('Y-m-d', strtotime($value)) : ($mapping['default_value'] ?? null); break; case 'CHAR': $value = !empty($value) ? substr($value, 0, 1) : ($mapping['default_value'] ?? null); break; case 'VARCHAR': default: $value = !empty($value) ? htmlspecialchars($value) : ($mapping['default_value'] ?? null); break; } if (!is_null($value)) { $columnsToInsert[] = $mysqlColumn; $placeholders[] = '?'; $values[] = $value; } } $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); $insertedIds[] = $pdo->lastInsertId(); } // 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 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']; } ?>