Compare commits

...

3 commits

Author SHA1 Message Date
98b6c95c89
patch-1 2025-09-18 09:53:20 +09:00
811436906d
wip 2025-02-26 16:11:58 +09:00
7a393e38b6
wip 2025-02-25 11:46:12 +09:00
46 changed files with 839 additions and 345 deletions

View file

@ -38,15 +38,15 @@ $menu["config"]->getLastAddedMenu()->addSubFile("/design_form_update.php");
$menu["config"]->addChildMenu("config", "메인 편집", G5_ADMIN_URL . "/viewer_form.php", true, 400, "\F891", 0);
$menu["config"]->getLastAddedMenu()->addSubFile("/viewer_form_update.php");
$menu["config"]->addChildMenu("config", "홈페이지 폰트 설정", G5_ADMIN_URL . "/editor_font.php", true, 500, "\F5CB", 0);
$menu["config"]->getLastAddedMenu()->addSubFile("/editor_font_update.php");
$menu["config"]->addChildMenu("config", "홈페이지 폰트 설정", G5_ADMIN_URL . "/items/config/editor_font.php", true, 500, "\F5CB", 0);
$menu["config"]->getLastAddedMenu()->addSubFile("/items/config/editor_font_update.php");
$menu["config"]->addChildMenu("config", "메뉴 설정", G5_ADMIN_URL . "/menu_list.php", true, 600, "\F478", 0);
$menu["config"]->getLastAddedMenu()->addSubFile("/menu_list_update.php");
$menu["config"]->getLastAddedMenu()->addSubFile("/menu_form.php");
$menu["config"]->getLastAddedMenu()->addSubFile("/menu_form_search.php");
$menu["config"]->addChildMenu("config", "메뉴 설정", G5_ADMIN_URL . "/items/config/menu_list.php", true, 600, "\F478", 0);
$menu["config"]->getLastAddedMenu()->addSubFile("/items/config/menu_list_update.php");
$menu["config"]->getLastAddedMenu()->addSubFile("/items/config/menu_form.php");
$menu["config"]->getLastAddedMenu()->addSubFile("/items/config/menu_form_search.php");
$menu["config"]->addChildMenu("config", "애드온 설정", G5_ADMIN_URL . "/addon_config.php", true, 700, "\F4CA", 0);
$menu["config"]->addChildMenu("config", "애드온 설정", G5_ADMIN_URL . "/items/config/addon_config.php", true, 700, "\F4CA", 0);
$menu["config"]->addChildMenu("config", "홈페이지 상세관리", G5_ADMIN_URL . "/config_form.php", true, 1000, "\F3E5", 0);
$menu["config"]->getLastAddedMenu()->addSubFile("/config_form_update.php");

View file

@ -29,27 +29,27 @@ $menu["member"]->getLastAddedMenu()->addSubFile("/member_delete.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/member_list_update.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/member_list_delete.php");
$menu["member"]->addChildMenu("member", "접속자집계", G5_ADMIN_URL . "/modules/visitor/visit_list.php", true, 200, "\F3F2", 0);
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_domain.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_browser.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_os.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_device.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_hour.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_date.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_week.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_month.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_year.php");
$menu["member"]->addChildMenu("member", "접속자집계", G5_ADMIN_URL . "/items/visitor/visit_list.php", true, 200, "\F3F2", 0);
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_domain.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_browser.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_os.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_device.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_hour.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_date.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_week.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_month.php");
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_year.php");
$menu["member"]->addChildMenu("member", "투표관리", G5_ADMIN_URL . "/poll_list.php", true, 500, "\F5F9", 0);
$menu["member"]->getLastAddedMenu()->addSubFile("/poll_form.php");
if ($config["cf_community"] && Community::isInitCommunity()) {
$menu["member"]->addChildMenu("member", "접속자검색", G5_ADMIN_URL . "/modules/visitor/visit_search.php", true, 300, "\F52A", 0);
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/visitor/visit_delete_update.php");
$menu["member"]->addChildMenu("member", "접속자검색", G5_ADMIN_URL . "/items/visitor/visit_search.php", true, 300, "\F52A", 0);
$menu["member"]->getLastAddedMenu()->addSubFile("/items/visitor/visit_delete_update.php");
$menu["member"]->addChildMenu("member", "캐릭터 미등록 회원관리", G5_ADMIN_URL . "/member_nocharacter_list.php", true, 400, "\F35E", 0);
$menu["member"]->getLastAddedMenu()->addSubFile("/member_nocharacter_list_update.php");
$menu["member"]->addChildMenu("member", "활동량 관리", G5_ADMIN_URL . "/modules/action/index.php", true, 410, "\F809", 0);
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/action/action_reply.php");
$menu["member"]->addChildMenu("member", "활동량 관리", G5_ADMIN_URL . "/items/action/index.php", true, 410, "\F809", 0);
$menu["member"]->getLastAddedMenu()->addSubFile("/items/action/action_reply.php");
}

View file

