0 ? round(($row['cnt'] / $total_responses) * 100, 2) : 0; $insert_sql = "INSERT INTO survey_statistics (sv_id, sq_id, ss_option_value, ss_count, ss_percentage) VALUES ('$sv_id', '$sq_id', '{$row['sa_value']}', '{$row['cnt']}', '$percentage')"; sql_query($insert_sql); } } elseif ($question['sq_type'] == 'rating') { // ํ‰์  ์งˆ๋ฌธ ํ†ต๊ณ„ $sql = "SELECT sa_value, COUNT(*) as cnt FROM survey_answers sa JOIN survey_responses sr ON sa.sr_id = sr.sr_id WHERE sr.sv_id = '$sv_id' AND sa.sq_id = '$sq_id' AND sr.sr_status = 'completed' GROUP BY sa_value ORDER BY CAST(sa_value AS UNSIGNED)"; $result = sql_query($sql); while ($row = sql_fetch_array($result)) { $percentage = $total_responses > 0 ? round(($row['cnt'] / $total_responses) * 100, 2) : 0; $insert_sql = "INSERT INTO survey_statistics (sv_id, sq_id, ss_option_value, ss_count, ss_percentage) VALUES ('$sv_id', '$sq_id', '{$row['sa_value']}', '{$row['cnt']}', '$percentage')"; sql_query($insert_sql); } } } return true; } /** * ์„ค๋ฌธ ํ…œํ”Œ๋ฆฟ ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ */ function get_survey_templates($category = '') { global $g5; $where = "st_is_public = 1"; if ($category) { $where .= " AND st_category = '$category'"; } $sql = "SELECT * FROM survey_templates WHERE $where ORDER BY st_created_at DESC"; $result = sql_query($sql); $templates = array(); while ($row = sql_fetch_array($result)) { $templates[] = $row; } return $templates; } /** * ์„ค๋ฌธ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์„ค๋ฌธ ์ƒ์„ฑ */ function create_survey_from_template($template_id, $title, $created_by) { global $g5; $template = sql_fetch("SELECT * FROM survey_templates WHERE st_id = '$template_id'"); if (!$template) { return false; } $template_data = json_decode($template['st_data'], true); // ์„ค๋ฌธ์ง€ ์ƒ์„ฑ $sql = "INSERT INTO survey_master (sv_title, sv_description, sv_start_date, sv_end_date, sv_status, sv_created_by) VALUES ('$title', '{$template_data['description']}', NOW(), DATE_ADD(NOW(), INTERVAL 30 DAY), '".SURVEY_STATUS_DRAFT."', '$created_by')"; sql_query($sql); $sv_id = sql_insert_id(); // ์งˆ๋ฌธ๋“ค ์ƒ์„ฑ foreach ($template_data['questions'] as $index => $question) { $sq_order = $index + 1; $sq_type = $question['type']; $sq_title = addslashes($question['title']); $sq_required = isset($question['required']) && $question['required'] ? 1 : 0; $sq_options = isset($question['options']) ? addslashes(json_encode($question['options'])) : ''; $sq_validation = isset($question['validation']) ? addslashes(json_encode($question['validation'])) : ''; $sql = "INSERT INTO survey_questions (sv_id, sq_order, sq_type, sq_title, sq_required, sq_options, sq_validation) VALUES ('$sv_id', '$sq_order', '$sq_type', '$sq_title', '$sq_required', '$sq_options', '$sq_validation')"; sql_query($sql); } return $sv_id; } /** * ์„ค๋ฌธ ๋ฐ์ดํ„ฐ ์—‘์…€ ๋‚ด๋ณด๋‚ด๊ธฐ์šฉ ๋ฐฐ์—ด ์ƒ์„ฑ */ function get_survey_export_data($sv_id) { global $g5; $survey = get_survey($sv_id); $questions = get_survey_questions($sv_id); // ํ—ค๋” ์ƒ์„ฑ $headers = ['์‘๋‹ตID', '์‘๋‹ต์ž', 'IP์ฃผ์†Œ', '์‹œ์ž‘์‹œ๊ฐ„', '์™„๋ฃŒ์‹œ๊ฐ„']; foreach ($questions as $question) { $headers[] = strip_tags($question['sq_title']); } // ๋ฐ์ดํ„ฐ ์ƒ์„ฑ $data = array(); $data[] = $headers; $sql = "SELECT * FROM survey_responses WHERE sv_id = '$sv_id' AND sr_status = 'completed' ORDER BY sr_completed_at DESC"; $result = sql_query($sql); while ($response = sql_fetch_array($result)) { $row = array(); $row[] = $response['sr_id']; $row[] = $response['sr_mb_id'] ?: '์ต๋ช…'; $row[] = $response['sr_ip']; $row[] = $response['sr_started_at']; $row[] = $response['sr_completed_at']; // ๊ฐ ์งˆ๋ฌธ๋ณ„ ๋‹ต๋ณ€ foreach ($questions as $question) { $answer_sql = "SELECT sa_value, sa_text FROM survey_answers WHERE sr_id = '{$response['sr_id']}' AND sq_id = '{$question['sq_id']}'"; $answer_result = sql_query($answer_sql); $answers = array(); while ($answer = sql_fetch_array($answer_result)) { if ($answer['sa_text']) { $answers[] = $answer['sa_value'] . ' (' . $answer['sa_text'] . ')'; } else { $answers[] = $answer['sa_value']; } } $row[] = implode(', ', $answers); } $data[] = $row; } return $data; } /** * ์„ค๋ฌธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ */ function validate_survey_access($sv_id, $mb_id = null, $ip = '') { global $g5; $survey = get_survey($sv_id); if (!$survey) { return array('success' => false, 'message' => '์กด์žฌํ•˜์ง€ ์•Š๋Š” ์„ค๋ฌธ์ž…๋‹ˆ๋‹ค.'); } // ์ƒํƒœ ํ™•์ธ if ($survey['sv_status'] != SURVEY_STATUS_ACTIVE) { return array('success' => false, 'message' => 'ํ˜„์žฌ ์ฐธ์—ฌํ•  ์ˆ˜ ์—†๋Š” ์„ค๋ฌธ์ž…๋‹ˆ๋‹ค.'); } // ๊ธฐ๊ฐ„ ํ™•์ธ $now = date('Y-m-d H:i:s'); if ($now < $survey['sv_start_date']) { return array('success' => false, 'message' => '์•„์ง ์‹œ์ž‘๋˜์ง€ ์•Š์€ ์„ค๋ฌธ์ž…๋‹ˆ๋‹ค.'); } if ($now > $survey['sv_end_date']) { return array('success' => false, 'message' => '์ข…๋ฃŒ๋œ ์„ค๋ฌธ์ž…๋‹ˆ๋‹ค.'); } // ์ค‘๋ณต ์ฐธ์—ฌ ํ™•์ธ if (!$survey['sv_allow_multiple']) { $where = "sv_id = '$sv_id' AND sr_status = 'completed'"; if ($mb_id) { $where .= " AND sr_mb_id = '$mb_id'"; } else { $where .= " AND sr_ip = '$ip'"; } $existing = sql_fetch("SELECT COUNT(*) as cnt FROM survey_responses WHERE $where"); if ($existing['cnt'] > 0) { return array('success' => false, 'message' => '์ด๋ฏธ ์ฐธ์—ฌํ•˜์‹  ์„ค๋ฌธ์ž…๋‹ˆ๋‹ค.'); } } // ์ตœ๋Œ€ ์‘๋‹ต ์ˆ˜ ํ™•์ธ if ($survey['sv_max_responses']) { $total_responses = get_survey_response_count($sv_id, 'completed'); if ($total_responses >= $survey['sv_max_responses']) { return array('success' => false, 'message' => '์„ค๋ฌธ ์ฐธ์—ฌ ์ธ์›์ด ๋งˆ๊ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); } } return array('success' => true, 'survey' => $survey); }