array_search('Subject', $header), 'start_date' => array_search('Start Date', $header), 'start_time' => array_search('Start Time', $header), 'end_date' => array_search('End Date', $header), 'end_time' => array_search('End Time', $header), 'all_day' => array_search('All Day Event', $header), 'description' => array_search('Description', $header), 'location' => array_search('Location', $header), 'private' => array_search('Private', $header) ]; // Écrire l'en-tête GitLab fputcsv($output, ['title', 'description', 'labels', 'due_date']); // Compteur d'événements traités $event_count = 0; // Traiter chaque ligne du fichier source while (($data = fgetcsv($input)) !== false) { // S'assurer que la ligne contient au moins un sujet if (!isset($data[$column_indices['subject']]) || empty(trim($data[$column_indices['subject']]))) { continue; // Ignorer les lignes sans sujet } // Extraire les données $title = $data[$column_indices['subject']]; // Préparer la description $description_parts = []; // Ajouter les dates $start_date = $column_indices['start_date'] !== false ? $data[$column_indices['start_date']] : ''; $start_time = $column_indices['start_time'] !== false ? $data[$column_indices['start_time']] : ''; $end_date = $column_indices['end_date'] !== false ? $data[$column_indices['end_date']] : ''; $end_time = $column_indices['end_time'] !== false ? $data[$column_indices['end_time']] : ''; $all_day = $column_indices['all_day'] !== false ? ($data[$column_indices['all_day']] === 'TRUE') : false; // Formater la date et l'heure $date_info = "Date: " . $start_date; if (!$all_day && !empty($start_time)) { $date_info .= " " . $start_time; } if (!empty($end_date) && $end_date !== $start_date) { $date_info .= " - " . $end_date; if (!$all_day && !empty($end_time)) { $date_info .= " " . $end_time; } } elseif (!$all_day && !empty($end_time) && $end_time !== $start_time) { $date_info .= " - " . $end_time; } $description_parts[] = $date_info; // Ajouter le lieu if ($column_indices['location'] !== false && !empty($data[$column_indices['location']])) { $description_parts[] = "Lieu: " . $data[$column_indices['location']]; } // Ajouter la description if ($column_indices['description'] !== false && !empty($data[$column_indices['description']])) { $description_parts[] = $data[$column_indices['description']]; } // Joindre toutes les parties de la description $description = implode("\n\n", $description_parts); // Définir les étiquettes (labels) $labels = "agenda,planning"; // Si c'est un événement privé, ajouter l'étiquette "privé" if ($column_indices['private'] !== false && $data[$column_indices['private']] === 'TRUE') { $labels .= ",privé"; } // Déterminer la date d'échéance (due_date) $due_date = !empty($end_date) ? $end_date : $start_date; // Écrire la ligne dans le fichier de destination fputcsv($output, [$title, $description, $labels, $due_date]); $event_count++; } // Fermer les fichiers fclose($input); fclose($output); echo "Conversion terminée avec succès!\n"; echo "Nombre d'événements convertis: {$event_count}\n"; echo "Le fichier '{$dest_file}' est prêt à être importé dans GitLab.\n"; ?>