@ -0,0 +1,402 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
// todo
function getDefaultForm($method, $url)
{
}
function initCheckNeedUpdate()
{
if (!defined('ADM_LISTEDIT_SCRIPTS_ADDED')) {
define('ADM_LISTEDIT_SCRIPTS_ADDED', true);
// 스크립트 추가
$scripts = "
<script>
function addListItem(containerId, placeholder) {
var container = document.getElementById(containerId);
var newItem = document.createElement('div');
var adder = document.getElementById(`\${containerId}_new`);
var content = adder?.value;
newItem.className = 'adm-listedit-item';
newItem.innerHTML = '<input type=\"text\" value=\"' + content + '\" placeholder=\"' + placeholder + '\">' +
'<button type=\"button\" class=\"adm-listedit-remove\" onclick=\"removeListItem(this)\">삭제</button>';
container.appendChild(newItem);
adder.value = '';
var newInput = newItem.querySelector('input[type=\"text\"]');
var optionKey = containerId.replace('_items', '');
newInput.addEventListener('input', function() {
updateListHiddenInput(optionKey);
});
// Enter 키 이벤트 추가
newInput.addEventListener('keydown', function(e) {
if (e.key === 'Enter' || e.keyCode === 13) {
e.preventDefault();
var placeholder = newInput.getAttribute('placeholder');
addListItem(containerId, placeholder);
}
});
// 포커스를 새로 추가된 입력 필드에 설정
adder.focus();
updateListHiddenInput(optionKey);
}
function removeListItem(button) {
var item = button.parentElement;
var container = item.parentElement;
var optionKey = container.id.replace('_items', '');
// 최소 하나의 입력 필드는 유지 (추가 버튼 제외)
var inputItems = container.querySelectorAll('.adm-listedit-item:not(.adm-listedit-add-row)');
if (inputItems.length > 1) {
item.remove ? item.remove() : item.parentNode.removeChild(item);
} else {
// 마지막 항목인 경우 입력값만 비우기
var input = item.querySelector('input[type=\"text\"]');
input.value = '';
}
updateListHiddenInput(optionKey);
}
function updateListHiddenInput(optionKey) {
var container = document.getElementById(optionKey + '_items');
var listContainer = document.getElementById(optionKey + '_container');
var separator = listContainer.getAttribute('data-separator');
var inputs = container.querySelectorAll('input[type=\"text\"]');
var values = [];
for (var i = 0; i < inputs.length; i++) {
var value = inputs[i].value.trim();
if (value) {
values.push(value);
}
}
var hiddenInput = document.getElementById(optionKey + '_hidden');
hiddenInput.value = values.join(separator);
}
// DOM 로드 후 이벤트 리스너 설정
function initializeListEdit() {
var containers = document.querySelectorAll('.adm-listedit-items');
for (var i = 0; i < containers.length; i++) {
var container = containers[i];
var optionKey = container.id.replace('_items', '');
var inputs = container.querySelectorAll('input[type=\"text\"]');
for (var j = 0; j < inputs.length; j++) {
var input = inputs[j];
(function(inp, key) {
inp.addEventListener('input', function() {
updateListHiddenInput(key);
});
})(input, optionKey);
}
// 새 입력칸에 Enter 키 이벤트 추가
var newInput = document.getElementById(optionKey + '_new_input');
if (newInput) {
newInput.addEventListener('keydown', function(e) {
if (e.key === 'Enter' || e.keyCode === 13) {
e.preventDefault();
var optKey = this.id.replace('_new_input', '');
addListItemFromInput(optKey);
}
});
}
}
// 폼 제출 전에 한 번 더 업데이트
var forms = document.querySelectorAll('form');
for (var k = 0; k < forms.length; k++) {
forms[k].addEventListener('submit', function() {
for (var l = 0; l < containers.length; l++) {
var container = containers[l];
var optionKey = container.id.replace('_items', '');
updateListHiddenInput(optionKey);
}
});
}
}
// DOM 로드 완료 시 초기화
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initializeListEdit);
} else {
initializeListEdit();
}
</script>";
add_javascript($scripts, 10);
}
}
function getCurrentValue($key, $value)
{
initCheckNeedUpdate();
return is_array($value) ? ( isset($value[$key]) ? $value[$key] : "" ) : $value;
}
function getSkinDir($skin, $skin_path = G5_SKIN_PATH)
{
global $g5;
$result_array = [];
$dirname = implode(DIRECTORY_SEPARATOR, [$skin_path, $skin, ""]);
if (!is_dir($dirname))
return;
$handle = opendir($dirname);
while ($file = readdir($handle)) {
if ($file == '.' || $file == '..')
continue;
if (is_dir($dirname . $file))
$result_array[$file] = $file;
}
closedir($handle);
sort($result_array);
return $result_array;
}
function getSkinList($skin_type)
{
global $config;
$skins = [];
if (defined('G5_THEME_PATH') && $config['cf_theme']) {
$dirs = getSkinDir($skin_type, G5_THEME_PATH . '/' . G5_SKIN_DIR);
if (!empty($dirs)) {
foreach ($dirs as $dir) {
$skins[$dir] = "theme/{$dir}";
}
}
}
$ret = [];
$dir = array_merge($skins, getSkinDir($skin_type));
foreach($dir as $k => $v) {
$ret[$v] = $v;
}
return $ret;
}
function getMemberLevels($include_admin = false)
{
global $g5;
$level_name[1] = "방문자";
$level_name[2] = "멤버";
$level_name[3] = "상위멤버";
if ($include_admin) $level_name[10] = "운영자";
return $level_name;
}
function setCheckbox($optionName, $optionDesc, $optionKey, $optionValue, $currentValue, $standalone = false)
{
$currentValue = getCurrentValue($optionKey, $currentValue);
$checked = "";
$v = "";
$desc = $optionDesc ? "<div class=\"adm-form-desc\">{$optionDesc}</div>" : "";
if ($currentValue) $checked = " checked";
if ($standalone) $v .= "<form>";
$v .= '<div class="adm-form adm-form-colflex">';
$v .= "<div class=\"adm-form-flex-full\"><div class=\"adm-form-name\">{$optionName}</div>{$desc}</div>";
$v .= '<div class="adm-form-input">';
$v .= "<div class=\"adm-form-check\"><input type=\"checkbox\" name=\"{$optionKey}\" value=\"{$optionValue}\"{$checked}><div class=\"adm-form-checkbox-cover\"></div></div>";
$v .= '</div></div>';
if ($standalone) $v .= "</form>";
echo $v;
}
function setNumberInput($optionName, $optionDesc, $optionKey, $currentValue, $preDesc = "", $postDesc = "", $minValue = 0, $maxValue = 0, $standalone = false)
{
$currentValue = getCurrentValue($optionKey, $currentValue);
$v = "";
$min = $minValue ? " min=\"{$minValue}\"" : "";
$max = $maxValue ? " max=\"{$maxValue}\"" : "";
$desc = $optionDesc ? "<div class=\"adm-form-desc\">{$optionDesc}</div>" : "";
if ($standalone) $v .= "<form>";
$v .= "<div class=\"adm-form adm-form-colflex\">
<div class=\"adm-form-flex-full\">
<div class=\"adm-form-name\">{$optionName}</div>{$desc}
</div>
<div class=\"adm-form-input\">
<div class=\"adm-form-number\">
<span class=\"adm-form-prefix\">{$preDesc}</span>
<input type=\"number\" name=\"{$optionKey}\" value=\"{$currentValue}\"{$min}{$max}>
<span class=\"adm-form-postfix\">{$postDesc}</span>
</div>
</div>
</div>";
if ($standalone) $v .= "</form>";
echo $v;
}
function setTextInput($optionName, $optionDesc, $optionKey, $currentValue, $standalone = false)
{
$currentValue = getCurrentValue($optionKey, $currentValue);
$v = "";
$desc = $optionDesc ? "<div class=\"adm-form-desc\">{$optionDesc}</div>" : "";
if ($standalone) $v .= "<form>";
$v .= '<div class="adm-form adm-form-rowflex">';
$v .= "<div class=\"adm-form-flex-full\"><div class=\"adm-form-name\">{$optionName}</div>{$desc}</div>";
$v .= '<div class="adm-form-input">';
$v .= "<div class=\"adm-form-text\"><input type=\"text\" name=\"{$optionKey}\" value=\"{$currentValue}\"></div>";
$v .= '</div></div>';
if ($standalone) $v .= "</form>";
echo $v;
}
function setAccountList($optionName, $optionDesc, $level, $optionKey, $optionValue, $currentValue, $required = false, $standalone = false)
{
global $g5;
$sql = "SELECT mb_id, mb_nick FROM {$g5['member_table']} WHERE mb_level >= '{$level}' ";
$required_option = $required ? " required" : "";
$currentValue = getCurrentValue($optionKey, $currentValue);
$v = "";
$desc = $optionDesc ? "<div class=\"adm-form-desc\">{$optionDesc}</div>" : "";
$result = sql_query($sql);
if ($standalone) $v .= "<form>";
$v .= '<div class="adm-form adm-form-rowflex">';
$v .= "<div class=\"adm-form-flex-full\"><div class=\"adm-form-name\">{$optionName}</div>{$desc}</div>";
$v .= '<div class="adm-form-input">';
$v .= "<div class=\"adm-form-select\"><select id=\"{$optionKey}\" name=\"{$optionKey}\"{$required_option}><option value=\"\">미선택</option>";
for ($i = 0; $row = sql_fetch_array($result); $i++) {
$selected = $row['mb_id'] == $currentValue ? " selected" : "";
$v .= "<option value=\"{$row['mb_id']}\"{$selected}>{$row['mb_nick']} ({$row['mb_id']})</option>";
}
$v .= "</select></div>";
$v .= '</div></div>';
if ($standalone) $v .= "</form>";
echo $v;
}
function setOptionList($optionName, $optionDesc, $optionListObject, $optionKey, $optionValue, $currentValue, $required = false, $standalone = false)
{
global $g5;
$required_option = $required ? " required" : "";
$currentValue = getCurrentValue($optionKey, $currentValue);
$v = "";
$desc = $optionDesc ? "<div class=\"adm-form-desc\">{$optionDesc}</div>" : "";
if ($standalone) $v .= "<form>";
$v .= "<div class=\"adm-form adm-form-rowflex\">
<div class=\"adm-form-flex-full\">
<div class=\"adm-form-name\">{$optionName}</div>{$desc}
</div>
<div class=\"adm-form-input\">
<div class=\"adm-form-select\">
<select id=\"{$optionKey}\" name=\"{$optionKey}\"{$required_option}>";
foreach($optionListObject as $val => $text) {
$selected = $val == $currentValue ? " selected" : "";
$v .= " <option value=\"{$val}\"{$selected}>{$text}</option>";
}
$v .= " </select>
</div>
</div>
</div>";
if ($standalone) $v .= "</form>";
echo $v;
}
function setImageFile($optionName, $optionDesc, $optionKey, $currentValue, $standalone = false)
{
$currentValue = getCurrentValue($optionKey, $currentValue);
$v = "";
$desc = $optionDesc ? "<div class=\"adm-form-desc\">{$optionDesc}<br>파일을 선택하거나 주소를 입력하여 등록할 수 있습니다. 주소 입력을 비워두면 설정이 해제됩니다.</div>" : "";
if ($standalone) $v .= "<form>";
$v .= "<div class=\"adm-form adm-form-rowflex\">
<div class=\"adm-form-flex-full\">
<div class=\"adm-form-name\">{$optionName}</div>{$desc}
</div>
<div class=\"adm-form-input\">
<div class=\"adm-form-file\">
<div class=\"adm-form-fileinput\">
<span>직접 선택</span>
<input type=\"file\" name=\"{$optionKey}_file\" value=\"\">
</div>
<div class=\"adm-form-filetext\">
<span>파일 URL</span>
<input type=\"text\" name=\"{$optionKey}\" value=\"{$currentValue}\">
</div>
</div>
</div>
</div>";
if ($standalone) $v .= "</form>";
echo $v;
}
function setListEditInput($optionName, $optionDesc, $optionKey, $currentValue, $separator = "\n", $placeholder = "", $standalone = false)
{
$currentValue = getCurrentValue($optionKey, $currentValue);
$v = "";
$desc = $optionDesc ? "<div class=\"adm-form-desc\">{$optionDesc}</div>" : "";
$itemList = [];
if (!empty($currentValue)) {
$itemList = array_filter(array_map('trim', explode($separator, $currentValue)));
}
$jsSeparator = addslashes($separator);
if ($standalone) $v .= "<form>";
$v .= "<div class=\"adm-form adm-form-rowflex\">
<div class=\"adm-form-flex-full\">
<div class=\"adm-form-name\">{$optionName}</div>{$desc}
</div>
<div class=\"adm-form-input\">
<div class=\"adm-form-listedit\" id=\"{$optionKey}_container\" data-separator=\"{$jsSeparator}\">
<div class=\"adm-listedit-items\" id=\"{$optionKey}_items\">";
if (!empty($itemList)) {
foreach ($itemList as $index => $item) {
$v .= "
<div class=\"adm-listedit-item\">
<input type=\"text\" value=\"" . htmlspecialchars($item) . "\" placeholder=\"{$placeholder}\">
<button type=\"button\" class=\"adm-listedit-remove\" onclick=\"removeListItem(this)\">삭제</button>
</div>";
}
}
$v .= "
</div>
<div class=\"adm-listedit-controls\">
<input type=\"text\" id=\"{$optionKey}_items_new\" value=\"\" placeholder=\"{$placeholder}\">
<button type=\"button\" class=\"adm-listedit-add\" onclick=\"addListItem('{$optionKey}_items', '{$placeholder}')\">추가</button>
</div>
<input type=\"hidden\" name=\"{$optionKey}\" id=\"{$optionKey}_hidden\" value=\"" . htmlspecialchars($currentValue) . "\">
</div>
</div>
</div>";
if ($standalone) $v .= "</form>";
echo $v;
}

