Files
dnssash/adm/survey_manage/survey_form_update.php
2026-06-11 18:47:38 +09:00

178 lines
7.6 KiB
PHP

<?php
$sub_menu = '710200';
include_once('./_common.php');
auth_check_menu($auth, $sub_menu, "w");
$sv_id = isset($_POST['sv_id']) ? (int)$_POST['sv_id'] : 0;
$action = isset($_POST['action']) ? $_POST['action'] : 'save_draft';
$template_id = isset($_POST['template_id']) ? (int)$_POST['template_id'] : 0;
// 기본 정보
$sv_title = isset($_POST['sv_title']) ? trim($_POST['sv_title']) : '';
$sv_description = isset($_POST['sv_description']) ? trim($_POST['sv_description']) : '';
$sv_start_date = isset($_POST['sv_start_date']) ? $_POST['sv_start_date'] : '';
$sv_end_date = isset($_POST['sv_end_date']) ? $_POST['sv_end_date'] : '';
$sv_allow_anonymous = isset($_POST['sv_allow_anonymous']) ? 1 : 0;
$sv_allow_multiple = isset($_POST['sv_allow_multiple']) ? 1 : 0;
$sv_max_responses = isset($_POST['sv_max_responses']) ? (int)$_POST['sv_max_responses'] : null;
$sv_theme_color = isset($_POST['sv_theme_color']) ? $_POST['sv_theme_color'] : '#AA20FF';
$sv_thank_message = isset($_POST['sv_thank_message']) ? trim($_POST['sv_thank_message']) : '';
// 유효성 검사
if (!$sv_title) {
alert('설문 제목을 입력해주세요.');
}
if (!$sv_start_date || !$sv_end_date) {
alert('설문 시작일과 종료일을 입력해주세요.');
}
if (strtotime($sv_start_date) >= strtotime($sv_end_date)) {
alert('종료일시는 시작일시보다 늦어야 합니다.');
}
// 상태 결정
$sv_status = ($action === 'save_and_activate') ? 'active' : 'draft';
// 질문 데이터
$questions = isset($_POST['questions']) ? $_POST['questions'] : [];
if ($sv_id > 0) {
// 기존 설문 수정
$sql = "UPDATE survey_master SET
sv_title = '".sql_real_escape_string($sv_title)."',
sv_description = '".sql_real_escape_string($sv_description)."',
sv_start_date = '".sql_real_escape_string($sv_start_date)."',
sv_end_date = '".sql_real_escape_string($sv_end_date)."',
sv_status = '".sql_real_escape_string($sv_status)."',
sv_allow_anonymous = '$sv_allow_anonymous',
sv_allow_multiple = '$sv_allow_multiple',
sv_max_responses = ".($sv_max_responses ? "'$sv_max_responses'" : 'NULL').",
sv_theme_color = '".sql_real_escape_string($sv_theme_color)."',
sv_thank_message = '".sql_real_escape_string($sv_thank_message)."',
sv_updated_at = NOW()
WHERE sv_id = '$sv_id'";
sql_query($sql);
// 기존 질문들 삭제
sql_query("DELETE FROM survey_questions WHERE sv_id = '$sv_id'");
} else {
// 새 설문 생성
if ($template_id > 0) {
// 템플릿으로부터 설문 생성
$new_sv_id = create_survey_from_template($template_id, $sv_title, $member['mb_id']);
if ($new_sv_id) {
// 템플릿으로 생성된 설문의 기본 정보 업데이트
$sql = "UPDATE survey_master SET
sv_description = '".sql_real_escape_string($sv_description)."',
sv_start_date = '".sql_real_escape_string($sv_start_date)."',
sv_end_date = '".sql_real_escape_string($sv_end_date)."',
sv_status = '".sql_real_escape_string($sv_status)."',
sv_allow_anonymous = '$sv_allow_anonymous',
sv_allow_multiple = '$sv_allow_multiple',
sv_max_responses = ".($sv_max_responses ? "'$sv_max_responses'" : 'NULL').",
sv_theme_color = '".sql_real_escape_string($sv_theme_color)."',
sv_thank_message = '".sql_real_escape_string($sv_thank_message)."'
WHERE sv_id = '$new_sv_id'";
sql_query($sql);
$sv_id = $new_sv_id;
// 템플릿 질문들을 사용자가 수정했다면 업데이트
if (!empty($questions)) {
sql_query("DELETE FROM survey_questions WHERE sv_id = '$sv_id'");
}
} else {
alert('템플릿으로부터 설문 생성에 실패했습니다.');
}
} else {
// 직접 생성
$sql = "INSERT INTO survey_master
(sv_title, sv_description, sv_start_date, sv_end_date, sv_status,
sv_allow_anonymous, sv_allow_multiple, sv_max_responses, sv_theme_color,
sv_thank_message, sv_created_by, sv_created_at)
VALUES
('".sql_real_escape_string($sv_title)."',
'".sql_real_escape_string($sv_description)."',
'".sql_real_escape_string($sv_start_date)."',
'".sql_real_escape_string($sv_end_date)."',
'".sql_real_escape_string($sv_status)."',
'$sv_allow_anonymous',
'$sv_allow_multiple',
".($sv_max_responses ? "'$sv_max_responses'" : 'NULL').",
'".sql_real_escape_string($sv_theme_color)."',
'".sql_real_escape_string($sv_thank_message)."',
'{$member['mb_id']}',
NOW())";
sql_query($sql);
$sv_id = sql_insert_id();
if (!$sv_id) {
alert('설문 생성에 실패했습니다.');
}
}
}
// 질문들 저장 (템플릿 사용 시에도 사용자가 수정했다면 저장)
if (!empty($questions)) {
foreach ($questions as $order => $question) {
$sq_type = isset($question['type']) ? trim($question['type']) : 'text';
$sq_title = isset($question['title']) ? trim($question['title']) : '';
$sq_description = isset($question['description']) ? trim($question['description']) : '';
$sq_required = isset($question['required']) ? 1 : 0;
$sq_options = '';
if (!$sq_title) {
continue; // 제목이 없는 질문은 건너뛰기
}
// 옵션 처리 (객관식 질문인 경우)
if (in_array($sq_type, ['radio', 'checkbox', 'select']) && isset($question['options'])) {
$options = array_filter($question['options'], function($option) {
return trim($option) !== '';
});
if (!empty($options)) {
$sq_options = json_encode(array_values($options), JSON_UNESCAPED_UNICODE);
}
}
$sql = "INSERT INTO survey_questions
(sv_id, sq_order, sq_type, sq_title, sq_description, sq_required, sq_options, sq_created_at)
VALUES
('$sv_id',
'".($order + 1)."',
'".sql_real_escape_string($sq_type)."',
'".sql_real_escape_string($sq_title)."',
'".sql_real_escape_string($sq_description)."',
'$sq_required',
'".sql_real_escape_string($sq_options)."',
NOW())";
sql_query($sql);
}
}
// 활성화된 설문인 경우 질문이 있는지 확인
if ($sv_status === 'active') {
$question_count = sql_fetch("SELECT COUNT(*) as cnt FROM survey_questions WHERE sv_id = '$sv_id'")['cnt'];
if ($question_count == 0) {
// 질문이 없으면 임시저장 상태로 변경
sql_query("UPDATE survey_master SET sv_status = 'draft' WHERE sv_id = '$sv_id'");
alert('질문이 없어서 임시저장 상태로 저장되었습니다. 질문을 추가한 후 활성화해주세요.', 'survey_form.php?sv_id='.$sv_id);
}
}
$message = '';
if ($action === 'save_and_activate') {
$message = '설문이 저장되고 활성화되었습니다.';
} else {
$message = '설문이 임시저장되었습니다.';
}
alert($message, 'survey_list.php');
?>