최초 커밋
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
include_once('../common.php');
|
||||
|
||||
// 커뮤니티 사용여부
|
||||
if(defined('G5_COMMUNITY_USE') && G5_COMMUNITY_USE === false) {
|
||||
if (!defined('G5_USE_SHOP') || !G5_USE_SHOP)
|
||||
die('<p>쇼핑몰 설치 후 이용해 주십시오.</p>');
|
||||
|
||||
define('_SHOP_', true);
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_PATH.'/_head.php');
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_PATH.'/_tail.php');
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
// /egbim/bbs/admin_guard.php
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) @session_start();
|
||||
|
||||
if (!function_exists('is_qna_admin')) {
|
||||
function is_qna_admin(): bool {
|
||||
$loginId = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
$allow = [
|
||||
'kjy0426@hanmaceng.co.kr',
|
||||
'b24014@hanmaceng.co.kr',
|
||||
'b23065@hanmaceng.co.kr',
|
||||
'b23008@baroncs.co.kr',
|
||||
'cjy627@hanmaceng.co.kr',
|
||||
'b23072@hanmaceng.co.kr',
|
||||
];
|
||||
$norm = static function($s){ return strtolower(trim((string)$s)); };
|
||||
$loginId = $norm($loginId);
|
||||
foreach ($allow as $id) {
|
||||
if ($loginId === $norm($id)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// ✅ 관리자 아이디 → 고정 이름 매핑
|
||||
function get_admin_display_name($loginId, $fallbackName = null) {
|
||||
$map = [
|
||||
'kjy0426@hanmaceng.co.kr' => '관리자1',
|
||||
'b24014@hanmaceng.co.kr' => '관리자999',
|
||||
'b23065@hanmaceng.co.kr' => '관리자2',
|
||||
'b23008@baroncs.co.kr' => '관리자3',
|
||||
'cjy627@hanmaceng.co.kr' => '관리자4',
|
||||
'b23072@hanmaceng.co.kr' => '관리자5',
|
||||
];
|
||||
if (isset($map[$loginId])) {
|
||||
return $map[$loginId];
|
||||
}
|
||||
return $fallbackName ?: $loginId;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if (!$is_member) die('0');
|
||||
|
||||
$uid = isset($_REQUEST['uid']) ? preg_replace('/[^0-9]/', '', $_REQUEST['uid']) : 0;
|
||||
$subject = isset($_REQUEST['subject']) ? preg_replace("#[\\\]+$#", "", substr(trim($_POST['subject']),0,255)) : '';
|
||||
$content = isset($_REQUEST['content']) ? preg_replace("#[\\\]+$#", "", substr(trim($_POST['content']),0,65536)) : '';
|
||||
|
||||
if ($subject && $content) {
|
||||
$sql = " select count(*) as cnt from {$g5['autosave_table']} where mb_id = '{$member['mb_id']}' and as_subject = '$subject' and as_content = '$content' ";
|
||||
$row = sql_fetch($sql);
|
||||
if (!$row['cnt']) {
|
||||
$sql = " insert into {$g5['autosave_table']} set mb_id = '{$member['mb_id']}', as_uid = '{$uid}', as_subject = '$subject', as_content = '$content', as_datetime = '".G5_TIME_YMDHIS."' on duplicate key update as_subject = '$subject', as_content = '$content', as_datetime = '".G5_TIME_YMDHIS."' ";
|
||||
$result = sql_query($sql, false);
|
||||
|
||||
echo autosave_count($member['mb_id']);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
include_once("./_common.php");
|
||||
|
||||
if (!$is_member) die("0");
|
||||
|
||||
$as_id = isset($_REQUEST['as_id']) ? (int)$_REQUEST['as_id'] : 0;
|
||||
|
||||
$sql = " delete from {$g5['autosave_table']} where mb_id = '{$member['mb_id']}' and as_id = {$as_id} ";
|
||||
$result = sql_query($sql);
|
||||
if (!$result) {
|
||||
echo "-1";
|
||||
}
|
||||
|
||||
echo autosave_count($member['mb_id']);
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if (!$is_member) die('');
|
||||
|
||||
$sql = " select as_id, as_uid, as_subject, as_datetime from {$g5['autosave_table']} where mb_id = '{$member['mb_id']}' order by as_id desc ";
|
||||
$result = sql_query($sql);
|
||||
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
|
||||
echo "<list>\n";
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
$subject = htmlspecialchars(utf8_strcut($row['as_subject'], 25), ENT_QUOTES);
|
||||
$datetime = substr($row['as_datetime'],2,14);
|
||||
echo "<item>\n";
|
||||
echo "<id>{$row['as_id']}</id>\n";
|
||||
echo "<uid>{$row['as_uid']}</uid>\n";
|
||||
echo "<subject><![CDATA[{$subject}]]></subject>\n";
|
||||
echo "<datetime>{$datetime}</datetime>\n";
|
||||
echo "</item>\n";
|
||||
}
|
||||
echo "</list>";
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if (!$is_member) die('');
|
||||
|
||||
$as_id = isset($_REQUEST['as_id']) ? (int) $_REQUEST['as_id'] : 0;
|
||||
|
||||
$sql = " select as_subject, as_content from {$g5['autosave_table']} where mb_id = '{$member['mb_id']}' and as_id = {$as_id} ";
|
||||
$row = sql_fetch($sql);
|
||||
$subject = $row['as_subject'];
|
||||
$content = $row['as_content'];
|
||||
|
||||
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
|
||||
echo "<item>\n";
|
||||
echo "<subject><![CDATA[{$subject}]]></subject>\n";
|
||||
echo "<content><![CDATA[{$content}]]></content>\n";
|
||||
echo "</item>\n";
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$ss_name = 'ss_comment_token';
|
||||
|
||||
set_session($ss_name, '');
|
||||
|
||||
$token = _token();
|
||||
|
||||
set_session($ss_name, $token);
|
||||
|
||||
die(json_encode(array('token'=>$token)));
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$subject = isset($_POST['subject']) ? strip_tags($_POST['subject']) : '';
|
||||
$content = isset($_POST['content']) ? strip_tags($_POST['content']) : '';
|
||||
|
||||
//$filter = explode(",", strtolower(trim($config['cf_filter'])));
|
||||
// strtolower 에 의한 한글 변형으로 아래 코드로 대체 (곱슬최씨님이 알려 주셨습니다.)
|
||||
$filter = explode(",", trim($config['cf_filter']));
|
||||
for ($i=0; $i<count($filter); $i++) {
|
||||
$str = $filter[$i];
|
||||
|
||||
// 제목 필터링 (찾으면 중지)
|
||||
$subj = $cont = "";
|
||||
$pos = stripos($subject, $str);
|
||||
if ($pos !== false) {
|
||||
$subj = $str;
|
||||
break;
|
||||
}
|
||||
|
||||
// 내용 필터링 (찾으면 중지)
|
||||
$pos = stripos($content, $str);
|
||||
if ($pos !== false) {
|
||||
$cont = $str;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
die("{\"subject\":\"{$subj}\",\"content\":\"{$cont}\"}");
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_LIB_PATH.'/register.lib.php');
|
||||
|
||||
$mb_email = isset($_POST['reg_mb_email']) ? trim($_POST['reg_mb_email']) : '';
|
||||
$mb_id = isset($_POST['reg_mb_id']) ? trim($_POST['reg_mb_id']) : '';
|
||||
|
||||
set_session('ss_check_mb_email', '');
|
||||
|
||||
if ($msg = empty_mb_email($mb_email)) die($msg);
|
||||
if ($msg = valid_mb_email($mb_email)) die($msg);
|
||||
if ($msg = prohibit_mb_email($mb_email)) die($msg);
|
||||
if ($msg = exist_mb_email($mb_email, $mb_id)) die($msg);
|
||||
|
||||
set_session('ss_check_mb_email', $mb_email);
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_LIB_PATH.'/register.lib.php');
|
||||
|
||||
$mb_hp = isset($_POST['reg_mb_hp']) ? trim($_POST['reg_mb_hp']) : '';
|
||||
$mb_id = isset($_POST['reg_mb_id']) ? trim($_POST['reg_mb_id']) : '';
|
||||
|
||||
if ($msg = valid_mb_hp($mb_hp)) die($msg);
|
||||
//if ($msg = exist_mb_hp($mb_hp, $mb_id)) die($msg);
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_LIB_PATH.'/register.lib.php');
|
||||
|
||||
$mb_id = isset($_POST['reg_mb_id']) ? trim($_POST['reg_mb_id']) : '';
|
||||
|
||||
set_session('ss_check_mb_id', '');
|
||||
|
||||
if ($msg = empty_mb_id($mb_id)) die($msg);
|
||||
if ($msg = valid_mb_id($mb_id)) die($msg);
|
||||
if ($msg = count_mb_id($mb_id)) die($msg);
|
||||
if ($msg = exist_mb_id($mb_id)) die($msg);
|
||||
if ($msg = reserve_mb_id($mb_id)) die($msg);
|
||||
|
||||
set_session('ss_check_mb_id', $mb_id);
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_LIB_PATH.'/register.lib.php');
|
||||
|
||||
$mb_nick = isset($_POST['reg_mb_nick']) ? trim($_POST['reg_mb_nick']) : '';
|
||||
$mb_id = isset($_POST['reg_mb_id']) ? trim($_POST['reg_mb_id']) : '';
|
||||
|
||||
set_session('ss_check_mb_nick', '');
|
||||
|
||||
if ($msg = empty_mb_nick($mb_nick)) die($msg);
|
||||
if ($msg = valid_mb_nick($mb_nick)) die($msg);
|
||||
if ($msg = count_mb_nick($mb_nick)) die($msg);
|
||||
if ($msg = exist_mb_nick($mb_nick, $mb_id)) die($msg);
|
||||
if ($msg = reserve_mb_nick($mb_nick)) die($msg);
|
||||
|
||||
set_session('ss_check_mb_nick', $mb_nick);
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
include_once("./_common.php");
|
||||
include_once(G5_LIB_PATH."/register.lib.php");
|
||||
|
||||
$mb_recommend = isset($_POST["reg_mb_recommend"]) ? trim($_POST["reg_mb_recommend"]) : '';
|
||||
|
||||
if ($msg = valid_mb_id($mb_recommend)) {
|
||||
die("추천인의 아이디는 영문자, 숫자, _ 만 입력하세요.");
|
||||
}
|
||||
if (!($msg = exist_mb_id($mb_recommend))) {
|
||||
die("입력하신 추천인은 존재하지 않는 아이디 입니다.");
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$token_case = isset($_POST['token_case']) ? preg_replace('/[^0-9a-z_]/i', '', $_POST['token_case']) : '';
|
||||
|
||||
if( $token_case ){
|
||||
$token = _token();
|
||||
set_session('ss_'.$token_case.'_token', $token);
|
||||
die(json_encode(array('error'=>'', 'token'=>$token, 'url'=>'')));
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
global $lo_location;
|
||||
global $lo_url;
|
||||
|
||||
include_once('./_common.php');
|
||||
|
||||
if($error) {
|
||||
$g5['title'] = "오류안내 페이지";
|
||||
} else {
|
||||
$g5['title'] = "결과안내 페이지";
|
||||
}
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
// 필수 입력입니다.
|
||||
// 양쪽 공백 없애기
|
||||
// 필수 (선택 혹은 입력)입니다.
|
||||
// 전화번호 형식이 올바르지 않습니다. 하이픈(-)을 포함하여 입력하세요.
|
||||
// 이메일주소 형식이 아닙니다.
|
||||
// 한글이 아닙니다. (자음, 모음만 있는 한글은 처리하지 않습니다.)
|
||||
// 한글이 아닙니다.
|
||||
// 한글, 영문, 숫자가 아닙니다.
|
||||
// 한글, 영문이 아닙니다.
|
||||
// 숫자가 아닙니다.
|
||||
// 영문이 아닙니다.
|
||||
// 영문 또는 숫자가 아닙니다.
|
||||
// 영문, 숫자, _ 가 아닙니다.
|
||||
// 최소 글자 이상 입력하세요.
|
||||
// 이미지 파일이 아닙니다..gif .jpg .png 파일만 가능합니다.
|
||||
// 파일만 가능합니다.
|
||||
// 공백이 없어야 합니다.
|
||||
|
||||
$msg = isset($msg) ? strip_tags($msg) : '';
|
||||
$msg2 = str_replace("\\n", "<br>", $msg);
|
||||
|
||||
$url = isset($url) ? clean_xss_tags($url, 1) : '';
|
||||
if (!$url) $url = isset($_SERVER['HTTP_REFERER']) ? clean_xss_tags($_SERVER['HTTP_REFERER'], 1) : '';
|
||||
|
||||
$url = preg_replace("/[\<\>\'\"\\\'\\\"\(\)]/", "", $url);
|
||||
$url = preg_replace('/\r\n|\r|\n|[^\x20-\x7e]/','', $url);
|
||||
|
||||
// url 체크
|
||||
check_url_host($url, $msg);
|
||||
|
||||
if($error) {
|
||||
$header2 = "다음 항목에 오류가 있습니다.";
|
||||
} else {
|
||||
$header2 = "다음 내용을 확인해 주세요.";
|
||||
}
|
||||
?>
|
||||
|
||||
<script>
|
||||
alert("<?php echo $msg; ?>");
|
||||
<?php if ($url) { ?>
|
||||
document.location.replace("<?php echo str_replace('&', '&', $url); ?>");
|
||||
<?php } else { ?>
|
||||
history.back();
|
||||
<?php } ?>
|
||||
</script>
|
||||
|
||||
<noscript>
|
||||
<div id="validation_check">
|
||||
<h1><?php echo $header2 ?></h1>
|
||||
<p class="cbg">
|
||||
<?php echo $msg2 ?>
|
||||
</p>
|
||||
<?php if($post) { ?>
|
||||
<form method="post" action="<?php echo $url ?>">
|
||||
<?php
|
||||
foreach($_POST as $key => $value) {
|
||||
|
||||
$key = clean_xss_tags($key);
|
||||
$value = clean_xss_tags($value);
|
||||
|
||||
if(strlen($value) < 1)
|
||||
continue;
|
||||
|
||||
if(preg_match("/pass|pwd|capt|url/", $key))
|
||||
continue;
|
||||
?>
|
||||
<input type="hidden" name="<?php echo htmlspecialchars($key); ?>" value="<?php echo htmlspecialchars($value); ?>">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<input type="submit" value="돌아가기">
|
||||
</form>
|
||||
<?php } else { ?>
|
||||
<div class="btn_confirm">
|
||||
<a href="<?php echo $url ?>">돌아가기</a>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php /*
|
||||
<article id="validation_check">
|
||||
<header>
|
||||
<hgroup>
|
||||
<!-- <h1>회원가입 정보 입력 확인</h1> --> <!-- 수행 중이던 작업 내용 -->
|
||||
<h1><?php echo $header ?></h1> <!-- 수행 중이던 작업 내용 -->
|
||||
<h2><?php echo $header2 ?></h2>
|
||||
</hgroup>
|
||||
</header>
|
||||
<p>
|
||||
<!-- <strong>항목</strong> 오류내역 -->
|
||||
<!--
|
||||
<strong>이름</strong> 필수 입력입니다. 한글만 입력할 수 있습니다.<br>
|
||||
<strong>이메일</strong> 올바르게 입력하지 않았습니다.<br>
|
||||
-->
|
||||
<?php echo $msg2 ?>
|
||||
</p>
|
||||
|
||||
<a href="<?php echo $url ?>">돌아가기</a>
|
||||
</article>
|
||||
*/ ?>
|
||||
</div>
|
||||
</noscript>
|
||||
|
||||
<?php
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$msg = isset($msg) ? strip_tags($msg) : '';
|
||||
|
||||
$msg2 = str_replace("\\n", "<br>", $msg);
|
||||
|
||||
if($error) {
|
||||
$header2 = "다음 항목에 오류가 있습니다.";
|
||||
$msg3 = "새창을 닫으시고 이전 작업을 다시 시도해 주세요.";
|
||||
} else {
|
||||
$header2 = "다음 내용을 확인해 주세요.";
|
||||
$msg3 = "새창을 닫으신 후 서비스를 이용해 주세요.";
|
||||
}
|
||||
?>
|
||||
|
||||
<script>
|
||||
alert("<?php echo $msg; ?>");
|
||||
try {
|
||||
window.close();
|
||||
} catch(error) {
|
||||
history.back();
|
||||
}
|
||||
|
||||
setTimeout(function() {
|
||||
if (window.history.length) {
|
||||
window.history.back();
|
||||
}
|
||||
}, 500);
|
||||
</script>
|
||||
|
||||
<noscript>
|
||||
<div id="validation_check">
|
||||
<h1><?php echo $header2 ?></h1>
|
||||
<p class="cbg">
|
||||
<?php echo $msg2 ?>
|
||||
</p>
|
||||
<p class="cbg">
|
||||
<?php echo $msg3 ?>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<?php /*
|
||||
<article id="validation_check">
|
||||
<header>
|
||||
<hgroup>
|
||||
<!-- <h1>회원가입 정보 입력 확인</h1> --> <!-- 수행 중이던 작업 내용 -->
|
||||
<h1><?php echo $header ?></h1> <!-- 수행 중이던 작업 내용 -->
|
||||
<h2><?php echo $header2 ?></h2>
|
||||
</hgroup>
|
||||
</header>
|
||||
<p>
|
||||
<!-- <strong>항목</strong> 오류내역 -->
|
||||
<!--
|
||||
<strong>이름</strong> 필수 입력입니다. 한글만 입력할 수 있습니다.<br>
|
||||
<strong>이메일</strong> 올바르게 입력하지 않았습니다.<br>
|
||||
-->
|
||||
<?php echo $msg2 ?>
|
||||
</p>
|
||||
<p>
|
||||
<?php echo $msg3 ?>
|
||||
</p>
|
||||
|
||||
</article>
|
||||
*/ ?>
|
||||
|
||||
</noscript>
|
||||
|
||||
<?php
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,237 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if (!$board['bo_table']) {
|
||||
alert('존재하지 않는 게시판입니다.', G5_URL);
|
||||
}
|
||||
|
||||
check_device($board['bo_device']);
|
||||
|
||||
if (isset($write['wr_is_comment']) && $write['wr_is_comment']) {
|
||||
goto_url(get_pretty_url($bo_table, $write['wr_parent'], '#c_'.$wr_id));
|
||||
}
|
||||
|
||||
if (!$bo_table) {
|
||||
$msg = "bo_table 값이 넘어오지 않았습니다.\\n\\nboard.php?bo_table=code 와 같은 방식으로 넘겨 주세요.";
|
||||
alert($msg);
|
||||
}
|
||||
|
||||
$g5['board_title'] = ((G5_IS_MOBILE && $board['bo_mobile_subject']) ? $board['bo_mobile_subject'] : $board['bo_subject']);
|
||||
|
||||
// wr_id 값이 있으면 글읽기
|
||||
if ((isset($wr_id) && $wr_id) || (isset($wr_seo_title) && $wr_seo_title)) {
|
||||
// 글이 없을 경우 해당 게시판 목록으로 이동
|
||||
if (!isset($write['wr_id'])) {
|
||||
$msg = '글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.';
|
||||
alert($msg, get_pretty_url($bo_table));
|
||||
}
|
||||
|
||||
// 그룹접근 사용
|
||||
if (isset($group['gr_use_access']) && $group['gr_use_access']) {
|
||||
if ($is_guest) {
|
||||
$msg = "비회원은 이 게시판에 접근할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.";
|
||||
alert($msg, G5_BBS_URL.'/login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(get_pretty_url($bo_table, $wr_id, $qstr)));
|
||||
}
|
||||
|
||||
// 그룹관리자 이상이라면 통과
|
||||
if ($is_admin == "super" || $is_admin == "group") {
|
||||
;
|
||||
} else {
|
||||
// 그룹접근
|
||||
$sql = " select count(*) as cnt from {$g5['group_member_table']} where gr_id = '{$board['gr_id']}' and mb_id = '{$member['mb_id']}' ";
|
||||
$row = sql_fetch($sql);
|
||||
if (!$row['cnt']) {
|
||||
alert("접근 권한이 없으므로 글읽기가 불가합니다.\\n\\n궁금하신 사항은 관리자에게 문의 바랍니다.", G5_URL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면
|
||||
if ($member['mb_level'] < $board['bo_read_level']) {
|
||||
if ($is_member)
|
||||
alert('글을 읽을 권한이 없습니다.', G5_URL);
|
||||
else
|
||||
alert('글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.', G5_BBS_URL.'/login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(get_pretty_url($bo_table, $wr_id, $qstr)));
|
||||
}
|
||||
|
||||
// 본인확인을 사용한다면
|
||||
if ($board['bo_use_cert'] != '' && $config['cf_cert_use'] && !$is_admin) {
|
||||
// 인증된 회원만 가능
|
||||
if ($is_guest) {
|
||||
alert('이 게시판은 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.', G5_BBS_URL.'/login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(get_pretty_url($bo_table, $wr_id, $qstr)));
|
||||
}
|
||||
|
||||
if (strlen($member['mb_dupinfo']) == 64 && $member['mb_certify']) { // 본인 인증 된 계정 중에서 di로 저장 되었을 경우에만
|
||||
goto_url(G5_BBS_URL."/member_cert_refresh.php?url=".urlencode(get_pretty_url($bo_table, $wr_id, $qstr)));
|
||||
}
|
||||
|
||||
if ($board['bo_use_cert'] == 'cert' && !$member['mb_certify']) {
|
||||
alert('이 게시판은 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원정보 수정에서 본인확인을 해주시기 바랍니다.', G5_URL);
|
||||
}
|
||||
|
||||
if ($board['bo_use_cert'] == 'adult' && !$member['mb_adult']) {
|
||||
alert('이 게시판은 본인확인으로 성인인증 된 회원님만 글읽기가 가능합니다.\\n\\n현재 성인인데 글읽기가 안된다면 회원정보 수정에서 본인확인을 다시 해주시기 바랍니다.', G5_URL);
|
||||
}
|
||||
}
|
||||
|
||||
// 자신의 글이거나 관리자라면 통과
|
||||
if (($write['mb_id'] && $write['mb_id'] === $member['mb_id']) || $is_admin) {
|
||||
;
|
||||
} else {
|
||||
// 비밀글이라면
|
||||
if (strstr($write['wr_option'], "secret"))
|
||||
{
|
||||
// 회원이 비밀글을 올리고 관리자가 답변글을 올렸을 경우
|
||||
// 회원이 관리자가 올린 답변글을 바로 볼 수 없던 오류를 수정
|
||||
$is_owner = false;
|
||||
if ($write['wr_reply'] && $member['mb_id'])
|
||||
{
|
||||
$sql = " select mb_id from {$write_table}
|
||||
where wr_num = '{$write['wr_num']}'
|
||||
and wr_reply = ''
|
||||
and wr_is_comment = 0 ";
|
||||
$row = sql_fetch($sql);
|
||||
if ($row['mb_id'] === $member['mb_id'])
|
||||
$is_owner = true;
|
||||
}
|
||||
|
||||
$ss_name = 'ss_secret_'.$bo_table.'_'.$write['wr_num'];
|
||||
|
||||
if (!$is_owner)
|
||||
{
|
||||
//$ss_name = "ss_secret_{$bo_table}_{$wr_id}";
|
||||
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 비밀번호를 묻지 않습니다.
|
||||
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
|
||||
//if ("$bo_table|$write['wr_num']" != get_session("ss_secret"))
|
||||
if (!get_session($ss_name))
|
||||
goto_url(G5_BBS_URL.'/password.php?w=s&bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr);
|
||||
}
|
||||
|
||||
set_session($ss_name, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
// 한번 읽은글은 브라우저를 닫기전까지는 카운트를 증가시키지 않음
|
||||
$ss_name = 'ss_view_'.$bo_table.'_'.$wr_id;
|
||||
if (!get_session($ss_name))
|
||||
{
|
||||
sql_query(" update {$write_table} set wr_hit = wr_hit + 1 where wr_id = '{$wr_id}' ");
|
||||
|
||||
// 자신의 글이면 통과
|
||||
if ($write['mb_id'] && $write['mb_id'] === $member['mb_id']) {
|
||||
;
|
||||
} else if ($is_guest && $board['bo_read_level'] == 1 && $write['wr_ip'] == $_SERVER['REMOTE_ADDR']) {
|
||||
// 비회원이면서 읽기레벨이 1이고 등록된 아이피가 같다면 자신의 글이므로 통과
|
||||
;
|
||||
} else {
|
||||
// 글읽기 포인트가 설정되어 있다면
|
||||
if ($config['cf_use_point'] && $board['bo_read_point'] && $member['mb_point'] + $board['bo_read_point'] < 0)
|
||||
alert('보유하신 포인트('.number_format($member['mb_point']).')가 없거나 모자라서 글읽기('.number_format($board['bo_read_point']).')가 불가합니다.\\n\\n포인트를 모으신 후 다시 글읽기 해 주십시오.');
|
||||
|
||||
insert_point($member['mb_id'], $board['bo_read_point'], ((G5_IS_MOBILE && $board['bo_mobile_subject']) ? $board['bo_mobile_subject'] : $board['bo_subject']).' '.$wr_id.' 글읽기', $bo_table, $wr_id, '읽기');
|
||||
}
|
||||
|
||||
set_session($ss_name, TRUE);
|
||||
}
|
||||
|
||||
$g5['title'] = strip_tags(conv_subject($write['wr_subject'], 255))." > ".$g5['board_title'];
|
||||
} else {
|
||||
if ($member['mb_level'] < $board['bo_list_level']) {
|
||||
if ($member['mb_id'])
|
||||
alert('목록을 볼 권한이 없습니다.', G5_URL);
|
||||
else
|
||||
alert('목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.', G5_BBS_URL.'/login.php?'.$qstr.'&url='.urlencode(G5_BBS_URL.'/board.php?bo_table='.$bo_table.($qstr?'&':'')));
|
||||
}
|
||||
|
||||
// 본인확인을 사용한다면
|
||||
if ($board['bo_use_cert'] != '' && $config['cf_cert_use'] && !$is_admin) {
|
||||
// 인증된 회원만 가능
|
||||
if ($is_guest) {
|
||||
alert('이 게시판은 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.', G5_BBS_URL.'/login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(get_pretty_url($bo_table, $wr_id, $qstr)));
|
||||
}
|
||||
|
||||
if (strlen($member['mb_dupinfo']) == 64 && $member['mb_certify']) { // 본인 인증 된 계정 중에서 di로 저장 되었을 경우에만
|
||||
goto_url(G5_BBS_URL."/member_cert_refresh.php?url=".urlencode(get_pretty_url($bo_table, $wr_id, $qstr)));
|
||||
}
|
||||
|
||||
if ($board['bo_use_cert'] == 'cert' && !$member['mb_certify']) {
|
||||
alert('이 게시판은 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원정보 수정에서 본인확인을 해주시기 바랍니다.', G5_URL);
|
||||
}
|
||||
|
||||
if ($board['bo_use_cert'] == 'adult' && !$member['mb_adult']) {
|
||||
alert('이 게시판은 본인확인으로 성인인증 된 회원님만 글읽기가 가능합니다.\\n\\n현재 성인인데 글읽기가 안된다면 회원정보 수정에서 본인확인을 다시 해주시기 바랍니다.', G5_URL);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($page) || (isset($page) && $page == 0)) $page = 1;
|
||||
|
||||
$g5['title'] = $g5['board_title'].' '.$page.' 페이지';
|
||||
}
|
||||
|
||||
$is_auth = $is_admin ? true : false;
|
||||
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$width = $board['bo_table_width'];
|
||||
if ($width <= 100)
|
||||
$width .= '%';
|
||||
else
|
||||
$width .='px';
|
||||
|
||||
// IP보이기 사용 여부
|
||||
$ip = "";
|
||||
$is_ip_view = $board['bo_use_ip_view'];
|
||||
if ($is_admin) {
|
||||
$is_ip_view = true;
|
||||
if ($write && array_key_exists('wr_ip', $write)) {
|
||||
$ip = $write['wr_ip'];
|
||||
}
|
||||
} else {
|
||||
// 관리자가 아니라면 IP 주소를 감춘후 보여줍니다.
|
||||
if (isset($write['wr_ip'])) {
|
||||
$ip = preg_replace("/([0-9]+).([0-9]+).([0-9]+).([0-9]+)/", G5_IP_DISPLAY, $write['wr_ip']);
|
||||
}
|
||||
}
|
||||
|
||||
// 분류 사용
|
||||
$is_category = false;
|
||||
$category_name = '';
|
||||
if ($board['bo_use_category']) {
|
||||
$is_category = true;
|
||||
if (array_key_exists('ca_name', $write)) {
|
||||
$category_name = $write['ca_name']; // 분류명
|
||||
}
|
||||
}
|
||||
|
||||
// 추천 사용
|
||||
$is_good = false;
|
||||
if ($board['bo_use_good'])
|
||||
$is_good = true;
|
||||
|
||||
// 비추천 사용
|
||||
$is_nogood = false;
|
||||
if ($board['bo_use_nogood'])
|
||||
$is_nogood = true;
|
||||
|
||||
$admin_href = "";
|
||||
// 최고관리자 또는 그룹관리자라면
|
||||
if ($member['mb_id'] && ($is_admin === 'super' || $group['gr_admin'] === $member['mb_id']))
|
||||
$admin_href = G5_ADMIN_URL.'/board_form.php?w=u&bo_table='.$bo_table;
|
||||
|
||||
include_once(G5_BBS_PATH.'/board_head.php');
|
||||
|
||||
// 게시물 아이디가 있다면 게시물 보기를 INCLUDE
|
||||
if (isset($wr_id) && $wr_id) {
|
||||
include_once(G5_BBS_PATH.'/view.php');
|
||||
}
|
||||
|
||||
// 전체목록보이기 사용이 "예" 또는 wr_id 값이 없다면 목록을 보임
|
||||
//if ($board['bo_use_list_view'] || empty($wr_id))
|
||||
if ($member['mb_level'] >= $board['bo_list_level'] && $board['bo_use_list_view'] || empty($wr_id))
|
||||
include_once (G5_BBS_PATH.'/list.php');
|
||||
|
||||
include_once(G5_BBS_PATH.'/board_tail.php');
|
||||
|
||||
echo "\n<!-- 사용스킨 : ".(G5_IS_MOBILE ? $board['bo_mobile_skin'] : $board['bo_skin'])." -->\n";
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 게시판 관리의 상단 내용
|
||||
if (G5_IS_MOBILE) {
|
||||
// 모바일의 경우 설정을 따르지 않는다.
|
||||
include_once(G5_BBS_PATH.'/_head.php');
|
||||
echo run_replace('board_mobile_content_head', html_purifier(stripslashes($board['bo_mobile_content_head'])), $board);
|
||||
} else {
|
||||
// 상단 파일 경로를 입력하지 않았다면 기본 상단 파일도 include 하지 않음
|
||||
if (trim($board['bo_include_head'])) {
|
||||
if (is_include_path_check($board['bo_include_head'])) { //파일경로 체크
|
||||
@include ($board['bo_include_head']);
|
||||
} else { //파일경로가 올바르지 않으면 기본파일을 가져옴
|
||||
include_once(G5_BBS_PATH.'/_head.php');
|
||||
}
|
||||
}
|
||||
echo run_replace('board_content_head', html_purifier(stripslashes($board['bo_content_head'])), $board);
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$count = (isset($_POST['chk_wr_id']) && is_array($_POST['chk_wr_id'])) ? count($_POST['chk_wr_id']) : 0;
|
||||
$post_btn_submit = isset($_POST['btn_submit']) ? clean_xss_tags($_POST['btn_submit'], 1, 1) : '';
|
||||
|
||||
if(!$count) {
|
||||
alert(addcslashes($post_btn_submit, '"\\/').' 하실 항목을 하나 이상 선택하세요.');
|
||||
}
|
||||
|
||||
if($post_btn_submit === '선택삭제') {
|
||||
include './delete_all.php';
|
||||
} else if($post_btn_submit === '선택복사') {
|
||||
$sw = 'copy';
|
||||
include './move.php';
|
||||
} else if($post_btn_submit === '선택이동') {
|
||||
$sw = 'move';
|
||||
include './move.php';
|
||||
} else {
|
||||
alert('올바른 방법으로 이용해 주세요.');
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 게시판 관리의 하단 파일 경로
|
||||
if (G5_IS_MOBILE) {
|
||||
echo run_replace('board_mobile_content_tail', html_purifier(stripslashes($board['bo_mobile_content_tail'])), $board);
|
||||
// 모바일의 경우 설정을 따르지 않는다.
|
||||
include_once(G5_BBS_PATH.'/_tail.php');
|
||||
} else {
|
||||
echo run_replace('board_content_tail', html_purifier(stripslashes($board['bo_content_tail'])), $board);
|
||||
// 하단 파일 경로를 입력하지 않았다면 기본 하단 파일도 include 하지 않음
|
||||
if (trim($board['bo_include_tail'])) {
|
||||
if (is_include_path_check($board['bo_include_tail'])) { //파일경로 체크
|
||||
@include ($board['bo_include_tail']);
|
||||
} else { //파일경로가 올바르지 않으면 기본파일을 가져옴
|
||||
include_once(G5_BBS_PATH.'/_tail.php');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
$g5['title'] = '구매하기';
|
||||
|
||||
//echo $_SESSION['session_id']." : session_id<br>";
|
||||
//echo $_SESSION['ss_mb_id']." : ss_mb_id<br>";
|
||||
/*
|
||||
echo $_SESSION."---<br>";
|
||||
|
||||
echo count($_SESSION)."---<br>";
|
||||
|
||||
foreach ($_SESSION as $x) {
|
||||
echo "$x -- <br>";
|
||||
}
|
||||
*/
|
||||
include_once($member_skin_path.'/buy.skin.php');
|
||||
?>
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$pattern1 = "/[\<\>\'\"\\\'\\\"\(\)]/";
|
||||
$pattern2 = "/\r\n|\r|\n|[^\x20-\x7e]/";
|
||||
|
||||
$url1 = isset($url1) ? preg_replace($pattern1, "", clean_xss_tags($url1, 1)) : '';
|
||||
$url1 = preg_replace($pattern2, "", $url1);
|
||||
$url2 = isset($url2) ? preg_replace($pattern1, "", clean_xss_tags($url2, 1)) : '';
|
||||
$url2 = preg_replace($pattern2, "", $url2);
|
||||
$url3 = isset($url3) ? preg_replace($pattern1, "", clean_xss_tags($url3, 1)) : '';
|
||||
$url3 = preg_replace($pattern2, "", $url3);
|
||||
|
||||
$msg = isset($msg) ? $msg : '';
|
||||
$header = isset($header) ? $msg : '';
|
||||
|
||||
// url 체크
|
||||
check_url_host($url1);
|
||||
check_url_host($url2);
|
||||
check_url_host($url3);
|
||||
?>
|
||||
|
||||
<script>
|
||||
var conf = "<?php echo strip_tags($msg); ?>";
|
||||
if (confirm(conf)) {
|
||||
document.location.replace("<?php echo $url1; ?>");
|
||||
} else {
|
||||
document.location.replace("<?php echo $url2; ?>");
|
||||
}
|
||||
</script>
|
||||
|
||||
<noscript>
|
||||
<article id="confirm_check">
|
||||
<header>
|
||||
<hgroup>
|
||||
<h1><?php echo get_text(strip_tags($header)); ?></h1> <!-- 수행 중이던 작업 내용 -->
|
||||
<h2>아래 내용을 확인해 주세요.</h2>
|
||||
</hgroup>
|
||||
</header>
|
||||
<p>
|
||||
<?php echo get_text(strip_tags($msg)); ?>
|
||||
</p>
|
||||
|
||||
<a href="<?php echo $url1; ?>">확인</a>
|
||||
<a href="<?php echo $url2; ?>">취소</a><br><br>
|
||||
<a href="<?php echo $url3; ?>">돌아가기</a>
|
||||
</article>
|
||||
</noscript>
|
||||
|
||||
<?php
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$co_id = isset($_GET['co_id']) ? preg_replace('/[^a-z0-9_]/i', '', $_GET['co_id']) : 0;
|
||||
$co_seo_title = isset($_GET['co_seo_title']) ? clean_xss_tags($_GET['co_seo_title'], 1, 1) : '';
|
||||
|
||||
//dbconfig파일에 $g5['content_table'] 배열변수가 있는지 체크
|
||||
if( !isset($g5['content_table']) ){
|
||||
die('<meta charset="utf-8">관리자 모드에서 게시판관리->내용 관리를 먼저 확인해 주세요.');
|
||||
}
|
||||
|
||||
// 내용
|
||||
if($co_seo_title){
|
||||
$co = get_content_by_field($g5['content_table'], 'content', 'co_seo_title', generate_seo_title($co_seo_title));
|
||||
$co_id = isset($co['co_id']) ? $co['co_id'] : 0;
|
||||
} else {
|
||||
$co = get_content_db($co_id);
|
||||
}
|
||||
|
||||
if( ! (isset($co['co_seo_title']) && $co['co_seo_title']) && isset($co['co_id']) && $co['co_id'] ){
|
||||
seo_title_update($g5['content_table'], $co['co_id'], 'content');
|
||||
}
|
||||
|
||||
if (G5_IS_MOBILE) {
|
||||
include_once(G5_MOBILE_PATH.'/content.php');
|
||||
return;
|
||||
}
|
||||
|
||||
if (! (isset($co['co_id']) && $co['co_id']))
|
||||
alert('등록된 내용이 없습니다.');
|
||||
|
||||
$g5['title'] = $co['co_subject'];
|
||||
|
||||
if ($co['co_include_head'] && is_include_path_check($co['co_include_head']))
|
||||
@include_once($co['co_include_head']);
|
||||
else
|
||||
include_once('./_head.php');
|
||||
|
||||
// KVE-2019-0828 취약점 내용
|
||||
$co['co_tag_filter_use'] = 1;
|
||||
$str = conv_content($co['co_content'], $co['co_html'], $co['co_tag_filter_use']);
|
||||
|
||||
// $src 를 $dst 로 변환
|
||||
$src = $dst = array();
|
||||
$src[] = "/{{쇼핑몰명}}|{{홈페이지제목}}/";
|
||||
$dst[] = $config['cf_title'];
|
||||
if(isset($default) && isset($default['de_admin_company_name'])){
|
||||
$src[] = "/{{회사명}}|{{상호}}/";
|
||||
$dst[] = isset($default['de_admin_company_name']) ? $default['de_admin_company_name'] : '';
|
||||
$src[] = "/{{대표자명}}/";
|
||||
$dst[] = isset($default['de_admin_company_owner']) ? $default['de_admin_company_owner'] : '';
|
||||
$src[] = "/{{사업자등록번호}}/";
|
||||
$dst[] = isset($default['de_admin_company_saupja_no']) ? $default['de_admin_company_saupja_no'] : '';
|
||||
$src[] = "/{{대표전화번호}}/";
|
||||
$dst[] = isset($default['de_admin_company_tel']) ? $default['de_admin_company_tel'] : '';
|
||||
$src[] = "/{{팩스번호}}/";
|
||||
$dst[] = isset($default['de_admin_company_fax']) ? $default['de_admin_company_fax'] : '';
|
||||
$src[] = "/{{통신판매업신고번호}}/";
|
||||
$dst[] = isset($default['de_admin_company_tongsin_no']) ? $default['de_admin_company_tongsin_no'] : '';
|
||||
$src[] = "/{{사업장우편번호}}/";
|
||||
$dst[] = isset($default['de_admin_company_zip']) ? $default['de_admin_company_zip'] : '';
|
||||
$src[] = "/{{사업장주소}}/";
|
||||
$dst[] = isset($default['de_admin_company_addr']) ? $default['de_admin_company_addr'] : '';
|
||||
$src[] = "/{{운영자명}}|{{관리자명}}/";
|
||||
$dst[] = isset($default['de_admin_name']) ? $default['de_admin_name'] : '';
|
||||
$src[] = "/{{운영자e-mail}}|{{관리자e-mail}}/i";
|
||||
$dst[] = isset($default['de_admin_email']) ? $default['de_admin_email'] : '';
|
||||
$src[] = "/{{정보관리책임자명}}/";
|
||||
$dst[] = isset($default['de_admin_info_name']) ? $default['de_admin_info_name'] : '';
|
||||
$src[] = "/{{정보관리책임자e-mail}}|{{정보책임자e-mail}}/i";
|
||||
$dst[] = isset($default['de_admin_info_email']) ? $default['de_admin_info_email'] : '';
|
||||
}
|
||||
$str = preg_replace($src, $dst, $str);
|
||||
|
||||
// 스킨경로
|
||||
if(trim($co['co_skin']) == '')
|
||||
$co['co_skin'] = 'basic';
|
||||
|
||||
$content_skin_path = get_skin_path('content', $co['co_skin']);
|
||||
$content_skin_url = get_skin_url('content', $co['co_skin']);
|
||||
$skin_file = $content_skin_path.'/content.skin.php';
|
||||
|
||||
if ($is_admin)
|
||||
echo run_replace('content_admin_button_html', '<div class="ctt_admin"><a href="'.G5_ADMIN_URL.'/contentform.php?w=u&co_id='.$co_id.'" class="btn_admin btn"><span class="sound_only">내용 수정</span><i class="fa fa-cog fa-spin fa-fw"></i></a></div>', $co);
|
||||
?>
|
||||
|
||||
<?php
|
||||
if(is_file($skin_file)) {
|
||||
$himg = G5_DATA_PATH.'/content/'.$co_id.'_h';
|
||||
if (file_exists($himg)) // 상단 이미지
|
||||
echo run_replace('content_head_image_html', '<div id="ctt_himg" class="ctt_img"><img src="'.G5_DATA_URL.'/content/'.$co_id.'_h" alt=""></div>', $co);
|
||||
|
||||
include($skin_file);
|
||||
|
||||
$timg = G5_DATA_PATH.'/content/'.$co_id.'_t';
|
||||
if (file_exists($timg)) // 하단 이미지
|
||||
echo run_replace('content_tail_image_html', '<div id="ctt_timg" class="ctt_img"><img src="'.G5_DATA_URL.'/content/'.$co_id.'_t" alt=""></div>', $co);
|
||||
} else {
|
||||
echo '<p>'.str_replace(G5_PATH.'/', '', $skin_file).'이 존재하지 않습니다.</p>';
|
||||
}
|
||||
|
||||
if ($co['co_include_tail'] && is_include_path_check($co['co_include_tail']))
|
||||
@include_once($co['co_include_tail']);
|
||||
else
|
||||
include_once('./_tail.php');
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = '현재접속자';
|
||||
include_once('./_head.php');
|
||||
|
||||
$list = array();
|
||||
|
||||
$sql = " select a.mb_id, b.mb_nick, b.mb_name, b.mb_email, b.mb_homepage, b.mb_open, b.mb_point, a.lo_ip, a.lo_location, a.lo_url
|
||||
from {$g5['login_table']} a left join {$g5['member_table']} b on (a.mb_id = b.mb_id)
|
||||
where a.mb_id <> '{$config['cf_admin']}'
|
||||
order by a.lo_datetime desc ";
|
||||
$result = sql_query($sql);
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
$row['lo_url'] = get_text($row['lo_url']);
|
||||
$list[$i] = $row;
|
||||
|
||||
if ($row['mb_id']) {
|
||||
$list[$i]['name'] = get_sideview($row['mb_id'], cut_str($row['mb_nick'], $config['cf_cut_name']), $row['mb_email'], $row['mb_homepage']);
|
||||
} else {
|
||||
if ($is_admin)
|
||||
$list[$i]['name'] = $row['lo_ip'];
|
||||
else
|
||||
$list[$i]['name'] = preg_replace("/([0-9]+).([0-9]+).([0-9]+).([0-9]+)/", G5_IP_DISPLAY, $row['lo_ip']);
|
||||
}
|
||||
|
||||
$list[$i]['num'] = sprintf('%03d',$i+1);
|
||||
}
|
||||
|
||||
include_once($connect_skin_path.'/current_connect.skin.php');
|
||||
|
||||
include_once('./_tail.php');
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 최고관리자일 때만 실행
|
||||
if($config['cf_admin'] != $member['mb_id'] || $is_admin != 'super')
|
||||
return;
|
||||
|
||||
// 실행일 비교
|
||||
if(isset($config['cf_optimize_date']) && $config['cf_optimize_date'] >= G5_TIME_YMD)
|
||||
return;
|
||||
|
||||
// 설정일이 지난 접속자로그 삭제
|
||||
if($config['cf_visit_del'] > 0) {
|
||||
$tmp_before_date = date("Y-m-d", G5_SERVER_TIME - ($config['cf_visit_del'] * 86400));
|
||||
$sql = " delete from {$g5['visit_table']} where vi_date < '$tmp_before_date' ";
|
||||
sql_query($sql);
|
||||
sql_query(" OPTIMIZE TABLE `{$g5['visit_table']}`, `{$g5['visit_sum_table']}` ");
|
||||
}
|
||||
|
||||
// 설정일이 지난 인기검색어 삭제
|
||||
if($config['cf_popular_del'] > 0) {
|
||||
$tmp_before_date = date("Y-m-d", G5_SERVER_TIME - ($config['cf_popular_del'] * 86400));
|
||||
$sql = " delete from {$g5['popular_table']} where pp_date < '$tmp_before_date' ";
|
||||
sql_query($sql);
|
||||
sql_query(" OPTIMIZE TABLE `{$g5['popular_table']}` ");
|
||||
}
|
||||
|
||||
// 설정일이 지난 최근게시물 삭제
|
||||
if($config['cf_new_del'] > 0) {
|
||||
$sql = " delete from {$g5['board_new_table']} where (TO_DAYS('".G5_TIME_YMDHIS."') - TO_DAYS(bn_datetime)) > '{$config['cf_new_del']}' ";
|
||||
sql_query($sql);
|
||||
sql_query(" OPTIMIZE TABLE `{$g5['board_new_table']}` ");
|
||||
}
|
||||
|
||||
// 설정일이 지난 쪽지 삭제
|
||||
if($config['cf_memo_del'] > 0) {
|
||||
$sql = " delete from {$g5['memo_table']} where (TO_DAYS('".G5_TIME_YMDHIS."') - TO_DAYS(me_send_datetime)) > '{$config['cf_memo_del']}' ";
|
||||
sql_query($sql);
|
||||
sql_query(" OPTIMIZE TABLE `{$g5['memo_table']}` ");
|
||||
}
|
||||
|
||||
// 탈퇴회원 자동 삭제
|
||||
if($config['cf_leave_day'] > 0) {
|
||||
$sql = " select mb_id from {$g5['member_table']}
|
||||
where (TO_DAYS('".G5_TIME_YMDHIS."') - TO_DAYS(mb_leave_date)) > '{$config['cf_leave_day']}'
|
||||
and mb_memo not regexp '^[0-9]{8}.*삭제함' ";
|
||||
$result = sql_query($sql);
|
||||
while ($row=sql_fetch_array($result))
|
||||
{
|
||||
// 회원자료 삭제
|
||||
member_delete($row['mb_id']);
|
||||
}
|
||||
}
|
||||
|
||||
// 음성 캡챠 파일 삭제
|
||||
$captcha_mp3 = glob(G5_DATA_PATH.'/cache/kcaptcha-*.mp3');
|
||||
if($captcha_mp3 && is_array($captcha_mp3)) {
|
||||
foreach ($captcha_mp3 as $file) {
|
||||
if (filemtime($file) + 86400 < G5_SERVER_TIME) {
|
||||
@unlink($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 실행일 기록
|
||||
if(isset($config['cf_optimize_date'])) {
|
||||
sql_query(" update {$g5['config_table']} set cf_optimize_date = '".G5_TIME_YMD."' ");
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
Array
|
||||
(
|
||||
[0] => login_id
|
||||
[1] => status
|
||||
[2] => display_name
|
||||
[3] => email
|
||||
[4] => is email verified
|
||||
[5] => phone
|
||||
[6] => is phone verified
|
||||
[7] => tenants
|
||||
[8] => role
|
||||
[9] => is test user
|
||||
[10] => given name
|
||||
[11] => middle name
|
||||
[12] => family name
|
||||
[13] => consent expiration
|
||||
[14] => company
|
||||
[15] => completeform
|
||||
[16] => egbimlexpirydate
|
||||
[17] => new_password
|
||||
)
|
||||
@@ -0,0 +1,60 @@
|
||||
Row 2 열 개수 불일치: 1 / 18 -> hg001@hogun.co.kr
|
||||
Row 3 열 개수 불일치: 1 / 18 -> ,activated,호건-01,hg001@hogun.co.kr
|
||||
Row 4 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 5 열 개수 불일치: 1 / 18 -> hg002@hogun.co.kr
|
||||
Row 6 열 개수 불일치: 1 / 18 -> ,activated,호건-02,hg002@hogun.co.kr
|
||||
Row 7 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 8 열 개수 불일치: 1 / 18 -> hg003@hogun.co.kr
|
||||
Row 9 열 개수 불일치: 1 / 18 -> ,activated,호건-03,hg003@hogun.co.kr
|
||||
Row 10 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 11 열 개수 불일치: 1 / 18 -> hg004@hogun.co.kr
|
||||
Row 12 열 개수 불일치: 1 / 18 -> ,activated,호건-04,hg004@hogun.co.kr
|
||||
Row 13 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 14 열 개수 불일치: 1 / 18 -> hg005@hogun.co.kr
|
||||
Row 15 열 개수 불일치: 1 / 18 -> ,activated,호건-05,hg005@hogun.co.kr
|
||||
Row 16 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 17 열 개수 불일치: 1 / 18 -> hg006@hogun.co.kr
|
||||
Row 18 열 개수 불일치: 1 / 18 -> ,activated,호건-06,hg006@hogun.co.kr
|
||||
Row 19 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 20 열 개수 불일치: 1 / 18 -> hg007@hogun.co.kr
|
||||
Row 21 열 개수 불일치: 1 / 18 -> ,activated,호건-07,hg007@hogun.co.kr
|
||||
Row 22 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 23 열 개수 불일치: 1 / 18 -> hg008@hogun.co.kr
|
||||
Row 24 열 개수 불일치: 1 / 18 -> ,activated,호건-08,hg008@hogun.co.kr
|
||||
Row 25 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 26 열 개수 불일치: 1 / 18 -> hg009@hogun.co.kr
|
||||
Row 27 열 개수 불일치: 1 / 18 -> ,activated,호건-09,hg009@hogun.co.kr
|
||||
Row 28 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 29 열 개수 불일치: 1 / 18 -> hg010@hogun.co.kr
|
||||
Row 30 열 개수 불일치: 1 / 18 -> ,activated,호건-10,hg010@hogun.co.kr
|
||||
Row 31 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 32 열 개수 불일치: 1 / 18 -> hg011@hogun.co.kr
|
||||
Row 33 열 개수 불일치: 1 / 18 -> ,activated,호건-11,hg011@hogun.co.kr
|
||||
Row 34 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 35 열 개수 불일치: 1 / 18 -> hg012@hogun.co.kr
|
||||
Row 36 열 개수 불일치: 1 / 18 -> ,activated,호건-12,hg012@hogun.co.kr
|
||||
Row 37 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 38 열 개수 불일치: 1 / 18 -> hg013@hogun.co.kr
|
||||
Row 39 열 개수 불일치: 1 / 18 -> ,activated,호건-13,hg013@hogun.co.kr
|
||||
Row 40 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 41 열 개수 불일치: 1 / 18 -> hg014@hogun.co.kr
|
||||
Row 42 열 개수 불일치: 1 / 18 -> ,activated,호건-14,hg014@hogun.co.kr
|
||||
Row 43 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 44 열 개수 불일치: 1 / 18 -> hg015@hogun.co.kr
|
||||
Row 45 열 개수 불일치: 1 / 18 -> ,activated,호건-15,hg015@hogun.co.kr
|
||||
Row 46 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 47 열 개수 불일치: 1 / 18 -> hg016@hogun.co.kr
|
||||
Row 48 열 개수 불일치: 1 / 18 -> ,activated,호건-16,hg016@hogun.co.kr
|
||||
Row 49 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 50 열 개수 불일치: 1 / 18 -> hg017@hogun.co.kr
|
||||
Row 51 열 개수 불일치: 1 / 18 -> ,activated,호건-17,hg017@hogun.co.kr
|
||||
Row 52 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 53 열 개수 불일치: 1 / 18 -> hg018@hogun.co.kr
|
||||
Row 54 열 개수 불일치: 1 / 18 -> ,activated,호건-18,hg018@hogun.co.kr
|
||||
Row 55 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 56 열 개수 불일치: 1 / 18 -> hg019@hogun.co.kr
|
||||
Row 57 열 개수 불일치: 1 / 18 -> ,activated,호건-19,hg019@hogun.co.kr
|
||||
Row 58 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
Row 59 열 개수 불일치: 1 / 18 -> hg020@hogun.co.kr
|
||||
Row 60 열 개수 불일치: 1 / 18 -> ,activated,호건-20,hg020@hogun.co.kr
|
||||
Row 61 열 개수 불일치: 1 / 18 -> ,TRUE,,FALSE,,,,,,,,호건코리아,TRUE,2026-12-31,hg000000000!
|
||||
@@ -0,0 +1,145 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$delete_token = get_session('ss_delete_token');
|
||||
set_session('ss_delete_token', '');
|
||||
|
||||
if (!($token && $delete_token == $token))
|
||||
alert('토큰 에러로 삭제 불가합니다.');
|
||||
|
||||
//$wr = sql_fetch(" select * from $write_table where wr_id = '$wr_id' ");
|
||||
|
||||
$count_write = $count_comment = 0;
|
||||
|
||||
@include_once($board_skin_path.'/delete.head.skin.php');
|
||||
|
||||
if ($is_admin == 'super') // 최고관리자 통과
|
||||
;
|
||||
else if ($is_admin == 'group') { // 그룹관리자
|
||||
$mb = get_member($write['mb_id']);
|
||||
if ($member['mb_id'] != $group['gr_admin']) // 자신이 관리하는 그룹인가?
|
||||
alert('자신이 관리하는 그룹의 게시판이 아니므로 삭제할 수 없습니다.');
|
||||
else if ($member['mb_level'] < $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
alert('자신의 권한보다 높은 권한의 회원이 작성한 글은 삭제할 수 없습니다.');
|
||||
} else if ($is_admin == 'board') { // 게시판관리자이면
|
||||
$mb = get_member($write['mb_id']);
|
||||
if ($member['mb_id'] != $board['bo_admin']) // 자신이 관리하는 게시판인가?
|
||||
alert('자신이 관리하는 게시판이 아니므로 삭제할 수 없습니다.');
|
||||
else if ($member['mb_level'] < $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
alert('자신의 권한보다 높은 권한의 회원이 작성한 글은 삭제할 수 없습니다.');
|
||||
} else if ($member['mb_id']) {
|
||||
if ($member['mb_id'] !== $write['mb_id'])
|
||||
alert('자신의 글이 아니므로 삭제할 수 없습니다.');
|
||||
} else {
|
||||
if ($write['mb_id'])
|
||||
alert('로그인 후 삭제하세요.', G5_BBS_URL.'/login.php?url='.urlencode(get_pretty_url($bo_table, $wr_id)));
|
||||
else if (!check_password($wr_password, $write['wr_password']))
|
||||
alert('비밀번호가 틀리므로 삭제할 수 없습니다.');
|
||||
}
|
||||
|
||||
$len = strlen($write['wr_reply']);
|
||||
if ($len < 0) $len = 0;
|
||||
$reply = substr($write['wr_reply'], 0, $len);
|
||||
|
||||
// 원글만 구한다.
|
||||
$sql = " select count(*) as cnt from $write_table
|
||||
where wr_reply like '$reply%'
|
||||
and wr_id <> '{$write['wr_id']}'
|
||||
and wr_num = '{$write['wr_num']}'
|
||||
and wr_is_comment = 0 ";
|
||||
$row = sql_fetch($sql);
|
||||
if ($row['cnt'] && !$is_admin)
|
||||
alert('이 글과 관련된 답변글이 존재하므로 삭제 할 수 없습니다.\\n\\n우선 답변글부터 삭제하여 주십시오.');
|
||||
|
||||
// 코멘트 달린 원글의 삭제 여부
|
||||
$sql = " select count(*) as cnt from $write_table
|
||||
where wr_parent = '$wr_id'
|
||||
and mb_id <> '{$member['mb_id']}'
|
||||
and wr_is_comment = 1 ";
|
||||
$row = sql_fetch($sql);
|
||||
if ($row['cnt'] >= $board['bo_count_delete'] && !$is_admin)
|
||||
alert('이 글과 관련된 코멘트가 존재하므로 삭제 할 수 없습니다.\\n\\n코멘트가 '.$board['bo_count_delete'].'건 이상 달린 원글은 삭제할 수 없습니다.');
|
||||
|
||||
|
||||
// 사용자 코드 실행
|
||||
@include_once($board_skin_path.'/delete.skin.php');
|
||||
|
||||
|
||||
// 나라오름님 수정 : 원글과 코멘트수가 정상적으로 업데이트 되지 않는 오류를 잡아 주셨습니다.
|
||||
//$sql = " select wr_id, mb_id, wr_comment from $write_table where wr_parent = '$write[wr_id]' order by wr_id ";
|
||||
$sql = " select wr_id, mb_id, wr_is_comment, wr_content from $write_table where wr_parent = '{$write['wr_id']}' order by wr_id ";
|
||||
$result = sql_query($sql);
|
||||
while ($row = sql_fetch_array($result))
|
||||
{
|
||||
// 원글이라면
|
||||
if (!$row['wr_is_comment'])
|
||||
{
|
||||
// 원글 포인트 삭제
|
||||
if (!delete_point($row['mb_id'], $bo_table, $row['wr_id'], '쓰기'))
|
||||
insert_point($row['mb_id'], $board['bo_write_point'] * (-1), "{$board['bo_subject']} {$row['wr_id']} 글삭제");
|
||||
|
||||
// 업로드된 파일이 있다면 파일삭제
|
||||
$sql2 = " select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$row['wr_id']}' ";
|
||||
$result2 = sql_query($sql2);
|
||||
while ($row2 = sql_fetch_array($result2)) {
|
||||
|
||||
$delete_file = run_replace('delete_file_path', G5_DATA_PATH.'/file/'.$bo_table.'/'.str_replace('../', '', $row2['bf_file']), $row2);
|
||||
if( file_exists($delete_file) ){
|
||||
@unlink($delete_file);
|
||||
}
|
||||
// 썸네일삭제
|
||||
if(preg_match("/\.({$config['cf_image_extension']})$/i", $row2['bf_file'])) {
|
||||
delete_board_thumbnail($bo_table, $row2['bf_file']);
|
||||
}
|
||||
}
|
||||
|
||||
// 에디터 썸네일 삭제
|
||||
delete_editor_thumbnail($row['wr_content']);
|
||||
|
||||
// 파일테이블 행 삭제
|
||||
sql_query(" delete from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$row['wr_id']}' ");
|
||||
|
||||
$count_write++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 코멘트 포인트 삭제
|
||||
if (!delete_point($row['mb_id'], $bo_table, $row['wr_id'], '댓글'))
|
||||
insert_point($row['mb_id'], $board['bo_comment_point'] * (-1), "{$board['bo_subject']} {$write['wr_id']}-{$row['wr_id']} 댓글삭제");
|
||||
|
||||
$count_comment++;
|
||||
}
|
||||
}
|
||||
|
||||
// 게시글과 댓글 삭제
|
||||
sql_query(" delete from $write_table where wr_parent = '{$write['wr_id']}' ");
|
||||
|
||||
// 최근게시물 삭제
|
||||
sql_query(" delete from {$g5['board_new_table']} where bo_table = '$bo_table' and wr_parent = '{$write['wr_id']}' ");
|
||||
|
||||
// 스크랩 삭제
|
||||
sql_query(" delete from {$g5['scrap_table']} where bo_table = '$bo_table' and wr_id = '{$write['wr_id']}' ");
|
||||
|
||||
/*
|
||||
// 공지사항 삭제
|
||||
$notice_array = explode("\n", trim($board['bo_notice']));
|
||||
$bo_notice = "";
|
||||
for ($k=0; $k<count($notice_array); $k++)
|
||||
if ((int)$write[wr_id] != (int)$notice_array[$k])
|
||||
$bo_notice .= $notice_array[$k] . "\n";
|
||||
$bo_notice = trim($bo_notice);
|
||||
*/
|
||||
$bo_notice = board_notice($board['bo_notice'], $write['wr_id']);
|
||||
sql_query(" update {$g5['board_table']} set bo_notice = '$bo_notice' where bo_table = '$bo_table' ");
|
||||
|
||||
// 글숫자 감소
|
||||
if ($count_write > 0 || $count_comment > 0)
|
||||
sql_query(" update {$g5['board_table']} set bo_count_write = bo_count_write - '$count_write', bo_count_comment = bo_count_comment - '$count_comment' where bo_table = '$bo_table' ");
|
||||
|
||||
@include_once($board_skin_path.'/delete.tail.skin.php');
|
||||
|
||||
delete_cache_latest($bo_table);
|
||||
|
||||
run_event('bbs_delete', $write, $board);
|
||||
|
||||
goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&page='.$page.$qstr));
|
||||
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if(!$is_admin)
|
||||
alert('접근 권한이 없습니다.', G5_URL);
|
||||
|
||||
// 4.11
|
||||
@include_once($board_skin_path.'/delete_all.head.skin.php');
|
||||
|
||||
$count_write = 0;
|
||||
$count_comment = 0;
|
||||
|
||||
$tmp_array = array();
|
||||
if ($wr_id) // 건별삭제
|
||||
$tmp_array[0] = $wr_id;
|
||||
else // 일괄삭제
|
||||
$tmp_array = (isset($_POST['chk_wr_id']) && is_array($_POST['chk_wr_id'])) ? $_POST['chk_wr_id'] : array();
|
||||
|
||||
$chk_count = count($tmp_array);
|
||||
|
||||
if($chk_count > (G5_IS_MOBILE ? $board['bo_mobile_page_rows'] : $board['bo_page_rows']))
|
||||
alert('올바른 방법으로 이용해 주십시오.');
|
||||
|
||||
// 사용자 코드 실행
|
||||
@include_once($board_skin_path.'/delete_all.skin.php');
|
||||
|
||||
// 거꾸로 읽는 이유는 답변글부터 삭제가 되어야 하기 때문임
|
||||
for ($i=$chk_count-1; $i>=0; $i--)
|
||||
{
|
||||
$write = sql_fetch(" select * from $write_table where wr_id = '$tmp_array[$i]' ");
|
||||
|
||||
if ($is_admin == 'super') // 최고관리자 통과
|
||||
;
|
||||
else if ($is_admin == 'group') // 그룹관리자
|
||||
{
|
||||
$mb = get_member($write['mb_id']);
|
||||
if ($member['mb_id'] == $group['gr_admin']) // 자신이 관리하는 그룹인가?
|
||||
{
|
||||
if ($member['mb_level'] >= $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
else
|
||||
continue;
|
||||
}
|
||||
else if ($is_admin == 'board') // 게시판관리자이면
|
||||
{
|
||||
$mb = get_member($write['mb_id']);
|
||||
if ($member['mb_id'] == $board['bo_admin']) // 자신이 관리하는 게시판인가?
|
||||
if ($member['mb_level'] >= $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
;
|
||||
else
|
||||
continue;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
else if ($member['mb_id'] && $member['mb_id'] == $write['mb_id']) // 자신의 글이라면
|
||||
{
|
||||
;
|
||||
}
|
||||
else if ($wr_password && !$write['mb_id'] && check_password($wr_password, $write['wr_password'])) // 비밀번호가 같다면
|
||||
{
|
||||
;
|
||||
}
|
||||
else
|
||||
continue; // 나머지는 삭제 불가
|
||||
|
||||
$len = strlen($write['wr_reply']);
|
||||
if ($len < 0) $len = 0;
|
||||
$reply = substr($write['wr_reply'], 0, $len);
|
||||
|
||||
// 원글만 구한다.
|
||||
$sql = " select count(*) as cnt from $write_table
|
||||
where wr_reply like '$reply%'
|
||||
and wr_id <> '{$write['wr_id']}'
|
||||
and wr_num = '{$write['wr_num']}'
|
||||
and wr_is_comment = 0 ";
|
||||
$row = sql_fetch($sql);
|
||||
if ($row['cnt'])
|
||||
continue;
|
||||
|
||||
// 나라오름님 수정 : 원글과 코멘트수가 정상적으로 업데이트 되지 않는 오류를 잡아 주셨습니다.
|
||||
//$sql = " select wr_id, mb_id, wr_comment from {$write_table} where wr_parent = '{$write[wr_id]}' order by wr_id ";
|
||||
$sql = " select wr_id, mb_id, wr_is_comment, wr_content from $write_table where wr_parent = '{$write['wr_id']}' order by wr_id ";
|
||||
$result = sql_query($sql);
|
||||
while ($row = sql_fetch_array($result))
|
||||
{
|
||||
// 원글이라면
|
||||
if (!$row['wr_is_comment'])
|
||||
{
|
||||
// 원글 포인트 삭제
|
||||
if (!delete_point($row['mb_id'], $bo_table, $row['wr_id'], '쓰기'))
|
||||
insert_point($row['mb_id'], $board['bo_write_point'] * (-1), "{$board['bo_subject']} {$row['wr_id']} 글 삭제");
|
||||
|
||||
// 업로드된 파일이 있다면
|
||||
$sql2 = " select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$row['wr_id']}' ";
|
||||
$result2 = sql_query($sql2);
|
||||
while ($row2 = sql_fetch_array($result2)) {
|
||||
// 파일삭제
|
||||
$delete_file = run_replace('delete_file_path', G5_DATA_PATH.'/file/'.$bo_table.'/'.str_replace('../', '',$row2['bf_file']), $row2);
|
||||
if( file_exists($delete_file) ){
|
||||
@unlink($delete_file);
|
||||
}
|
||||
|
||||
// 썸네일삭제
|
||||
if(preg_match("/\.({$config['cf_image_extension']})$/i", $row2['bf_file'])) {
|
||||
delete_board_thumbnail($bo_table, $row2['bf_file']);
|
||||
}
|
||||
}
|
||||
|
||||
// 에디터 썸네일 삭제
|
||||
delete_editor_thumbnail($row['wr_content']);
|
||||
|
||||
// 파일테이블 행 삭제
|
||||
sql_query(" delete from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$row['wr_id']}' ");
|
||||
|
||||
$count_write++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 코멘트 포인트 삭제
|
||||
if (!delete_point($row['mb_id'], $bo_table, $row['wr_id'], '댓글'))
|
||||
insert_point($row['mb_id'], $board['bo_comment_point'] * (-1), "{$board['bo_subject']} {$write['wr_id']}-{$row['wr_id']} 댓글삭제");
|
||||
|
||||
$count_comment++;
|
||||
}
|
||||
}
|
||||
|
||||
// 게시글 삭제
|
||||
sql_query(" delete from $write_table where wr_parent = '{$write['wr_id']}' ");
|
||||
|
||||
// 최근게시물 삭제
|
||||
sql_query(" delete from {$g5['board_new_table']} where bo_table = '$bo_table' and wr_parent = '{$write['wr_id']}' ");
|
||||
|
||||
// 스크랩 삭제
|
||||
sql_query(" delete from {$g5['scrap_table']} where bo_table = '$bo_table' and wr_id = '{$write['wr_id']}' ");
|
||||
|
||||
/*
|
||||
// 공지사항 삭제
|
||||
$notice_array = explode(',', trim($board['bo_notice']));
|
||||
$bo_notice = "";
|
||||
for ($k=0; $k<count($notice_array); $k++)
|
||||
if ((int)$write['wr_id'] != (int)$notice_array[$k])
|
||||
$bo_notice .= $notice_array[$k].',';
|
||||
$bo_notice = trim($bo_notice);
|
||||
*/
|
||||
$bo_notice = board_notice($board['bo_notice'], $write['wr_id']);
|
||||
sql_query(" update {$g5['board_table']} set bo_notice = '$bo_notice' where bo_table = '$bo_table' ");
|
||||
$board['bo_notice'] = $bo_notice;
|
||||
}
|
||||
|
||||
// 글숫자 감소
|
||||
if ($count_write > 0 || $count_comment > 0)
|
||||
sql_query(" update {$g5['board_table']} set bo_count_write = bo_count_write - '$count_write', bo_count_comment = bo_count_comment - '$count_comment' where bo_table = '$bo_table' ");
|
||||
|
||||
// 4.11
|
||||
@include_once($board_skin_path.'/delete_all.tail.skin.php');
|
||||
|
||||
delete_cache_latest($bo_table);
|
||||
|
||||
run_event('bbs_delete_all', $tmp_array, $board);
|
||||
|
||||
goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&page='.$page.$qstr));
|
||||
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
// 코멘트 삭제
|
||||
include_once('./_common.php');
|
||||
|
||||
$comment_id = isset($_REQUEST['comment_id']) ? (int) $_REQUEST['comment_id'] : 0;
|
||||
|
||||
$delete_comment_token = get_session('ss_delete_comment_'.$comment_id.'_token');
|
||||
set_session('ss_delete_comment_'.$comment_id.'_token', '');
|
||||
|
||||
if (!($token && $delete_comment_token == $token))
|
||||
alert('토큰 에러로 삭제 불가합니다.');
|
||||
|
||||
// 4.1
|
||||
@include_once($board_skin_path.'/delete_comment.head.skin.php');
|
||||
|
||||
$write = sql_fetch(" select * from {$write_table} where wr_id = '{$comment_id}' ");
|
||||
|
||||
if (!$write['wr_id'] || !$write['wr_is_comment'])
|
||||
alert('등록된 코멘트가 없거나 코멘트 글이 아닙니다.');
|
||||
|
||||
if ($is_admin == 'super') // 최고관리자 통과
|
||||
;
|
||||
else if ($is_admin == 'group') { // 그룹관리자
|
||||
$mb = get_member($write['mb_id']);
|
||||
if ($member['mb_id'] === $group['gr_admin']) { // 자신이 관리하는 그룹인가?
|
||||
if ($member['mb_level'] >= $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
;
|
||||
else
|
||||
alert('그룹관리자의 권한보다 높은 회원의 코멘트이므로 삭제할 수 없습니다.');
|
||||
} else
|
||||
alert('자신이 관리하는 그룹의 게시판이 아니므로 코멘트를 삭제할 수 없습니다.');
|
||||
} else if ($is_admin === 'board') { // 게시판관리자이면
|
||||
$mb = get_member($write['mb_id']);
|
||||
if ($member['mb_id'] === $board['bo_admin']) { // 자신이 관리하는 게시판인가?
|
||||
if ($member['mb_level'] >= $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
;
|
||||
else
|
||||
alert('게시판관리자의 권한보다 높은 회원의 코멘트이므로 삭제할 수 없습니다.');
|
||||
} else
|
||||
alert('자신이 관리하는 게시판이 아니므로 코멘트를 삭제할 수 없습니다.');
|
||||
} else if ($member['mb_id']) {
|
||||
if ($member['mb_id'] !== $write['mb_id'])
|
||||
alert('자신의 글이 아니므로 삭제할 수 없습니다.');
|
||||
} else {
|
||||
if (!check_password($wr_password, $write['wr_password']))
|
||||
alert('비밀번호가 틀립니다.');
|
||||
}
|
||||
|
||||
$len = strlen($write['wr_comment_reply']);
|
||||
if ($len < 0) $len = 0;
|
||||
$comment_reply = substr($write['wr_comment_reply'], 0, $len);
|
||||
|
||||
$sql = " select count(*) as cnt from {$write_table}
|
||||
where wr_comment_reply like '{$comment_reply}%'
|
||||
and wr_id <> '{$comment_id}'
|
||||
and wr_parent = '{$write['wr_parent']}'
|
||||
and wr_comment = '{$write['wr_comment']}'
|
||||
and wr_is_comment = 1 ";
|
||||
$row = sql_fetch($sql);
|
||||
if ($row['cnt'] && !$is_admin)
|
||||
alert('이 코멘트와 관련된 답변코멘트가 존재하므로 삭제 할 수 없습니다.');
|
||||
|
||||
// 코멘트 포인트 삭제
|
||||
if (!delete_point($write['mb_id'], $bo_table, $comment_id, '댓글'))
|
||||
insert_point($write['mb_id'], $board['bo_comment_point'] * (-1), "{$board['bo_subject']} {$write['wr_parent']}-{$comment_id} 댓글삭제");
|
||||
|
||||
// 코멘트 삭제
|
||||
sql_query(" delete from {$write_table} where wr_id = '{$comment_id}' ");
|
||||
|
||||
// 코멘트가 삭제되므로 해당 게시물에 대한 최근 시간을 다시 얻는다.
|
||||
$sql = " select max(wr_datetime) as wr_last from {$write_table} where wr_parent = '{$write['wr_parent']}' ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
// 원글의 코멘트 숫자를 감소
|
||||
sql_query(" update {$write_table} set wr_comment = wr_comment - 1, wr_last = '{$row['wr_last']}' where wr_id = '{$write['wr_parent']}' ");
|
||||
|
||||
// 코멘트 숫자 감소
|
||||
sql_query(" update {$g5['board_table']} set bo_count_comment = bo_count_comment - 1 where bo_table = '{$bo_table}' ");
|
||||
|
||||
// 새글 삭제
|
||||
sql_query(" delete from {$g5['board_new_table']} where bo_table = '{$bo_table}' and wr_id = '{$comment_id}' ");
|
||||
|
||||
// 사용자 코드 실행
|
||||
@include_once($board_skin_path.'/delete_comment.skin.php');
|
||||
@include_once($board_skin_path.'/delete_comment.tail.skin.php');
|
||||
|
||||
delete_cache_latest($bo_table);
|
||||
|
||||
run_event('bbs_delete_comment', $comment_id, $board);
|
||||
|
||||
goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$write['wr_parent'].'&page='.$page. $qstr));
|
||||
@@ -0,0 +1,259 @@
|
||||
<?php
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
header('Content-Type: application/json; charset=UTF-8');
|
||||
set_time_limit(600);
|
||||
// file_put_contents(__DIR__.'/debug_tenant.log', print_r($input, true), FILE_APPEND);
|
||||
|
||||
// === 환경변수 (실서비스 시 교체)
|
||||
$PROJECT_ID = 'P2wON5fy1K6kyia269VpeIzYP8oP';
|
||||
$MGMT_KEY = 'K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj';
|
||||
// ✅ Tenant ID 매핑 테이블
|
||||
$TENANT_IDS = [
|
||||
'customer' => 'T2x4TDzxasp7auPCPcN8uOrxXchh',
|
||||
'family' => 'T2wQcWCBhUfJgUWHWgNwLg4iUDVY',
|
||||
'edu' => 'T31ZmUcwOZbwk0y3YmMxrPCpzpQR',
|
||||
'egBIM' => 'T2yGFrGSnFX601G22JOMojJX7OMd',
|
||||
];
|
||||
|
||||
// === 입력값(JSON)
|
||||
$input = json_decode(file_get_contents('php://input'), true);
|
||||
$csvUrl = trim($input['csv_url'] ?? '');
|
||||
$expiryIn = trim($input['expiry'] ?? '');
|
||||
$sendReset = !empty($input['send_reset']);
|
||||
$tenantType = trim($input['tenant_type'] ?? '');
|
||||
// echo json_encode(['tenantType' => $tenantType]);
|
||||
// exit;
|
||||
|
||||
if (!$csvUrl) {
|
||||
echo json_encode(['status'=>'fail','message'=>'CSV URL 누락']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ✅ cURL 방식으로 CSV 가져오기 (Cafe24 호환)
|
||||
function fetch_csv($url) {
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_SSL_VERIFYPEER => false,
|
||||
CURLOPT_SSL_VERIFYHOST => false,
|
||||
CURLOPT_TIMEOUT => 30,
|
||||
CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; PHP CSV Importer)',
|
||||
]);
|
||||
$data = curl_exec($ch);
|
||||
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$err = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
if ($httpcode !== 200 || !$data) {
|
||||
throw new Exception("CSV 다운로드 실패 (HTTP {$httpcode}) {$err}");
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
try {
|
||||
$csv = fetch_csv($csvUrl);
|
||||
|
||||
// ✅ UTF-8 BOM 제거
|
||||
if (substr($csv, 0, 3) === "\xEF\xBB\xBF") {
|
||||
$csv = substr($csv, 3);
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo json_encode(['status'=>'fail','message'=>'CSV 파일을 불러올 수 없습니다: '.$e->getMessage()]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$rows = array_map('str_getcsv', preg_split("/\r\n|\n|\r/", trim($csv)));
|
||||
if (count($rows) < 2) {
|
||||
echo json_encode(['status'=>'fail','message'=>'CSV 데이터 없음']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ✅ 헤더 정규화 (BOM, 공백, 대소문자 통일)
|
||||
$header = array_map(function($h) {
|
||||
$h = trim($h);
|
||||
$h = preg_replace('/^\xEF\xBB\xBF/', '', $h); // BOM 제거
|
||||
return strtolower($h);
|
||||
}, $rows[0]);
|
||||
file_put_contents(__DIR__.'/debug_header.log', print_r($header, true));
|
||||
$dataRows = array_slice($rows, 1);
|
||||
|
||||
// === 유틸 함수 ===
|
||||
function is_true($v){ $s = strtolower(trim((string)$v)); return in_array($s, ['true','1','y','yes'], true); }
|
||||
function parse_list($v){
|
||||
$t = trim((string)$v);
|
||||
if ($t === '') return [];
|
||||
if ($t[0] === '[') { $a = json_decode($t, true); return is_array($a)? $a: []; }
|
||||
return array_values(array_filter(array_map('trim', explode(',', $t)), fn($x)=>$x!==''));
|
||||
}
|
||||
function call_api($url, $opts){
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, $opts + [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>45]);
|
||||
$body = curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$err = curl_error($ch);
|
||||
curl_close($ch);
|
||||
return [$code, $body, $err];
|
||||
}
|
||||
function mgmt_api($path, $payload, $PROJECT_ID, $MGMT_KEY){
|
||||
return call_api("https://api.descope.com/v1/mgmt/$path", [
|
||||
CURLOPT_POST=>true,
|
||||
CURLOPT_HTTPHEADER=>[
|
||||
"Authorization: Bearer {$PROJECT_ID}:{$MGMT_KEY}",
|
||||
"Content-Type: application/json",
|
||||
],
|
||||
CURLOPT_POSTFIELDS=> json_encode($payload, JSON_UNESCAPED_UNICODE),
|
||||
]);
|
||||
}
|
||||
function update_password($PROJECT_ID, $MGMT_KEY, $email, $password){
|
||||
$payload = ["loginId"=>$email, "newPassword"=>$password];
|
||||
return call_api("https://api.descope.com/v1/mgmt/password/update", [
|
||||
CURLOPT_POST=>true,
|
||||
CURLOPT_HTTPHEADER=>[
|
||||
"Authorization: Bearer {$PROJECT_ID}:{$MGMT_KEY}",
|
||||
"Content-Type: application/json",
|
||||
],
|
||||
CURLOPT_POSTFIELDS=> json_encode($payload),
|
||||
]);
|
||||
}
|
||||
|
||||
// === 날짜 변환
|
||||
$expiryISO = null;
|
||||
if ($expiryIn !== '') {
|
||||
$dt = date_create($expiryIn);
|
||||
if ($dt) $expiryISO = $dt->format(DateTime::ATOM);
|
||||
}
|
||||
|
||||
// === 메인 루프
|
||||
$created=0; $updated=0; $failed=0; $errors=[];
|
||||
|
||||
foreach ($dataRows as $i => $row) {
|
||||
if (count($row) !== count($header)) {
|
||||
file_put_contents(__DIR__.'/debug_mismatch.log',
|
||||
"Row ".($i+2)." 열 개수 불일치: ".count($row)." / ".count($header)." -> ".implode(',', $row)."\n",
|
||||
FILE_APPEND
|
||||
);
|
||||
}
|
||||
if (count($row) === 1 && trim($row[0])==='') continue;
|
||||
$rec = array_combine($header, array_pad($row, count($header), ''));
|
||||
|
||||
$loginId = trim($rec['login_id'] ?? '');
|
||||
$email = trim($rec['email'] ?? '');
|
||||
if (!$loginId || !$email) {
|
||||
$failed++; $errors[]=['row'=>$i+2,'error'=>'login_id/email 누락']; continue;
|
||||
}
|
||||
|
||||
$status = trim($rec['status'] ?? 'activated');
|
||||
$name = trim($rec['display_name'] ?? '');
|
||||
$phone = trim($rec['Phone'] ?? '');
|
||||
$verifiedEmail = true; // ✅ 모든 계정 이메일 인증 완료로 처리
|
||||
$verifiedPhone = is_true($rec['Phone Verified'] ?? '');
|
||||
$tenants = array_map(fn($t)=>['tenantId'=>$t], parse_list($rec['tenants'] ?? ''));
|
||||
$roles = parse_list($rec['role'] ?? '');
|
||||
$company = trim($rec['company'] ?? '');
|
||||
// $completeForm = is_true($rec['completeForm'] ?? '');
|
||||
$completeForm = true; //추가정보입력 무조건 완료
|
||||
$expiryDate = $rec['egBimLExpiryDate'] ?? '';
|
||||
$isTestUser = trim($rec['Is Test User'] ?? '');
|
||||
$newPassword = trim($rec['new_password'] ?? '');
|
||||
|
||||
// ✅ 테넌트 자동 지정 (팝업 선택 우선)
|
||||
if (isset($TENANT_IDS[$tenantType])) {
|
||||
$tenants = [['tenantId' => $TENANT_IDS[$tenantType]]];
|
||||
|
||||
// ✅ 복수 등록 규칙
|
||||
if ($tenantType === 'customer') {
|
||||
$tenants[] = ['tenantId' => $TENANT_IDS['egBIM']];
|
||||
}
|
||||
} else {
|
||||
// fallback (CSV 내 tenants 열 직접 입력 시)
|
||||
$tenants = array_map(fn($t)=>['tenantId'=>$t], parse_list($rec['tenants'] ?? ''));
|
||||
}
|
||||
|
||||
// customAttributes 구성
|
||||
$custom = [
|
||||
'company' => $company ?: null,
|
||||
'completeForm' => $completeForm,
|
||||
'isTestUser' => $isTestUser,
|
||||
];
|
||||
// 시트에서 만료일이 따로 있을 경우 우선
|
||||
if ($expiryDate) {
|
||||
$dt = date_create($expiryDate);
|
||||
if ($dt) $custom['egBimLExpiryDate'] = $dt->format(DateTime::ATOM);
|
||||
} elseif ($expiryISO) {
|
||||
$custom['egBimLExpiryDate'] = $expiryISO;
|
||||
}
|
||||
|
||||
// 생성/수정 페이로드
|
||||
$payload = array_filter([
|
||||
'loginId' => $loginId,
|
||||
'email' => $email,
|
||||
'name' => $name,
|
||||
'phone' => $phone,
|
||||
'status' => 'activated', // ✅ 명시적으로 활성상태
|
||||
'invite' => false, // ✅ 초대 모드 비활성화
|
||||
'verifiedEmail' => $verifiedEmail,
|
||||
'verifiedPhone' => $verifiedPhone,
|
||||
'password' => $newPassword ?: null, // ✅ 초기 비밀번호 직접 설정
|
||||
'roleNames' => $roles ?: null,
|
||||
'userTenants' => $tenants ?: null,
|
||||
'customAttributes' => $custom,
|
||||
], fn($v)=>$v!==null);
|
||||
|
||||
// 1) 생성
|
||||
[$code, $body, $err] = mgmt_api('user/create', $payload, $PROJECT_ID, $MGMT_KEY);
|
||||
|
||||
if ($code === 200 || $code === 201) {
|
||||
$created++;
|
||||
usleep(200000); // 0.2초 대기 후 상태 갱신
|
||||
// ✅ 생성 직후 강제 활성화 (대시보드 표시 즉시 반영)
|
||||
mgmt_api('user/update/status', [
|
||||
'loginId' => $loginId,
|
||||
'status' => 'activated'
|
||||
], $PROJECT_ID, $MGMT_KEY);
|
||||
} elseif ($code === 409) {
|
||||
// 2) 이미 존재 시 업데이트
|
||||
[$uCode, $uBody, $uErr] = mgmt_api('user/update', $payload, $PROJECT_ID, $MGMT_KEY);
|
||||
if ($uCode === 200) $updated++;
|
||||
else {
|
||||
$failed++; $errors[]=['row'=>$i+2,'loginId'=>$loginId,'error'=>"update:$uCode $uBody"];
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$failed++; $errors[]=['row'=>$i+2,'loginId'=>$loginId,'error'=>"create:$code $body"];
|
||||
continue;
|
||||
}
|
||||
|
||||
// 3) 비밀번호 설정(new_password)
|
||||
if ($newPassword !== '') {
|
||||
[$pwCode, $pwBody, $pwErr] = update_password($PROJECT_ID, $MGMT_KEY, $email, $newPassword);
|
||||
if ($pwCode !== 200) {
|
||||
$errors[]=['row'=>$i+2,'loginId'=>$loginId,'error'=>"비밀번호 변경 실패 ($pwCode)"];
|
||||
}
|
||||
}
|
||||
|
||||
// // 4) 재설정 이메일 발송 (옵션)
|
||||
// if ($sendReset) {
|
||||
// call_api("https://api.descope.com/v1/auth/password/reset/start", [
|
||||
// CURLOPT_POST=>true,
|
||||
// CURLOPT_HTTPHEADER=>[
|
||||
// "x-descope-project-id: {$PROJECT_ID}",
|
||||
// "Content-Type: application/json",
|
||||
// ],
|
||||
// CURLOPT_POSTFIELDS=> json_encode(["loginId"=>$loginId]),
|
||||
// ]);
|
||||
// }
|
||||
|
||||
usleep(120000); // rate-limit
|
||||
}
|
||||
|
||||
// === 결과 출력
|
||||
echo json_encode([
|
||||
'status'=>'ok',
|
||||
'created'=>$created,
|
||||
'updated'=>$updated,
|
||||
'failed'=>$failed,
|
||||
'errors'=>$errors,
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
@@ -0,0 +1,315 @@
|
||||
<?php
|
||||
// // /egbim/bbs/descope_qa_comment.php
|
||||
// header('Content-Type: application/json; charset=utf-8');
|
||||
// ini_set('display_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
// /* 공통 응답 헬퍼 */
|
||||
// function out($arr, $code=200){
|
||||
// http_response_code($code);
|
||||
// echo json_encode($arr, JSON_UNESCAPED_UNICODE);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// /* 세션 복원 */
|
||||
// require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
// if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||||
|
||||
// /* 로그인 정보 */
|
||||
// $loginId = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
// $userName = $_SESSION['user']['name'] ?? ($_SESSION['user']['userName'] ?? '');
|
||||
|
||||
// /* 관리자 가드 (하드코딩 3인) - 외부 파일 있으면 사용, 없으면 폴백 */
|
||||
// $ADMIN_IDS = [
|
||||
// 'kjy0426@hanmaceng.co.kr',
|
||||
// 'b24014@hanmaceng.co.kr',
|
||||
// 'b23065@hanmaceng.co.kr',
|
||||
// 'b23008@baroncs.co.kr',
|
||||
// 'cjy627@hanmaceng.co.kr',
|
||||
// 'b23072@hanmaceng.co.kr',
|
||||
// ];
|
||||
|
||||
// // ✅ 관리자 가드
|
||||
// @include_once $_SERVER['DOCUMENT_ROOT'].'/egbim/bbs/admin_guard.php';
|
||||
// $isAdmin = function_exists('is_qna_admin') ? is_qna_admin($loginId) : false;
|
||||
|
||||
// /* 입력(JSON 또는 form) */
|
||||
// $raw = file_get_contents('php://input');
|
||||
// $data = json_decode($raw, true);
|
||||
// if (!is_array($data) || !isset($data['postId'])) $data = $_POST;
|
||||
|
||||
// $postId = isset($data['postId']) ? (int)$data['postId'] : 0;
|
||||
// $comment = isset($data['comment']) ? trim((string)$data['comment']) : '';
|
||||
|
||||
// if ($postId < 1 || $comment === '') {
|
||||
// out(['status'=>'fail','message'=>'잘못된 요청입니다.'], 400);
|
||||
// }
|
||||
// if (mb_strlen($comment,'UTF-8') > 2000) {
|
||||
// out(['status'=>'fail','message'=>'댓글은 2,000자 이내로 입력하세요.'], 400);
|
||||
// }
|
||||
|
||||
// /* DB 연결 */
|
||||
// try{
|
||||
// $pdo = new PDO(
|
||||
// "mysql:host=localhost;dbname=egbim;charset=utf8mb4",
|
||||
// 'egbim','baron3840!!',
|
||||
// [
|
||||
// PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
|
||||
// PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,
|
||||
// ]
|
||||
// );
|
||||
// }catch(Exception $e){
|
||||
// out(['status'=>'fail','message'=>'DB 연결 실패: '.$e->getMessage()],500);
|
||||
// }
|
||||
|
||||
// /* 글 존재 및 권한 체크
|
||||
// - 관리자: 모든 글/비밀글에 댓글 OK
|
||||
// - 일반(비관리자): "비밀글이 아니고(category = general)"인 글에만 댓글 허용
|
||||
// */
|
||||
// $st = $pdo->prepare("SELECT post_id, login_id AS author_id, is_secret FROM qa_posts WHERE post_id=?");
|
||||
// $st->execute([$postId]);
|
||||
// $post = $st->fetch();
|
||||
// if (!$post) out(['status'=>'fail','message'=>'존재하지 않는 글입니다.'],404);
|
||||
|
||||
// if (!$isAdmin && (int)$post['is_secret'] === 1 && $post['author_id'] !== $loginId) {
|
||||
// out(['status'=>'fail','message'=>'비밀글에는 작성자 본인과 관리자만 댓글을 작성할 수 있습니다.'],403);
|
||||
// }
|
||||
|
||||
// /* 로그인 이름 폴백 (비로그인/게스트 허용 유지) */
|
||||
// if ($loginId === '') $loginId = 'guest';
|
||||
// if ($userName === '') $userName = $loginId;
|
||||
|
||||
// /* qa_comments.user_name 컬럼 존재 여부 확인 (있으면 이름도 저장) */
|
||||
// $hasUserName = false;
|
||||
// $q = $pdo->prepare("
|
||||
// SELECT COUNT(*)
|
||||
// FROM INFORMATION_SCHEMA.COLUMNS
|
||||
// WHERE TABLE_SCHEMA = DATABASE()
|
||||
// AND TABLE_NAME = 'qa_comments'
|
||||
// AND COLUMN_NAME = 'user_name'
|
||||
// ");
|
||||
// $q->execute();
|
||||
// $hasUserName = ((int)$q->fetchColumn() > 0);
|
||||
|
||||
// /* 저장 */
|
||||
// try{
|
||||
// if ($hasUserName){
|
||||
// $ins = $pdo->prepare("
|
||||
// INSERT INTO qa_comments (post_id, commenter, user_name, content, created_at)
|
||||
// VALUES (:pid, :login_id, :user_name, :content, NOW())
|
||||
// ");
|
||||
// $ins->execute([
|
||||
// ':pid' => $postId,
|
||||
// ':login_id' => $loginId,
|
||||
// ':user_name' => $userName,
|
||||
// ':content' => $comment,
|
||||
// ]);
|
||||
// } else {
|
||||
// $ins = $pdo->prepare("
|
||||
// INSERT INTO qa_comments (post_id, commenter, content, created_at)
|
||||
// VALUES (:pid, :login_id, :content, NOW())
|
||||
// ");
|
||||
// $ins->execute([
|
||||
// ':pid' => $postId,
|
||||
// ':login_id' => $loginId,
|
||||
// ':content' => $comment,
|
||||
// ]);
|
||||
// }
|
||||
|
||||
// $cid = (int)$pdo->lastInsertId();
|
||||
|
||||
// // 다시 조회
|
||||
// if ($hasUserName){
|
||||
// $sel = $pdo->prepare("
|
||||
// SELECT comment_id, commenter AS login_id, user_name,
|
||||
// content AS comment_text, created_at
|
||||
// FROM qa_comments
|
||||
// WHERE comment_id = :cid
|
||||
// ");
|
||||
// } else {
|
||||
// $sel = $pdo->prepare("
|
||||
// SELECT comment_id, commenter AS login_id,
|
||||
// NULL AS user_name, content AS comment_text, created_at
|
||||
// FROM qa_comments
|
||||
// WHERE comment_id = :cid
|
||||
// ");
|
||||
// }
|
||||
// $sel->execute([':cid' => $cid]);
|
||||
// $row = $sel->fetch();
|
||||
// if (!$row) out(['status'=>'fail','message'=>'저장 후 조회 실패'],500);
|
||||
|
||||
// $displayName = $row['user_name'] ?: $row['login_id'];
|
||||
|
||||
// // out([
|
||||
// // 'status' => 'ok',
|
||||
// // 'comment_id' => (int)$row['comment_id'],
|
||||
// // 'login_id' => htmlspecialchars($row['login_id'], ENT_QUOTES,'UTF-8'),
|
||||
// // 'user_name' => $row['user_name'] ? htmlspecialchars($row['user_name'], ENT_QUOTES,'UTF-8') : null,
|
||||
// // 'display_name' => htmlspecialchars($displayName, ENT_QUOTES,'UTF-8'),
|
||||
// // 'comment_text' => nl2br(htmlspecialchars($row['comment_text'], ENT_QUOTES,'UTF-8')),
|
||||
// // 'created_at' => $row['created_at'],
|
||||
// // ]);
|
||||
// out([
|
||||
// 'status' => 'ok',
|
||||
// 'comment_id' => (int)$row['comment_id'],
|
||||
// 'login_id' => $row['login_id'],
|
||||
// 'user_name' => $row['user_name'],
|
||||
// 'display_name' => $displayName,
|
||||
// 'comment_text' => $row['comment_text'],
|
||||
// 'created_at' => $row['created_at'],
|
||||
// ]);
|
||||
|
||||
// }catch(Exception $e){
|
||||
// out(['status'=>'fail','message'=>'댓글 저장 실패: '.$e->getMessage()],500);
|
||||
// }
|
||||
?>
|
||||
<?php
|
||||
// /egbim/bbs/descope_qa_comment.php
|
||||
date_default_timezone_set('Asia/Seoul');
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
/* 공통 응답 헬퍼 */
|
||||
function out($arr, $code=200){
|
||||
http_response_code($code);
|
||||
echo json_encode($arr, JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
/* 세션 복원 */
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||||
|
||||
/* 로그인 정보 */
|
||||
$loginId = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
$userName = $_SESSION['user']['name'] ?? ($_SESSION['user']['userName'] ?? '');
|
||||
|
||||
/* 관리자 가드 */
|
||||
@include_once $_SERVER['DOCUMENT_ROOT'].'/egbim/bbs/admin_guard.php';
|
||||
$isAdmin = function_exists('is_qna_admin') ? is_qna_admin($loginId) : false;
|
||||
if ($isAdmin && function_exists('get_admin_display_name')) {
|
||||
// ✅ 관리자라면 관리자용 표시명으로 교체
|
||||
$userName = get_admin_display_name($loginId, $userName);
|
||||
}
|
||||
|
||||
/* 입력(JSON 또는 form) */
|
||||
$raw = file_get_contents('php://input');
|
||||
$data = json_decode($raw, true);
|
||||
if (!is_array($data) || !isset($data['postId'])) $data = $_POST;
|
||||
|
||||
$postId = isset($data['postId']) ? (int)$data['postId'] : 0;
|
||||
$comment = isset($data['comment']) ? trim((string)$data['comment']) : '';
|
||||
|
||||
if ($postId < 1 || $comment === '') {
|
||||
out(['status'=>'fail','message'=>'잘못된 요청입니다.'], 400);
|
||||
}
|
||||
if (mb_strlen($comment,'UTF-8') > 2000) {
|
||||
out(['status'=>'fail','message'=>'댓글은 2,000자 이내로 입력하세요.'], 400);
|
||||
}
|
||||
|
||||
/* DB 연결 */
|
||||
try{
|
||||
$pdo = new PDO(
|
||||
"mysql:host=db;dbname=egbim;charset=utf8mb4",
|
||||
'egbim','baron3840!!',
|
||||
[
|
||||
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,
|
||||
]
|
||||
);
|
||||
$pdo->exec("SET time_zone = '+09:00'");
|
||||
}catch(Exception $e){
|
||||
out(['status'=>'fail','message'=>'DB 연결 실패: '.$e->getMessage()],500);
|
||||
}
|
||||
|
||||
/* 글 존재 및 권한 체크 */
|
||||
$st = $pdo->prepare("SELECT post_id, login_id AS author_id, is_secret FROM qa_posts WHERE post_id=?");
|
||||
$st->execute([$postId]);
|
||||
$post = $st->fetch();
|
||||
if (!$post) out(['status'=>'fail','message'=>'존재하지 않는 글입니다.'],404);
|
||||
|
||||
if (!$isAdmin && (int)$post['is_secret'] === 1 && $post['author_id'] !== $loginId) {
|
||||
out(['status'=>'fail','message'=>'비밀글에는 작성자 본인과 관리자만 댓글을 작성할 수 있습니다.'],403);
|
||||
}
|
||||
|
||||
/* 로그인 이름 폴백 */
|
||||
if ($loginId === '') $loginId = 'guest';
|
||||
if ($userName === '') $userName = $loginId;
|
||||
|
||||
/* qa_comments.user_name 컬럼 여부 */
|
||||
$hasUserName = false;
|
||||
$q = $pdo->prepare("
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'qa_comments'
|
||||
AND COLUMN_NAME = 'user_name'
|
||||
");
|
||||
$q->execute();
|
||||
$hasUserName = ((int)$q->fetchColumn() > 0);
|
||||
|
||||
/* 저장 */
|
||||
try{
|
||||
if ($hasUserName){
|
||||
$ins = $pdo->prepare("
|
||||
INSERT INTO qa_comments (post_id, commenter, user_name, content, created_at)
|
||||
VALUES (:pid, :login_id, :user_name, :content, NOW())
|
||||
");
|
||||
$ins->execute([
|
||||
':pid' => $postId,
|
||||
':login_id' => $loginId,
|
||||
':user_name' => $userName, // ✅ 관리자면 관리자명으로 들어감
|
||||
':content' => $comment,
|
||||
]);
|
||||
} else {
|
||||
$ins = $pdo->prepare("
|
||||
INSERT INTO qa_comments (post_id, commenter, content, created_at)
|
||||
VALUES (:pid, :login_id, :content, NOW())
|
||||
");
|
||||
$ins->execute([
|
||||
':pid' => $postId,
|
||||
':login_id' => $loginId,
|
||||
':content' => $comment,
|
||||
]);
|
||||
}
|
||||
|
||||
$cid = (int)$pdo->lastInsertId();
|
||||
|
||||
// 다시 조회
|
||||
if ($hasUserName){
|
||||
$sel = $pdo->prepare("
|
||||
SELECT comment_id, commenter AS login_id, user_name,
|
||||
content AS comment_text, created_at
|
||||
FROM qa_comments
|
||||
WHERE comment_id = :cid
|
||||
");
|
||||
} else {
|
||||
$sel = $pdo->prepare("
|
||||
SELECT comment_id, commenter AS login_id,
|
||||
NULL AS user_name, content AS comment_text, created_at
|
||||
FROM qa_comments
|
||||
WHERE comment_id = :cid
|
||||
");
|
||||
}
|
||||
$sel->execute([':cid' => $cid]);
|
||||
$row = $sel->fetch();
|
||||
if (!$row) out(['status'=>'fail','message'=>'저장 후 조회 실패'],500);
|
||||
|
||||
$displayName = $row['user_name'] ?: $row['login_id'];
|
||||
|
||||
out([
|
||||
'status' => 'ok',
|
||||
'comment_id' => (int)$row['comment_id'],
|
||||
'login_id' => $row['login_id'],
|
||||
'user_name' => $row['user_name'],
|
||||
'display_name' => $displayName,
|
||||
'comment_text' => $row['comment_text'],
|
||||
'created_at' => $row['created_at'],
|
||||
'isAdmin' => $isAdmin,
|
||||
]);
|
||||
|
||||
}catch(Exception $e){
|
||||
out(['status'=>'fail','message'=>'댓글 저장 실패: '.$e->getMessage()],500);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
require_once __DIR__ . '/../bbs/admin_guard.php'; // ✅ 관리자 권한 함수 포함
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||||
|
||||
$loginId = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
|
||||
$commentId = (int)($_POST['commentId'] ?? 0);
|
||||
if ($commentId < 1) {
|
||||
echo json_encode(['status' => 'fail', 'message' => '잘못된 요청']);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
$pdo = new PDO(
|
||||
"mysql:host=db;dbname=egbim;charset=utf8mb4",
|
||||
'egbim','baron3840!!',
|
||||
[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]
|
||||
);
|
||||
$pdo->exec("SET time_zone = '+09:00'");
|
||||
|
||||
// 댓글 소유자 확인
|
||||
$st = $pdo->prepare("SELECT commenter FROM qa_comments WHERE comment_id = ?");
|
||||
$st->execute([$commentId]);
|
||||
$row = $st->fetch();
|
||||
|
||||
if (!$row) {
|
||||
echo json_encode(['status'=>'fail','message'=>'존재하지 않는 댓글']);
|
||||
exit;
|
||||
}
|
||||
if ($row['commenter'] !== $loginId && !is_qna_admin()) {
|
||||
echo json_encode(['status'=>'fail','message'=>'본인 댓글만 삭제 가능']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$del = $pdo->prepare("DELETE FROM qa_comments WHERE comment_id = ?");
|
||||
$del->execute([$commentId]);
|
||||
|
||||
echo json_encode(['status'=>'ok']);
|
||||
} catch(Exception $e) {
|
||||
echo json_encode(['status'=>'fail','message'=>$e->getMessage()]);
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
date_default_timezone_set('Asia/Seoul');
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||||
|
||||
$loginId = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
|
||||
$commentId = (int)($_POST['commentId'] ?? 0);
|
||||
$newComment = trim($_POST['comment'] ?? '');
|
||||
|
||||
if ($commentId < 1 || $newComment === '') {
|
||||
echo json_encode(['status'=>'fail','message'=>'잘못된 요청']); exit;
|
||||
}
|
||||
|
||||
try {
|
||||
$pdo = new PDO("mysql:host=db;dbname=egbim;charset=utf8mb4",
|
||||
'egbim','baron3840!!',
|
||||
[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]);
|
||||
$pdo->exec("SET time_zone = '+09:00'");
|
||||
|
||||
// 본인 댓글인지 확인
|
||||
$st = $pdo->prepare("SELECT commenter FROM qa_comments WHERE comment_id=?");
|
||||
$st->execute([$commentId]);
|
||||
$row = $st->fetch();
|
||||
if (!$row) { echo json_encode(['status'=>'fail','message'=>'존재하지 않는 댓글']); exit; }
|
||||
if ($row['commenter'] !== $loginId) {
|
||||
echo json_encode(['status'=>'fail','message'=>'본인 댓글만 수정 가능']); exit;
|
||||
}
|
||||
|
||||
// 업데이트
|
||||
$up = $pdo->prepare("UPDATE qa_comments SET content=?, updated_at=NOW() WHERE comment_id=?");
|
||||
$up->execute([$newComment, $commentId]);
|
||||
|
||||
echo json_encode(['status'=>'ok']);
|
||||
} catch(Exception $e) {
|
||||
echo json_encode(['status'=>'fail','message'=>$e->getMessage()]);
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
// descope_qa_delete.php
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
|
||||
$me = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
|
||||
// DB 연결
|
||||
$host = 'db';
|
||||
$dbname = 'egbim';
|
||||
$user = 'egbim';
|
||||
$pass = 'baron3840!!';
|
||||
$charset= 'utf8mb4';
|
||||
$pdo = new PDO(
|
||||
"mysql:host={$host};dbname={$dbname};charset={$charset}",
|
||||
$user, $pass,
|
||||
[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]
|
||||
);
|
||||
$pdo->exec("SET time_zone = '+09:00'");
|
||||
|
||||
$postId = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
||||
if ($postId < 1) exit("잘못된 요청입니다.");
|
||||
|
||||
// 글 작성자 확인
|
||||
$stmt = $pdo->prepare("SELECT login_id, status FROM qa_posts WHERE post_id=:pid");
|
||||
$stmt->execute([':pid'=>$postId]);
|
||||
$post = $stmt->fetch();
|
||||
if (!$post) exit("존재하지 않는 글입니다.");
|
||||
|
||||
// 🚫 관리자 권한 제거 → 작성자만 삭제 가능
|
||||
if ($post['login_id'] !== $me) {
|
||||
exit("본인 작성 글만 삭제할 수 있습니다.");
|
||||
}
|
||||
|
||||
// 🚫 상태 확인 (검토중/답변완료는 삭제 금지)
|
||||
if (in_array($post['status'], ['검토중','답변완료'])) {
|
||||
exit("현재 상태('" . $post['status'] . "')에서는 삭제할 수 없습니다.");
|
||||
}
|
||||
|
||||
try {
|
||||
$pdo->beginTransaction();
|
||||
|
||||
// 1) 첨부파일 실제 삭제
|
||||
$af = $pdo->prepare("SELECT save_path FROM qa_attachments WHERE post_id=:pid");
|
||||
$af->execute([':pid'=>$postId]);
|
||||
foreach ($af as $row) {
|
||||
$filePath = $_SERVER['DOCUMENT_ROOT'] . $row['save_path'];
|
||||
if (file_exists($filePath)) {
|
||||
unlink($filePath);
|
||||
}
|
||||
}
|
||||
|
||||
// 2) 첨부파일 DB 삭제
|
||||
$pdo->prepare("DELETE FROM qa_attachments WHERE post_id=:pid")->execute([':pid'=>$postId]);
|
||||
|
||||
// 3) 댓글 삭제
|
||||
$pdo->prepare("DELETE FROM qa_comments WHERE post_id=:pid")->execute([':pid'=>$postId]);
|
||||
|
||||
// 4) 글 삭제
|
||||
$pdo->prepare("DELETE FROM qa_posts WHERE post_id=:pid")->execute([':pid'=>$postId]);
|
||||
|
||||
$pdo->commit();
|
||||
|
||||
echo "<script>alert('글이 삭제되었습니다.');location.href='/eng/bbs/descope_qa_list.php';</script>";
|
||||
} catch (Exception $e) {
|
||||
$pdo->rollBack();
|
||||
exit("삭제 중 오류: " . $e->getMessage());
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
// descope_qa_detail.php
|
||||
|
||||
if (!defined('_GNUBOARD_')) define('_GNUBOARD_', true);
|
||||
if (!defined('G5_URL')) define('G5_URL', '/eng');
|
||||
if (!defined('G5_BBS_URL')) define('G5_BBS_URL', '/eng/bbs');
|
||||
if (!defined('G5_IMG_URL')) define('G5_IMG_URL', '/eng/img');
|
||||
|
||||
// (1) 에러 출력 (개발 시)
|
||||
// ini_set('display_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
// (2) 세션·로그인 검사
|
||||
//session_start();
|
||||
// if (empty($_SESSION['user']['userId'])) {
|
||||
// header('Location: login_form.php');
|
||||
// exit;
|
||||
// }
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/eng/bbs/admin_guard.php';
|
||||
$me = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
$admin = is_qna_admin();
|
||||
// 첨부파일 접근 제어용 flag
|
||||
$isLoggedIn = !empty($_SESSION['user']['userId']);
|
||||
// (3) DB 연결
|
||||
$host = 'db';
|
||||
$dbname = 'egbim';
|
||||
$user = 'egbim';
|
||||
$pass = 'baron3840!!';
|
||||
$charset= 'utf8mb4';
|
||||
$pdo = new PDO(
|
||||
"mysql:host={$host};dbname={$dbname};charset={$charset}",
|
||||
$user,
|
||||
$pass,
|
||||
[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]
|
||||
);
|
||||
|
||||
// $postId = (int)($_GET['id']??0);
|
||||
// 글·댓글 조회…
|
||||
|
||||
|
||||
// (4) postId 검증
|
||||
$postId = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
||||
if ($postId < 1) {
|
||||
exit('잘못된 접근입니다.');
|
||||
}
|
||||
// 2) 글 조회
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT post_id, login_id, user_id, category, title, content,
|
||||
is_secret, status, created_at,
|
||||
is_internal, company, family_company, department, user_name, phone
|
||||
FROM qa_posts
|
||||
WHERE post_id = :pid
|
||||
");
|
||||
$stmt->execute([':pid'=>$postId]);
|
||||
$post = $stmt->fetch();
|
||||
if (!$post) exit('존재하지 않는 글입니다.');
|
||||
|
||||
// 관리자/일반 사용자 표시 이름 가공
|
||||
$post['display_name'] = get_admin_display_name(
|
||||
$post['login_id'],
|
||||
$post['user_name'] ?: $post['login_id']
|
||||
);
|
||||
|
||||
//관리자 글 조회시 new 미표시
|
||||
if ($admin && $post['category'] !== 'notice') {
|
||||
$pdo->prepare("UPDATE qa_posts SET is_read_admin = 1 WHERE post_id = ?")
|
||||
->execute([$postId]);
|
||||
}
|
||||
|
||||
// ▼ 비밀글 접근 체크 ▼
|
||||
if ($post['is_secret'] && $post['login_id'] !== $me && !$admin) {
|
||||
exit('⚠️ 비밀글은 작성자만 또는 관리자만 확인할 수 있습니다.');
|
||||
}
|
||||
|
||||
// 회사/부서 표시 로직
|
||||
if ((int)$post['is_internal'] === 1) {
|
||||
// 내부 사용자 → family_company + department
|
||||
$post['org_display'] = trim($post['family_company'] . ' ' . $post['department']);
|
||||
} else {
|
||||
// 외부 사용자 → company + department
|
||||
$post['org_display'] = trim($post['company'] . ' ' . $post['department']);
|
||||
}
|
||||
|
||||
// 3) 댓글 조회
|
||||
$cm = $pdo->prepare("
|
||||
SELECT comment_id,
|
||||
commenter AS login_id,
|
||||
user_name,
|
||||
content AS comment_text,
|
||||
created_at
|
||||
FROM qa_comments
|
||||
WHERE post_id = :pid
|
||||
ORDER BY created_at
|
||||
");
|
||||
$cm->execute([':pid'=>$postId]);
|
||||
$comments = $cm->fetchAll();
|
||||
|
||||
/* 관리자 이름 고정 처리 */
|
||||
foreach ($comments as &$c) {
|
||||
$c['user_name'] = get_admin_display_name($c['login_id'], $c['user_name']);
|
||||
}
|
||||
unset($c); // 참조 해제
|
||||
|
||||
// 첨부파일 조회
|
||||
$attachments = [];
|
||||
$af = $pdo->prepare("
|
||||
SELECT id, ori_name, save_path, file_size, uploaded_at
|
||||
FROM qa_attachments
|
||||
WHERE post_id = :pid
|
||||
ORDER BY id ASC
|
||||
");
|
||||
$af->execute([':pid'=>$postId]);
|
||||
$attachments = $af->fetchAll();
|
||||
|
||||
// 상태/구분 라벨 매핑
|
||||
$STATUS_LABELS = [
|
||||
'new' => 'New',
|
||||
'review' => 'Review',
|
||||
'deep' => 'Checking',
|
||||
'patch' => 'Patch',
|
||||
'done' => 'Done'
|
||||
];
|
||||
$CATEGORY_LABELS = [
|
||||
'general' => 'Other',
|
||||
'improvement' => 'Impr.',
|
||||
'error' => 'Error',
|
||||
'notice' => '공지사항',
|
||||
'admin' => '관리글',
|
||||
];
|
||||
|
||||
// detail 뷰용 라벨 추가
|
||||
$post['status_label'] = ($post['category'] === 'notice') ? '' : ($STATUS_LABELS[$post['status']] ?? $post['status']);
|
||||
$post['category_label'] = $CATEGORY_LABELS[$post['category']] ?? $post['category'];
|
||||
|
||||
//Q&A user login_version
|
||||
$isAdmin = $admin;
|
||||
|
||||
$loginVersion = null;
|
||||
if ($isAdmin) {
|
||||
$st = $pdo->prepare("SELECT login_version
|
||||
FROM user_program_info
|
||||
WHERE login_id = ?
|
||||
ORDER BY id DESC
|
||||
LIMIT 1");
|
||||
$st->execute([$post['login_id']]); // 글쓴이 로그인 ID 기준
|
||||
$loginVersion = $st->fetchColumn();
|
||||
}
|
||||
|
||||
// 4) 뷰 렌더링 (데이터 준비가 완료된 뒤에)
|
||||
include __DIR__ . '/../skin/qa/basic/descope_qa_detail.skin.php';
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
ini_set('display_errors', 0); // JSON 깨짐 방지
|
||||
error_reporting(0);
|
||||
|
||||
$uploadDir = __DIR__ . '/../uploads/img/';
|
||||
if (!is_dir($uploadDir)) mkdir($uploadDir, 0777, true);
|
||||
|
||||
if (!isset($_FILES['upload'])) {
|
||||
echo json_encode(['uploaded' => false, 'error' => ['message' => '파일이 전송되지 않았습니다.']]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$ext = strtolower(pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION));
|
||||
$allowed = ['jpg','jpeg','png','gif','webp'];
|
||||
if (!in_array($ext, $allowed)) {
|
||||
echo json_encode(['uploaded' => false, 'error' => ['message' => '허용되지 않는 파일 형식입니다.']]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$saveName = time().'_'.bin2hex(random_bytes(4)).'.'.$ext;
|
||||
$savePath = $uploadDir.$saveName;
|
||||
$url = '/eng/uploads/img/'.$saveName;
|
||||
|
||||
if (move_uploaded_file($_FILES['upload']['tmp_name'], $savePath)) {
|
||||
echo json_encode([
|
||||
"uploaded" => true,
|
||||
"url" => $url
|
||||
]);
|
||||
} else {
|
||||
echo json_encode([
|
||||
"uploaded" => false,
|
||||
"error" => ["message" => "파일 저장 실패"]
|
||||
]);
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
// descope_qa_list.php
|
||||
|
||||
if (!defined('_GNUBOARD_')) define('_GNUBOARD_', true);
|
||||
if (!defined('G5_URL')) define('G5_URL', '/eng');
|
||||
if (!defined('G5_BBS_URL')) define('G5_BBS_URL', '/eng/bbs');
|
||||
if (!defined('G5_IMG_URL')) define('G5_IMG_URL', '/eng/img');
|
||||
|
||||
// ini_set('display_errors',1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
// if (!defined('_GNUBOARD_')) {
|
||||
// define('_GNUBOARD_', true);
|
||||
// include_once $_SERVER['DOCUMENT_ROOT'].'/egbim/_common.php';
|
||||
// }
|
||||
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/eng/bbs/admin_guard.php';
|
||||
|
||||
// session_start();
|
||||
|
||||
// //로그인 체크
|
||||
// if (empty($_SESSION['user']['userId'])) {
|
||||
// header('Location: https://eg-bim.co.kr/egbim/index.php');
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// DB 연결
|
||||
$pdo = new PDO(
|
||||
"mysql:host=db;dbname=egbim;charset=utf8mb4",
|
||||
'egbim','baron3840!!',
|
||||
[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]
|
||||
);
|
||||
|
||||
$page = max(1, (int)($_GET['page'] ?? 1));
|
||||
$pageSize = 10;
|
||||
$offset = ($page - 1) * $pageSize;
|
||||
|
||||
// ===== 필터/검색 파라미터 =====
|
||||
$writer = $_GET['writer'] ?? 'all'; // all | me
|
||||
$search = trim($_GET['q'] ?? '');
|
||||
|
||||
// 복수 구분(cat[]) — general | improvement | error | notice | admin
|
||||
$catsParam = $_GET['cat'] ?? [];
|
||||
if (!is_array($catsParam)) $catsParam = [$catsParam];
|
||||
$allowedCats = ['general','improvement','error','notice','admin'];
|
||||
$cats = array_values(array_intersect($catsParam, $allowedCats)); // 유효값만
|
||||
|
||||
$me = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
$admin = function_exists('is_qna_admin') ? is_qna_admin() : false;
|
||||
|
||||
// ===== WHERE 절 =====
|
||||
$where = ['1'];
|
||||
$params = [];
|
||||
|
||||
// 작성자(내 글만)
|
||||
if ($writer === 'me' && $me) {
|
||||
$where[] = 'login_id = ?';
|
||||
$params[] = $me;
|
||||
}
|
||||
|
||||
// 구분(cat[]) 필터
|
||||
if (!empty($cats)) {
|
||||
$ph = implode(',', array_fill(0, count($cats), '?'));
|
||||
$where[] = "category IN ($ph)";
|
||||
foreach ($cats as $c) $params[] = $c;
|
||||
}
|
||||
|
||||
// 검색(제목+내용+작성자)
|
||||
if ($search !== '') {
|
||||
$where[] = '(title LIKE ? OR content LIKE ? OR user_name LIKE ? OR login_id LIKE ?)';
|
||||
$params[] = "%{$search}%";
|
||||
$params[] = "%{$search}%";
|
||||
$params[] = "%{$search}%";
|
||||
$params[] = "%{$search}%";
|
||||
}
|
||||
|
||||
|
||||
// // 비밀글 가드: 관리자는 전체, 일반은 공개 OR 내 글만
|
||||
// if (!$admin) {
|
||||
// $where[] = '(is_secret = 0 OR login_id = ?)';
|
||||
// $params[] = $me;
|
||||
// }
|
||||
// ✅ 비밀글 가드
|
||||
if (!$admin) {
|
||||
if ($me) {
|
||||
$where[] = '(is_secret = 0 OR login_id = ?)';
|
||||
$params[] = $me;
|
||||
} else {
|
||||
$where[] = 'is_secret = 0';
|
||||
}
|
||||
}
|
||||
|
||||
// 전체 건수
|
||||
$countSql = "SELECT COUNT(*) FROM qa_posts WHERE ".implode(' AND ', $where);
|
||||
$countStmt = $pdo->prepare($countSql);
|
||||
$countStmt->execute($params);
|
||||
$totalCount = (int)$countStmt->fetchColumn();
|
||||
|
||||
// 데이터 조회 (공지 상단 고정)
|
||||
$sql = "
|
||||
SELECT
|
||||
p.post_id, p.category, p.company, p.family_company, p.department,
|
||||
p.login_id, p.user_name, p.title, p.created_at, p.status, p.is_secret, p.is_read_admin,
|
||||
-- 댓글 개수
|
||||
(SELECT COUNT(*) FROM qa_comments c WHERE c.post_id = p.post_id) AS comment_count,
|
||||
-- 첨부파일 개수
|
||||
(SELECT COUNT(*) FROM qa_attachments a WHERE a.post_id = p.post_id) AS file_count
|
||||
FROM qa_posts p
|
||||
WHERE ".implode(' AND ', $where)."
|
||||
ORDER BY (p.category='notice') DESC, p.created_at DESC
|
||||
LIMIT {$offset}, {$pageSize}";
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute($params);
|
||||
$posts = $stmt->fetchAll();
|
||||
|
||||
foreach ($posts as &$row) {
|
||||
// 회사명 표시 조립
|
||||
$displayCompany = $row['family_company'] ?: $row['company'];
|
||||
// if (!empty($row['department'])) {
|
||||
// $displayCompany .= ' / ' . $row['department'];
|
||||
// }
|
||||
$row['display_company'] = $displayCompany;
|
||||
|
||||
// 작성자 이름
|
||||
$row['display_name'] = get_admin_display_name(
|
||||
$row['login_id'],
|
||||
$row['user_name'] ?: $row['login_id']
|
||||
);
|
||||
|
||||
// 상태값 가공: 공지사항이면 빈칸
|
||||
if ($row['category'] === 'notice') {
|
||||
$row['status'] = '';
|
||||
}
|
||||
|
||||
// ✅ NEW 표시 여부 (24시간 기준)
|
||||
$createdTime = strtotime($row['created_at']);
|
||||
$row['is_new'] = ($createdTime >= strtotime('-24 hours'));
|
||||
}
|
||||
unset($row);
|
||||
|
||||
$totalPages = (int)ceil($totalCount / $pageSize);
|
||||
// $me = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
|
||||
include __DIR__ . '/../skin/qa/basic/descope_qa_list.skin.php';
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/eng/bbs/admin_guard.php';
|
||||
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||||
if (!is_qna_admin()) {
|
||||
exit('권한이 없습니다.');
|
||||
}
|
||||
|
||||
$postId = (int)($_POST['post_id'] ?? 0);
|
||||
$status = $_POST['status'] ?? '';
|
||||
|
||||
$allowed = ['new','review','deep','patch','done'];
|
||||
if ($postId < 1 || !in_array($status, $allowed, true)) {
|
||||
exit('잘못된 요청입니다.');
|
||||
}
|
||||
|
||||
try {
|
||||
$pdo = new PDO(
|
||||
"mysql:host=db;dbname=egbim;charset=utf8mb4",
|
||||
'egbim','baron3840!!',
|
||||
[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]
|
||||
);
|
||||
$pdo->exec("SET time_zone = '+09:00'");
|
||||
|
||||
$st = $pdo->prepare("UPDATE qa_posts SET status = :st WHERE post_id = :pid");
|
||||
$st->execute([':st'=>$status, ':pid'=>$postId]);
|
||||
|
||||
// detail로 리다이렉트
|
||||
header("Location: /eng/bbs/descope_qa_detail.php?id={$postId}");
|
||||
exit;
|
||||
|
||||
} catch(Exception $e) {
|
||||
exit('DB 오류: '.$e->getMessage());
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,282 @@
|
||||
<?php
|
||||
// descope_qa_write.php
|
||||
|
||||
if (!defined('_GNUBOARD_')) define('_GNUBOARD_', true);
|
||||
if (!defined('G5_URL')) define('G5_URL', '/eng');
|
||||
if (!defined('G5_BBS_URL')) define('G5_BBS_URL', '/eng/bbs');
|
||||
if (!defined('G5_IMG_URL')) define('G5_IMG_URL', '/eng/img');
|
||||
|
||||
// 1) 에러 출력 (개발용)
|
||||
// ini_set('display_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
// 2) 세션/사용자 복원 (리스트와 동일하게)
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/eng/bbs/admin_guard.php';
|
||||
|
||||
// 🚨 비회원 차단 (리스트는 열람 가능하지만 글쓰기는 불가)
|
||||
if (empty($_SESSION['user']['userId'])) {
|
||||
echo "<script>
|
||||
alert('Login is required to use this service.');
|
||||
window.location.href = '/eng/index.php?popup=login';
|
||||
</script>";
|
||||
exit;
|
||||
}
|
||||
|
||||
// 3) DB 연결 (PDO)
|
||||
$host = 'db';
|
||||
$dbname = 'egbim';
|
||||
$user = 'egbim';
|
||||
$pass = 'baron3840!!';
|
||||
$charset = 'utf8mb4';
|
||||
$dsn = "mysql:host={$host};dbname={$dbname};charset={$charset}";
|
||||
$options = [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
];
|
||||
try {
|
||||
$pdo = new PDO($dsn, $user, $pass, $options);
|
||||
$pdo->exec("SET time_zone = '+09:00'");
|
||||
} catch (PDOException $e) {
|
||||
exit('DB 연결 에러: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
// 4) 수정 모드 판단
|
||||
$postId = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
||||
$isEdit = $postId > 0;
|
||||
|
||||
// 5) 수정 모드이면 기존 글 불러오기
|
||||
if ($isEdit) {
|
||||
$stmt = $pdo->prepare("SELECT * FROM qa_posts WHERE post_id = ?");
|
||||
$stmt->execute([$postId]);
|
||||
$post = $stmt->fetch() ?: exit('존재하지 않는 글입니다.');
|
||||
} else {
|
||||
// 등록 모드 기본값
|
||||
$post = [
|
||||
'category' => '',
|
||||
'title' => '',
|
||||
'content' => '',
|
||||
'is_secret' => 0,
|
||||
'status' => 'new',
|
||||
];
|
||||
}
|
||||
|
||||
// === 파일 업로드 처리 공통 함수 ===
|
||||
function handle_file_uploads(PDO $pdo, int $postId, array &$errors) {
|
||||
if (empty($_FILES['attach']['name'][0])) return;
|
||||
|
||||
$uploadDir = __DIR__ . '/../uploads/qa/';
|
||||
if (!is_dir($uploadDir)) {
|
||||
mkdir($uploadDir, 0777, true);
|
||||
}
|
||||
if (!is_writable($uploadDir)) {
|
||||
@chmod($uploadDir, 0777);
|
||||
}
|
||||
if (!is_writable($uploadDir)) {
|
||||
$errors[] = 'Upload folder is not writable.';
|
||||
return;
|
||||
}
|
||||
|
||||
$allowedExt = ['jpg','jpeg','png','gif','pdf','hwp','doc','docx','xls','xlsx','zip','7z','dwg','dwt','dxf','grm','ctb','shx','shp','lin','lsp','reg'];
|
||||
|
||||
foreach ($_FILES['attach']['name'] as $i => $oriName) {
|
||||
if ($_FILES['attach']['error'][$i] === UPLOAD_ERR_OK) {
|
||||
$tmpName = $_FILES['attach']['tmp_name'][$i];
|
||||
$fileSize = $_FILES['attach']['size'][$i];
|
||||
$ext = strtolower(pathinfo($oriName, PATHINFO_EXTENSION));
|
||||
|
||||
if (!in_array($ext, $allowedExt)) {
|
||||
$errors[] = "허용되지 않은 확장자: {$oriName}";
|
||||
continue;
|
||||
}
|
||||
if ($fileSize > 30 * 1024 * 1024) {
|
||||
$errors[] = "파일 용량 초과 (30MB): {$oriName}";
|
||||
continue;
|
||||
}
|
||||
|
||||
$safeName = time() . '_' . bin2hex(random_bytes(4)) . '_' . basename($oriName);
|
||||
$savePath = $uploadDir . $safeName;
|
||||
|
||||
if (@move_uploaded_file($tmpName, $savePath)) {
|
||||
$stmt = $pdo->prepare("
|
||||
INSERT INTO qa_attachments (post_id, ori_name, save_path, file_size, uploaded_at)
|
||||
VALUES (?, ?, ?, ?, NOW())
|
||||
");
|
||||
$stmt->execute([
|
||||
$postId,
|
||||
$oriName,
|
||||
'/eng/uploads/qa/' . $safeName,
|
||||
$fileSize
|
||||
]);
|
||||
} else {
|
||||
$errors[] = "Failed to upload file: {$oriName}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 6) 폼 제출 처리
|
||||
$errors = [];
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
// 6-1) 로그인 정보
|
||||
$loginId = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
$userId = $_SESSION['user']['userId'] ?? '';
|
||||
|
||||
// 내부 도메인 리스트
|
||||
$internalDomains = [
|
||||
'hanmaceng.co.kr','samaneng.com','jangheon.co.kr',
|
||||
'hallasanup.com','pre-cast.co.kr','baroncs.co.kr'
|
||||
];
|
||||
|
||||
// 도메인 추출 → 내부/외부 구분
|
||||
$emailDomain = substr(strrchr($loginId, "@"), 1);
|
||||
$isInternal = in_array($emailDomain, $internalDomains, true);
|
||||
|
||||
// 회사명
|
||||
$Internal_companyName = $_SESSION['user']['customAttributes']['familyCompany'] ?? '';
|
||||
$external_companyName = $_SESSION['user']['customAttributes']['company'] ?? '';
|
||||
// 부서
|
||||
$department = $_SESSION['user']['customAttributes']['team'] ?? '';
|
||||
|
||||
// 6-2) POST 데이터 수집
|
||||
$postLabel = trim($_POST['category'] ?? '');
|
||||
$title = trim($_POST['title'] ?? '');
|
||||
$content = trim($_POST['content'] ?? '');
|
||||
$secret = isset($_POST['secret']) ? 1 : 0;
|
||||
$status = 'new'; // 항상 답변대기
|
||||
|
||||
// 6-3) 한글 카테고리 → 코드 매핑
|
||||
$categoryMap = [
|
||||
'오류문의' => 'error',
|
||||
'개선문의' => 'improvement',
|
||||
'일반문의' => 'general',
|
||||
'공지사항' => 'notice',
|
||||
'관리글' => 'admin',
|
||||
];
|
||||
$category = $categoryMap[$postLabel] ?? '';
|
||||
|
||||
// 6-4) 유효성 검사
|
||||
if (!in_array($category, $categoryMap, true)) {
|
||||
$errors[] = '유효한 구분을 선택하세요.';
|
||||
}
|
||||
if ($title === '' || mb_strlen($title) > 100) {
|
||||
$errors[] = '제목은 1~100자 사이여야 합니다.';
|
||||
}
|
||||
if ($content === '') {
|
||||
$errors[] = '내용을 입력해주세요.';
|
||||
}
|
||||
|
||||
if (empty($errors)) {
|
||||
$pdo->beginTransaction();
|
||||
try {
|
||||
if ($isEdit) {
|
||||
// 6-5a) UPDATE (회사정보는 수정하지 않음)
|
||||
$sql = "UPDATE qa_posts
|
||||
SET category = :cat,
|
||||
title = :tit,
|
||||
content = :cont,
|
||||
is_secret = :sec,
|
||||
status = :st,
|
||||
updated_at = NOW()
|
||||
WHERE post_id = :pid";
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([
|
||||
':cat' => $category,
|
||||
':tit' => $title,
|
||||
':cont' => $content,
|
||||
':sec' => $secret,
|
||||
':st' => $status,
|
||||
':pid' => $postId,
|
||||
]);
|
||||
// === (수정 저장 시) 기존 첨부파일 삭제 체크 ===
|
||||
if (!empty($_POST['delete_files'])) {
|
||||
foreach ($_POST['delete_files'] as $fileId) {
|
||||
$stmt = $pdo->prepare("SELECT save_path FROM qa_attachments WHERE id=? AND post_id=?");
|
||||
$stmt->execute([$fileId, $postId]);
|
||||
if ($row = $stmt->fetch()) {
|
||||
$filePath = $_SERVER['DOCUMENT_ROOT'] . $row['save_path'];
|
||||
if (file_exists($filePath)) {
|
||||
unlink($filePath);
|
||||
}
|
||||
$pdo->prepare("DELETE FROM qa_attachments WHERE id=?")->execute([$fileId]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 새 파일 업로드 추가
|
||||
handle_file_uploads($pdo, $postId, $errors);
|
||||
if (!empty($errors)) {
|
||||
throw new RuntimeException(implode("\n", $errors));
|
||||
}
|
||||
|
||||
} else {
|
||||
// 6-5b) INSERT (내부/외부 분기)
|
||||
if ($isInternal) {
|
||||
// 내부 사용자 → family_company + department
|
||||
$sql = "INSERT INTO qa_posts
|
||||
(login_id, user_id, user_name, family_company, department, phone,
|
||||
is_internal, category, title, content, is_secret, status, created_at)
|
||||
VALUES
|
||||
(:lid, :uid, :uname, :fam, :dept, :phone,
|
||||
:is_internal, :cat, :tit, :cont, :sec, :st, NOW())";
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([
|
||||
':lid' => $loginId,
|
||||
':uid' => $userId,
|
||||
':uname' => ($_SESSION['user']['name'] ?? $_SESSION['user']['userName'] ?? $loginId),
|
||||
':fam' => $Internal_companyName,
|
||||
':dept' => $department,
|
||||
':phone' => ($_SESSION['user']['phone'] ?? ''),
|
||||
':is_internal' => 1, // ✅ 내부 사용자 → 1
|
||||
':cat' => $category,
|
||||
':tit' => $title,
|
||||
':cont' => $content,
|
||||
':sec' => $secret,
|
||||
':st' => $status,
|
||||
]);
|
||||
} else {
|
||||
// 외부 사용자 → company + department
|
||||
$sql = "INSERT INTO qa_posts
|
||||
(login_id, user_id, user_name, company, department, phone,
|
||||
is_internal, category, title, content, is_secret, status, created_at)
|
||||
VALUES
|
||||
(:lid, :uid, :uname, :comp, :dept, :phone,
|
||||
:is_internal, :cat, :tit, :cont, :sec, :st, NOW())";
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([
|
||||
':lid' => $loginId,
|
||||
':uid' => $userId,
|
||||
':uname' => ($_SESSION['user']['name'] ?? $_SESSION['user']['userName'] ?? $loginId),
|
||||
':comp' => $external_companyName,
|
||||
':dept' => $department,
|
||||
':phone' => ($_SESSION['user']['phone'] ?? ''),
|
||||
':is_internal' => 0, // ✅ 외부 사용자 → 0
|
||||
':cat' => $category,
|
||||
':tit' => $title,
|
||||
':cont' => $content,
|
||||
':sec' => $secret,
|
||||
':st' => $status,
|
||||
]);
|
||||
}
|
||||
$postId = $pdo->lastInsertId();
|
||||
// 신규 파일 업로드
|
||||
handle_file_uploads($pdo, $postId, $errors);
|
||||
if (!empty($errors)) {
|
||||
throw new RuntimeException(implode("\n", $errors));
|
||||
}
|
||||
}
|
||||
|
||||
$pdo->commit();
|
||||
|
||||
// 상세보기로 리다이렉트
|
||||
header("Location: /eng/bbs/descope_qa_detail.php?id={$postId}");
|
||||
exit;
|
||||
} catch (Exception $e) {
|
||||
$pdo->rollBack();
|
||||
$errors[] = 'DB 오류: ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 7) 뷰 렌더링
|
||||
include __DIR__ . '/../skin/qa/basic/descope_qa_write.skin.php';
|
||||
@@ -0,0 +1,159 @@
|
||||
<?php
|
||||
// descope_qa_write.php
|
||||
|
||||
// 1) 에러 출력 (개발용)
|
||||
// ini_set('display_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
// 2) 세션/사용자 복원 (리스트와 동일하게)
|
||||
require_once __DIR__ . '/../skin/member/basic/descope_session.php';
|
||||
// descope_session.php 내부에서 session_start(), JWT → $_SESSION['user'] 세팅까지 처리된다는 가정
|
||||
|
||||
// (필요 시 로그인 강제)
|
||||
// if (empty($_SESSION['user']['userId'])) {
|
||||
// header('Location: /egbim/index.php?popup=login');
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// $loginId = $_SESSION['user']['loginIds'][0] ?? null;
|
||||
// $userId = $_SESSION['user']['userId'] ?? null;
|
||||
|
||||
// if (!$loginId || !$userId) {
|
||||
// $errors[] = '로그인이 필요합니다.';
|
||||
// }
|
||||
|
||||
// 3) DB 연결 (PDO)
|
||||
$host = 'localhost';
|
||||
$dbname = 'egbim';
|
||||
$user = 'egbim';
|
||||
$pass = 'baron3840!!';
|
||||
$charset = 'utf8mb4';
|
||||
$dsn = "mysql:host={$host};dbname={$dbname};charset={$charset}";
|
||||
$options = [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
];
|
||||
try {
|
||||
$pdo = new PDO($dsn, $user, $pass, $options);
|
||||
} catch (PDOException $e) {
|
||||
exit('DB 연결 에러: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
// 4) 수정 모드 판단
|
||||
$postId = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
||||
$isEdit = $postId > 0;
|
||||
|
||||
// 5) 수정 모드이면 기존 글 불러오기
|
||||
if ($isEdit) {
|
||||
$stmt = $pdo->prepare("SELECT * FROM qa_posts WHERE post_id = ?");
|
||||
$stmt->execute([$postId]);
|
||||
$post = $stmt->fetch() ?: exit('존재하지 않는 글입니다.');
|
||||
// 권한 체크 (원하시면 활성화)
|
||||
// if ($post['login_id'] !== ($_SESSION['user']['loginIds'][0] ?? '')) {
|
||||
// exit('수정 권한이 없습니다.');
|
||||
// }
|
||||
} else {
|
||||
// 등록 모드 기본값
|
||||
$post = [
|
||||
'category' => '',
|
||||
'title' => '',
|
||||
'content' => '',
|
||||
'is_secret' => 0,
|
||||
'status' => 'await',
|
||||
];
|
||||
}
|
||||
|
||||
// 6) 폼 제출 처리
|
||||
$errors = [];
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
// 6-1) 로그인 정보 (실제론 세션에서)
|
||||
$loginId = $_SESSION['user']['loginIds'][0];
|
||||
$userId = $_SESSION['user']['userId'];
|
||||
// $loginId = 'sdi1108@naver.com';
|
||||
// $userId = 'sdi1108@naver.com';
|
||||
|
||||
// 6-2) POST 데이터 수집
|
||||
$postLabel = trim($_POST['category'] ?? '');
|
||||
$title = trim($_POST['title'] ?? '');
|
||||
$content = trim($_POST['content'] ?? '');
|
||||
$secret = isset($_POST['secret']) ? 1 : 0;
|
||||
$status = $_POST['status'] ?? 'await';
|
||||
|
||||
// 6-3) 한글 카테고리 → 코드 매핑
|
||||
$categoryMap = [
|
||||
'오류문의' => 'error',
|
||||
'개선문의' => 'improvement',
|
||||
'일반문의' => 'general',
|
||||
'공지사항' => 'notice',
|
||||
];
|
||||
$category = $categoryMap[$postLabel] ?? '';
|
||||
|
||||
// 6-4) 유효성 검사
|
||||
if (!in_array($category, $categoryMap, true)) {
|
||||
$errors[] = '유효한 구분을 선택하세요.';
|
||||
}
|
||||
if ($title === '' || mb_strlen($title) > 100) {
|
||||
$errors[] = '제목은 1~100자 사이여야 합니다.';
|
||||
}
|
||||
if ($content === '') {
|
||||
$errors[] = '내용을 입력해주세요.';
|
||||
}
|
||||
|
||||
if (empty($errors)) {
|
||||
$pdo->beginTransaction();
|
||||
try {
|
||||
if ($isEdit) {
|
||||
// 6-5a) UPDATE
|
||||
$sql = "UPDATE qa_posts
|
||||
SET category = :cat,
|
||||
title = :tit,
|
||||
content = :cont,
|
||||
is_secret = :sec,
|
||||
status = :st,
|
||||
updated_at = NOW()
|
||||
WHERE post_id = :pid";
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([
|
||||
':cat' => $category,
|
||||
':tit' => $title,
|
||||
':cont' => $content,
|
||||
':sec' => $secret,
|
||||
':st' => $status,
|
||||
':pid' => $postId,
|
||||
]);
|
||||
} else {
|
||||
// 6-5b) INSERT
|
||||
$sql = "INSERT INTO qa_posts
|
||||
(login_id,user_id,category,title,content,is_secret,status,created_at)
|
||||
VALUES
|
||||
(:lid,:uid,:cat,:tit,:cont,:sec,:st,NOW())";
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([
|
||||
':lid' => $loginId,
|
||||
':uid' => $userId,
|
||||
':cat' => $category,
|
||||
':tit' => $title,
|
||||
':cont'=> $content,
|
||||
':sec' => $secret,
|
||||
':st' => $status,
|
||||
]);
|
||||
$postId = $pdo->lastInsertId();
|
||||
}
|
||||
|
||||
// 6-6) 첨부파일 처리 (생략… 동일 로직)
|
||||
// foreach($_FILES['attach']['tmp_name'] …) { … }
|
||||
|
||||
$pdo->commit();
|
||||
|
||||
// 6-7) 상세보기로 리다이렉트
|
||||
header("Location: /egbim/bbs/descope_qa_detail.php?id={$postId}");
|
||||
exit;
|
||||
} catch (Exception $e) {
|
||||
$pdo->rollBack();
|
||||
$errors[] = 'DB 오류: ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 7) 뷰 렌더링 (기존 스킨 재활용)
|
||||
include __DIR__ . '/../skin/qa/basic/descope_qa_write.skin.php';
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
$projectId = "P2x3wl3tAgsGmSytBQ72rwABOQD"; // 대일님 Descope 프로젝트 ID
|
||||
$refreshJwt = $_SESSION['refreshJwt'] ?? '';
|
||||
|
||||
if (!$refreshJwt) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'fail', 'message' => '리프레시 토큰 없음']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$url = "https://api.descope.com/v1/auth/refresh";
|
||||
$headers = [
|
||||
"Authorization: Bearer {$projectId}:{$refreshJwt}",
|
||||
"Content-Type: application/json"
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, "{}"); // body는 비워둬도 됨
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($httpCode === 200) {
|
||||
$data = json_decode($response, true);
|
||||
|
||||
// 🔄 refreshJwt도 갱신됨
|
||||
$_SESSION['refreshJwt'] = $data['refreshJwt'];
|
||||
|
||||
echo json_encode([
|
||||
'status' => 'ok',
|
||||
'sessionJwt' => $data['sessionJwt']
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status' => 'fail', 'message' => '세션 갱신 실패', 'raw' => $response]);
|
||||
}
|
||||
@@ -0,0 +1,283 @@
|
||||
<?php
|
||||
// header('Content-Type: application/json');
|
||||
|
||||
// // ✅ Descope Management Key
|
||||
// $management_key = 'P2wON5fy1K6kyia269VpeIzYP8oP:K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj';
|
||||
// $headers = [
|
||||
// "Authorization: Bearer $management_key",
|
||||
// "Content-Type: application/json"
|
||||
// ];
|
||||
|
||||
// $all_users = [];
|
||||
// $page = 0;
|
||||
// $limit = 200; // Descope API 권장 최대 limit (보통 200까지 가능)
|
||||
|
||||
// // === 1) 모든 페이지 루프 ===
|
||||
// do {
|
||||
// $url_users = "https://api.descope.com/v2/mgmt/user/search";
|
||||
// $payload = json_encode([
|
||||
// "limit" => $limit,
|
||||
// "page" => $page
|
||||
// ]);
|
||||
|
||||
// $ch = curl_init($url_users);
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
||||
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
// $response = curl_exec($ch);
|
||||
// $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// curl_close($ch);
|
||||
|
||||
// if ($http_code !== 200) {
|
||||
// echo json_encode(['status' => 'fail', 'step' => 'user_search', 'code' => $http_code, 'raw' => $response]);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// $res = json_decode($response, true);
|
||||
// $users = $res['users'] ?? [];
|
||||
|
||||
// $all_users = array_merge($all_users, $users);
|
||||
|
||||
// $fetched = count($users);
|
||||
// $page++;
|
||||
// } while ($fetched === $limit); // limit만큼 꽉 찼으면 다음 페이지 있음
|
||||
|
||||
// // === 2) 테넌트 이름 매핑 ===
|
||||
// // 유저들에서 tenantId 수집
|
||||
// $tenantIds = [];
|
||||
// foreach ($all_users as $u) {
|
||||
// if (!empty($u['tenants'])) {
|
||||
// foreach ($u['tenants'] as $t) {
|
||||
// if (!in_array($t['tenantId'], $tenantIds)) {
|
||||
// $tenantIds[] = $t['tenantId'];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// // 테넌트 이름 가져오기
|
||||
// $tenant_map = [];
|
||||
// if (!empty($tenantIds)) {
|
||||
// $url_tenants = "https://api.descope.com/v1/mgmt/tenant/search";
|
||||
// $payload_tenant = json_encode([
|
||||
// "tenantIds" => $tenantIds
|
||||
// ]);
|
||||
|
||||
// $ch2 = curl_init($url_tenants);
|
||||
// curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($ch2, CURLOPT_POSTFIELDS, $payload_tenant);
|
||||
// curl_setopt($ch2, CURLOPT_HTTPHEADER, $headers);
|
||||
// $response_tenants = curl_exec($ch2);
|
||||
// $http_code_tenants = curl_getinfo($ch2, CURLINFO_HTTP_CODE);
|
||||
// curl_close($ch2);
|
||||
|
||||
// if ($http_code_tenants === 200) {
|
||||
// $res_tenants = json_decode($response_tenants, true);
|
||||
// if (!empty($res_tenants['tenants'])) {
|
||||
// foreach ($res_tenants['tenants'] as $t) {
|
||||
// $tenant_map[$t['id']] = $t['name'];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// // === 3) 각 유저에 tenantName 붙이기 ===
|
||||
// foreach ($all_users as &$user) {
|
||||
// $user['name'] = $user['name'] ?? '';
|
||||
// $user['phone'] = $user['phone'] ?? '';
|
||||
// $user['customAttributes'] = $user['customAttributes'] ?? [];
|
||||
|
||||
// if (!empty($user['tenants'])) {
|
||||
// foreach ($user['tenants'] as &$ten) {
|
||||
// $ten['tenantName'] = $tenant_map[$ten['tenantId']] ?? $ten['tenantId'];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// // === 4) 최종 응답 ===
|
||||
// echo json_encode([
|
||||
// 'status' => 'ok',
|
||||
// 'count' => count($all_users),
|
||||
// 'users' => $all_users
|
||||
// ]);
|
||||
?>
|
||||
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
|
||||
// ✅ Descope Management Key
|
||||
$management_key = 'P2wON5fy1K6kyia269VpeIzYP8oP:K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj'; // 실제 키 넣으세요
|
||||
$headers = [
|
||||
"Authorization: Bearer $management_key",
|
||||
"Content-Type: application/json"
|
||||
];
|
||||
|
||||
$all_users = [];
|
||||
$page = 0;
|
||||
$limit = 200;
|
||||
|
||||
// ✅ 전체 유저 가져오기
|
||||
do {
|
||||
$url_users = "https://api.descope.com/v2/mgmt/user/search";
|
||||
$payload = json_encode(["limit" => $limit, "page" => $page]);
|
||||
|
||||
$ch = curl_init($url_users);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($http_code !== 200) {
|
||||
echo json_encode(['status' => 'fail', 'step' => 'user_search', 'code' => $http_code, 'raw' => $response]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$res = json_decode($response, true);
|
||||
$users = $res['users'] ?? [];
|
||||
$all_users = array_merge($all_users, $users);
|
||||
$page++;
|
||||
} while (count($users) === $limit);
|
||||
|
||||
// ✅ timestamp 보정
|
||||
function normalize_ts($val) {
|
||||
$ts = (int) $val;
|
||||
if ($ts > 0 && $ts < 1e12) $ts *= 1000;
|
||||
return $ts;
|
||||
}
|
||||
|
||||
// ====== ✅ DB에서 최근 로그인 시간 가져오기 ======
|
||||
try {
|
||||
$pdo = new PDO("mysql:host=localhost;dbname=egbim;charset=utf8mb4", "egbim", "baron3840!!", [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]);
|
||||
|
||||
$stmt = $pdo->query("
|
||||
SELECT login_id, MAX(user_login_time) AS last_login_time
|
||||
FROM user_program_info
|
||||
WHERE user_login_time IS NOT NULL AND user_login_time <> ''
|
||||
GROUP BY login_id
|
||||
");
|
||||
$loginMap = [];
|
||||
while ($row = $stmt->fetch()) {
|
||||
$loginMap[$row['login_id']] = $row['last_login_time'];
|
||||
}
|
||||
|
||||
// Descope 유저 리스트와 merge
|
||||
foreach ($all_users as &$u) {
|
||||
$loginId = $u['loginIds'][0] ?? null;
|
||||
$u['customAttributes']['serverLastLogin'] =
|
||||
($loginId && isset($loginMap[$loginId])) ? $loginMap[$loginId] : null;
|
||||
}
|
||||
unset($u);
|
||||
} catch (Exception $e) {
|
||||
// DB 오류 시 무시하고 진행
|
||||
}
|
||||
|
||||
// ✅ 기간 필터
|
||||
$start = $_GET['start'] ?? null;
|
||||
$end = $_GET['end'] ?? null;
|
||||
$mode = $_GET['mode'] ?? 'created';
|
||||
|
||||
if ($start || $end) {
|
||||
$startTs = $start ? strtotime($start . " 00:00:00") * 1000 : null;
|
||||
$endTs = $end ? strtotime($end . " 23:59:59") * 1000 : null;
|
||||
|
||||
$all_users = array_filter($all_users, function($u) use ($startTs, $endTs, $mode) {
|
||||
// 기본값
|
||||
$ts = 0;
|
||||
|
||||
if ($mode === 'created') {
|
||||
$ts = normalize_ts($u['createdTime'] ?? 0);
|
||||
|
||||
} elseif ($mode === 'lastSignIn') {
|
||||
$ts = normalize_ts($u['customAttributes']['lastSignInDate'] ?? 0);
|
||||
|
||||
} elseif ($mode === 'license') {
|
||||
$ts = normalize_ts($u['customAttributes']['egBimLExpiryDate'] ?? 0);
|
||||
|
||||
} elseif ($mode === 'serverLogin') {
|
||||
// ✅ EGBIM 최근 로그인 (DB에서 가져온 값은 문자열로 가정)
|
||||
if (!empty($u['customAttributes']['serverLastLogin'])) {
|
||||
$ts = strtotime($u['customAttributes']['serverLastLogin']) * 1000;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$ts) return false;
|
||||
if ($startTs && $ts < $startTs) return false;
|
||||
if ($endTs && $ts > $endTs) return false;
|
||||
return true;
|
||||
});
|
||||
$all_users = array_values($all_users);
|
||||
}
|
||||
|
||||
// ✅ 테넌트 필터
|
||||
$tenantFilters = isset($_GET['tenants']) ? explode(',', $_GET['tenants']) : [];
|
||||
if (!empty($tenantFilters)) {
|
||||
$all_users = array_filter($all_users, function($u) use ($tenantFilters) {
|
||||
if (!empty($u['userTenants']) && is_array($u['userTenants'])) {
|
||||
foreach ($u['userTenants'] as $t) {
|
||||
$tName = $t['tenantName'] ?? '';
|
||||
foreach ($tenantFilters as $f) {
|
||||
if (strcasecmp($tName, $f) === 0) return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
$all_users = array_values($all_users);
|
||||
}
|
||||
|
||||
// ✅ 키워드 검색 (소속 가족사 / 외부회사 / 이름 / DisplayName)
|
||||
$keyword = $_GET['keyword'] ?? '';
|
||||
if ($keyword !== '') {
|
||||
$all_users = array_filter($all_users, function($u) use ($keyword) {
|
||||
$fc = $u['customAttributes']['familyCompany'] ?? '';
|
||||
$comp = $u['customAttributes']['company'] ?? '';
|
||||
$name = $u['name'] ?? '';
|
||||
$disp = $u['displayName'] ?? '';
|
||||
|
||||
return (
|
||||
stripos($fc, $keyword) !== false ||
|
||||
stripos($comp, $keyword) !== false ||
|
||||
stripos($name, $keyword) !== false ||
|
||||
stripos($disp, $keyword) !== false
|
||||
);
|
||||
});
|
||||
$all_users = array_values($all_users);
|
||||
}
|
||||
|
||||
// ✅ 정렬 (최신순)
|
||||
usort($all_users, function($a, $b) use ($mode) {
|
||||
if ($mode === 'created') {
|
||||
return ($b['createdTime'] ?? 0) <=> ($a['createdTime'] ?? 0);
|
||||
|
||||
} elseif ($mode === 'lastSignIn') {
|
||||
return ($b['customAttributes']['lastSignInDate'] ?? 0) <=> ($a['customAttributes']['lastSignInDate'] ?? 0);
|
||||
|
||||
} elseif ($mode === 'license') {
|
||||
return ($b['customAttributes']['egBimLExpiryDate'] ?? 0) <=> ($a['customAttributes']['egBimLExpiryDate'] ?? 0);
|
||||
|
||||
} elseif ($mode === 'serverLogin') {
|
||||
$aTs = !empty($a['customAttributes']['serverLastLogin']) ? strtotime($a['customAttributes']['serverLastLogin']) : 0;
|
||||
$bTs = !empty($b['customAttributes']['serverLastLogin']) ? strtotime($b['customAttributes']['serverLastLogin']) : 0;
|
||||
return $bTs <=> $aTs;
|
||||
}
|
||||
|
||||
return 0;
|
||||
});
|
||||
|
||||
// ✅ 최종 응답
|
||||
echo json_encode([
|
||||
'status' => 'ok',
|
||||
'count' => count($all_users),
|
||||
'users' => $all_users,
|
||||
'filters'=> [
|
||||
'start' => $start,
|
||||
'end' => $end,
|
||||
'mode' => $mode,
|
||||
'keyword' => $keyword
|
||||
]
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
|
||||
// ✅ 타임존 설정 및 디버그용 메타 정보
|
||||
date_default_timezone_set('Asia/Seoul');
|
||||
$server_timezone = date_default_timezone_get();
|
||||
$server_time = date('Y-m-d H:i:s');
|
||||
|
||||
// ✅ Descope Management Key
|
||||
$management_key = 'P2wON5fy1K6kyia269VpeIzYP8oP:K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj';
|
||||
$headers = [
|
||||
"Authorization: Bearer $management_key",
|
||||
"Content-Type: application/json"
|
||||
];
|
||||
|
||||
$all_users = [];
|
||||
$page = 0;
|
||||
$limit = 200;
|
||||
|
||||
// ✅ 1) Descope 전체 유저 조회
|
||||
do {
|
||||
$url_users = "https://api.descope.com/v2/mgmt/user/search";
|
||||
$payload = json_encode(["limit" => $limit, "page" => $page]);
|
||||
|
||||
$ch = curl_init($url_users);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($http_code !== 200) {
|
||||
echo json_encode(['status' => 'fail', 'step' => 'user_search', 'code' => $http_code, 'raw' => $response]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$res = json_decode($response, true);
|
||||
$users = $res['users'] ?? [];
|
||||
$all_users = array_merge($all_users, $users);
|
||||
$page++;
|
||||
} while (count($users) === $limit);
|
||||
|
||||
// ✅ 2) MySQL에서 최근 로그인 시간 병합
|
||||
try {
|
||||
$dbHost = getenv('G5_MYSQL_HOST') ?: getenv('MARIADB_HOST') ?: getenv('MYSQL_HOST') ?: 'localhost';
|
||||
$dbName = getenv('G5_MYSQL_DB') ?: getenv('MARIADB_DATABASE') ?: getenv('MYSQL_DATABASE') ?: 'egbim';
|
||||
$dbUser = getenv('G5_MYSQL_USER') ?: getenv('MARIADB_USER') ?: getenv('MYSQL_USER') ?: 'egbim';
|
||||
$dbPass = getenv('G5_MYSQL_PASSWORD') ?: getenv('MARIADB_PASSWORD') ?: getenv('MYSQL_PASSWORD') ?: 'baron3840!!';
|
||||
|
||||
$pdo = new PDO("mysql:host={$dbHost};dbname={$dbName};charset=utf8mb4", $dbUser, $dbPass, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]);
|
||||
|
||||
$stmt = $pdo->query("
|
||||
SELECT login_id, MAX(user_login_time) AS last_login_time
|
||||
FROM user_program_info
|
||||
WHERE user_login_time IS NOT NULL AND user_login_time <> ''
|
||||
GROUP BY login_id
|
||||
");
|
||||
|
||||
$loginMap = [];
|
||||
while ($row = $stmt->fetch()) {
|
||||
$loginMap[$row['login_id']] = $row['last_login_time'];
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
$loginMap = [];
|
||||
}
|
||||
|
||||
// ✅ 3) 날짜 변환 함수 (KST 환경 기준 — 이중 변환 방지)
|
||||
$fmtDate = function($val) {
|
||||
if (empty($val)) return null;
|
||||
if (!is_numeric($val)) return null;
|
||||
|
||||
$ts = (float) $val;
|
||||
if ($ts > 1e12) $ts = $ts / 1000; // 밀리초 → 초 변환
|
||||
$ts = (int) round($ts);
|
||||
if ($ts <= 0) return null;
|
||||
|
||||
// ✅ UTC 기준으로 그대로 출력 (PHP의 +9h 보정 방지)
|
||||
return gmdate('Y-m-d H:i:s', $ts);
|
||||
};
|
||||
|
||||
// ✅ 4) 유저 데이터 가공
|
||||
foreach ($all_users as &$u) {
|
||||
|
||||
$u['customAttributes'] = $u['customAttributes'] ?? [];
|
||||
$u['name'] = $u['name'] ?? '';
|
||||
$u['email'] = $u['email'] ?? '';
|
||||
$u['phone'] = $u['phone'] ?? '';
|
||||
|
||||
// --- 테넌트 이름 문자열화 ---
|
||||
if (!empty($u['userTenants']) && is_array($u['userTenants'])) {
|
||||
$tenantNames = [];
|
||||
foreach ($u['userTenants'] as $t) {
|
||||
$tenantNames[] = $t['tenantName'] ?? $t['tenantId'] ?? '';
|
||||
}
|
||||
$u['tenantText'] = implode(', ', array_filter($tenantNames));
|
||||
} else {
|
||||
$u['tenantText'] = '-';
|
||||
}
|
||||
|
||||
// --- createdTime ---
|
||||
if (!empty($u['createdTime'])) {
|
||||
$u['createdTime'] = $fmtDate($u['createdTime']);
|
||||
}
|
||||
|
||||
// --- egBimLExpiryDate ---
|
||||
if (!empty($u['customAttributes']['egBimLExpiryDate'])) {
|
||||
$u['customAttributes']['egBimLExpiryDate'] = $fmtDate($u['customAttributes']['egBimLExpiryDate']);
|
||||
}
|
||||
|
||||
// --- lastSignInDate ---
|
||||
if (!empty($u['customAttributes']['lastSignInDate'])) {
|
||||
$u['customAttributes']['lastSignInDate'] = $fmtDate($u['customAttributes']['lastSignInDate']);
|
||||
}
|
||||
|
||||
// --- serverLastLogin (EGBIM DB 병합) ---
|
||||
$loginId = $u['loginIds'][0] ?? null;
|
||||
if ($loginId && isset($loginMap[$loginId])) {
|
||||
$u['customAttributes']['serverLastLogin'] = $loginMap[$loginId];
|
||||
}
|
||||
|
||||
// --- completeForm 표시를 true/false → 텍스트로 ---
|
||||
if (isset($u['customAttributes']['completeForm'])) {
|
||||
$u['customAttributes']['completeForm'] = $u['customAttributes']['completeForm'] ? '완료' : '미완료';
|
||||
}
|
||||
}
|
||||
unset($u);
|
||||
|
||||
// ✅ 5) 필터링
|
||||
$start = $_GET['start'] ?? null;
|
||||
$end = $_GET['end'] ?? null;
|
||||
$mode = $_GET['mode'] ?? 'created';
|
||||
$keyword = $_GET['keyword'] ?? '';
|
||||
$tenantFilters = isset($_GET['tenants']) ? explode(',', $_GET['tenants']) : [];
|
||||
|
||||
function normalize_ts($val) {
|
||||
$ts = (int)$val;
|
||||
if ($ts > 0 && $ts < 1e12) $ts *= 1000;
|
||||
return $ts;
|
||||
}
|
||||
|
||||
// --- 기간 필터 ---
|
||||
if ($start || $end) {
|
||||
$startTs = $start ? strtotime($start . " 00:00:00") * 1000 : null;
|
||||
$endTs = $end ? strtotime($end . " 23:59:59") * 1000 : null;
|
||||
|
||||
$all_users = array_filter($all_users, function($u) use ($startTs, $endTs, $mode) {
|
||||
$ts = 0;
|
||||
if ($mode === 'created') {
|
||||
$ts = strtotime($u['createdTime'] ?? '') * 1000;
|
||||
} elseif ($mode === 'lastSignIn') {
|
||||
$ts = strtotime($u['customAttributes']['lastSignInDate'] ?? '') * 1000;
|
||||
} elseif ($mode === 'license') {
|
||||
$ts = strtotime($u['customAttributes']['egBimLExpiryDate'] ?? '') * 1000;
|
||||
} elseif ($mode === 'serverLogin') {
|
||||
if (!empty($u['customAttributes']['serverLastLogin'])) {
|
||||
$ts = strtotime($u['customAttributes']['serverLastLogin']) * 1000;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$ts) return false;
|
||||
if ($startTs && $ts < $startTs) return false;
|
||||
if ($endTs && $ts > $endTs) return false;
|
||||
return true;
|
||||
});
|
||||
$all_users = array_values($all_users);
|
||||
}
|
||||
|
||||
// --- 테넌트 필터 ---
|
||||
if (!empty($tenantFilters)) {
|
||||
$all_users = array_filter($all_users, function($u) use ($tenantFilters) {
|
||||
$txt = $u['tenantText'] ?? '';
|
||||
foreach ($tenantFilters as $t) {
|
||||
if (stripos($txt, $t) !== false) return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
$all_users = array_values($all_users);
|
||||
}
|
||||
|
||||
// --- 키워드 필터 ---
|
||||
if ($keyword !== '') {
|
||||
$all_users = array_filter($all_users, function($u) use ($keyword) {
|
||||
$fields = [
|
||||
$u['customAttributes']['familyCompany'] ?? '',
|
||||
$u['customAttributes']['company'] ?? '',
|
||||
$u['name'] ?? '',
|
||||
$u['displayName'] ?? ''
|
||||
];
|
||||
foreach ($fields as $f) {
|
||||
if (stripos($f, $keyword) !== false) return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
$all_users = array_values($all_users);
|
||||
}
|
||||
|
||||
// --- 정렬 ---
|
||||
usort($all_users, function($a, $b) use ($mode) {
|
||||
if ($mode === 'created') {
|
||||
return strcmp($b['createdTime'] ?? '', $a['createdTime'] ?? '');
|
||||
} elseif ($mode === 'lastSignIn') {
|
||||
return strcmp($b['customAttributes']['lastSignInDate'] ?? '', $a['customAttributes']['lastSignInDate'] ?? '');
|
||||
} elseif ($mode === 'license') {
|
||||
return strcmp($b['customAttributes']['egBimLExpiryDate'] ?? '', $a['customAttributes']['egBimLExpiryDate'] ?? '');
|
||||
} elseif ($mode === 'serverLogin') {
|
||||
return strcmp($b['customAttributes']['serverLastLogin'] ?? '', $a['customAttributes']['serverLastLogin'] ?? '');
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
|
||||
|
||||
// ✅ 6) 최종 응답 (타임존 정보 포함)
|
||||
echo json_encode([
|
||||
'status' => 'success', // ✅ "ok" 대신 "success"로
|
||||
'total' => count($all_users),
|
||||
'records' => $all_users,
|
||||
'msg' => '', // ✅ w2ui 기본 필드 추가
|
||||
'meta' => [
|
||||
'timezone' => $server_timezone,
|
||||
'server_time' => $server_time
|
||||
]
|
||||
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
?>
|
||||
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
// clean the output buffer
|
||||
ob_end_clean();
|
||||
|
||||
$no = isset($_REQUEST['no']) ? (int) $_REQUEST['no'] : 0;
|
||||
|
||||
@include_once($board_skin_path.'/download.head.skin.php');
|
||||
|
||||
// 쿠키에 저장된 ID값과 넘어온 ID값을 비교하여 같지 않을 경우 오류 발생
|
||||
// 다른곳에서 링크 거는것을 방지하기 위한 코드
|
||||
if (!get_session('ss_view_'.$bo_table.'_'.$wr_id))
|
||||
alert('잘못된 접근입니다.');
|
||||
|
||||
// 다운로드 차감일 때 비회원은 다운로드 불가
|
||||
if($board['bo_download_point'] < 0 && $is_guest)
|
||||
alert('다운로드 권한이 없습니다.\\n회원이시라면 로그인 후 이용해 보십시오.', G5_BBS_URL.'/login.php?wr_id='.$wr_id.'&'.$qstr.'&url='.urlencode(get_pretty_url($bo_table, $wr_id)));
|
||||
|
||||
$sql = " select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$no' ";
|
||||
$file = sql_fetch($sql);
|
||||
if (!$file['bf_file'])
|
||||
alert_close('파일 정보가 존재하지 않습니다.');
|
||||
|
||||
$nonce = isset($_REQUEST['nonce']) ? preg_replace('/[^0-9a-z\|]/i', '', $_REQUEST['nonce']) : '';
|
||||
|
||||
if (function_exists('download_file_nonce_is_valid') && !defined('G5_DOWNLOAD_NONCE_CHECK')){
|
||||
if(! download_file_nonce_is_valid($nonce, $bo_table, $wr_id)){
|
||||
alert('토큰 유효시간이 지났거나 토큰이 유효하지 않습니다.\\n브라우저를 새로고침 후 다시 시도해 주세요.', G5_URL);
|
||||
}
|
||||
}
|
||||
|
||||
// JavaScript 불가일 때
|
||||
$js = (isset($_GET['js'])) ? $_GET['js'] : '';
|
||||
if($js != 'on' && $board['bo_download_point'] < 0) {
|
||||
$msg = $file['bf_source'].' 파일을 다운로드 하시면 포인트가 차감('.number_format($board['bo_download_point']).'점)됩니다.\\n포인트는 게시물당 한번만 차감되며 다음에 다시 다운로드 하셔도 중복하여 차감하지 않습니다.\\n그래도 다운로드 하시겠습니까?';
|
||||
$url1 = G5_BBS_URL.'/download.php?'.clean_query_string($_SERVER['QUERY_STRING'], false).'&js=on';
|
||||
$url2 = isset($_SERVER['HTTP_REFERER']) ? clean_xss_tags($_SERVER['HTTP_REFERER']) : '';
|
||||
|
||||
if( $url2 && stripos($url2, $_SERVER['REQUEST_URI']) !== false ){
|
||||
$url2 = G5_BBS_URL.'/board.php?'.clean_query_string($_SERVER['QUERY_STRING'], false);
|
||||
}
|
||||
|
||||
//$url1 = 확인link, $url2=취소link
|
||||
// 특정주소로 이동시키려면 $url3 이용
|
||||
confirm($msg, $url1, $url2);
|
||||
}
|
||||
|
||||
if ($member['mb_level'] < $board['bo_download_level']) {
|
||||
$alert_msg = '다운로드 권한이 없습니다.';
|
||||
if ($member['mb_id'])
|
||||
alert($alert_msg);
|
||||
else
|
||||
alert($alert_msg.'\\n회원이시라면 로그인 후 이용해 보십시오.', G5_BBS_URL.'/login.php?wr_id='.$wr_id.'&'.$qstr.'&url='.urlencode(get_pretty_url($bo_table, $wr_id)));
|
||||
}
|
||||
|
||||
$filepath = G5_DATA_PATH.'/file/'.$bo_table.'/'.$file['bf_file'];
|
||||
$filepath = addslashes($filepath);
|
||||
$file_exist_check = (!is_file($filepath) || !file_exists($filepath)) ? false : true;
|
||||
|
||||
if ( false === run_replace('download_file_exist_check', $file_exist_check, $file) ){
|
||||
alert('파일이 존재하지 않습니다.');
|
||||
}
|
||||
|
||||
// 사용자 코드 실행
|
||||
@include_once($board_skin_path.'/download.skin.php');
|
||||
|
||||
// 이미 다운로드 받은 파일인지를 검사한 후 게시물당 한번만 포인트를 차감하도록 수정
|
||||
$ss_name = 'ss_down_'.$bo_table.'_'.$wr_id;
|
||||
if (!get_session($ss_name))
|
||||
{
|
||||
// 자신의 글이라면 통과
|
||||
// 관리자인 경우 통과
|
||||
if (($write['mb_id'] && $write['mb_id'] == $member['mb_id']) || $is_admin)
|
||||
;
|
||||
else if ($board['bo_download_level'] >= 1) // 회원이상 다운로드가 가능하다면
|
||||
{
|
||||
// 다운로드 포인트가 음수이고 회원의 포인트가 0 이거나 작다면
|
||||
if ($member['mb_point'] + $board['bo_download_point'] < 0)
|
||||
alert('보유하신 포인트('.number_format($member['mb_point']).')가 없거나 모자라서 다운로드('.number_format($board['bo_download_point']).')가 불가합니다.\\n\\n포인트를 적립하신 후 다시 다운로드 해 주십시오.');
|
||||
|
||||
// 게시물당 한번만 차감하도록 수정
|
||||
insert_point($member['mb_id'], $board['bo_download_point'], "{$board['bo_subject']} $wr_id 파일 다운로드", $bo_table, $wr_id, "다운로드");
|
||||
}
|
||||
|
||||
set_session($ss_name, TRUE);
|
||||
}
|
||||
|
||||
// 이미 다운로드 받은 파일인지를 검사한 후 다운로드 카운트 증가 ( SIR 그누위즈 님 코드 제안 )
|
||||
$ss_name = 'ss_down_'.$bo_table.'_'.$wr_id.'_'.$no;
|
||||
if (!get_session($ss_name))
|
||||
{
|
||||
// 다운로드 카운트 증가
|
||||
$sql = " update {$g5['board_file_table']} set bf_download = bf_download + 1 where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$no' ";
|
||||
sql_query($sql);
|
||||
// 다운로드 카운트를 증가시키고 세션을 생성
|
||||
$_SESSION[$ss_name] = true;
|
||||
}
|
||||
|
||||
$g5['title'] = '다운로드 > '.conv_subject($write['wr_subject'], 255);
|
||||
|
||||
//파일명에 한글이 있는 경우
|
||||
/*
|
||||
if(preg_match("/[\xA1-\xFE][\xA1-\xFE]/", $file['bf_source'])){
|
||||
// 2015.09.02 날짜의 파이어폭스에서 인코딩된 문자 그대로 출력되는 문제가 발생됨, 2018.12.11 날짜의 파이어폭스에서는 해당 현상이 없으므로 해당 코드를 사용 안합니다.
|
||||
$original = iconv('utf-8', 'euc-kr', $file['bf_source']); // SIR 잉끼님 제안코드
|
||||
} else {
|
||||
$original = urlencode($file['bf_source']);
|
||||
}
|
||||
*/
|
||||
|
||||
//$original = urlencode($file['bf_source']);
|
||||
$original = rawurlencode($file['bf_source']);
|
||||
|
||||
@include_once($board_skin_path.'/download.tail.skin.php');
|
||||
|
||||
run_event('download_file_header', $file, $file_exist_check);
|
||||
|
||||
if(preg_match("/msie/i", $_SERVER['HTTP_USER_AGENT']) && preg_match("/5\.5/", $_SERVER['HTTP_USER_AGENT'])) {
|
||||
header("content-type: doesn/matter");
|
||||
header("content-length: ".filesize($filepath));
|
||||
header("content-disposition: attachment; filename=\"$original\"");
|
||||
header("content-transfer-encoding: binary");
|
||||
} else if (preg_match("/Firefox/i", $_SERVER['HTTP_USER_AGENT'])){
|
||||
header("content-type: file/unknown");
|
||||
header("content-length: ".filesize($filepath));
|
||||
//header("content-disposition: attachment; filename=\"".basename($file['bf_source'])."\"");
|
||||
header("content-disposition: attachment; filename=\"".$original."\"");
|
||||
header("content-description: php generated data");
|
||||
} else {
|
||||
header("content-type: file/unknown");
|
||||
header("content-length: ".filesize($filepath));
|
||||
header("content-disposition: attachment; filename=\"$original\"");
|
||||
header("content-description: php generated data");
|
||||
}
|
||||
header("pragma: no-cache");
|
||||
header("expires: 0");
|
||||
flush();
|
||||
|
||||
$fp = fopen($filepath, 'rb');
|
||||
|
||||
// 4.00 대체
|
||||
// 서버부하를 줄이려면 print 나 echo 또는 while 문을 이용한 방법보다는 이방법이...
|
||||
//if (!fpassthru($fp)) {
|
||||
// fclose($fp);
|
||||
//}
|
||||
|
||||
$download_rate = 10;
|
||||
|
||||
while(!feof($fp)) {
|
||||
//echo fread($fp, 100*1024);
|
||||
/*
|
||||
echo fread($fp, 100*1024);
|
||||
flush();
|
||||
*/
|
||||
|
||||
print fread($fp, round($download_rate * 1024));
|
||||
flush();
|
||||
usleep(1000);
|
||||
}
|
||||
fclose ($fp);
|
||||
flush();
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
// 봇의 메일 링크 크롤링을 방지합니다.
|
||||
if(function_exists('check_mail_bot')){ check_mail_bot($_SERVER['REMOTE_ADDR']); }
|
||||
|
||||
$mb_id = isset($_GET['mb_id']) ? trim($_GET['mb_id']) : '';
|
||||
$mb_md5 = isset($_GET['mb_md5']) ? trim($_GET['mb_md5']) : '';
|
||||
|
||||
$sql = " select mb_id, mb_email_certify2, mb_leave_date, mb_intercept_date from {$g5['member_table']} where mb_id = '{$mb_id}' ";
|
||||
$row = sql_fetch($sql);
|
||||
if (!$row['mb_id'])
|
||||
alert('존재하는 회원이 아닙니다.', G5_URL);
|
||||
|
||||
if ( $row['mb_leave_date'] || $row['mb_intercept_date'] ){
|
||||
alert('탈퇴 또는 차단된 회원입니다.', G5_URL);
|
||||
}
|
||||
|
||||
// 인증 링크는 한번만 처리가 되게 한다.
|
||||
sql_query(" update {$g5['member_table']} set mb_email_certify2 = '' where mb_id = '$mb_id' ");
|
||||
|
||||
if ($mb_md5)
|
||||
{
|
||||
if ($mb_md5 == $row['mb_email_certify2'])
|
||||
{
|
||||
sql_query(" update {$g5['member_table']} set mb_email_certify = '".G5_TIME_YMDHIS."' where mb_id = '{$mb_id}' ");
|
||||
|
||||
alert("메일인증 처리를 완료 하였습니다.\\n\\n지금부터 {$mb_id} 아이디로 로그인 가능합니다.", G5_URL);
|
||||
}
|
||||
else
|
||||
{
|
||||
alert('메일인증 요청 정보가 올바르지 않습니다.', G5_URL);
|
||||
}
|
||||
}
|
||||
|
||||
alert('제대로 된 값이 넘어오지 않았습니다.', G5_URL);
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$mb_id = isset($_REQUEST['mb_id']) ? clean_xss_tags($_REQUEST['mb_id'], 1, 1) : '';
|
||||
|
||||
$sql = " select mb_id, mb_email, mb_datetime from {$g5['member_table']} where mb_id = '{$mb_id}' ";
|
||||
$row = sql_fetch($sql);
|
||||
if (!$row['mb_id'])
|
||||
alert('존재하는 회원이 아닙니다.', G5_URL);
|
||||
|
||||
if ($mb_md5) {
|
||||
$tmp_md5 = md5($row['mb_id'].$row['mb_email'].$row['mb_datetime']);
|
||||
if ($mb_md5 == $tmp_md5) {
|
||||
sql_query(" update {$g5['member_table']} set mb_mailling = 0 where mb_id = '{$mb_id}' ");
|
||||
|
||||
alert('정보메일을 보내지 않도록 수신거부 하였습니다.', G5_URL);
|
||||
}
|
||||
}
|
||||
|
||||
alert('제대로 된 값이 넘어오지 않았습니다.', G5_URL);
|
||||
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
//dbconfig파일에 $g5['faq_table'] , $g5['faq_master_table'] 배열변수가 있는지 체크
|
||||
if( !isset($g5['faq_table']) || !isset($g5['faq_master_table']) ){
|
||||
die('<meta charset="utf-8">관리자 모드에서 게시판관리->FAQ관리를 먼저 확인해 주세요.');
|
||||
}
|
||||
|
||||
// FAQ MASTER
|
||||
$faq_master_list = array();
|
||||
$sql = " select * from {$g5['faq_master_table']} order by fm_order,fm_id ";
|
||||
$result = sql_query($sql);
|
||||
while ($row=sql_fetch_array($result))
|
||||
{
|
||||
$key = $row['fm_id'];
|
||||
if (!isset($fm_id)) $fm_id = $key;
|
||||
$faq_master_list[$key] = $row;
|
||||
}
|
||||
|
||||
$fm = array();
|
||||
if (isset($fm_id) && $fm_id){
|
||||
$fm_id = (int) $fm_id;
|
||||
$qstr .= '&fm_id=' . $fm_id; // 마스터faq key_id
|
||||
|
||||
$fm = $faq_master_list[$fm_id];
|
||||
}
|
||||
|
||||
if (! (isset($fm['fm_id']) && $fm['fm_id']))
|
||||
alert('등록된 내용이 없습니다.');
|
||||
|
||||
$g5['title'] = $fm['fm_subject'];
|
||||
|
||||
$skin_file = $faq_skin_path.'/list.skin.php';
|
||||
|
||||
include_once('./_head.php');
|
||||
|
||||
if(is_file($skin_file)) {
|
||||
$admin_href = '';
|
||||
$himg_src = '';
|
||||
$timg_src = '';
|
||||
if($is_admin)
|
||||
$admin_href = G5_ADMIN_URL.'/faqmasterform.php?w=u&fm_id='.$fm_id;
|
||||
|
||||
if(!G5_IS_MOBILE) {
|
||||
$himg = G5_DATA_PATH.'/faq/'.$fm_id.'_h';
|
||||
if (is_file($himg)){
|
||||
$himg_src = G5_DATA_URL.'/faq/'.$fm_id.'_h';
|
||||
}
|
||||
|
||||
$timg = G5_DATA_PATH.'/faq/'.$fm_id.'_t';
|
||||
if (is_file($timg)){
|
||||
$timg_src = G5_DATA_URL.'/faq/'.$fm_id.'_t';
|
||||
}
|
||||
}
|
||||
|
||||
$category_href = G5_BBS_URL.'/faq.php';
|
||||
$category_stx = '';
|
||||
$faq_list = array();
|
||||
|
||||
$stx = trim($stx);
|
||||
$sql_search = '';
|
||||
|
||||
if($stx) {
|
||||
$sql_search = " and ( INSTR(fa_subject, '$stx') > 0 or INSTR(fa_content, '$stx') > 0 ) ";
|
||||
}
|
||||
|
||||
if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
|
||||
|
||||
$page_rows = G5_IS_MOBILE ? $config['cf_mobile_page_rows'] : $config['cf_page_rows'];
|
||||
|
||||
$sql = " select count(*) as cnt
|
||||
from {$g5['faq_table']}
|
||||
where fm_id = '$fm_id'
|
||||
$sql_search ";
|
||||
$total = sql_fetch($sql);
|
||||
$total_count = $total['cnt'];
|
||||
|
||||
$total_page = ceil($total_count / $page_rows); // 전체 페이지 계산
|
||||
$from_record = ($page - 1) * $page_rows; // 시작 열을 구함
|
||||
|
||||
$sql = " select *
|
||||
from {$g5['faq_table']}
|
||||
where fm_id = '$fm_id'
|
||||
$sql_search
|
||||
order by fa_order , fa_id
|
||||
limit $from_record, $page_rows ";
|
||||
$result = sql_query($sql);
|
||||
for ($i=0;$row=sql_fetch_array($result);$i++){
|
||||
$faq_list[] = $row;
|
||||
if($stx) {
|
||||
$faq_list[$i]['fa_subject'] = search_font($stx, conv_content($faq_list[$i]['fa_subject'], 1));
|
||||
$faq_list[$i]['fa_content'] = search_font($stx, conv_content($faq_list[$i]['fa_content'], 1));
|
||||
}
|
||||
}
|
||||
include_once($skin_file);
|
||||
} else {
|
||||
echo '<p>'.str_replace(G5_PATH.'/', '', $skin_file).'이 존재하지 않습니다.</p>';
|
||||
}
|
||||
|
||||
include_once('./_tail.php');
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
//dbconfig파일에 $g5['faq_table'] , $g5['faq_master_table'] 배열변수가 있는지 체크
|
||||
if( !isset($g5['faq_table']) || !isset($g5['faq_master_table']) ){
|
||||
die('<meta charset="utf-8">관리자 모드에서 게시판관리->FAQ관리를 먼저 확인해 주세요.');
|
||||
}
|
||||
|
||||
// FAQ MASTER
|
||||
$faq_master_list = array();
|
||||
$sql = " select * from {$g5['faq_master_table']} order by fm_order,fm_id ";
|
||||
$result = sql_query($sql);
|
||||
while ($row=sql_fetch_array($result))
|
||||
{
|
||||
$key = $row['fm_id'];
|
||||
if (!isset($fm_id)) $fm_id = $key;
|
||||
$faq_master_list[$key] = $row;
|
||||
}
|
||||
|
||||
$fm = array();
|
||||
if (isset($fm_id) && $fm_id){
|
||||
$fm_id = (int) $fm_id;
|
||||
$qstr .= '&fm_id=' . $fm_id; // 마스터faq key_id
|
||||
|
||||
$fm = $faq_master_list[$fm_id];
|
||||
}
|
||||
|
||||
if (! (isset($fm['fm_id']) && $fm['fm_id']))
|
||||
alert('등록된 내용이 없습니다.');
|
||||
|
||||
$g5['title'] = $fm['fm_subject'];
|
||||
|
||||
$skin_file = $faq_skin_path.'/list.skin.php';
|
||||
|
||||
include_once('./_head.php');
|
||||
|
||||
if(is_file($skin_file)) {
|
||||
$admin_href = '';
|
||||
$himg_src = '';
|
||||
$timg_src = '';
|
||||
if($is_admin)
|
||||
$admin_href = G5_ADMIN_URL.'/faqmasterform.php?w=u&fm_id='.$fm_id;
|
||||
|
||||
if(!G5_IS_MOBILE) {
|
||||
$himg = G5_DATA_PATH.'/faq/'.$fm_id.'_h';
|
||||
if (is_file($himg)){
|
||||
$himg_src = G5_DATA_URL.'/faq/'.$fm_id.'_h';
|
||||
}
|
||||
|
||||
$timg = G5_DATA_PATH.'/faq/'.$fm_id.'_t';
|
||||
if (is_file($timg)){
|
||||
$timg_src = G5_DATA_URL.'/faq/'.$fm_id.'_t';
|
||||
}
|
||||
}
|
||||
|
||||
$category_href = G5_BBS_URL.'/faq.php';
|
||||
$category_stx = '';
|
||||
$faq_list = array();
|
||||
|
||||
$stx = trim($stx);
|
||||
$sql_search = '';
|
||||
|
||||
if($stx) {
|
||||
$sql_search = " and ( INSTR(fa_subject, '$stx') > 0 or INSTR(fa_content, '$stx') > 0 ) ";
|
||||
}
|
||||
|
||||
if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
|
||||
|
||||
$page_rows = G5_IS_MOBILE ? $config['cf_mobile_page_rows'] : $config['cf_page_rows'];
|
||||
|
||||
$sql = " select count(*) as cnt
|
||||
from {$g5['faq_table']}
|
||||
where fm_id = '$fm_id'
|
||||
$sql_search ";
|
||||
$total = sql_fetch($sql);
|
||||
$total_count = $total['cnt'];
|
||||
|
||||
$total_page = ceil($total_count / $page_rows); // 전체 페이지 계산
|
||||
$from_record = ($page - 1) * $page_rows; // 시작 열을 구함
|
||||
|
||||
$sql = " select *
|
||||
from {$g5['faq_table']}
|
||||
where fm_id = '$fm_id'
|
||||
$sql_search
|
||||
order by fa_order , fa_id
|
||||
limit $from_record, $page_rows ";
|
||||
$result = sql_query($sql);
|
||||
for ($i=0;$row=sql_fetch_array($result);$i++){
|
||||
$faq_list[] = $row;
|
||||
if($stx) {
|
||||
$faq_list[$i]['fa_subject'] = search_font($stx, conv_content($faq_list[$i]['fa_subject'], 1));
|
||||
$faq_list[$i]['fa_content'] = search_font($stx, conv_content($faq_list[$i]['fa_content'], 1));
|
||||
}
|
||||
}
|
||||
include_once($skin_file);
|
||||
} else {
|
||||
echo '<p>'.str_replace(G5_PATH.'/', '', $skin_file).'이 존재하지 않습니다.</p>';
|
||||
}
|
||||
|
||||
// include_once('./_tail.php');
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = '도면관리';
|
||||
|
||||
include_once($member_skin_path.'/floorplan.skin.php');
|
||||
?>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = 'for BIM';
|
||||
|
||||
include_once($member_skin_path.'/forbim.skin.php');
|
||||
?>
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
|
||||
if (!$config['cf_email_use'])
|
||||
alert_close('환경설정에서 \"메일발송 사용\"에 체크하셔야 메일을 발송할 수 있습니다.\\n\\n관리자에게 문의하시기 바랍니다.');
|
||||
|
||||
if (!$is_member && $config['cf_formmail_is_member'])
|
||||
alert_close('회원만 이용하실 수 있습니다.');
|
||||
|
||||
$mb_id = isset($mb_id) ? get_search_string($mb_id) : '';
|
||||
|
||||
if ($is_member && !$member['mb_open'] && $is_admin != "super" && $member['mb_id'] != $mb_id)
|
||||
alert_close('자신의 정보를 공개하지 않으면 다른분에게 메일을 보낼 수 없습니다.\\n\\n정보공개 설정은 회원정보수정에서 하실 수 있습니다.');
|
||||
|
||||
if ($mb_id)
|
||||
{
|
||||
$mb = get_member($mb_id);
|
||||
if (!$mb['mb_id'])
|
||||
alert_close('회원정보가 존재하지 않습니다.\\n\\n탈퇴한 회원일 수 있습니다.');
|
||||
|
||||
if (!$mb['mb_open'] && $is_admin != "super")
|
||||
alert_close('정보공개를 하지 않았습니다.');
|
||||
}
|
||||
|
||||
$sendmail_count = (int)get_session('ss_sendmail_count') + 1;
|
||||
if ($sendmail_count > 3)
|
||||
alert_close('한번 접속후 일정수의 메일만 발송할 수 있습니다.\\n\\n계속해서 메일을 보내시려면 다시 로그인 또는 접속하여 주십시오.');
|
||||
|
||||
$g5['title'] = '메일 쓰기';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$email_enc = new str_encrypt();
|
||||
$email_dec = $email_enc->decrypt($email);
|
||||
|
||||
$email = get_email_address($email_dec);
|
||||
if(!$email)
|
||||
alert_close('이메일이 올바르지 않습니다.');
|
||||
|
||||
$email = $email_enc->encrypt($email);
|
||||
|
||||
if (!$name)
|
||||
$name = $email;
|
||||
else
|
||||
$name = get_text(stripslashes($name), true);
|
||||
|
||||
if (!isset($type))
|
||||
$type = 0;
|
||||
|
||||
$type_checked[0] = $type_checked[1] = $type_checked[2] = "";
|
||||
$type_checked[$type] = 'checked';
|
||||
|
||||
include_once($member_skin_path.'/formmail.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
include_once(G5_LIB_PATH.'/mailer.lib.php');
|
||||
|
||||
if (!$config['cf_email_use'])
|
||||
alert('환경설정에서 "메일발송 사용"에 체크하셔야 메일을 발송할 수 있습니다.\\n\\n관리자에게 문의하시기 바랍니다.');
|
||||
|
||||
if (!$is_member && $config['cf_formmail_is_member'])
|
||||
alert_close('회원만 이용하실 수 있습니다.');
|
||||
|
||||
$email_enc = new str_encrypt();
|
||||
$to = $email_enc->decrypt($to);
|
||||
|
||||
if (!chk_captcha()) {
|
||||
alert('자동등록방지 숫자가 틀렸습니다.');
|
||||
}
|
||||
|
||||
if (!preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/", $to)){
|
||||
alert_close('E-mail 주소가 형식에 맞지 않아서, 메일을 보낼수 없습니다.');
|
||||
}
|
||||
|
||||
$file = array();
|
||||
for ($i=1; $i<=$attach; $i++) {
|
||||
if ($_FILES['file'.$i]['name'])
|
||||
$file[] = attach_file($_FILES['file'.$i]['name'], $_FILES['file'.$i]['tmp_name']);
|
||||
}
|
||||
|
||||
$content = stripslashes($content);
|
||||
if ($type == 2) {
|
||||
$type = 1;
|
||||
$content = str_replace("\n", "<br>", $content);
|
||||
}
|
||||
|
||||
// html 이면
|
||||
if ($type) {
|
||||
$current_url = G5_URL;
|
||||
$mail_content = '<!doctype html><html lang="ko"><head><meta charset="utf-8"><title>메일보내기</title><link rel="stylesheet" href="'.$current_url.'/style.css"></head><body>'.$content.'</body></html>';
|
||||
}
|
||||
else
|
||||
$mail_content = $content;
|
||||
|
||||
mailer($fnick, $fmail, $to, $subject, $mail_content, $type, $file);
|
||||
|
||||
// 임시 첨부파일 삭제
|
||||
if(!empty($file)) {
|
||||
foreach($file as $f) {
|
||||
@unlink($f['path']);
|
||||
}
|
||||
}
|
||||
|
||||
//$html_title = $tmp_to . "님께 메일발송";
|
||||
$html_title = '메일 발송중';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
alert_close('메일을 정상적으로 발송하였습니다.');
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
run_event('bbs_good_before', $bo_table, $wr_id, $good);
|
||||
|
||||
@include_once($board_skin_path.'/good.head.skin.php');
|
||||
|
||||
// 자바스크립트 사용가능할 때
|
||||
if(isset($_POST['js']) && $_POST['js'] === "on") {
|
||||
$error = $count = "";
|
||||
|
||||
function print_result($error, $count)
|
||||
{
|
||||
echo '{ "error": "' . $error . '", "count": "' . $count . '" }';
|
||||
if($error)
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$is_member)
|
||||
{
|
||||
$error = '회원만 가능합니다.';
|
||||
print_result($error, $count);
|
||||
}
|
||||
|
||||
if (!($bo_table && $wr_id)) {
|
||||
$error = '값이 제대로 넘어오지 않았습니다.';
|
||||
print_result($error, $count);
|
||||
}
|
||||
|
||||
$ss_name = 'ss_view_'.$bo_table.'_'.$wr_id;
|
||||
if (!get_session($ss_name)) {
|
||||
$error = '해당 게시물에서만 추천 또는 비추천 하실 수 있습니다.';
|
||||
print_result($error, $count);
|
||||
}
|
||||
|
||||
$row = sql_fetch(" select count(*) as cnt from {$g5['write_prefix']}{$bo_table} ", FALSE);
|
||||
if (!$row['cnt']) {
|
||||
$error = '존재하는 게시판이 아닙니다.';
|
||||
print_result($error, $count);
|
||||
}
|
||||
|
||||
if ($good == 'good' || $good == 'nogood')
|
||||
{
|
||||
if($write['mb_id'] == $member['mb_id']) {
|
||||
$error = '자신의 글에는 추천 또는 비추천 하실 수 없습니다.';
|
||||
print_result($error, $count);
|
||||
}
|
||||
|
||||
if (!$board['bo_use_good'] && $good == 'good') {
|
||||
$error = '이 게시판은 추천 기능을 사용하지 않습니다.';
|
||||
print_result($error, $count);
|
||||
}
|
||||
|
||||
if (!$board['bo_use_nogood'] && $good == 'nogood') {
|
||||
$error = '이 게시판은 비추천 기능을 사용하지 않습니다.';
|
||||
print_result($error, $count);
|
||||
}
|
||||
|
||||
$sql = " select bg_flag from {$g5['board_good_table']}
|
||||
where bo_table = '{$bo_table}'
|
||||
and wr_id = '{$wr_id}'
|
||||
and mb_id = '{$member['mb_id']}'
|
||||
and bg_flag in ('good', 'nogood') ";
|
||||
$row = sql_fetch($sql);
|
||||
if (isset($row['bg_flag']) && $row['bg_flag'])
|
||||
{
|
||||
if ($row['bg_flag'] == 'good')
|
||||
$status = '추천';
|
||||
else
|
||||
$status = '비추천';
|
||||
|
||||
$error = "이미 $status 하신 글 입니다.";
|
||||
print_result($error, $count);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 추천(찬성), 비추천(반대) 카운트 증가
|
||||
sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} + 1 where wr_id = '{$wr_id}' ");
|
||||
// 내역 생성
|
||||
sql_query(" insert {$g5['board_good_table']} set bo_table = '{$bo_table}', wr_id = '{$wr_id}', mb_id = '{$member['mb_id']}', bg_flag = '{$good}', bg_datetime = '".G5_TIME_YMDHIS."' ");
|
||||
|
||||
$sql = " select wr_{$good} as count from {$g5['write_prefix']}{$bo_table} where wr_id = '$wr_id' ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
$count = $row['count'];
|
||||
|
||||
run_event('bbs_increase_good_json', $bo_table, $wr_id, $good);
|
||||
|
||||
print_result($error, $count);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
if (!$is_member)
|
||||
{
|
||||
$href = G5_BBS_URL.'/login.php?'.$qstr.'&url='.urlencode(get_pretty_url($bo_table, $wr_id));
|
||||
|
||||
alert('회원만 가능합니다.', $href);
|
||||
}
|
||||
|
||||
if (!($bo_table && $wr_id))
|
||||
alert('값이 제대로 넘어오지 않았습니다.');
|
||||
|
||||
$ss_name = 'ss_view_'.$bo_table.'_'.$wr_id;
|
||||
if (!get_session($ss_name))
|
||||
alert('해당 게시물에서만 추천 또는 비추천 하실 수 있습니다.');
|
||||
|
||||
$row = sql_fetch(" select count(*) as cnt from {$g5['write_prefix']}{$bo_table} ", FALSE);
|
||||
if (!$row['cnt'])
|
||||
alert('존재하는 게시판이 아닙니다.');
|
||||
|
||||
if ($good == 'good' || $good == 'nogood')
|
||||
{
|
||||
if($write['mb_id'] == $member['mb_id'])
|
||||
alert('자신의 글에는 추천 또는 비추천 하실 수 없습니다.');
|
||||
|
||||
if (!$board['bo_use_good'] && $good == 'good')
|
||||
alert('이 게시판은 추천 기능을 사용하지 않습니다.');
|
||||
|
||||
if (!$board['bo_use_nogood'] && $good == 'nogood')
|
||||
alert('이 게시판은 비추천 기능을 사용하지 않습니다.');
|
||||
|
||||
$sql = " select bg_flag from {$g5['board_good_table']}
|
||||
where bo_table = '{$bo_table}'
|
||||
and wr_id = '{$wr_id}'
|
||||
and mb_id = '{$member['mb_id']}'
|
||||
and bg_flag in ('good', 'nogood') ";
|
||||
$row = sql_fetch($sql);
|
||||
if (isset($row['bg_flag']) && $row['bg_flag'])
|
||||
{
|
||||
if ($row['bg_flag'] == 'good')
|
||||
$status = '추천';
|
||||
else
|
||||
$status = '비추천';
|
||||
|
||||
alert("이미 $status 하신 글 입니다.");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 추천(찬성), 비추천(반대) 카운트 증가
|
||||
sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} + 1 where wr_id = '{$wr_id}' ");
|
||||
// 내역 생성
|
||||
sql_query(" insert {$g5['board_good_table']} set bo_table = '{$bo_table}', wr_id = '{$wr_id}', mb_id = '{$member['mb_id']}', bg_flag = '{$good}', bg_datetime = '".G5_TIME_YMDHIS."' ");
|
||||
|
||||
if ($good == 'good')
|
||||
$status = '추천';
|
||||
else
|
||||
$status = '비추천';
|
||||
|
||||
$href = get_pretty_url($bo_table, $wr_id);
|
||||
|
||||
run_event('bbs_increase_good_html', $bo_table, $wr_id, $good, $href);
|
||||
|
||||
alert("이 글을 $status 하셨습니다.", '', false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
run_event('bbs_good_after', $bo_table, $wr_id, $good);
|
||||
|
||||
@include_once($board_skin_path.'/good.tail.skin.php');
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if(defined('G5_THEME_PATH')) {
|
||||
$group_file = G5_THEME_PATH.'/group.php';
|
||||
if(is_file($group_file)) {
|
||||
require_once($group_file);
|
||||
return;
|
||||
}
|
||||
unset($group_file);
|
||||
}
|
||||
|
||||
if (G5_IS_MOBILE) {
|
||||
include_once(G5_MOBILE_PATH.'/group.php');
|
||||
return;
|
||||
}
|
||||
|
||||
if(!$is_admin && $group['gr_device'] == 'mobile')
|
||||
alert($group['gr_subject'].' 그룹은 모바일에서만 접근할 수 있습니다.');
|
||||
|
||||
$g5['title'] = $group['gr_subject'];
|
||||
include_once('./_head.php');
|
||||
include_once(G5_LIB_PATH.'/latest.lib.php');
|
||||
?>
|
||||
|
||||
<div class="latest_wr">
|
||||
|
||||
<!-- 메인화면 최신글 시작 -->
|
||||
<?php
|
||||
// 최신글
|
||||
$sql = " select bo_table, bo_subject
|
||||
from {$g5['board_table']}
|
||||
where gr_id = '{$gr_id}'
|
||||
and bo_list_level <= '{$member['mb_level']}'
|
||||
and bo_device <> 'mobile' ";
|
||||
if(!$is_admin)
|
||||
$sql .= " and bo_use_cert = '' ";
|
||||
$sql .= " order by bo_order ";
|
||||
$result = sql_query($sql);
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
$lt_style = "";
|
||||
if ($i%3 !== 0) $lt_style = "margin-left:2%";
|
||||
else $lt_style = "";
|
||||
?>
|
||||
<div style="float:left;<?php echo $lt_style ?>" class="lt_wr">
|
||||
<?php
|
||||
// 이 함수가 바로 최신글을 추출하는 역할을 합니다.
|
||||
// 사용방법 : latest(스킨, 게시판아이디, 출력라인, 글자수);
|
||||
echo latest('basic', $row['bo_table'], 6, 25);
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<!-- 메인화면 최신글 끝 -->
|
||||
</div>
|
||||
<?php
|
||||
include_once('./_tail.php');
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = '인터페이스';
|
||||
|
||||
include_once($member_skin_path.'/interface.skin.php');
|
||||
?>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$html_title = '링크 > '.conv_subject($write['wr_subject'], 255);
|
||||
|
||||
$no = isset($_REQUEST['no']) ? preg_replace('/[^0-9]/i', '', $_REQUEST['no']) : '';
|
||||
|
||||
if (!($bo_table && $wr_id && $no))
|
||||
alert_close('값이 제대로 넘어오지 않았습니다.');
|
||||
|
||||
// SQL Injection 예방
|
||||
$row = sql_fetch(" select count(*) as cnt from {$g5['write_prefix']}{$bo_table} ", FALSE);
|
||||
if (!$row['cnt'])
|
||||
alert_close('존재하는 게시판이 아닙니다.');
|
||||
|
||||
if (!$write['wr_link'.$no])
|
||||
alert_close('링크가 없습니다.');
|
||||
|
||||
$ss_name = 'ss_link_'.$bo_table.'_'.$wr_id.'_'.$no;
|
||||
if (empty($_SESSION[$ss_name]))
|
||||
{
|
||||
$sql = " update {$g5['write_prefix']}{$bo_table} set wr_link{$no}_hit = wr_link{$no}_hit + 1 where wr_id = '{$wr_id}' ";
|
||||
sql_query($sql);
|
||||
|
||||
set_session($ss_name, true);
|
||||
}
|
||||
|
||||
goto_url(set_http($write['wr_link'.$no]));
|
||||
@@ -0,0 +1,269 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 분류 사용 여부
|
||||
$is_category = false;
|
||||
$category_option = '';
|
||||
if ($board['bo_use_category']) {
|
||||
$is_category = true;
|
||||
$category_href = get_pretty_url($bo_table);
|
||||
|
||||
$category_option .= '<li><a href="'.$category_href.'"';
|
||||
if ($sca=='')
|
||||
$category_option .= ' id="bo_cate_on"';
|
||||
$category_option .= '>전체</a></li>';
|
||||
|
||||
$categories = explode('|', $board['bo_category_list']); // 구분자가 , 로 되어 있음
|
||||
for ($i=0; $i<count($categories); $i++) {
|
||||
$category = trim($categories[$i]);
|
||||
if ($category=='') continue;
|
||||
$category_option .= '<li><a href="'.(get_pretty_url($bo_table,'','sca='.urlencode($category))).'"';
|
||||
$category_msg = '';
|
||||
if ($category==$sca) { // 현재 선택된 카테고리라면
|
||||
$category_option .= ' id="bo_cate_on"';
|
||||
$category_msg = '<span class="sound_only">열린 분류 </span>';
|
||||
}
|
||||
$category_option .= '>'.$category_msg.$category.'</a></li>';
|
||||
}
|
||||
}
|
||||
|
||||
$sop = strtolower($sop);
|
||||
if ($sop != 'and' && $sop != 'or')
|
||||
$sop = 'and';
|
||||
|
||||
// 분류 선택 또는 검색어가 있다면
|
||||
$stx = trim($stx);
|
||||
//검색인지 아닌지 구분하는 변수 초기화
|
||||
$is_search_bbs = false;
|
||||
|
||||
if ($sca || $stx || $stx === '0') { //검색이면
|
||||
$is_search_bbs = true; //검색구분변수 true 지정
|
||||
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
|
||||
|
||||
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
|
||||
$sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
|
||||
$row = sql_fetch($sql);
|
||||
$min_spt = (int)$row['min_wr_num'];
|
||||
|
||||
if (!$spt) $spt = $min_spt;
|
||||
|
||||
$sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";
|
||||
|
||||
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
|
||||
// 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
|
||||
$sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
|
||||
$row = sql_fetch($sql);
|
||||
$total_count = $row['cnt'];
|
||||
/*
|
||||
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} ";
|
||||
$result = sql_query($sql);
|
||||
$total_count = sql_num_rows($result);
|
||||
*/
|
||||
} else {
|
||||
$sql_search = "";
|
||||
|
||||
$total_count = $board['bo_count_write'];
|
||||
}
|
||||
|
||||
if(G5_IS_MOBILE) {
|
||||
$page_rows = $board['bo_mobile_page_rows'];
|
||||
$list_page_rows = $board['bo_mobile_page_rows'];
|
||||
} else {
|
||||
$page_rows = $board['bo_page_rows'];
|
||||
$list_page_rows = $board['bo_page_rows'];
|
||||
}
|
||||
|
||||
if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
|
||||
|
||||
// 년도 2자리
|
||||
$today2 = G5_TIME_YMD;
|
||||
|
||||
$list = array();
|
||||
$i = 0;
|
||||
$notice_count = 0;
|
||||
$notice_array = array();
|
||||
|
||||
// 공지 처리
|
||||
if (!$is_search_bbs) {
|
||||
$arr_notice = explode(',', trim($board['bo_notice']));
|
||||
$from_notice_idx = ($page - 1) * $page_rows;
|
||||
if($from_notice_idx < 0)
|
||||
$from_notice_idx = 0;
|
||||
$board_notice_count = count($arr_notice);
|
||||
|
||||
for ($k=0; $k<$board_notice_count; $k++) {
|
||||
if (trim($arr_notice[$k]) == '') continue;
|
||||
|
||||
$row = sql_fetch(" select * from {$write_table} where wr_id = '{$arr_notice[$k]}' ");
|
||||
|
||||
if (!isset($row['wr_id']) || !$row['wr_id']) continue;
|
||||
|
||||
$notice_array[] = $row['wr_id'];
|
||||
|
||||
if($k < $from_notice_idx) continue;
|
||||
|
||||
$list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']);
|
||||
$list[$i]['is_notice'] = true;
|
||||
$list[$i]['list_content'] = $list[$i]['wr_content'];
|
||||
|
||||
// 비밀글인 경우 리스트에서 내용이 출력되지 않게 글 내용을 지웁니다.
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$list[$i]['wr_content'] = '';
|
||||
}
|
||||
|
||||
$list[$i]['num'] = 0;
|
||||
$i++;
|
||||
$notice_count++;
|
||||
|
||||
if($notice_count >= $list_page_rows)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$total_page = ceil($total_count / $page_rows); // 전체 페이지 계산
|
||||
$from_record = ($page - 1) * $page_rows; // 시작 열을 구함
|
||||
|
||||
// 공지글이 있으면 변수에 반영
|
||||
if(!empty($notice_array)) {
|
||||
$from_record -= count($notice_array);
|
||||
|
||||
if($from_record < 0)
|
||||
$from_record = 0;
|
||||
|
||||
if($notice_count > 0)
|
||||
$page_rows -= $notice_count;
|
||||
|
||||
if($page_rows < 0)
|
||||
$page_rows = $list_page_rows;
|
||||
}
|
||||
|
||||
// 관리자라면 CheckBox 보임
|
||||
$is_checkbox = false;
|
||||
if ($is_member && ($is_admin == 'super' || $group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id']))
|
||||
$is_checkbox = true;
|
||||
|
||||
// 정렬에 사용하는 QUERY_STRING
|
||||
$qstr2 = 'bo_table='.$bo_table.'&sop='.$sop;
|
||||
|
||||
// 0 으로 나눌시 오류를 방지하기 위하여 값이 없으면 1 로 설정
|
||||
$bo_gallery_cols = $board['bo_gallery_cols'] ? $board['bo_gallery_cols'] : 1;
|
||||
$td_width = (int)(100 / $bo_gallery_cols);
|
||||
|
||||
// 정렬
|
||||
// 인덱스 필드가 아니면 정렬에 사용하지 않음
|
||||
//if (!$sst || ($sst && !(strstr($sst, 'wr_id') || strstr($sst, "wr_datetime")))) {
|
||||
if (!$sst) {
|
||||
if ($board['bo_sort_field']) {
|
||||
$sst = $board['bo_sort_field'];
|
||||
} else {
|
||||
$sst = "wr_num, wr_reply";
|
||||
$sod = "";
|
||||
}
|
||||
} else {
|
||||
$board_sort_fields = get_board_sort_fields($board, 1);
|
||||
if (!$sod && array_key_exists($sst, $board_sort_fields)) {
|
||||
$sst = $board_sort_fields[$sst];
|
||||
} else {
|
||||
// 게시물 리스트의 정렬 대상 필드가 아니라면 공백으로 (nasca 님 09.06.16)
|
||||
// 리스트에서 다른 필드로 정렬을 하려면 아래의 코드에 해당 필드를 추가하세요.
|
||||
// $sst = preg_match("/^(wr_subject|wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
|
||||
$sst = preg_match("/^(wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
|
||||
}
|
||||
}
|
||||
|
||||
if(!$sst)
|
||||
$sst = "wr_num, wr_reply";
|
||||
|
||||
if ($sst) {
|
||||
$sql_order = " order by {$sst} {$sod} ";
|
||||
}
|
||||
|
||||
if ($is_search_bbs) {
|
||||
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
|
||||
} else {
|
||||
$sql = " select * from {$write_table} where wr_is_comment = 0 ";
|
||||
if(!empty($notice_array))
|
||||
$sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
|
||||
$sql .= " {$sql_order} limit {$from_record}, $page_rows ";
|
||||
}
|
||||
|
||||
// 페이지의 공지개수가 목록수 보다 작을 때만 실행
|
||||
if($page_rows > 0) {
|
||||
$result = sql_query($sql);
|
||||
|
||||
$k = 0;
|
||||
|
||||
while ($row = sql_fetch_array($result))
|
||||
{
|
||||
// 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다
|
||||
if ($is_search_bbs)
|
||||
$row = sql_fetch(" select * from {$write_table} where wr_id = '{$row['wr_parent']}' ");
|
||||
|
||||
$list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']);
|
||||
if (strstr($sfl, 'subject')) {
|
||||
$list[$i]['subject'] = search_font($stx, $list[$i]['subject']);
|
||||
}
|
||||
$list[$i]['is_notice'] = false;
|
||||
$list[$i]['list_content'] = $list[$i]['wr_content'];
|
||||
|
||||
// 비밀글인 경우 리스트에서 내용이 출력되지 않게 글 내용을 지웁니다.
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$list[$i]['wr_content'] = '';
|
||||
}
|
||||
|
||||
$list_num = $total_count - ($page - 1) * $list_page_rows - $notice_count;
|
||||
$list[$i]['num'] = $list_num - $k;
|
||||
|
||||
$i++;
|
||||
$k++;
|
||||
}
|
||||
}
|
||||
|
||||
g5_latest_cache_data($board['bo_table'], $list);
|
||||
|
||||
$write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, get_pretty_url($bo_table, '', $qstr.'&page='));
|
||||
|
||||
$list_href = '';
|
||||
$prev_part_href = '';
|
||||
$next_part_href = '';
|
||||
if ($is_search_bbs) {
|
||||
$list_href = get_pretty_url($bo_table);
|
||||
|
||||
$patterns = array('#&page=[0-9]*#', '#&spt=[0-9\-]*#');
|
||||
|
||||
//if ($prev_spt >= $min_spt)
|
||||
$prev_spt = $spt - $config['cf_search_part'];
|
||||
if (isset($min_spt) && $prev_spt >= $min_spt) {
|
||||
$qstr1 = preg_replace($patterns, '', $qstr);
|
||||
$prev_part_href = get_pretty_url($bo_table,0,$qstr1.'&spt='.$prev_spt.'&page=1');
|
||||
$write_pages = page_insertbefore($write_pages, '<a href="'.$prev_part_href.'" class="pg_page pg_search pg_prev">이전검색</a>');
|
||||
}
|
||||
|
||||
$next_spt = $spt + $config['cf_search_part'];
|
||||
if ($next_spt < 0) {
|
||||
$qstr1 = preg_replace($patterns, '', $qstr);
|
||||
$next_part_href = get_pretty_url($bo_table,0,$qstr1.'&spt='.$next_spt.'&page=1');
|
||||
$write_pages = page_insertafter($write_pages, '<a href="'.$next_part_href.'" class="pg_page pg_search pg_next">다음검색</a>');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$write_href = '';
|
||||
if ($member['mb_level'] >= $board['bo_write_level']) {
|
||||
$write_href = short_url_clean(G5_BBS_URL.'/write.php?bo_table='.$bo_table);
|
||||
}
|
||||
|
||||
$nobr_begin = $nobr_end = "";
|
||||
if (preg_match("/gecko|firefox/i", $_SERVER['HTTP_USER_AGENT'])) {
|
||||
$nobr_begin = '<nobr>';
|
||||
$nobr_end = '</nobr>';
|
||||
}
|
||||
|
||||
// RSS 보기 사용에 체크가 되어 있어야 RSS 보기 가능 061106
|
||||
$rss_href = '';
|
||||
if ($board['bo_use_rss_view']) {
|
||||
$rss_href = G5_BBS_URL.'/rss.php?bo_table='.$bo_table;
|
||||
}
|
||||
|
||||
$stx = get_text(stripslashes($stx));
|
||||
include_once($board_skin_path.'/list.skin.php');
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once('../main.php');
|
||||
|
||||
// if( function_exists('social_check_login_before') ){
|
||||
// $social_login_html = social_check_login_before();
|
||||
// }
|
||||
|
||||
$g5['title'] = '로그인';
|
||||
//include_once('./_head.sub.php');
|
||||
|
||||
$od_id = isset($_POST['od_id']) ? safe_replace_regex($_POST['od_id'], 'od_id') : '';
|
||||
|
||||
// url 체크
|
||||
check_url_host($url);
|
||||
|
||||
// 이미 로그인 중이라면
|
||||
if ($is_member) {
|
||||
if ($url)
|
||||
goto_url($url);
|
||||
else
|
||||
goto_url(G5_URL);
|
||||
}
|
||||
|
||||
$login_url = login_url($url);
|
||||
$login_action_url = G5_HTTPS_BBS_URL."/login_check.php";
|
||||
|
||||
// 로그인 스킨이 없는 경우 관리자 페이지 접속이 안되는 것을 막기 위하여 기본 스킨으로 대체
|
||||
$login_file = $member_skin_path.'/login.skin.php';
|
||||
if (!file_exists($login_file))
|
||||
$member_skin_path = G5_SKIN_PATH.'/member/basic';
|
||||
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/main.skin.php');
|
||||
|
||||
|
||||
run_event('member_login_tail', $login_url, $login_action_url, $member_skin_path, $url);
|
||||
|
||||
//include_once('./_tail.sub.php');
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
// include_once('./_common.php');
|
||||
// include_once('../main.php');
|
||||
|
||||
// // if( function_exists('social_check_login_before') ){
|
||||
// // $social_login_html = social_check_login_before();
|
||||
// // }
|
||||
|
||||
// $g5['title'] = '로그인';
|
||||
// //include_once('./_head.sub.php');
|
||||
|
||||
// $od_id = isset($_POST['od_id']) ? safe_replace_regex($_POST['od_id'], 'od_id') : '';
|
||||
|
||||
// // url 체크
|
||||
// check_url_host($url);
|
||||
|
||||
// // 이미 로그인 중이라면
|
||||
// if ($is_member) {
|
||||
// if ($url)
|
||||
// goto_url($url);
|
||||
// else
|
||||
// goto_url(G5_URL);
|
||||
// }
|
||||
|
||||
// $login_url = login_url($url);
|
||||
// $login_action_url = G5_HTTPS_BBS_URL."/login_check.php";
|
||||
|
||||
// // 로그인 스킨이 없는 경우 관리자 페이지 접속이 안되는 것을 막기 위하여 기본 스킨으로 대체
|
||||
// $login_file = $member_skin_path.'/login.skin.php';
|
||||
// if (!file_exists($login_file))
|
||||
// $member_skin_path = G5_SKIN_PATH.'/member/basic';
|
||||
|
||||
// // include_once($member_skin_path.'/login.skin.php');
|
||||
// // include_once($member_skin_path.'/main.skin.php');
|
||||
|
||||
|
||||
// run_event('member_login_tail', $login_url, $login_action_url, $member_skin_path, $url);
|
||||
|
||||
// //include_once('./_tail.sub.php');
|
||||
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = "로그인 검사";
|
||||
|
||||
$mb_id = isset($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
|
||||
$mb_password = isset($_POST['mb_password']) ? trim($_POST['mb_password']) : '';
|
||||
|
||||
run_event('member_login_check_before', $mb_id);
|
||||
|
||||
if (!$mb_id || run_replace('check_empty_member_login_password', !$mb_password, $mb_id))
|
||||
alert('회원아이디나 비밀번호가 공백이면 안됩니다.');
|
||||
|
||||
$mb = get_member($mb_id);
|
||||
|
||||
//소셜 로그인추가 체크
|
||||
|
||||
$is_social_login = false;
|
||||
$is_social_password_check = false;
|
||||
|
||||
// 소셜 로그인이 맞는지 체크하고 해당 값이 맞는지 체크합니다.
|
||||
if(function_exists('social_is_login_check')){
|
||||
$is_social_login = social_is_login_check();
|
||||
|
||||
//패스워드를 체크할건지 결정합니다.
|
||||
//소셜로그인일때는 체크하지 않고, 계정을 연결할때는 체크합니다.
|
||||
$is_social_password_check = social_is_login_password_check($mb_id);
|
||||
}
|
||||
|
||||
$is_need_not_password = run_replace('login_check_need_not_password', $is_social_password_check, $mb_id, $mb_password, $mb, $is_social_login);
|
||||
|
||||
// $is_need_not_password 변수가 true 이면 패스워드를 체크하지 않습니다.
|
||||
// 가입된 회원이 아니다. 비밀번호가 틀리다. 라는 메세지를 따로 보여주지 않는 이유는
|
||||
// 회원아이디를 입력해 보고 맞으면 또 비밀번호를 입력해보는 경우를 방지하기 위해서입니다.
|
||||
// 불법사용자의 경우 회원아이디가 틀린지, 비밀번호가 틀린지를 알기까지는 많은 시간이 소요되기 때문입니다.
|
||||
if (!$is_need_not_password && (! (isset($mb['mb_id']) && $mb['mb_id']) || !login_password_check($mb, $mb_password, $mb['mb_password'])) ) {
|
||||
|
||||
run_event('password_is_wrong', 'login', $mb);
|
||||
|
||||
alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
|
||||
}
|
||||
|
||||
// 차단된 아이디인가?
|
||||
if ($mb['mb_intercept_date'] && $mb['mb_intercept_date'] <= date("Ymd", G5_SERVER_TIME)) {
|
||||
$date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_intercept_date']);
|
||||
alert('회원님의 아이디는 접근이 금지되어 있습니다.\n처리일 : '.$date);
|
||||
}
|
||||
|
||||
// 탈퇴한 아이디인가?
|
||||
if ($mb['mb_leave_date'] && $mb['mb_leave_date'] <= date("Ymd", G5_SERVER_TIME)) {
|
||||
$date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_leave_date']);
|
||||
alert('탈퇴한 아이디이므로 접근하실 수 없습니다.\n탈퇴일 : '.$date);
|
||||
}
|
||||
|
||||
// 메일인증 설정이 되어 있다면
|
||||
if ( is_use_email_certify() && !preg_match("/[1-9]/", $mb['mb_email_certify'])) {
|
||||
$ckey = md5($mb['mb_ip'].$mb['mb_datetime']);
|
||||
confirm("{$mb['mb_email']} 메일로 메일인증을 받으셔야 로그인 가능합니다. 다른 메일주소로 변경하여 인증하시려면 취소를 클릭하시기 바랍니다.", G5_URL, G5_BBS_URL.'/register_email.php?mb_id='.$mb_id.'&ckey='.$ckey);
|
||||
}
|
||||
|
||||
run_event('login_session_before', $mb, $is_social_login);
|
||||
|
||||
@include_once($member_skin_path.'/login_check.skin.php');
|
||||
|
||||
if (! (defined('SKIP_SESSION_REGENERATE_ID') && SKIP_SESSION_REGENERATE_ID)) {
|
||||
session_regenerate_id(false);
|
||||
if (function_exists('session_start_samesite')) {
|
||||
session_start_samesite();
|
||||
}
|
||||
}
|
||||
|
||||
// 회원아이디 세션 생성
|
||||
set_session('ss_mb_id', $mb['mb_id']);
|
||||
// FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함
|
||||
generate_mb_key($mb);
|
||||
|
||||
// 회원의 토큰키를 세션에 저장한다. /common.php 에서 해당 회원의 토큰값을 검사한다.
|
||||
if(function_exists('update_auth_session_token')) update_auth_session_token($mb['mb_datetime']);
|
||||
|
||||
// 포인트 체크
|
||||
if($config['cf_use_point']) {
|
||||
$sum_point = get_point_sum($mb['mb_id']);
|
||||
|
||||
$sql= " update {$g5['member_table']} set mb_point = '$sum_point' where mb_id = '{$mb['mb_id']}' ";
|
||||
sql_query($sql);
|
||||
}
|
||||
|
||||
// 3.26
|
||||
// 아이디 쿠키에 한달간 저장
|
||||
if (isset($auto_login) && $auto_login) {
|
||||
// 3.27
|
||||
// 자동로그인 ---------------------------
|
||||
// 쿠키 한달간 저장
|
||||
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['SERVER_SOFTWARE'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']);
|
||||
set_cookie('ck_mb_id', $mb['mb_id'], 86400 * 31);
|
||||
set_cookie('ck_auto', $key, 86400 * 31);
|
||||
// 자동로그인 end ---------------------------
|
||||
} else {
|
||||
set_cookie('ck_mb_id', '', 0);
|
||||
set_cookie('ck_auto', '', 0);
|
||||
}
|
||||
|
||||
if ($url) {
|
||||
// url 체크
|
||||
check_url_host($url, '', G5_URL, true);
|
||||
|
||||
$link = urldecode($url);
|
||||
// 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)
|
||||
if (preg_match("/\?/", $link))
|
||||
$split= "&";
|
||||
else
|
||||
$split= "?";
|
||||
|
||||
// $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
|
||||
$post_check_keys = array('mb_id', 'mb_password', 'x', 'y', 'url');
|
||||
|
||||
//소셜 로그인 추가
|
||||
if($is_social_login){
|
||||
$post_check_keys[] = 'provider';
|
||||
}
|
||||
|
||||
$post_check_keys = run_replace('login_check_post_check_keys', $post_check_keys, $link, $is_social_login);
|
||||
|
||||
foreach($_POST as $key=>$value) {
|
||||
if ($key && !in_array($key, $post_check_keys)) {
|
||||
$link .= "$split$key=$value";
|
||||
$split = "&";
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
$link = G5_URL;
|
||||
}
|
||||
|
||||
//소셜 로그인 추가
|
||||
if(function_exists('social_login_success_after')){
|
||||
// 로그인 성공시 소셜 데이터를 기존의 데이터와 비교하여 바뀐 부분이 있으면 업데이트 합니다.
|
||||
$link = social_login_success_after($mb, $link);
|
||||
social_login_session_clear(1);
|
||||
}
|
||||
|
||||
//영카트 회원 장바구니 처리
|
||||
if(function_exists('set_cart_id')){
|
||||
$member = $mb;
|
||||
|
||||
// 보관기간이 지난 상품 삭제
|
||||
cart_item_clean();
|
||||
set_cart_id('');
|
||||
$s_cart_id = get_session('ss_cart_id');
|
||||
|
||||
$add_cart_where = '';
|
||||
|
||||
// 장바구니에서 주문하기를 하는 경우
|
||||
if (strpos($link, 'orderform.php') !== false) {
|
||||
$add_cart_where = " and ct_select_time < '".date('Y-m-d H:i:s', strtotime('-1 hour', G5_SERVER_TIME))."' ";
|
||||
}
|
||||
|
||||
// 선택필드 초기화
|
||||
$sql = " update {$g5['g5_shop_cart_table']} set ct_select = '0' where od_id = '$s_cart_id' $add_cart_where ";
|
||||
sql_query($sql);
|
||||
}
|
||||
|
||||
run_event('member_login_check', $mb, $link, $is_social_login);
|
||||
|
||||
// 관리자로 로그인시 DATA 폴더의 쓰기 권한이 있는지 체크합니다. 쓰기 권한이 없으면 로그인을 못합니다.
|
||||
if( is_admin($mb['mb_id']) && is_dir(G5_DATA_PATH.'/tmp/') ){
|
||||
$tmp_data_file = G5_DATA_PATH.'/tmp/tmp-write-test-'.time();
|
||||
$tmp_data_check = @fopen($tmp_data_file, 'w');
|
||||
if($tmp_data_check){
|
||||
if(! @fwrite($tmp_data_check, G5_URL)){
|
||||
$tmp_data_check = false;
|
||||
}
|
||||
}
|
||||
if (is_resource($tmp_data_check)) @fclose($tmp_data_check);
|
||||
@unlink($tmp_data_file);
|
||||
|
||||
if(! $tmp_data_check){
|
||||
alert("data 폴더에 쓰기권한이 없거나 또는 웹하드 용량이 없는 경우\\n로그인을 못할수도 있으니, 용량 체크 및 쓰기 권한을 확인해 주세요.", $link);
|
||||
}
|
||||
}
|
||||
|
||||
goto_url($link);
|
||||
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
$result= '';
|
||||
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = "로그인 검사";
|
||||
|
||||
$mb_id = isset($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
|
||||
$mb_password = isset($_POST['mb_password']) ? trim($_POST['mb_password']) : '';
|
||||
$data["mb_id"] = $_POST['mb_id'];
|
||||
$data["mb_password"] = $_POST['mb_password'];
|
||||
|
||||
//run_event('member_login_check_before', $mb_id);
|
||||
|
||||
if (!$mb_id || run_replace('check_empty_member_login_password', !$mb_password, $mb_id)){
|
||||
$data["message"]="회원아이디나 비밀번호가 공백이면 안됩니다.";
|
||||
}else{
|
||||
$mb = get_member($mb_id);
|
||||
|
||||
// 가입된 회원이 아니다. 비밀번호가 틀리다. 라는 메세지를 따로 보여주지 않는 이유는
|
||||
// 회원아이디를 입력해 보고 맞으면 또 비밀번호를 입력해보는 경우를 방지하기 위해서입니다.
|
||||
// 불법사용자의 경우 회원아이디가 틀린지, 비밀번호가 틀린지를 알기까지는 많은 시간이 소요되기 때문입니다.
|
||||
if (! (isset($mb['mb_id']) && $mb['mb_id']) || !login_password_check($mb, $mb_password, $mb['mb_password'])) {
|
||||
|
||||
//run_event('password_is_wrong', 'login', $mb);
|
||||
|
||||
$result= '가입된 회원아이디가 아니거나 비밀번호가 틀립니다. 비밀번호는 대소문자를 구분합니다.';
|
||||
}else{
|
||||
|
||||
// 회원아이디 세션 생성
|
||||
set_session('ss_mb_id', $mb_id);
|
||||
$_SESSION['session_id'] = $mb_id;
|
||||
|
||||
//setcookie("tova_id", $mb_id, time()+ 86400*7,'/'); //번호
|
||||
$is_admin = is_admin($mb_id);
|
||||
if ($is_admin == "super"){
|
||||
$_SESSION['is_admin'] = "super";
|
||||
$result= $is_admin; //$_SESSION['ss_mb_id'];
|
||||
} else {
|
||||
$result= "success"; //$_SESSION['ss_mb_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
// 차단된 아이디인가?
|
||||
if ($mb['mb_intercept_date'] && $mb['mb_intercept_date'] <= date("Ymd", G5_SERVER_TIME)) {
|
||||
$date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_intercept_date']);
|
||||
$data["message"]= '회원님의 아이디는 접근이 금지되어 있습니다.\n처리일 : '.$date;
|
||||
}
|
||||
|
||||
// 탈퇴한 아이디인가?
|
||||
if ($mb['mb_leave_date'] && $mb['mb_leave_date'] <= date("Ymd", G5_SERVER_TIME)) {
|
||||
$date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_leave_date']);
|
||||
$data["message"]= '탈퇴한 아이디이므로 접근하실 수 없습니다.\n탈퇴일 : '.$date;
|
||||
}
|
||||
|
||||
run_event('login_session_before', $mb, $is_social_login);
|
||||
|
||||
if (! (defined('SKIP_SESSION_REGENERATE_ID') && SKIP_SESSION_REGENERATE_ID)) {
|
||||
session_regenerate_id(false);
|
||||
if (function_exists('session_start_samesite')) {
|
||||
session_start_samesite();
|
||||
}
|
||||
}
|
||||
|
||||
// FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함
|
||||
generate_mb_key($mb);
|
||||
|
||||
// 회원의 토큰키를 세션에 저장한다. /common.php 에서 해당 회원의 토큰값을 검사한다.
|
||||
if(function_exists('update_auth_session_token')) update_auth_session_token($mb['mb_datetime']);
|
||||
|
||||
// 3.26
|
||||
// 아이디 쿠키에 한달간 저장
|
||||
if (isset($auto_login) && $auto_login) {
|
||||
// 3.27
|
||||
// 자동로그인 ---------------------------
|
||||
// 쿠키 한달간 저장
|
||||
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['SERVER_SOFTWARE'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']);
|
||||
set_cookie('ck_mb_id', $mb['mb_id'], 86400 * 31);
|
||||
set_cookie('ck_auto', $key, 86400 * 31);
|
||||
// 자동로그인 end ---------------------------
|
||||
} else {
|
||||
set_cookie('ck_mb_id', '', 0);
|
||||
set_cookie('ck_auto', '', 0);
|
||||
}
|
||||
|
||||
if ($url) {
|
||||
// url 체크
|
||||
check_url_host($url, '', G5_URL, true);
|
||||
|
||||
$link = urldecode($url);
|
||||
// 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)
|
||||
if (preg_match("/\?/", $link))
|
||||
$split= "&";
|
||||
else
|
||||
$split= "?";
|
||||
|
||||
// $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
|
||||
$post_check_keys = array('mb_id', 'mb_password', 'x', 'y', 'url');
|
||||
|
||||
$post_check_keys = run_replace('login_check_post_check_keys', $post_check_keys, $link, $is_social_login);
|
||||
|
||||
foreach($_POST as $key=>$value) {
|
||||
if ($key && !in_array($key, $post_check_keys)) {
|
||||
$link .= "$split$key=$value";
|
||||
$split = "&";
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
$link = G5_URL;
|
||||
}
|
||||
|
||||
run_event('member_login_check', $mb, $link, $is_social_login);
|
||||
|
||||
// 관리자로 로그인시 DATA 폴더의 쓰기 권한이 있는지 체크합니다. 쓰기 권한이 없으면 로그인을 못합니다.
|
||||
if( is_admin($mb['mb_id']) && is_dir(G5_DATA_PATH.'/tmp/') ){
|
||||
$tmp_data_file = G5_DATA_PATH.'/tmp/tmp-write-test-'.time();
|
||||
$tmp_data_check = @fopen($tmp_data_file, 'w');
|
||||
if($tmp_data_check){
|
||||
if(! @fwrite($tmp_data_check, G5_URL)){
|
||||
$tmp_data_check = false;
|
||||
}
|
||||
}
|
||||
if (is_resource($tmp_data_check)) @fclose($tmp_data_check);
|
||||
@unlink($tmp_data_file);
|
||||
|
||||
if(! $tmp_data_check){
|
||||
alert("data 폴더에 쓰기권한이 없거나 또는 웹하드 용량이 없는 경우\\n로그인을 못할수도 있으니, 용량 체크 및 쓰기 권한을 확인해 주세요.", $link);
|
||||
}
|
||||
}
|
||||
*/
|
||||
echo json_encode($result,JSON_UNESCAPED_UNICODE);
|
||||
// goto_url($link);
|
||||
?>
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
define('G5_CERT_IN_PROG', true);
|
||||
include_once('./_common.php');
|
||||
|
||||
if(function_exists('social_provider_logout')){
|
||||
social_provider_logout();
|
||||
}
|
||||
|
||||
// 이호경님 제안 코드
|
||||
session_unset(); // 모든 세션변수를 언레지스터 시켜줌
|
||||
session_destroy(); // 세션해제함
|
||||
|
||||
// 자동로그인 해제 --------------------------------
|
||||
set_cookie('tmp_1=john', '', time() - 86400*7);
|
||||
set_cookie('tova_id', '', time() - 86400*7);
|
||||
set_cookie('ck_mb_id', '', time() - 3600);
|
||||
set_cookie('ck_auto', '', time() - 3600);
|
||||
// 자동로그인 해제 end --------------------------------
|
||||
|
||||
if ($url) {
|
||||
if ( substr($url, 0, 2) == '//' )
|
||||
$url = 'http:' . $url;
|
||||
|
||||
if (preg_match('#\\\0#', $url) || preg_match('/^\/{1,}\\\/', $url)) {
|
||||
alert('url 에 올바르지 않은 값이 포함되어 있습니다.', G5_URL);
|
||||
}
|
||||
|
||||
$p = @parse_url(urldecode(str_replace('\\', '', $url)));
|
||||
/*
|
||||
// OpenRediect 취약점관련, PHP 5.3 이하버전에서는 parse_url 버그가 있음 ( Safflower 님 제보 ) 아래 url 예제
|
||||
// http://localhost/bbs/logout.php?url=http://sir.kr%23@/
|
||||
*/
|
||||
if (preg_match('/^https?:\/\//i', $url) || $p['scheme'] || $p['host']) {
|
||||
alert('url에 도메인을 지정할 수 없습니다.', G5_URL);
|
||||
}
|
||||
|
||||
if($url == 'shop')
|
||||
$link = G5_SHOP_URL;
|
||||
else
|
||||
$link = $url;
|
||||
} else if ($bo_table) {
|
||||
$link = get_pretty_url($bo_table);
|
||||
} else {
|
||||
$link = G5_URL;
|
||||
}
|
||||
|
||||
run_event('member_logout', $link);
|
||||
|
||||
goto_url($link);
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
$result= '';
|
||||
$mb_id= '';
|
||||
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = "아이디찾기";
|
||||
|
||||
// JSON 데이터를 받기 위한 처리
|
||||
$input = file_get_contents('php://input');
|
||||
$data = json_decode($input, true);
|
||||
|
||||
// 입력된 값이 없을 경우 기본 값 설정
|
||||
$l_mb_id = isset($data['mb_id']) ? trim($data['mb_id']) : '';
|
||||
$mb_name = isset($data['mb_name']) ? trim($data['mb_name']) : '';
|
||||
$mb_hp = isset($data['mb_hp']) ? trim($data['mb_hp']) : '';
|
||||
$mb_email = isset($data['mb_email']) ? trim($data['mb_email']) : '';
|
||||
|
||||
$sql = " SELECT mb_id, mb_name, mb_hp, mb_email, mb_comp, mb_comp_team FROM g5_member ";
|
||||
|
||||
if(!($l_mb_id == '')){
|
||||
$mb_id = $l_mb_id;
|
||||
$sql .= " where mb_id = '".$mb_id."' ";
|
||||
}else{
|
||||
$sql .= " where mb_name = '".$mb_name."' ";
|
||||
}
|
||||
|
||||
if(!($mb_hp == '')){
|
||||
$sql .= " and mb_hp = '".$mb_hp."' ";
|
||||
}else{
|
||||
$sql .= " and mb_email = '".$mb_email."' ";
|
||||
}
|
||||
|
||||
$result = sql_query($sql);
|
||||
|
||||
while ($row = sql_fetch_array($result))
|
||||
{
|
||||
$mb_id = $row['mb_id'];
|
||||
$mb_password = $row['mb_hp'];
|
||||
|
||||
if(!($l_mb_id == '')){
|
||||
$sql2 = "update g5_member set mb_password = '".get_encrypt_string($mb_password)."' where mb_id = '".$mb_id."'";
|
||||
sql_query($sql2);
|
||||
//$re_value=$sql2."<br>";
|
||||
$re_value="complete";
|
||||
}else{
|
||||
$re_value=$mb_id;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
echo json_encode($re_value, JSON_UNESCAPED_UNICODE);
|
||||
|
||||
/*
|
||||
$re_value = $sql;
|
||||
echo $re_value;
|
||||
*/
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
define('G5_CERT_IN_PROG', true);
|
||||
include_once('./_common.php');
|
||||
|
||||
if(!$is_member) { alert("잘못된 접근입니다.", G5_URL); }
|
||||
|
||||
if (!empty($member['mb_certify']) && strlen($member['mb_dupinfo']) != 64) { // 본인인증 안된 계정이거나 ci로 인증된 계정일 경우
|
||||
alert("잘못된 접근입니다.", G5_URL);
|
||||
}
|
||||
|
||||
if($config['cf_cert_use'] == 0) alert("본인인증을 이용 할 수 없습니다. 관리자에게 문의 하십시오.", G5_URL);
|
||||
|
||||
$g5['title'] = '본인인증을 다시 해주세요.';
|
||||
include_once(G5_PATH.'/_head.php');
|
||||
|
||||
$action_url = G5_HTTPS_BBS_URL."/member_cert_refresh_update.php";
|
||||
include_once($member_skin_path.'/member_cert_refresh.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/_tail.php');
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
define('G5_CERT_IN_PROG', true);
|
||||
include_once('./_common.php');
|
||||
global $g5;
|
||||
|
||||
if (!($w == '' || $w == 'u')) {
|
||||
alert('w 값이 제대로 넘어오지 않았습니다.');
|
||||
}
|
||||
$url = urldecode($url);
|
||||
|
||||
if($w == '') {
|
||||
$mb_id = isset($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
|
||||
$mb_name = isset($_POST['mb_name']) ? trim($_POST['mb_name']) : '';
|
||||
$mb_hp = isset($_POST['mb_hp']) ? trim($_POST['mb_hp']) : '';
|
||||
} else
|
||||
alert('잘못된 접근입니다', G5_URL);
|
||||
|
||||
if(!$mb_id)
|
||||
alert('회원아이디 값이 없습니다. 올바른 방법으로 이용해 주십시오.');
|
||||
|
||||
//===============================================================
|
||||
// 본인확인
|
||||
//---------------------------------------------------------------
|
||||
$mb_hp = hyphen_hp_number($mb_hp);
|
||||
if($config['cf_cert_use'] && get_session('ss_cert_type') && get_session('ss_cert_dupinfo')) {
|
||||
// 중복체크
|
||||
$sql = " select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '".get_session('ss_cert_dupinfo')."' ";
|
||||
$row = sql_fetch($sql);
|
||||
if (!empty($row['mb_id'])) {
|
||||
alert("입력하신 본인확인 정보로 가입된 내역이 존재합니다.");
|
||||
}
|
||||
}
|
||||
|
||||
$sql = '';
|
||||
$sql_certify = '';
|
||||
$md5_cert_no = get_session('ss_cert_no');
|
||||
$cert_type = get_session('ss_cert_type');
|
||||
if ($config['cf_cert_use'] && $cert_type && $md5_cert_no) {
|
||||
// 해시값이 같은 경우에만 본인확인 값을 저장한다.
|
||||
if ($cert_type == 'ipin' && get_session('ss_cert_hash') == md5($mb_name.$cert_type.get_session('ss_cert_birth').$md5_cert_no)) { // 아이핀일때 hash 값 체크 hp미포함
|
||||
$sql_certify .= " mb_hp = '{$mb_hp}' ";
|
||||
$sql_certify .= " , mb_certify = '{$cert_type}' ";
|
||||
$sql_certify .= " , mb_adult = '".get_session('ss_cert_adult')."' ";
|
||||
$sql_certify .= " , mb_birth = '".get_session('ss_cert_birth')."' ";
|
||||
$sql_certify .= " , mb_sex = '".get_session('ss_cert_sex')."' ";
|
||||
$sql_certify .= " , mb_dupinfo = '".get_session('ss_cert_dupinfo')."' ";
|
||||
$sql_certify .= " , mb_name = '{$mb_name}' ";
|
||||
} else if($cert_type != 'ipin' && get_session('ss_cert_hash') == md5($mb_name.$cert_type.get_session('ss_cert_birth').$mb_hp.$md5_cert_no)) { // 간편인증, 휴대폰일때 hash 값 체크 hp포함
|
||||
$sql_certify .= " mb_hp = '{$mb_hp}' ";
|
||||
$sql_certify .= " , mb_certify = '{$cert_type}' ";
|
||||
$sql_certify .= " , mb_adult = '".get_session('ss_cert_adult')."' ";
|
||||
$sql_certify .= " , mb_birth = '".get_session('ss_cert_birth')."' ";
|
||||
$sql_certify .= " , mb_sex = '".get_session('ss_cert_sex')."' ";
|
||||
$sql_certify .= " , mb_dupinfo = '".get_session('ss_cert_dupinfo')."' ";
|
||||
$sql_certify .= " , mb_name = '{$mb_name}' ";
|
||||
}else {
|
||||
alert('본인인증된 정보와 입력된 회원정보가 일치하지않습니다. 다시시도 해주세요');
|
||||
}
|
||||
} else {
|
||||
if (get_session("ss_reg_mb_name") != $mb_name || get_session("ss_reg_mb_hp") != $mb_hp) {
|
||||
$sql_certify .= " mb_hp = '{$mb_hp}' ";
|
||||
$sql_certify .= " , mb_certify = '' ";
|
||||
$sql_certify .= " , mb_adult = 0 ";
|
||||
$sql_certify .= " , mb_birth = '' ";
|
||||
$sql_certify .= " , mb_sex = '' ";
|
||||
}
|
||||
}
|
||||
|
||||
$sql = "update {$g5['member_table']} set {$sql_certify} where mb_id = '{$mb_id}'";
|
||||
$result = sql_query($sql, false);
|
||||
|
||||
if($result){
|
||||
if($cert_type == 'ipin' && get_session('ss_cert_hash') == md5($mb_name.$cert_type.get_session('ss_cert_birth').$md5_cert_no)) { // 아이핀일때 hash 값 체크 hp미포함)
|
||||
insert_member_cert_history($mb_id, $mb_name, $mb_hp, get_session('ss_cert_birth'), get_session('ss_cert_type') ); // 본인인증 후 정보 수정 시 내역 기록
|
||||
}else if($cert_type != 'ipin' && get_session('ss_cert_hash') == md5($mb_name.$cert_type.get_session('ss_cert_birth').$mb_hp.$md5_cert_no)) { // 간편인증, 휴대폰일때 hash 값 체크 hp포함
|
||||
insert_member_cert_history($mb_id, $mb_name, $mb_hp, get_session('ss_cert_birth'), get_session('ss_cert_type') ); // 본인인증 후 정보 수정 시 내역 기록
|
||||
}
|
||||
}
|
||||
|
||||
run_event('cert_refresh_update_after', $mb_id);
|
||||
|
||||
//===============================================================
|
||||
|
||||
(empty($url))? goto_url(G5_URL) : goto_url($url);
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if ($is_guest)
|
||||
alert('로그인 한 회원만 접근하실 수 있습니다.', G5_BBS_URL.'/login.php');
|
||||
|
||||
while (1) {
|
||||
$tmp = preg_replace('/&#[^;]+;/', '', $url);
|
||||
if ($tmp == $url) break;
|
||||
$url = $tmp;
|
||||
}
|
||||
|
||||
//소셜 로그인 한 경우
|
||||
if( function_exists('social_member_comfirm_redirect') && (! $url || $url === 'register_form.php' || (function_exists('social_is_edit_page') && social_is_edit_page($url) ) ) ){
|
||||
social_member_comfirm_redirect();
|
||||
}
|
||||
|
||||
$url = run_replace('member_confirm_next_url', $url);
|
||||
|
||||
$g5['title'] = '회원 비밀번호 확인';
|
||||
// include_once('./_head.sub.php');
|
||||
|
||||
// url 체크
|
||||
check_url_host($url, '', G5_URL, true);
|
||||
|
||||
if($url){
|
||||
$url = preg_replace('#^/\\\{1,}#', '/', $url);
|
||||
|
||||
if( preg_match('#^/{3,}#', $url) ){
|
||||
$url = preg_replace('#^/{3,}#', '/', $url);
|
||||
}
|
||||
|
||||
if (function_exists('safe_filter_url_host')) {
|
||||
$url = safe_filter_url_host($url);
|
||||
}
|
||||
}
|
||||
|
||||
$url = get_text($url);
|
||||
|
||||
include_once($member_skin_path.'/member_confirm.skin.php');
|
||||
|
||||
// include_once('./_tail.sub.php');
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if ($is_guest)
|
||||
alert('로그인 한 회원만 접근하실 수 있습니다.', G5_BBS_URL.'/login.php');
|
||||
|
||||
while (1) {
|
||||
$tmp = preg_replace('/&#[^;]+;/', '', $url);
|
||||
if ($tmp == $url) break;
|
||||
$url = $tmp;
|
||||
}
|
||||
|
||||
//소셜 로그인 한 경우
|
||||
// if( function_exists('social_member_comfirm_redirect') && (! $url || $url === 'register_form.php' || (function_exists('social_is_edit_page') && social_is_edit_page($url) ) ) ){
|
||||
// social_member_comfirm_redirect();
|
||||
// }
|
||||
|
||||
$url = run_replace('member_confirm_next_url', $url);
|
||||
|
||||
$g5['title'] = '회원 비밀번호 확인';
|
||||
// include_once('./_head.sub.php');
|
||||
|
||||
// url 체크
|
||||
check_url_host($url, '', G5_URL, true);
|
||||
|
||||
if($url){
|
||||
$url = preg_replace('#^/\\\{1,}#', '/', $url);
|
||||
|
||||
if( preg_match('#^/{3,}#', $url) ){
|
||||
$url = preg_replace('#^/{3,}#', '/', $url);
|
||||
}
|
||||
|
||||
if (function_exists('safe_filter_url_host')) {
|
||||
$url = safe_filter_url_host($url);
|
||||
}
|
||||
}
|
||||
|
||||
$url = get_text($url);
|
||||
|
||||
include_once($member_skin_path.'/member_confirm.skin.php');
|
||||
|
||||
// include_once('./_tail.sub.php');
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if (!$member['mb_id'])
|
||||
alert('회원만 접근하실 수 있습니다.');
|
||||
|
||||
if ($is_admin == 'super')
|
||||
alert('최고 관리자는 탈퇴할 수 없습니다');
|
||||
|
||||
// $post_mb_password = isset($_POST['mb_password']) ? trim($_POST['mb_password']) : '';
|
||||
|
||||
// if (!($post_mb_password && check_password($post_mb_password, $member['mb_password'])))
|
||||
// alert($member['mb_id']);
|
||||
// alert('비밀번호가 틀립니다.');
|
||||
|
||||
// 회원탈퇴일을 저장
|
||||
// $date = date("Ymd");
|
||||
//$sql = " update {$g5['member_table']} set mb_leave_date = '{$date}', mb_memo = '".date('Ymd', G5_SERVER_TIME)." 탈퇴함\n".sql_real_escape_string($member['mb_memo'])."', mb_certify = '', mb_adult = 0, mb_dupinfo = '' where mb_id = '{$member['mb_id']}' ";
|
||||
// $sql = " delete from {$g5['member_table']} where mb_id = {$member['mb_id']} ";
|
||||
// sql_query($sql);
|
||||
sql_query(" delete from {$g5['member_table']} where mb_id = '{$member['mb_id']}' ");
|
||||
|
||||
run_event('member_leave', $member);
|
||||
|
||||
// 3.09 수정 (로그아웃)
|
||||
// unset($_SESSION['ss_mb_id']);
|
||||
unset($_SESSION['session_id']);
|
||||
|
||||
if (!$url)
|
||||
$url = G5_URL;
|
||||
|
||||
//소셜로그인 해제
|
||||
if(function_exists('social_member_link_delete')){
|
||||
social_member_link_delete($member['mb_id']);
|
||||
}
|
||||
|
||||
alert(''.$member['mb_nick'].'님께서는 '. date("Y년 m월 d일") .'에 회원에서 탈퇴 하셨습니다.', $url);
|
||||
session_destroy();
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if ($is_guest)
|
||||
alert_close('회원만 이용하실 수 있습니다.');
|
||||
|
||||
set_session('ss_memo_delete_token', $token = uniqid(time()));
|
||||
|
||||
$g5['title'] = '내 쪽지함';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$kind = isset($_GET['kind']) ? clean_xss_tags($_GET['kind'], 0, 1) : 'recv';
|
||||
|
||||
if ($kind == 'recv')
|
||||
$unkind = 'send';
|
||||
else if ($kind == 'send')
|
||||
$unkind = 'recv';
|
||||
else {
|
||||
alert("kind 변수 값이 올바르지 않습니다.");
|
||||
}
|
||||
|
||||
if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
|
||||
|
||||
run_event('memo_list', $kind, $unkind, $page);
|
||||
|
||||
$sql = " select count(*) as cnt from {$g5['memo_table']} where me_{$kind}_mb_id = '{$member['mb_id']}' and me_type = '$kind' ";
|
||||
$row = sql_fetch($sql);
|
||||
$total_count = $row['cnt'];
|
||||
|
||||
$total_page = ceil($total_count / $config['cf_page_rows']); // 전체 페이지 계산
|
||||
$from_record = ((int) $page - 1) * $config['cf_page_rows']; // 시작 열을 구함
|
||||
|
||||
if ($kind == 'recv')
|
||||
{
|
||||
$kind_title = '받은';
|
||||
$recv_img = 'on';
|
||||
$send_img = 'off';
|
||||
}
|
||||
else
|
||||
{
|
||||
$kind_title = '보낸';
|
||||
$recv_img = 'off';
|
||||
$send_img = 'on';
|
||||
}
|
||||
|
||||
$list = array();
|
||||
|
||||
$sql = " select a.*, b.mb_id, b.mb_nick, b.mb_email, b.mb_homepage
|
||||
from {$g5['memo_table']} a
|
||||
left join {$g5['member_table']} b on (a.me_{$unkind}_mb_id = b.mb_id)
|
||||
where a.me_{$kind}_mb_id = '{$member['mb_id']}' and a.me_type = '$kind'
|
||||
order by a.me_id desc limit $from_record, {$config['cf_page_rows']} ";
|
||||
|
||||
$result = sql_query($sql);
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++)
|
||||
{
|
||||
$list[$i] = $row;
|
||||
|
||||
$mb_id = $row["me_{$unkind}_mb_id"];
|
||||
|
||||
if ($row['mb_nick'])
|
||||
$mb_nick = $row['mb_nick'];
|
||||
else
|
||||
$mb_nick = '정보없음';
|
||||
|
||||
$name = get_sideview($row['mb_id'], $row['mb_nick'], $row['mb_email'], $row['mb_homepage']);
|
||||
|
||||
if (substr($row['me_read_datetime'],0,1) == 0)
|
||||
$read_datetime = '아직 읽지 않음';
|
||||
else
|
||||
$read_datetime = substr($row['me_read_datetime'],2,14);
|
||||
|
||||
$send_datetime = substr($row['me_send_datetime'],2,14);
|
||||
|
||||
$list[$i]['mb_id'] = $mb_id;
|
||||
$list[$i]['name'] = $name;
|
||||
$list[$i]['send_datetime'] = $send_datetime;
|
||||
$list[$i]['read_datetime'] = $read_datetime;
|
||||
$list[$i]['view_href'] = './memo_view.php?me_id='.$row['me_id'].'&kind='.$kind.'&page='.$page;
|
||||
$list[$i]['del_href'] = './memo_delete.php?me_id='.$row['me_id'].'&token='.$token.'&kind='.$kind;
|
||||
}
|
||||
|
||||
$write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, "./memo.php?kind=$kind".$qstr."&page=");
|
||||
|
||||
include_once($member_skin_path.'/memo.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if (!$is_member)
|
||||
alert('회원만 이용하실 수 있습니다.');
|
||||
|
||||
$delete_token = get_session('ss_memo_delete_token');
|
||||
set_session('ss_memo_delete_token', '');
|
||||
|
||||
if (!($token && $delete_token == $token))
|
||||
alert('토큰 에러로 삭제 불가합니다.');
|
||||
|
||||
$me_id = isset($_REQUEST['me_id']) ? (int) $_REQUEST['me_id'] : 0;
|
||||
|
||||
$sql = " select * from {$g5['memo_table']} where me_id = '{$me_id}' ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
$sql = " delete from {$g5['memo_table']}
|
||||
where me_id = '{$me_id}'
|
||||
and (me_recv_mb_id = '{$member['mb_id']}' or me_send_mb_id = '{$member['mb_id']}') ";
|
||||
sql_query($sql);
|
||||
|
||||
if (!$row['me_read_datetime'][0]) // 메모 받기전이면
|
||||
{
|
||||
$sql = " update {$g5['member_table']}
|
||||
set mb_memo_call = ''
|
||||
where mb_id = '{$row['me_recv_mb_id']}'
|
||||
and mb_memo_call = '{$row['me_send_mb_id']}' ";
|
||||
sql_query($sql);
|
||||
|
||||
$sql = " update `{$g5['member_table']}` set mb_memo_cnt = '".get_memo_not_read($member['mb_id'])."' where mb_id = '{$member['mb_id']}' ";
|
||||
sql_query($sql);
|
||||
}
|
||||
|
||||
run_event('memo_delete', $me_id, $row);
|
||||
|
||||
goto_url('./memo.php?kind='.$kind);
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
|
||||
if ($is_guest) {
|
||||
alert_close('회원만 이용하실 수 있습니다.');
|
||||
}
|
||||
|
||||
$mb_id = isset($mb_id) ? get_search_string($mb_id) : '';
|
||||
|
||||
if (!$member['mb_open'] && $is_admin != 'super' && $member['mb_id'] != $mb_id) {
|
||||
alert_close("자신의 정보를 공개하지 않으면 다른분에게 쪽지를 보낼 수 없습니다. 정보공개 설정은 회원정보수정에서 하실 수 있습니다.");
|
||||
}
|
||||
|
||||
$content = "";
|
||||
$me_recv_mb_id = isset($_REQUEST['me_recv_mb_id']) ? clean_xss_tags($_REQUEST['me_recv_mb_id'], 1, 1) : '';
|
||||
$me_id = isset($_REQUEST['me_id']) ? clean_xss_tags($_REQUEST['me_id'], 1, 1) : '';
|
||||
|
||||
// 탈퇴한 회원에게 쪽지 보낼 수 없음
|
||||
if ($me_recv_mb_id)
|
||||
{
|
||||
$mb = get_member($me_recv_mb_id);
|
||||
if (!$mb['mb_id'])
|
||||
alert_close('회원정보가 존재하지 않습니다.\\n\\n탈퇴하였을 수 있습니다.');
|
||||
|
||||
if (!$mb['mb_open'] && $is_admin != 'super')
|
||||
alert_close('정보공개를 하지 않았습니다.');
|
||||
|
||||
// 4.00.15
|
||||
$row = sql_fetch(" select me_memo from {$g5['memo_table']} where me_id = '{$me_id}' and (me_recv_mb_id = '{$member['mb_id']}' or me_send_mb_id = '{$member['mb_id']}') ");
|
||||
if (isset($row['me_memo']) && $row['me_memo'])
|
||||
{
|
||||
$content = "\n\n\n".' >'
|
||||
."\n".' >'
|
||||
."\n".' >'.str_replace("\n", "\n> ", get_text($row['me_memo'], 0))
|
||||
."\n".' >'
|
||||
.' >';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$g5['title'] = '쪽지 보내기';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$memo_action_url = G5_HTTPS_BBS_URL."/memo_form_update.php";
|
||||
include_once($member_skin_path.'/memo_form.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
|
||||
if ($is_guest)
|
||||
alert('회원만 이용하실 수 있습니다.');
|
||||
|
||||
if (!chk_captcha()) {
|
||||
alert('자동등록방지 숫자가 틀렸습니다.');
|
||||
}
|
||||
|
||||
$recv_list = isset($_POST['me_recv_mb_id']) ? explode(',', trim($_POST['me_recv_mb_id'])) : array();
|
||||
$str_nick_list = '';
|
||||
$msg = '';
|
||||
$error_list = array();
|
||||
$member_list = array('id'=>array(), 'nick'=>array());
|
||||
$me_memo = isset($_POST['me_memo']) ? preg_replace("#[\\\]+$#", "", substr(trim($_POST['me_memo']),0,65536)) : '';
|
||||
|
||||
run_event('memo_form_update_before', $recv_list);
|
||||
|
||||
for ($i=0; $i<count($recv_list); $i++) {
|
||||
|
||||
$recv_list_id = substr(preg_replace("/[^a-zA-Z0-9_]*/", "", $recv_list[$i]), 0, 20);
|
||||
|
||||
$row = sql_fetch(" select mb_id, mb_nick, mb_open, mb_leave_date, mb_intercept_date from {$g5['member_table']} where mb_id = '{$recv_list_id}' ");
|
||||
if ($row) {
|
||||
if ($is_admin || ($row['mb_open'] && (!$row['mb_leave_date'] && !$row['mb_intercept_date']))) {
|
||||
$member_list['id'][] = $row['mb_id'];
|
||||
$member_list['nick'][] = $row['mb_nick'];
|
||||
} else {
|
||||
$error_list[] = $recv_list_id;
|
||||
}
|
||||
}
|
||||
/*
|
||||
// 관리자가 아니면서
|
||||
// 가입된 회원이 아니거나 정보공개를 하지 않았거나 탈퇴한 회원이거나 차단된 회원에게 쪽지를 보내는것은 에러
|
||||
if ((!$row['mb_id'] || !$row['mb_open'] || $row['mb_leave_date'] || $row['mb_intercept_date']) && !$is_admin) {
|
||||
$error_list[] = $recv_list_id;
|
||||
} else {
|
||||
$member_list['id'][] = $row['mb_id'];
|
||||
$member_list['nick'][] = $row['mb_nick'];
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
$error_msg = implode(",", $error_list);
|
||||
|
||||
if ($error_msg && !$is_admin)
|
||||
alert("회원아이디 '{$error_msg}' 은(는) 존재(또는 정보공개)하지 않는 회원아이디 이거나 탈퇴, 접근차단된 회원아이디 입니다.\\n쪽지를 발송하지 않았습니다.");
|
||||
|
||||
if (! count($member_list['id'])){
|
||||
alert('해당 회원이 존재하지 않습니다.');
|
||||
}
|
||||
|
||||
if (!$is_admin) {
|
||||
if (count($member_list['id'])) {
|
||||
$point = (int)$config['cf_memo_send_point'] * count($member_list['id']);
|
||||
if ($point) {
|
||||
if ($member['mb_point'] - $point < 0) {
|
||||
alert('보유하신 포인트('.number_format($member['mb_point']).'점)가 모자라서 쪽지를 보낼 수 없습니다.');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ($i=0; $i<count($member_list['id']); $i++) {
|
||||
$tmp_row = sql_fetch(" select max(me_id) as max_me_id from {$g5['memo_table']} ");
|
||||
$me_id = $tmp_row['max_me_id'] + 1;
|
||||
|
||||
$recv_mb_id = $member_list['id'][$i];
|
||||
$recv_mb_nick = get_text($member_list['nick'][$i]);
|
||||
|
||||
// 받는 회원 쪽지 INSERT
|
||||
$sql = " insert into {$g5['memo_table']} ( me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo, me_read_datetime, me_type, me_send_ip ) values ( '$recv_mb_id', '{$member['mb_id']}', '".G5_TIME_YMDHIS."', '{$me_memo}', '0000-00-00 00:00:00' , 'recv', '{$_SERVER['REMOTE_ADDR']}' ) ";
|
||||
|
||||
sql_query($sql);
|
||||
|
||||
if( $me_id = sql_insert_id() ){
|
||||
|
||||
// 보내는 회원 쪽지 INSERT
|
||||
$sql = " insert into {$g5['memo_table']} ( me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo, me_read_datetime, me_send_id, me_type , me_send_ip ) values ( '$recv_mb_id', '{$member['mb_id']}', '".G5_TIME_YMDHIS."', '{$me_memo}', '0000-00-00 00:00:00', '$me_id', 'send', '{$_SERVER['REMOTE_ADDR']}' ) ";
|
||||
sql_query($sql);
|
||||
|
||||
$member_list['me_id'][$i] = $me_id;
|
||||
}
|
||||
|
||||
// 실시간 쪽지 알림 기능
|
||||
$sql = " update {$g5['member_table']} set mb_memo_call = '{$member['mb_id']}', mb_memo_cnt = '".get_memo_not_read($recv_mb_id)."' where mb_id = '$recv_mb_id' ";
|
||||
sql_query($sql);
|
||||
|
||||
if (!$is_admin) {
|
||||
insert_point($member['mb_id'], (int)$config['cf_memo_send_point'] * (-1), $recv_mb_nick.'('.$recv_mb_id.')님께 쪽지 발송', '@memo', $recv_mb_id, $me_id);
|
||||
}
|
||||
}
|
||||
|
||||
if ($member_list) {
|
||||
|
||||
$redirect_url = G5_HTTP_BBS_URL."/memo.php?kind=send";
|
||||
$str_nick_list = implode(',', $member_list['nick']);
|
||||
|
||||
run_event('memo_form_update_after', $member_list, $str_nick_list, $redirect_url, $_POST['me_memo']);
|
||||
|
||||
alert($str_nick_list." 님께 쪽지를 전달하였습니다.", $redirect_url, false);
|
||||
} else {
|
||||
|
||||
$redirect_url = G5_HTTP_BBS_URL."/memo_form.php";
|
||||
|
||||
run_event('memo_form_update_failed', $member_list, $redirect_url, $_POST['me_memo']);
|
||||
|
||||
alert("회원아이디 오류 같습니다.", $redirect_url, false);
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if (!$is_member)
|
||||
alert('회원만 이용하실 수 있습니다.');
|
||||
|
||||
$me_id = isset($_REQUEST['me_id']) ? (int) $_REQUEST['me_id'] : 0;
|
||||
|
||||
if ($kind == 'recv')
|
||||
{
|
||||
$t = '받은';
|
||||
$unkind = 'send';
|
||||
|
||||
$sql = " update {$g5['memo_table']}
|
||||
set me_read_datetime = '".G5_TIME_YMDHIS."'
|
||||
where (me_id = '$me_id' or me_send_id = '$me_id' )
|
||||
and me_recv_mb_id = '{$member['mb_id']}'
|
||||
and me_read_datetime = '0000-00-00 00:00:00' ";
|
||||
sql_query($sql);
|
||||
|
||||
$sql = " update `{$g5['member_table']}` set mb_memo_cnt = '".get_memo_not_read($member['mb_id'])."' where mb_id = '{$member['mb_id']}' ";
|
||||
sql_query($sql);
|
||||
}
|
||||
else if ($kind == 'send')
|
||||
{
|
||||
$t = '보낸';
|
||||
$unkind = 'recv';
|
||||
}
|
||||
else
|
||||
{
|
||||
alert($kind.' 값을 넘겨주세요.');
|
||||
}
|
||||
|
||||
$sql = " select * from {$g5['memo_table']}
|
||||
where me_id = '$me_id'
|
||||
and me_{$kind}_mb_id = '{$member['mb_id']}' ";
|
||||
$memo = sql_fetch($sql);
|
||||
|
||||
set_session('ss_memo_delete_token', $token = uniqid(time()));
|
||||
$del_link = 'memo_delete.php?me_id='.$memo['me_id'].'&token='.$token.'&kind='.$kind;
|
||||
|
||||
$g5['title'] = $t.' 쪽지 보기';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
// 이전 쪽지
|
||||
$sql = " select me.*, a.rownum from `{$g5['memo_table']}` as me inner join ( select me_id , (@rownum:=@rownum+1) as rownum from `{$g5['memo_table']}` as memo, (select @rownum:=0) tmp where me_{$kind}_mb_id = '{$member['mb_id']}' and memo.me_type = '$kind' order by me_id desc ) as a on a.me_id = me.me_id where me.me_id < '$me_id' and me.me_{$kind}_mb_id = '{$member['mb_id']}' and me.me_type = '$kind' order by me.me_id desc limit 1 ";
|
||||
|
||||
$prev = sql_fetch($sql);
|
||||
if (isset($prev['me_id']) && $prev['me_id']) {
|
||||
$prev_link = './memo_view.php?kind='.$kind.'&me_id='.$prev['me_id'];
|
||||
$prev['page'] = ceil( (int)$prev['rownum'] / $config['cf_page_rows']); // 이동할 페이지 계산
|
||||
if( (int)$prev['page'] > 0 ) $prev_link .= "&page=".$prev['page'];
|
||||
} else {
|
||||
$prev_link = '';
|
||||
}
|
||||
|
||||
// 다음 쪽지
|
||||
$sql = " select me.*, a.rownum from `{$g5['memo_table']}` as me inner join ( select me_id , (@rownum:=@rownum+1) as rownum from `{$g5['memo_table']}` as memo, (select @rownum:=0) tmp where me_{$kind}_mb_id = '{$member['mb_id']}' and memo.me_type = '$kind' order by me_id asc ) as a on a.me_id = me.me_id where me.me_id > '$me_id' and me.me_{$kind}_mb_id = '{$member['mb_id']}' and me.me_type = '$kind' order by me.me_id asc limit 1 ";
|
||||
|
||||
$next = sql_fetch($sql);
|
||||
if (isset($next['me_id']) && $next['me_id']) {
|
||||
$next_link = './memo_view.php?kind='.$kind.'&me_id='.$next['me_id'];
|
||||
$next['page'] = ceil( (int)$next['rownum'] / $config['cf_page_rows']); // 이동할 페이지 계산
|
||||
if( (int)$next['page'] > 0 ) $next_link .= "&page=".$next['page'];
|
||||
} else {
|
||||
$next_link = '';
|
||||
}
|
||||
|
||||
$mb = get_member($memo['me_'.$unkind.'_mb_id']);
|
||||
|
||||
$list_link = './memo.php?kind='.$kind;
|
||||
|
||||
if(isset($page) && $page){
|
||||
$prev_link .= $prev_link ? '&page='.(int) $page : '';
|
||||
$next_link .= $next_link ? '&page='.(int) $page : '';
|
||||
$list_link .= '&page='.(int) $page;
|
||||
}
|
||||
|
||||
include_once($member_skin_path.'/memo_view.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,169 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$sw = isset($_REQUEST['sw']) ? clean_xss_tags($_REQUEST['sw'], 1, 1) : '';
|
||||
|
||||
if ($sw === 'move')
|
||||
$act = '이동';
|
||||
else if ($sw === 'copy')
|
||||
$act = '복사';
|
||||
else
|
||||
alert('sw 값이 제대로 넘어오지 않았습니다.');
|
||||
|
||||
// 게시판 관리자 이상 복사, 이동 가능
|
||||
if ($is_admin != 'board' && $is_admin != 'group' && $is_admin != 'super')
|
||||
alert_close("게시판 관리자 이상 접근이 가능합니다.");
|
||||
|
||||
$g5['title'] = '게시물 ' . $act;
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$wr_id_list = '';
|
||||
if ($wr_id)
|
||||
$wr_id_list = $wr_id;
|
||||
else {
|
||||
$comma = '';
|
||||
|
||||
$count_chk_wr_id = (isset($_POST['chk_wr_id']) && is_array($_POST['chk_wr_id'])) ? count($_POST['chk_wr_id']) : 0;
|
||||
|
||||
for ($i=0; $i<$count_chk_wr_id; $i++) {
|
||||
$wr_id_val = isset($_POST['chk_wr_id'][$i]) ? preg_replace('/[^0-9]/', '', $_POST['chk_wr_id'][$i]) : 0;
|
||||
$wr_id_list .= $comma . $wr_id_val;
|
||||
$comma = ',';
|
||||
}
|
||||
}
|
||||
|
||||
//$sql = " select * from {$g5['board_table']} a, {$g5['group_table']} b where a.gr_id = b.gr_id and bo_table <> '$bo_table' ";
|
||||
// 원본 게시판을 선택 할 수 있도록 함.
|
||||
$sql = " select * from {$g5['board_table']} a, {$g5['group_table']} b where a.gr_id = b.gr_id ";
|
||||
if ($is_admin == 'group')
|
||||
$sql .= " and b.gr_admin = '{$member['mb_id']}' ";
|
||||
else if ($is_admin == 'board')
|
||||
$sql .= " and a.bo_admin = '{$member['mb_id']}' ";
|
||||
$sql .= " order by a.gr_id, a.bo_order, a.bo_table ";
|
||||
$result = sql_query($sql);
|
||||
|
||||
$list = array();
|
||||
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++)
|
||||
{
|
||||
$list[$i] = $row;
|
||||
}
|
||||
?>
|
||||
|
||||
<div id="copymove" class="new_win">
|
||||
<h1 id="win_title"><?php echo $g5['title'] ?></h1>
|
||||
<form name="fboardmoveall" method="post" action="./move_update.php" onsubmit="return fboardmoveall_submit(this);">
|
||||
<input type="hidden" name="sw" value="<?php echo $sw ?>">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id_list" value="<?php echo $wr_id_list ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="act" value="<?php echo $act ?>">
|
||||
<input type="hidden" name="url" value="<?php echo get_text(clean_xss_tags($_SERVER['HTTP_REFERER'])); ?>">
|
||||
|
||||
<div class="tbl_head01 tbl_wrap">
|
||||
<table>
|
||||
<caption><?php echo $act ?>할 게시판을 한개 이상 선택하여 주십시오.</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
<label for="chkall" class="sound_only">현재 페이지 게시판 전체</label>
|
||||
<input type="checkbox" id="chkall" onclick="if (this.checked) all_checked(true); else all_checked(false);">
|
||||
</th>
|
||||
<th scope="col">게시판</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php for ($i=0; $i<count($list); $i++) {
|
||||
$atc_mark = '';
|
||||
$atc_bg = '';
|
||||
if ($list[$i]['bo_table'] == $bo_table) { // 게시물이 현재 속해 있는 게시판이라면
|
||||
$atc_mark = '<span class="copymove_current">현재<span class="sound_only">게시판</span></span>';
|
||||
$atc_bg = 'copymove_currentbg';
|
||||
}
|
||||
?>
|
||||
<tr class="<?php echo $atc_bg; ?>">
|
||||
<td class="td_chk">
|
||||
<label for="chk<?php echo $i ?>" class="sound_only"><?php echo $list[$i]['bo_table'] ?></label>
|
||||
<input type="checkbox" value="<?php echo $list[$i]['bo_table'] ?>" id="chk<?php echo $i ?>" name="chk_bo_table[]">
|
||||
</td>
|
||||
<td>
|
||||
<label for="chk<?php echo $i ?>">
|
||||
<?php
|
||||
echo $list[$i]['gr_subject'] . ' > ';
|
||||
$save_gr_subject = $list[$i]['gr_subject'];
|
||||
?>
|
||||
<?php echo $list[$i]['bo_subject'] ?> (<?php echo $list[$i]['bo_table'] ?>)
|
||||
<?php echo $atc_mark; ?>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="win_btn">
|
||||
<input type="submit" value="<?php echo $act ?>" id="btn_submit" class="btn_submit">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$(".win_btn").append("<button type=\"button\" class=\"btn_cancel btn_close\">창닫기</button>");
|
||||
|
||||
$(".win_btn button").click(function() {
|
||||
window.close();
|
||||
});
|
||||
});
|
||||
|
||||
function all_checked(sw) {
|
||||
var f = document.fboardmoveall;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_bo_table[]")
|
||||
f.elements[i].checked = sw;
|
||||
}
|
||||
}
|
||||
|
||||
function fboardmoveall_submit(f)
|
||||
{
|
||||
var check = false;
|
||||
|
||||
if (typeof(f.elements['chk_bo_table[]']) == 'undefined')
|
||||
;
|
||||
else {
|
||||
if (typeof(f.elements['chk_bo_table[]'].length) == 'undefined') {
|
||||
if (f.elements['chk_bo_table[]'].checked)
|
||||
check = true;
|
||||
} else {
|
||||
for (i=0; i<f.elements['chk_bo_table[]'].length; i++) {
|
||||
if (f.elements['chk_bo_table[]'][i].checked) {
|
||||
check = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!check) {
|
||||
alert('게시물을 '+f.act.value+'할 게시판을 한개 이상 선택해 주십시오.');
|
||||
return false;
|
||||
}
|
||||
|
||||
document.getElementById('btn_submit').disabled = true;
|
||||
|
||||
f.action = './move_update.php';
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
|
||||
<?php
|
||||
run_event('move_html_footer');
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,296 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$act = isset($act) ? strip_tags($act) : '';
|
||||
$count_chk_bo_table = (isset($_POST['chk_bo_table']) && is_array($_POST['chk_bo_table'])) ? count($_POST['chk_bo_table']) : 0;
|
||||
|
||||
// 게시판 관리자 이상 복사, 이동 가능
|
||||
if ($is_admin != 'board' && $is_admin != 'group' && $is_admin != 'super')
|
||||
alert_close('게시판 관리자 이상 접근이 가능합니다.');
|
||||
|
||||
if ($sw != 'move' && $sw != 'copy')
|
||||
alert('sw 값이 제대로 넘어오지 않았습니다.');
|
||||
|
||||
if(! $count_chk_bo_table)
|
||||
alert('게시물을 '.$act.'할 게시판을 한개 이상 선택해 주십시오.', $url);
|
||||
|
||||
// 원본 파일 디렉토리
|
||||
$src_dir = G5_DATA_PATH.'/file/'.$bo_table;
|
||||
|
||||
$save = array();
|
||||
$save_count_write = 0;
|
||||
$save_count_comment = 0;
|
||||
$cnt = 0;
|
||||
|
||||
$wr_id_list = isset($_POST['wr_id_list']) ? preg_replace('/[^0-9\,]/', '', $_POST['wr_id_list']) : '';
|
||||
|
||||
$sql = " select distinct wr_num from $write_table where wr_id in ({$wr_id_list}) order by wr_id ";
|
||||
$result = sql_query($sql);
|
||||
while ($row = sql_fetch_array($result))
|
||||
{
|
||||
$save[$cnt]['wr_contents'] = array();
|
||||
|
||||
$wr_num = $row['wr_num'];
|
||||
for ($i=0; $i<$count_chk_bo_table; $i++)
|
||||
{
|
||||
$move_bo_table = isset($_POST['chk_bo_table'][$i]) ? preg_replace('/[^a-z0-9_]/i', '', $_POST['chk_bo_table'][$i]) : '';
|
||||
|
||||
// 취약점 18-0075 참고
|
||||
$sql = "select * from {$g5['board_table']} where bo_table = '".sql_real_escape_string($move_bo_table)."' ";
|
||||
$move_board = sql_fetch($sql);
|
||||
// 존재하지 않다면
|
||||
if( !$move_board['bo_table'] ) continue;
|
||||
|
||||
$move_write_table = $g5['write_prefix'] . $move_bo_table;
|
||||
|
||||
$src_dir = G5_DATA_PATH.'/file/'.$bo_table; // 원본 디렉토리
|
||||
$dst_dir = G5_DATA_PATH.'/file/'.$move_bo_table; // 복사본 디렉토리
|
||||
|
||||
$count_write = 0;
|
||||
$count_comment = 0;
|
||||
|
||||
// get_next_num 함수는 mysql 지연시 중복이 될수 있는 문제로 더 이상 사용하지 않습니다.
|
||||
// $next_wr_num = get_next_num($move_write_table);
|
||||
$next_wr_num = 0;
|
||||
|
||||
$sql2 = " select * from $write_table where wr_num = '$wr_num' order by wr_parent, wr_is_comment, wr_comment desc, wr_id ";
|
||||
$result2 = sql_query($sql2);
|
||||
while ($row2 = sql_fetch_array($result2))
|
||||
{
|
||||
$save[$cnt]['wr_contents'][] = $row2['wr_content'];
|
||||
|
||||
$nick = cut_str($member['mb_nick'], $config['cf_cut_name']);
|
||||
if (!$row2['wr_is_comment'] && $config['cf_use_copy_log']) {
|
||||
if(strstr($row2['wr_option'], 'html')) {
|
||||
$log_tag1 = '<div class="content_'.$sw.'">';
|
||||
$log_tag2 = '</div>';
|
||||
} else {
|
||||
$log_tag1 = "\n";
|
||||
$log_tag2 = '';
|
||||
}
|
||||
|
||||
$row2['wr_content'] .= "\n".$log_tag1.'[이 게시물은 '.$nick.'님에 의해 '.G5_TIME_YMDHIS.' '.$board['bo_subject'].'에서 '.($sw == 'copy' ? '복사' : '이동').' 됨]'.$log_tag2;
|
||||
}
|
||||
|
||||
// 게시글 추천, 비추천수
|
||||
$wr_good = $wr_nogood = 0;
|
||||
if ($sw == 'move' && $i == 0) {
|
||||
$wr_good = $row2['wr_good'];
|
||||
$wr_nogood = $row2['wr_nogood'];
|
||||
}
|
||||
|
||||
$sql = " insert into $move_write_table
|
||||
set wr_num = " . ($next_wr_num ? "'$next_wr_num'" : "(SELECT IFNULL(MIN(wr_num) - 1, -1) FROM $move_write_table as sq) ") . ",
|
||||
wr_reply = '{$row2['wr_reply']}',
|
||||
wr_is_comment = '{$row2['wr_is_comment']}',
|
||||
wr_comment = '{$row2['wr_comment']}',
|
||||
wr_comment_reply = '{$row2['wr_comment_reply']}',
|
||||
ca_name = '".addslashes($row2['ca_name'])."',
|
||||
wr_option = '{$row2['wr_option']}',
|
||||
wr_subject = '".addslashes($row2['wr_subject'])."',
|
||||
wr_content = '".addslashes($row2['wr_content'])."',
|
||||
wr_link1 = '".addslashes($row2['wr_link1'])."',
|
||||
wr_link2 = '".addslashes($row2['wr_link2'])."',
|
||||
wr_link1_hit = '{$row2['wr_link1_hit']}',
|
||||
wr_link2_hit = '{$row2['wr_link2_hit']}',
|
||||
wr_hit = '{$row2['wr_hit']}',
|
||||
wr_good = '{$wr_good}',
|
||||
wr_nogood = '{$wr_nogood}',
|
||||
mb_id = '{$row2['mb_id']}',
|
||||
wr_password = '{$row2['wr_password']}',
|
||||
wr_name = '".addslashes($row2['wr_name'])."',
|
||||
wr_email = '".addslashes($row2['wr_email'])."',
|
||||
wr_homepage = '".addslashes($row2['wr_homepage'])."',
|
||||
wr_datetime = '{$row2['wr_datetime']}',
|
||||
wr_file = '{$row2['wr_file']}',
|
||||
wr_last = '{$row2['wr_last']}',
|
||||
wr_ip = '{$row2['wr_ip']}',
|
||||
wr_1 = '".addslashes($row2['wr_1'])."',
|
||||
wr_2 = '".addslashes($row2['wr_2'])."',
|
||||
wr_3 = '".addslashes($row2['wr_3'])."',
|
||||
wr_4 = '".addslashes($row2['wr_4'])."',
|
||||
wr_5 = '".addslashes($row2['wr_5'])."',
|
||||
wr_6 = '".addslashes($row2['wr_6'])."',
|
||||
wr_7 = '".addslashes($row2['wr_7'])."',
|
||||
wr_8 = '".addslashes($row2['wr_8'])."',
|
||||
wr_9 = '".addslashes($row2['wr_9'])."',
|
||||
wr_10 = '".addslashes($row2['wr_10'])."' ";
|
||||
sql_query($sql);
|
||||
|
||||
$insert_id = sql_insert_id();
|
||||
|
||||
if ($next_wr_num === 0) {
|
||||
$tmp = sql_fetch("select wr_num from $move_write_table where wr_id = '$insert_id'");
|
||||
$next_wr_num = $tmp['wr_num'];
|
||||
}
|
||||
|
||||
// 코멘트가 아니라면
|
||||
if (!$row2['wr_is_comment'])
|
||||
{
|
||||
$save_parent = $insert_id;
|
||||
|
||||
$sql3 = " select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$row2['wr_id']}' order by bf_no ";
|
||||
$result3 = sql_query($sql3);
|
||||
for ($k=0; $row3 = sql_fetch_array($result3); $k++)
|
||||
{
|
||||
$copy_file_name = '';
|
||||
|
||||
if ($row3['bf_file'])
|
||||
{
|
||||
// 원본파일을 복사하고 퍼미션을 변경
|
||||
// 제이프로님 코드제안 적용
|
||||
|
||||
$copy_file_name = $row3['bf_file'];
|
||||
|
||||
if($bo_table === $move_bo_table){
|
||||
if(preg_match('/_copy(\d+)?_(\d+)_/', $copy_file_name, $match)){
|
||||
|
||||
$number = isset($match[1]) ? (int) $match[1] : 0;
|
||||
$replace_str = '_copy'.($number + 1).'_'.$insert_id.'_';
|
||||
$copy_file_name = preg_replace('/_copy(\d+)?_(\d+)_/', $replace_str, $copy_file_name);
|
||||
} else {
|
||||
$copy_file_name = $row2['wr_id'].'_copy_'.$insert_id.'_'.$row3['bf_file'];
|
||||
}
|
||||
}
|
||||
|
||||
$is_exist_file = is_file($src_dir.'/'.$row3['bf_file']) && file_exists($src_dir.'/'.$row3['bf_file']);
|
||||
if( $is_exist_file ){
|
||||
@copy($src_dir.'/'.$row3['bf_file'], $dst_dir.'/'.$copy_file_name);
|
||||
@chmod($dst_dir.'/'.$row3['bf_file'], G5_FILE_PERMISSION);
|
||||
}
|
||||
|
||||
$row3 = run_replace('bbs_move_update_file', $row3, $copy_file_name, $bo_table, $move_bo_table, $insert_id);
|
||||
}
|
||||
|
||||
$sql = " insert into {$g5['board_file_table']}
|
||||
set bo_table = '$move_bo_table',
|
||||
wr_id = '$insert_id',
|
||||
bf_no = '{$row3['bf_no']}',
|
||||
bf_source = '".addslashes($row3['bf_source'])."',
|
||||
bf_file = '$copy_file_name',
|
||||
bf_download = '{$row3['bf_download']}',
|
||||
bf_content = '".addslashes($row3['bf_content'])."',
|
||||
bf_fileurl = '".addslashes($row3['bf_fileurl'])."',
|
||||
bf_thumburl = '".addslashes($row3['bf_thumburl'])."',
|
||||
bf_storage = '".addslashes($row3['bf_storage'])."',
|
||||
bf_filesize = '{$row3['bf_filesize']}',
|
||||
bf_width = '{$row3['bf_width']}',
|
||||
bf_height = '{$row3['bf_height']}',
|
||||
bf_type = '{$row3['bf_type']}',
|
||||
bf_datetime = '{$row3['bf_datetime']}' ";
|
||||
sql_query($sql);
|
||||
|
||||
if ($sw == 'move' && $row3['bf_file'])
|
||||
$save[$cnt]['bf_file'][$k] = $src_dir.'/'.$row3['bf_file'];
|
||||
}
|
||||
|
||||
$count_write++;
|
||||
|
||||
if ($sw == 'move' && $i == 0)
|
||||
{
|
||||
// 스크랩 이동
|
||||
sql_query(" update {$g5['scrap_table']} set bo_table = '$move_bo_table', wr_id = '$save_parent' where bo_table = '$bo_table' and wr_id = '{$row2['wr_id']}' ");
|
||||
|
||||
// 최신글 이동
|
||||
sql_query(" update {$g5['board_new_table']} set bo_table = '$move_bo_table', wr_id = '$save_parent', wr_parent = '$save_parent' where bo_table = '$bo_table' and wr_id = '{$row2['wr_id']}' ");
|
||||
|
||||
// 추천데이터 이동
|
||||
sql_query(" update {$g5['board_good_table']} set bo_table = '$move_bo_table', wr_id = '$save_parent' where bo_table = '$bo_table' and wr_id = '{$row2['wr_id']}' ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$count_comment++;
|
||||
|
||||
if ($sw == 'move')
|
||||
{
|
||||
// 최신글 이동
|
||||
sql_query(" update {$g5['board_new_table']} set bo_table = '$move_bo_table', wr_id = '$insert_id', wr_parent = '$save_parent' where bo_table = '$bo_table' and wr_id = '{$row2['wr_id']}' ");
|
||||
}
|
||||
}
|
||||
|
||||
sql_query(" update $move_write_table set wr_parent = '$save_parent' where wr_id = '$insert_id' ");
|
||||
|
||||
if ($sw == 'move')
|
||||
$save[$cnt]['wr_id'] = $row2['wr_parent'];
|
||||
|
||||
$cnt++;
|
||||
|
||||
run_event('bbs_move_copy', $row2, $move_bo_table, $insert_id, $next_wr_num, $sw);
|
||||
}
|
||||
|
||||
sql_query(" update {$g5['board_table']} set bo_count_write = bo_count_write + '$count_write' where bo_table = '$move_bo_table' ");
|
||||
sql_query(" update {$g5['board_table']} set bo_count_comment = bo_count_comment + '$count_comment' where bo_table = '$move_bo_table' ");
|
||||
|
||||
delete_cache_latest($move_bo_table);
|
||||
}
|
||||
|
||||
$save_count_write += $count_write;
|
||||
$save_count_comment += $count_comment;
|
||||
}
|
||||
|
||||
delete_cache_latest($bo_table);
|
||||
|
||||
if ($sw == 'move')
|
||||
{
|
||||
for ($i=0; $i<count($save); $i++)
|
||||
{
|
||||
if( isset($save[$i]['bf_file']) && $save[$i]['bf_file'] ){
|
||||
for ($k=0; $k<count($save[$i]['bf_file']); $k++) {
|
||||
$del_file = run_replace('delete_file_path', clean_relative_paths($save[$i]['bf_file'][$k]), $save[$i]);
|
||||
|
||||
if ( is_file($del_file) && file_exists($del_file) ){
|
||||
@unlink($del_file);
|
||||
}
|
||||
|
||||
// 썸네일 파일 삭제, 먼지손 님 코드 제안
|
||||
delete_board_thumbnail($bo_table, basename($save[$i]['bf_file'][$k]));
|
||||
}
|
||||
}
|
||||
|
||||
for ($k=0; $k<count($save[$i]['wr_contents']); $k++){
|
||||
delete_editor_thumbnail($save[$i]['wr_contents'][$k]);
|
||||
}
|
||||
|
||||
sql_query(" delete from $write_table where wr_parent = '{$save[$i]['wr_id']}' ");
|
||||
sql_query(" delete from {$g5['board_new_table']} where bo_table = '$bo_table' and wr_id = '{$save[$i]['wr_id']}' ");
|
||||
sql_query(" delete from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$save[$i]['wr_id']}' ");
|
||||
}
|
||||
|
||||
// 공지사항이 이동되는 경우의 처리 begin
|
||||
$arr = array();
|
||||
$sql = " select bo_notice from {$g5['board_table']} where bo_table = '{$bo_table}' ";
|
||||
$row = sql_fetch($sql);
|
||||
$arr_notice = explode(',', $row['bo_notice']);
|
||||
for ($i=0; $i<count($arr_notice); $i++) {
|
||||
$move_id = (int)$arr_notice[$i];
|
||||
// 게시판에 wr_id 가 있다면 이동한게 아니므로 bo_notice 에 다시 넣음
|
||||
$row2 = sql_fetch(" select count(*) as cnt from $write_table where wr_id = '{$move_id}' ");
|
||||
if ($row2['cnt']) {
|
||||
$arr[] = $move_id;
|
||||
}
|
||||
$bo_notice = implode(',', $arr);
|
||||
}
|
||||
// 공지사항이 이동되는 경우의 처리 end
|
||||
|
||||
sql_query(" update {$g5['board_table']} set bo_notice = '{$bo_notice}', bo_count_write = bo_count_write - '$save_count_write', bo_count_comment = bo_count_comment - '$save_count_comment' where bo_table = '$bo_table' ");
|
||||
}
|
||||
|
||||
$msg = '해당 게시물을 선택한 게시판으로 '.$act.' 하였습니다.';
|
||||
$opener_href = get_pretty_url($bo_table,'','&page='.$page.'&'.$qstr);
|
||||
$opener_href1 = str_replace('&', '&', $opener_href);
|
||||
|
||||
run_event('bbs_move_update', $bo_table, $chk_bo_table, $wr_id_list, $opener_href);
|
||||
?>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<script>
|
||||
alert("<?php echo $msg; ?>");
|
||||
opener.document.location.href = "<?php echo $opener_href1; ?>";
|
||||
window.close();
|
||||
</script>
|
||||
<noscript>
|
||||
<p>
|
||||
<?php echo $msg; ?>
|
||||
</p>
|
||||
<a href="<?php echo $opener_href; ?>">돌아가기</a>
|
||||
</noscript>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
|
||||
$g4['title'] = '마이페이지';
|
||||
|
||||
//include_once('./_head.php');
|
||||
|
||||
//$register_action_url = G4_BBS_URL.'/register_form.php';//
|
||||
|
||||
include_once($member_skin_path.'/mypage.skin.php'); //
|
||||
|
||||
//include_once('./_tail.php');
|
||||
?>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
$result= '';
|
||||
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = "비밀번호 재확인";
|
||||
|
||||
$mb_id = isset($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
|
||||
$mb_password = isset($_POST['mb_password']) ? trim($_POST['mb_password']) : '';
|
||||
//$data["mb_id"] = $_POST['mb_id'];
|
||||
//$data["mb_password"] = $_POST['mb_password'];
|
||||
|
||||
$mb = get_member($mb_id);
|
||||
|
||||
if (!login_password_check($mb, $mb_password, $mb['mb_password'])) {
|
||||
$result= '로그인한 아이디의 비밀번호와 다릅니다.';
|
||||
//$result= 'error';
|
||||
}else{
|
||||
$result= "success";
|
||||
}
|
||||
|
||||
echo json_encode($result,JSON_UNESCAPED_UNICODE);
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,190 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
//include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
//include_once(G5_LIB_PATH.'/register.lib.php');
|
||||
//include_once(G5_LIB_PATH.'/mailer.lib.php');
|
||||
//include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
include_once(G5_SKIN_PATH.'/main.skin.php');
|
||||
|
||||
// 리퍼러 체크
|
||||
referer_check();
|
||||
|
||||
|
||||
if (!($w == '' || $w == 'u')) {
|
||||
alert('w 값이 제대로 넘어오지 않았습니다.');
|
||||
}
|
||||
|
||||
if ($w == 'u' && $is_admin == 'super') {
|
||||
if (file_exists(G5_PATH.'/DEMO'))
|
||||
alert('데모 화면에서는 하실(보실) 수 없는 작업입니다.');
|
||||
}
|
||||
|
||||
// if (run_replace('register_member_chk_captcha', !chk_captcha(), $w)) {
|
||||
// alert('자동등록방지 숫자가 틀렸습니다.');
|
||||
// }
|
||||
|
||||
if($w == 'u')
|
||||
$mb_id = isset($_SESSION['ss_mb_id']) ? trim($_SESSION['ss_mb_id']) : '';
|
||||
else if($w == '')
|
||||
$mb_id = isset($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
|
||||
else
|
||||
alert('잘못된 접근입니다', G5_URL);
|
||||
|
||||
if(!$mb_id)
|
||||
alert('회원아이디 값이 없습니다. 올바른 방법으로 이용해 주십시오.');
|
||||
|
||||
|
||||
$mb_id = escape_trim($_POST['mb_id']);
|
||||
$mb_password = escape_trim($_POST['mb_password']);
|
||||
$mb_password_re = escape_trim($_POST['mb_password_re']);
|
||||
$mb_name = escape_trim($_POST['mb_name']);
|
||||
$mb_nick = $mb_name;
|
||||
$mb_email1 = escape_trim($_POST['mb_email1']);
|
||||
$mb_email2 = escape_trim($_POST['mb_email2']);
|
||||
$mb_email = $mb_email1.$mb_email2;
|
||||
|
||||
//$mb_password = isset($_POST['mb_password']) ? trim($_POST['mb_password']) : '';
|
||||
// $mb_password_re = isset($_POST['mb_password_re']) ? trim($_POST['mb_password_re']) : '';
|
||||
// $mb_name = isset($_POST['mb_name']) ? trim($_POST['mb_name']) : '';
|
||||
// $mb_nick = isset($_POST['mb_nick']) ? trim($_POST['mb_nick']) : '';
|
||||
// $mb_email = isset($_POST['mb_email']) ? trim($_POST['mb_email']) : '';
|
||||
$mb_sex = isset($_POST['mb_sex']) ? trim($_POST['mb_sex']) : "";
|
||||
$mb_birth = isset($_POST['mb_birth']) ? trim($_POST['mb_birth']) : "";
|
||||
$mb_homepage = isset($_POST['mb_homepage']) ? trim($_POST['mb_homepage']) : "";
|
||||
$mb_tel = isset($_POST['mb_tel']) ? trim($_POST['mb_tel']) : "";
|
||||
$mb_hp = isset($_POST['mb_hp']) ? trim($_POST['mb_hp']) : "";
|
||||
$mb_zip1 = isset($_POST['mb_zip']) ? substr(trim($_POST['mb_zip']), 0, 3) : "";
|
||||
$mb_zip2 = isset($_POST['mb_zip']) ? substr(trim($_POST['mb_zip']), 3) : "";
|
||||
$mb_addr1 = isset($_POST['mb_addr1']) ? trim($_POST['mb_addr1']) : "";
|
||||
$mb_addr2 = isset($_POST['mb_addr2']) ? trim($_POST['mb_addr2']) : "";
|
||||
$mb_addr3 = isset($_POST['mb_addr3']) ? trim($_POST['mb_addr3']) : "";
|
||||
$mb_addr_jibeon = isset($_POST['mb_addr_jibeon']) ? trim($_POST['mb_addr_jibeon']) : "";
|
||||
$mb_signature = isset($_POST['mb_signature']) ? trim($_POST['mb_signature']) : "";
|
||||
$mb_profile = isset($_POST['mb_profile']) ? trim($_POST['mb_profile']) : "";
|
||||
$mb_recommend = isset($_POST['mb_recommend']) ? trim($_POST['mb_recommend']) : "";
|
||||
$mb_mailling = isset($_POST['mb_mailling']) ? trim($_POST['mb_mailling']) : "";
|
||||
$mb_sms = isset($_POST['mb_sms']) ? trim($_POST['mb_sms']) : "";
|
||||
$mb_open = isset($_POST['mb_open']) ? trim($_POST['mb_open']) : "0";
|
||||
$mb_1 = isset($_POST['mb_comp']) ? trim($_POST['mb_comp']) : "";
|
||||
$mb_2 = isset($_POST['mb_comp_team']) ? trim($_POST['mb_comp_team']) : "";
|
||||
$mb_3 = isset($_POST['mb_3']) ? trim($_POST['mb_3']) : "";
|
||||
$mb_4 = isset($_POST['mb_4']) ? trim($_POST['mb_4']) : "";
|
||||
$mb_5 = isset($_POST['mb_5']) ? trim($_POST['mb_5']) : "";
|
||||
$mb_6 = isset($_POST['mb_6']) ? trim($_POST['mb_6']) : "";
|
||||
$mb_7 = isset($_POST['mb_7']) ? trim($_POST['mb_7']) : "";
|
||||
$mb_8 = isset($_POST['mb_8']) ? trim($_POST['mb_8']) : "";
|
||||
$mb_9 = isset($_POST['mb_9']) ? trim($_POST['mb_9']) : "";
|
||||
$mb_10 = isset($_POST['mb_10']) ? trim($_POST['mb_10']) : "";
|
||||
|
||||
$mb_name = clean_xss_tags($mb_name);
|
||||
$mb_email = get_email_address($mb_email);
|
||||
$mb_homepage = clean_xss_tags($mb_homepage);
|
||||
$mb_tel = clean_xss_tags($mb_tel);
|
||||
$mb_zip1 = preg_replace('/[^0-9]/', '', $mb_zip1);
|
||||
$mb_zip2 = preg_replace('/[^0-9]/', '', $mb_zip2);
|
||||
$mb_addr1 = clean_xss_tags($mb_addr1);
|
||||
$mb_addr2 = clean_xss_tags($mb_addr2);
|
||||
$mb_addr3 = clean_xss_tags($mb_addr3);
|
||||
$mb_addr_jibeon = preg_match("/^(N|R)$/", $mb_addr_jibeon) ? $mb_addr_jibeon : '';
|
||||
|
||||
run_event('register_form_update_before', $mb_id, $w);
|
||||
|
||||
if ($w == '') {
|
||||
if (!trim(get_session('ss_mb_id')))
|
||||
alert('로그인 되어 있지 않습니다.');
|
||||
|
||||
if (trim($_POST['mb_id']) != $mb_id)
|
||||
alert("로그인된 정보와 수정하려는 정보가 틀리므로 수정할 수 없습니다.\\n만약 올바르지 않은 방법을 사용하신다면 바로 중지하여 주십시오.");
|
||||
|
||||
$sql_password = "";
|
||||
if ($mb_password)
|
||||
$sql_password = " , mb_password = '".get_encrypt_string($mb_password)."' ";
|
||||
|
||||
$sql_nick_date = "";
|
||||
if ($mb_nick_default != $mb_nick)
|
||||
$sql_nick_date = " , mb_nick_date = '".G5_TIME_YMD."' ";
|
||||
|
||||
$sql_open_date = "";
|
||||
if ($mb_open_default != $mb_open)
|
||||
$sql_open_date = " , mb_open_date = '".G5_TIME_YMD."' ";
|
||||
|
||||
// 이전 메일주소와 수정한 메일주소가 틀리다면 인증을 다시 해야하므로 값을 삭제
|
||||
$sql_email_certify = '';
|
||||
if ($old_email != $mb_email && $config['cf_use_email_certify'])
|
||||
$sql_email_certify = " , mb_email_certify = '' ";
|
||||
|
||||
$sql = " update {$g5['member_table']}
|
||||
set mb_nick = '{$mb_nick}',
|
||||
mb_name = '{$mb_name}',
|
||||
mb_mailling = '{$mb_mailling}',
|
||||
mb_sms = '{$mb_sms}',
|
||||
mb_open = '{$mb_open}',
|
||||
mb_email = '{$mb_email}',
|
||||
mb_homepage = '{$mb_homepage}',
|
||||
mb_tel = '{$mb_tel}',
|
||||
mb_hp = '{$mb_hp}',
|
||||
mb_zip1 = '{$mb_zip1}',
|
||||
mb_zip2 = '{$mb_zip2}',
|
||||
mb_addr1 = '{$mb_addr1}',
|
||||
mb_addr2 = '{$mb_addr2}',
|
||||
mb_addr3 = '{$mb_addr3}',
|
||||
mb_addr_jibeon = '{$mb_addr_jibeon}',
|
||||
mb_signature = '{$mb_signature}',
|
||||
mb_profile = '{$mb_profile}',
|
||||
mb_comp = '{$mb_1}',
|
||||
mb_comp_team = '{$mb_2}',
|
||||
mb_3 = '{$mb_3}',
|
||||
mb_4 = '{$mb_4}',
|
||||
mb_5 = '{$mb_5}',
|
||||
mb_6 = '{$mb_6}',
|
||||
mb_7 = '{$mb_7}',
|
||||
mb_8 = '{$mb_8}',
|
||||
mb_9 = '{$mb_9}',
|
||||
mb_10 = '{$mb_10}'
|
||||
{$sql_password}
|
||||
{$sql_nick_date}
|
||||
{$sql_open_date}
|
||||
{$sql_email_certify}
|
||||
{$sql_certify}
|
||||
where mb_id = '$mb_id' ";
|
||||
sql_query($sql);
|
||||
|
||||
$re_value = "success";
|
||||
}
|
||||
|
||||
$msg = "";
|
||||
|
||||
run_event('register_form_update_after', $mb_id, $w);
|
||||
|
||||
echo json_encode($re_value, JSON_UNESCAPED_UNICODE);
|
||||
|
||||
// if ($w == '') {
|
||||
// $row = sql_fetch(" select mb_password from {$g5['member_table']} where mb_id = '{$member['mb_id']}' ");
|
||||
// $tmp_password = $row['mb_password'];
|
||||
|
||||
// if ($old_email != $mb_email && $config['cf_use_email_certify']) {
|
||||
// set_session('ss_mb_id', '');
|
||||
// alert('회원 정보가 수정 되었습니다.\n\nE-mail 주소가 변경되었으므로 다시 인증하셔야 합니다.', G5_URL);
|
||||
// } else {
|
||||
// echo '
|
||||
// <!doctype html>
|
||||
// <html lang="ko">
|
||||
// <head>
|
||||
// <meta charset="utf-8">
|
||||
// <title>회원정보수정</title>
|
||||
// <body>
|
||||
// <form name="fregisterupdate" method="post" action="'.G5_HTTP_BBS_URL.'/register_form.php">
|
||||
// <input type="hidden" name="w" value="u">
|
||||
// <input type="hidden" name="mb_id" value="'.$mb_id.'">
|
||||
// <input type="hidden" name="mb_password" value="'.$tmp_password.'">
|
||||
// <input type="hidden" name="is_update" value="1">
|
||||
// </form>
|
||||
// <script>
|
||||
// alert("회원 정보가 수정 되었습니다.");
|
||||
// document.fregisterupdate.submit();
|
||||
// </script>
|
||||
// </body>
|
||||
// </html>';
|
||||
// }
|
||||
// }
|
||||
?>
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = '새글';
|
||||
include_once('./_head.php');
|
||||
|
||||
$sql_common = " from {$g5['board_new_table']} a, {$g5['board_table']} b, {$g5['group_table']} c where a.bo_table = b.bo_table and b.gr_id = c.gr_id and b.bo_use_search = 1 ";
|
||||
|
||||
$gr_id = isset($_GET['gr_id']) ? substr(preg_replace('#[^a-z0-9_]#i', '', $_GET['gr_id']), 0, 10) : '';
|
||||
if ($gr_id) {
|
||||
$sql_common .= " and b.gr_id = '$gr_id' ";
|
||||
}
|
||||
|
||||
$view = isset($_GET['view']) ? $_GET['view'] : "";
|
||||
|
||||
if ($view == "w")
|
||||
$sql_common .= " and a.wr_id = a.wr_parent ";
|
||||
else if ($view == "c")
|
||||
$sql_common .= " and a.wr_id <> a.wr_parent ";
|
||||
else
|
||||
$view = '';
|
||||
|
||||
$mb_id = isset($_GET['mb_id']) ? ($_GET['mb_id']) : '';
|
||||
$mb_id = substr(preg_replace('#[^a-z0-9_]#i', '', $mb_id), 0, 20);
|
||||
|
||||
if ($mb_id) {
|
||||
$sql_common .= " and a.mb_id = '{$mb_id}' ";
|
||||
}
|
||||
$sql_order = " order by a.bn_id desc ";
|
||||
|
||||
$sql = " select count(*) as cnt {$sql_common} ";
|
||||
$row = sql_fetch($sql);
|
||||
$total_count = $row['cnt'];
|
||||
|
||||
$rows = G5_IS_MOBILE ? $config['cf_mobile_page_rows'] : $config['cf_new_rows'];
|
||||
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
|
||||
if ($page < 1) $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
|
||||
$from_record = ($page - 1) * $rows; // 시작 열을 구함
|
||||
|
||||
$group_select = '<label for="gr_id" class="sound_only">그룹</label><select name="gr_id" id="gr_id"><option value="">전체그룹';
|
||||
$sql = " select gr_id, gr_subject from {$g5['group_table']} order by gr_id ";
|
||||
$result = sql_query($sql);
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
$group_select .= "<option value=\"".$row['gr_id']."\">".$row['gr_subject'];
|
||||
}
|
||||
$group_select .= '</select>';
|
||||
|
||||
$list = array();
|
||||
$sql = " select a.*, b.bo_subject, b.bo_mobile_subject, c.gr_subject, c.gr_id {$sql_common} {$sql_order} limit {$from_record}, {$rows} ";
|
||||
$result = sql_query($sql);
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
$tmp_write_table = $g5['write_prefix'].$row['bo_table'];
|
||||
|
||||
if ($row['wr_id'] == $row['wr_parent']) {
|
||||
|
||||
// 원글
|
||||
$comment = "";
|
||||
$comment_link = "";
|
||||
$row2 = sql_fetch(" select * from {$tmp_write_table} where wr_id = '{$row['wr_id']}' ");
|
||||
$list[$i] = $row2;
|
||||
|
||||
$name = get_sideview($row2['mb_id'], get_text(cut_str($row2['wr_name'], $config['cf_cut_name'])), $row2['wr_email'], $row2['wr_homepage']);
|
||||
// 당일인 경우 시간으로 표시함
|
||||
$datetime = substr($row2['wr_datetime'],0,10);
|
||||
$datetime2 = $row2['wr_datetime'];
|
||||
if ($datetime == G5_TIME_YMD) {
|
||||
$datetime2 = substr($datetime2,11,5);
|
||||
} else {
|
||||
$datetime2 = substr($datetime2,5,5);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// 코멘트
|
||||
$comment = '[코] ';
|
||||
$comment_link = '#c_'.$row['wr_id'];
|
||||
$row2 = sql_fetch(" select * from {$tmp_write_table} where wr_id = '{$row['wr_parent']}' ");
|
||||
$row3 = sql_fetch(" select mb_id, wr_name, wr_email, wr_homepage, wr_datetime from {$tmp_write_table} where wr_id = '{$row['wr_id']}' ");
|
||||
$list[$i] = $row2;
|
||||
$list[$i]['wr_id'] = $row['wr_id'];
|
||||
$list[$i]['mb_id'] = $row3['mb_id'];
|
||||
$list[$i]['wr_name'] = $row3['wr_name'];
|
||||
$list[$i]['wr_email'] = $row3['wr_email'];
|
||||
$list[$i]['wr_homepage'] = $row3['wr_homepage'];
|
||||
|
||||
$name = get_sideview($row3['mb_id'], get_text(cut_str($row3['wr_name'], $config['cf_cut_name'])), $row3['wr_email'], $row3['wr_homepage']);
|
||||
// 당일인 경우 시간으로 표시함
|
||||
$datetime = substr($row3['wr_datetime'],0,10);
|
||||
$datetime2 = $row3['wr_datetime'];
|
||||
if ($datetime == G5_TIME_YMD) {
|
||||
$datetime2 = substr($datetime2,11,5);
|
||||
} else {
|
||||
$datetime2 = substr($datetime2,5,5);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$list[$i]['gr_id'] = $row['gr_id'];
|
||||
$list[$i]['bo_table'] = $row['bo_table'];
|
||||
$list[$i]['name'] = $name;
|
||||
$list[$i]['comment'] = $comment;
|
||||
$list[$i]['href'] = get_pretty_url($row['bo_table'], $row2['wr_id'], $comment_link);
|
||||
$list[$i]['datetime'] = $datetime;
|
||||
$list[$i]['datetime2'] = $datetime2;
|
||||
|
||||
$list[$i]['gr_subject'] = $row['gr_subject'];
|
||||
$list[$i]['bo_subject'] = ((G5_IS_MOBILE && $row['bo_mobile_subject']) ? $row['bo_mobile_subject'] : $row['bo_subject']);
|
||||
$list[$i]['wr_subject'] = $row2['wr_subject'];
|
||||
}
|
||||
|
||||
$write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, "?gr_id=$gr_id&view=$view&mb_id=$mb_id&page=");
|
||||
|
||||
include_once($new_skin_path.'/new.skin.php');
|
||||
|
||||
include_once('./_tail.php');
|
||||
@@ -0,0 +1,159 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
//print_r2($_POST); exit;
|
||||
|
||||
if ($is_admin != 'super')
|
||||
alert("최고관리자만 접근이 가능합니다.");
|
||||
|
||||
$board = array('bo_table'=>'');
|
||||
$save_bo_table = array();
|
||||
$save_wr_id = array();
|
||||
$count_chk_bn_id = (isset($_POST['chk_bn_id']) && is_array($_POST['chk_bn_id'])) ? count($_POST['chk_bn_id']) : 0;
|
||||
|
||||
for($i=0;$i<$count_chk_bn_id;$i++)
|
||||
{
|
||||
// 실제 번호를 넘김
|
||||
$k = isset($_POST['chk_bn_id'][$i]) ? (int) $_POST['chk_bn_id'][$i] : 0;
|
||||
|
||||
$bo_table = isset($_POST['bo_table'][$k]) ? preg_replace('/[^a-z0-9_]/i', '', $_POST['bo_table'][$k]) : '';
|
||||
$wr_id = isset($_POST['wr_id'][$k]) ? preg_replace('/[^0-9]/i', '', $_POST['wr_id'][$k]) : 0;
|
||||
|
||||
$count_write = $count_comment = 0;
|
||||
|
||||
$save_bo_table[$i] = $bo_table;
|
||||
$save_wr_id[$i] = $wr_id;
|
||||
|
||||
$write_table = $g5['write_prefix'].$bo_table;
|
||||
|
||||
if ($board['bo_table'] != $bo_table)
|
||||
$board = sql_fetch(" select bo_subject, bo_write_point, bo_comment_point, bo_notice from {$g5['board_table']} where bo_table = '$bo_table' ");
|
||||
|
||||
$write = get_write($write_table, $wr_id);
|
||||
if (!$write) continue;
|
||||
|
||||
// 원글 삭제
|
||||
if ($write['wr_is_comment']==0)
|
||||
{
|
||||
$len = strlen($write['wr_reply']);
|
||||
if ($len < 0) $len = 0;
|
||||
$reply = substr($write['wr_reply'], 0, $len);
|
||||
|
||||
// 나라오름님 수정 : 원글과 코멘트수가 정상적으로 업데이트 되지 않는 오류를 잡아 주셨습니다.
|
||||
$sql = " select wr_id, mb_id, wr_is_comment from $write_table where wr_parent = '{$write['wr_id']}' order by wr_id ";
|
||||
$result = sql_query($sql);
|
||||
while ($row = sql_fetch_array($result))
|
||||
{
|
||||
// 원글이라면
|
||||
if (!$row['wr_is_comment'])
|
||||
{
|
||||
if (!delete_point($row['mb_id'], $bo_table, $row['wr_id'], '쓰기'))
|
||||
insert_point($row['mb_id'], $board['bo_write_point'] * (-1), "{$board['bo_subject']} {$row['wr_id']} 글삭제");
|
||||
|
||||
// 업로드된 파일이 있다면 파일삭제
|
||||
$sql2 = " select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$row['wr_id']}' ";
|
||||
$result2 = sql_query($sql2);
|
||||
while ($row2 = sql_fetch_array($result2)){
|
||||
|
||||
$delete_file = run_replace('delete_file_path', G5_DATA_PATH.'/file/'.$bo_table.'/'.str_replace('../', '', $row2['bf_file']), $row2);
|
||||
if( file_exists($delete_file) ){
|
||||
@unlink(G5_DATA_PATH.'/file/'.$bo_table.'/'.$row2['bf_file']);
|
||||
}
|
||||
// 이미지파일이면 썸네일삭제
|
||||
if(preg_match("/\.({$config['cf_image_extension']})$/i", $row2['bf_file'])) {
|
||||
delete_board_thumbnail($bo_table, $row2['bf_file']);
|
||||
}
|
||||
}
|
||||
// 파일테이블 행 삭제
|
||||
sql_query(" delete from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$row['wr_id']}' ");
|
||||
|
||||
$count_write++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 댓글 포인트 삭제
|
||||
if (!delete_point($row['mb_id'], $bo_table, $row['wr_id'], '댓글'))
|
||||
insert_point($row['mb_id'], $board['bo_comment_point'] * (-1), "{$board['bo_subject']} {$write['wr_id']}-{$row['wr_id']} 댓글삭제");
|
||||
|
||||
$count_comment++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($pressed == '선택내용삭제') {
|
||||
// 게시글 내용만 삭제
|
||||
sql_query(" update $write_table set wr_subject = '".G5_TIME_YMDHIS." - 본인 요청으로 인한 삭제 (냉무) ☆', wr_content = '', wr_name='본인요청삭제☆' where wr_id = '{$write['wr_id']}' ");
|
||||
} else {
|
||||
// 게시글 삭제
|
||||
sql_query(" delete from $write_table where wr_parent = '{$write['wr_id']}' ");
|
||||
}
|
||||
|
||||
// 최근게시물 삭제
|
||||
sql_query(" delete from {$g5['board_new_table']} where bo_table = '$bo_table' and wr_parent = '{$write['wr_id']}' ");
|
||||
|
||||
// 스크랩 삭제
|
||||
sql_query(" delete from {$g5['scrap_table']} where bo_table = '$bo_table' and wr_id = '{$write['wr_id']}' ");
|
||||
|
||||
// 공지사항 삭제
|
||||
$notice_array = explode(",", trim($board['bo_notice']));
|
||||
$bo_notice = "";
|
||||
$lf = '';
|
||||
for ($k=0; $k<count($notice_array); $k++) {
|
||||
if ((int)$write['wr_id'] != (int)$notice_array[$k])
|
||||
$bo_notice .= $lf.$notice_array[$k];
|
||||
|
||||
if($bo_notice)
|
||||
$lf = ',';
|
||||
}
|
||||
$bo_notice = trim($bo_notice);
|
||||
sql_query(" update {$g5['board_table']} set bo_notice = '$bo_notice' where bo_table = '$bo_table' ");
|
||||
|
||||
if ($pressed == '선택삭제') {
|
||||
// 글숫자 감소
|
||||
if ($count_write > 0 || $count_comment > 0) {
|
||||
sql_query(" update {$g5['board_table']} set bo_count_write = bo_count_write - '$count_write', bo_count_comment = bo_count_comment - '$count_comment' where bo_table = '$bo_table' ");
|
||||
}
|
||||
}
|
||||
}
|
||||
else // 코멘트 삭제
|
||||
{
|
||||
//--------------------------------------------------------------------
|
||||
// 코멘트 삭제시 답변 코멘트 까지 삭제되지는 않음
|
||||
//--------------------------------------------------------------------
|
||||
//print_r2($write);
|
||||
|
||||
$comment_id = $wr_id;
|
||||
|
||||
$len = strlen($write['wr_comment_reply']);
|
||||
if ($len < 0) $len = 0;
|
||||
$comment_reply = substr($write['wr_comment_reply'], 0, $len);
|
||||
|
||||
// 코멘트 삭제
|
||||
if (!delete_point($write['mb_id'], $bo_table, $comment_id, '댓글')) {
|
||||
insert_point($write['mb_id'], $board['bo_comment_point'] * (-1), "{$board['bo_subject']} {$write['wr_parent']}-{$comment_id} 댓글삭제");
|
||||
}
|
||||
|
||||
// 코멘트 삭제
|
||||
sql_query(" delete from $write_table where wr_id = '$comment_id' ");
|
||||
|
||||
// 코멘트가 삭제되므로 해당 게시물에 대한 최근 시간을 다시 얻는다.
|
||||
$sql = " select max(wr_datetime) as wr_last from $write_table where wr_parent = '{$write['wr_parent']}' ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
// 원글의 코멘트 숫자를 감소
|
||||
sql_query(" update $write_table set wr_comment = wr_comment - 1, wr_last = '{$row['wr_last']}' where wr_id = '{$write['wr_parent']}' ");
|
||||
|
||||
// 코멘트 숫자 감소
|
||||
sql_query(" update {$g5['board_table']} set bo_count_comment = bo_count_comment - 1 where bo_table = '$bo_table' ");
|
||||
|
||||
// 새글 삭제
|
||||
sql_query(" delete from {$g5['board_new_table']} where bo_table = '$bo_table' and wr_id = '$comment_id' ");
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($save_bo_table as $key=>$value) {
|
||||
delete_cache_latest($value);
|
||||
}
|
||||
|
||||
run_event('bbs_new_delete', $chk_bn_id, $save_bo_table, $save_wr_id);
|
||||
|
||||
goto_url("new.php?sfl=$sfl&stx=$stx&page=$page");
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if (!defined('_SHOP_')) {
|
||||
$pop_division = 'comm';
|
||||
} else {
|
||||
$pop_division = 'shop';
|
||||
}
|
||||
|
||||
$sql = " select * from {$g5['new_win_table']}
|
||||
where '".G5_TIME_YMDHIS."' between nw_begin_time and nw_end_time
|
||||
and nw_device IN ( 'both', 'pc' ) and nw_division IN ( 'both', '".$pop_division."' )
|
||||
order by nw_id asc ";
|
||||
$result = sql_query($sql, false);
|
||||
?>
|
||||
|
||||
<!-- 팝업레이어 시작 { -->
|
||||
<div id="hd_pop">
|
||||
<h2>팝업레이어 알림</h2>
|
||||
|
||||
<?php
|
||||
for ($i=0; $nw=sql_fetch_array($result); $i++)
|
||||
{
|
||||
// 이미 체크 되었다면 Continue
|
||||
if (isset($_COOKIE["hd_pops_{$nw['nw_id']}"]) && $_COOKIE["hd_pops_{$nw['nw_id']}"])
|
||||
continue;
|
||||
?>
|
||||
|
||||
<div id="hd_pops_<?php echo $nw['nw_id'] ?>" class="hd_pops" style="top:<?php echo $nw['nw_top']?>px;left:<?php echo $nw['nw_left']?>px">
|
||||
<div class="hd_pops_con" style="width:<?php echo $nw['nw_width'] ?>px;height:<?php echo $nw['nw_height'] ?>px">
|
||||
<?php echo conv_content($nw['nw_content'], 1); ?>
|
||||
</div>
|
||||
<div class="hd_pops_footer">
|
||||
<button class="hd_pops_reject hd_pops_<?php echo $nw['nw_id']; ?> <?php echo $nw['nw_disable_hours']; ?>"><strong><?php echo $nw['nw_disable_hours']; ?></strong>시간 동안 다시 열람하지 않습니다.</button>
|
||||
<button class="hd_pops_close hd_pops_<?php echo $nw['nw_id']; ?>">닫기 <i class="fa fa-times" aria-hidden="true"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<?php }
|
||||
if ($i == 0) echo '<span class="sound_only">팝업레이어 알림이 없습니다.</span>';
|
||||
?>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$(".hd_pops_reject").click(function() {
|
||||
var id = $(this).attr('class').split(' ');
|
||||
var ck_name = id[1];
|
||||
var exp_time = parseInt(id[2]);
|
||||
$("#"+id[1]).css("display", "none");
|
||||
set_cookie(ck_name, 1, exp_time, g5_cookie_domain);
|
||||
});
|
||||
$('.hd_pops_close').click(function() {
|
||||
var idb = $(this).attr('class').split(' ');
|
||||
$('#'+idb[1]).css('display','none');
|
||||
});
|
||||
$("#hd").css("z-index", 1000);
|
||||
});
|
||||
</script>
|
||||
<!-- } 팝업레이어 끝 -->
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = '비밀번호 입력';
|
||||
|
||||
$comment_id = isset($_REQUEST['comment_id']) ? preg_replace('/[^0-9]/', '', $_REQUEST['comment_id']) : 0;
|
||||
|
||||
switch ($w) {
|
||||
case 'u' :
|
||||
$action = G5_HTTP_BBS_URL.'/write.php';
|
||||
$return_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id);
|
||||
break;
|
||||
case 'd' :
|
||||
set_session('ss_delete_token', $token = uniqid(time()));
|
||||
$action = https_url(G5_BBS_DIR).'/delete.php?token='.$token;
|
||||
$return_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id);
|
||||
break;
|
||||
case 'x' :
|
||||
set_session('ss_delete_comment_'.$comment_id.'_token', $token = uniqid(time()));
|
||||
$action = https_url(G5_BBS_DIR).'/delete_comment.php?token='.$token;
|
||||
$row = sql_fetch(" select wr_parent from $write_table where wr_id = '$comment_id' ");
|
||||
$return_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$row['wr_parent']);
|
||||
break;
|
||||
case 's' :
|
||||
// 비밀번호 창에서 로그인 하는 경우 관리자 또는 자신의 글이면 바로 글보기로 감
|
||||
if ($is_admin || ($member['mb_id'] == $write['mb_id'] && $write['mb_id']))
|
||||
goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id));
|
||||
else {
|
||||
$action = https_url(G5_BBS_DIR).'/password_check.php';
|
||||
$return_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table);
|
||||
}
|
||||
break;
|
||||
case 'sc' :
|
||||
// 비밀번호 창에서 로그인 하는 경우 관리자 또는 자신의 글이면 바로 글보기로 감
|
||||
if ($is_admin || ($member['mb_id'] == $write['mb_id'] && $write['mb_id']))
|
||||
goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id));
|
||||
else {
|
||||
$action = https_url(G5_BBS_DIR).'/password_check.php';
|
||||
$return_url = short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id);
|
||||
}
|
||||
break;
|
||||
default :
|
||||
alert('w 값이 제대로 넘어오지 않았습니다.');
|
||||
}
|
||||
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
//if ($board['bo_include_head'] && is_include_path_check($board['bo_content_head'])) { @include ($board['bo_include_head']); }
|
||||
//if ($board['bo_content_head']) { echo html_purifier(stripslashes($board['bo_content_head'])); }
|
||||
|
||||
/* 비밀글의 제목을 가져옴 지운아빠 2013-01-29 */
|
||||
if (isset($write['wr_num'])) {
|
||||
$sql = " select wr_subject from {$write_table}
|
||||
where wr_num = '{$write['wr_num']}'
|
||||
and wr_reply = ''
|
||||
and wr_is_comment = 0 ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
$g5['title'] = get_text((string)$row['wr_subject']);
|
||||
}
|
||||
|
||||
include_once($member_skin_path.'/password.skin.php');
|
||||
|
||||
//if ($board['bo_content_tail']) { echo html_purifier(stripslashes($board['bo_content_tail'])); }
|
||||
//if ($board['bo_include_tail'] && is_include_path_check($board['bo_content_tail'])) { @include ($board['bo_include_tail']); }
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if ($w == 's') {
|
||||
$qstr = 'bo_table='.$bo_table.'&sfl='.$sfl.'&stx='.$stx.'&sop='.$sop.'&wr_id='.$wr_id.'&page='.$page;
|
||||
|
||||
$wr = get_write($write_table, $wr_id);
|
||||
|
||||
if( !$wr['wr_password'] && $wr['mb_id'] ){
|
||||
if ( $mb = get_member($wr['mb_id']) ){
|
||||
$wr['wr_password'] = $mb['mb_password'];
|
||||
}
|
||||
}
|
||||
|
||||
if (!check_password($wr_password, $wr['wr_password'])) {
|
||||
run_event('password_is_wrong', 'bbs', $wr, $qstr);
|
||||
alert('비밀번호가 틀립니다.');
|
||||
}
|
||||
|
||||
// 세션에 아래 정보를 저장. 하위번호는 비밀번호없이 보아야 하기 때문임.
|
||||
//$ss_name = 'ss_secret.'_'.$bo_table.'_'.$wr_id';
|
||||
$ss_name = 'ss_secret_'.$bo_table.'_'.$wr['wr_num'];
|
||||
//set_session("ss_secret", "$bo_table|$wr[wr_num]");
|
||||
set_session($ss_name, TRUE);
|
||||
|
||||
} else if ($w == 'sc') {
|
||||
$qstr = 'bo_table='.$bo_table.'&sfl='.$sfl.'&stx='.$stx.'&sop='.$sop.'&wr_id='.$wr_id.'&page='.$page;
|
||||
|
||||
$wr = get_write($write_table, $wr_id);
|
||||
|
||||
if( !$wr['wr_password'] && $wr['mb_id'] ){
|
||||
if ( $mb = get_member($wr['mb_id']) ){
|
||||
$wr['wr_password'] = $mb['mb_password'];
|
||||
}
|
||||
}
|
||||
|
||||
if (!check_password($wr_password, $wr['wr_password'])){
|
||||
run_event('password_is_wrong', 'bbs', $wr, $qstr);
|
||||
alert('비밀번호가 틀립니다.');
|
||||
}
|
||||
|
||||
// 세션에 아래 정보를 저장. 하위번호는 비밀번호없이 보아야 하기 때문임.
|
||||
$ss_name = 'ss_secret_comment_'.$bo_table.'_'.$wr['wr_id'];
|
||||
//set_session("ss_secret", "$bo_table|$wr[wr_num]");
|
||||
set_session($ss_name, TRUE);
|
||||
|
||||
} else
|
||||
alert('w 값이 제대로 넘어오지 않았습니다.');
|
||||
|
||||
goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?'.$qstr));
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
|
||||
if ($is_member) {
|
||||
alert("이미 로그인중입니다.", G5_URL);
|
||||
}
|
||||
|
||||
$g5['title'] = '회원정보 찾기';
|
||||
//include_once(G5_PATH.'/_head.php');
|
||||
|
||||
$action_url = G5_HTTPS_BBS_URL."/password_lost2.php";
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
|
||||
//include_once(G5_PATH.'/_tail.php');
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
include_once(G5_LIB_PATH.'/mailer.lib.php');
|
||||
|
||||
if ($is_member) {
|
||||
alert_close('이미 로그인중입니다.', G5_URL);
|
||||
}
|
||||
|
||||
if (!chk_captcha()) {
|
||||
alert('자동등록방지 숫자가 틀렸습니다.');
|
||||
}
|
||||
|
||||
$email = get_email_address(trim($_POST['mb_email']));
|
||||
|
||||
if (!$email)
|
||||
alert_close('메일주소 오류입니다.');
|
||||
|
||||
$sql = " select count(*) as cnt from {$g5['member_table']} where mb_email = '$email' ";
|
||||
$row = sql_fetch($sql);
|
||||
if ($row['cnt'] > 1)
|
||||
alert('동일한 메일주소가 2개 이상 존재합니다.\\n\\n관리자에게 문의하여 주십시오.');
|
||||
|
||||
$sql = " select mb_no, mb_id, mb_name, mb_nick, mb_email, mb_datetime, mb_leave_date from {$g5['member_table']} where mb_email = '$email' ";
|
||||
$mb = sql_fetch($sql);
|
||||
if (empty($mb['mb_id']) || $mb['mb_leave_date']) {
|
||||
alert('존재하지 않는 회원입니다.');
|
||||
} elseif (is_admin($mb['mb_id'])) {
|
||||
alert('관리자 아이디는 접근 불가합니다.');
|
||||
}
|
||||
|
||||
// 임시비밀번호 발급
|
||||
$change_password = rand(100000, 999999);
|
||||
$mb_lost_certify = get_encrypt_string($change_password);
|
||||
|
||||
// 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용
|
||||
$mb_nonce = md5(pack('V*', rand(), rand(), rand(), rand()));
|
||||
|
||||
// 임시비밀번호와 난수를 mb_lost_certify 필드에 저장
|
||||
$sql = " update {$g5['member_table']} set mb_lost_certify = '$mb_nonce $mb_lost_certify' where mb_id = '{$mb['mb_id']}' ";
|
||||
sql_query($sql);
|
||||
|
||||
// 인증 링크 생성
|
||||
$href = G5_BBS_URL.'/password_lost_certify.php?mb_no='.$mb['mb_no'].'&mb_nonce='.$mb_nonce;
|
||||
|
||||
$subject = "[".$config['cf_title']."] 요청하신 회원정보 찾기 안내 메일입니다.";
|
||||
|
||||
$content = "";
|
||||
|
||||
$content .= '<div style="margin:30px auto;width:600px;border:10px solid #f7f7f7">';
|
||||
$content .= '<div style="border:1px solid #dedede">';
|
||||
$content .= '<h1 style="padding:30px 30px 0;background:#f7f7f7;color:#555;font-size:1.4em">';
|
||||
$content .= '회원정보 찾기 안내';
|
||||
$content .= '</h1>';
|
||||
$content .= '<span style="display:block;padding:10px 30px 30px;background:#f7f7f7;text-align:right">';
|
||||
$content .= '<a href="'.G5_URL.'" target="_blank">'.$config['cf_title'].'</a>';
|
||||
$content .= '</span>';
|
||||
$content .= '<p style="margin:20px 0 0;padding:30px 30px 30px;border-bottom:1px solid #eee;line-height:1.7em">';
|
||||
$content .= addslashes($mb['mb_name'])." (".addslashes($mb['mb_nick']).")"." 회원님은 ".G5_TIME_YMDHIS." 에 회원정보 찾기 요청을 하셨습니다.<br>";
|
||||
$content .= '저희 사이트는 관리자라도 회원님의 비밀번호를 알 수 없기 때문에, 비밀번호를 알려드리는 대신 새로운 비밀번호를 생성하여 안내 해드리고 있습니다.<br>';
|
||||
$content .= '아래에서 변경될 비밀번호를 확인하신 후, <span style="color:#ff3061"><strong>비밀번호 변경</strong> 링크를 클릭 하십시오.</span><br>';
|
||||
$content .= '비밀번호가 변경되었다는 인증 메세지가 출력되면, 홈페이지에서 회원아이디와 변경된 비밀번호를 입력하시고 로그인 하십시오.<br>';
|
||||
$content .= '로그인 후에는 정보수정 메뉴에서 새로운 비밀번호로 변경해 주십시오.';
|
||||
$content .= '</p>';
|
||||
$content .= '<p style="margin:0;padding:30px 30px 30px;border-bottom:1px solid #eee;line-height:1.7em">';
|
||||
$content .= '<span style="display:inline-block;width:100px">회원아이디</span> '.$mb['mb_id'].'<br>';
|
||||
$content .= '<span style="display:inline-block;width:100px">변경될 비밀번호</span> <strong style="color:#ff3061">'.$change_password.'</strong>';
|
||||
$content .= '</p>';
|
||||
$content .= '<a href="'.$href.'" target="_blank" style="display:block;padding:30px 0;background:#484848;color:#fff;text-decoration:none;text-align:center">비밀번호 변경</a>';
|
||||
$content .= '</div>';
|
||||
$content .= '</div>';
|
||||
|
||||
mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $mb['mb_email'], $subject, $content, 1);
|
||||
|
||||
run_event('password_lost2_after', $mb, $mb_nonce, $mb_lost_certify);
|
||||
|
||||
alert_close($email.' 메일로 회원아이디와 비밀번호를 인증할 수 있는 메일이 발송 되었습니다.\\n\\n메일을 확인하여 주십시오.');
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
// 봇의 메일 링크 크롤링을 방지합니다.
|
||||
if(function_exists('check_mail_bot')){ check_mail_bot($_SERVER['REMOTE_ADDR']); }
|
||||
|
||||
run_event('password_lost_certify_before');
|
||||
|
||||
// 오류시 공히 Error 라고 처리하는 것은 회원정보가 있는지? 비밀번호가 틀린지? 를 알아보려는 해킹에 대비한것
|
||||
|
||||
$mb_no = isset($_GET['mb_no']) ? preg_replace('#[^0-9]#', '', trim($_GET['mb_no'])) : 0;
|
||||
$mb_nonce = isset($_GET['mb_nonce']) ? trim($_GET['mb_nonce']) : '';
|
||||
|
||||
// 회원아이디가 아닌 회원고유번호로 회원정보를 구한다.
|
||||
$sql = " select mb_id, mb_lost_certify from {$g5['member_table']} where mb_no = '$mb_no' ";
|
||||
$mb = sql_fetch($sql);
|
||||
if (strlen($mb['mb_lost_certify']) < 33)
|
||||
die("Error");
|
||||
|
||||
// 인증 링크는 한번만 처리가 되게 한다.
|
||||
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");
|
||||
|
||||
// 인증을 위한 난수가 제대로 넘어온 경우 임시비밀번호를 실제 비밀번호로 바꿔준다.
|
||||
if ($mb_nonce === substr($mb['mb_lost_certify'], 0, 32)) {
|
||||
$new_password_hash = substr($mb['mb_lost_certify'], 33);
|
||||
sql_query(" update {$g5['member_table']} set mb_password = '$new_password_hash' where mb_no = '$mb_no' ");
|
||||
|
||||
run_event('password_lost_certify_after', $mb, $mb_nonce);
|
||||
|
||||
alert('비밀번호가 변경됐습니다.\\n\\n회원아이디와 변경된 비밀번호로 로그인 하시기 바랍니다.', G5_BBS_URL.'/login.php');
|
||||
}
|
||||
else {
|
||||
die("Error");
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
//include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
|
||||
if ($is_member) { alert("이미 로그인중입니다."); goto_url(G5_URL); }
|
||||
|
||||
$ss_cert_mb_id = isset($_SESSION['ss_cert_mb_id']) ? trim(get_session('ss_cert_mb_id')) : '';
|
||||
if(!(isset($_POST['mb_id']) && $_POST['mb_id'] === $ss_cert_mb_id)) { alert("잘못된 접근입니다."); goto_url(G5_URL); }
|
||||
|
||||
if($config['cf_cert_find'] != 1) alert("본인인증을 이용하여 아이디/비밀번호 찾기를 할 수 없습니다. 관리자에게 문의 하십시오.");
|
||||
|
||||
$g5['title'] = '패스워드 변경';
|
||||
include_once(G5_PATH.'/_head.php');
|
||||
|
||||
$action_url = G5_HTTPS_BBS_URL."/password_reset_update.php";
|
||||
include_once($member_skin_path.'/password_reset.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/_tail.php');
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$mb_id = isset($_SESSION['ss_cert_mb_id']) ? trim(get_session('ss_cert_mb_id')) : '';
|
||||
$mb_dupinfo = isset($_SESSION['ss_cert_dupinfo']) ? trim(get_session('ss_cert_dupinfo')) : '';
|
||||
|
||||
if(!$mb_id) alert('회원아이디 값이 없습니다. 올바른 방법으로 이용해 주십시오.', G5_URL);
|
||||
|
||||
if(!$mb_dupinfo) alert('잘못된 접근입니다.', G5_URL);
|
||||
|
||||
$mb_check = sql_fetch("select * from {$g5['member_table']} where mb_id = '{$mb_id}' AND mb_dupinfo = '{$mb_dupinfo}'");
|
||||
|
||||
if(!$mb_check) alert('잘못된 접근입니다.', G5_URL);
|
||||
|
||||
$mb_password = isset($_POST['mb_password']) ? trim($_POST['mb_password_re']) : '';
|
||||
$mb_password_re = isset($_POST['mb_password_re']) ? trim($_POST['mb_password_re']) : '';
|
||||
|
||||
|
||||
if (!$mb_password)
|
||||
alert('비밀번호가 넘어오지 않았습니다.');
|
||||
if ($mb_password != $mb_password_re)
|
||||
alert('비밀번호가 일치하지 않습니다.');
|
||||
|
||||
$sql_password = "mb_password = '".get_encrypt_string($mb_password)."' ";
|
||||
|
||||
sql_query("update {$g5['member_table']} set {$sql_password} where mb_id = '{$mb_id}' AND mb_dupinfo = '{$mb_dupinfo}'");
|
||||
|
||||
set_session('ss_cert_mb_id', '');
|
||||
set_session('ss_cert_dupinfo', '');
|
||||
|
||||
goto_url(G5_BBS_URL.'/login.php');
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if ($is_guest)
|
||||
alert_close('회원만 조회하실 수 있습니다.');
|
||||
|
||||
$g5['title'] = get_text($member['mb_nick']).' 님의 포인트 내역';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$list = array();
|
||||
|
||||
$sql_common = " from {$g5['point_table']} where mb_id = '".escape_trim($member['mb_id'])."' ";
|
||||
$sql_order = " order by po_id desc ";
|
||||
|
||||
$sql = " select count(*) as cnt {$sql_common} ";
|
||||
$row = sql_fetch($sql);
|
||||
$total_count = $row['cnt'];
|
||||
|
||||
$rows = $config['cf_page_rows'];
|
||||
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
|
||||
if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
|
||||
$from_record = ($page - 1) * $rows; // 시작 열을 구함
|
||||
|
||||
$sql = " select *
|
||||
{$sql_common}
|
||||
{$sql_order}
|
||||
limit {$from_record}, {$rows} ";
|
||||
|
||||
$result = sql_query($sql);
|
||||
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
$list[] = $row;
|
||||
}
|
||||
|
||||
include_once($member_skin_path.'/point.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_LIB_PATH.'/mailer.lib.php');
|
||||
|
||||
if ($w == '')
|
||||
{
|
||||
$po_id = isset($_POST['po_id']) ? (int) $_POST['po_id'] : '';
|
||||
$pc_name = isset($_POST['pc_name']) ? clean_xss_tags($_POST['pc_name'], 1, 1) : '';
|
||||
$pc_idea = isset($_POST['pc_idea']) ? clean_xss_tags($_POST['pc_idea'], 1, 1) : '';
|
||||
|
||||
$po = sql_fetch(" select * from {$g5['poll_table']} where po_id = '{$po_id}' ");
|
||||
if (!$po['po_id'])
|
||||
alert('po_id 값이 제대로 넘어오지 않았습니다.');
|
||||
|
||||
$tmp_row = sql_fetch(" select max(pc_id) as max_pc_id from {$g5['poll_etc_table']} ");
|
||||
$pc_id = $tmp_row['max_pc_id'] + 1;
|
||||
|
||||
$sql = " insert into {$g5['poll_etc_table']}
|
||||
( pc_id, po_id, mb_id, pc_name, pc_idea, pc_datetime )
|
||||
values ( '{$pc_id}', '{$po_id}', '{$member['mb_id']}', '{$pc_name}', '{$pc_idea}', '".G5_TIME_YMDHIS."' ) ";
|
||||
sql_query($sql);
|
||||
|
||||
$pc_idea = stripslashes($pc_idea);
|
||||
|
||||
$name = get_text(cut_str($pc_name, $config['cf_cut_name']));
|
||||
$mb_id = '';
|
||||
if ($member['mb_id'])
|
||||
$mb_id = '('.$member['mb_id'].')';
|
||||
|
||||
// 환경설정의 투표 기타의견 작성시 최고관리자에게 메일발송 사용에 체크되어 있을 경우
|
||||
if ($config['cf_email_po_super_admin'])
|
||||
{
|
||||
$subject = $po['po_subject'];
|
||||
$content = $pc_idea;
|
||||
|
||||
ob_start();
|
||||
include_once ('./poll_etc_update_mail.php');
|
||||
$content = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
// 관리자에게 보내는 메일
|
||||
$admin = get_admin('super');
|
||||
$from_email = $member['mb_email'] ? $member['mb_email'] : $admin['mb_email'];
|
||||
mailer($name, $from_email, $admin['mb_email'], '['.$config['cf_title'].'] 설문조사 기타의견 메일', $content, 1);
|
||||
}
|
||||
}
|
||||
else if ($w == 'd')
|
||||
{
|
||||
if ($member['mb_id'] || $is_admin == 'super')
|
||||
{
|
||||
$sql = " delete from {$g5['poll_etc_table']} where pc_id = '{$pc_id}' ";
|
||||
if (!$is_admin)
|
||||
$sql .= " and mb_id = '{$member['mb_id']}' ";
|
||||
sql_query($sql);
|
||||
}
|
||||
}
|
||||
|
||||
goto_url('./poll_result.php?po_id='.$po_id.'&skin_dir='.$skin_dir);
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
// 설문조사 기타의견 입력시 관리자께 보내는 메일을 수정하고 싶으시다면 이 파일을 수정하십시오.
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
?>
|
||||
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>설문조사 기타의견 메일</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div style="margin:30px auto;width:600px;border:10px solid #f7f7f7">
|
||||
<div style="border:1px solid #dedede">
|
||||
<h1 style="padding:30px 30px 0;background:#f7f7f7;color:#555;font-size:1.4em">
|
||||
<?php echo $subject ?>
|
||||
</h1>
|
||||
<span style="display:block;padding:10px 30px 30px;background:#f7f7f7;text-align:right">
|
||||
작성자 <?php echo $name ?> (<?php echo $mb_id ?>)
|
||||
</span>
|
||||
<p style="margin:20px 0 0;padding:30px 30px 50px;min-height:200px;height:auto !important;height:200px;border-bottom:1px solid #eee">
|
||||
<?php echo $content ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
|
||||
|
||||
$po_id = isset($_REQUEST['po_id']) ? (int) $_REQUEST['po_id'] : '';
|
||||
|
||||
$po = sql_fetch(" select * from {$g5['poll_table']} where po_id = '{$po_id}' ");
|
||||
if (!$po['po_id'])
|
||||
alert('설문조사 정보가 없습니다.');
|
||||
|
||||
if ($member['mb_level'] < $po['po_level'])
|
||||
alert('권한 '.$po['po_level'].' 이상의 회원만 결과를 보실 수 있습니다.');
|
||||
|
||||
$g5['title'] = '설문조사 결과';
|
||||
|
||||
$po_subject = $po['po_subject'];
|
||||
|
||||
$max = 1;
|
||||
$total_po_cnt = 0;
|
||||
$poll_max_count = 9;
|
||||
|
||||
for ($i=1; $i<=$poll_max_count; $i++) {
|
||||
$poll = $po['po_poll'.$i];
|
||||
if (! $poll) break;
|
||||
|
||||
$count = $po['po_cnt'.$i];
|
||||
$total_po_cnt += $count;
|
||||
|
||||
if ($count > $max)
|
||||
$max = $count;
|
||||
}
|
||||
$nf_total_po_cnt = number_format($total_po_cnt);
|
||||
|
||||
$list = array();
|
||||
|
||||
for ($i=1; $i<=$poll_max_count; $i++) {
|
||||
$poll = $po['po_poll'.$i];
|
||||
if (! $poll) { break; }
|
||||
|
||||
$list[$i]['content'] = $poll;
|
||||
$list[$i]['cnt'] = $po['po_cnt'.$i];
|
||||
$list[$i]['rate'] = 0;
|
||||
|
||||
if ($total_po_cnt > 0)
|
||||
$list[$i]['rate'] = ($list[$i]['cnt'] / $total_po_cnt) * 100;
|
||||
|
||||
$bar = (int)($list[$i]['cnt'] / $max * 100);
|
||||
|
||||
$list[$i]['bar'] = $bar;
|
||||
$list[$i]['num'] = $i;
|
||||
}
|
||||
|
||||
$list2 = array();
|
||||
|
||||
// 기타의견 리스트
|
||||
$sql = " select a.*, b.mb_open
|
||||
from {$g5['poll_etc_table']} a
|
||||
left join {$g5['member_table']} b on (a.mb_id = b.mb_id)
|
||||
where po_id = '{$po_id}' order by pc_id desc ";
|
||||
$result = sql_query($sql);
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
$list2[$i]['pc_name'] = get_text($row['pc_name']);
|
||||
$list2[$i]['name'] = get_sideview($row['mb_id'], get_text(cut_str($row['pc_name'],10)), '', '', $row['mb_open']);
|
||||
$list2[$i]['idea'] = get_text(cut_str($row['pc_idea'], 255));
|
||||
$list2[$i]['datetime'] = $row['pc_datetime'];
|
||||
|
||||
$list2[$i]['del'] = '';
|
||||
if ($is_admin == 'super' || ($row['mb_id'] == $member['mb_id'] && $row['mb_id']))
|
||||
$list2[$i]['del'] = '<a href="'.G5_BBS_URL.'/poll_etc_update.php?w=d&pc_id='.$row['pc_id'].'&po_id='.$po_id.'&skin_dir='.$skin_dir.'" class="poll_delete">';
|
||||
}
|
||||
|
||||
// 기타의견 입력
|
||||
$is_etc = false;
|
||||
if ($po['po_etc']) {
|
||||
$is_etc = true;
|
||||
$po_etc = $po['po_etc'];
|
||||
if ($member['mb_id'])
|
||||
$name = '<b>'.$member['mb_nick'].'</b> <input type="hidden" name="pc_name" value="'.$member['mb_nick'].'">';
|
||||
else
|
||||
$name = '<input type="text" name="pc_name" size="10" class="input" required>';
|
||||
}
|
||||
|
||||
$list3 = array();
|
||||
|
||||
// 다른투표
|
||||
$sql = " select po_id, po_subject, po_date from {$g5['poll_table']} order by po_id desc ";
|
||||
$result = sql_query($sql);
|
||||
for ($i=0; $row2=sql_fetch_array($result); $i++) {
|
||||
$list3[$i]['po_id'] = $row2['po_id'];
|
||||
$list3[$i]['date'] = substr($row2['po_date'],2,8);
|
||||
$list3[$i]['subject'] = cut_str($row2['po_subject'],60,"…");
|
||||
}
|
||||
|
||||
if(preg_match('#^theme/(.+)$#', $skin_dir, $match)) {
|
||||
if (G5_IS_MOBILE) {
|
||||
$poll_skin_path = G5_THEME_MOBILE_PATH.'/'.G5_SKIN_DIR.'/poll/'.$match[1];
|
||||
if(!is_dir($poll_skin_path))
|
||||
$poll_skin_path = G5_THEME_PATH.'/'.G5_SKIN_DIR.'/poll/'.$match[1];
|
||||
$poll_skin_url = str_replace(G5_PATH, G5_URL, $poll_skin_path);
|
||||
} else {
|
||||
$poll_skin_path = G5_THEME_PATH.'/'.G5_SKIN_DIR.'/poll/'.$match[1];
|
||||
$poll_skin_url = str_replace(G5_PATH, G5_URL, $poll_skin_path);
|
||||
}
|
||||
//$skin_dir = $match[1];
|
||||
} else {
|
||||
if (G5_IS_MOBILE) {
|
||||
$poll_skin_path = G5_MOBILE_PATH.'/'.G5_SKIN_DIR.'/poll/'.$skin_dir;
|
||||
$poll_skin_url = G5_MOBILE_URL.'/'.G5_SKIN_DIR.'/poll/'.$skin_dir;
|
||||
} else {
|
||||
$poll_skin_path = G5_SKIN_PATH.'/poll/'.$skin_dir;
|
||||
$poll_skin_url = G5_SKIN_URL.'/poll/'.$skin_dir;
|
||||
}
|
||||
}
|
||||
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
if (!file_exists($poll_skin_path.'/poll_result.skin.php')) die('skin error');
|
||||
include_once ($poll_skin_path.'/poll_result.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$po_id = isset($_POST['po_id']) ? preg_replace('/[^0-9]/', '', $_POST['po_id']) : 0;
|
||||
|
||||
$po = sql_fetch(" select * from {$g5['poll_table']} where po_id = '$po_id' ");
|
||||
if (! (isset($po['po_id']) && $po['po_id']))
|
||||
alert('po_id 값이 제대로 넘어오지 않았습니다.');
|
||||
|
||||
if ($member['mb_level'] < $po['po_level'])
|
||||
alert_close('권한 '.$po['po_level'].' 이상 회원만 투표에 참여하실 수 있습니다.');
|
||||
|
||||
$gb_poll = isset($_POST['gb_poll']) ? preg_replace('/[^0-9]/', '', $_POST['gb_poll']) : 0;
|
||||
if(!$gb_poll)
|
||||
alert_close('항목을 선택하세요.');
|
||||
|
||||
$search_mb_id = false;
|
||||
$search_ip = false;
|
||||
|
||||
if($is_member) {
|
||||
// 투표했던 회원아이디들 중에서 찾아본다
|
||||
$ids = explode(',', trim($po['mb_ids']));
|
||||
for ($i=0; $i<count($ids); $i++) {
|
||||
if ($member['mb_id'] == trim($ids[$i])) {
|
||||
$search_mb_id = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 투표했던 ip들 중에서 찾아본다
|
||||
$ips = explode(',', trim($po['po_ips']));
|
||||
for ($i=0; $i<count($ips); $i++) {
|
||||
if ($_SERVER['REMOTE_ADDR'] == trim($ips[$i])) {
|
||||
$search_ip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$post_skin_dir = isset($_POST['skin_dir']) ? clean_xss_tags($_POST['skin_dir'], 1, 1) : '';
|
||||
$result_url = G5_BBS_URL."/poll_result.php?po_id=$po_id&skin_dir={$post_skin_dir}";
|
||||
|
||||
// 없다면 선택한 투표항목을 1증가 시키고 ip, id를 저장
|
||||
if (!($search_ip || $search_mb_id)) {
|
||||
$po_ips = $po['po_ips'] . $_SERVER['REMOTE_ADDR'].",";
|
||||
$mb_ids = $po['mb_ids'];
|
||||
if ($is_member) { // 회원일 때는 id만 추가
|
||||
$mb_ids .= $member['mb_id'].',';
|
||||
$sql = " update {$g5['poll_table']} set po_cnt{$gb_poll} = po_cnt{$gb_poll} + 1, mb_ids = '$mb_ids' where po_id = '$po_id' ";
|
||||
} else {
|
||||
$sql = " update {$g5['poll_table']} set po_cnt{$gb_poll} = po_cnt{$gb_poll} + 1, po_ips = '$po_ips' where po_id = '$po_id' ";
|
||||
}
|
||||
|
||||
sql_query($sql);
|
||||
} else {
|
||||
alert(addcslashes($po['po_subject'], '"\\/').'에 이미 참여하셨습니다.', $result_url);
|
||||
}
|
||||
|
||||
if (!$search_mb_id)
|
||||
insert_point($member['mb_id'], $po['po_point'], $po['po_id'] . '. ' . cut_str($po['po_subject'],20) . ' 투표 참여 ', '@poll', $po['po_id'], '투표');
|
||||
|
||||
//goto_url($g5['bbs_url'].'/poll_result.php?po_id='.$po_id.'&skin_dir='.$skin_dir);
|
||||
goto_url($result_url);
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$g5['title'] = '주요기능';
|
||||
|
||||
include_once($member_skin_path.'/primary.skin.php');
|
||||
?>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
if (!$member['mb_id'])
|
||||
alert_close('회원만 이용하실 수 있습니다.');
|
||||
|
||||
if (!$member['mb_open'] && $is_admin != 'super' && $member['mb_id'] != $mb_id)
|
||||
alert_close('자신의 정보를 공개하지 않으면 다른분의 정보를 조회할 수 없습니다.\\n\\n정보공개 설정은 회원정보수정에서 하실 수 있습니다.');
|
||||
|
||||
$mb_id = isset($mb_id) ? $mb_id : '';
|
||||
|
||||
$mb = get_member($mb_id);
|
||||
|
||||
if (!$mb['mb_id'])
|
||||
alert_close('회원정보가 존재하지 않습니다.\\n\\n탈퇴하였을 수 있습니다.');
|
||||
|
||||
if (!$mb['mb_open'] && $is_admin != 'super' && $member['mb_id'] != $mb_id)
|
||||
alert_close('정보공개를 하지 않았습니다.');
|
||||
|
||||
$g5['title'] = $mb['mb_nick'].'님의 자기소개';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
|
||||
$mb_nick = get_sideview($mb['mb_id'], get_text($mb['mb_nick']), $mb['mb_email'], $mb['mb_homepage'], $mb['mb_open']);
|
||||
|
||||
// 회원가입후 몇일째인지? + 1 은 당일을 포함한다는 뜻
|
||||
$sql = " select (TO_DAYS('".G5_TIME_YMDHIS."') - TO_DAYS('{$mb['mb_datetime']}') + 1) as days ";
|
||||
$row = sql_fetch($sql);
|
||||
$mb_reg_after = $row['days'];
|
||||
|
||||
$mb_homepage = set_http(get_text(clean_xss_tags($mb['mb_homepage'])));
|
||||
$mb_profile = $mb['mb_profile'] ? conv_content($mb['mb_profile'],0) : '소개 내용이 없습니다.';
|
||||
|
||||
include_once($member_skin_path.'/profile.skin.php');
|
||||
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user