View file

@ -2,6 +2,8 @@
if (!defined('_GNUBOARD_'))
exit;
include_once "./admin.amber.lib.php";
function get_skin_select($skin_gubun, $id, $name, $selected = '', $event = '')
{
global $config;

View file

@ -69,7 +69,7 @@ if (!$config["cf_community"] || !$is_community_init) {
</table>
<?php if (!$is_community_init) {?>
<div class="list_confirm">
<a href="./_create_community_db.php">DB TABLE 생성</a>
<a href="./migrate/_create_community_db.php">DB TABLE 생성</a>
</div>
<?php } ?>
<?php if (!$config["cf_community"]) {?>
@ -87,38 +87,13 @@ if (!$config["cf_community"] || !$is_community_init) {
<p>커뮤니티용 기능에 필요한 설정입니다.</p>
</div>
<div class="tbl_frm01 tbl_wrap">
<table>
<caption>홈페이지 기본환경 설정</caption>
<colgroup>
<col style="width: 150px;">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row">공개설정</th>
<td>
<input type="checkbox" name="cf_2" value="1" id="cf_2" <?php echo $config['cf_2'] ? 'checked' : ''; ?>>
<label for="cf_2">캐릭터생성 가능</label>
&nbsp;&nbsp;
<input type="checkbox" name="cf_3" value="1" id="cf_3" <?php echo $config['cf_3'] ? 'checked' : ''; ?>>
<label for="cf_3">캐릭터수정 가능</label>
</td>
</tr>
<tr>
<th scope="row">기능설정</th>
<td>
<input type="checkbox" name="cf_4" value="1" id="cf_4" <?php echo $config['cf_4'] ? 'checked' : ''; ?>>
<label for="cf_4">탐색사용</label>
&nbsp;&nbsp;
<input type="checkbox" name="cf_5" value="1" id="cf_5" <?php echo $config['cf_5'] ? 'checked' : ''; ?>>
<label for="cf_5">조합(레시피)사용</label>
&nbsp;&nbsp;
<input type="checkbox" name="cf_6" value="1" id="cf_6" <?php echo $config['cf_6'] ? 'checked' : ''; ?>>
<label for="cf_6">탐색 수행 가능</label>
</td>
</tr>
</tbody>
</table>
<?php
setCheckbox("캐릭터 생성 허용", "값을 설정하는 경우 회원은 새 캐릭터를 작성할 수 있습니다.", "cf_2", "1", $config);
setCheckbox("캐릭터 수정 허용", "값을 설정하는 경우 회원은 캐릭터를 수정할 수 있습니다.", "cf_3", "1", $config);
setCheckbox("탐색 기능 사용", "탐색 기능을 사용할 지 설정합니다.<br>관련된 플러그인, 애드온, 모듈과 그것을 지원하는 스킨이 설치되어 있어야 합니다.", "cf_4", "1", $config);
setCheckbox("조합 기능 사용", "조합 기능을 사용할 지 설정합니다.<br>관련된 플러그인, 애드온, 모듈과 그것을 지원하는 스킨이 설치되어 있어야 합니다.", "cf_5", "1", $config);
setCheckbox("탐색 수행 가능 여부 설정", "탐색을 수행할 수 있는지 여부를 설정합니다.<br>관련된 플러그인, 애드온, 모듈과 그것을 지원하는 스킨이 설치되어 있어야 합니다.", "cf_6", "1", $config);
?>
</div>
</section>
<?php echo $frm_submit; ?>
@ -126,36 +101,11 @@ if (!$config["cf_community"] || !$is_community_init) {
<h2 class="h2_frm">기능 설정</h2>
<?php echo $pg_anchor ?>
<div class="tbl_frm01 tbl_wrap">
<table>
<colgroup>
<col style="width: 150px;">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row">캐릭터 최대 생성 갯수</th>
<td>
<input type="text" name="cf_character_count" value="<?php echo get_text($config['cf_character_count']) ?>"
id="cf_character_count" size="10">
</td>
</tr>
<tr>
<th scope="row">최초 스탯 포인트</th>
<td>
<?php echo help('스탯 사용 설정 시, 캐릭터가 최초로 획득하는 스탯 포인트를 설정합니다.') ?>
<input type="text" name="cf_status_point" value="<?php echo get_text($config['cf_status_point']) ?>"
id="cf_status_point" size="10">
</td>
</tr>
<tr>
<th scope="row">하루 탐색 횟수</th>
<td>
<input type="text" name="cf_search_count" value="<?php echo get_text($config['cf_search_count']) ?>"
id="cf_search_count" size="10">
</td>
</tr>
</tbody>
</table>
<?php
setNumberInput("캐릭터 최대 보유 수", "회원이 보유할 수 있는 캐릭터의 허용 인원을 설정합니다.", "cf_character_count", $config, "", "", 0);
setNumberInput("초기 스탯 포인트", "스탯 사용 설정 시 초기에 캐릭터가 보유할 포인트 양을 설정합니다.", "cf_status_point", $config, "", $config['cf_money_pice'], 0);
setNumberInput("일일 탐색 횟수 제한", "탐색 기능을 사용하는 경우 하루에 얼마나 탐색을 진행할 수 있는지 설정합니다.<br>관련된 플러그인, 애드온, 모듈과 그것을 지원하는 스킨이 설치되어 있어야 합니다.", "cf_search_count", $config, "", "", 0);
?>
</div>
</section>
<?php echo $frm_submit; ?>
@ -163,89 +113,17 @@ if (!$config["cf_community"] || !$is_community_init) {
<h2 class="h2_frm">기타 항목명 설정</h2>
<?php echo $pg_anchor ?>
<div class="tbl_frm01 tbl_wrap">
<table>
<colgroup>
<col style="width: 150px;">
<col style="width: 100px;">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row" rowspan="2"><?= $config['cf_money'] ? $config['cf_money'] : "(포인트)" ?> 설정</th>
<td>명칭</td>
<td>
<input type="text" name="cf_money" value="<?php echo get_text($config['cf_money']) ?>" id="cf_money"
size="30">
</td>
</tr>
<tr>
<td>단위</td>
<td>
<input type="text" name="cf_money_pice" value="<?php echo get_text($config['cf_money_pice']) ?>"
id="cf_money_pice" size="30">
</td>
</tr>
<tr>
<th scope="row" rowspan="2"><?= $config['cf_exp_name'] ? $config['cf_exp_name'] : "(경험치)" ?> 설정</th>
<td>명칭</td>
<td>
<input type="text" name="cf_exp_name" value="<?php echo get_text($config['cf_exp_name']) ?>"
id="cf_exp_name" size="30">
</td>
</tr>
<tr>
<td>단위</td>
<td>
<input type="text" name="cf_exp_pice" value="<?php echo get_text($config['cf_exp_pice']) ?>"
id="cf_exp_pice" size="30">
</td>
</tr>
<tr>
<th scope="row"><?= $config['cf_rank_name'] ? $config['cf_rank_name'] : "(랭크)" ?> 설정</th>
<td>명칭</td>
<td>
<input type="text" name="cf_rank_name" value="<?php echo get_text($config['cf_rank_name']) ?>"
id="cf_rank_name" size="30">
</td>
</tr>
<tr>
<th scope="row"><?= $config['cf_side_title'] ? $config['cf_side_title'] : "(소속)" ?> (선택A)설정</th>
<td>명칭</td>
<td>
<?php echo help('명칭이 입력되지 않을 시, 프로필에 출력되지 않습니다.') ?>
<input type="text" name="cf_side_title" value="<?php echo get_text($config['cf_side_title']) ?>"
id="cf_side_title" size="30">
</td>
</tr>
<tr>
<th scope="row"><?= $config['cf_class_title'] ? $config['cf_class_title'] : "(클래스)" ?> (선택B)설정</th>
<td>명칭</td>
<td>
<?php echo help('명칭이 입력되지 않을 시, 프로필에 출력되지 않습니다.') ?>
<input type="text" name="cf_class_title" value="<?php echo get_text($config['cf_class_title']) ?>"
id="cf_class_title" size="30">
</td>
</tr>
<tr>
<th scope="row">상점 카테고리</th>
<td>-</td>
<td>
<?php echo help('카테고리 구분은 || 를 사용합니다.') ?>
<input type="text" name="cf_shop_category" value="<?php echo get_text($config['cf_shop_category']) ?>"
id="cf_shop_category" size="100" placeholder="예시) 일반||이벤트">
</td>
</tr>
<tr>
<th scope="row">아이템 기능</th>
<td>-</td>
<td>
<?php echo help('기능 구분은 || 를 사용합니다.') ?>
<input type="text" name="cf_item_category" value="<?php echo get_text($config['cf_item_category']) ?>"
id="cf_item_category" size="100" placeholder="예시) 일반||프로필수정||아이템추가||스탯회복">
</td>
</tr>
</tbody>
</table>
<?php
setTextInput("포인트 명칭", "포인트의 이름을 설정합니다.", "cf_money", $config);
setTextInput("포인트 단위", "포인트의 단위를 설정합니다.", "cf_money_pice", $config);
setTextInput("경험치 명칭", "경험치의 이름을 설정합니다.", "cf_exp_name", $config);
setTextInput("경험치 단위", "경험치의 단위를 설정합니다.", "cf_exp_pice", $config);
setTextInput("랭크 명칭", "랭크의 이름을 설정합니다.", "cf_rank_name", $config);
setTextInput("소속 명칭", "소속의 이름을 설정합니다.<br>설정하지 않는 경우 사용하지 않는 것으로 간주됩니다.", "cf_side_title", $config);
setTextInput("클래스 명칭", "클래스의 이름을 설정합니다.<br>설정하지 않는 경우 사용하지 않는 것으로 간주됩니다.", "cf_class_title", $config);
setListEditInput("상점 카테고리", "상점 아이템의 카테고리를 설정합니다.", "cf_shop_category", $config, "||");
setListEditInput("아이템 기능", "아이템 기능을 설정합니다.<br>기능에 할당된 아이템이 있는 상태에서 삭제할 경우 정상 동작을 보장할 수 없습니다.", "cf_item_category", $config, "||");
?>
</div>
</section>
<?php echo $frm_submit; ?>

View file

@ -0,0 +1,257 @@
@charset "utf-8";
.adm-form {
padding: 16px;
border-bottom: 1px solid var(--theme-color-e, #efeff5);
}
.adm-form input,
.adm-form textarea,
.adm-form select {
outline-color: var(--theme-color-e);
}
.adm-form:hover {
background: var(--theme-color-0);
}
.adm-form:last-child {
margin-bottom: 8px;
}
.adm-form-postfix {
min-width: 40px;
text-align: center;
}
.adm-form-colflex {
display: flex;
gap: 8px;
}
.adm-form-rowflex {
display: flex;
gap: 8px;
flex-direction: column;
justify-content: center;
}
.adm-form-colflex .adm-form-flex-full {
flex-grow: 1;
}
.adm-form-name {
font-size: 16px;
font-weight: bold;
}
.adm-form-desc {
margin: 8px 0 0 0;
font-size: 14px;
}
.adm-form-check {
position: relative;
width: 48px;
height: 24px;
margin: 4px 0;
}
.adm-form-check input[type=checkbox] {
width: 48px;
height: 24px;
position: relative;
cursor: pointer;
opacity: 0;
}
.adm-form-check input[type=checkbox]+.adm-form-checkbox-cover {
pointer-events: none;
box-shadow: inset 0 0 3px #0004;
background: #DDD;
width: 48px;
height: 24px;
border-radius: 24px;
position: absolute;
left: 0;
top: 0;
display: flex;
justify-content: center;
transition: .25s;
}
.adm-form-check input[type=checkbox]+.adm-form-checkbox-cover::before {
content: "";
height: 18px;
width: 18px;
border-radius: 50%;
background: #FFF;
box-shadow: 0 0 3px #0004;
transform: translateX(-12px) translateY(3px);
box-sizing: border-box;
transition: .25s;
}
.adm-form-check input[type=checkbox]:checked+.adm-form-checkbox-cover {
background: var(--theme-color-e, #06C);
}
.adm-form-check input[type=checkbox]:checked+.adm-form-checkbox-cover::before {
transform: translateX(12px) translateY(3px);
}
.adm-form-select {
padding: 4px;
}
.adm-form-select select {
width: 100%;
box-sizing: border-box;
cursor: pointer;
border: 1px solid var(--theme-color-e, #efeff5);
border-radius: 4px;
padding: 8px;
height: auto
}
.adm-form-text {
padding: 4px;
}
.adm-form-text input[type=text] {
border: 1px solid var(--theme-color-e, #efeff5);
padding: 8px;
border-radius: 4px;
height: auto;
width: 100%;
box-sizing: border-box;
}
.adm-form-file {
display: flex;
flex-direction: column;
gap: 8px;
}
.adm-form-file>div {
display: flex;
gap: 8px;
align-items: center;
}
.adm-form-file div>span {
display: inline-block;
min-width: 80px;
font-size: 14px;
}
.adm-form-file div>input {
flex-grow: 1;
box-sizing: border-box;
border: 1px solid var(--theme-color-e, #efeff5);
padding: 8px;
border-radius: 4px;
height: auto;
}
.adm-form-file div>input[type=file] {
cursor: pointer;
}
.adm-form-listedit {
width: 100%;
}
.adm-form-listedit .adm-listedit-controls {
display: flex;
align-items: center;
gap: 8px;
}
.adm-listedit-items {
display: flex;
flex-direction: column;
gap: 8px;
margin-bottom: 8px;
overflow-y: auto;
max-height: 360px;
box-sizing: border-box;
border: 1px solid var(--theme-color-e, #efeff5);
border-radius: 4px;
padding: 8px;
}
.adm-listedit-item {
display: flex;
align-items: center;
gap: 8px;
}
.adm-form-listedit input[type=text] {
flex-grow: 1;
padding: 8px;
flex-grow: 1;
box-sizing: border-box;
border: 1px solid var(--theme-color-e, #efeff5);
border-radius: 4px;
}
.adm-listedit-remove,
.adm-listedit-add {
min-width: 100px;
align-self: stretch;
border: 1px solid #ddd;
background: #f8f8f8;
cursor: pointer;
border-radius: 4px;
font-size: 14px;
white-space: nowrap;
}
.adm-listedit-remove:hover,
.adm-listedit-add:hover {
background: #e8e8e8;
}
.adm-listedit-remove {
background: var(--theme-color-sub-b, #ff6b6b);
color: #000;
border-color: var(--theme-color-sub, #ff5252);
}
.adm-listedit-remove:hover {
color: #FFF;
background: var(--theme-color-sub, #ff6b6b);
}
.adm-listedit-add {
background: var(--theme-color-e, #4CAF50);
color: #000;
border-color: var(--theme-color-d, #45a049);
}
.adm-listedit-add:hover {
color: #FFF;
background: var(--theme-color-d, #45a049);
}
.adm-listedit-controls {
text-align: left;
}
.adm-form-number {
padding: 4px;
display: flex;
align-items: center;
gap: 8px
}
.adm-form-number input[type=number] {
border: 1px solid var(--theme-color-e, #efeff5);
padding: 8px;
border-radius: 4px;
height: auto;
width: 80px;
min-width: 60px;
box-sizing: border-box;
}

View file

@ -394,7 +394,7 @@ if ($check_manner || $check_manner2) {
var mb_id = $(obj).attr('data-mbid');
var sendData = { s_date: s_date, e_date: e_date, s_board: s_board, mb_id: mb_id };
var url = g5_url + "/adm/modules/action/action_manner_search.php";
var url = g5_url + "/adm/items/action/action_manner_search.php";
$.ajax({
type: 'post'

View file

@ -0,0 +1,12 @@
<?php
define('G5_IS_ADMIN', true);
include_once "../../../common.php";
include_once G5_ADMIN_PATH . '/admin.lib.php';
if (isset($token)) {
$token = @htmlspecialchars(strip_tags($token), ENT_QUOTES);
}
EventHandler::triggerEvent("gnuboard.admin.load_common");

View file

@ -1,5 +1,5 @@
<?php
include_once __DIR__ . '/_common.php';
include_once './_common.php';
include_once G5_EDITOR_LIB;
if ($is_admin != 'super') {
@ -15,7 +15,7 @@ if (!sql_fetch_array(sql_query("DESC {$g5['addons_config_table']}"))) {
}
$g5['title'] = "애드온 설정";
include_once __DIR__ . '/admin.head.php';
include_once G5_ADMIN_PATH . '/admin.head.php';
add_stylesheet(get_embed_file("css", G5_PATH . "/adm/css/addon_config.css"), 1);
?>
@ -104,4 +104,4 @@ add_stylesheet(get_embed_file("css", G5_PATH . "/adm/css/addon_config.css"), 1);
</section>
</section>
<?php
include_once __DIR__ . '/admin.tail.php';
include_once G5_ADMIN_PATH . '/admin.tail.php';

View file

@ -1,5 +1,5 @@
<?php
include_once __DIR__ . '/_common.php';
include_once './_common.php';
if ($is_admin != 'super') {
alert_close('최고관리자만 접근 가능합니다.');

View file

@ -32,7 +32,7 @@ $result = sql_query($sql);
$g5['title'] = "에디터 폰트 관리";
include_once __DIR__ . '/admin.head.php';
include_once G5_ADMIN_PATH . "/admin.head.php";
EventHandler::triggerEvent("amber.admin.editor_font_form_before");
?>
@ -188,4 +188,4 @@ EventHandler::triggerEvent("amber.admin.editor_font_form_before");
</script>
<?php
EventHandler::triggerEvent("amber.admin.editor_font_form_after");
include_once __DIR__ . '/admin.tail.php';
include_once G5_ADMIN_PATH . '/admin.tail.php';

View file

@ -1,6 +1,5 @@
<?php
include_once "./_common.php";
include_once __DIR__ . '/_common.php';
if ($is_admin != 'super') {
alert('최고관리자만 접근 가능합니다.');

View file

@ -1,5 +1,5 @@
<?php
include_once "./_common.php";
include_once __DIR__ . '/_common.php';
if ($is_admin != 'super')
alert_close('최고관리자만 접근 가능합니다.');

View file

@ -1,5 +1,5 @@
<?php
include_once "./_common.php";
include_once __DIR__ . '/_common.php';
if ($is_admin != 'super')
die('최고관리자만 접근 가능합니다.');

View file

@ -1,5 +1,5 @@
<?php
include_once "./_common.php";
include_once __DIR__ . '/_common.php';
if ($is_admin != 'super')
alert('최고관리자만 접근 가능합니다.');
@ -30,7 +30,7 @@ $sql = "SELECT * FROM {$g5['menu_table']} order by me_order*1, me_id ";
$result = sql_query($sql);
$g5['title'] = "메뉴설정";
include_once "./admin.head.php";
include_once G5_ADMIN_PATH . "/admin.head.php";
$colspan = 11;
?>
<style>
@ -99,7 +99,7 @@ $colspan = 11;
display: flex;
justify-content: center;
align-items: center;
border:1px solid #E0E0E0;
border: 1px solid #E0E0E0;
background-size: cover;
}
@ -201,9 +201,9 @@ $colspan = 11;
<div class="al_menu">
<span class="al_label">Material Icon</span>
<input type="text" name="me_icon[]" value="<?php echo get_text($row['me_icon']) ?>"
class=" frm_input full_input" />
class=" frm_input full_input" />
</div>
<div class="al_menu al_center" style="width: 60px; background-image: url('<?=$row['me_img']?>');">
<div class="al_menu al_center" style="width: 60px; background-image: url('<?= $row['me_img'] ?>');">
</div>
<div class="al_menu">
<span class="al_label">통상 이미지</span>
@ -215,7 +215,7 @@ $colspan = 11;
<input type="text" name="me_img[]" value="<?php echo $row['me_img'] ?>" id="me_img_<?php echo $i; ?>"
class=" frm_input full_input" style="width:80%">
</div>
<div class="al_menu al_center" style="width: 60px; background-image: url('<?=$row['me_img2']?>');">
<div class="al_menu al_center" style="width: 60px; background-image: url('<?= $row['me_img2'] ?>');">
</div>
<div class="al_menu">
<span class="al_label">마우스 오버 이미지</span>
@ -304,7 +304,6 @@ $colspan = 11;
return true;
}
</script>
<?php
include_once "./admin.tail.php";
?>
include_once G5_ADMIN_PATH . "/admin.tail.php";

View file

@ -1,5 +1,5 @@
<?php
include_once "./_common.php";
include_once __DIR__ . '/_common.php';
check_demo();

View file

@ -0,0 +1,12 @@
<?php
define('G5_IS_ADMIN', true);
include_once "../../common.php";
include_once G5_ADMIN_PATH . '/admin.lib.php';
if (isset($token)) {
$token = @htmlspecialchars(strip_tags($token), ENT_QUOTES);
}
EventHandler::triggerEvent("gnuboard.admin.load_common");

View file

@ -231,8 +231,9 @@ $g5['title'] = '환경설정';
include_once "./admin.head.php";
$pg_anchor = '<ul class="anchor">
<li><a href="#anc_001">기본환경</a></li>
<li><a href="#anc_002">게시판/회원</a></li>
<li><a href="#anc_001">서버정보</a></li>
<li><a href="#anc_002">기본환경</a></li>
<li><a href="#anc_003">게시판/회원</a></li>
<li><a href="#anc_010">레이아웃 추가설정</a></li>
</ul>';
@ -244,6 +245,37 @@ if (!$config['cf_icode_server_port'])
if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) {
$userinfo = get_icode_userinfo($config['cf_icode_id'], $config['cf_icode_pw']);
}
function getDiskUsage($path = '/')
{
$bytes = disk_total_space($path);
$free = disk_free_space($path);
$used = $bytes - $free;
return [
'total' => $bytes,
'free' => $free,
'used' => $used,
'usage_percent' => round(($used / $bytes) * 100, 2)
];
}
function formatBytes($bytes, $precision = 2)
{
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
for ($i = 0; $bytes > 1024 && $i < count($units) - 1; $i++) {
$bytes /= 1024;
}
return round($bytes, $precision) . ' ' . $units[$i];
}
function getWebServerDiskUsage()
{
// $documentRoot = $_SERVER['DOCUMENT_ROOT'] ?? '/var/www/html';
return getDiskUsage();
}
?>
<form name="fconfigform" id="fconfigform" method="post" onsubmit="return fconfigform_submit(this);"
enctype="multipart/form-data">
@ -255,173 +287,71 @@ if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) {
</div>
</div>
<section id="anc_001">
<h2 class="h2_frm">서버 정보</h2>
<?php echo $pg_anchor ?>
<?php
echo "<h3>디스크 용량</h3>";
$webDiskUsage = getWebServerDiskUsage();
echo "총 용량: " . formatBytes($webDiskUsage['total']) . "<br>";
echo "사용 중: " . formatBytes($webDiskUsage['used']) . "<br>";
echo "사용 가능: " . formatBytes($webDiskUsage['free']) . "<br>";
echo "사용률: " . $webDiskUsage['usage_percent'] . "%<br>";
?>
</section>
<section id="anc_002">
<h2 class="h2_frm">홈페이지 기본환경 설정</h2>
<?php echo $pg_anchor ?>
<div class="tbl_frm01 tbl_wrap">
<table>
<caption>홈페이지 기본환경 설정</caption>
<colgroup>
<col class="grid_4">
<col class="grid_10">
<col class="grid_4">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row"><label for="cf_admin">최고관리자<strong class="sound_only">필수</strong></label></th>
<td><?php echo get_member_id_select('cf_admin', 10, $config['cf_admin'], 'required') ?></td>
<th scope="row">공개설정</th>
<td>
<input type="checkbox" name="cf_open" value="1" id="cf_open" <?php echo $config['cf_open'] ? 'checked' : ''; ?>>
<label for="cf_open">사이트공개</label>
&nbsp;&nbsp;
<input type="checkbox" name="cf_1" value="1" id="cf_1" <?php echo $config['cf_1'] ? 'checked' : ''; ?>>
<label for="cf_1">계정생성 가능</label>
</td>
</tr>
<tr>
<th scope="row">홈페이지 제목</th>
<td>
<input type="text" name="cf_title" value="<?php echo $config['cf_title'] ?>" id="cf_title" required
class="required" size="40">
</td>
<th>사이트설명</th>
<td>
<input type="text" name="cf_site_descript" value="<?php echo $config['cf_site_descript'] ?>" size="50" />
</td>
</tr>
<tr>
<th>커뮤니티 기능 사용</th>
<td colspan="3">
<?php echo help('데이터베이스를 설정했더라도 사용하지 않음 상태인 경우 관련 메뉴가 출력되지 않습니다.') ?>
<input type="checkbox" name="cf_community" value="1" id="cf_community" <?php echo $config['cf_community'] ? 'checked' : ''; ?>>
</td>
</tr>
<tr>
<th>파비콘</th>
<td colspan="3">
<?php echo help('파비콘 확장자는 ico 로 등록해 주셔야 적용됩니다.') ?>
직접등록&nbsp;&nbsp; <input type="file" name="cf_favicon_file" value="" size="50"
style="border:1px solid #ddd;">
&nbsp;&nbsp;
외부경로&nbsp;&nbsp; <input type="text" name="cf_favicon" value="<?= $config['cf_favicon'] ?>" size="50" />
</td>
</tr>
<tr>
<th>커서</th>
<td colspan="3">
<?php echo help('홈페이지의 커서로 사용할 이미지를 등록해주세요.') ?>
직접등록&nbsp;&nbsp; <input type="file" name="cf_cursor_file" value="" size="50">
&nbsp;&nbsp;
외부경로&nbsp;&nbsp; <input type="text" name="cf_cursor" value="<?= $config['cf_cursor'] ?>" size="50" />
</td>
</tr>
<tr>
<th>사이트이미지</th>
<td colspan="3">
<?php echo help('사이트 링크 추가시, SNS에서 미리보기로 뜨는 썸네일 이미지를 등록합니다. 290px * 160px 파일로 업로드해 주시길 바랍니다.') ?>
직접등록&nbsp;&nbsp; <input type="file" name="cf_site_img_file" value="" size="50">
&nbsp;&nbsp;
외부경로&nbsp;&nbsp; <input type="text" name="cf_site_img" value="<?= $config['cf_site_img'] ?>" size="50" />
</td>
</tr>
<tr>
<th scope="row"><label for="site_back">배경음악</label></th>
<td colspan="3">
<?php echo help('유튜브 재생목록 아이디 (https://www.youtube.com/watch?list=재생목록고유아이디) 를 입력해 주세요.') ?>
<input type="text" name="cf_bgm" value="<?php echo $config['cf_bgm'] ?>" id="cf_bgm" size="50">
</td>
</tr>
<tr>
<th scope="row"><label for="cf_possible_ip">접근가능 IP</label></th>
<td colspan="3">
<?php echo help('입력된 IP의 컴퓨터만 접근할 수 있습니다.<br>123.123.+ 도 입력 가능. (엔터로 구분)') ?>
<textarea name="cf_possible_ip" id="cf_possible_ip" rows="2"
style="height:100px;"><?php echo $config['cf_possible_ip'] ?></textarea>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_intercept_ip">접근차단 IP</label></th>
<td colspan="3">
<?php echo help('입력된 IP의 컴퓨터는 접근할 수 없음.<br>123.123.+ 도 입력 가능. (엔터로 구분)') ?>
<textarea name="cf_intercept_ip" id="cf_intercept_ip" rows="2"
style="height:100px;"><?php echo $config['cf_intercept_ip'] ?></textarea>
</td>
</tr>
<tr>
<th>접속설정</th>
<td colspan="3">
<?php echo help('로그인이 제대로 안된다거나 화면이 안나오다 나올때 설정하세요') ?>
<input type="checkbox" name="cf_use_http" value="1" id="cf_use_http" <?php echo $config['cf_use_http'] ? 'checked' : ''; ?>>
<label for="cf_use_http">http:// 고정하기</label>
</td>
</tr>
</tbody>
</table>
<?php
$sql = "SELECT mb_id, mb_nick FROM {$g5['member_table']} WHERE mb_level >= '{$level}' ";
$accounts = sql_query($sql);
$accountList = [];
while($row = sql_fetch_array($accounts)) {
$accountList[$row['mb_id']] = "{$row['mb_nick']} ({$row['mb_id']})";
}
setOptionList("최고관리자", "홈페이지의 최고 관리자 계정을 지정합니다.", $accountList, "cf_admin", '', $config, true);
setTextInput("홈페이지 이름", "", "cf_title", $config);
setTextInput("홈페이지 설명", "", "cf_site_descript", $config);
setCheckbox("홈페이지 공개", "로그인을 하지 않아도 홈페이지를 확인할 수 있도록 설정합니다.", "cf_open", "1", $config);
setCheckbox("계정 생성", "홈페이지 가입이 가능하도록 설정합니다.", "cf_1", "1", $config);
setCheckbox("커뮤니티 기능", "홈페이지 내에 커뮤니티 관련 기능을 활성화 합니다.<br>데이터베이스를 설정했더라도 <b>사용하지 않음</b> 상태인 경우 관련 메뉴가 출력되지 않습니다.", "cf_community", "1", $config);
setImageFile("파비콘 설정", "홈페이지에 적용할 파비콘 이미지를 설정합니다.", "cf_favicon", $config);
setImageFile("커서 설정", "홈페이지에 적용할 커서 이미지를 설정합니다.", "cf_cursor", $config);
setImageFile("SNS 카드 이미지 설정", "SNS등에서 링크 시 카드 이미지에 등록될 이미지를 설정합니다. 290px × 160px 크기로 설정하는 것이 좋습니다.", "cf_site_img", $config);
setListEditInput("접근 가능 IP", "입력된 IP의 컴퓨터만 접근할 수 있습니다. 123.123.+ 도 입력 가능.", "cf_possible_ip", $config, "\n");
setListEditInput("접근 차단 IP", "입력된 IP의 컴퓨터는 접근할 수 없음. 123.123.+ 도 입력 가능.", "cf_intercept_ip", $config, "\n");
setCheckbox("보안 연결(https) 강제 비활성화", "<b>※ 이 옵션을 사용하는 경우 제3자에 의해 홈페이지와 통신하는 내용이 감청될 가능성이 있습니다.</b><br>호스팅 환경이 정상적으로 https 를 지원하지 않는 경우에만 설정하세요.", "cf_use_http", "1", $config);
?>
</div>
</section>
<?php echo $frm_submit; ?>
<section id="anc_002">
<section id="anc_003">
<h2 class="h2_frm">게시판/회원 기본 설정</h2>
<?php echo $pg_anchor ?>
<div class="local_desc02 local_desc">
<p> 게시판 관리에서 개별적으로 설정 가능합니다.</p>
</div>
<div class="tbl_frm01 tbl_wrap">
<table>
<caption>게시판 기본 설정</caption>
<colgroup>
<col class="grid_4">
<col class="grid_10">
<col class="grid_4">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row"><label for="cf_delay_sec">글쓰기 간격<strong class="sound_only">필수</strong></label></th>
<td><input type="text" name="cf_delay_sec" value="<?php echo $config['cf_delay_sec'] ?>" id="cf_delay_sec"
required class="required numeric frm_input" size="3"> 지난후 가능</td>
<th scope="row"><label for="cf_link_target">새창 링크</label></th>
<td>
<?php echo help('글내용중 자동 링크되는 타켓을 지정합니다.') ?>
<select name="cf_link_target" id="cf_link_target">
<option value="_blank" <?php echo get_selected($config['cf_link_target'], '_blank') ?>>_blank</option>
<option value="_self" <?php echo get_selected($config['cf_link_target'], '_self') ?>>_self</option>
<option value="_top" <?php echo get_selected($config['cf_link_target'], '_top') ?>>_top</option>
<option value="_new" <?php echo get_selected($config['cf_link_target'], '_new') ?>>_new</option>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_filter">단어 필터링</label></th>
<td colspan="3">
<?php echo help('입력된 단어가 포함된 내용은 게시할 수 없습니다. 단어와 단어 사이는 ,로 구분합니다.') ?>
<textarea name="cf_filter" id="cf_filter" rows="7"><?php echo $config['cf_filter'] ?></textarea>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_member_skin">회원 스킨<strong class="sound_only">필수</strong></label></th>
<td>
<?php echo get_skin_select('member', 'cf_member_skin', 'cf_member_skin', $config['cf_member_skin'], 'required'); ?>
</td>
<th scope="row"><label for="cf_register_level">회원가입시 권한</label></th>
<td><?php echo get_member_level_select('cf_register_level', 1, 9, $config['cf_register_level']) ?></td>
</tr>
<tr>
<th scope="row" id="th310"><label for="cf_leave_day">회원탈퇴후 삭제일</label></th>
<td colspan="3"><input type="text" name="cf_leave_day" value="<?php echo $config['cf_leave_day'] ?>"
id="cf_leave_day" class="frm_input" size="2"> 자동 삭제</td>
</tr>
<tr>
<th scope="row"><label for="cf_prohibit_id">아이디,닉네임 금지단어</label></th>
<td colspan="3">
<?php echo help('회원아이디, 닉네임으로 사용할 수 없는 단어를 정합니다. 쉼표 (,) 로 구분') ?>
<textarea name="cf_prohibit_id" id="cf_prohibit_id" rows="3"
style="height:100px;"><?php echo $config['cf_prohibit_id'] ?></textarea>
</td>
</tr>
</tbody>
</table>
<?php
$herfList = [
"_blank" => "_blank",
"_self" => "_self",
"_top" => "_top",
"_new" => "_new"
];
$memberSkinList = array_merge(['' => '선택'], getSkinList('member'));
$memberLevelList = getMemberLevels();
setOptionList("새 창 링크 시 동작 선택", "글 내용 중 자동으로 링크를 변환할 때 동작 방식을 결정합니다.", $herfList, "cf_link_target", '', $config, true);
setNumberInput("글쓰기 간격", "게시글 도배 방지를 위해 글 작성이 가능한 최소 시간을 설정합니다.", "cf_delay_sec", $config, "", "초 이후 가능");
setListEditInput("단어 필터링", "입력된 단어가 포함된 내용은 게시할 수 없습니다.", "cf_filter", $config, ",");
setOptionList("회원 스킨", "", $memberSkinList, "cf_member_skin", '', $config, true);
setOptionList("회원 기본 권한", "", $memberLevelList, "cf_register_level", '', $config, true);
setListEditInput("아이디 및 닉네임 금지 단어 설정", "회원아이디, 닉네임으로 사용할 수 없는 단어를 정합니다.", "cf_prohibit_id", $config, ",");
setNumberInput("회원정보 보존 기간", "회원이 탈퇴한 후 회원의 정보를 보존할 기간을 설정합니다. 기본값은 30일 입니다.", "cf_leave_day", $config, "", "일 이후 자동 삭제");
?>
</div>
</section>
<?php echo $frm_submit; ?>

View file

@ -89,6 +89,7 @@ $html_class .= $_COOKIE['header_close'] == 'close' ? " close-header" : "";
if (defined('G5_IS_ADMIN')) {
echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.css') . PHP_EOL;
echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.layout.css') . PHP_EOL;
echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.amber.lib.css') . PHP_EOL;
echo get_embed_file("css", G5_ADMIN_PATH . '/css/amberstone.cp.css') . PHP_EOL;
} else {
if (defined('G5_THEME_PATH') && file_exists(G5_THEME_PATH . "/css/default.css")) {

View file

@ -41,3 +41,5 @@ AvocadoEdition Light 의 구조를 바탕으로 GNUBoard 기능과 함께 재수
- 압축을 풀어 호스팅의 `public` 또는 `www`, `public_html` 폴더에 업로드합니다.
(또는 ssh 로 접속하여 직접 업로드하고 압축을 해제해도 됩니다.)
이후 호스팅 주소로 접속하여 설치 프로그램을 실행합니다.
### ※ 일부 관리자 페이지 관련 수정은 호환되지 않을 수 있습니다.