178 lines
7.6 KiB
PHP
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');
|
|
?>
|