first commit 2
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
// ❗ [핵심 수정] 그누보드 환경을 안정적으로 로드합니다.
|
||||
include_once('../../../../../common.php');
|
||||
|
||||
// ❗ [핵심 수정] StatusManager 클래스가 의존하는 헬퍼 파일을 먼저 포함합니다.
|
||||
include_once(G5_PATH . '/adm/order_manage/lib/status_helper.php');
|
||||
// ❗ [핵심 수정] 알림 발송을 위해 notification_helper.php 파일을 포함합니다.
|
||||
include_once(G5_PATH . '/adm/order_manage/lib/notification_helper.php');
|
||||
|
||||
// [수정] EstimateManager 클래스를 포함하여 핵심 로직을 정상적으로 호출합니다.
|
||||
require_once G5_PATH . '/adm/order_manage/classes/StatusManager.class.php';
|
||||
require_once G5_PATH . '/adm/order_manage/classes/EstimateManager.class.php';
|
||||
|
||||
// AJAX 요청만 처리
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
http_response_code(405);
|
||||
echo json_encode(['success' => 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);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user