Files
dnssash/theme/rd.dnssash/skin/board/order_eclem/status_change.php
T
2026-06-11 18:47:38 +09:00

124 lines
5.1 KiB
PHP

<?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);
}
?>