Compare commits
No commits in common. "98b6c95c8989000a452b7b641628127f5659f16e" and "5a69f51e8628271b5faa4f5e7b26c7826823f8f5" have entirely different histories.
98b6c95c89
...
5a69f51e86
46 changed files with 345 additions and 839 deletions
|
|
@ -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 . "/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 . "/editor_font.php", true, 500, "\F5CB", 0);
|
||||
$menu["config"]->getLastAddedMenu()->addSubFile("/editor_font_update.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 . "/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/addon_config.php", true, 700, "\F4CA", 0);
|
||||
$menu["config"]->addChildMenu("config", "애드온 설정", G5_ADMIN_URL . "/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");
|
||||
|
|
|
|||
|
|
@ -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 . "/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 . "/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 . "/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 . "/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 . "/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 . "/member_nocharacter_list.php", true, 400, "\F35E", 0);
|
||||
$menu["member"]->getLastAddedMenu()->addSubFile("/member_nocharacter_list_update.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");
|
||||
$menu["member"]->addChildMenu("member", "활동량 관리", G5_ADMIN_URL . "/modules/action/index.php", true, 410, "\F809", 0);
|
||||
$menu["member"]->getLastAddedMenu()->addSubFile("/modules/action/action_reply.php");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
include_once './_common.php';
|
||||
include_once __DIR__ . '/_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 G5_ADMIN_PATH . '/admin.head.php';
|
||||
include_once __DIR__ . '/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 G5_ADMIN_PATH . '/admin.tail.php';
|
||||
include_once __DIR__ . '/admin.tail.php';
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
include_once './_common.php';
|
||||
include_once __DIR__ . '/_common.php';
|
||||
|
||||
if ($is_admin != 'super') {
|
||||
alert_close('최고관리자만 접근 가능합니다.');
|
||||
|
|
@ -1,402 +0,0 @@
|
|||
<?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;
|
||||
}
|
||||
|
|
@ -2,8 +2,6 @@
|
|||
if (!defined('_GNUBOARD_'))
|
||||
exit;
|
||||
|
||||
include_once "./admin.amber.lib.php";
|
||||
|
||||
function get_skin_select($skin_gubun, $id, $name, $selected = '', $event = '')
|
||||
{
|
||||
global $config;
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ if (!$config["cf_community"] || !$is_community_init) {
|
|||
</table>
|
||||
<?php if (!$is_community_init) {?>
|
||||
<div class="list_confirm">
|
||||
<a href="./migrate/_create_community_db.php">DB TABLE 생성</a>
|
||||
<a href="./_create_community_db.php">DB TABLE 생성</a>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if (!$config["cf_community"]) {?>
|
||||
|
|
@ -87,13 +87,38 @@ if (!$config["cf_community"] || !$is_community_init) {
|
|||
<p>커뮤니티용 기능에 필요한 설정입니다.</p>
|
||||
</div>
|
||||
<div class="tbl_frm01 tbl_wrap">
|
||||
<?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);
|
||||
?>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
|
||||
<input type="checkbox" name="cf_5" value="1" id="cf_5" <?php echo $config['cf_5'] ? 'checked' : ''; ?>>
|
||||
<label for="cf_5">조합(레시피)사용</label>
|
||||
|
||||
<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>
|
||||
</div>
|
||||
</section>
|
||||
<?php echo $frm_submit; ?>
|
||||
|
|
@ -101,11 +126,36 @@ if (!$config["cf_community"] || !$is_community_init) {
|
|||
<h2 class="h2_frm">기능 설정</h2>
|
||||
<?php echo $pg_anchor ?>
|
||||
<div class="tbl_frm01 tbl_wrap">
|
||||
<?php
|
||||
setNumberInput("캐릭터 최대 보유 수", "회원이 보유할 수 있는 캐릭터의 허용 인원을 설정합니다.", "cf_character_count", $config, "", "명", 0);
|
||||
setNumberInput("초기 스탯 포인트", "스탯 사용 설정 시 초기에 캐릭터가 보유할 포인트 양을 설정합니다.", "cf_status_point", $config, "", $config['cf_money_pice'], 0);
|
||||
setNumberInput("일일 탐색 횟수 제한", "탐색 기능을 사용하는 경우 하루에 얼마나 탐색을 진행할 수 있는지 설정합니다.<br>관련된 플러그인, 애드온, 모듈과 그것을 지원하는 스킨이 설치되어 있어야 합니다.", "cf_search_count", $config, "", "회", 0);
|
||||
?>
|
||||
<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>
|
||||
</div>
|
||||
</section>
|
||||
<?php echo $frm_submit; ?>
|
||||
|
|
@ -113,17 +163,89 @@ if (!$config["cf_community"] || !$is_community_init) {
|
|||
<h2 class="h2_frm">기타 항목명 설정</h2>
|
||||
<?php echo $pg_anchor ?>
|
||||
<div class="tbl_frm01 tbl_wrap">
|
||||
<?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, "||");
|
||||
?>
|
||||
<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>
|
||||
</div>
|
||||
</section>
|
||||
<?php echo $frm_submit; ?>
|
||||
|
|
|
|||
|
|
@ -1,257 +0,0 @@
|
|||
@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;
|
||||
}
|
||||
|
|
@ -32,7 +32,7 @@ $result = sql_query($sql);
|
|||
|
||||
$g5['title'] = "에디터 폰트 관리";
|
||||
|
||||
include_once G5_ADMIN_PATH . "/admin.head.php";
|
||||
include_once __DIR__ . '/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 G5_ADMIN_PATH . '/admin.tail.php';
|
||||
include_once __DIR__ . '/admin.tail.php';
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
<?php
|
||||
include_once __DIR__ . '/_common.php';
|
||||
include_once "./_common.php";
|
||||
|
||||
|
||||
if ($is_admin != 'super') {
|
||||
alert('최고관리자만 접근 가능합니다.');
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
<?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");
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
include_once __DIR__ . '/_common.php';
|
||||
include_once "./_common.php";
|
||||
|
||||
if ($is_admin != 'super')
|
||||
alert_close('최고관리자만 접근 가능합니다.');
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
include_once __DIR__ . '/_common.php';
|
||||
include_once "./_common.php";
|
||||
|
||||
if ($is_admin != 'super')
|
||||
die('최고관리자만 접근 가능합니다.');
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
include_once __DIR__ . '/_common.php';
|
||||
include_once "./_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 G5_ADMIN_PATH . "/admin.head.php";
|
||||
include_once "./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,6 +304,7 @@ $colspan = 11;
|
|||
return true;
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
include_once G5_ADMIN_PATH . "/admin.tail.php";
|
||||
|
||||
<?php
|
||||
include_once "./admin.tail.php";
|
||||
?>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
include_once __DIR__ . '/_common.php';
|
||||
include_once "./_common.php";
|
||||
|
||||
check_demo();
|
||||
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
<?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");
|
||||
|
|
@ -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/items/action/action_manner_search.php";
|
||||
var url = g5_url + "/adm/modules/action/action_manner_search.php";
|
||||
|
||||
$.ajax({
|
||||
type: 'post'
|
||||
|
|
@ -231,9 +231,8 @@ $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_003">게시판/회원</a></li>
|
||||
<li><a href="#anc_001">기본환경</a></li>
|
||||
<li><a href="#anc_002">게시판/회원</a></li>
|
||||
<li><a href="#anc_010">레이아웃 추가설정</a></li>
|
||||
</ul>';
|
||||
|
||||
|
|
@ -245,37 +244,6 @@ 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">
|
||||
|
|
@ -287,71 +255,173 @@ function getWebServerDiskUsage()
|
|||
</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">
|
||||
<?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);
|
||||
?>
|
||||
<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>
|
||||
|
||||
<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 로 등록해 주셔야 적용됩니다.') ?>
|
||||
직접등록 <input type="file" name="cf_favicon_file" value="" size="50"
|
||||
style="border:1px solid #ddd;">
|
||||
|
||||
외부경로 <input type="text" name="cf_favicon" value="<?= $config['cf_favicon'] ?>" size="50" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>커서</th>
|
||||
<td colspan="3">
|
||||
<?php echo help('홈페이지의 커서로 사용할 이미지를 등록해주세요.') ?>
|
||||
직접등록 <input type="file" name="cf_cursor_file" value="" size="50">
|
||||
|
||||
외부경로 <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 파일로 업로드해 주시길 바랍니다.') ?>
|
||||
직접등록 <input type="file" name="cf_site_img_file" value="" size="50">
|
||||
|
||||
외부경로 <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>
|
||||
</div>
|
||||
</section>
|
||||
<?php echo $frm_submit; ?>
|
||||
<section id="anc_003">
|
||||
<section id="anc_002">
|
||||
<h2 class="h2_frm">게시판/회원 기본 설정</h2>
|
||||
<?php echo $pg_anchor ?>
|
||||
<div class="local_desc02 local_desc">
|
||||
<p>각 게시판 관리에서 개별적으로 설정 가능합니다.</p>
|
||||
</div>
|
||||
<div class="tbl_frm01 tbl_wrap">
|
||||
<?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, "", "일 이후 자동 삭제");
|
||||
?>
|
||||
<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>
|
||||
</div>
|
||||
</section>
|
||||
<?php echo $frm_submit; ?>
|
||||
|
|
|
|||
|
|
@ -89,7 +89,6 @@ $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")) {
|
||||
|
|
|
|||
|
|
@ -41,5 +41,3 @@ AvocadoEdition Light 의 구조를 바탕으로 GNUBoard 기능과 함께 재수
|
|||
- 압축을 풀어 호스팅의 `public` 또는 `www`, `public_html` 폴더에 업로드합니다.
|
||||
(또는 ssh 로 접속하여 직접 업로드하고 압축을 해제해도 됩니다.)
|
||||
이후 호스팅 주소로 접속하여 설치 프로그램을 실행합니다.
|
||||
|
||||
### ※ 일부 관리자 페이지 관련 수정은 호환되지 않을 수 있습니다.
|
||||
|
|
|
|||
Loading…
Reference in a new issue