false, 'message' => '둜그인이 ν•„μš”ν•©λ‹ˆλ‹€.'])); } $action = $_POST['action'] ?? ''; $reservation_id = (int)($_POST['id'] ?? 0); try { if ($action === 'cancel') { if (!$reservation_id) { throw new Exception('μ˜ˆμ•½ IDκ°€ μ—†μŠ΅λ‹ˆλ‹€.'); } // 본인의 μ˜ˆμ•½μΈμ§€ 확인 $sql = "SELECT * FROM expert_visit_reservations WHERE id = '{$reservation_id}' AND (customer_id = '{$member['mb_id']}' OR customer_phone = '{$member['mb_hp']}')"; $reservation = sql_fetch($sql); if (!$reservation) { throw new Exception('μ·¨μ†Œν•  수 μžˆλŠ” μ˜ˆμ•½ 정보가 μ—†κ±°λ‚˜ κΆŒν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€.'); } // 이미 μ·¨μ†Œλ˜μ—ˆκ±°λ‚˜ μ™„λ£Œλœ μ˜ˆμ•½μ€ λ³€κ²½ λΆˆκ°€ if ($reservation['status'] === 'cancelled' || $reservation['status'] === 'completed') { throw new Exception('이미 μ·¨μ†Œλ˜μ—ˆκ±°λ‚˜ μ™„λ£Œλœ μ˜ˆμ•½μž…λ‹ˆλ‹€.'); } // μ˜ˆμ•½ μ·¨μ†Œ 처리 $sql_update = "UPDATE expert_visit_reservations SET status = 'cancelled', updated_at = NOW(), updated_by = '{$member['mb_id']}' WHERE id = '{$reservation_id}'"; if (sql_query($sql_update)) { // πŸ’‘ [μˆ˜μ •] μ˜ˆμ•½ μ·¨μ†Œ μ•Œλ¦Ό λ°œμ†‘ if (function_exists('notify_for_expert_visit')) { notify_for_expert_visit($reservation_id, 'μ˜ˆμ•½μ·¨μ†Œ'); } echo json_encode(['success' => true, 'message' => 'μ˜ˆμ•½μ΄ μ •μƒμ μœΌλ‘œ μ·¨μ†Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.']); } else { throw new Exception('μ˜ˆμ•½ μ·¨μ†Œ 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.'); } } else { throw new Exception('잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€.'); } } catch (Exception $e) { echo json_encode(['success' => false, 'message' => $e->getMessage()]); } ?>