prepare("SELECT access_token, refresh_token, expires_at FROM outlook_tokens WHERE praticien_id = ?");
$stmt->execute([$praticien_id]);
$tokenData = $stmt->fetch();
if (!$tokenData) {
die("⚠️ Connectez-vous à Outlook d'abord.");
}
$access_token = $tokenData['access_token'];
if (time() >= $tokenData['expires_at']) {
require_once '../includes/outlook_refresh.php';
$access_token = refreshOutlookToken($pdo, $praticien_id);
if (!$access_token) {
die("❌ Impossible de rafraîchir le token.");
}
}
// Récupérer les RDV non encore synchronisés avec nom/prénom du client
$stmt = $pdo->prepare("
SELECT r.*, c.prenom, c.nom
FROM rendez_vous r
JOIN client c ON c.id = r.client_id
WHERE r.praticien_id = ? AND r.outlook_event_id IS NULL
");
$stmt->execute([$praticien_id]);
$rdvs = $stmt->fetchAll();
$success = 0;
$fail = 0;
foreach ($rdvs as $rdv) {
$nom_patient = $rdv['prenom'] . ' ' . $rdv['nom'];
$start = date('Y-m-d\TH:i:s', strtotime($rdv['date_rdv']));
$end = date('Y-m-d\TH:i:s', strtotime($rdv['date_rdv'] . ' +1 hour'));
$event = [
"subject" => "Rendez-vous avec $nom_patient",
"start" => [
"dateTime" => $start,
"timeZone" => "Europe/Paris"
],
"end" => [
"dateTime" => $end,
"timeZone" => "Europe/Paris"
],
"body" => [
"contentType" => "text",
"content" => "RDV Avec : $nom_patient"
]
];
$ch = curl_init("https://graph.microsoft.com/v1.0/me/events");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $access_token",
"Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($event));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode === 201 && isset($data['id'])) {
$stmtUpdate = $pdo->prepare("UPDATE rendez_vous SET outlook_event_id = ? WHERE id = ?");
$stmtUpdate->execute([$data['id'], $rdv['id']]);
$success++;
} else {
$fail++;
echo "❌ Erreur RDV {$rdv['id']} - Code: $httpcode
";
}
}
// Pluriels russes
function ruPlural($n, $one, $few, $many){
$n = abs((int)$n);
$n1 = $n % 10; $n2 = $n % 100;
if ($n1 == 1 && $n2 != 11) return $one;
if ($n1 >= 2 && $n1 <= 4 && ($n2 < 10 || $n2 >= 20)) return $few;
return $many;
}
$successLabel = ruPlural($success, 'запись', 'записи', 'записей');
$failLabel = ruPlural($fail, 'ошибка синхронизации', 'ошибки синхронизации', 'ошибок синхронизации');
// Box centrée (horizontal + vertical)
echo '';
echo <<
Успешно синхронизировано {$success} {$successLabel} с Outlook.
HTML; if ((int)$fail > 0) { echo << Не удалось синхронизировать {$fail} {$failLabel}. HTML; } echo << Открыть календарь