From 65d874d563878b9a3704201b120baed834589b66 Mon Sep 17 00:00:00 2001 From: KWON Date: Fri, 20 Feb 2026 14:57:27 +0900 Subject: [PATCH] =?UTF-8?q?Feat:=20VIP=20=EB=A7=8C=EB=A3=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=ED=8E=98=EC=9D=B4=EC=A7=80=EB=A5=BC=20?= =?UTF-8?q?=EB=8F=85=EB=A6=BD=20=EC=8B=A4=ED=96=89=20=EB=B0=A9=EC=8B=9D?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B0=9C=EC=84=A0=20-=20=EC=A7=81?= =?UTF-8?q?=EC=A0=91=20=EC=A0=91=EA=B7=BC=20=EC=8B=9C=20UI=20=EC=A0=9C?= =?UTF-8?q?=EA=B3=B5,=201=ED=9A=8C=EC=84=B1=20=EC=9D=BC=EA=B4=84=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=A7=80=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/vip/vip_list_expire_date.php | 230 +++++++++++++++++++++------ 1 file changed, 178 insertions(+), 52 deletions(-) diff --git a/manager/vip/vip_list_expire_date.php b/manager/vip/vip_list_expire_date.php index d55fc44f8..61ab0b4ac 100644 --- a/manager/vip/vip_list_expire_date.php +++ b/manager/vip/vip_list_expire_date.php @@ -6,58 +6,28 @@ */ include_once ('./_common.php'); -if(!$_SESSION['user_id']) exit; +include_once (FG_MANAGER_PATH.'/head.php'); + +if(!$_SESSION['user_id']) { + header('Location: '.FG_MANAGER_URL); + exit; +} + +// 권한 체크 (관리자 이상만 가능) +if($_SESSION['user_lv'] < 2) { + die('권한이 없습니다.'); +} $isDebug = false; // 디버그 출력용 변수 +$result_message = ""; +$result_data = array(); +$is_executed = false; -if(isset($_POST['mode'])) { - $mode = trim($_POST['mode']); +// AJAX 요청 처리 +if(isset($_POST['ajax_mode'])) { + $ajax_mode = trim($_POST['ajax_mode']); - if ($mode === "set_expire_date") { - $idx = trim($_POST['idx']); - - $squery = "SELECT * FROM {$fg['vip_list_table']} WHERE idx='{$idx}'"; - $list = sql_fetch($squery); - - if ($list) { - $ent_count = $list['ent_count']; - $datetime = date("Y-m-d H:i:s"); - - // 만료일 설정 로직 - if ($ent_count == 0) { - // 방문횟수가 0: 등록일 + 1년 - $vip_date = date("Y-m-d", strtotime($list['join_datetime'] . " +1 year")); - $logic_desc = "등록일 기준"; - } else { - // 방문횟수가 1 이상: 최종이용일 + 1년 - $vip_date = date("Y-m-d", strtotime($list['last_ent_date'] . " +1 year")); - $logic_desc = "최종이용일 기준"; - } - - // DB 업데이트 - $updateQuery = "UPDATE {$fg['vip_list_table']} SET vip_date='{$vip_date}' WHERE idx='{$idx}'"; - $result = sql_query($updateQuery); - - $data = array( - "isSuccess" => $result, - "vip_date" => $vip_date, - "logic" => $logic_desc, - "ent_count" => $ent_count - ); - - // log 기록 - $work = "VIP만료일설정"; - $work_detail = "카드번호 : ".$list['vip_card_no']." 만료일 : ".$vip_date." (".$logic_desc.") 처리자 : ".$_SESSION['user_name']; - - $logUpdate = log_update($work, $work_detail, $_SESSION['user_id'], $datetime); - if ($isDebug && !$logUpdate) echo '로그 등록 실패\n'; - } else { - $data = array("isSuccess" => false, "error" => "존재하지 않는 VIP입니다."); - } - } else if ($mode === "bulk_set_expire_date") { - /** - * 일괄 만료일 설정 - */ + if ($ajax_mode === "bulk_set_expire_date") { $status = isset($_POST['status']) ? trim($_POST['status']) : "정상"; $gr_id = isset($_POST['gr_id']) ? trim($_POST['gr_id']) : ""; @@ -108,10 +78,166 @@ if(isset($_POST['mode'])) { "updated_count" => $updated_count, "error_count" => $error_count ); + + header("Content-Type: application/json"); + echo json_encode($data); + exit; } -} else { - $data = array("isSuccess" => false, "error" => "요청이 없습니다."); } -header("Content-Type: application/json"); -echo json_encode($data); +// 1회성 실행 모드 (GET/POST 쿼리 파라미터) +if(isset($_REQUEST['confirm']) && $_REQUEST['confirm'] == 'yes') { + $datetime = date("Y-m-d H:i:s"); + $is_executed = true; + + // 모든 VIP 정상 상태 데이터 조회 + $squery = "SELECT * FROM {$fg['vip_list_table']} WHERE status='정상'"; + $result_list = sql_query($squery); + + $updated_count = 0; + $error_count = 0; + $details = array(); + + while($list = sql_fetch_array($result_list)) { + $ent_count = $list['ent_count']; + + // 만료일 설정 로직 + if ($ent_count == 0) { + // 방문횟수가 0: 등록일 + 1년 + $vip_date = date("Y-m-d", strtotime($list['join_datetime'] . " +1 year")); + $logic_type = "등록일 기준"; + } else { + // 방문횟수가 1 이상: 최종이용일 + 1년 + $vip_date = date("Y-m-d", strtotime($list['last_ent_date'] . " +1 year")); + $logic_type = "최종이용일 기준"; + } + + // DB 업데이트 + $updateQuery = "UPDATE {$fg['vip_list_table']} SET vip_date='{$vip_date}' WHERE idx='{$list['idx']}'"; + $update_result = sql_query($updateQuery); + + if ($update_result) { + $updated_count++; + $details[] = array( + 'card_no' => $list['vip_card_no'], + 'name' => $list['vip_name'], + 'old_date' => $list['vip_date'], + 'new_date' => $vip_date, + 'logic' => $logic_type, + 'ent_count' => $ent_count + ); + } else { + $error_count++; + } + + // log 기록 + $work = "VIP만료일일괄설정"; + $work_detail = "카드번호 : ".$list['vip_card_no']." 만료일 : ".$vip_date." (" . $logic_type . ") 처리자 : ".$_SESSION['user_name']; + + $logUpdate = log_update($work, $work_detail, $_SESSION['user_id'], $datetime); + } + + $result_message = "처리 완료: 업데이트 성공 {$updated_count}건, 실패 {$error_count}건"; + $result_data = $details; +} + +?> + + +
+

VIP 만료일 일괄 설정

+ + + + + 0) { ?> +
+
+
처리 결과 상세
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
카드번호성명이전 만료일신규 만료일설정 기준방문횟수
+
+
+ + + + +
+
+
작업 설명
+
    +
  • 상태: 정상인 모든 VIP의 만료일을 설정합니다
  • +
  • 방문횟수가 0이면: 등록일 + 1년을 만료일로 설정
  • +
  • 방문횟수가 1 이상이면: 최종이용일 + 1년을 만료일로 설정
  • +
  • 모든 변경사항은 로그에 기록됩니다
  • +
+
+
+ + + +
+
+ +
+ 취소 +
+ +
+ +