false, 'message' => 'POST 요청만 허용됩니다.']); exit; } // 필수 파라미터 검증 $wr_id = (int) ($_POST['wr_id'] ?? 0); $new_status = trim($_POST['new_status'] ?? ''); if (!$wr_id || !$new_status) { echo json_encode(['success' => false, 'message' => '필수 파라미터가 누락되었습니다.']); exit; } $memo = trim($_POST['memo'] ?? ''); // 사용자 권한 확인 $user_role = 'guest'; $user_id = ''; if (isset($member['mb_id'])) { $user_id = $member['mb_id']; if (isset($member['mb_level'])) { if ($member['mb_level'] >= 8) { $user_role = 'admin'; } elseif ($member['mb_level'] >= 5) { $user_role = 'agent'; } else { // ❗ [핵심 수정] wr_num과 wr_reply를 사용하여 원본 글 작성자를 확인합니다. $sql = "SELECT wr_num, wr_reply FROM {$g5['write_prefix']}order WHERE wr_id = '{$wr_id}'"; $write = sql_fetch($sql); if ($write) { $origin_wr_num = $write['wr_num']; // 그룹의 원본글을 찾습니다. $origin_write_sql = "SELECT mb_id FROM {$g5['write_prefix']}order WHERE wr_num = '{$origin_wr_num}' AND wr_reply = ''"; $origin_write = sql_fetch($origin_write_sql); if ($origin_write && $origin_write['mb_id'] === $user_id) { $user_role = 'customer'; } } } } } if ($user_role === 'guest') { echo json_encode(['success' => false, 'message' => '로그인이 필요합니다.']); exit; } // 💡 [추가] 대리점의 접근 차단 if ($user_role === 'agent') { echo json_encode(['success' => false, 'message' => '접근 권한이 없습니다.']); exit; } try { $estimate_manager = new EstimateManager(); $status_manager = new StatusManager(); // [수정] 상태에 따라 적절한 비즈니스 로직(메서드)을 호출하는 기존 흐름을 복원합니다. switch ($new_status) { case '작성완료': // 고객이 '작성완료'를 누른 경우 -> 알림 발송 등 후속 처리가 포함된 메서드 호출 $result = $estimate_manager->completeEstimate($wr_id, $user_role); break; case '견적채택': // 고객이 '견적채택'을 누른 경우 -> 다른 견적 취소, 원본글 상태 변경, 알림 발송 등 복잡한 처리가 필요 $reply_write = sql_fetch("SELECT wr_num, mb_id FROM {$g5['write_prefix']}order WHERE wr_id = '{$wr_id}'"); if (!$reply_write) { throw new Exception('답변글 정보를 찾을 수 없습니다.'); } $origin_post = sql_fetch("SELECT wr_id FROM {$g5['write_prefix']}order WHERE wr_num = '{$reply_write['wr_num']}' AND wr_reply = ''"); if (!$origin_post) { throw new Exception('원본 견적을 찾을 수 없습니다.'); } $origin_wr_id = $origin_post['wr_id']; $dealer_id = $reply_write['mb_id']; $estimate = sql_fetch("SELECT id FROM estimate WHERE wr_id = '{$origin_wr_id}'"); if (!$estimate) { throw new Exception('원본 견적 데이터를 찾을 수 없습니다.'); } $estimate_id = $estimate['id']; // 🔥 [핵심 수정] 복잡한 로직 대신 StatusManager를 사용하여 상태를 직접 변경합니다. // wr_id는 답변글의 ID이므로, 해당 답변글의 상태를 '견적채택'으로 변경합니다. $result = $status_manager->changeStatus($wr_id, $new_status, $user_id, $user_role, $memo); break; default: // 그 외의 모든 상태 변경 (주로 관리자용 또는 간단한 상태 변경) $result = $status_manager->changeStatus($wr_id, $new_status, $user_id, $user_role, $memo); break; } // 결과 반환 header('Content-Type: application/json; charset=utf-8'); echo json_encode($result, JSON_UNESCAPED_UNICODE); } catch (Exception $e) { error_log("Status change error: " . $e->getMessage()); echo json_encode(['success' => false, 'message' => '상태 변경 중 오류가 발생했습니다: ' . $e->getMessage()], JSON_UNESCAPED_UNICODE); } ?>