AvocadoAmber/AvocadoEdition_Light/adm/character_form_update.php

204 lines
7.4 KiB
PHP
Raw Normal View History

2024-10-07 10:35:20 +09:00
<?php
include_once "./_common.php";
function insert_character($data)
{
global $g5;
$sql = "INSERT INTO {$g5['character_table']} SET " . implode(', ', array_map(function ($k, $v) {
return "{$k} = '" . sql_real_escape_string($v) . "'";
}, array_keys($data), $data));
sql_query($sql);
return ['ch_id' => sql_insert_id()];
}
function update_character($ch_id, $data, $old_data)
{
global $g5, $ad;
$sql = "UPDATE {$g5['character_table']} SET " . implode(', ', array_map(function ($k, $v) {
return "{$k} = '" . sql_real_escape_string($v) . "'";
}, array_keys($data), $data)) . " WHERE ch_id = '" . sql_real_escape_string($ch_id) . "'";
sql_query($sql);
$file_fields = ['thumb', 'head', 'body'];
foreach ($file_fields as $field) {
if ($ad["ad_use_{$field}"] && !$ad["ad_url_{$field}"] && $old_data["ch_{$field}"] != $data["ch_{$field}"]) {
$prev_file_path = str_replace(G5_URL, G5_PATH, $old_data["ch_{$field}"]);
@unlink($prev_file_path);
}
}
}
function update_member_character($mb_id, $ch_id)
{
global $g5;
sql_query("UPDATE {$g5['member_table']} SET ch_id = '" . sql_real_escape_string($ch_id) . "' WHERE mb_id = '" . sql_real_escape_string($mb_id) . "'");
}
function insert_default_clothes($ch_id, $ch_body)
{
global $g5;
$sql = "INSERT INTO {$g5['closthes_table']} SET
ch_id = '" . sql_real_escape_string($ch_id) . "',
cl_subject = '기본의상',
cl_path = '" . sql_real_escape_string($ch_body) . "',
cl_use = '1',
cl_type = 'default'";
sql_query($sql);
}
function update_or_insert_default_clothes($ch_id, $ch_body)
{
global $g5;
$cl = sql_fetch("SELECT cl_id FROM {$g5['closthes_table']} WHERE ch_id = '" . sql_real_escape_string($ch_id) . "' AND cl_type = 'default'");
if ($cl['cl_id']) {
sql_query("UPDATE {$g5['closthes_table']} SET cl_path = '" . sql_real_escape_string($ch_body) . "' WHERE cl_id = '" . sql_real_escape_string($cl['cl_id']) . "'");
} else {
insert_default_clothes($ch_id, $ch_body);
}
}
function handle_additional_profile_data($ch_id, $ar_code, $ar_theme, $av_value, $character_image_path, $character_image_url)
{
global $g5;
if (is_array($ar_code)) {
for ($i = 0; $i < count($ar_code); $i++) {
$key = 'av_' . $ar_code[$i];
$prev_value = sql_fetch("SELECT av_value FROM {$g5['value_table']} WHERE ch_id = '" . sql_real_escape_string($ch_id) . "' AND ar_code = '" . sql_real_escape_string($ar_code[$i]) . "' AND ar_theme = '" . sql_real_escape_string($ar_theme[$i]) . "'");
$prev_value = $prev_value['av_value'];
if (isset($_FILES['av_value_file']['name'][$i]) && $_FILES['av_value_file']['name'][$i]) {
$ext = pathinfo($_FILES['av_value_file']['name'][$i], PATHINFO_EXTENSION);
$image_name = "img_" . $ar_code[$i] . "_" . time() . "." . $ext;
upload_file($_FILES['av_value_file']['tmp_name'][$i], $image_name, $character_image_path);
$av_value[$i] = $character_image_url . "/" . $image_name;
}
if ($prev_value != $av_value[$i] && strstr(G5_URL, $prev_value)) {
$prev_file_path = str_replace(G5_URL, G5_PATH, $prev_value);
@unlink($prev_file_path);
}
$sql_data = [
'ch_id' => $ch_id,
'ar_code' => $ar_code[$i],
'ar_theme' => $ar_theme[$i],
'av_value' => $av_value[$i]
];
if (isset($prev_value)) {
$sql = "UPDATE {$g5['value_table']} SET " . implode(', ', array_map(function ($k, $v) {
return "{$k} = '" . sql_real_escape_string($v) . "'";
}, array_keys($sql_data), $sql_data)) . " WHERE ar_code = '" . sql_real_escape_string($ar_code[$i]) . "' AND ch_id = '" . sql_real_escape_string($ch_id) . "' AND ar_theme = '" . sql_real_escape_string($ar_theme[$i]) . "'";
} else {
$sql = "INSERT INTO {$g5['value_table']} SET " . implode(', ', array_map(function ($k, $v) {
return "{$k} = '" . sql_real_escape_string($v) . "'";
}, array_keys($sql_data), $sql_data));
}
sql_query($sql);
}
}
}
function handle_character_stats($ch_id, $st_id, $sc_max, $sc_value)
{
global $g5;
if (is_array($st_id) && count($st_id) > 0) {
for ($i = 0; $i < count($st_id); $i++) {
$temp_st_id = $st_id[$i];
$old_sc = sql_fetch("SELECT * FROM {$g5['status_table']} WHERE ch_id = '" . sql_real_escape_string($ch_id) . "' AND st_id = '" . sql_real_escape_string($temp_st_id) . "'");
$sql_data = array(
'sc_max' => $sc_max[$i],
'sc_value' => $sc_value[$i]
);
if ($old_sc['sc_id']) {
$sql = "UPDATE {$g5['status_table']} SET " . implode(', ', array_map(function ($k, $v) {
return "{$k} = '" . sql_real_escape_string($v) . "'";
}, array_keys($sql_data), $sql_data)) . " WHERE sc_id = '" . sql_real_escape_string($old_sc['sc_id']) . "'";
} else {
$sql_data['st_id'] = $st_id[$i];
$sql_data['ch_id'] = $ch_id;
$sql = "INSERT INTO {$g5['status_table']} SET " . implode(', ', array_map(function ($k, $v) {
return "{$k} = '" . sql_real_escape_string($v) . "'";
}, array_keys($sql_data), $sql_data));
}
sql_query($sql);
}
}
}
$w = isset($_POST['w']) ? $_POST['w'] : '';
$ch_id = isset($_POST['ch_id']) ? trim($_POST['ch_id']) : '';
$mb_id = isset($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
if ($w == 'u') {
check_demo();
}
auth_check($auth[$sub_menu], 'w');
check_token();
$mb = get_member($mb_id);
if (!$mb['mb_id']) {
alert('존재하지 않는 회원 정보입니다.');
}
$character_image_path = G5_DATA_PATH . "/character/" . $mb_id;
$character_image_url = G5_DATA_URL . "/character/" . $mb_id;
@mkdir($character_image_path, G5_DIR_PERMISSION);
@chmod($character_image_path, G5_DIR_PERMISSION);
$character_data = [
'ch_state' => $ch_state,
'ch_type' => $ch_type,
'mb_id' => $mb_id,
'ch_side' => $ch_side,
'ch_class' => $ch_class,
'ch_name' => $ch_name,
'ch_point' => $ch_point,
];
$ad = sql_fetch("SELECT * FROM {$g5['article_default_table']}");
$file_fields = [
'thumb' => 'ch_thumb_file',
'head' => 'ch_head_file',
'body' => 'ch_body_file'
];
foreach ($file_fields as $field => $file_key) {
if ($ad["ad_use_{$field}"] && isset($_FILES[$file_key]['name']) && $_FILES[$file_key]['name']) {
$ext = get_file_extension($_FILES[$file_key]['name']);
$image_name = "{$field}_" . time() . "." . $ext;
$upload_result = upload_file($_FILES[$file_key]['tmp_name'], $image_name, $character_image_path);
if ($upload_result) {
$character_data["ch_{$field}"] = $character_image_url . "/" . $image_name;
}
}
}
if ($w == '') {
$result = insert_character($character_data);
$ch_id = $result['ch_id'];
update_member_character($mb['mb_id'], $ch_id);
if (isset($character_data['ch_body'])) {
insert_default_clothes($ch_id, $character_data['ch_body']);
}
} else {
$ch = get_character($ch_id);
if (!$ch['ch_id']) {
alert("캐릭터 정보가 존재하지 않습니다.");
}
update_character($ch_id, $character_data, $ch);
update_member_character($mb['mb_id'], $ch_id);
if (isset($character_data['ch_body'])) {
update_or_insert_default_clothes($ch_id, $character_data['ch_body']);
}
}
// 추가 프로필 핸들링
handle_additional_profile_data($ch_id, $ar_code, $ar_theme, $av_value, $character_image_path, $character_image_url);
// 캐릭터 스탯 핸들링
handle_character_stats($ch_id, $st_id, $sc_max, $sc_value);
goto_url('./character_form.php?' . $qstr . '&amp;w=u&amp;ch_id=' . $ch_id);