최초 커밋
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 339 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 318 B |
@@ -0,0 +1,292 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 선택옵션으로 인해 셀합치기가 가변적으로 변함
|
||||
$colspan = 5;
|
||||
|
||||
if ($is_checkbox) $colspan++;
|
||||
if ($is_good) $colspan++;
|
||||
if ($is_nogood) $colspan++;
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<!-- 게시판 목록 시작 { -->
|
||||
<div id="bo_list" style="width:<?php echo $width; ?>">
|
||||
|
||||
<!-- 게시판 카테고리 시작 { -->
|
||||
<?php if ($is_category) { ?>
|
||||
<nav id="bo_cate">
|
||||
<h2><?php echo $board['bo_subject'] ?> 카테고리</h2>
|
||||
<ul id="bo_cate_ul">
|
||||
<?php echo $category_option ?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
<!-- } 게시판 카테고리 끝 -->
|
||||
|
||||
<form name="fboardlist" id="fboardlist" action="<?php echo G5_BBS_URL; ?>/board_list_update.php" onsubmit="return fboardlist_submit(this);" method="post">
|
||||
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<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="sca" value="<?php echo $sca ?>">
|
||||
<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="sw" value="">
|
||||
|
||||
<!-- 게시판 페이지 정보 및 버튼 시작 { -->
|
||||
<div id="bo_btn_top">
|
||||
<div id="bo_list_total">
|
||||
<span>Total <?php echo number_format($total_count) ?>건</span>
|
||||
<?php echo $page ?> 페이지
|
||||
</div>
|
||||
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<li>
|
||||
<button type="button" class="btn_bo_sch btn_b01 btn" title="게시판 검색"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">게시판 검색</span></button>
|
||||
</li>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
<?php if ($is_admin == 'super' || $is_auth) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_list_btn btn_b01 btn" title="게시판 리스트 옵션"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<ul class="more_opt is_list_btn">
|
||||
<li><button type="submit" name="btn_submit" value="선택삭제" onclick="document.pressed=this.value"><i class="fa fa-trash-o" aria-hidden="true"></i> 선택삭제</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택복사" onclick="document.pressed=this.value"><i class="fa fa-files-o" aria-hidden="true"></i> 선택복사</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택이동" onclick="document.pressed=this.value"><i class="fa fa-arrows" aria-hidden="true"></i> 선택이동</button></li>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- } 게시판 페이지 정보 및 버튼 끝 -->
|
||||
|
||||
<div class="tbl_head01 tbl_wrap">
|
||||
<table>
|
||||
<caption><?php echo $board['bo_subject'] ?> 목록</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<th scope="col" class="all_chk chk_box">
|
||||
<input type="checkbox" id="chkall" onclick="if (this.checked) all_checked(true); else all_checked(false);" class="selec_chk">
|
||||
<label for="chkall">
|
||||
<span></span>
|
||||
<b class="sound_only">현재 페이지 게시물 전체선택</b>
|
||||
</label>
|
||||
</th>
|
||||
<?php } ?>
|
||||
<th scope="col">번호</th>
|
||||
<th scope="col">제목</th>
|
||||
<th scope="col">글쓴이</th>
|
||||
<th scope="col"><?php echo subject_sort_link('wr_hit', $qstr2, 1) ?>조회 </a></th>
|
||||
<?php if ($is_good) { ?><th scope="col"><?php echo subject_sort_link('wr_good', $qstr2, 1) ?>추천 </a></th><?php } ?>
|
||||
<?php if ($is_nogood) { ?><th scope="col"><?php echo subject_sort_link('wr_nogood', $qstr2, 1) ?>비추천 </a></th><?php } ?>
|
||||
<th scope="col"><?php echo subject_sort_link('wr_datetime', $qstr2, 1) ?>날짜 </a></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
for ($i=0; $i<count($list); $i++) {
|
||||
if ($i%2==0) $lt_class = "even";
|
||||
else $lt_class = "";
|
||||
?>
|
||||
<tr class="<?php if ($list[$i]['is_notice']) echo "bo_notice"; ?> <?php echo $lt_class ?>">
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<td class="td_chk chk_box">
|
||||
<input type="checkbox" name="chk_wr_id[]" value="<?php echo $list[$i]['wr_id'] ?>" id="chk_wr_id_<?php echo $i ?>" class="selec_chk">
|
||||
<label for="chk_wr_id_<?php echo $i ?>">
|
||||
<span></span>
|
||||
<b class="sound_only"><?php echo $list[$i]['subject'] ?></b>
|
||||
</label>
|
||||
</td>
|
||||
<?php } ?>
|
||||
<td class="td_num2">
|
||||
<?php
|
||||
if ($list[$i]['is_notice']) // 공지사항
|
||||
echo '<strong class="notice_icon">공지</strong>';
|
||||
else if ($wr_id == $list[$i]['wr_id'])
|
||||
echo "<span class=\"bo_current\">열람중</span>";
|
||||
else
|
||||
echo $list[$i]['num'];
|
||||
?>
|
||||
</td>
|
||||
|
||||
<td class="td_subject" style="padding-left:<?php echo $list[$i]['reply'] ? (strlen($list[$i]['wr_reply'])*10) : '0'; ?>px">
|
||||
<?php
|
||||
if ($is_category && $list[$i]['ca_name']) {
|
||||
?>
|
||||
<a href="<?php echo $list[$i]['ca_name_href'] ?>" class="bo_cate_link"><?php echo $list[$i]['ca_name'] ?></a>
|
||||
<?php } ?>
|
||||
<div class="bo_tit">
|
||||
<a href="<?php echo $list[$i]['href'] ?>">
|
||||
<?php echo $list[$i]['icon_reply'] ?>
|
||||
<?php
|
||||
if (isset($list[$i]['icon_secret'])) echo rtrim($list[$i]['icon_secret']);
|
||||
?>
|
||||
<?php echo $list[$i]['subject'] ?>
|
||||
</a>
|
||||
<?php
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">N<span class=\"sound_only\">새글</span></span>";
|
||||
// if ($list[$i]['file']['count']) { echo '<'.$list[$i]['file']['count'].'>'; }
|
||||
if (isset($list[$i]['icon_hot'])) echo rtrim($list[$i]['icon_hot']);
|
||||
if (isset($list[$i]['icon_file'])) echo rtrim($list[$i]['icon_file']);
|
||||
if (isset($list[$i]['icon_link'])) echo rtrim($list[$i]['icon_link']);
|
||||
?>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span class="sound_only">댓글</span><span class="cnt_cmt"><?php echo $list[$i]['wr_comment']; ?></span><span class="sound_only">개</span><?php } ?>
|
||||
</div>
|
||||
</td>
|
||||
<td class="td_name sv_use"><?php echo $list[$i]['name'] ?></td>
|
||||
<td class="td_num"><?php echo $list[$i]['wr_hit'] ?></td>
|
||||
<?php if ($is_good) { ?><td class="td_num"><?php echo $list[$i]['wr_good'] ?></td><?php } ?>
|
||||
<?php if ($is_nogood) { ?><td class="td_num"><?php echo $list[$i]['wr_nogood'] ?></td><?php } ?>
|
||||
<td class="td_datetime"><?php echo $list[$i]['datetime2'] ?></td>
|
||||
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php if (count($list) == 0) { echo '<tr><td colspan="'.$colspan.'" class="empty_table">게시물이 없습니다.</td></tr>'; } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- 페이지 -->
|
||||
<?php echo $write_pages; ?>
|
||||
<!-- 페이지 -->
|
||||
|
||||
<?php if ($list_href || $is_checkbox || $write_href) { ?>
|
||||
<div class="bo_fx">
|
||||
<?php if ($list_href || $write_href) { ?>
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</form>
|
||||
|
||||
<!-- 게시판 검색 시작 { -->
|
||||
<div class="bo_sch_wrap">
|
||||
<fieldset class="bo_sch">
|
||||
<h3>검색</h3>
|
||||
<form name="fsearch" method="get">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sop" value="and">
|
||||
<label for="sfl" class="sound_only">검색대상</label>
|
||||
<select name="sfl" id="sfl">
|
||||
<?php echo get_board_sfl_select_options($sfl); ?>
|
||||
</select>
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<div class="sch_bar">
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required id="stx" class="sch_input" size="25" maxlength="20" placeholder=" 검색어를 입력해주세요">
|
||||
<button type="submit" value="검색" class="sch_btn"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>
|
||||
</div>
|
||||
<button type="button" class="bo_sch_cls" title="닫기"><i class="fa fa-times" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<div class="bo_sch_bg"></div>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function($){
|
||||
// 게시판 검색
|
||||
$(".btn_bo_sch").on("click", function() {
|
||||
$(".bo_sch_wrap").toggle();
|
||||
})
|
||||
$('.bo_sch_bg, .bo_sch_cls').click(function(){
|
||||
$('.bo_sch_wrap').hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!-- } 게시판 검색 끝 -->
|
||||
</div>
|
||||
|
||||
<?php if($is_checkbox) { ?>
|
||||
<noscript>
|
||||
<p>자바스크립트를 사용하지 않는 경우<br>별도의 확인 절차 없이 바로 선택삭제 처리하므로 주의하시기 바랍니다.</p>
|
||||
</noscript>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<script>
|
||||
function all_checked(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]")
|
||||
f.elements[i].checked = sw;
|
||||
}
|
||||
}
|
||||
|
||||
function fboardlist_submit(f) {
|
||||
var chk_count = 0;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]" && f.elements[i].checked)
|
||||
chk_count++;
|
||||
}
|
||||
|
||||
if (!chk_count) {
|
||||
alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택복사") {
|
||||
select_copy("copy");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택이동") {
|
||||
select_copy("move");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택삭제") {
|
||||
if (!confirm("선택한 게시물을 정말 삭제하시겠습니까?\n\n한번 삭제한 자료는 복구할 수 없습니다\n\n답변글이 있는 게시글을 선택하신 경우\n답변글도 선택하셔야 게시글이 삭제됩니다."))
|
||||
return false;
|
||||
|
||||
f.removeAttribute("target");
|
||||
f.action = g5_bbs_url+"/board_list_update.php";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 선택한 게시물 복사 및 이동
|
||||
function select_copy(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
if (sw == "copy")
|
||||
str = "복사";
|
||||
else
|
||||
str = "이동";
|
||||
|
||||
var sub_win = window.open("", "move", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
|
||||
f.sw.value = sw;
|
||||
f.target = "move";
|
||||
f.action = g5_bbs_url+"/move.php";
|
||||
f.submit();
|
||||
}
|
||||
|
||||
// 게시판 리스트 관리자 옵션
|
||||
jQuery(function($){
|
||||
$(".btn_more_opt.is_list_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_list_btn").toggle();
|
||||
});
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_list_btn').length) {
|
||||
$(".more_opt.is_list_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 게시판 목록 끝 -->
|
||||
@@ -0,0 +1,341 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_list {position:relative;margin-bottom:20px}
|
||||
#bo_list:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_list .td_board {width:120px;text-align:center}
|
||||
#bo_list .td_chk {width:30px;text-align:center;border-top:1px solid #ecf0f1;border-bottom:1px solid #ecf0f1}
|
||||
#bo_list .td_date {width:60px;text-align:center}
|
||||
#bo_list .td_datetime {width:60px;text-align:center}
|
||||
#bo_list .td_group {width:100px;text-align:center}
|
||||
#bo_list .td_mb_id {width:100px;text-align:center}
|
||||
#bo_list .td_mng {width:80px;text-align:center}
|
||||
#bo_list .td_name {width:90px;text-align:left;padding:10px 0}
|
||||
#bo_list .td_nick {width:100px;text-align:center}
|
||||
#bo_list .td_num {width:50px;text-align:center}
|
||||
#bo_list .td_num2 {width:50px;text-align:center}
|
||||
#bo_list .td_numbig {width:80px;text-align:center}
|
||||
#bo_list .txt_active {color:#5d910b}
|
||||
#bo_list .txt_expired {color:#ccc}
|
||||
#bo_list tbody tr {border-left:2px solid transparent}
|
||||
#bo_list tbody tr:hover {border-left:2px solid #253dbe}
|
||||
#bo_list tbody .even td {background:#fbfbfb}
|
||||
|
||||
#bo_cate {margin:25px 0}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:2px}
|
||||
#bo_cate a {display:block;line-height:28px;padding:5px 15px;border-radius:30px;border:1px solid #d6e9ff;color:#6794d3}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#3a8afd;color:#fff}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#3a8afd;color:#fff;font-weight:bold;border:1px solid #3a8afd;
|
||||
-webkit-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202)}
|
||||
.td_subject img {margin-left:5px}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;color:#676e70}
|
||||
.chk_box input[type="checkbox"] + label:hover {color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {float:left;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px}
|
||||
.write_div .chk_box input[type="checkbox"] + label, .bo_vc_w .chk_box input[type="checkbox"] + label {padding-left:20px}
|
||||
.write_div .chk_box input[type="checkbox"] + label span, .bo_vc_w .chk_box input[type="checkbox"] + label span {position:absolute;top:2px;left:0;width:15px;height:15px;display:block;margin:0;background:#fff;border:1px solid #d0d4df;border-radius:3px}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px}
|
||||
|
||||
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:40px;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:90px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
.bo_cate_link {float:left;display:inline-block;margin-right:10px;background:#e2eaf6;color:#3a8afd;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} /* 글제목줄 분류스타일 */
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_tit {display:block;color:#000;font-weight:bold}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {background:#e9eff5;color:#3a8afd;font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;vertical-align:middle}
|
||||
|
||||
#bo_list .bo_tit .title_icon {margin-right:2px}
|
||||
#bo_list .bo_tit .fa-heart {color:#ff0000}
|
||||
#bo_list .bo_tit .fa-lock {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#4f818c;background:#cbe3e8;text-align:center;border-radius:2px;font-size:12px;border:1px solid #cbe3e8;vertical-align:middle}
|
||||
#bo_list .bo_tit .new_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#23db79;background:#b9ffda;text-align:center;border-radius:2px;margin-left:2px;font-weight:bold;vertical-align:middle}
|
||||
#bo_list .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#ff0000;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
#bo_list .bo_tit .fa-caret-right {color:#bbb}
|
||||
#bo_list .bo_tit .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#daae37;background:#ffefb9;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle}
|
||||
#bo_list .bo_tit .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#b451fd;background:#edd3fd;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:330px;max-height:300px;margin-left:-125px;margin-top:-180px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #d0d3db;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #d0d3db;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)}
|
||||
.bo_sch .sch_input {width:250px;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.1);width:100%;height:100%}
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#e2eaf6;color:#3a8afd;padding:0 10px;border-radius:3px;}
|
||||
#bo_v_title .bo_v_tit {display:block;font-size:2em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:18px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all;background:#fff}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {position:relative;margin:20px 0;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1;float:left;display:inline-block}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {float:left;width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#3a8afd;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:870px;width:90%}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:58px;text-align:right;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block;padding:10px 15px}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:0;margin-right:5px}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:3px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #d0d3db;width:100%;height:40px;border-radius:3px}
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w .btn_cancel {border-radius:3px;font-size:1.167em}
|
||||
@@ -0,0 +1,300 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
|
||||
<!-- 게시물 읽기 시작 { -->
|
||||
|
||||
<article id="bo_v" style="width:<?php echo $width; ?>">
|
||||
<header>
|
||||
<h2 id="bo_v_title">
|
||||
<?php if ($category_name) { ?>
|
||||
<span class="bo_v_cate"><?php echo $view['ca_name']; // 분류 출력 끝 ?></span>
|
||||
<?php } ?>
|
||||
<span class="bo_v_tit">
|
||||
<?php
|
||||
echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력
|
||||
?></span>
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
<section id="bo_v_info">
|
||||
<h2>페이지 정보</h2>
|
||||
<div class="profile_info">
|
||||
<div class="pf_img"><?php echo get_member_profile_img($view['mb_id']) ?></div>
|
||||
<div class="profile_info_ct">
|
||||
<span class="sound_only">작성자</span> <strong><?php echo $view['name'] ?><?php if ($is_ip_view) { echo " ($ip)"; } ?></strong><br>
|
||||
<span class="sound_only">댓글</span><strong><a href="#bo_vc"> <i class="fa fa-commenting-o" aria-hidden="true"></i> <?php echo number_format($view['wr_comment']) ?>건</a></strong>
|
||||
<span class="sound_only">조회</span><strong><i class="fa fa-eye" aria-hidden="true"></i> <?php echo number_format($view['wr_hit']) ?>회</strong>
|
||||
<strong class="if_date"><span class="sound_only">작성일</span><i class="fa fa-clock-o" aria-hidden="true"></i> <?php echo date("y-m-d H:i", strtotime($view['wr_datetime'])) ?></strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 게시물 상단 버튼 시작 { -->
|
||||
<div id="bo_v_top">
|
||||
<?php ob_start(); ?>
|
||||
|
||||
<ul class="btn_bo_user bo_v_com">
|
||||
<li><a href="<?php echo $list_href ?>" class="btn_b01 btn" title="목록"><i class="fa fa-list" aria-hidden="true"></i><span class="sound_only">목록</span></a></li>
|
||||
<?php if ($reply_href) { ?><li><a href="<?php echo $reply_href ?>" class="btn_b01 btn" title="답변"><i class="fa fa-reply" aria-hidden="true"></i><span class="sound_only">답변</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
<?php if($update_href || $delete_href || $copy_href || $move_href || $search_href) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_view_btn btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<ul class="more_opt is_view_btn">
|
||||
<?php if ($update_href) { ?><li><a href="<?php echo $update_href ?>">수정<i class="fa fa-pencil-square-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($delete_href) { ?><li><a href="<?php echo $delete_href ?>" onclick="del(this.href); return false;">삭제<i class="fa fa-trash-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($copy_href) { ?><li><a href="<?php echo $copy_href ?>" onclick="board_move(this.href); return false;">복사<i class="fa fa-files-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($move_href) { ?><li><a href="<?php echo $move_href ?>" onclick="board_move(this.href); return false;">이동<i class="fa fa-arrows" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($search_href) { ?><li><a href="<?php echo $search_href ?>">검색<i class="fa fa-search" aria-hidden="true"></i></a></li><?php } ?>
|
||||
</ul>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<script>
|
||||
|
||||
jQuery(function($){
|
||||
// 게시판 보기 버튼 옵션
|
||||
$(".btn_more_opt.is_view_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_view_btn").toggle();
|
||||
})
|
||||
;
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_view_btn').length) {
|
||||
$(".more_opt.is_view_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
$link_buttons = ob_get_contents();
|
||||
ob_end_flush();
|
||||
?>
|
||||
</div>
|
||||
<!-- } 게시물 상단 버튼 끝 -->
|
||||
</section>
|
||||
|
||||
<section id="bo_v_atc">
|
||||
<h2 id="bo_v_atc_title">본문</h2>
|
||||
<div id="bo_v_share">
|
||||
<?php include_once(G5_SNS_PATH."/view.sns.skin.php"); ?>
|
||||
<?php if ($scrap_href) { ?><a href="<?php echo $scrap_href; ?>" target="_blank" class="btn btn_b03" onclick="win_scrap(this.href); return false;"><i class="fa fa-bookmark" aria-hidden="true"></i> 스크랩</a><?php } ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// 파일 출력
|
||||
$v_img_count = count($view['file']);
|
||||
if($v_img_count) {
|
||||
echo "<div id=\"bo_v_img\">\n";
|
||||
|
||||
foreach($view['file'] as $view_file) {
|
||||
echo get_file_thumbnail($view_file);
|
||||
}
|
||||
|
||||
echo "</div>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- 본문 내용 시작 { -->
|
||||
<div id="bo_v_con"><?php echo get_view_thumbnail($view['content']); ?></div>
|
||||
<?php //echo $view['rich_content']; // {이미지:0} 과 같은 코드를 사용할 경우 ?>
|
||||
<!-- } 본문 내용 끝 -->
|
||||
|
||||
<?php if ($is_signature) { ?><p><?php echo $signature ?></p><?php } ?>
|
||||
|
||||
|
||||
<!-- 추천 비추천 시작 { -->
|
||||
<?php if ( $good_href || $nogood_href) { ?>
|
||||
<div id="bo_v_act">
|
||||
<?php if ($good_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $good_href.'&'.$qstr ?>" id="good_button" class="bo_v_good"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></a>
|
||||
<b id="bo_v_act_good"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($nogood_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $nogood_href.'&'.$qstr ?>" id="nogood_button" class="bo_v_nogood"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></a>
|
||||
<b id="bo_v_act_nogood"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } else {
|
||||
if($board['bo_use_good'] || $board['bo_use_nogood']) {
|
||||
?>
|
||||
<div id="bo_v_act">
|
||||
<?php if($board['bo_use_good']) { ?><span class="bo_v_good"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></span><?php } ?>
|
||||
<?php if($board['bo_use_nogood']) { ?><span class="bo_v_nogood"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></span><?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!-- } 추천 비추천 끝 -->
|
||||
</section>
|
||||
|
||||
<?php
|
||||
$cnt = 0;
|
||||
if ($view['file']['count']) {
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view'])
|
||||
$cnt++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if($cnt) { ?>
|
||||
<!-- 첨부파일 시작 { -->
|
||||
<section id="bo_v_file">
|
||||
<h2>첨부파일</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 가변 파일
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) {
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-folder-open" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download">
|
||||
<strong><?php echo $view['file'][$i]['source'] ?></strong> <?php echo $view['file'][$i]['content'] ?> (<?php echo $view['file'][$i]['size'] ?>)
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_file_cnt"><?php echo $view['file'][$i]['download'] ?>회 다운로드 | DATE : <?php echo $view['file'][$i]['datetime'] ?></span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 첨부파일 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($view['link']) && array_filter($view['link'])) { ?>
|
||||
<!-- 관련링크 시작 { -->
|
||||
<section id="bo_v_link">
|
||||
<h2>관련링크</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 링크
|
||||
$cnt = 0;
|
||||
for ($i=1; $i<=count($view['link']); $i++) {
|
||||
if ($view['link'][$i]) {
|
||||
$cnt++;
|
||||
$link = cut_str($view['link'][$i], 70);
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-link" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['link_href'][$i] ?>" target="_blank">
|
||||
<strong><?php echo $link ?></strong>
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_link_cnt"><?php echo $view['link_hit'][$i] ?>회 연결</span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 관련링크 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($prev_href || $next_href) { ?>
|
||||
<ul class="bo_v_nb">
|
||||
<?php if ($prev_href) { ?><li class="btn_prv"><span class="nb_tit"><i class="fa fa-chevron-up" aria-hidden="true"></i> 이전글</span><a href="<?php echo $prev_href ?>"><?php echo $prev_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($prev_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
<?php if ($next_href) { ?><li class="btn_next"><span class="nb_tit"><i class="fa fa-chevron-down" aria-hidden="true"></i> 다음글</span><a href="<?php echo $next_href ?>"><?php echo $next_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($next_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
// 코멘트 입출력
|
||||
include_once(G5_BBS_PATH.'/view_comment.php');
|
||||
?>
|
||||
</article>
|
||||
<!-- } 게시판 읽기 끝 -->
|
||||
|
||||
<script>
|
||||
<?php if ($board['bo_download_point'] < 0) { ?>
|
||||
$(function() {
|
||||
$("a.view_file_download").click(function() {
|
||||
if(!g5_is_member) {
|
||||
alert("다운로드 권한이 없습니다.\n회원이시라면 로그인 후 이용해 보십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var msg = "파일을 다운로드 하시면 포인트가 차감(<?php echo number_format($board['bo_download_point']) ?>점)됩니다.\n\n포인트는 게시물당 한번만 차감되며 다음에 다시 다운로드 하셔도 중복하여 차감하지 않습니다.\n\n그래도 다운로드 하시겠습니까?";
|
||||
|
||||
if(confirm(msg)) {
|
||||
var href = $(this).attr("href")+"&js=on";
|
||||
$(this).attr("href", href);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
<?php } ?>
|
||||
|
||||
function board_move(href)
|
||||
{
|
||||
window.open(href, "boardmove", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$("a.view_image").click(function() {
|
||||
window.open(this.href, "large_image", "location=yes,links=no,toolbar=no,top=10,left=10,width=10,height=10,resizable=yes,scrollbars=no,status=no");
|
||||
return false;
|
||||
});
|
||||
|
||||
// 추천, 비추천
|
||||
$("#good_button, #nogood_button").click(function() {
|
||||
var $tx;
|
||||
if(this.id == "good_button")
|
||||
$tx = $("#bo_v_act_good");
|
||||
else
|
||||
$tx = $("#bo_v_act_nogood");
|
||||
|
||||
excute_good(this.href, $(this), $tx);
|
||||
return false;
|
||||
});
|
||||
|
||||
// 이미지 리사이즈
|
||||
$("#bo_v_atc").viewimageresize();
|
||||
});
|
||||
|
||||
function excute_good(href, $el, $tx)
|
||||
{
|
||||
$.post(
|
||||
href,
|
||||
{ js: "on" },
|
||||
function(data) {
|
||||
if(data.error) {
|
||||
alert(data.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.count) {
|
||||
$el.find("strong").text(number_format(String(data.count)));
|
||||
if($tx.attr("id").search("nogood") > -1) {
|
||||
$tx.text("이 글을 비추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
} else {
|
||||
$tx.text("이 글을 추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
}
|
||||
}
|
||||
}, "json"
|
||||
);
|
||||
}
|
||||
</script>
|
||||
<!-- } 게시글 읽기 끝 -->
|
||||
@@ -0,0 +1,355 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
?>
|
||||
|
||||
<script>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $comment_min ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
</script>
|
||||
<button type="button" class="cmt_btn"><span class="total"><b>댓글</b> <?php echo $view['wr_comment']; ?></span><span class="cmt_more"></span></button>
|
||||
<!-- 댓글 시작 { -->
|
||||
<section id="bo_vc">
|
||||
<h2>댓글목록</h2>
|
||||
<?php
|
||||
$cmt_amt = count($list);
|
||||
for ($i=0; $i<$cmt_amt; $i++) {
|
||||
$comment_id = $list[$i]['wr_id'];
|
||||
$cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50;
|
||||
$comment = $list[$i]['content'];
|
||||
/*
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$str = $str;
|
||||
}
|
||||
*/
|
||||
$comment = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $comment);
|
||||
$cmt_sv = $cmt_amt - $i + 1; // 댓글 헤더 z-index 재설정 ie8 이하 사이드뷰 겹침 문제 해결
|
||||
$c_reply_href = $comment_common_url.'&c_id='.$comment_id.'&w=c#bo_vc_w';
|
||||
$c_edit_href = $comment_common_url.'&c_id='.$comment_id.'&w=cu#bo_vc_w';
|
||||
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
|
||||
?>
|
||||
|
||||
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
<div class="pf_img"><?php echo get_member_profile_img($list[$i]['mb_id']); ?></div>
|
||||
|
||||
<div class="cm_wrap">
|
||||
|
||||
<header style="z-index:<?php echo $cmt_sv; ?>">
|
||||
<h2><?php echo get_text($list[$i]['wr_name']); ?>님의 <?php if ($cmt_depth) { ?><span class="sound_only">댓글의</span><?php } ?> 댓글</h2>
|
||||
<?php echo $list[$i]['name'] ?>
|
||||
<?php if ($is_ip_view) { ?>
|
||||
<span class="sound_only">아이피</span>
|
||||
<span>(<?php echo $list[$i]['ip']; ?>)</span>
|
||||
<?php } ?>
|
||||
<span class="sound_only">작성일</span>
|
||||
<span class="bo_vc_hdinfo"><i class="fa fa-clock-o" aria-hidden="true"></i> <time datetime="<?php echo date('Y-m-d\TH:i:s+09:00', strtotime($list[$i]['datetime'])) ?>"><?php echo $list[$i]['datetime'] ?></time></span>
|
||||
<?php
|
||||
include(G5_SNS_PATH.'/view_comment_list.sns.skin.php');
|
||||
?>
|
||||
</header>
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="cmt_contents">
|
||||
<p>
|
||||
<?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/icon_secret.gif" alt="비밀글"><?php } ?>
|
||||
<?php echo $comment ?>
|
||||
</p>
|
||||
<?php if($is_comment_reply_edit) {
|
||||
if($w == 'cu') {
|
||||
$sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
|
||||
$cmt = sql_fetch($sql);
|
||||
if (isset($cmt)) {
|
||||
if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) {
|
||||
$cmt['wr_content'] = '';
|
||||
}
|
||||
$c_wr_content = $cmt['wr_content'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<span id="edit_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 수정 -->
|
||||
<span id="reply_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 답변 -->
|
||||
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<textarea id="save_comment_<?php echo $comment_id ?>" style="display:none"><?php echo get_text($list[$i]['content1'], 0) ?></textarea>
|
||||
</div>
|
||||
<?php if($is_comment_reply_edit) { ?>
|
||||
<div class="bo_vl_opt">
|
||||
<button type="button" class="btn_cm_opt btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
|
||||
<ul class="bo_vc_act">
|
||||
<?php if ($list[$i]['is_reply']) { ?><li><a href="<?php echo $c_reply_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'c'); return false;">답변</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_edit']) { ?><li><a href="<?php echo $c_edit_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'cu'); return false;">수정</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a></li><?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<script>
|
||||
$(function() {
|
||||
// 댓글 옵션창 열기
|
||||
$(".btn_cm_opt").on("click", function(){
|
||||
$(this).parent("div").children(".bo_vc_act").show();
|
||||
});
|
||||
|
||||
// 댓글 옵션창 닫기
|
||||
$(document).mouseup(function (e){
|
||||
var container = $(".bo_vc_act");
|
||||
if( container.has(e.target).length === 0)
|
||||
container.hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</article>
|
||||
<?php } ?>
|
||||
<?php if ($i == 0) { //댓글이 없다면 ?><p id="bo_vc_empty">등록된 댓글이 없습니다.</p><?php } ?>
|
||||
|
||||
</section>
|
||||
<!-- } 댓글 끝 -->
|
||||
|
||||
<?php if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
?>
|
||||
<!-- 댓글 쓰기 시작 { -->
|
||||
<aside id="bo_vc_w" class="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" id="fviewcomment" action="<?php echo $comment_action_url; ?>" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<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="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
|
||||
<span class="sound_only">내용</span>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="내용" placeholder="댓글내용을 입력해주세요"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$(document).on("keyup change", "textarea#wr_content[maxlength]", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="bo_vc_w_wr">
|
||||
<div class="bo_vc_w_info">
|
||||
<?php if ($is_guest) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong> 필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo get_cookie("ck_sns_name"); ?>" id="wr_name" required class="frm_input required" size="25" placeholder="이름">
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong> 필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="25" placeholder="비밀번호">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) {
|
||||
?>
|
||||
<span class="sound_only">SNS 동시등록</span>
|
||||
<span id="bo_vc_send_sns"></span>
|
||||
<?php } ?>
|
||||
<?php if ($is_guest) { ?>
|
||||
<?php echo $captcha_html; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="btn_confirm">
|
||||
<span class="secret_cm chk_box">
|
||||
<input type="checkbox" name="wr_secret" value="secret" id="wr_secret" class="selec_chk">
|
||||
<label for="wr_secret"><span></span>비밀글</label>
|
||||
</span>
|
||||
<button type="submit" id="btn_submit" class="btn_submit">댓글등록</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('비밀번호가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
set_comment_token(f);
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id,
|
||||
form_el = 'fviewcomment',
|
||||
respond = document.getElementById(form_el);
|
||||
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).appendChild(respond);
|
||||
//입력값 초기화
|
||||
document.getElementById('wr_content').value = '';
|
||||
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
if(save_before)
|
||||
$("#captcha_reload").trigger("click");
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
|
||||
<?php if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) { ?>
|
||||
|
||||
$(function() {
|
||||
// sns 등록
|
||||
$("#bo_vc_send_sns").load(
|
||||
"<?php echo G5_SNS_URL; ?>/view_comment_write.sns.skin.php?bo_table=<?php echo $bo_table; ?>",
|
||||
function() {
|
||||
save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
}
|
||||
);
|
||||
});
|
||||
<?php } ?>
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 댓글 쓰기 끝 -->
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
//댓글열기
|
||||
$(".cmt_btn").click(function(e){
|
||||
e.preventDefault();
|
||||
$(this).toggleClass("cmt_btn_op");
|
||||
$("#bo_vc").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,255 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<section id="bo_w">
|
||||
<h2 class="sound_only"><?php echo $g5['title'] ?></h2>
|
||||
|
||||
<!-- 게시물 작성/수정 시작 { -->
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
|
||||
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<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 ?>">
|
||||
<?php
|
||||
$option = '';
|
||||
$option_hidden = '';
|
||||
if ($is_notice || $is_html || $is_secret || $is_mail) {
|
||||
$option = '';
|
||||
if ($is_notice) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="notice" name="notice" class="selec_chk" value="1" '.$notice_checked.'>'.PHP_EOL.'<label for="notice"><span></span>공지</label></li>';
|
||||
}
|
||||
if ($is_html) {
|
||||
if ($is_dhtml_editor) {
|
||||
$option_hidden .= '<input type="hidden" value="html1" name="html">';
|
||||
} else {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="html" name="html" onclick="html_auto_br(this);" class="selec_chk" value="'.$html_value.'" '.$html_checked.'>'.PHP_EOL.'<label for="html"><span></span>html</label></li>';
|
||||
}
|
||||
}
|
||||
if ($is_secret) {
|
||||
if ($is_admin || $is_secret==1) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="secret" name="secret" class="selec_chk" value="secret" '.$secret_checked.'>'.PHP_EOL.'<label for="secret"><span></span>비밀글</label></li>';
|
||||
} else {
|
||||
$option_hidden .= '<input type="hidden" name="secret" value="secret">';
|
||||
}
|
||||
}
|
||||
if ($is_mail) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="mail" name="mail" class="selec_chk" value="mail" '.$recv_email_checked.'>'.PHP_EOL.'<label for="mail"><span></span>답변메일받기</label></li>';
|
||||
}
|
||||
}
|
||||
echo $option_hidden;
|
||||
?>
|
||||
|
||||
<?php if ($is_category) { ?>
|
||||
<div class="bo_w_select write_div">
|
||||
<label for="ca_name" class="sound_only">분류<strong>필수</strong></label>
|
||||
<select name="ca_name" id="ca_name" required>
|
||||
<option value="">분류를 선택하세요</option>
|
||||
<?php echo $category_option ?>
|
||||
</select>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_info write_div">
|
||||
<?php if ($is_name) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong>필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo $name ?>" id="wr_name" required class="frm_input half_input required" placeholder="이름">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_password) { ?>
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong>필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" <?php echo $password_required ?> class="frm_input half_input <?php echo $password_required ?>" placeholder="비밀번호">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_email) { ?>
|
||||
<label for="wr_email" class="sound_only">이메일</label>
|
||||
<input type="text" name="wr_email" value="<?php echo $email ?>" id="wr_email" class="frm_input half_input email " placeholder="이메일">
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php if ($is_homepage) { ?>
|
||||
<label for="wr_homepage" class="sound_only">홈페이지</label>
|
||||
<input type="text" name="wr_homepage" value="<?php echo $homepage ?>" id="wr_homepage" class="frm_input half_input" size="50" placeholder="홈페이지">
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<?php if ($option) { ?>
|
||||
<div class="write_div">
|
||||
<span class="sound_only">옵션</span>
|
||||
<ul class="bo_v_option">
|
||||
<?php echo $option ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_tit write_div">
|
||||
<label for="wr_subject" class="sound_only">제목<strong>필수</strong></label>
|
||||
|
||||
<div id="autosave_wrapper" class="write_div">
|
||||
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required class="frm_input full_input required" size="50" maxlength="255" placeholder="제목">
|
||||
<?php if ($is_member) { // 임시 저장된 글 기능 ?>
|
||||
<script src="<?php echo G5_JS_URL; ?>/autosave.js"></script>
|
||||
<?php if($editor_content_js) echo $editor_content_js; ?>
|
||||
<button type="button" id="btn_autosave" class="btn_frmline">임시 저장된 글 (<span id="autosave_count"><?php echo $autosave_count; ?></span>)</button>
|
||||
<div id="autosave_pop">
|
||||
<strong>임시 저장된 글 목록</strong>
|
||||
<ul></ul>
|
||||
<div><button type="button" class="autosave_close">닫기</button></div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_content" class="sound_only">내용<strong>필수</strong></label>
|
||||
<div class="wr_content <?php echo $is_dhtml_editor ? $config['cf_editor'] : ''; ?>">
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<p id="char_count_desc">이 게시판은 최소 <strong><?php echo $write_min; ?></strong>글자 이상, 최대 <strong><?php echo $write_max; ?></strong>글자 이하까지 글을 쓰실 수 있습니다.</p>
|
||||
<?php } ?>
|
||||
<?php echo $editor_html; // 에디터 사용시는 에디터로, 아니면 textarea 로 노출 ?>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<div id="char_count_wrap"><span id="char_count"></span>글자</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<?php for ($i=1; $is_link && $i<=G5_LINK_COUNT; $i++) { ?>
|
||||
<div class="bo_w_link write_div">
|
||||
<label for="wr_link<?php echo $i ?>"><i class="fa fa-link" aria-hidden="true"></i><span class="sound_only"> 링크 #<?php echo $i ?></span></label>
|
||||
<input type="text" name="wr_link<?php echo $i ?>" value="<?php if($w=="u"){ echo $write['wr_link'.$i]; } ?>" id="wr_link<?php echo $i ?>" class="frm_input full_input" size="50">
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php for ($i=0; $is_file && $i<$file_count; $i++) { ?>
|
||||
<div class="bo_w_flie write_div">
|
||||
<div class="file_wr write_div">
|
||||
<label for="bf_file_<?php echo $i+1 ?>" class="lb_icon"><i class="fa fa-folder-open" aria-hidden="true"></i><span class="sound_only"> 파일 #<?php echo $i+1 ?></span></label>
|
||||
<input type="file" name="bf_file[]" id="bf_file_<?php echo $i+1 ?>" title="파일첨부 <?php echo $i+1 ?> : 용량 <?php echo $upload_max_filesize ?> 이하만 업로드 가능" class="frm_file ">
|
||||
</div>
|
||||
<?php if ($is_file_content) { ?>
|
||||
<input type="text" name="bf_content[]" value="<?php echo ($w == 'u') ? $file[$i]['bf_content'] : ''; ?>" title="파일 설명을 입력해주세요." class="full_input frm_input" size="50" placeholder="파일 설명을 입력해주세요.">
|
||||
<?php } ?>
|
||||
|
||||
<?php if($w == 'u' && $file[$i]['file']) { ?>
|
||||
<span class="file_del">
|
||||
<input type="checkbox" id="bf_file_del<?php echo $i ?>" name="bf_file_del[<?php echo $i; ?>]" value="1"> <label for="bf_file_del<?php echo $i ?>"><?php echo $file[$i]['source'].'('.$file[$i]['size'].')'; ?> 파일 삭제</label>
|
||||
</span>
|
||||
<?php } ?>
|
||||
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php if ($is_use_captcha) { //자동등록방지 ?>
|
||||
<div class="write_div">
|
||||
<?php echo $captcha_html ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="btn_confirm write_div">
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn_cancel btn">취소</a>
|
||||
<button type="submit" id="btn_submit" accesskey="s" class="btn_submit btn">작성완료</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $write_min; ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $write_max; ?>); // 최대
|
||||
check_byte("wr_content", "char_count");
|
||||
|
||||
$(function() {
|
||||
$("#wr_content").on("keyup", function() {
|
||||
check_byte("wr_content", "char_count");
|
||||
});
|
||||
});
|
||||
|
||||
<?php } ?>
|
||||
function html_auto_br(obj)
|
||||
{
|
||||
if (obj.checked) {
|
||||
result = confirm("자동 줄바꿈을 하시겠습니까?\n\n자동 줄바꿈은 게시물 내용중 줄바뀐 곳을<br>태그로 변환하는 기능입니다.");
|
||||
if (result)
|
||||
obj.value = "html2";
|
||||
else
|
||||
obj.value = "html1";
|
||||
}
|
||||
else
|
||||
obj.value = "";
|
||||
}
|
||||
|
||||
function fwrite_submit(f)
|
||||
{
|
||||
<?php echo $editor_js; // 에디터 사용시 자바스크립트에서 내용을 폼필드로 넣어주며 내용이 입력되었는지 검사함 ?>
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": f.wr_subject.value,
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (subject) {
|
||||
alert("제목에 금지단어('"+subject+"')가 포함되어있습니다");
|
||||
f.wr_subject.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
if (typeof(ed_wr_content) != "undefined")
|
||||
ed_wr_content.returnFalse();
|
||||
else
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.getElementById("char_count")) {
|
||||
if (char_min > 0 || char_max > 0) {
|
||||
var cnt = parseInt(check_byte("wr_content", "char_count"));
|
||||
if (char_min > 0 && char_min > cnt) {
|
||||
alert("내용은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
else if (char_max > 0 && char_max < cnt) {
|
||||
alert("내용은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<?php echo $captcha_js; // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 ?>
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
</section>
|
||||
<!-- } 게시물 작성/수정 끝 -->
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 62 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 318 B |
@@ -0,0 +1,302 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
|
||||
<!-- 게시판 목록 시작 { -->
|
||||
<div id="bo_gall" style="width:<?php echo $width; ?>">
|
||||
|
||||
<?php if ($is_category) { ?>
|
||||
<nav id="bo_cate">
|
||||
<h2><?php echo $board['bo_subject'] ?> 카테고리</h2>
|
||||
<ul id="bo_cate_ul">
|
||||
<?php echo $category_option ?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
|
||||
<form name="fboardlist" id="fboardlist" action="<?php echo G5_BBS_URL; ?>/board_list_update.php" onsubmit="return fboardlist_submit(this);" method="post">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<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="sw" value="">
|
||||
|
||||
<!-- 게시판 페이지 정보 및 버튼 시작 { -->
|
||||
<div id="bo_btn_top">
|
||||
<div id="bo_list_total">
|
||||
<span>Total <?php echo number_format($total_count) ?>건</span>
|
||||
<?php echo $page ?> 페이지
|
||||
</div>
|
||||
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<li>
|
||||
<button type="button" class="btn_bo_sch btn_b01 btn" title="게시판 검색"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">게시판 검색</span></button>
|
||||
</li>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
<?php if ($is_admin == 'super' || $is_auth) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_list_btn btn_b01 btn" title="게시판 리스트 옵션"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<ul class="more_opt is_list_btn">
|
||||
<li><button type="submit" name="btn_submit" value="선택삭제" onclick="document.pressed=this.value"><i class="fa fa-trash-o" aria-hidden="true"></i> 선택삭제</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택복사" onclick="document.pressed=this.value"><i class="fa fa-files-o" aria-hidden="true"></i> 선택복사</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택이동" onclick="document.pressed=this.value"><i class="fa fa-arrows" aria-hidden="true"></i> 선택이동</button></li>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- } 게시판 페이지 정보 및 버튼 끝 -->
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div id="gall_allchk" class="all_chk chk_box">
|
||||
<input type="checkbox" id="chkall" onclick="if (this.checked) all_checked(true); else all_checked(false);" class="selec_chk">
|
||||
<label for="chkall">
|
||||
<span></span>
|
||||
<b class="sound_only">현재 페이지 게시물 </b> 전체선택
|
||||
</label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<ul id="gall_ul" class="gall_row">
|
||||
<?php for ($i=0; $i<count($list); $i++) {
|
||||
|
||||
$classes = array();
|
||||
|
||||
$classes[] = 'gall_li';
|
||||
$classes[] = 'col-gn-'.$bo_gallery_cols;
|
||||
|
||||
if( $i && ($i % $bo_gallery_cols == 0) ){
|
||||
$classes[] = 'box_clear';
|
||||
}
|
||||
|
||||
if( $wr_id && $wr_id == $list[$i]['wr_id'] ){
|
||||
$classes[] = 'gall_now';
|
||||
}
|
||||
|
||||
$line_height_style = ($board['bo_gallery_height'] > 0) ? 'line-height:'.$board['bo_gallery_height'].'px' : '';
|
||||
?>
|
||||
<li class="<?php echo implode(' ', $classes); ?>">
|
||||
<div class="gall_box">
|
||||
<div class="gall_chk chk_box">
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<input type="checkbox" name="chk_wr_id[]" value="<?php echo $list[$i]['wr_id'] ?>" id="chk_wr_id_<?php echo $i ?>" class="selec_chk">
|
||||
<label for="chk_wr_id_<?php echo $i ?>">
|
||||
<span></span>
|
||||
<b class="sound_only"><?php echo $list[$i]['subject'] ?></b>
|
||||
</label>
|
||||
|
||||
<?php } ?>
|
||||
<span class="sound_only">
|
||||
<?php
|
||||
if ($wr_id == $list[$i]['wr_id'])
|
||||
echo "<span class=\"bo_current\">열람중</span>";
|
||||
else
|
||||
echo $list[$i]['num'];
|
||||
?>
|
||||
</span>
|
||||
</div>
|
||||
<div class="gall_con">
|
||||
<div class="gall_img" style="<?php if ($board['bo_gallery_height'] > 0) echo 'height:'.$board['bo_gallery_height'].'px;max-height:'.$board['bo_gallery_height'].'px'; ?>">
|
||||
<a href="<?php echo $list[$i]['href'] ?>">
|
||||
<?php
|
||||
if ($list[$i]['is_notice']) { // 공지사항 ?>
|
||||
<span class="is_notice" style="<?php echo $line_height_style; ?>">공지</span>
|
||||
<?php } else {
|
||||
$thumb = get_list_thumbnail($board['bo_table'], $list[$i]['wr_id'], $board['bo_gallery_width'], $board['bo_gallery_height'], false, true);
|
||||
|
||||
if($thumb['src']) {
|
||||
$img_content = '<img src="'.$thumb['src'].'" alt="'.$thumb['alt'].'" >';
|
||||
} else {
|
||||
$img_content = '<span class="no_image" style="'.$line_height_style.'">no image</span>';
|
||||
}
|
||||
|
||||
echo run_replace('thumb_image_tag', $img_content, $thumb);
|
||||
}
|
||||
?>
|
||||
</a>
|
||||
</div>
|
||||
<div class="gall_text_href">
|
||||
<?php if ($is_category && $list[$i]['ca_name']) { ?>
|
||||
<a href="<?php echo $list[$i]['ca_name_href'] ?>" class="bo_cate_link"><?php echo $list[$i]['ca_name'] ?></a>
|
||||
<?php } ?>
|
||||
<a href="<?php echo $list[$i]['href'] ?>" class="bo_tit">
|
||||
|
||||
<?php // echo $list[$i]['icon_reply']; ?>
|
||||
<!-- 갤러리 댓글기능 사용시 주석을 제거하세요. -->
|
||||
|
||||
<?php echo $list[$i]['subject'] ?>
|
||||
<?php
|
||||
// if ($list[$i]['file']['count']) { echo '<'.$list[$i]['file']['count'].'>'; }
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">N<span class=\"sound_only\">새글</span></span>";
|
||||
if (isset($list[$i]['icon_hot'])) echo rtrim($list[$i]['icon_hot']);
|
||||
//if (isset($list[$i]['icon_file'])) echo rtrim($list[$i]['icon_file']);
|
||||
//if (isset($list[$i]['icon_link'])) echo rtrim($list[$i]['icon_link']);
|
||||
if (isset($list[$i]['icon_secret'])) echo rtrim($list[$i]['icon_secret']);
|
||||
?>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span class="sound_only">댓글</span><span class="cnt_cmt"><?php echo $list[$i]['wr_comment']; ?></span><span class="sound_only">개</span><?php } ?>
|
||||
</a>
|
||||
<span class="bo_cnt"><?php echo utf8_strcut(strip_tags($list[$i]['wr_content']), 68, '..'); ?></span>
|
||||
</div>
|
||||
|
||||
<div class="gall_info">
|
||||
<span class="sound_only">작성자 </span><?php echo $list[$i]['name'] ?>
|
||||
<span class="gall_date"><span class="sound_only">작성일 </span><i class="fa fa-clock-o" aria-hidden="true"></i> <?php echo $list[$i]['datetime2'] ?></span>
|
||||
<span class="gall_view"><span class="sound_only">조회 </span><i class="fa fa-eye" aria-hidden="true"></i> <?php echo $list[$i]['wr_hit'] ?></span>
|
||||
</div>
|
||||
<div class="gall_option">
|
||||
<?php if ($is_good) { ?><span class="sound_only">추천</span><strong><i class="fa fa-thumbs-o-up" aria-hidden="true"></i> <?php echo $list[$i]['wr_good'] ?></strong><?php } ?>
|
||||
<?php if ($is_nogood) { ?><span class="sound_only">비추천</span><strong><i class="fa fa-thumbs-o-down" aria-hidden="true"></i> <?php echo $list[$i]['wr_nogood'] ?></strong><?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if (count($list) == 0) { echo "<li class=\"empty_list\">게시물이 없습니다.</li>"; } ?>
|
||||
</ul>
|
||||
|
||||
<!-- 페이지 -->
|
||||
<?php echo $write_pages; ?>
|
||||
<!-- 페이지 -->
|
||||
|
||||
<?php if ($list_href || $is_checkbox || $write_href) { ?>
|
||||
<div class="bo_fx">
|
||||
<?php if ($list_href || $write_href) { ?>
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</form>
|
||||
|
||||
<!-- 게시판 검색 시작 { -->
|
||||
<div class="bo_sch_wrap">
|
||||
<fieldset class="bo_sch">
|
||||
<h3>검색</h3>
|
||||
<form name="fsearch" method="get">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sop" value="and">
|
||||
<label for="sfl" class="sound_only">검색대상</label>
|
||||
<select name="sfl" id="sfl">
|
||||
<?php echo get_board_sfl_select_options($sfl); ?>
|
||||
</select>
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<div class="sch_bar">
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required id="stx" class="sch_input" size="25" maxlength="20" placeholder="검색어를 입력해주세요">
|
||||
<button type="submit" value="검색" class="sch_btn"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>
|
||||
</div>
|
||||
<button type="button" class="bo_sch_cls"><i class="fa fa-times" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<div class="bo_sch_bg"></div>
|
||||
</div>
|
||||
<script>
|
||||
// 게시판 검색
|
||||
$(".btn_bo_sch").on("click", function() {
|
||||
$(".bo_sch_wrap").toggle();
|
||||
})
|
||||
$('.bo_sch_bg, .bo_sch_cls').click(function(){
|
||||
$('.bo_sch_wrap').hide();
|
||||
});
|
||||
</script>
|
||||
<!-- } 게시판 검색 끝 -->
|
||||
</div>
|
||||
|
||||
<?php if($is_checkbox) { ?>
|
||||
<noscript>
|
||||
<p>자바스크립트를 사용하지 않는 경우<br>별도의 확인 절차 없이 바로 선택삭제 처리하므로 주의하시기 바랍니다.</p>
|
||||
</noscript>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<script>
|
||||
function all_checked(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]")
|
||||
f.elements[i].checked = sw;
|
||||
}
|
||||
}
|
||||
|
||||
function fboardlist_submit(f) {
|
||||
var chk_count = 0;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]" && f.elements[i].checked)
|
||||
chk_count++;
|
||||
}
|
||||
|
||||
if (!chk_count) {
|
||||
alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택복사") {
|
||||
select_copy("copy");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택이동") {
|
||||
select_copy("move");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택삭제") {
|
||||
if (!confirm("선택한 게시물을 정말 삭제하시겠습니까?\n\n한번 삭제한 자료는 복구할 수 없습니다\n\n답변글이 있는 게시글을 선택하신 경우\n답변글도 선택하셔야 게시글이 삭제됩니다."))
|
||||
return false;
|
||||
|
||||
f.removeAttribute("target");
|
||||
f.action = g5_bbs_url+"/board_list_update.php";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 선택한 게시물 복사 및 이동
|
||||
function select_copy(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
if (sw == 'copy')
|
||||
str = "복사";
|
||||
else
|
||||
str = "이동";
|
||||
|
||||
var sub_win = window.open("", "move", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
|
||||
f.sw.value = sw;
|
||||
f.target = "move";
|
||||
f.action = g5_bbs_url+"/move.php";
|
||||
f.submit();
|
||||
}
|
||||
|
||||
// 게시판 리스트 관리자 옵션
|
||||
jQuery(function($){
|
||||
$(".btn_more_opt.is_list_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_list_btn").toggle();
|
||||
});
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_list_btn').length) {
|
||||
$(".more_opt.is_list_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 게시판 목록 끝 -->
|
||||
@@ -0,0 +1,375 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_cate {margin:25px 0}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:2px}
|
||||
#bo_cate a {display:block;line-height:28px;padding:5px 15px;border-radius:30px;border:1px solid #d6e9ff;color:#6794d3}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#3a8afd;color:#fff}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#3a8afd;color:#fff;font-weight:bold;border:1px solid #3a8afd;
|
||||
-webkit-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202)}
|
||||
.td_subject img {margin-left:3px}
|
||||
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;padding-left:20px;color:#676e70;vertical-align:baseline}
|
||||
.chk_box input[type="checkbox"] + label:hover{color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {position:absolute;top:10px;left:10px;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px}
|
||||
.write_div .chk_box input[type="checkbox"] + label, .bo_vc_w .chk_box input[type="checkbox"] + label {padding-left:20px}
|
||||
.write_div .chk_box input[type="checkbox"] + label span, .bo_vc_w .chk_box input[type="checkbox"] + label span {position:absolute;top:2px;left:0;width:15px;height:15px;display:block;margin:0;background:#fff;border:1px solid #d0d4df;border-radius:3px}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px}
|
||||
.all_chk.chk_box input[type="checkbox"] + label span {top:0;left:0}
|
||||
|
||||
|
||||
/* 갤러리 목록 */
|
||||
#bo_gall h2 {margin:0;padding:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_gall #gall_ul {margin:10px -10px 0;padding:0;list-style:none;zoom:1}
|
||||
#bo_gall #gall_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_gall .gall_li {}
|
||||
#bo_gall .gall_li .gall_chk {position:absolute;top:0;left:0;padding:5px;z-index:1}
|
||||
#bo_gall .gall_box {position:relative;margin:0 0 50px 0;border-radius:0 0 2px 2px}
|
||||
#bo_gall .gall_con {position:relative}
|
||||
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1,.gall_row .col-gn-2,.gall_row .col-gn-3,.gall_row .col-gn-4,.gall_row .col-gn-5,.gall_row .col-gn-6,.gall_row .col-gn-7,.gall_row .col-gn-8,.gall_row .col-gn-9,.gall_row .col-gn-10 {position:relative;min-height:1px;padding-left:10px;*padding-left:0;padding-right:10px;*padding-right:0;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0}
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1 {width:100%}
|
||||
.gall_row .col-gn-2 {width:50%}
|
||||
.gall_row .col-gn-3 {width:33.33333333%}
|
||||
.gall_row .col-gn-4 {width:25%}
|
||||
.gall_row .col-gn-5 {width:20%}
|
||||
.gall_row .col-gn-6 {width:16.66666667%}
|
||||
.gall_row .col-gn-7 {width:14.28571428%}
|
||||
.gall_row .col-gn-8 {width:12.5%}
|
||||
.gall_row .col-gn-9 {width:11.11111111%}
|
||||
.gall_row .col-gn-10 {width:10%}
|
||||
|
||||
.gall_row .box_clear {clear:both}
|
||||
|
||||
#bo_gall .gall_now .gall_text_href a {color:#ff3061}
|
||||
|
||||
#bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none}
|
||||
#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center;overflow:hidden}
|
||||
#bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block}
|
||||
#bo_gall .gall_img img, #bo_gall .gall_img video {max-width:100%;height:auto !important}
|
||||
#bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777}
|
||||
|
||||
#bo_gall .gall_text_href {margin:10px 0}
|
||||
#bo_gall .gall_text_href a {font-weight:bold}
|
||||
#bo_gall .gall_text_href img {margin:0 0 0 4px}
|
||||
#bo_gall .bo_tit {display:block;line-height:30px;font-weight:bold;color:#000;font-size:1.2em}
|
||||
#bo_gall .bo_tit .cnt_cmt {background:#e9eff5;color:#3a8afd;font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;vertical-align:middle}
|
||||
|
||||
#bo_gall .bo_cnt {color:#acacac;line-height:18px}
|
||||
#bo_gall .profile_img img {border-radius:50%}
|
||||
#bo_gall .bo_tit .fa-download {width:16px;height:16px;line-height:16px;background:#e89f31;color:#fff;text-align:center;font-size:10px;border-radius:2px;margin-right:2px;vertical-align:middle}
|
||||
#bo_gall .bo_tit .fa-link {width:16px;height:16px;line-height:16px;background:#ad68d8;color:#fff;text-align:center;font-size:10px;border-radius:2px;margin-right:2px;vertical-align:middle;font-weight:normal}
|
||||
#bo_gall .bo_tit .fa-link {width:16px;height:16px;line-height:16px;background:#ad68d8;color:#fff;text-align:center;font-size:10px;border-radius:2px;margin-right:2px;vertical-align:middle;margin-right:2px}
|
||||
#bo_gall .bo_tit .new_icon {display:inline-block;width:16px;line-height:16px;font-size:0.825em;color:#23db79;background:#b9ffda;text-align:center;border-radius:2px;margin-left:2px;font-weight:bold;vertical-align:baseline}
|
||||
#bo_gall .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#fff;background:#e52955;text-align:center;border-radius:2px;vertical-align:middle;margin-right:2px}
|
||||
#bo_gall .bo_tit .fa-lock {display:inline-block;line-height:16px;color:#999;text-align:center;vertical-align:middle}
|
||||
|
||||
#bo_gall .gall_info {line-height:1.5em;line-height:20px}
|
||||
#bo_gall .gall_info strong {display:inline-block;margin:0}
|
||||
#bo_gall .gall_info i {font-size:12px}
|
||||
#bo_gall .gall_info .gall_date,
|
||||
#bo_gall .gall_info .gall_view {display:inline-block;margin-left:10px;color:#777}
|
||||
|
||||
#bo_gall .gall_option {position:absolute;top:10px;right:10px}
|
||||
#bo_gall .gall_option strong {background:#fff;padding:5px 10px;border-radius:30px;-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:40px;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:90px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
.bo_cate_link {display:inline-block;background:#e2eaf6;color:#3a8afd;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} /* 글제목줄 분류스타일 */
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img {display:inline-block;margin-right:5px}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {display:inline-block;margin:0 0 0 3px;font-weight:bold;color:#ed6478;font-size:0.86em}
|
||||
|
||||
#bo_gall li.empty_list {padding:85px 0;text-align:center}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:330px;max-height:300px;margin-left:-125px;margin-top:-180px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #d0d3db;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #d0d3db;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)}
|
||||
.bo_sch .sch_input {width:250px;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.1);width:100%;height:100%}
|
||||
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#e2eaf6;color:#3a8afd;padding:0 10px;border-radius:3px;}
|
||||
#bo_v_title .bo_v_tit {display:block;font-size:2em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:18px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {margin:20px 0;position:relative;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1;float:left;display:inline-block}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {float:left;width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#3a8afd;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:870px;width:90%}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:58px;text-align:right;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block;padding:10px 15px}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:0;margin-right:5px}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:3px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #d0d3db;width:100%;height:40px;border-radius:3px}
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w .btn_cancel {border-radius:3px;font-size:1.167em}
|
||||
@@ -0,0 +1,300 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
|
||||
<!-- 게시물 읽기 시작 { -->
|
||||
|
||||
<article id="bo_v" style="width:<?php echo $width; ?>">
|
||||
<header>
|
||||
<h2 id="bo_v_title">
|
||||
<?php if ($category_name) { ?>
|
||||
<span class="bo_v_cate"><?php echo $view['ca_name']; // 분류 출력 끝 ?></span>
|
||||
<?php } ?>
|
||||
<span class="bo_v_tit">
|
||||
<?php
|
||||
echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력
|
||||
?></span>
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
<section id="bo_v_info">
|
||||
<h2>페이지 정보</h2>
|
||||
<div class="profile_info">
|
||||
<div class="pf_img"><?php echo get_member_profile_img($view['mb_id']) ?></div>
|
||||
<div class="profile_info_ct">
|
||||
<span class="sound_only">작성자</span> <strong><?php echo $view['name'] ?><?php if ($is_ip_view) { echo " ($ip)"; } ?></strong><br>
|
||||
<span class="sound_only">댓글</span><strong><a href="#bo_vc"> <i class="fa fa-commenting-o" aria-hidden="true"></i> <?php echo number_format($view['wr_comment']) ?>건</a></strong>
|
||||
<span class="sound_only">조회</span><strong><i class="fa fa-eye" aria-hidden="true"></i> <?php echo number_format($view['wr_hit']) ?>회</strong>
|
||||
<strong class="if_date"><span class="sound_only">작성일</span><i class="fa fa-clock-o" aria-hidden="true"></i> <?php echo date("y-m-d H:i", strtotime($view['wr_datetime'])) ?></strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 게시물 상단 버튼 시작 { -->
|
||||
<div id="bo_v_top">
|
||||
<?php ob_start(); ?>
|
||||
|
||||
<ul class="btn_bo_user bo_v_com">
|
||||
<li><a href="<?php echo $list_href ?>" class="btn_b01 btn" title="목록"><i class="fa fa-list" aria-hidden="true"></i><span class="sound_only">목록</span></a></li>
|
||||
<?php if ($reply_href) { ?><li><a href="<?php echo $reply_href ?>" class="btn_b01 btn" title="답변"><i class="fa fa-reply" aria-hidden="true"></i><span class="sound_only">답변</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
<?php if($update_href || $delete_href || $copy_href || $move_href || $search_href) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_view_btn btn_b01 btn" title="게시판 리스트 옵션"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<ul class="more_opt is_view_btn">
|
||||
<?php if ($update_href) { ?><li><a href="<?php echo $update_href ?>">수정<i class="fa fa-pencil-square-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($delete_href) { ?><li><a href="<?php echo $delete_href ?>" onclick="del(this.href); return false;">삭제<i class="fa fa-trash-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($copy_href) { ?><li><a href="<?php echo $copy_href ?>" onclick="board_move(this.href); return false;">복사<i class="fa fa-files-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($move_href) { ?><li><a href="<?php echo $move_href ?>" onclick="board_move(this.href); return false;">이동<i class="fa fa-arrows" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($search_href) { ?><li><a href="<?php echo $search_href ?>">검색<i class="fa fa-search" aria-hidden="true"></i></a></li><?php } ?>
|
||||
</ul>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<script>
|
||||
|
||||
jQuery(function($){
|
||||
// 게시판 보기 버튼 옵션
|
||||
$(".btn_more_opt.is_view_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_view_btn").toggle();
|
||||
})
|
||||
;
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_view_btn').length) {
|
||||
$(".more_opt.is_view_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
$link_buttons = ob_get_contents();
|
||||
ob_end_flush();
|
||||
?>
|
||||
</div>
|
||||
<!-- } 게시물 상단 버튼 끝 -->
|
||||
</section>
|
||||
|
||||
<section id="bo_v_atc">
|
||||
<h2 id="bo_v_atc_title">본문</h2>
|
||||
<div id="bo_v_share">
|
||||
<?php include_once(G5_SNS_PATH."/view.sns.skin.php"); ?>
|
||||
<?php if ($scrap_href) { ?><a href="<?php echo $scrap_href; ?>" target="_blank" class="btn btn_b03" onclick="win_scrap(this.href); return false;"><i class="fa fa-bookmark" aria-hidden="true"></i> 스크랩</a><?php } ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// 파일 출력
|
||||
$v_img_count = count($view['file']);
|
||||
if($v_img_count) {
|
||||
echo "<div id=\"bo_v_img\">\n";
|
||||
|
||||
foreach($view['file'] as $view_file) {
|
||||
echo get_file_thumbnail($view_file);
|
||||
}
|
||||
|
||||
echo "</div>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- 본문 내용 시작 { -->
|
||||
<div id="bo_v_con"><?php echo get_view_thumbnail($view['content']); ?></div>
|
||||
<?php //echo $view['rich_content']; // {이미지:0} 과 같은 코드를 사용할 경우 ?>
|
||||
<!-- } 본문 내용 끝 -->
|
||||
|
||||
<?php if ($is_signature) { ?><p><?php echo $signature ?></p><?php } ?>
|
||||
|
||||
|
||||
<!-- 추천 비추천 시작 { -->
|
||||
<?php if ( $good_href || $nogood_href) { ?>
|
||||
<div id="bo_v_act">
|
||||
<?php if ($good_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $good_href.'&'.$qstr ?>" id="good_button" class="bo_v_good"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></a>
|
||||
<b id="bo_v_act_good"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($nogood_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $nogood_href.'&'.$qstr ?>" id="nogood_button" class="bo_v_nogood"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></a>
|
||||
<b id="bo_v_act_nogood"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } else {
|
||||
if($board['bo_use_good'] || $board['bo_use_nogood']) {
|
||||
?>
|
||||
<div id="bo_v_act">
|
||||
<?php if($board['bo_use_good']) { ?><span class="bo_v_good"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></span><?php } ?>
|
||||
<?php if($board['bo_use_nogood']) { ?><span class="bo_v_nogood"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></span><?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!-- } 추천 비추천 끝 -->
|
||||
</section>
|
||||
|
||||
<?php
|
||||
$cnt = 0;
|
||||
if ($view['file']['count']) {
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view'])
|
||||
$cnt++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if($cnt) { ?>
|
||||
<!-- 첨부파일 시작 { -->
|
||||
<section id="bo_v_file">
|
||||
<h2>첨부파일</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 가변 파일
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) {
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-folder-open" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download">
|
||||
<strong><?php echo $view['file'][$i]['source'] ?></strong> <?php echo $view['file'][$i]['content'] ?> (<?php echo $view['file'][$i]['size'] ?>)
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_file_cnt"><?php echo $view['file'][$i]['download'] ?>회 다운로드 | DATE : <?php echo $view['file'][$i]['datetime'] ?></span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 첨부파일 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($view['link']) && array_filter($view['link'])) { ?>
|
||||
<!-- 관련링크 시작 { -->
|
||||
<section id="bo_v_link">
|
||||
<h2>관련링크</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 링크
|
||||
$cnt = 0;
|
||||
for ($i=1; $i<=count($view['link']); $i++) {
|
||||
if ($view['link'][$i]) {
|
||||
$cnt++;
|
||||
$link = cut_str($view['link'][$i], 70);
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-link" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['link_href'][$i] ?>" target="_blank">
|
||||
<strong><?php echo $link ?></strong>
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_link_cnt"><?php echo $view['link_hit'][$i] ?>회 연결</span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 관련링크 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($prev_href || $next_href) { ?>
|
||||
<ul class="bo_v_nb">
|
||||
<?php if ($prev_href) { ?><li class="btn_prv"><span class="nb_tit"><i class="fa fa-chevron-up" aria-hidden="true"></i> 이전글</span><a href="<?php echo $prev_href ?>"><?php echo $prev_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($prev_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
<?php if ($next_href) { ?><li class="btn_next"><span class="nb_tit"><i class="fa fa-chevron-down" aria-hidden="true"></i> 다음글</span><a href="<?php echo $next_href ?>"><?php echo $next_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($next_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
// 코멘트 입출력
|
||||
include_once(G5_BBS_PATH.'/view_comment.php');
|
||||
?>
|
||||
</article>
|
||||
<!-- } 게시판 읽기 끝 -->
|
||||
|
||||
<script>
|
||||
<?php if ($board['bo_download_point'] < 0) { ?>
|
||||
$(function() {
|
||||
$("a.view_file_download").click(function() {
|
||||
if(!g5_is_member) {
|
||||
alert("다운로드 권한이 없습니다.\n회원이시라면 로그인 후 이용해 보십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var msg = "파일을 다운로드 하시면 포인트가 차감(<?php echo number_format($board['bo_download_point']) ?>점)됩니다.\n\n포인트는 게시물당 한번만 차감되며 다음에 다시 다운로드 하셔도 중복하여 차감하지 않습니다.\n\n그래도 다운로드 하시겠습니까?";
|
||||
|
||||
if(confirm(msg)) {
|
||||
var href = $(this).attr("href")+"&js=on";
|
||||
$(this).attr("href", href);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
<?php } ?>
|
||||
|
||||
function board_move(href)
|
||||
{
|
||||
window.open(href, "boardmove", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$("a.view_image").click(function() {
|
||||
window.open(this.href, "large_image", "location=yes,links=no,toolbar=no,top=10,left=10,width=10,height=10,resizable=yes,scrollbars=no,status=no");
|
||||
return false;
|
||||
});
|
||||
|
||||
// 추천, 비추천
|
||||
$("#good_button, #nogood_button").click(function() {
|
||||
var $tx;
|
||||
if(this.id == "good_button")
|
||||
$tx = $("#bo_v_act_good");
|
||||
else
|
||||
$tx = $("#bo_v_act_nogood");
|
||||
|
||||
excute_good(this.href, $(this), $tx);
|
||||
return false;
|
||||
});
|
||||
|
||||
// 이미지 리사이즈
|
||||
$("#bo_v_atc").viewimageresize();
|
||||
});
|
||||
|
||||
function excute_good(href, $el, $tx)
|
||||
{
|
||||
$.post(
|
||||
href,
|
||||
{ js: "on" },
|
||||
function(data) {
|
||||
if(data.error) {
|
||||
alert(data.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.count) {
|
||||
$el.find("strong").text(number_format(String(data.count)));
|
||||
if($tx.attr("id").search("nogood") > -1) {
|
||||
$tx.text("이 글을 비추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
} else {
|
||||
$tx.text("이 글을 추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
}
|
||||
}
|
||||
}, "json"
|
||||
);
|
||||
}
|
||||
</script>
|
||||
<!-- } 게시글 읽기 끝 -->
|
||||
@@ -0,0 +1,356 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
?>
|
||||
|
||||
<script>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $comment_min ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
</script>
|
||||
<button type="button" class="cmt_btn"><span class="total"><b>댓글</b> <?php echo $view['wr_comment']; ?></span><span class="cmt_more"></span></button>
|
||||
<!-- 댓글 시작 { -->
|
||||
<section id="bo_vc">
|
||||
<h2>댓글목록</h2>
|
||||
<?php
|
||||
$cmt_amt = count($list);
|
||||
for ($i=0; $i<$cmt_amt; $i++) {
|
||||
$comment_id = $list[$i]['wr_id'];
|
||||
$cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50;
|
||||
$comment = $list[$i]['content'];
|
||||
/*
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$str = $str;
|
||||
}
|
||||
*/
|
||||
$comment = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $comment);
|
||||
$cmt_sv = $cmt_amt - $i + 1; // 댓글 헤더 z-index 재설정 ie8 이하 사이드뷰 겹침 문제 해결
|
||||
$c_reply_href = $comment_common_url.'&c_id='.$comment_id.'&w=c#bo_vc_w';
|
||||
$c_edit_href = $comment_common_url.'&c_id='.$comment_id.'&w=cu#bo_vc_w';
|
||||
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
|
||||
?>
|
||||
|
||||
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
<div class="pf_img"><?php echo get_member_profile_img($list[$i]['mb_id']) ?></div>
|
||||
|
||||
<div class="cm_wrap">
|
||||
|
||||
<header style="z-index:<?php echo $cmt_sv; ?>">
|
||||
<h2><?php echo get_text($list[$i]['wr_name']); ?>님의 <?php if ($cmt_depth) { ?><span class="sound_only">댓글의</span><?php } ?> 댓글</h2>
|
||||
<?php echo $list[$i]['name'] ?>
|
||||
<?php if ($is_ip_view) { ?>
|
||||
<span class="sound_only">아이피</span>
|
||||
<span>(<?php echo $list[$i]['ip']; ?>)</span>
|
||||
<?php } ?>
|
||||
<span class="sound_only">작성일</span>
|
||||
<span class="bo_vc_hdinfo"><i class="fa fa-clock-o" aria-hidden="true"></i> <time datetime="<?php echo date('Y-m-d\TH:i:s+09:00', strtotime($list[$i]['datetime'])) ?>"><?php echo $list[$i]['datetime'] ?></time></span>
|
||||
<?php
|
||||
include(G5_SNS_PATH.'/view_comment_list.sns.skin.php');
|
||||
?>
|
||||
</header>
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="cmt_contents">
|
||||
<p>
|
||||
<?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/icon_secret.gif" alt="비밀글"><?php } ?>
|
||||
<?php echo $comment ?>
|
||||
</p>
|
||||
<?php if($is_comment_reply_edit) {
|
||||
if($w == 'cu') {
|
||||
$sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
|
||||
$cmt = sql_fetch($sql);
|
||||
if (isset($cmt)) {
|
||||
if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) {
|
||||
$cmt['wr_content'] = '';
|
||||
}
|
||||
$c_wr_content = $cmt['wr_content'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<span id="edit_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 수정 -->
|
||||
<span id="reply_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 답변 -->
|
||||
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<textarea id="save_comment_<?php echo $comment_id ?>" style="display:none"><?php echo get_text($list[$i]['content1'], 0) ?></textarea>
|
||||
</div>
|
||||
<?php if($is_comment_reply_edit) { ?>
|
||||
<div class="bo_vl_opt">
|
||||
<button type="button" class="btn_cm_opt btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
|
||||
<ul class="bo_vc_act">
|
||||
<?php if ($list[$i]['is_reply']) { ?><li><a href="<?php echo $c_reply_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'c'); return false;">답변</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_edit']) { ?><li><a href="<?php echo $c_edit_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'cu'); return false;">수정</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a></li><?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<script>
|
||||
$(function() {
|
||||
// 댓글 옵션창 열기
|
||||
$(".btn_cm_opt").on("click", function(){
|
||||
$(this).parent("div").children(".bo_vc_act").show();
|
||||
});
|
||||
|
||||
// 댓글 옵션창 닫기
|
||||
$(document).mouseup(function (e){
|
||||
var container = $(".bo_vc_act");
|
||||
if( container.has(e.target).length === 0)
|
||||
container.hide();
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</article>
|
||||
<?php } ?>
|
||||
<?php if ($i == 0) { //댓글이 없다면 ?><p id="bo_vc_empty">등록된 댓글이 없습니다.</p><?php } ?>
|
||||
|
||||
</section>
|
||||
<!-- } 댓글 끝 -->
|
||||
|
||||
<?php if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
?>
|
||||
<!-- 댓글 쓰기 시작 { -->
|
||||
<aside id="bo_vc_w" class="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" id="fviewcomment" action="<?php echo $comment_action_url; ?>" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<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="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
|
||||
<span class="sound_only">내용</span>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="내용" placeholder="댓글내용을 입력해주세요"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$(document).on("keyup change", "textarea#wr_content[maxlength]", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="bo_vc_w_wr">
|
||||
<div class="bo_vc_w_info">
|
||||
<?php if ($is_guest) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong> 필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo get_cookie("ck_sns_name"); ?>" id="wr_name" required class="frm_input required" size="25" placeholder="이름">
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong> 필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="25" placeholder="비밀번호">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) {
|
||||
?>
|
||||
<span class="sound_only">SNS 동시등록</span>
|
||||
<span id="bo_vc_send_sns"></span>
|
||||
<?php } ?>
|
||||
<?php if ($is_guest) { ?>
|
||||
<?php echo $captcha_html; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="btn_confirm">
|
||||
<span class="secret_cm chk_box">
|
||||
<input type="checkbox" name="wr_secret" value="secret" id="wr_secret" class="selec_chk">
|
||||
<label for="wr_secret"><span></span>비밀글</label>
|
||||
</span>
|
||||
<button type="submit" id="btn_submit" class="btn_submit">댓글등록</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('비밀번호가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
set_comment_token(f);
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id,
|
||||
form_el = 'fviewcomment',
|
||||
respond = document.getElementById(form_el);
|
||||
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).appendChild(respond);
|
||||
//입력값 초기화
|
||||
document.getElementById('wr_content').value = '';
|
||||
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
if(save_before)
|
||||
$("#captcha_reload").trigger("click");
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
|
||||
<?php if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) { ?>
|
||||
|
||||
$(function() {
|
||||
// sns 등록
|
||||
$("#bo_vc_send_sns").load(
|
||||
"<?php echo G5_SNS_URL; ?>/view_comment_write.sns.skin.php?bo_table=<?php echo $bo_table; ?>",
|
||||
function() {
|
||||
save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
}
|
||||
);
|
||||
});
|
||||
<?php } ?>
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 댓글 쓰기 끝 -->
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
//댓글열기
|
||||
$(".cmt_btn").click(function(e){
|
||||
e.preventDefault();
|
||||
$(this).toggleClass("cmt_btn_op");
|
||||
$("#bo_vc").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,253 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<section id="bo_w">
|
||||
<h2 class="sound_only"><?php echo $g5['title'] ?></h2>
|
||||
|
||||
<!-- 게시물 작성/수정 시작 { -->
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
|
||||
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<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 ?>">
|
||||
<?php
|
||||
$option = '';
|
||||
$option_hidden = '';
|
||||
if ($is_notice || $is_html || $is_secret || $is_mail) {
|
||||
$option = '';
|
||||
if ($is_notice) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="notice" name="notice" class="selec_chk" value="1" '.$notice_checked.'>'.PHP_EOL.'<label for="notice"><span></span>공지</label></li>';
|
||||
}
|
||||
if ($is_html) {
|
||||
if ($is_dhtml_editor) {
|
||||
$option_hidden .= '<input type="hidden" value="html1" name="html">';
|
||||
} else {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="html" name="html" onclick="html_auto_br(this);" class="selec_chk" value="'.$html_value.'" '.$html_checked.'>'.PHP_EOL.'<label for="html"><span></span>html</label></li>';
|
||||
}
|
||||
}
|
||||
if ($is_secret) {
|
||||
if ($is_admin || $is_secret==1) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="secret" name="secret" class="selec_chk" value="secret" '.$secret_checked.'>'.PHP_EOL.'<label for="secret"><span></span>비밀글</label></li>';
|
||||
} else {
|
||||
$option_hidden .= '<input type="hidden" name="secret" value="secret">';
|
||||
}
|
||||
}
|
||||
if ($is_mail) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="mail" name="mail" class="selec_chk" value="mail" '.$recv_email_checked.'>'.PHP_EOL.'<label for="mail"><span></span>답변메일받기</label></li>';
|
||||
}
|
||||
}
|
||||
echo $option_hidden;
|
||||
?>
|
||||
|
||||
<?php if ($is_category) { ?>
|
||||
<div class="bo_w_select write_div">
|
||||
<label for="ca_name" class="sound_only">분류<strong>필수</strong></label>
|
||||
<select name="ca_name" id="ca_name" required>
|
||||
<option value="">분류를 선택하세요</option>
|
||||
<?php echo $category_option ?>
|
||||
</select>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_info write_div">
|
||||
<?php if ($is_name) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong>필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo $name ?>" id="wr_name" required class="frm_input half_input required" placeholder="이름">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_password) { ?>
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong>필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" <?php echo $password_required ?> class="frm_input half_input <?php echo $password_required ?>" placeholder="비밀번호">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_email) { ?>
|
||||
<label for="wr_email" class="sound_only">이메일</label>
|
||||
<input type="text" name="wr_email" value="<?php echo $email ?>" id="wr_email" class="frm_input half_input email " placeholder="이메일">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_homepage) { ?>
|
||||
<label for="wr_homepage" class="sound_only">홈페이지</label>
|
||||
<input type="text" name="wr_homepage" value="<?php echo $homepage ?>" id="wr_homepage" class="frm_input half_input" size="50" placeholder="홈페이지">
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<?php if ($option) { ?>
|
||||
<div class="write_div">
|
||||
<span class="sound_only">옵션</span>
|
||||
<ul class="bo_v_option">
|
||||
<?php echo $option ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_tit write_div">
|
||||
<label for="wr_subject" class="sound_only">제목<strong>필수</strong></label>
|
||||
|
||||
<div id="autosave_wrapper" class="write_div">
|
||||
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required class="frm_input full_input required" size="50" maxlength="255" placeholder="제목">
|
||||
<?php if ($is_member) { // 임시 저장된 글 기능 ?>
|
||||
<script src="<?php echo G5_JS_URL; ?>/autosave.js"></script>
|
||||
<?php if($editor_content_js) echo $editor_content_js; ?>
|
||||
<button type="button" id="btn_autosave" class="btn_frmline">임시 저장된 글 (<span id="autosave_count"><?php echo $autosave_count; ?></span>)</button>
|
||||
<div id="autosave_pop">
|
||||
<strong>임시 저장된 글 목록</strong>
|
||||
<ul></ul>
|
||||
<div><button type="button" class="autosave_close">닫기</button></div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_content" class="sound_only">내용<strong>필수</strong></label>
|
||||
<div class="wr_content <?php echo $is_dhtml_editor ? $config['cf_editor'] : ''; ?>">
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<p id="char_count_desc">이 게시판은 최소 <strong><?php echo $write_min; ?></strong>글자 이상, 최대 <strong><?php echo $write_max; ?></strong>글자 이하까지 글을 쓰실 수 있습니다.</p>
|
||||
<?php } ?>
|
||||
<?php echo $editor_html; // 에디터 사용시는 에디터로, 아니면 textarea 로 노출 ?>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<div id="char_count_wrap"><span id="char_count"></span>글자</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<?php for ($i=1; $is_link && $i<=G5_LINK_COUNT; $i++) { ?>
|
||||
<div class="bo_w_link write_div">
|
||||
<label for="wr_link<?php echo $i ?>"><i class="fa fa-link" aria-hidden="true"></i><span class="sound_only"> 링크 #<?php echo $i ?></span></label>
|
||||
<input type="text" name="wr_link<?php echo $i ?>" value="<?php if($w=="u"){ echo $write['wr_link'.$i]; } ?>" id="wr_link<?php echo $i ?>" class="frm_input full_input" size="50">
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php for ($i=0; $is_file && $i<$file_count; $i++) { ?>
|
||||
<div class="bo_w_flie write_div">
|
||||
<div class="file_wr write_div">
|
||||
<label for="bf_file_<?php echo $i+1 ?>" class="lb_icon"><i class="fa fa-folder-open" aria-hidden="true"></i><span class="sound_only"> 파일 #<?php echo $i+1 ?></span></label>
|
||||
<input type="file" name="bf_file[]" id="bf_file_<?php echo $i+1 ?>" title="파일첨부 <?php echo $i+1 ?> : 용량 <?php echo $upload_max_filesize ?> 이하만 업로드 가능" class="frm_file ">
|
||||
</div>
|
||||
<?php if ($is_file_content) { ?>
|
||||
<input type="text" name="bf_content[]" value="<?php echo ($w == 'u') ? $file[$i]['bf_content'] : ''; ?>" title="파일 설명을 입력해주세요." class="full_input frm_input" size="50" placeholder="파일 설명을 입력해주세요.">
|
||||
<?php } ?>
|
||||
|
||||
<?php if($w == 'u' && $file[$i]['file']) { ?>
|
||||
<span class="file_del">
|
||||
<input type="checkbox" id="bf_file_del<?php echo $i ?>" name="bf_file_del[<?php echo $i; ?>]" value="1"> <label for="bf_file_del<?php echo $i ?>"><?php echo $file[$i]['source'].'('.$file[$i]['size'].')'; ?> 파일 삭제</label>
|
||||
</span>
|
||||
<?php } ?>
|
||||
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php if ($is_use_captcha) { //자동등록방지 ?>
|
||||
<div class="write_div">
|
||||
<?php echo $captcha_html ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="btn_confirm write_div">
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn_cancel btn">취소</a>
|
||||
<button type="submit" id="btn_submit" accesskey="s" class="btn_submit btn">작성완료</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $write_min; ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $write_max; ?>); // 최대
|
||||
check_byte("wr_content", "char_count");
|
||||
|
||||
$(function() {
|
||||
$("#wr_content").on("keyup", function() {
|
||||
check_byte("wr_content", "char_count");
|
||||
});
|
||||
});
|
||||
|
||||
<?php } ?>
|
||||
function html_auto_br(obj)
|
||||
{
|
||||
if (obj.checked) {
|
||||
result = confirm("자동 줄바꿈을 하시겠습니까?\n\n자동 줄바꿈은 게시물 내용중 줄바뀐 곳을<br>태그로 변환하는 기능입니다.");
|
||||
if (result)
|
||||
obj.value = "html2";
|
||||
else
|
||||
obj.value = "html1";
|
||||
}
|
||||
else
|
||||
obj.value = "";
|
||||
}
|
||||
|
||||
function fwrite_submit(f)
|
||||
{
|
||||
<?php echo $editor_js; // 에디터 사용시 자바스크립트에서 내용을 폼필드로 넣어주며 내용이 입력되었는지 검사함 ?>
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": f.wr_subject.value,
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (subject) {
|
||||
alert("제목에 금지단어('"+subject+"')가 포함되어있습니다");
|
||||
f.wr_subject.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
if (typeof(ed_wr_content) != "undefined")
|
||||
ed_wr_content.returnFalse();
|
||||
else
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.getElementById("char_count")) {
|
||||
if (char_min > 0 || char_max > 0) {
|
||||
var cnt = parseInt(check_byte("wr_content", "char_count"));
|
||||
if (char_min > 0 && char_min > cnt) {
|
||||
alert("내용은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
else if (char_max > 0 && char_max < cnt) {
|
||||
alert("내용은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<?php echo $captcha_js; // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 ?>
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
</section>
|
||||
<!-- } 게시물 작성/수정 끝 -->
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
// 회원수는 $row['mb_cnt'];
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$connect_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<?php echo $row['total_cnt'];
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$connect_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<!-- 현재접속자 목록 시작 { -->
|
||||
<div id="current_connect">
|
||||
<ul>
|
||||
<?php
|
||||
for ($i=0; $i<count($list); $i++) {
|
||||
//$location = conv_content($list[$i]['lo_location'], 0);
|
||||
$location = $list[$i]['lo_location'];
|
||||
// 최고관리자에게만 허용
|
||||
// 이 조건문은 가능한 변경하지 마십시오.
|
||||
if ($list[$i]['lo_url'] && $is_admin == 'super') $display_location = "<a href=\"".$list[$i]['lo_url']."\">".$location."</a>";
|
||||
else $display_location = $location;
|
||||
?>
|
||||
<li>
|
||||
<span class="crt_num"><?php echo $list[$i]['num'] ?></span>
|
||||
<span class="crt_profile"><?php echo get_member_profile_img($list[$i]['mb_id']); ?></span>
|
||||
<div class="crt_info">
|
||||
<span class="crt_name"><?php echo $list[$i]['name'] ?></span>
|
||||
<span class="crt_lct"><?php echo $display_location ?></span>
|
||||
</div>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
if ($i == 0)
|
||||
echo "<li class=\"empty_li\">현재 접속자가 없습니다.</li>";
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- } 현재접속자 목록 끝 -->
|
||||
@@ -0,0 +1,18 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 현재접속자 */
|
||||
#current_connect ul {margin:0;padding:0;list-style:none;zoom:1}
|
||||
#current_connect ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#current_connect li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#current_connect li {position:relative;padding:18px 0;border-bottom:1px solid #ececec;min-height:1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0}
|
||||
#current_connect li:first-child {border-top:1px solid #ececec}
|
||||
#current_connect .crt_num {float:left;line-height:45px;margin-right:20px;color:#777;font-weight:bold}
|
||||
#current_connect .crt_profile {float:left;margin-right:20px;line-height:45px}
|
||||
#current_connect .crt_profile > img {width:45px;height:45px;border-radius:50%}
|
||||
#current_connect .crt_info {float:left;margin-top:5px}
|
||||
#current_connect .crt_name {display:block}
|
||||
#current_connect .sv_member {font-weight:bold;line-height:20px;font-size:1.2em}
|
||||
#current_connect .profile_img {display:none}
|
||||
#current_connect .crt_lct {display:block}
|
||||
#current_connect .crt_lct a {color:#797979}
|
||||
#current_connect li.empty_li {width:100%;padding:200px 0;border:0;color:#666;text-align:center}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$content_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<article id="ctt" class="ctt_<?php echo $co_id; ?>">
|
||||
<header>
|
||||
<h1><?php echo $g5['title']; ?></h1>
|
||||
</header>
|
||||
|
||||
<div id="ctt_con">
|
||||
<?php echo $str; ?>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
@@ -0,0 +1,10 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 내용관리 */
|
||||
#ctt {margin:10px 0;padding:20px;background:#fff}
|
||||
.ctt_admin {text-align:right}
|
||||
#ctt header h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#ctt_con {padding:10px 0;line-height:1.6em}
|
||||
#ctt_con img{max-width:100%;height:auto}
|
||||
.ctt_img {text-align:center}
|
||||
|
||||
@@ -0,0 +1,198 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$faq_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
<head>
|
||||
<link rel="stylesheet" href="../theme/basic/css/default.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/font-awesome/css/font-awesome.min.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/connect/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/popular/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/faq/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/outlogin/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/latest/notice/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/visit/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/owlcarousel/owl.carousel.min.css?ver=2303229">
|
||||
<script>
|
||||
// 자바스크립트에서 사용하는 전역변수 선언
|
||||
var g5_url = "http://localhost/tova";
|
||||
var g5_bbs_url = "http://localhost/tova/bbs";
|
||||
var g5_is_member = "1";
|
||||
var g5_is_admin = "super";
|
||||
var g5_is_mobile = "";
|
||||
var g5_bo_table = "";
|
||||
var g5_sca = "";
|
||||
var g5_editor = "";
|
||||
var g5_cookie_domain = "";
|
||||
var g5_theme_shop_url = "http://localhost/tova/theme/basic/shop";
|
||||
var g5_shop_url = "http://localhost/tova/shop";
|
||||
</script>
|
||||
<script src="js/jquery-1.12.4.min.js?ver=2304171"></script>
|
||||
<script src="js/jquery-migrate-1.4.1.min.js?ver=2304171"></script>
|
||||
<script src="js/jquery.menu.js?ver=2304171"></script>
|
||||
<script src="js/common.js?ver=2304171"></script>
|
||||
<script src="js/wrest.js?ver=2304171"></script>
|
||||
<script src="js/placeholders.min.js?ver=2304171"></script>
|
||||
<script src="js/owlcarousel/owl.carousel.min.js?ver=2304171"></script>
|
||||
<script src="js/jquery.bxslider.js?ver=2304171"></script>
|
||||
<!-- 디자인팀 작성 -->
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
|
||||
<!-- <script type="text/javascript" src="js/common.js"></script> -->
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
<!-- FAQ 시작 { -->
|
||||
<?php
|
||||
if ($himg_src)
|
||||
echo '<div id="faq_himg" class="faq_img"><img src="'.$himg_src.'" alt=""></div>';
|
||||
|
||||
// 상단 HTML
|
||||
echo '<div id="faq_hhtml">'.conv_content($fm['fm_head_html'], 1).'</div>';
|
||||
?>
|
||||
|
||||
<fieldset id="faq_sch">
|
||||
<legend>FAQ 검색</legend>
|
||||
<form name="faq_search_form" method="get">
|
||||
<span class="sch_tit">FAQ 검색</span>
|
||||
<input type="hidden" name="fm_id" value="<?php echo $fm_id;?>">
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="stx" value="<?php echo $stx;?>" required id="stx" class="frm_input" size="15" maxlength="15">
|
||||
<button type="submit" value="검색" class="btn_submit"><i class="fa fa-search" aria-hidden="true"></i> 검색</button>
|
||||
</form>
|
||||
</fieldset>
|
||||
|
||||
<?php
|
||||
if( count($faq_master_list) ){
|
||||
?>
|
||||
<nav id="bo_cate">
|
||||
<h2>자주하시는질문 분류</h2>
|
||||
<ul id="bo_cate_ul">
|
||||
<?php
|
||||
foreach( $faq_master_list as $v ){
|
||||
$category_msg = '';
|
||||
$category_option = '';
|
||||
if($v['fm_id'] == $fm_id){ // 현재 선택된 카테고리라면
|
||||
$category_option = ' id="bo_cate_on"';
|
||||
$category_msg = '<span class="sound_only">열린 분류 </span>';
|
||||
}
|
||||
?>
|
||||
<li><a href="<?php echo $category_href;?>?fm_id=<?php echo $v['fm_id'];?>" <?php echo $category_option;?> ><?php echo $category_msg.$v['fm_subject'];?></a></li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
|
||||
<div id="faq_wrap" class="faq_<?php echo $fm_id; ?>">
|
||||
<?php // FAQ 내용
|
||||
if( count($faq_list) ){
|
||||
?>
|
||||
<section id="faq_con">
|
||||
<h2><?php echo $g5['title']; ?> 목록</h2>
|
||||
<ol>
|
||||
<?php
|
||||
foreach($faq_list as $key=>$v){
|
||||
if(empty($v))
|
||||
continue;
|
||||
?>
|
||||
<li>
|
||||
<h3>
|
||||
<span class="tit_bg">Q</span><a href="#none" onclick="return faq_open(this);"><?php echo conv_content($v['fa_subject'], 1); ?></a>
|
||||
<button class="tit_btn" onclick="return faq_open(this);"><i class="fa fa-plus" aria-hidden="true"></i><span class="sound_only">열기</span></button>
|
||||
</h3>
|
||||
<div class="con_inner">
|
||||
<?php echo conv_content($v['fa_content'], 1); ?>
|
||||
<button type="button" class="closer_btn"><i class="fa fa-minus" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</div>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
</section>
|
||||
<?php
|
||||
|
||||
} else {
|
||||
if($stx){
|
||||
echo '<p class="empty_list">검색된 게시물이 없습니다.</p>';
|
||||
} else {
|
||||
echo '<div class="empty_list">등록된 FAQ가 없습니다.';
|
||||
if($is_admin)
|
||||
echo '<br><a href="'.G5_ADMIN_URL.'/faqmasterlist.php">FAQ를 새로 등록하시려면 FAQ관리</a> 메뉴를 이용하십시오.';
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php echo get_paging($page_rows, $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$qstr.'&page='); ?>
|
||||
|
||||
<?php
|
||||
// 하단 HTML
|
||||
echo '<div id="faq_thtml">'.conv_content($fm['fm_tail_html'], 1).'</div>';
|
||||
|
||||
if ($timg_src)
|
||||
echo '<div id="faq_timg" class="faq_img"><img src="'.$timg_src.'" alt=""></div>';
|
||||
?>
|
||||
|
||||
|
||||
<!-- } FAQ 끝 -->
|
||||
|
||||
<?php
|
||||
if ($admin_href)
|
||||
echo '<div class="faq_admin"><a href="'.$admin_href.'" class="btn_admin btn" title="FAQ 수정"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">FAQ 수정</span></a></div>';
|
||||
?>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
<script>
|
||||
jQuery(function() {
|
||||
$(".closer_btn").on("click", function() {
|
||||
$(this).closest(".con_inner").slideToggle('slow', function() {
|
||||
var $h3 = $(this).closest("li").find("h3");
|
||||
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
if($(this).is(":visible")) {
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function faq_open(el)
|
||||
{
|
||||
var $con = $(el).closest("li").find(".con_inner"),
|
||||
$h3 = $(el).closest("li").find("h3");
|
||||
|
||||
if($con.is(":visible")) {
|
||||
$con.slideUp();
|
||||
$h3.removeClass("faq_li_open");
|
||||
} else {
|
||||
$("#faq_con .con_inner:visible").css("display", "none");
|
||||
|
||||
$con.slideDown(
|
||||
function() {
|
||||
// 이미지 리사이즈
|
||||
$con.viewimageresize2();
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,564 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
//add_stylesheet('<link rel="stylesheet" href="'.$faq_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<head>
|
||||
<title>Q&A</title>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<link rel="stylesheet" href="../theme/basic/css/default.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/font-awesome/css/font-awesome.min.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/connect/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/popular/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/faq/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/outlogin/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/latest/notice/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/visit/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/owlcarousel/owl.carousel.min.css?ver=2303229">
|
||||
<script>
|
||||
// 자바스크립트에서 사용하는 전역변수 선언
|
||||
// var g5_url = "http://localhost/tova";
|
||||
// var g5_bbs_url = "http://localhost/tova/bbs";
|
||||
// var g5_is_member = "1";
|
||||
// var g5_is_admin = "";
|
||||
// var g5_is_mobile = "";
|
||||
// var g5_bo_table = "";
|
||||
// var g5_sca = "";
|
||||
// var g5_editor = "";
|
||||
// var g5_cookie_domain = "";
|
||||
// var g5_theme_shop_url = "http://localhost/tova/theme/basic/shop";
|
||||
// var g5_shop_url = "http://localhost/tova/shop";
|
||||
</script>
|
||||
<script src="../js/jquery-1.12.4.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery-migrate-1.4.1.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery.menu.js?ver=2304171"></script>
|
||||
<!-- <script src="../js/common.js?ver=2304171"></script> -->
|
||||
<script src="../js/wrest.js?ver=2304171"></script>
|
||||
<script src="../js/placeholders.min.js?ver=2304171"></script>
|
||||
<script src="../js/owlcarousel/owl.carousel.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery.bxslider.js?ver=2304171"></script>
|
||||
<!-- //그누보드 작성 -->
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<script type="text/javascript" src="../js/common.js"></script>
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
<!-- FAQ 시작 { -->
|
||||
<?php
|
||||
if ($himg_src)
|
||||
echo '<div id="faq_himg" class="faq_img"><img src="'.$himg_src.'" alt=""></div>';
|
||||
|
||||
// 상단 HTML
|
||||
echo '<div id="faq_hhtml">'.conv_content($fm['fm_head_html'], 1).'</div>';
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>"></input>
|
||||
<!-- HEADER -->
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
<!-- //Header -->
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
|
||||
<div class="container faq">
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">FAQ</h2>
|
||||
<span>EG-BIM 관련 자주하는 질문</span>
|
||||
</div>
|
||||
<ul class="sub_tab">
|
||||
<li class="on"><a href="<?php echo G5_BBS_URL ?>/faq.php">자주하는 질문(FAQ)</a></li>
|
||||
<li><a href="/egbim/bbs/descope_qa_list.php">문의하기(Q&A)</a></li>
|
||||
<!-- <li><a href="#" onclick="alert('문의하기 게시판은 준비중입니다.'); return false;">문의하기(Q&A)</a></li> -->
|
||||
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<span class="sub_tit">자주하는 질문(FAQ)</span>
|
||||
<div id="wrapper">
|
||||
<div id="container_wr">
|
||||
<div id="container">
|
||||
<fieldset id="faq_sch">
|
||||
<legend>FAQ 검색</legend>
|
||||
<form name="faq_search_form" method="get">
|
||||
<span class="sch_tit">FAQ 검색</span>
|
||||
<input type="hidden" name="fm_id" value="<?php echo $fm_id;?>">
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="stx" value="<?php echo $stx;?>" required id="stx" class="frm_input" size="15" maxlength="15">
|
||||
<button type="submit" value="검색" class="btn_submit"><i class="fa fa-search" aria-hidden="true"></i> 검색</button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<?php
|
||||
if( count($faq_master_list) ){
|
||||
?>
|
||||
<nav id="bo_cate">
|
||||
<h2>자주하시는질문 분류</h2>
|
||||
<ul id="bo_cate_ul" style="display:none">
|
||||
<?php
|
||||
foreach( $faq_master_list as $v ){
|
||||
$category_msg = '';
|
||||
$category_option = '';
|
||||
if($v['fm_id'] == $fm_id){ // 현재 선택된 카테고리라면
|
||||
$category_option = ' id="bo_cate_on"';
|
||||
$category_msg = '<span class="sound_only">열린 분류 </span>';
|
||||
}
|
||||
?>
|
||||
<li><a href="<?php echo $category_href;?>?fm_id=<?php echo $v['fm_id'];?>" <?php echo $category_option;?> ><?php echo $category_msg.$v['fm_subject'];?></a></li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
<div id="faq_wrap" class="faq_<?php echo $fm_id; ?>">
|
||||
<?php // FAQ 내용
|
||||
if( count($faq_list) ){
|
||||
?>
|
||||
<section id="faq_con">
|
||||
<h2><?php echo $g5['title']; ?> 목록</h2>
|
||||
<ol>
|
||||
<?php
|
||||
foreach($faq_list as $key=>$v){
|
||||
if(empty($v))
|
||||
continue;
|
||||
?>
|
||||
<li>
|
||||
<h3>
|
||||
<span class="tit_bg">Q</span><a href="#none" onclick="return faq_open(this);"><?php echo conv_content($v['fa_subject'], 1); ?></a>
|
||||
<button class="tit_btn" onclick="return faq_open(this);"><i class="fa fa-plus" aria-hidden="true"></i><span class="sound_only">열기</span></button>
|
||||
</h3>
|
||||
<div class="con_inner">
|
||||
<?php echo conv_content($v['fa_content'], 1); ?>
|
||||
<button type="button" class="closer_btn"><i class="fa fa-minus" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</div>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
</section>
|
||||
<?php
|
||||
} else {
|
||||
if($stx){
|
||||
echo '<p class="empty_list">검색된 게시물이 없습니다.</p>';
|
||||
} else {
|
||||
echo '<div class="empty_list">등록된 FAQ가 없습니다.';
|
||||
if($is_admin)
|
||||
echo '<br><a href="'.G5_ADMIN_URL.'/faqmasterlist.php">FAQ를 새로 등록하시려면 FAQ관리</a> 메뉴를 이용하십시오.';
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php echo get_paging($page_rows, $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$qstr.'&page='); ?>
|
||||
<?php
|
||||
// 하단 HTML
|
||||
echo '<div id="faq_thtml">'.conv_content($fm['fm_tail_html'], 1).'</div>';
|
||||
|
||||
if ($timg_src)
|
||||
echo '<div id="faq_timg" class="faq_img"><img src="'.$timg_src.'" alt=""></div>';
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
// if ($admin_href)
|
||||
// echo '<div class="faq_admin"><a href="'.$admin_href.'" class="btn_admin btn" title="FAQ 수정"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">FAQ 수정</span></a></div>';
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- FOOTER -->
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
<!-- //FOOTER -->
|
||||
<script>
|
||||
AOS.init();
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time)=>{
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
<script>
|
||||
jQuery(function() {
|
||||
$(".closer_btn").on("click", function() {
|
||||
$(this).closest(".con_inner").slideToggle('slow', function() {
|
||||
var $h3 = $(this).closest("li").find("h3");
|
||||
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
if($(this).is(":visible")) {
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function faq_open(el)
|
||||
{
|
||||
var $con = $(el).closest("li").find(".con_inner"),
|
||||
$h3 = $(el).closest("li").find("h3");
|
||||
|
||||
if($con.is(":visible")) {
|
||||
$con.slideUp();
|
||||
$h3.removeClass("faq_li_open");
|
||||
} else {
|
||||
$("#faq_con .con_inner:visible").css("display", "none");
|
||||
|
||||
$con.slideDown(
|
||||
function() {
|
||||
// 이미지 리사이즈
|
||||
$con.viewimageresize2();
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 상단(헤더) 스크립트 구문 -->
|
||||
<script>
|
||||
$(function(){
|
||||
// footer family site toggle
|
||||
$('.family_btn').click(function(e){
|
||||
e.stopPropagation();
|
||||
$('.family_list, .family_btn').toggleClass('family_on');
|
||||
});
|
||||
$(document).click(function(e){
|
||||
if(!$(e.target).closest('.family_wrap').length){
|
||||
$('.family_list, .family_btn').removeClass('family_on');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/egbim;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/egbim/bbs;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/egbim/faq;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/egbim/qa;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//descope 로그인, 로그아웃 js
|
||||
function updateHeaderMenu() {
|
||||
var isLoggedIn = !!sessionStorage.getItem("sessionJwt");
|
||||
// role 체크 예시 (로그인 시 저장해놓은 값)
|
||||
var isAdmin = sessionStorage.getItem('userRole') === 'super';
|
||||
|
||||
if (isLoggedIn) {
|
||||
$('.my_join2, .my_login2').show();
|
||||
$('.my_join, .my_login').hide();
|
||||
|
||||
// 마이페이지/관리자 메뉴 동적 출력
|
||||
if (isAdmin) {
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/egbim/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
} else {
|
||||
$('#my_join2').html("<a href='javascript:mypage03();'>마이페이지</a>");
|
||||
}
|
||||
} else {
|
||||
$('.my_join2, .my_login2').hide();
|
||||
$('.my_join, .my_login').show();
|
||||
$('#my_join2').html(""); // 혹시모를 내용 초기화
|
||||
}
|
||||
}
|
||||
|
||||
function descopeLogout() {
|
||||
fetch('/egbim/skin/member/basic/descope_logout.php', {
|
||||
method: 'POST',
|
||||
credentials: 'include' // PHPSESSID 쿠키 전송
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error('서버 로그아웃 실패');
|
||||
// 1) 로컬 저장소 정리
|
||||
// sessionStorage.removeItem("refreshJwt");
|
||||
// sessionStorage.removeItem("sessionJwt");
|
||||
// sessionStorage.removeItem("userRole");
|
||||
// sessionStorage.removeItem("userName");
|
||||
// sessionStorage.removeItem("loginId");
|
||||
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
// 2) UI 갱신
|
||||
updateHeaderMenu();
|
||||
// 3) 로그인 페이지로 이동
|
||||
window.location.href = '/egbim/index.php';
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
alert('로그아웃 중 오류가 발생했습니다.');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// 기존에 있던 updateHeaderMenu() 호출 뒤에
|
||||
$('#my_login2 a').off('click').on('click', function(e){
|
||||
e.preventDefault();
|
||||
descopeLogout();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateHeaderMenu();
|
||||
// (필요하다면, 로그인 성공 후에도 항상 updateHeaderMenu(); 호출)
|
||||
});
|
||||
|
||||
//descope login
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
|
||||
$.ajax({
|
||||
url : '/egbim/skin/member/basic/descope_login.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
dataType : "json",
|
||||
success : function(res){
|
||||
if(res.status === "ok") {
|
||||
// 토큰 저장
|
||||
// sessionStorage.setItem("refreshJwt", res.refreshJwt);
|
||||
sessionStorage.setItem("sessionJwt", res.sessionJwt);
|
||||
|
||||
// ✅ 사용자 정보 저장
|
||||
if (res.user) {
|
||||
sessionStorage.setItem("loginId", res.user.loginIds?.[0] || '');
|
||||
sessionStorage.setItem("userName", res.user.name || '');
|
||||
sessionStorage.setItem("company", res.user.customAttributes?.company || '');
|
||||
sessionStorage.setItem("familyCompany", res.user.customAttributes?.familyCompany || '');
|
||||
sessionStorage.setItem("position", res.user.customAttributes?.position || '');
|
||||
sessionStorage.setItem("team", res.user.customAttributes?.team || '');
|
||||
sessionStorage.setItem("familyUniqueKey", res.user.customAttributes?.familyUniqueKey || '');
|
||||
sessionStorage.setItem("phone", res.user.phone || '');
|
||||
}
|
||||
|
||||
// ✅ 추가: 관리자 등 정보 저장
|
||||
if(res.user && res.user.roleNames && res.user.roleNames[0])
|
||||
sessionStorage.setItem("userRole", res.user.roleNames[0]);
|
||||
else
|
||||
sessionStorage.removeItem("userRole");
|
||||
|
||||
// ✅ 로그인 후 메뉴 갱신
|
||||
updateHeaderMenu();
|
||||
|
||||
// UI 처리
|
||||
$('.popup_wrap').hide();
|
||||
$('body').css('overflow', '');
|
||||
lenis.start();
|
||||
// alert('로그인 하셨습니다.');
|
||||
} else {
|
||||
alert(res.message || "로그인 실패");
|
||||
|
||||
// 🔴 실패 횟수에 따라 안내 배너 교체
|
||||
if (res.failCount && res.failCount >= 8) {
|
||||
updateLoginBanner("fail");
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err.statusText || "통신 오류");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ 배너 교체 함수
|
||||
function updateLoginBanner(type = "default") {
|
||||
const $banner = $('#login_notice_banner');
|
||||
if (!$banner.length) return;
|
||||
|
||||
if (type === "default") {
|
||||
$banner.css({ background: "#063e01ff", color: "#fff" });
|
||||
$banner.find("strong").text("[로그인 시스템 변경 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
더 나은 보안을 위해 2025년 8월 8일부터 로그인 시스템이 변경되었습니다.<br>
|
||||
기존 회원 또한 신규 시스템에 맞춰 재가입을 진행해주시기 바랍니다.
|
||||
`);
|
||||
$banner.find("p:last").html(`※ 로그인 및 가입 관련 문의: <strong>010-8721-7453</strong>`);
|
||||
}
|
||||
|
||||
if (type === "fail") {
|
||||
$banner.css({ background: "#6a0202ff", color: "#faf6f6ff" });
|
||||
$banner.find("strong").text("[로그인 시도 제한 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
비밀번호 입력을 <strong>7회 이상 연속 실패</strong>하셨습니다.<br>
|
||||
<strong>8번째 시도부터 3분 대기</strong>가 적용됩니다.<br>
|
||||
10회 이상 실패 시 계정이 잠금 처리됩니다.
|
||||
`);
|
||||
$banner.find("p:last").text("");
|
||||
}
|
||||
}
|
||||
|
||||
//회원가입 약관동의
|
||||
$('#fregister button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let agree11 = $('#agree11').val();
|
||||
let agree21 = $('#agree21').val();
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data : {
|
||||
'agree11' : agree11,
|
||||
'agree21' : agree21
|
||||
},
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 이지빔 프로그램 회원가입 url 쿼리스트링 파싱 함수
|
||||
function getQueryString(name) {
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
mainMask.classList.add('skip');
|
||||
// mainMask.style.aimation = 'none';
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(name);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
const popupParam = getQueryString('popup');
|
||||
|
||||
if (popupParam === 'signup') {
|
||||
console.log('쿼리 감지: signup → 회원가입 팝업 자동 오픈 시도');
|
||||
$('#pop_agreement').show(); // 팝업 보여주기
|
||||
|
||||
// 스크롤 잠금 (사용 중이면)
|
||||
$('body').css('overflow', 'hidden');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업 닫기 버튼 이벤트 연결
|
||||
$('#pop_agreement .btn_close').on('click', function() {
|
||||
$('#pop_agreement').hide();
|
||||
$('body').css('overflow', '');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//이지빔 프로그램 비밀번호 재설정 url 쿼리스트링 파싱 함수
|
||||
$(document).ready(function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const popup = urlParams.get('popup');
|
||||
const token = urlParams.get('t');
|
||||
|
||||
if (popup === 'pwreset') {
|
||||
// 팝업 전체 열기
|
||||
$('#pop_search').show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
|
||||
// 내부 컨텐츠 모두 숨기기
|
||||
$('#pop_search .popup_contents_wrap').hide();
|
||||
|
||||
if (token) {
|
||||
// 토큰이 있으면 비밀번호 재설정 단계
|
||||
if (!sessionStorage.getItem('pwreset_shown')) {
|
||||
$('#password_reset').show();
|
||||
sessionStorage.setItem('pwreset_shown', '1');
|
||||
}
|
||||
} else {
|
||||
// 토큰이 없으면 아이디 입력 단계 (첫 번째 .popup_contents_wrap)
|
||||
$('#pop_search .popup_contents_wrap').first().show();
|
||||
}
|
||||
}
|
||||
|
||||
// 닫기 버튼
|
||||
$('#pop_search .btn_close').on('click', function() {
|
||||
$('#pop_search').hide();
|
||||
$('body').css('overflow', '');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,765 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
//add_stylesheet('<link rel="stylesheet" href="'.$faq_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<link rel="stylesheet" href="../theme/basic/css/default.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/font-awesome/css/font-awesome.min.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/connect/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/popular/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/faq/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/outlogin/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/latest/notice/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/visit/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/owlcarousel/owl.carousel.min.css?ver=2303229">
|
||||
<script>
|
||||
// 자바스크립트에서 사용하는 전역변수 선언
|
||||
// var g5_url = "http://localhost/tova";
|
||||
// var g5_bbs_url = "http://localhost/tova/bbs";
|
||||
// var g5_is_member = "1";
|
||||
// var g5_is_admin = "";
|
||||
// var g5_is_mobile = "";
|
||||
// var g5_bo_table = "";
|
||||
// var g5_sca = "";
|
||||
// var g5_editor = "";
|
||||
// var g5_cookie_domain = "";
|
||||
// var g5_theme_shop_url = "http://localhost/tova/theme/basic/shop";
|
||||
// var g5_shop_url = "http://localhost/tova/shop";
|
||||
</script>
|
||||
<script src="../js/jquery-1.12.4.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery-migrate-1.4.1.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery.menu.js?ver=2304171"></script>
|
||||
<script src="../js/common.js?ver=2304171"></script>
|
||||
<script src="../js/wrest.js?ver=2304171"></script>
|
||||
<script src="../js/placeholders.min.js?ver=2304171"></script>
|
||||
<script src="../js/owlcarousel/owl.carousel.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery.bxslider.js?ver=2304171"></script>
|
||||
<!-- //그누보드 작성 -->
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/jquery.mousewheel.min.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/common.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/popup.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/index.js"></script>
|
||||
|
||||
<!-- <script type="text/javascript" src="js/common.js"></script> -->
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
<!-- FAQ 시작 { -->
|
||||
<?php
|
||||
if ($himg_src)
|
||||
echo '<div id="faq_himg" class="faq_img"><img src="'.$himg_src.'" alt=""></div>';
|
||||
|
||||
// 상단 HTML
|
||||
echo '<div id="faq_hhtml">'.conv_content($fm['fm_head_html'], 1).'</div>';
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>"></input>
|
||||
<!-- HEADER -->
|
||||
<header class="js__header">
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
</header>
|
||||
<!-- //Header -->
|
||||
<!-- floating_menu -->
|
||||
<div class="floating_menu">
|
||||
<ul>
|
||||
<li class="floating_faq"><a href="<?php echo G5_BBS_URL ?>/faq.php">
|
||||
<i></i>
|
||||
<span>FAQ</span>
|
||||
</a></li>
|
||||
<li class="floating_buy"><a href="<?php echo G5_BBS_URL ?>/buy.php">
|
||||
<i></i>
|
||||
<span>구매하기</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- //floating_menu -->
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
|
||||
<div class="container faq">
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">FAQ</h2>
|
||||
<span>EG-BIM 관련 문의하기</span>
|
||||
</div>
|
||||
<ul class="sub_tab">
|
||||
<li class="on"><a href="<?php echo G5_BBS_URL ?>/faq.php">자주하는 질문</a></li>
|
||||
<li><a href="<?php echo G5_BBS_URL ?>/qalist.php">1:1 문의하기</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<span class="sub_tit">자주하는 질문</span>
|
||||
|
||||
|
||||
<div id="wrapper">
|
||||
<div id="container_wr">
|
||||
<div id="container">
|
||||
<fieldset id="faq_sch">
|
||||
<legend>FAQ 검색</legend>
|
||||
<form name="faq_search_form" method="get">
|
||||
<span class="sch_tit">FAQ 검색</span>
|
||||
<input type="hidden" name="fm_id" value="<?php echo $fm_id;?>">
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="stx" value="<?php echo $stx;?>" required id="stx" class="frm_input" size="15" maxlength="15">
|
||||
<button type="submit" value="검색" class="btn_submit"><i class="fa fa-search" aria-hidden="true"></i> 검색</button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<?php
|
||||
if( count($faq_master_list) ){
|
||||
?>
|
||||
<nav id="bo_cate">
|
||||
<h2>자주하시는질문 분류</h2>
|
||||
<ul id="bo_cate_ul" style="display:none">
|
||||
<?php
|
||||
foreach( $faq_master_list as $v ){
|
||||
$category_msg = '';
|
||||
$category_option = '';
|
||||
if($v['fm_id'] == $fm_id){ // 현재 선택된 카테고리라면
|
||||
$category_option = ' id="bo_cate_on"';
|
||||
$category_msg = '<span class="sound_only">열린 분류 </span>';
|
||||
}
|
||||
?>
|
||||
<li><a href="<?php echo $category_href;?>?fm_id=<?php echo $v['fm_id'];?>" <?php echo $category_option;?> ><?php echo $category_msg.$v['fm_subject'];?></a></li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
<div id="faq_wrap" class="faq_<?php echo $fm_id; ?>">
|
||||
<?php // FAQ 내용
|
||||
if( count($faq_list) ){
|
||||
?>
|
||||
<section id="faq_con">
|
||||
<h2><?php echo $g5['title']; ?> 목록</h2>
|
||||
<ol>
|
||||
<?php
|
||||
foreach($faq_list as $key=>$v){
|
||||
if(empty($v))
|
||||
continue;
|
||||
?>
|
||||
<li>
|
||||
<h3>
|
||||
<span class="tit_bg">Q</span><a href="#none" onclick="return faq_open(this);"><?php echo conv_content($v['fa_subject'], 1); ?></a>
|
||||
<button class="tit_btn" onclick="return faq_open(this);"><i class="fa fa-plus" aria-hidden="true"></i><span class="sound_only">열기</span></button>
|
||||
</h3>
|
||||
<div class="con_inner">
|
||||
<?php echo conv_content($v['fa_content'], 1); ?>
|
||||
<button type="button" class="closer_btn"><i class="fa fa-minus" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</div>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
</section>
|
||||
<?php
|
||||
} else {
|
||||
if($stx){
|
||||
echo '<p class="empty_list">검색된 게시물이 없습니다.</p>';
|
||||
} else {
|
||||
echo '<div class="empty_list">등록된 FAQ가 없습니다.';
|
||||
if($is_admin)
|
||||
echo '<br><a href="'.G5_ADMIN_URL.'/faqmasterlist.php">FAQ를 새로 등록하시려면 FAQ관리</a> 메뉴를 이용하십시오.';
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php echo get_paging($page_rows, $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$qstr.'&page='); ?>
|
||||
<?php
|
||||
// 하단 HTML
|
||||
echo '<div id="faq_thtml">'.conv_content($fm['fm_tail_html'], 1).'</div>';
|
||||
|
||||
if ($timg_src)
|
||||
echo '<div id="faq_timg" class="faq_img"><img src="'.$timg_src.'" alt=""></div>';
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
// if ($admin_href)
|
||||
// echo '<div class="faq_admin"><a href="'.$admin_href.'" class="btn_admin btn" title="FAQ 수정"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">FAQ 수정</span></a></div>';
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- } FAQ 끝 -->
|
||||
<button class="btn_top js__top" onclick="window.scrollTo(0,0);"><div class="arrow"></div></button>
|
||||
<footer class="footer_off">
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
</footer>
|
||||
<!-- //FOOTER -->
|
||||
<script>
|
||||
AOS.init();
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time)=>{
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
<script>
|
||||
jQuery(function() {
|
||||
$(".closer_btn").on("click", function() {
|
||||
$(this).closest(".con_inner").slideToggle('slow', function() {
|
||||
var $h3 = $(this).closest("li").find("h3");
|
||||
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
if($(this).is(":visible")) {
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function faq_open(el)
|
||||
{
|
||||
var $con = $(el).closest("li").find(".con_inner"),
|
||||
$h3 = $(el).closest("li").find("h3");
|
||||
|
||||
if($con.is(":visible")) {
|
||||
$con.slideUp();
|
||||
$h3.removeClass("faq_li_open");
|
||||
} else {
|
||||
$("#faq_con .con_inner:visible").css("display", "none");
|
||||
|
||||
$con.slideDown(
|
||||
function() {
|
||||
// 이미지 리사이즈
|
||||
$con.viewimageresize2();
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 상단(헤더) 스크립트 구문 -->
|
||||
<script>
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
if($('#hid_mb_id').val()==''){
|
||||
document.getElementById('my_join2').style.display = 'none';
|
||||
document.getElementById('my_login2').style.display = 'none';
|
||||
document.getElementById('my_join').style.display = '';
|
||||
document.getElementById('my_login').style.display = '';
|
||||
}else{
|
||||
document.getElementById('my_join2').style.display = '';
|
||||
document.getElementById('my_login2').style.display = '';
|
||||
document.getElementById('my_join').style.display = 'none';
|
||||
document.getElementById('my_login').style.display = 'none';
|
||||
}
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/egbim/bbs;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
//alert(getCookie("tmp_1"));
|
||||
//로그인
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
//alert('<?php echo G5_URL ?>/bbs/login.php');
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/login_check_tova.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
//alert(ss.replace('"','').replace('"',''));
|
||||
if(ss.replace('"','').replace('"','') == "success" || ss.replace('"','').replace('"','') == "super"){
|
||||
//$(".popup_wrap").show();
|
||||
$('.btn_close').hide();
|
||||
$('#pop_login').hide();
|
||||
$('#hid_mb_id').val(mb_id);
|
||||
document.getElementById('my_join2').style.display = '';
|
||||
document.getElementById('my_login2').style.display = '';
|
||||
document.getElementById('my_join').style.display = 'none';
|
||||
document.getElementById('my_login').style.display = 'none';
|
||||
//location.href="<?php echo G5_URL ?>/bbs/session.php?id="+mb_id;
|
||||
if(ss.replace('"','').replace('"','') == "super"){
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/egbim/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
}else{
|
||||
$('#my_join2').html("<a href='javascript:mypage01();'>마이페이지</a>");
|
||||
}
|
||||
}else
|
||||
{
|
||||
alert(trim(ss));
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
//alert(err);
|
||||
alert(err.status);
|
||||
alert(err.statusText);
|
||||
}
|
||||
});
|
||||
});
|
||||
//회원가입 약관동의
|
||||
$('#fregister button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let agree11 = $('#agree11').val();
|
||||
let agree21 = $('#agree21').val();
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data : {
|
||||
'agree11' : agree11,
|
||||
'agree21' : agree21
|
||||
},
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
//회원가입 정보입력
|
||||
$('#fregisterform button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
|
||||
let mb_id = $('#reg_mb_id').val();
|
||||
let mb_password = $('#reg_mb_password').val();
|
||||
let mb_password_re = $('#reg_mb_password_re').val();
|
||||
let mb_name = $('#reg_mb_name').val();
|
||||
let mb_email1 = $('#reg_mb_email1').val();
|
||||
let mb_email2 = $('#mb_email2').val();
|
||||
let reg_domain2 = $('#register_domain2').val();
|
||||
let mb_hp = $('#reg_mb_hp').val();
|
||||
let mb_comp = $('#reg_mb_comp').val();
|
||||
let mb_comp_team = $('#reg_mb_comp_team').val();
|
||||
//alert(mb_password+' '+mb_password_re+' '+mb_name+' '+mb_email1+' '+mb_email2+' '+mb_hp+' '+mb_comp+' '+mb_comp_team);
|
||||
if (mb_id.length < 4) {
|
||||
alert("아이디를 4글자 이상 입력하십시오.");
|
||||
mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
var special_pattern = /[`~!@#$%^&*|\\\'\";:\/?]/gi
|
||||
if (special_pattern.test(mb_id) == true) {
|
||||
alert("아이디는 특수문자를 사용할수 없습니다.");
|
||||
mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 비밀번호 검사
|
||||
if(!/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,25}$/.test(mb_password)){
|
||||
alert('비밀번호는 숫자+영문자+특수문자 조합으로 8자리 이상 사용해야 합니다.');
|
||||
mb_password.focus();
|
||||
return false;
|
||||
}
|
||||
// if (mb_password_re.length < 8 || mb_password.length < 8) {
|
||||
// alert("비밀번호를 8글자 이상 입력하십시오.");
|
||||
// mb_password.focus();
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// 비밀번호 & 2차비밀번호 검사
|
||||
if (mb_password != mb_password_re) {
|
||||
alert("비밀번호가 같지 않습니다.");
|
||||
mb_password_re.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 이름 검사
|
||||
if (mb_name == "") {
|
||||
if (mb_name.length < 1) {
|
||||
alert("이름을 입력하십시오.");
|
||||
mb_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 메일 검사
|
||||
if (mb_email1 == "") {
|
||||
if (mb_email1.length < 1) {
|
||||
alert("메일 주소를 입력하십시오.");
|
||||
mb_email1.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (mb_email2 == "type"){
|
||||
mb_email2 = '@' + reg_domain2;
|
||||
}
|
||||
|
||||
// 핸드폰 번호 검사
|
||||
if (mb_hp.length < 11) {
|
||||
alert("휴대전화번호 11자리를 입력하십시오.");
|
||||
mb_hp.focus();
|
||||
return false;
|
||||
}
|
||||
if(isNaN(mb_hp)){
|
||||
alert("휴대전화번호는 숫자만 입력가능합니다.");
|
||||
mb_hp.focus();
|
||||
return false;
|
||||
}
|
||||
// 회사명 검사
|
||||
if (mb_comp == "") {
|
||||
if (mb_comp.length < 1) {
|
||||
alert("회사명을 입력하십시오");
|
||||
mb_comp.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 팀명 검사
|
||||
if (mb_comp_team == "") {
|
||||
if (mb_comp_team.length < 1) {
|
||||
alert("팀명을 입력하십시오");
|
||||
mb_comp_team.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/register_form_update.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password,
|
||||
'mb_password_re' : mb_password_re,
|
||||
'mb_name' : mb_name,
|
||||
'mb_email1' : mb_email1,
|
||||
'mb_email2' : mb_email2,
|
||||
'mb_hp' : mb_hp,
|
||||
'mb_comp' : mb_comp,
|
||||
'mb_comp_team' : mb_comp_team,
|
||||
},
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
if(ss){
|
||||
// $(".popup_wrap").show();
|
||||
$('.btn_close').hide();
|
||||
$('#pop_login').hide();
|
||||
$('#pop_agreement').hide();
|
||||
$('#pop_join').hide();
|
||||
$('#pop_mypage01').hide();
|
||||
$('#pop_search').hide();
|
||||
$('#pop_mypage02').hide();
|
||||
$('#pop_mypage03').hide();
|
||||
$('#pop_privacy').hide();
|
||||
// $('.register_fs').hide();
|
||||
// $('.join_progress .join_step').removeClass('on');
|
||||
// $('.join_progress .join_step').eq(2).addClass('on');
|
||||
// $('.messages').show();
|
||||
alert('회원가입이 완료됐습니다.\n다시 로그인 해주세요');
|
||||
$('#reg_mb_id').val('');
|
||||
$('#reg_mb_password').val('');
|
||||
$('#reg_mb_password_re').val('');
|
||||
$('#reg_mb_name').val('');
|
||||
$('#reg_mb_email1').val('');
|
||||
$('#reg_mb_hp').val('');
|
||||
$('#reg_mb_comp').val('');
|
||||
$('#reg_mb_comp_team').val('');
|
||||
$('#dupl_check_yn').val('N');
|
||||
|
||||
}else{
|
||||
alert('실패했습니다.');
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert('에러');
|
||||
alert(err);
|
||||
alert(err.status);
|
||||
alert(err.statusText);
|
||||
}
|
||||
});
|
||||
// $.removeCookie(mb_id,{path:'<?php //echo G5_URL ?>/bbs/register_form_update.php'});
|
||||
});
|
||||
|
||||
//회원정보 수정
|
||||
$('#fregisterform_up button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#update_mb_id').val();
|
||||
let mb_password = $('#update_mb_password').val();
|
||||
let mb_password_re = $('#update_mb_password_re').val();
|
||||
let mb_name = $('#update_mb_name').val();
|
||||
let mb_email1 = $('#update_mb_email1').val();
|
||||
let mb_email2 = $('#update_mb_email2').val();
|
||||
let update_domain2 = $('#update_domain2').val();
|
||||
if (mb_email2 == "type"){
|
||||
mb_email2 = '@' + update_domain2;
|
||||
}
|
||||
let mb_hp = $('#update_mb_hp').val();
|
||||
let mb_comp = $('#update_mb_comp').val();
|
||||
let mb_comp_team = $('#update_mb_comp_team').val();
|
||||
|
||||
//alert(mb_password+' '+mb_password_re+' '+mb_name+' '+mb_email1+' '+mb_email2+' '+mb_hp+' '+mb_comp+' '+mb_comp_team);
|
||||
if (mb_id.length < 4) {
|
||||
alert('1');
|
||||
alert("아이디를 4글자 이상 입력하십시오.");
|
||||
mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
var special_pattern = /[`~!@#$%^&*|\\\'\";:\/?]/gi
|
||||
if (special_pattern.test(mb_id) == true) {
|
||||
alert("아이디는 특수문자를 사용할수 없습니다.");
|
||||
mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 비밀번호 검사
|
||||
if(!/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,25}$/.test(mb_password)){
|
||||
alert('비밀번호는 숫자+영문자+특수문자 조합으로 8자리 이상 사용해야 합니다.');
|
||||
mb_password.focus();
|
||||
return false;
|
||||
}
|
||||
// if (mb_password_re.length < 8 || mb_password.length < 8) {
|
||||
// alert("비밀번호를 8글자 이상 입력하십시오.");
|
||||
// mb_password.focus();
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// 비밀번호 & 2차비밀번호 검사
|
||||
if (mb_password != mb_password_re) {
|
||||
alert(mb_password_re);
|
||||
alert("비밀번호가 같지 않습니다.");
|
||||
mb_password_re.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 이름 검사
|
||||
if (mb_name == "") {
|
||||
if (mb_name.length < 1) {
|
||||
alert("이름을 입력하십시오.");
|
||||
mb_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 메일 검사
|
||||
if (mb_email1 == "") {
|
||||
if (mb_email1.length < 1) {
|
||||
alert("메일 주소를 입력하십시오.");
|
||||
mb_email1.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 핸드폰 번호 검사
|
||||
if (mb_hp.length < 11) {
|
||||
alert("휴대전화번호 11자리를 입력하십시오.");
|
||||
mb_hp.focus();
|
||||
return false;
|
||||
}
|
||||
if(isNaN(mb_hp)){
|
||||
alert("휴대전화번호는 숫자만 입력가능합니다.");
|
||||
mb_hp.focus();
|
||||
return false;
|
||||
}
|
||||
// 회사명 검사
|
||||
if (mb_comp == "") {
|
||||
if (mb_comp.length < 1) {
|
||||
alert("회사명을 입력하십시오");
|
||||
mb_comp.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 팀명 검사
|
||||
if (mb_comp_team == "") {
|
||||
if (mb_comp_team.length < 1) {
|
||||
alert("팀명을 입력하십시오");
|
||||
mb_comp_team.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/mypage03.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password,
|
||||
'mb_password_re' : mb_password_re,
|
||||
'mb_name' : mb_name,
|
||||
'mb_email1' : mb_email1,
|
||||
'mb_email2' : mb_email2,
|
||||
'mb_hp' : mb_hp,
|
||||
'mb_comp' : mb_comp,
|
||||
'mb_comp_team' : mb_comp_team,
|
||||
},
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
|
||||
if(ss.replace('"','').replace('"','') == "success"){
|
||||
|
||||
// $(".popup_wrap").show();
|
||||
$('.btn_close').show();
|
||||
$('#pop_login').hide();
|
||||
$('#pop_agreement').hide();
|
||||
$('#pop_join').hide();
|
||||
$('#pop_mypage01').hide();
|
||||
$('#pop_search').hide();
|
||||
$('#pop_mypage02').show();
|
||||
$('#pop_mypage03').hide();
|
||||
$('#pop_privacy').hide();
|
||||
// $('.register_fs').hide();
|
||||
// $('.join_progress .join_step').removeClass('on');
|
||||
// $('.join_progress .join_step').eq(2).addClass('on');
|
||||
// $('.messages').show();
|
||||
alert('회원정보 수정이 완료됐습니다.');
|
||||
document.getElementById("span_email").innerText=mb_email1+mb_email2;
|
||||
document.getElementById("span_hp").innerText=mb_hp;
|
||||
document.getElementById("span_comp").innerText=mb_comp;
|
||||
document.getElementById("span_comp_team").innerText=mb_comp_team;
|
||||
// $('#update_mb_id').val('');
|
||||
// $('#update_mb_password').val('');
|
||||
// $('#update_mb_password_re').val('');
|
||||
// $('#update_mb_name').val('');
|
||||
// $('#update_mb_email1').val('');
|
||||
// $('#update_mb_hp').val('');
|
||||
// $('#update_mb_comp').val('');
|
||||
// $('#update_mb_comp_team').val('');
|
||||
// $('#dupl_check_yn').val('N');
|
||||
|
||||
}else{
|
||||
alert('실패했습니다.');
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert('에러');
|
||||
alert(err);
|
||||
alert(err.status);
|
||||
alert(err.statusText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#fmyconfirmpw button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
|
||||
let l_mb_password = $('#password_mypage').val();
|
||||
let l_mb_id = $('#hid_mb_id').val();
|
||||
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/mypage02.php',
|
||||
data : {
|
||||
'mb_id' : l_mb_id,
|
||||
'mb_password' : l_mb_password,
|
||||
},
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
//alert(ss.replace('"','').replace('"',''));
|
||||
if(ss.replace('"','').replace('"','') == "success"){
|
||||
$('#password_mypage').val('');
|
||||
//mypage02();
|
||||
document.cookie = "tmp_1=John";
|
||||
location.href="<?php echo G5_URL ?>/bbs/faq.php";
|
||||
}else
|
||||
{
|
||||
alert(trim(ss));
|
||||
$('#password_mypage').select();
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err);
|
||||
alert(err.status);
|
||||
alert(err.statusText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,33 @@
|
||||
@charset "utf-8";
|
||||
|
||||
#bo_cate {margin-bottom:28px}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:2px}
|
||||
#bo_cate a {display:block;line-height:28px;padding:5px 15px;border-radius:30px;border:1px solid #d6e9ff;color:#6794d3}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#3a8afd;color:#fff}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#3a8afd;color:#fff;font-weight:bold;border:1px solid #3a8afd;
|
||||
-webkit-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202)}
|
||||
|
||||
#faq_wrap {margin:10px 0 30px}
|
||||
#faq_wrap h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.faq_admin {text-align:right}
|
||||
#faq_wrap ol {margin:0;padding:0;list-style:none}
|
||||
#faq_wrap li {border-bottom:1px solid #ececec;background:#fff;position:relative}
|
||||
#faq_wrap li:first-child {border-top:1px solid #ececec}
|
||||
#faq_wrap li h3 {min-height:50px;line-height:30px;padding:15px;padding-left:50px;position:relative}
|
||||
#faq_wrap li h3 .tit_btn {position:absolute;right:15px;top:15px;border:0;width:30px;height:30px;background:#fff;color:#c5cdd8;font-size:1.2em}
|
||||
#faq_wrap li h3 .tit_bg {display:inline-block;position:absolute;top:15px;left:15px;text-align:center;color:#000;font-size:1.6em}
|
||||
#faq_wrap li h3.faq_li_open a {color:#3a8afd}
|
||||
|
||||
#faq_con .con_inner {display:none;padding:5px 5px 20px 50px}
|
||||
#faq_con .con_inner .tit_bg {display:inline-block;position:absolute;top:10px;left:10px;text-align:center;background:#777;color:#fff;border-radius:50%;width:30px;line-height:30px;height:30px}
|
||||
#faq_con .con_inner .closer_btn {position:absolute;right:15px;top:15px;border:0;width:30px;height:30px;background:#fff;color:#3a8afd;font-size:1.2em}
|
||||
|
||||
#faq_sch {background:#f7f7f7;padding:30px;text-align:center;margin:0 0 10px}
|
||||
#faq_sch .sch_tit {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden}
|
||||
#faq_sch .frm_input {border:1px solid #d0d3db;width:300px;height:45px;border-radius:0;border-radius:3px}
|
||||
#faq_sch .btn_submit {padding:0 10px;height:45px;width:88px;font-size:1.083em;font-weight:bold;color:#fff;background:#434a54}
|
||||
@@ -0,0 +1,969 @@
|
||||
// 전역 변수
|
||||
var errmsg = "";
|
||||
var errfld = null;
|
||||
|
||||
// 필드 검사
|
||||
function check_field(fld, msg)
|
||||
{
|
||||
if ((fld.value = trim(fld.value)) == "")
|
||||
error_field(fld, msg);
|
||||
else
|
||||
clear_field(fld);
|
||||
return;
|
||||
}
|
||||
|
||||
// 필드 오류 표시
|
||||
function error_field(fld, msg)
|
||||
{
|
||||
if (msg != "")
|
||||
errmsg += msg + "\n";
|
||||
if (!errfld) errfld = fld;
|
||||
fld.style.background = "#BDDEF7";
|
||||
}
|
||||
|
||||
// 필드를 깨끗하게
|
||||
function clear_field(fld)
|
||||
{
|
||||
fld.style.background = "#FFFFFF";
|
||||
}
|
||||
|
||||
function trim(s)
|
||||
{
|
||||
var t = "";
|
||||
var from_pos = to_pos = 0;
|
||||
|
||||
for (i=0; i<s.length; i++)
|
||||
{
|
||||
if (s.charAt(i) == ' ')
|
||||
continue;
|
||||
else
|
||||
{
|
||||
from_pos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i=s.length; i>=0; i--)
|
||||
{
|
||||
if (s.charAt(i-1) == ' ')
|
||||
continue;
|
||||
else
|
||||
{
|
||||
to_pos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
t = s.substring(from_pos, to_pos);
|
||||
// alert(from_pos + ',' + to_pos + ',' + t+'.');
|
||||
return t;
|
||||
}
|
||||
|
||||
// 자바스크립트로 PHP의 number_format 흉내를 냄
|
||||
// 숫자에 , 를 출력
|
||||
function number_format(data)
|
||||
{
|
||||
|
||||
var tmp = '';
|
||||
var number = '';
|
||||
var cutlen = 3;
|
||||
var comma = ',';
|
||||
var i;
|
||||
|
||||
data = data + '';
|
||||
|
||||
var sign = data.match(/^[\+\-]/);
|
||||
if(sign) {
|
||||
data = data.replace(/^[\+\-]/, "");
|
||||
}
|
||||
|
||||
len = data.length;
|
||||
mod = (len % cutlen);
|
||||
k = cutlen - mod;
|
||||
for (i=0; i<data.length; i++)
|
||||
{
|
||||
number = number + data.charAt(i);
|
||||
|
||||
if (i < data.length - 1)
|
||||
{
|
||||
k++;
|
||||
if ((k % cutlen) == 0)
|
||||
{
|
||||
number = number + comma;
|
||||
k = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(sign != null)
|
||||
number = sign+number;
|
||||
|
||||
return number;
|
||||
}
|
||||
|
||||
// 새 창
|
||||
function popup_window(url, winname, opt)
|
||||
{
|
||||
window.open(url, winname, opt);
|
||||
}
|
||||
|
||||
|
||||
// 폼메일 창
|
||||
function popup_formmail(url)
|
||||
{
|
||||
opt = 'scrollbars=yes,width=417,height=385,top=10,left=20';
|
||||
popup_window(url, "wformmail", opt);
|
||||
}
|
||||
|
||||
// , 를 없앤다.
|
||||
function no_comma(data)
|
||||
{
|
||||
var tmp = '';
|
||||
var comma = ',';
|
||||
var i;
|
||||
|
||||
for (i=0; i<data.length; i++)
|
||||
{
|
||||
if (data.charAt(i) != comma)
|
||||
tmp += data.charAt(i);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
// 삭제 검사 확인
|
||||
function del(href)
|
||||
{
|
||||
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
|
||||
document.location.href = href;
|
||||
}
|
||||
}
|
||||
|
||||
// 쿠키 입력
|
||||
function set_cookie(name, value, expirehours, domain)
|
||||
{
|
||||
var today = new Date();
|
||||
today.setTime(today.getTime() + (60*60*1000*expirehours));
|
||||
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + today.toGMTString() + ";";
|
||||
if (domain) {
|
||||
document.cookie += "domain=" + domain + ";";
|
||||
}
|
||||
}
|
||||
|
||||
// 쿠키 얻음
|
||||
function get_cookie(name)
|
||||
{
|
||||
var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
|
||||
if (match) return unescape(match[2]);
|
||||
return "";
|
||||
}
|
||||
|
||||
// 쿠키 지움
|
||||
function delete_cookie(name)
|
||||
{
|
||||
var today = new Date();
|
||||
|
||||
today.setTime(today.getTime() - 1);
|
||||
var value = get_cookie(name);
|
||||
if(value != "")
|
||||
document.cookie = name + "=" + value + "; path=/; expires=" + today.toGMTString();
|
||||
}
|
||||
|
||||
var last_id = null;
|
||||
function menu(id)
|
||||
{
|
||||
if (id != last_id)
|
||||
{
|
||||
if (last_id != null)
|
||||
document.getElementById(last_id).style.display = "none";
|
||||
document.getElementById(id).style.display = "block";
|
||||
last_id = id;
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById(id).style.display = "none";
|
||||
last_id = null;
|
||||
}
|
||||
}
|
||||
|
||||
function textarea_decrease(id, row)
|
||||
{
|
||||
if (document.getElementById(id).rows - row > 0)
|
||||
document.getElementById(id).rows -= row;
|
||||
}
|
||||
|
||||
function textarea_original(id, row)
|
||||
{
|
||||
document.getElementById(id).rows = row;
|
||||
}
|
||||
|
||||
function textarea_increase(id, row)
|
||||
{
|
||||
document.getElementById(id).rows += row;
|
||||
}
|
||||
|
||||
// 글숫자 검사
|
||||
function check_byte(content, target)
|
||||
{
|
||||
var i = 0;
|
||||
var cnt = 0;
|
||||
var ch = '';
|
||||
var cont = document.getElementById(content).value;
|
||||
|
||||
for (i=0; i<cont.length; i++) {
|
||||
ch = cont.charAt(i);
|
||||
if (escape(ch).length > 4) {
|
||||
cnt += 2;
|
||||
} else {
|
||||
cnt += 1;
|
||||
}
|
||||
}
|
||||
// 숫자를 출력
|
||||
document.getElementById(target).innerHTML = cnt;
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
// 브라우저에서 오브젝트의 왼쪽 좌표
|
||||
function get_left_pos(obj)
|
||||
{
|
||||
var parentObj = null;
|
||||
var clientObj = obj;
|
||||
//var left = obj.offsetLeft + document.body.clientLeft;
|
||||
var left = obj.offsetLeft;
|
||||
|
||||
while((parentObj=clientObj.offsetParent) != null)
|
||||
{
|
||||
left = left + parentObj.offsetLeft;
|
||||
clientObj = parentObj;
|
||||
}
|
||||
|
||||
return left;
|
||||
}
|
||||
|
||||
// 브라우저에서 오브젝트의 상단 좌표
|
||||
function get_top_pos(obj)
|
||||
{
|
||||
var parentObj = null;
|
||||
var clientObj = obj;
|
||||
//var top = obj.offsetTop + document.body.clientTop;
|
||||
var top = obj.offsetTop;
|
||||
|
||||
while((parentObj=clientObj.offsetParent) != null)
|
||||
{
|
||||
top = top + parentObj.offsetTop;
|
||||
clientObj = parentObj;
|
||||
}
|
||||
|
||||
return top;
|
||||
}
|
||||
|
||||
function flash_movie(src, ids, width, height, wmode)
|
||||
{
|
||||
var wh = "";
|
||||
if (parseInt(width) && parseInt(height))
|
||||
wh = " width='"+width+"' height='"+height+"' ";
|
||||
return "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0' "+wh+" id="+ids+"><param name=wmode value="+wmode+"><param name=movie value="+src+"><param name=quality value=high><embed src="+src+" quality=high wmode="+wmode+" type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash' "+wh+"></embed></object>";
|
||||
}
|
||||
|
||||
function obj_movie(src, ids, width, height, autostart)
|
||||
{
|
||||
var wh = "";
|
||||
if (parseInt(width) && parseInt(height))
|
||||
wh = " width='"+width+"' height='"+height+"' ";
|
||||
if (!autostart) autostart = false;
|
||||
return "<embed src='"+src+"' "+wh+" autostart='"+autostart+"'></embed>";
|
||||
}
|
||||
|
||||
function doc_write(cont)
|
||||
{
|
||||
document.write(cont);
|
||||
}
|
||||
|
||||
var win_password_lost = function(href) {
|
||||
window.open(href, "win_password_lost", "left=50, top=50, width=617, height=330, scrollbars=1");
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$("#login_password_lost, #ol_password_lost").click(function(){
|
||||
win_password_lost(this.href);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 포인트 창
|
||||
**/
|
||||
var win_point = function(href) {
|
||||
var new_win = window.open(href, 'win_point', 'left=100,top=100,width=600, height=600, scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 쪽지 창
|
||||
**/
|
||||
var win_memo = function(href) {
|
||||
var new_win = window.open(href, 'win_memo', 'left=100,top=100,width=620,height=500,scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 쪽지 창
|
||||
**/
|
||||
var check_goto_new = function(href, event) {
|
||||
if( !(typeof g5_is_mobile != "undefined" && g5_is_mobile) ){
|
||||
if (window.opener && window.opener.document && window.opener.document.getElementById) {
|
||||
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
|
||||
window.open(href);
|
||||
//window.opener.document.location.href = href;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 메일 창
|
||||
**/
|
||||
var win_email = function(href) {
|
||||
var new_win = window.open(href, 'win_email', 'left=100,top=100,width=600,height=580,scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 자기소개 창
|
||||
**/
|
||||
var win_profile = function(href) {
|
||||
var new_win = window.open(href, 'win_profile', 'left=100,top=100,width=620,height=510,scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 스크랩 창
|
||||
**/
|
||||
var win_scrap = function(href) {
|
||||
var new_win = window.open(href, 'win_scrap', 'left=100,top=100,width=600,height=600,scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 홈페이지 창
|
||||
**/
|
||||
var win_homepage = function(href) {
|
||||
var new_win = window.open(href, 'win_homepage', '');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 우편번호 창
|
||||
**/
|
||||
var win_zip = function(frm_name, frm_zip, frm_addr1, frm_addr2, frm_addr3, frm_jibeon) {
|
||||
if(typeof daum === "undefined"){
|
||||
alert("KAKAO 우편번호 서비스 postcode.v2.js 파일이 로드되지 않았습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 핀치 줌 현상 제거
|
||||
var vContent = "width=device-width,initial-scale=1.0,minimum-scale=0,maximum-scale=10";
|
||||
$("#meta_viewport").attr("content", vContent + ",user-scalable=no");
|
||||
|
||||
var zip_case = 1; //0이면 레이어, 1이면 페이지에 끼워 넣기, 2이면 새창
|
||||
|
||||
var complete_fn = function(data){
|
||||
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
|
||||
|
||||
// 각 주소의 노출 규칙에 따라 주소를 조합한다.
|
||||
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
|
||||
var fullAddr = ''; // 최종 주소 변수
|
||||
var extraAddr = ''; // 조합형 주소 변수
|
||||
|
||||
// 사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
|
||||
if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
|
||||
fullAddr = data.roadAddress;
|
||||
|
||||
} else { // 사용자가 지번 주소를 선택했을 경우(J)
|
||||
fullAddr = data.jibunAddress;
|
||||
}
|
||||
|
||||
// 사용자가 선택한 주소가 도로명 타입일때 조합한다.
|
||||
if(data.userSelectedType === 'R'){
|
||||
//법정동명이 있을 경우 추가한다.
|
||||
if(data.bname !== ''){
|
||||
extraAddr += data.bname;
|
||||
}
|
||||
// 건물명이 있을 경우 추가한다.
|
||||
if(data.buildingName !== ''){
|
||||
extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
|
||||
}
|
||||
// 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.
|
||||
extraAddr = (extraAddr !== '' ? ' ('+ extraAddr +')' : '');
|
||||
}
|
||||
|
||||
// 우편번호와 주소 정보를 해당 필드에 넣고, 커서를 상세주소 필드로 이동한다.
|
||||
var of = document[frm_name];
|
||||
|
||||
of[frm_zip].value = data.zonecode;
|
||||
|
||||
of[frm_addr1].value = fullAddr;
|
||||
of[frm_addr3].value = extraAddr;
|
||||
|
||||
if(of[frm_jibeon] !== undefined){
|
||||
of[frm_jibeon].value = data.userSelectedType;
|
||||
}
|
||||
|
||||
setTimeout(function(){
|
||||
$("#meta_viewport").attr("content", vContent);
|
||||
of[frm_addr2].focus();
|
||||
} , 100);
|
||||
};
|
||||
|
||||
switch(zip_case) {
|
||||
case 1 : //iframe을 이용하여 페이지에 끼워 넣기
|
||||
var daum_pape_id = 'daum_juso_page'+frm_zip,
|
||||
element_wrap = document.getElementById(daum_pape_id),
|
||||
currentScroll = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
|
||||
if (element_wrap == null) {
|
||||
element_wrap = document.createElement("div");
|
||||
element_wrap.setAttribute("id", daum_pape_id);
|
||||
element_wrap.style.cssText = 'display:none;border:1px solid;left:0;width:100%;height:300px;margin:5px 0;position:relative;-webkit-overflow-scrolling:touch;';
|
||||
element_wrap.innerHTML = '<img src="//t1.daumcdn.net/postcode/resource/images/close.png" id="btnFoldWrap" style="cursor:pointer;position:absolute;right:0px;top:-21px;z-index:1" class="close_daum_juso" alt="접기 버튼">';
|
||||
jQuery('form[name="'+frm_name+'"]').find('input[name="'+frm_addr1+'"]').before(element_wrap);
|
||||
jQuery("#"+daum_pape_id).off("click", ".close_daum_juso").on("click", ".close_daum_juso", function(e){
|
||||
e.preventDefault();
|
||||
$("#meta_viewport").attr("content", vContent);
|
||||
jQuery(this).parent().hide();
|
||||
});
|
||||
}
|
||||
|
||||
new daum.Postcode({
|
||||
oncomplete: function(data) {
|
||||
complete_fn(data);
|
||||
// iframe을 넣은 element를 안보이게 한다.
|
||||
element_wrap.style.display = 'none';
|
||||
// 우편번호 찾기 화면이 보이기 이전으로 scroll 위치를 되돌린다.
|
||||
document.body.scrollTop = currentScroll;
|
||||
},
|
||||
// 우편번호 찾기 화면 크기가 조정되었을때 실행할 코드를 작성하는 부분.
|
||||
// iframe을 넣은 element의 높이값을 조정한다.
|
||||
onresize : function(size) {
|
||||
element_wrap.style.height = size.height + "px";
|
||||
},
|
||||
maxSuggestItems : g5_is_mobile ? 6 : 10,
|
||||
width : '100%',
|
||||
height : '100%'
|
||||
}).embed(element_wrap);
|
||||
|
||||
// iframe을 넣은 element를 보이게 한다.
|
||||
element_wrap.style.display = 'block';
|
||||
break;
|
||||
case 2 : //새창으로 띄우기
|
||||
new daum.Postcode({
|
||||
oncomplete: function(data) {
|
||||
complete_fn(data);
|
||||
}
|
||||
}).open();
|
||||
break;
|
||||
default : //iframe을 이용하여 레이어 띄우기
|
||||
var rayer_id = 'daum_juso_rayer'+frm_zip,
|
||||
element_layer = document.getElementById(rayer_id);
|
||||
if (element_layer == null) {
|
||||
element_layer = document.createElement("div");
|
||||
element_layer.setAttribute("id", rayer_id);
|
||||
element_layer.style.cssText = 'display:none;border:5px solid;position:fixed;width:300px;height:460px;left:50%;margin-left:-155px;top:50%;margin-top:-235px;overflow:hidden;-webkit-overflow-scrolling:touch;z-index:10000';
|
||||
element_layer.innerHTML = '<img src="//i1.daumcdn.net/localimg/localimages/07/postcode/320/close.png" id="btnCloseLayer" style="cursor:pointer;position:absolute;right:-3px;top:-3px;z-index:1" class="close_daum_juso" alt="닫기 버튼">';
|
||||
document.body.appendChild(element_layer);
|
||||
jQuery("#"+rayer_id).off("click", ".close_daum_juso").on("click", ".close_daum_juso", function(e){
|
||||
e.preventDefault();
|
||||
$("#meta_viewport").attr("content", vContent);
|
||||
jQuery(this).parent().hide();
|
||||
});
|
||||
}
|
||||
|
||||
new daum.Postcode({
|
||||
oncomplete: function(data) {
|
||||
complete_fn(data);
|
||||
// iframe을 넣은 element를 안보이게 한다.
|
||||
element_layer.style.display = 'none';
|
||||
},
|
||||
maxSuggestItems : g5_is_mobile ? 6 : 10,
|
||||
width : '100%',
|
||||
height : '100%'
|
||||
}).embed(element_layer);
|
||||
|
||||
// iframe을 넣은 element를 보이게 한다.
|
||||
element_layer.style.display = 'block';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 새로운 비밀번호 분실 창 : 101123
|
||||
**/
|
||||
win_password_lost = function(href)
|
||||
{
|
||||
var new_win = window.open(href, 'win_password_lost', 'width=617, height=330, scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 설문조사 결과
|
||||
**/
|
||||
var win_poll = function(href) {
|
||||
var new_win = window.open(href, 'win_poll', 'width=616, height=500, scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 쿠폰
|
||||
**/
|
||||
var win_coupon = function(href) {
|
||||
var new_win = window.open(href, "win_coupon", "left=100,top=100,width=700, height=600, scrollbars=1");
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 스크린리더 미사용자를 위한 스크립트 - 지운아빠 2013-04-22
|
||||
* alt 값만 갖는 그래픽 링크에 마우스오버 시 title 값 부여, 마우스아웃 시 title 값 제거
|
||||
**/
|
||||
$(function() {
|
||||
$('a img').mouseover(function() {
|
||||
$a_img_title = $(this).attr('alt');
|
||||
$(this).attr('title', $a_img_title);
|
||||
}).mouseout(function() {
|
||||
$(this).attr('title', '');
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 텍스트 리사이즈
|
||||
**/
|
||||
function font_resize(id, rmv_class, add_class, othis)
|
||||
{
|
||||
var $el = $("#"+id);
|
||||
|
||||
if((typeof rmv_class !== "undefined" && rmv_class) || (typeof add_class !== "undefined" && add_class)){
|
||||
$el.removeClass(rmv_class).addClass(add_class);
|
||||
|
||||
set_cookie("ck_font_resize_rmv_class", rmv_class, 1, g5_cookie_domain);
|
||||
set_cookie("ck_font_resize_add_class", add_class, 1, g5_cookie_domain);
|
||||
}
|
||||
|
||||
if(typeof othis !== "undefined"){
|
||||
$(othis).addClass('select').siblings().removeClass('select');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 댓글 수정 토큰
|
||||
**/
|
||||
function set_comment_token(f)
|
||||
{
|
||||
if(typeof f.token === "undefined")
|
||||
$(f).prepend('<input type="hidden" name="token" value="">');
|
||||
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.comment_token.php",
|
||||
type: "GET",
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
f.token.value = data.token;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(function(){
|
||||
$(".win_point").click(function() {
|
||||
win_point(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_memo").click(function() {
|
||||
win_memo(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_email").click(function() {
|
||||
win_email(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_scrap").click(function() {
|
||||
win_scrap(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_profile").click(function() {
|
||||
win_profile(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_homepage").click(function() {
|
||||
win_homepage(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_password_lost").click(function() {
|
||||
win_password_lost(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
/*
|
||||
$(".win_poll").click(function() {
|
||||
win_poll(this.href);
|
||||
return false;
|
||||
});
|
||||
*/
|
||||
|
||||
$(".win_coupon").click(function() {
|
||||
win_coupon(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
// 사이드뷰
|
||||
var sv_hide = false;
|
||||
$(".sv_member, .sv_guest").click(function() {
|
||||
$(".sv").removeClass("sv_on");
|
||||
$(this).closest(".sv_wrap").find(".sv").addClass("sv_on");
|
||||
});
|
||||
|
||||
$(".sv, .sv_wrap").hover(
|
||||
function() {
|
||||
sv_hide = false;
|
||||
},
|
||||
function() {
|
||||
sv_hide = true;
|
||||
}
|
||||
);
|
||||
|
||||
$(".sv_member, .sv_guest").focusin(function() {
|
||||
sv_hide = false;
|
||||
$(".sv").removeClass("sv_on");
|
||||
$(this).closest(".sv_wrap").find(".sv").addClass("sv_on");
|
||||
});
|
||||
|
||||
$(".sv a").focusin(function() {
|
||||
sv_hide = false;
|
||||
});
|
||||
|
||||
$(".sv a").focusout(function() {
|
||||
sv_hide = true;
|
||||
});
|
||||
|
||||
// 셀렉트 ul
|
||||
var sel_hide = false;
|
||||
$('.sel_btn').click(function() {
|
||||
$('.sel_ul').removeClass('sel_on');
|
||||
$(this).siblings('.sel_ul').addClass('sel_on');
|
||||
});
|
||||
|
||||
$(".sel_wrap").hover(
|
||||
function() {
|
||||
sel_hide = false;
|
||||
},
|
||||
function() {
|
||||
sel_hide = true;
|
||||
}
|
||||
);
|
||||
|
||||
$('.sel_a').focusin(function() {
|
||||
sel_hide = false;
|
||||
});
|
||||
|
||||
$('.sel_a').focusout(function() {
|
||||
sel_hide = true;
|
||||
});
|
||||
|
||||
$(document).click(function() {
|
||||
if(sv_hide) { // 사이드뷰 해제
|
||||
$(".sv").removeClass("sv_on");
|
||||
}
|
||||
if (sel_hide) { // 셀렉트 ul 해제
|
||||
$('.sel_ul').removeClass('sel_on');
|
||||
}
|
||||
});
|
||||
|
||||
$(document).focusin(function() {
|
||||
if(sv_hide) { // 사이드뷰 해제
|
||||
$(".sv").removeClass("sv_on");
|
||||
}
|
||||
if (sel_hide) { // 셀렉트 ul 해제
|
||||
$('.sel_ul').removeClass('sel_on');
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on( "keyup change", "textarea#wr_content[maxlength]", function(){
|
||||
var str = $(this).val();
|
||||
var mx = parseInt($(this).attr("maxlength"));
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function get_write_token(bo_table)
|
||||
{
|
||||
var token = "";
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: g5_bbs_url+"/write_token.php",
|
||||
data: { bo_table: bo_table },
|
||||
cache: false,
|
||||
async: false,
|
||||
dataType: "json",
|
||||
success: function(data) {
|
||||
if(data.error) {
|
||||
alert(data.error);
|
||||
if(data.url)
|
||||
document.location.href = data.url;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
token = data.token;
|
||||
}
|
||||
});
|
||||
|
||||
return token;
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$(document).on("click", "form[name=fwrite] input:submit, form[name=fwrite] button:submit, form[name=fwrite] input:image", function() {
|
||||
var f = this.form;
|
||||
|
||||
if (typeof(f.bo_table) == "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
var bo_table = f.bo_table.value;
|
||||
var token = get_write_token(bo_table);
|
||||
|
||||
if(!token) {
|
||||
alert("토큰 정보가 올바르지 않습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var $f = $(f);
|
||||
|
||||
if(typeof f.token === "undefined")
|
||||
$f.prepend('<input type="hidden" name="token" value="">');
|
||||
|
||||
$f.find("input[name=token]").val(token);
|
||||
|
||||
return true;
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
//디자인팀 작업 내용 추가
|
||||
// include.js
|
||||
window.addEventListener('load', function() {
|
||||
var allElements = document.getElementsByTagName('*');
|
||||
Array.prototype.forEach.call(allElements, function(el) {
|
||||
var includePath = el.dataset.includePath;
|
||||
if (includePath) {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function () {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
el.outerHTML = this.responseText;
|
||||
}
|
||||
};
|
||||
xhttp.open('GET', includePath, true);
|
||||
xhttp.send();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// ★★ lenis 멈추기★★
|
||||
function handlePopupScroll() {
|
||||
$('body').css('overflow', 'hidden');
|
||||
$('body').on('wheel', function(e) {
|
||||
e.stopPropagation();
|
||||
});
|
||||
lenis.stop();
|
||||
}
|
||||
|
||||
// 각 팝업창 불러오기
|
||||
function agreement(){
|
||||
$(".popup_wrap").hide();
|
||||
$('.btn_close').show();
|
||||
$('#pop_agreement').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
function join(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_join').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function login(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_login').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function mypage01(){
|
||||
$(".popup_wrap").hide();
|
||||
$('.btn_close').show();
|
||||
$('#pop_mypage01').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function mypage02(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_mypage02').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function mypage03(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_mypage03').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function search(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_search').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function sitemap(){
|
||||
$(".popup_sitemap").hide();
|
||||
$('#sitemap').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
|
||||
function privacy(type) {
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_privacy').show(0, function() {
|
||||
if (type === 'privacy') {
|
||||
$('#pop_privacy li.tab_privacy').addClass('on');
|
||||
$('#pop_privacy li.tab_agreement').removeClass('on');
|
||||
$('.content.pri').addClass('show').removeClass('hide');
|
||||
$('.content.agr').removeClass('show').addClass('hide');
|
||||
|
||||
} else if (type === 'agreement') {
|
||||
$('#pop_privacy li.tab_agreement').addClass('on');
|
||||
$('#pop_privacy li.tab_privacy').removeClass('on');
|
||||
$('.content.agr').addClass('show').removeClass('hide');
|
||||
$('.content.pri').removeClass('show').addClass('hide');
|
||||
}
|
||||
$('body').css('overflow', 'hidden');
|
||||
$('#pop_privacy .content').css('overflow', 'auto');
|
||||
$('#pop_privacy .content').on('wheel', function(e) {
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
$.getScript("./js/popup.js", function() {
|
||||
lenis.stop();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// FOOTER - top버튼 위치 조정하기
|
||||
document.addEventListener('DOMContentLoaded', (event)=> {
|
||||
|
||||
const topButton = document.querySelector('.btn_top');
|
||||
|
||||
function adjustButtonPosition() {
|
||||
const scrollY = window.scrollY; // 현재 스크롤 위치
|
||||
const windowHeight = window.innerHeight; // 윈도우 높이
|
||||
const documentHeight = document.documentElement.scrollHeight; // 문서 전체 높이
|
||||
|
||||
const bottomSpace = 230; // 탑 버튼이 아래에서 떨어져 있어야 하는 거리
|
||||
// const buttonHeight = topButton.offsetHeight; // 탑 버튼의 높이
|
||||
|
||||
// 문서의 맨 아래로부터 300px 떨어지기 위한 계산
|
||||
if (scrollY + windowHeight >= documentHeight - bottomSpace) {
|
||||
topButton.style.bottom = `${bottomSpace + (scrollY + windowHeight - documentHeight)}px`;
|
||||
} else {
|
||||
topButton.style.bottom = '60px'; // 원래의 위치
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', adjustButtonPosition);
|
||||
window.addEventListener('load', adjustButtonPosition);
|
||||
|
||||
const showNav = gsap.from(".js__header", {
|
||||
yPercent: -200,
|
||||
paused: true,
|
||||
duration: 0.2
|
||||
}).progress(1);
|
||||
|
||||
ScrollTrigger.create({
|
||||
start: "top top",
|
||||
end: 99999,
|
||||
onUpdate: (self) => {
|
||||
self.direction === -1 ? showNav.play() : showNav.reverse()
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// FOOTER - 패밀리사이트 열고닫기
|
||||
$(function(){
|
||||
$('.menu_my').mouseover(function(){
|
||||
$('.menu_my_list').show();
|
||||
})
|
||||
|
||||
$('.menu_my').mouseout(function(){
|
||||
$('.menu_my_list').hide();
|
||||
})
|
||||
|
||||
//footer family site toggle
|
||||
$('.family_btn').click(function(){
|
||||
$('.family_list').toggleClass('family_on');
|
||||
$('.family_btn').toggleClass('family_on');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// HEADER - faq버튼이 배경에 따라 블랙&화이트로 변하기
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const goFaq = document.querySelector('.floating_faq');
|
||||
const darkSections = document.querySelectorAll('.js__dark');
|
||||
|
||||
const observerOptions = {
|
||||
root: null,
|
||||
rootMargin: '0px',
|
||||
threshold: 0.5
|
||||
};
|
||||
|
||||
const observerCallback = (entries) => {
|
||||
let darkSectionVisible = false;
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
darkSectionVisible = true;
|
||||
}
|
||||
});
|
||||
if (darkSectionVisible) {
|
||||
goFaq.style.backgroundColor = '#fff';
|
||||
goFaq.style.color = '#000';
|
||||
} else {
|
||||
goFaq.style.backgroundColor = '#000';
|
||||
goFaq.style.color = '#fff';
|
||||
}
|
||||
};
|
||||
const observer = new IntersectionObserver(observerCallback, observerOptions);
|
||||
darkSections.forEach(section => observer.observe(section));
|
||||
});
|
||||
|
After Width: | Height: | Size: 77 B |
|
After Width: | Height: | Size: 318 B |
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$latest_skin_url.'/style.css">', 0);
|
||||
$list_count = (is_array($list) && $list) ? count($list) : 0;
|
||||
?>
|
||||
|
||||
<div class="lat">
|
||||
<h2 class="lat_title"><a href="<?php echo get_pretty_url($bo_table); ?>"><?php echo $bo_subject ?></a></h2>
|
||||
<ul>
|
||||
<?php for ($i=0; $i<$list_count; $i++) { ?>
|
||||
<li class="basic_li">
|
||||
<?php
|
||||
if ($list[$i]['icon_secret']) echo "<i class=\"fa fa-lock\" aria-hidden=\"true\"></i><span class=\"sound_only\">비밀글</span> ";
|
||||
|
||||
echo "<a href=\"".get_pretty_url($bo_table, $list[$i]['wr_id'])."\"> ";
|
||||
if ($list[$i]['is_notice'])
|
||||
echo "<strong>".$list[$i]['subject']."</strong>";
|
||||
else
|
||||
echo $list[$i]['subject'];
|
||||
|
||||
echo "</a>";
|
||||
|
||||
if ($list[$i]['icon_hot']) echo "<span class=\"hot_icon\"><i class=\"fa fa-heart\" aria-hidden=\"true\"></i><span class=\"sound_only\">인기글</span></span>";
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">N<span class=\"sound_only\">새글</span></span>";
|
||||
// if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; }
|
||||
// if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; }
|
||||
|
||||
echo $list[$i]['icon_reply']." ";
|
||||
if ($list[$i]['icon_file']) echo " <i class=\"fa fa-download\" aria-hidden=\"true\"></i>" ;
|
||||
if ($list[$i]['icon_link']) echo " <i class=\"fa fa-link\" aria-hidden=\"true\"></i>" ;
|
||||
|
||||
if ($list[$i]['comment_cnt']) echo "
|
||||
<span class=\"lt_cmt\"><span class=\"sound_only\">댓글</span>".$list[$i]['comment_cnt']."</span>";
|
||||
|
||||
?>
|
||||
<div class="lt_info">
|
||||
<span class="lt_nick"><?php echo $list[$i]['name'] ?></span>
|
||||
<span class="lt_date"><?php echo $list[$i]['datetime2'] ?></span>
|
||||
</div>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ($list_count == 0) { //게시물이 없을 때 ?>
|
||||
<li class="empty_li">게시물이 없습니다.</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="lt_more"><span class="sound_only"><?php echo $bo_subject ?></span>더보기</a>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,31 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 새글 스킨 (latest) */
|
||||
.lat {position:relative;margin-bottom:20px;background:#fff}
|
||||
.lat .lat_title {display:block;line-height:45px;font-size:1.2em;color:#253dbe}
|
||||
.lat .lat_title a {position:relative;color:#000;display:inline-block}
|
||||
|
||||
.lat ul {padding:10px 0}
|
||||
.lat li {position:relative;line-height:18px;border-bottom:1px solid #e5ecee;margin-bottom:10px}
|
||||
.lat li a {font-weight:bold;font-size:1.2em;line-height:20px;vertical-align:middle}
|
||||
.lat li a:hover {color:#3a8afd}
|
||||
.lat li .fa-heart {color:#ff0000}
|
||||
.lat li .fa-lock {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#4f818c;background:#cbe3e8;text-align:center;border-radius:2px;font-size:12px;border:1px solid #cbe3e8;vertical-align:middle}
|
||||
.lat li .new_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#23db79;background:#b9ffda;text-align:center;border-radius:2px;margin-left:2px;font-weight:bold;vertical-align:middle}
|
||||
.lat li .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#ff0000;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
.lat li .fa-caret-right {color:#bbb}
|
||||
.lat li .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#daae37;background:#ffefb9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
.lat li .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#b451fd;background:#edd3fd;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
|
||||
.lat .profile_img img{border-radius:50%}
|
||||
|
||||
.lt_info {padding:10px 0}
|
||||
.lt_info .lt_nick {}
|
||||
.lt_info .lt_date {color:#888}
|
||||
|
||||
.lat .empty_li {line-height:145px;color:#666;text-align:center;padding:0}
|
||||
.lat .empty_li:before {background:none;padding:0}
|
||||
|
||||
.lat .lt_cmt {background:#e9eff5;color:#3a8afd;font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;vertical-align:middle}
|
||||
.lat .lt_more {position:absolute;top:11px;right:0;display:block;width:40px;line-height:25px;color:#3a8afd;border-radius:3px;text-align:center}
|
||||
.lat .lt_more:hover {color:#777}
|
||||
@@ -0,0 +1,198 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$faq_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
<head>
|
||||
<link rel="stylesheet" href="../theme/basic/css/default.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/font-awesome/css/font-awesome.min.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/connect/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/popular/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/faq/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/outlogin/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/latest/notice/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/visit/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/owlcarousel/owl.carousel.min.css?ver=2303229">
|
||||
<script>
|
||||
// 자바스크립트에서 사용하는 전역변수 선언
|
||||
var g5_url = "http://localhost/tova";
|
||||
var g5_bbs_url = "http://localhost/tova/bbs";
|
||||
var g5_is_member = "1";
|
||||
var g5_is_admin = "super";
|
||||
var g5_is_mobile = "";
|
||||
var g5_bo_table = "";
|
||||
var g5_sca = "";
|
||||
var g5_editor = "";
|
||||
var g5_cookie_domain = "";
|
||||
var g5_theme_shop_url = "http://localhost/tova/theme/basic/shop";
|
||||
var g5_shop_url = "http://localhost/tova/shop";
|
||||
</script>
|
||||
<script src="js/jquery-1.12.4.min.js?ver=2304171"></script>
|
||||
<script src="js/jquery-migrate-1.4.1.min.js?ver=2304171"></script>
|
||||
<script src="js/jquery.menu.js?ver=2304171"></script>
|
||||
<script src="js/common.js?ver=2304171"></script>
|
||||
<script src="js/wrest.js?ver=2304171"></script>
|
||||
<script src="js/placeholders.min.js?ver=2304171"></script>
|
||||
<script src="js/owlcarousel/owl.carousel.min.js?ver=2304171"></script>
|
||||
<script src="js/jquery.bxslider.js?ver=2304171"></script>
|
||||
<!-- 디자인팀 작성 -->
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
|
||||
<!-- <script type="text/javascript" src="js/common.js"></script> -->
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
<!-- FAQ 시작 { -->
|
||||
<?php
|
||||
if ($himg_src)
|
||||
echo '<div id="faq_himg" class="faq_img"><img src="'.$himg_src.'" alt=""></div>';
|
||||
|
||||
// 상단 HTML
|
||||
echo '<div id="faq_hhtml">'.conv_content($fm['fm_head_html'], 1).'</div>';
|
||||
?>
|
||||
|
||||
<fieldset id="faq_sch">
|
||||
<legend>FAQ 검색</legend>
|
||||
<form name="faq_search_form" method="get">
|
||||
<span class="sch_tit">FAQ 검색</span>
|
||||
<input type="hidden" name="fm_id" value="<?php echo $fm_id;?>">
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="stx" value="<?php echo $stx;?>" required id="stx" class="frm_input" size="15" maxlength="15">
|
||||
<button type="submit" value="검색" class="btn_submit"><i class="fa fa-search" aria-hidden="true"></i> 검색</button>
|
||||
</form>
|
||||
</fieldset>
|
||||
|
||||
<?php
|
||||
if( count($faq_master_list) ){
|
||||
?>
|
||||
<nav id="bo_cate">
|
||||
<h2>자주하시는질문 분류</h2>
|
||||
<ul id="bo_cate_ul">
|
||||
<?php
|
||||
foreach( $faq_master_list as $v ){
|
||||
$category_msg = '';
|
||||
$category_option = '';
|
||||
if($v['fm_id'] == $fm_id){ // 현재 선택된 카테고리라면
|
||||
$category_option = ' id="bo_cate_on"';
|
||||
$category_msg = '<span class="sound_only">열린 분류 </span>';
|
||||
}
|
||||
?>
|
||||
<li><a href="<?php echo $category_href;?>?fm_id=<?php echo $v['fm_id'];?>" <?php echo $category_option;?> ><?php echo $category_msg.$v['fm_subject'];?></a></li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
|
||||
<div id="faq_wrap" class="faq_<?php echo $fm_id; ?>">
|
||||
<?php // FAQ 내용
|
||||
if( count($faq_list) ){
|
||||
?>
|
||||
<section id="faq_con">
|
||||
<h2><?php echo $g5['title']; ?> 목록</h2>
|
||||
<ol>
|
||||
<?php
|
||||
foreach($faq_list as $key=>$v){
|
||||
if(empty($v))
|
||||
continue;
|
||||
?>
|
||||
<li>
|
||||
<h3>
|
||||
<span class="tit_bg">Q</span><a href="#none" onclick="return faq_open(this);"><?php echo conv_content($v['fa_subject'], 1); ?></a>
|
||||
<button class="tit_btn" onclick="return faq_open(this);"><i class="fa fa-plus" aria-hidden="true"></i><span class="sound_only">열기</span></button>
|
||||
</h3>
|
||||
<div class="con_inner">
|
||||
<?php echo conv_content($v['fa_content'], 1); ?>
|
||||
<button type="button" class="closer_btn"><i class="fa fa-minus" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</div>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
</section>
|
||||
<?php
|
||||
|
||||
} else {
|
||||
if($stx){
|
||||
echo '<p class="empty_list">검색된 게시물이 없습니다.</p>';
|
||||
} else {
|
||||
echo '<div class="empty_list">등록된 FAQ가 없습니다.';
|
||||
if($is_admin)
|
||||
echo '<br><a href="'.G5_ADMIN_URL.'/faqmasterlist.php">FAQ를 새로 등록하시려면 FAQ관리</a> 메뉴를 이용하십시오.';
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php echo get_paging($page_rows, $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$qstr.'&page='); ?>
|
||||
|
||||
<?php
|
||||
// 하단 HTML
|
||||
echo '<div id="faq_thtml">'.conv_content($fm['fm_tail_html'], 1).'</div>';
|
||||
|
||||
if ($timg_src)
|
||||
echo '<div id="faq_timg" class="faq_img"><img src="'.$timg_src.'" alt=""></div>';
|
||||
?>
|
||||
|
||||
|
||||
<!-- } FAQ 끝 -->
|
||||
|
||||
<?php
|
||||
if ($admin_href)
|
||||
echo '<div class="faq_admin"><a href="'.$admin_href.'" class="btn_admin btn" title="FAQ 수정"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">FAQ 수정</span></a></div>';
|
||||
?>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
<script>
|
||||
jQuery(function() {
|
||||
$(".closer_btn").on("click", function() {
|
||||
$(this).closest(".con_inner").slideToggle('slow', function() {
|
||||
var $h3 = $(this).closest("li").find("h3");
|
||||
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
if($(this).is(":visible")) {
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function faq_open(el)
|
||||
{
|
||||
var $con = $(el).closest("li").find(".con_inner"),
|
||||
$h3 = $(el).closest("li").find("h3");
|
||||
|
||||
if($con.is(":visible")) {
|
||||
$con.slideUp();
|
||||
$h3.removeClass("faq_li_open");
|
||||
} else {
|
||||
$("#faq_con .con_inner:visible").css("display", "none");
|
||||
|
||||
$con.slideDown(
|
||||
function() {
|
||||
// 이미지 리사이즈
|
||||
$con.viewimageresize2();
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,564 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
//add_stylesheet('<link rel="stylesheet" href="'.$faq_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<head>
|
||||
<title>Q&A</title>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<link rel="stylesheet" href="../theme/basic/css/default.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/font-awesome/css/font-awesome.min.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/connect/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/popular/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/faq/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/outlogin/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/latest/notice/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/visit/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/owlcarousel/owl.carousel.min.css?ver=2303229">
|
||||
<script>
|
||||
// 자바스크립트에서 사용하는 전역변수 선언
|
||||
// var g5_url = "http://localhost/tova";
|
||||
// var g5_bbs_url = "http://localhost/tova/bbs";
|
||||
// var g5_is_member = "1";
|
||||
// var g5_is_admin = "";
|
||||
// var g5_is_mobile = "";
|
||||
// var g5_bo_table = "";
|
||||
// var g5_sca = "";
|
||||
// var g5_editor = "";
|
||||
// var g5_cookie_domain = "";
|
||||
// var g5_theme_shop_url = "http://localhost/tova/theme/basic/shop";
|
||||
// var g5_shop_url = "http://localhost/tova/shop";
|
||||
</script>
|
||||
<script src="../js/jquery-1.12.4.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery-migrate-1.4.1.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery.menu.js?ver=2304171"></script>
|
||||
<!-- <script src="../js/common.js?ver=2304171"></script> -->
|
||||
<script src="../js/wrest.js?ver=2304171"></script>
|
||||
<script src="../js/placeholders.min.js?ver=2304171"></script>
|
||||
<script src="../js/owlcarousel/owl.carousel.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery.bxslider.js?ver=2304171"></script>
|
||||
<!-- //그누보드 작성 -->
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<script type="text/javascript" src="../js/common.js"></script>
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
<!-- FAQ 시작 { -->
|
||||
<?php
|
||||
if ($himg_src)
|
||||
echo '<div id="faq_himg" class="faq_img"><img src="'.$himg_src.'" alt=""></div>';
|
||||
|
||||
// 상단 HTML
|
||||
echo '<div id="faq_hhtml">'.conv_content($fm['fm_head_html'], 1).'</div>';
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>"></input>
|
||||
<!-- HEADER -->
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
<!-- //Header -->
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
|
||||
<div class="container faq">
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">FAQ</h2>
|
||||
<span>EG-BIM FAQs</span>
|
||||
</div>
|
||||
<ul class="sub_tab">
|
||||
<li class="on"><a href="<?php echo G5_BBS_URL ?>/faq.php">FAQ</a></li>
|
||||
<li><a href="/eng/bbs/descope_qa_list.php">Q&A</a></li>
|
||||
<!-- <li><a href="#" onclick="alert('문의하기 게시판은 준비중입니다.'); return false;">문의하기(Q&A)</a></li> -->
|
||||
<li><a href="https://939.co.kr/saman/" target="_blank">Remote Support</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<span class="sub_tit">FAQ</span>
|
||||
<div id="wrapper">
|
||||
<div id="container_wr">
|
||||
<div id="container">
|
||||
<fieldset id="faq_sch">
|
||||
<legend>FAQ 검색</legend>
|
||||
<form name="faq_search_form" method="get">
|
||||
<span class="sch_tit">FAQ 검색</span>
|
||||
<input type="hidden" name="fm_id" value="<?php echo $fm_id;?>">
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="stx" value="<?php echo $stx;?>" required id="stx" class="frm_input" size="15" maxlength="15">
|
||||
<button type="submit" value="검색" class="btn_submit"><i class="fa fa-search" aria-hidden="true"></i>Search</button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<?php
|
||||
if( count($faq_master_list) ){
|
||||
?>
|
||||
<nav id="bo_cate">
|
||||
<h2>자주하시는질문 분류</h2>
|
||||
<ul id="bo_cate_ul" style="display:none">
|
||||
<?php
|
||||
foreach( $faq_master_list as $v ){
|
||||
$category_msg = '';
|
||||
$category_option = '';
|
||||
if($v['fm_id'] == $fm_id){ // 현재 선택된 카테고리라면
|
||||
$category_option = ' id="bo_cate_on"';
|
||||
$category_msg = '<span class="sound_only">열린 분류 </span>';
|
||||
}
|
||||
?>
|
||||
<li><a href="<?php echo $category_href;?>?fm_id=<?php echo $v['fm_id'];?>" <?php echo $category_option;?> ><?php echo $category_msg.$v['fm_subject'];?></a></li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
<div id="faq_wrap" class="faq_<?php echo $fm_id; ?>">
|
||||
<?php // FAQ 내용
|
||||
if( count($faq_list) ){
|
||||
?>
|
||||
<section id="faq_con">
|
||||
<h2><?php echo $g5['title']; ?> 목록</h2>
|
||||
<ol>
|
||||
<?php
|
||||
foreach($faq_list as $key=>$v){
|
||||
if(empty($v))
|
||||
continue;
|
||||
?>
|
||||
<li>
|
||||
<h3>
|
||||
<span class="tit_bg">Q</span><a href="#none" onclick="return faq_open(this);"><?php echo conv_content($v['fa_subject'], 1); ?></a>
|
||||
<button class="tit_btn" onclick="return faq_open(this);"><i class="fa fa-plus" aria-hidden="true"></i><span class="sound_only">열기</span></button>
|
||||
</h3>
|
||||
<div class="con_inner">
|
||||
<?php echo conv_content($v['fa_content'], 1); ?>
|
||||
<button type="button" class="closer_btn"><i class="fa fa-minus" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</div>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
</section>
|
||||
<?php
|
||||
} else {
|
||||
if($stx){
|
||||
echo '<p class="empty_list">검색된 게시물이 없습니다.</p>';
|
||||
} else {
|
||||
echo '<div class="empty_list">등록된 FAQ가 없습니다.';
|
||||
if($is_admin)
|
||||
echo '<br><a href="'.G5_ADMIN_URL.'/faqmasterlist.php">FAQ를 새로 등록하시려면 FAQ관리</a> 메뉴를 이용하십시오.';
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php echo get_paging($page_rows, $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$qstr.'&page='); ?>
|
||||
<?php
|
||||
// 하단 HTML
|
||||
echo '<div id="faq_thtml">'.conv_content($fm['fm_tail_html'], 1).'</div>';
|
||||
|
||||
if ($timg_src)
|
||||
echo '<div id="faq_timg" class="faq_img"><img src="'.$timg_src.'" alt=""></div>';
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
// if ($admin_href)
|
||||
// echo '<div class="faq_admin"><a href="'.$admin_href.'" class="btn_admin btn" title="FAQ 수정"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">FAQ 수정</span></a></div>';
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- FOOTER -->
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
<!-- //FOOTER -->
|
||||
<script>
|
||||
AOS.init();
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time)=>{
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
<script>
|
||||
jQuery(function() {
|
||||
$(".closer_btn").on("click", function() {
|
||||
$(this).closest(".con_inner").slideToggle('slow', function() {
|
||||
var $h3 = $(this).closest("li").find("h3");
|
||||
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
if($(this).is(":visible")) {
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function faq_open(el)
|
||||
{
|
||||
var $con = $(el).closest("li").find(".con_inner"),
|
||||
$h3 = $(el).closest("li").find("h3");
|
||||
|
||||
if($con.is(":visible")) {
|
||||
$con.slideUp();
|
||||
$h3.removeClass("faq_li_open");
|
||||
} else {
|
||||
$("#faq_con .con_inner:visible").css("display", "none");
|
||||
|
||||
$con.slideDown(
|
||||
function() {
|
||||
// 이미지 리사이즈
|
||||
$con.viewimageresize2();
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 상단(헤더) 스크립트 구문 -->
|
||||
<script>
|
||||
$(function(){
|
||||
// footer family site toggle
|
||||
$('.family_btn').click(function(e){
|
||||
e.stopPropagation();
|
||||
$('.family_list, .family_btn').toggleClass('family_on');
|
||||
});
|
||||
$(document).click(function(e){
|
||||
if(!$(e.target).closest('.family_wrap').length){
|
||||
$('.family_list, .family_btn').removeClass('family_on');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/bbs;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/faq;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/qa;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//descope 로그인, 로그아웃 js
|
||||
function updateHeaderMenu() {
|
||||
var isLoggedIn = !!sessionStorage.getItem("sessionJwt");
|
||||
// role 체크 예시 (로그인 시 저장해놓은 값)
|
||||
var isAdmin = sessionStorage.getItem('userRole') === 'super';
|
||||
|
||||
if (isLoggedIn) {
|
||||
$('.my_join2, .my_login2').show();
|
||||
$('.my_join, .my_login').hide();
|
||||
|
||||
// 마이페이지/관리자 메뉴 동적 출력
|
||||
if (isAdmin) {
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/eng/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
} else {
|
||||
$('#my_join2').html("<a href='javascript:mypage03();'>마이페이지</a>");
|
||||
}
|
||||
} else {
|
||||
$('.my_join2, .my_login2').hide();
|
||||
$('.my_join, .my_login').show();
|
||||
$('#my_join2').html(""); // 혹시모를 내용 초기화
|
||||
}
|
||||
}
|
||||
|
||||
function descopeLogout() {
|
||||
fetch('/eng/skin/member/basic/descope_logout.php', {
|
||||
method: 'POST',
|
||||
credentials: 'include' // PHPSESSID 쿠키 전송
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error('서버 로그아웃 실패');
|
||||
// 1) 로컬 저장소 정리
|
||||
// sessionStorage.removeItem("refreshJwt");
|
||||
// sessionStorage.removeItem("sessionJwt");
|
||||
// sessionStorage.removeItem("userRole");
|
||||
// sessionStorage.removeItem("userName");
|
||||
// sessionStorage.removeItem("loginId");
|
||||
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
// 2) UI 갱신
|
||||
updateHeaderMenu();
|
||||
// 3) 로그인 페이지로 이동
|
||||
window.location.href = '/eng/index.php';
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
alert('로그아웃 중 오류가 발생했습니다.');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// 기존에 있던 updateHeaderMenu() 호출 뒤에
|
||||
$('#my_login2 a').off('click').on('click', function(e){
|
||||
e.preventDefault();
|
||||
descopeLogout();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateHeaderMenu();
|
||||
// (필요하다면, 로그인 성공 후에도 항상 updateHeaderMenu(); 호출)
|
||||
});
|
||||
|
||||
//descope login
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
|
||||
$.ajax({
|
||||
url : '/eng/skin/member/basic/descope_login.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
dataType : "json",
|
||||
success : function(res){
|
||||
if(res.status === "ok") {
|
||||
// 토큰 저장
|
||||
// sessionStorage.setItem("refreshJwt", res.refreshJwt);
|
||||
sessionStorage.setItem("sessionJwt", res.sessionJwt);
|
||||
|
||||
// ✅ 사용자 정보 저장
|
||||
if (res.user) {
|
||||
sessionStorage.setItem("loginId", res.user.loginIds?.[0] || '');
|
||||
sessionStorage.setItem("userName", res.user.name || '');
|
||||
sessionStorage.setItem("company", res.user.customAttributes?.company || '');
|
||||
sessionStorage.setItem("familyCompany", res.user.customAttributes?.familyCompany || '');
|
||||
sessionStorage.setItem("position", res.user.customAttributes?.position || '');
|
||||
sessionStorage.setItem("team", res.user.customAttributes?.team || '');
|
||||
sessionStorage.setItem("familyUniqueKey", res.user.customAttributes?.familyUniqueKey || '');
|
||||
sessionStorage.setItem("phone", res.user.phone || '');
|
||||
}
|
||||
|
||||
// ✅ 추가: 관리자 등 정보 저장
|
||||
if(res.user && res.user.roleNames && res.user.roleNames[0])
|
||||
sessionStorage.setItem("userRole", res.user.roleNames[0]);
|
||||
else
|
||||
sessionStorage.removeItem("userRole");
|
||||
|
||||
// ✅ 로그인 후 메뉴 갱신
|
||||
updateHeaderMenu();
|
||||
|
||||
// UI 처리
|
||||
$('.popup_wrap').hide();
|
||||
$('body').css('overflow', '');
|
||||
lenis.start();
|
||||
// alert('로그인 하셨습니다.');
|
||||
} else {
|
||||
alert(res.message || "로그인 실패");
|
||||
|
||||
// 🔴 실패 횟수에 따라 안내 배너 교체
|
||||
if (res.failCount && res.failCount >= 8) {
|
||||
updateLoginBanner("fail");
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err.statusText || "통신 오류");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ 배너 교체 함수
|
||||
function updateLoginBanner(type = "default") {
|
||||
const $banner = $('#login_notice_banner');
|
||||
if (!$banner.length) return;
|
||||
|
||||
if (type === "default") {
|
||||
$banner.css({ background: "#063e01ff", color: "#fff" });
|
||||
$banner.find("strong").text("[로그인 시스템 변경 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
더 나은 보안을 위해 2025년 8월 8일부터 로그인 시스템이 변경되었습니다.<br>
|
||||
기존 회원 또한 신규 시스템에 맞춰 재가입을 진행해주시기 바랍니다.
|
||||
`);
|
||||
$banner.find("p:last").html(`※ 로그인 및 가입 관련 문의: <strong>010-8721-7453</strong>`);
|
||||
}
|
||||
|
||||
if (type === "fail") {
|
||||
$banner.css({ background: "#6a0202ff", color: "#faf6f6ff" });
|
||||
$banner.find("strong").text("[로그인 시도 제한 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
비밀번호 입력을 <strong>7회 이상 연속 실패</strong>하셨습니다.<br>
|
||||
<strong>8번째 시도부터 3분 대기</strong>가 적용됩니다.<br>
|
||||
10회 이상 실패 시 계정이 잠금 처리됩니다.
|
||||
`);
|
||||
$banner.find("p:last").text("");
|
||||
}
|
||||
}
|
||||
|
||||
//회원가입 약관동의
|
||||
$('#fregister button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let agree11 = $('#agree11').val();
|
||||
let agree21 = $('#agree21').val();
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data : {
|
||||
'agree11' : agree11,
|
||||
'agree21' : agree21
|
||||
},
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 이지빔 프로그램 회원가입 url 쿼리스트링 파싱 함수
|
||||
function getQueryString(name) {
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
mainMask.classList.add('skip');
|
||||
// mainMask.style.aimation = 'none';
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(name);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
const popupParam = getQueryString('popup');
|
||||
|
||||
if (popupParam === 'signup') {
|
||||
console.log('쿼리 감지: signup → 회원가입 팝업 자동 오픈 시도');
|
||||
$('#pop_agreement').show(); // 팝업 보여주기
|
||||
|
||||
// 스크롤 잠금 (사용 중이면)
|
||||
$('body').css('overflow', 'hidden');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업 닫기 버튼 이벤트 연결
|
||||
$('#pop_agreement .btn_close').on('click', function() {
|
||||
$('#pop_agreement').hide();
|
||||
$('body').css('overflow', '');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//이지빔 프로그램 비밀번호 재설정 url 쿼리스트링 파싱 함수
|
||||
$(document).ready(function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const popup = urlParams.get('popup');
|
||||
const token = urlParams.get('t');
|
||||
|
||||
if (popup === 'pwreset') {
|
||||
// 팝업 전체 열기
|
||||
$('#pop_search').show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
|
||||
// 내부 컨텐츠 모두 숨기기
|
||||
$('#pop_search .popup_contents_wrap').hide();
|
||||
|
||||
if (token) {
|
||||
// 토큰이 있으면 비밀번호 재설정 단계
|
||||
if (!sessionStorage.getItem('pwreset_shown')) {
|
||||
$('#password_reset').show();
|
||||
sessionStorage.setItem('pwreset_shown', '1');
|
||||
}
|
||||
} else {
|
||||
// 토큰이 없으면 아이디 입력 단계 (첫 번째 .popup_contents_wrap)
|
||||
$('#pop_search .popup_contents_wrap').first().show();
|
||||
}
|
||||
}
|
||||
|
||||
// 닫기 버튼
|
||||
$('#pop_search .btn_close').on('click', function() {
|
||||
$('#pop_search').hide();
|
||||
$('body').css('overflow', '');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,765 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
//add_stylesheet('<link rel="stylesheet" href="'.$faq_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<link rel="stylesheet" href="../theme/basic/css/default.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/font-awesome/css/font-awesome.min.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/connect/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/popular/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/faq/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/outlogin/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/latest/notice/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../theme/basic/skin/visit/basic/style.css?ver=2303229">
|
||||
<link rel="stylesheet" href="../js/owlcarousel/owl.carousel.min.css?ver=2303229">
|
||||
<script>
|
||||
// 자바스크립트에서 사용하는 전역변수 선언
|
||||
// var g5_url = "http://localhost/tova";
|
||||
// var g5_bbs_url = "http://localhost/tova/bbs";
|
||||
// var g5_is_member = "1";
|
||||
// var g5_is_admin = "";
|
||||
// var g5_is_mobile = "";
|
||||
// var g5_bo_table = "";
|
||||
// var g5_sca = "";
|
||||
// var g5_editor = "";
|
||||
// var g5_cookie_domain = "";
|
||||
// var g5_theme_shop_url = "http://localhost/tova/theme/basic/shop";
|
||||
// var g5_shop_url = "http://localhost/tova/shop";
|
||||
</script>
|
||||
<script src="../js/jquery-1.12.4.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery-migrate-1.4.1.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery.menu.js?ver=2304171"></script>
|
||||
<script src="../js/common.js?ver=2304171"></script>
|
||||
<script src="../js/wrest.js?ver=2304171"></script>
|
||||
<script src="../js/placeholders.min.js?ver=2304171"></script>
|
||||
<script src="../js/owlcarousel/owl.carousel.min.js?ver=2304171"></script>
|
||||
<script src="../js/jquery.bxslider.js?ver=2304171"></script>
|
||||
<!-- //그누보드 작성 -->
|
||||
|
||||
<!-- 디자인팀 작성 -->
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/jquery.mousewheel.min.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/common.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/popup.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/index.js"></script>
|
||||
|
||||
<!-- <script type="text/javascript" src="js/common.js"></script> -->
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<!-- //디자인팀 작성 -->
|
||||
</head>
|
||||
<!-- FAQ 시작 { -->
|
||||
<?php
|
||||
if ($himg_src)
|
||||
echo '<div id="faq_himg" class="faq_img"><img src="'.$himg_src.'" alt=""></div>';
|
||||
|
||||
// 상단 HTML
|
||||
echo '<div id="faq_hhtml">'.conv_content($fm['fm_head_html'], 1).'</div>';
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>"></input>
|
||||
<!-- HEADER -->
|
||||
<header class="js__header">
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
</header>
|
||||
<!-- //Header -->
|
||||
<!-- floating_menu -->
|
||||
<div class="floating_menu">
|
||||
<ul>
|
||||
<li class="floating_faq"><a href="<?php echo G5_BBS_URL ?>/faq.php">
|
||||
<i></i>
|
||||
<span>FAQ</span>
|
||||
</a></li>
|
||||
<li class="floating_buy"><a href="<?php echo G5_BBS_URL ?>/buy.php">
|
||||
<i></i>
|
||||
<span>구매하기</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- //floating_menu -->
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
|
||||
<div class="container faq">
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">FAQ</h2>
|
||||
<span>EG-BIM 관련 문의하기</span>
|
||||
</div>
|
||||
<ul class="sub_tab">
|
||||
<li class="on"><a href="<?php echo G5_BBS_URL ?>/faq.php">자주하는 질문</a></li>
|
||||
<li><a href="<?php echo G5_BBS_URL ?>/qalist.php">1:1 문의하기</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<span class="sub_tit">자주하는 질문</span>
|
||||
|
||||
|
||||
<div id="wrapper">
|
||||
<div id="container_wr">
|
||||
<div id="container">
|
||||
<fieldset id="faq_sch">
|
||||
<legend>FAQ 검색</legend>
|
||||
<form name="faq_search_form" method="get">
|
||||
<span class="sch_tit">FAQ 검색</span>
|
||||
<input type="hidden" name="fm_id" value="<?php echo $fm_id;?>">
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="stx" value="<?php echo $stx;?>" required id="stx" class="frm_input" size="15" maxlength="15">
|
||||
<button type="submit" value="검색" class="btn_submit"><i class="fa fa-search" aria-hidden="true"></i> 검색</button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<?php
|
||||
if( count($faq_master_list) ){
|
||||
?>
|
||||
<nav id="bo_cate">
|
||||
<h2>자주하시는질문 분류</h2>
|
||||
<ul id="bo_cate_ul" style="display:none">
|
||||
<?php
|
||||
foreach( $faq_master_list as $v ){
|
||||
$category_msg = '';
|
||||
$category_option = '';
|
||||
if($v['fm_id'] == $fm_id){ // 현재 선택된 카테고리라면
|
||||
$category_option = ' id="bo_cate_on"';
|
||||
$category_msg = '<span class="sound_only">열린 분류 </span>';
|
||||
}
|
||||
?>
|
||||
<li><a href="<?php echo $category_href;?>?fm_id=<?php echo $v['fm_id'];?>" <?php echo $category_option;?> ><?php echo $category_msg.$v['fm_subject'];?></a></li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
<div id="faq_wrap" class="faq_<?php echo $fm_id; ?>">
|
||||
<?php // FAQ 내용
|
||||
if( count($faq_list) ){
|
||||
?>
|
||||
<section id="faq_con">
|
||||
<h2><?php echo $g5['title']; ?> 목록</h2>
|
||||
<ol>
|
||||
<?php
|
||||
foreach($faq_list as $key=>$v){
|
||||
if(empty($v))
|
||||
continue;
|
||||
?>
|
||||
<li>
|
||||
<h3>
|
||||
<span class="tit_bg">Q</span><a href="#none" onclick="return faq_open(this);"><?php echo conv_content($v['fa_subject'], 1); ?></a>
|
||||
<button class="tit_btn" onclick="return faq_open(this);"><i class="fa fa-plus" aria-hidden="true"></i><span class="sound_only">열기</span></button>
|
||||
</h3>
|
||||
<div class="con_inner">
|
||||
<?php echo conv_content($v['fa_content'], 1); ?>
|
||||
<button type="button" class="closer_btn"><i class="fa fa-minus" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</div>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
</section>
|
||||
<?php
|
||||
} else {
|
||||
if($stx){
|
||||
echo '<p class="empty_list">검색된 게시물이 없습니다.</p>';
|
||||
} else {
|
||||
echo '<div class="empty_list">등록된 FAQ가 없습니다.';
|
||||
if($is_admin)
|
||||
echo '<br><a href="'.G5_ADMIN_URL.'/faqmasterlist.php">FAQ를 새로 등록하시려면 FAQ관리</a> 메뉴를 이용하십시오.';
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php echo get_paging($page_rows, $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$qstr.'&page='); ?>
|
||||
<?php
|
||||
// 하단 HTML
|
||||
echo '<div id="faq_thtml">'.conv_content($fm['fm_tail_html'], 1).'</div>';
|
||||
|
||||
if ($timg_src)
|
||||
echo '<div id="faq_timg" class="faq_img"><img src="'.$timg_src.'" alt=""></div>';
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
// if ($admin_href)
|
||||
// echo '<div class="faq_admin"><a href="'.$admin_href.'" class="btn_admin btn" title="FAQ 수정"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">FAQ 수정</span></a></div>';
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- } FAQ 끝 -->
|
||||
<button class="btn_top js__top" onclick="window.scrollTo(0,0);"><div class="arrow"></div></button>
|
||||
<footer class="footer_off">
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
</footer>
|
||||
<!-- //FOOTER -->
|
||||
<script>
|
||||
AOS.init();
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time)=>{
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
<script>
|
||||
jQuery(function() {
|
||||
$(".closer_btn").on("click", function() {
|
||||
$(this).closest(".con_inner").slideToggle('slow', function() {
|
||||
var $h3 = $(this).closest("li").find("h3");
|
||||
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
if($(this).is(":visible")) {
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function faq_open(el)
|
||||
{
|
||||
var $con = $(el).closest("li").find(".con_inner"),
|
||||
$h3 = $(el).closest("li").find("h3");
|
||||
|
||||
if($con.is(":visible")) {
|
||||
$con.slideUp();
|
||||
$h3.removeClass("faq_li_open");
|
||||
} else {
|
||||
$("#faq_con .con_inner:visible").css("display", "none");
|
||||
|
||||
$con.slideDown(
|
||||
function() {
|
||||
// 이미지 리사이즈
|
||||
$con.viewimageresize2();
|
||||
$("#faq_con li h3").removeClass("faq_li_open");
|
||||
|
||||
$h3.addClass("faq_li_open");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 상단(헤더) 스크립트 구문 -->
|
||||
<script>
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
if($('#hid_mb_id').val()==''){
|
||||
document.getElementById('my_join2').style.display = 'none';
|
||||
document.getElementById('my_login2').style.display = 'none';
|
||||
document.getElementById('my_join').style.display = '';
|
||||
document.getElementById('my_login').style.display = '';
|
||||
}else{
|
||||
document.getElementById('my_join2').style.display = '';
|
||||
document.getElementById('my_login2').style.display = '';
|
||||
document.getElementById('my_join').style.display = 'none';
|
||||
document.getElementById('my_login').style.display = 'none';
|
||||
}
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/egbim/bbs;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
//alert(getCookie("tmp_1"));
|
||||
//로그인
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
//alert('<?php echo G5_URL ?>/bbs/login.php');
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/login_check_tova.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
//alert(ss.replace('"','').replace('"',''));
|
||||
if(ss.replace('"','').replace('"','') == "success" || ss.replace('"','').replace('"','') == "super"){
|
||||
//$(".popup_wrap").show();
|
||||
$('.btn_close').hide();
|
||||
$('#pop_login').hide();
|
||||
$('#hid_mb_id').val(mb_id);
|
||||
document.getElementById('my_join2').style.display = '';
|
||||
document.getElementById('my_login2').style.display = '';
|
||||
document.getElementById('my_join').style.display = 'none';
|
||||
document.getElementById('my_login').style.display = 'none';
|
||||
//location.href="<?php echo G5_URL ?>/bbs/session.php?id="+mb_id;
|
||||
if(ss.replace('"','').replace('"','') == "super"){
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/egbim/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
}else{
|
||||
$('#my_join2').html("<a href='javascript:mypage01();'>마이페이지</a>");
|
||||
}
|
||||
}else
|
||||
{
|
||||
alert(trim(ss));
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
//alert(err);
|
||||
alert(err.status);
|
||||
alert(err.statusText);
|
||||
}
|
||||
});
|
||||
});
|
||||
//회원가입 약관동의
|
||||
$('#fregister button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let agree11 = $('#agree11').val();
|
||||
let agree21 = $('#agree21').val();
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data : {
|
||||
'agree11' : agree11,
|
||||
'agree21' : agree21
|
||||
},
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
//회원가입 정보입력
|
||||
$('#fregisterform button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
|
||||
let mb_id = $('#reg_mb_id').val();
|
||||
let mb_password = $('#reg_mb_password').val();
|
||||
let mb_password_re = $('#reg_mb_password_re').val();
|
||||
let mb_name = $('#reg_mb_name').val();
|
||||
let mb_email1 = $('#reg_mb_email1').val();
|
||||
let mb_email2 = $('#mb_email2').val();
|
||||
let reg_domain2 = $('#register_domain2').val();
|
||||
let mb_hp = $('#reg_mb_hp').val();
|
||||
let mb_comp = $('#reg_mb_comp').val();
|
||||
let mb_comp_team = $('#reg_mb_comp_team').val();
|
||||
//alert(mb_password+' '+mb_password_re+' '+mb_name+' '+mb_email1+' '+mb_email2+' '+mb_hp+' '+mb_comp+' '+mb_comp_team);
|
||||
if (mb_id.length < 4) {
|
||||
alert("아이디를 4글자 이상 입력하십시오.");
|
||||
mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
var special_pattern = /[`~!@#$%^&*|\\\'\";:\/?]/gi
|
||||
if (special_pattern.test(mb_id) == true) {
|
||||
alert("아이디는 특수문자를 사용할수 없습니다.");
|
||||
mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 비밀번호 검사
|
||||
if(!/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,25}$/.test(mb_password)){
|
||||
alert('비밀번호는 숫자+영문자+특수문자 조합으로 8자리 이상 사용해야 합니다.');
|
||||
mb_password.focus();
|
||||
return false;
|
||||
}
|
||||
// if (mb_password_re.length < 8 || mb_password.length < 8) {
|
||||
// alert("비밀번호를 8글자 이상 입력하십시오.");
|
||||
// mb_password.focus();
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// 비밀번호 & 2차비밀번호 검사
|
||||
if (mb_password != mb_password_re) {
|
||||
alert("비밀번호가 같지 않습니다.");
|
||||
mb_password_re.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 이름 검사
|
||||
if (mb_name == "") {
|
||||
if (mb_name.length < 1) {
|
||||
alert("이름을 입력하십시오.");
|
||||
mb_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 메일 검사
|
||||
if (mb_email1 == "") {
|
||||
if (mb_email1.length < 1) {
|
||||
alert("메일 주소를 입력하십시오.");
|
||||
mb_email1.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (mb_email2 == "type"){
|
||||
mb_email2 = '@' + reg_domain2;
|
||||
}
|
||||
|
||||
// 핸드폰 번호 검사
|
||||
if (mb_hp.length < 11) {
|
||||
alert("휴대전화번호 11자리를 입력하십시오.");
|
||||
mb_hp.focus();
|
||||
return false;
|
||||
}
|
||||
if(isNaN(mb_hp)){
|
||||
alert("휴대전화번호는 숫자만 입력가능합니다.");
|
||||
mb_hp.focus();
|
||||
return false;
|
||||
}
|
||||
// 회사명 검사
|
||||
if (mb_comp == "") {
|
||||
if (mb_comp.length < 1) {
|
||||
alert("회사명을 입력하십시오");
|
||||
mb_comp.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 팀명 검사
|
||||
if (mb_comp_team == "") {
|
||||
if (mb_comp_team.length < 1) {
|
||||
alert("팀명을 입력하십시오");
|
||||
mb_comp_team.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/register_form_update.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password,
|
||||
'mb_password_re' : mb_password_re,
|
||||
'mb_name' : mb_name,
|
||||
'mb_email1' : mb_email1,
|
||||
'mb_email2' : mb_email2,
|
||||
'mb_hp' : mb_hp,
|
||||
'mb_comp' : mb_comp,
|
||||
'mb_comp_team' : mb_comp_team,
|
||||
},
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
if(ss){
|
||||
// $(".popup_wrap").show();
|
||||
$('.btn_close').hide();
|
||||
$('#pop_login').hide();
|
||||
$('#pop_agreement').hide();
|
||||
$('#pop_join').hide();
|
||||
$('#pop_mypage01').hide();
|
||||
$('#pop_search').hide();
|
||||
$('#pop_mypage02').hide();
|
||||
$('#pop_mypage03').hide();
|
||||
$('#pop_privacy').hide();
|
||||
// $('.register_fs').hide();
|
||||
// $('.join_progress .join_step').removeClass('on');
|
||||
// $('.join_progress .join_step').eq(2).addClass('on');
|
||||
// $('.messages').show();
|
||||
alert('회원가입이 완료됐습니다.\n다시 로그인 해주세요');
|
||||
$('#reg_mb_id').val('');
|
||||
$('#reg_mb_password').val('');
|
||||
$('#reg_mb_password_re').val('');
|
||||
$('#reg_mb_name').val('');
|
||||
$('#reg_mb_email1').val('');
|
||||
$('#reg_mb_hp').val('');
|
||||
$('#reg_mb_comp').val('');
|
||||
$('#reg_mb_comp_team').val('');
|
||||
$('#dupl_check_yn').val('N');
|
||||
|
||||
}else{
|
||||
alert('실패했습니다.');
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert('에러');
|
||||
alert(err);
|
||||
alert(err.status);
|
||||
alert(err.statusText);
|
||||
}
|
||||
});
|
||||
// $.removeCookie(mb_id,{path:'<?php //echo G5_URL ?>/bbs/register_form_update.php'});
|
||||
});
|
||||
|
||||
//회원정보 수정
|
||||
$('#fregisterform_up button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#update_mb_id').val();
|
||||
let mb_password = $('#update_mb_password').val();
|
||||
let mb_password_re = $('#update_mb_password_re').val();
|
||||
let mb_name = $('#update_mb_name').val();
|
||||
let mb_email1 = $('#update_mb_email1').val();
|
||||
let mb_email2 = $('#update_mb_email2').val();
|
||||
let update_domain2 = $('#update_domain2').val();
|
||||
if (mb_email2 == "type"){
|
||||
mb_email2 = '@' + update_domain2;
|
||||
}
|
||||
let mb_hp = $('#update_mb_hp').val();
|
||||
let mb_comp = $('#update_mb_comp').val();
|
||||
let mb_comp_team = $('#update_mb_comp_team').val();
|
||||
|
||||
//alert(mb_password+' '+mb_password_re+' '+mb_name+' '+mb_email1+' '+mb_email2+' '+mb_hp+' '+mb_comp+' '+mb_comp_team);
|
||||
if (mb_id.length < 4) {
|
||||
alert('1');
|
||||
alert("아이디를 4글자 이상 입력하십시오.");
|
||||
mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
var special_pattern = /[`~!@#$%^&*|\\\'\";:\/?]/gi
|
||||
if (special_pattern.test(mb_id) == true) {
|
||||
alert("아이디는 특수문자를 사용할수 없습니다.");
|
||||
mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 비밀번호 검사
|
||||
if(!/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,25}$/.test(mb_password)){
|
||||
alert('비밀번호는 숫자+영문자+특수문자 조합으로 8자리 이상 사용해야 합니다.');
|
||||
mb_password.focus();
|
||||
return false;
|
||||
}
|
||||
// if (mb_password_re.length < 8 || mb_password.length < 8) {
|
||||
// alert("비밀번호를 8글자 이상 입력하십시오.");
|
||||
// mb_password.focus();
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// 비밀번호 & 2차비밀번호 검사
|
||||
if (mb_password != mb_password_re) {
|
||||
alert(mb_password_re);
|
||||
alert("비밀번호가 같지 않습니다.");
|
||||
mb_password_re.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 이름 검사
|
||||
if (mb_name == "") {
|
||||
if (mb_name.length < 1) {
|
||||
alert("이름을 입력하십시오.");
|
||||
mb_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 메일 검사
|
||||
if (mb_email1 == "") {
|
||||
if (mb_email1.length < 1) {
|
||||
alert("메일 주소를 입력하십시오.");
|
||||
mb_email1.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 핸드폰 번호 검사
|
||||
if (mb_hp.length < 11) {
|
||||
alert("휴대전화번호 11자리를 입력하십시오.");
|
||||
mb_hp.focus();
|
||||
return false;
|
||||
}
|
||||
if(isNaN(mb_hp)){
|
||||
alert("휴대전화번호는 숫자만 입력가능합니다.");
|
||||
mb_hp.focus();
|
||||
return false;
|
||||
}
|
||||
// 회사명 검사
|
||||
if (mb_comp == "") {
|
||||
if (mb_comp.length < 1) {
|
||||
alert("회사명을 입력하십시오");
|
||||
mb_comp.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 팀명 검사
|
||||
if (mb_comp_team == "") {
|
||||
if (mb_comp_team.length < 1) {
|
||||
alert("팀명을 입력하십시오");
|
||||
mb_comp_team.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/mypage03.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password,
|
||||
'mb_password_re' : mb_password_re,
|
||||
'mb_name' : mb_name,
|
||||
'mb_email1' : mb_email1,
|
||||
'mb_email2' : mb_email2,
|
||||
'mb_hp' : mb_hp,
|
||||
'mb_comp' : mb_comp,
|
||||
'mb_comp_team' : mb_comp_team,
|
||||
},
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
|
||||
if(ss.replace('"','').replace('"','') == "success"){
|
||||
|
||||
// $(".popup_wrap").show();
|
||||
$('.btn_close').show();
|
||||
$('#pop_login').hide();
|
||||
$('#pop_agreement').hide();
|
||||
$('#pop_join').hide();
|
||||
$('#pop_mypage01').hide();
|
||||
$('#pop_search').hide();
|
||||
$('#pop_mypage02').show();
|
||||
$('#pop_mypage03').hide();
|
||||
$('#pop_privacy').hide();
|
||||
// $('.register_fs').hide();
|
||||
// $('.join_progress .join_step').removeClass('on');
|
||||
// $('.join_progress .join_step').eq(2).addClass('on');
|
||||
// $('.messages').show();
|
||||
alert('회원정보 수정이 완료됐습니다.');
|
||||
document.getElementById("span_email").innerText=mb_email1+mb_email2;
|
||||
document.getElementById("span_hp").innerText=mb_hp;
|
||||
document.getElementById("span_comp").innerText=mb_comp;
|
||||
document.getElementById("span_comp_team").innerText=mb_comp_team;
|
||||
// $('#update_mb_id').val('');
|
||||
// $('#update_mb_password').val('');
|
||||
// $('#update_mb_password_re').val('');
|
||||
// $('#update_mb_name').val('');
|
||||
// $('#update_mb_email1').val('');
|
||||
// $('#update_mb_hp').val('');
|
||||
// $('#update_mb_comp').val('');
|
||||
// $('#update_mb_comp_team').val('');
|
||||
// $('#dupl_check_yn').val('N');
|
||||
|
||||
}else{
|
||||
alert('실패했습니다.');
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert('에러');
|
||||
alert(err);
|
||||
alert(err.status);
|
||||
alert(err.statusText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#fmyconfirmpw button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
|
||||
let l_mb_password = $('#password_mypage').val();
|
||||
let l_mb_id = $('#hid_mb_id').val();
|
||||
|
||||
$.ajax({
|
||||
url : '<?php echo G5_URL ?>/bbs/mypage02.php',
|
||||
data : {
|
||||
'mb_id' : l_mb_id,
|
||||
'mb_password' : l_mb_password,
|
||||
},
|
||||
type : "POST",
|
||||
datatype : "json",
|
||||
success : function(data){
|
||||
var ss='';
|
||||
for(i=0; i<data.length; i++){
|
||||
ss=ss + data[i];
|
||||
}
|
||||
//alert(ss.replace('"','').replace('"',''));
|
||||
if(ss.replace('"','').replace('"','') == "success"){
|
||||
$('#password_mypage').val('');
|
||||
//mypage02();
|
||||
document.cookie = "tmp_1=John";
|
||||
location.href="<?php echo G5_URL ?>/bbs/faq.php";
|
||||
}else
|
||||
{
|
||||
alert(trim(ss));
|
||||
$('#password_mypage').select();
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err);
|
||||
alert(err.status);
|
||||
alert(err.statusText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,33 @@
|
||||
@charset "utf-8";
|
||||
|
||||
#bo_cate {margin-bottom:28px}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:2px}
|
||||
#bo_cate a {display:block;line-height:28px;padding:5px 15px;border-radius:30px;border:1px solid #d6e9ff;color:#6794d3}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#3a8afd;color:#fff}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#3a8afd;color:#fff;font-weight:bold;border:1px solid #3a8afd;
|
||||
-webkit-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202)}
|
||||
|
||||
#faq_wrap {margin:10px 0 30px}
|
||||
#faq_wrap h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.faq_admin {text-align:right}
|
||||
#faq_wrap ol {margin:0;padding:0;list-style:none}
|
||||
#faq_wrap li {border-bottom:1px solid #ececec;background:#fff;position:relative}
|
||||
#faq_wrap li:first-child {border-top:1px solid #ececec}
|
||||
#faq_wrap li h3 {min-height:50px;line-height:30px;padding:15px;padding-left:50px;position:relative}
|
||||
#faq_wrap li h3 .tit_btn {position:absolute;right:15px;top:15px;border:0;width:30px;height:30px;background:#fff;color:#c5cdd8;font-size:1.2em}
|
||||
#faq_wrap li h3 .tit_bg {display:inline-block;position:absolute;top:15px;left:15px;text-align:center;color:#000;font-size:1.6em}
|
||||
#faq_wrap li h3.faq_li_open a {color:#3a8afd}
|
||||
|
||||
#faq_con .con_inner {display:none;padding:5px 5px 20px 50px}
|
||||
#faq_con .con_inner .tit_bg {display:inline-block;position:absolute;top:10px;left:10px;text-align:center;background:#777;color:#fff;border-radius:50%;width:30px;line-height:30px;height:30px}
|
||||
#faq_con .con_inner .closer_btn {position:absolute;right:15px;top:15px;border:0;width:30px;height:30px;background:#fff;color:#3a8afd;font-size:1.2em}
|
||||
|
||||
#faq_sch {background:#f7f7f7;padding:30px;text-align:center;margin:0 0 10px}
|
||||
#faq_sch .sch_tit {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden}
|
||||
#faq_sch .frm_input {border:1px solid #d0d3db;width:300px;height:45px;border-radius:0;border-radius:3px}
|
||||
#faq_sch .btn_submit {padding:0 10px;height:45px;width:88px;font-size:1.083em;font-weight:bold;color:#fff;background:#434a54}
|
||||
@@ -0,0 +1,969 @@
|
||||
// 전역 변수
|
||||
var errmsg = "";
|
||||
var errfld = null;
|
||||
|
||||
// 필드 검사
|
||||
function check_field(fld, msg)
|
||||
{
|
||||
if ((fld.value = trim(fld.value)) == "")
|
||||
error_field(fld, msg);
|
||||
else
|
||||
clear_field(fld);
|
||||
return;
|
||||
}
|
||||
|
||||
// 필드 오류 표시
|
||||
function error_field(fld, msg)
|
||||
{
|
||||
if (msg != "")
|
||||
errmsg += msg + "\n";
|
||||
if (!errfld) errfld = fld;
|
||||
fld.style.background = "#BDDEF7";
|
||||
}
|
||||
|
||||
// 필드를 깨끗하게
|
||||
function clear_field(fld)
|
||||
{
|
||||
fld.style.background = "#FFFFFF";
|
||||
}
|
||||
|
||||
function trim(s)
|
||||
{
|
||||
var t = "";
|
||||
var from_pos = to_pos = 0;
|
||||
|
||||
for (i=0; i<s.length; i++)
|
||||
{
|
||||
if (s.charAt(i) == ' ')
|
||||
continue;
|
||||
else
|
||||
{
|
||||
from_pos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i=s.length; i>=0; i--)
|
||||
{
|
||||
if (s.charAt(i-1) == ' ')
|
||||
continue;
|
||||
else
|
||||
{
|
||||
to_pos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
t = s.substring(from_pos, to_pos);
|
||||
// alert(from_pos + ',' + to_pos + ',' + t+'.');
|
||||
return t;
|
||||
}
|
||||
|
||||
// 자바스크립트로 PHP의 number_format 흉내를 냄
|
||||
// 숫자에 , 를 출력
|
||||
function number_format(data)
|
||||
{
|
||||
|
||||
var tmp = '';
|
||||
var number = '';
|
||||
var cutlen = 3;
|
||||
var comma = ',';
|
||||
var i;
|
||||
|
||||
data = data + '';
|
||||
|
||||
var sign = data.match(/^[\+\-]/);
|
||||
if(sign) {
|
||||
data = data.replace(/^[\+\-]/, "");
|
||||
}
|
||||
|
||||
len = data.length;
|
||||
mod = (len % cutlen);
|
||||
k = cutlen - mod;
|
||||
for (i=0; i<data.length; i++)
|
||||
{
|
||||
number = number + data.charAt(i);
|
||||
|
||||
if (i < data.length - 1)
|
||||
{
|
||||
k++;
|
||||
if ((k % cutlen) == 0)
|
||||
{
|
||||
number = number + comma;
|
||||
k = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(sign != null)
|
||||
number = sign+number;
|
||||
|
||||
return number;
|
||||
}
|
||||
|
||||
// 새 창
|
||||
function popup_window(url, winname, opt)
|
||||
{
|
||||
window.open(url, winname, opt);
|
||||
}
|
||||
|
||||
|
||||
// 폼메일 창
|
||||
function popup_formmail(url)
|
||||
{
|
||||
opt = 'scrollbars=yes,width=417,height=385,top=10,left=20';
|
||||
popup_window(url, "wformmail", opt);
|
||||
}
|
||||
|
||||
// , 를 없앤다.
|
||||
function no_comma(data)
|
||||
{
|
||||
var tmp = '';
|
||||
var comma = ',';
|
||||
var i;
|
||||
|
||||
for (i=0; i<data.length; i++)
|
||||
{
|
||||
if (data.charAt(i) != comma)
|
||||
tmp += data.charAt(i);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
// 삭제 검사 확인
|
||||
function del(href)
|
||||
{
|
||||
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
|
||||
document.location.href = href;
|
||||
}
|
||||
}
|
||||
|
||||
// 쿠키 입력
|
||||
function set_cookie(name, value, expirehours, domain)
|
||||
{
|
||||
var today = new Date();
|
||||
today.setTime(today.getTime() + (60*60*1000*expirehours));
|
||||
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + today.toGMTString() + ";";
|
||||
if (domain) {
|
||||
document.cookie += "domain=" + domain + ";";
|
||||
}
|
||||
}
|
||||
|
||||
// 쿠키 얻음
|
||||
function get_cookie(name)
|
||||
{
|
||||
var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
|
||||
if (match) return unescape(match[2]);
|
||||
return "";
|
||||
}
|
||||
|
||||
// 쿠키 지움
|
||||
function delete_cookie(name)
|
||||
{
|
||||
var today = new Date();
|
||||
|
||||
today.setTime(today.getTime() - 1);
|
||||
var value = get_cookie(name);
|
||||
if(value != "")
|
||||
document.cookie = name + "=" + value + "; path=/; expires=" + today.toGMTString();
|
||||
}
|
||||
|
||||
var last_id = null;
|
||||
function menu(id)
|
||||
{
|
||||
if (id != last_id)
|
||||
{
|
||||
if (last_id != null)
|
||||
document.getElementById(last_id).style.display = "none";
|
||||
document.getElementById(id).style.display = "block";
|
||||
last_id = id;
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById(id).style.display = "none";
|
||||
last_id = null;
|
||||
}
|
||||
}
|
||||
|
||||
function textarea_decrease(id, row)
|
||||
{
|
||||
if (document.getElementById(id).rows - row > 0)
|
||||
document.getElementById(id).rows -= row;
|
||||
}
|
||||
|
||||
function textarea_original(id, row)
|
||||
{
|
||||
document.getElementById(id).rows = row;
|
||||
}
|
||||
|
||||
function textarea_increase(id, row)
|
||||
{
|
||||
document.getElementById(id).rows += row;
|
||||
}
|
||||
|
||||
// 글숫자 검사
|
||||
function check_byte(content, target)
|
||||
{
|
||||
var i = 0;
|
||||
var cnt = 0;
|
||||
var ch = '';
|
||||
var cont = document.getElementById(content).value;
|
||||
|
||||
for (i=0; i<cont.length; i++) {
|
||||
ch = cont.charAt(i);
|
||||
if (escape(ch).length > 4) {
|
||||
cnt += 2;
|
||||
} else {
|
||||
cnt += 1;
|
||||
}
|
||||
}
|
||||
// 숫자를 출력
|
||||
document.getElementById(target).innerHTML = cnt;
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
// 브라우저에서 오브젝트의 왼쪽 좌표
|
||||
function get_left_pos(obj)
|
||||
{
|
||||
var parentObj = null;
|
||||
var clientObj = obj;
|
||||
//var left = obj.offsetLeft + document.body.clientLeft;
|
||||
var left = obj.offsetLeft;
|
||||
|
||||
while((parentObj=clientObj.offsetParent) != null)
|
||||
{
|
||||
left = left + parentObj.offsetLeft;
|
||||
clientObj = parentObj;
|
||||
}
|
||||
|
||||
return left;
|
||||
}
|
||||
|
||||
// 브라우저에서 오브젝트의 상단 좌표
|
||||
function get_top_pos(obj)
|
||||
{
|
||||
var parentObj = null;
|
||||
var clientObj = obj;
|
||||
//var top = obj.offsetTop + document.body.clientTop;
|
||||
var top = obj.offsetTop;
|
||||
|
||||
while((parentObj=clientObj.offsetParent) != null)
|
||||
{
|
||||
top = top + parentObj.offsetTop;
|
||||
clientObj = parentObj;
|
||||
}
|
||||
|
||||
return top;
|
||||
}
|
||||
|
||||
function flash_movie(src, ids, width, height, wmode)
|
||||
{
|
||||
var wh = "";
|
||||
if (parseInt(width) && parseInt(height))
|
||||
wh = " width='"+width+"' height='"+height+"' ";
|
||||
return "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0' "+wh+" id="+ids+"><param name=wmode value="+wmode+"><param name=movie value="+src+"><param name=quality value=high><embed src="+src+" quality=high wmode="+wmode+" type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash' "+wh+"></embed></object>";
|
||||
}
|
||||
|
||||
function obj_movie(src, ids, width, height, autostart)
|
||||
{
|
||||
var wh = "";
|
||||
if (parseInt(width) && parseInt(height))
|
||||
wh = " width='"+width+"' height='"+height+"' ";
|
||||
if (!autostart) autostart = false;
|
||||
return "<embed src='"+src+"' "+wh+" autostart='"+autostart+"'></embed>";
|
||||
}
|
||||
|
||||
function doc_write(cont)
|
||||
{
|
||||
document.write(cont);
|
||||
}
|
||||
|
||||
var win_password_lost = function(href) {
|
||||
window.open(href, "win_password_lost", "left=50, top=50, width=617, height=330, scrollbars=1");
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$("#login_password_lost, #ol_password_lost").click(function(){
|
||||
win_password_lost(this.href);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 포인트 창
|
||||
**/
|
||||
var win_point = function(href) {
|
||||
var new_win = window.open(href, 'win_point', 'left=100,top=100,width=600, height=600, scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 쪽지 창
|
||||
**/
|
||||
var win_memo = function(href) {
|
||||
var new_win = window.open(href, 'win_memo', 'left=100,top=100,width=620,height=500,scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 쪽지 창
|
||||
**/
|
||||
var check_goto_new = function(href, event) {
|
||||
if( !(typeof g5_is_mobile != "undefined" && g5_is_mobile) ){
|
||||
if (window.opener && window.opener.document && window.opener.document.getElementById) {
|
||||
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
|
||||
window.open(href);
|
||||
//window.opener.document.location.href = href;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 메일 창
|
||||
**/
|
||||
var win_email = function(href) {
|
||||
var new_win = window.open(href, 'win_email', 'left=100,top=100,width=600,height=580,scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 자기소개 창
|
||||
**/
|
||||
var win_profile = function(href) {
|
||||
var new_win = window.open(href, 'win_profile', 'left=100,top=100,width=620,height=510,scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 스크랩 창
|
||||
**/
|
||||
var win_scrap = function(href) {
|
||||
var new_win = window.open(href, 'win_scrap', 'left=100,top=100,width=600,height=600,scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 홈페이지 창
|
||||
**/
|
||||
var win_homepage = function(href) {
|
||||
var new_win = window.open(href, 'win_homepage', '');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 우편번호 창
|
||||
**/
|
||||
var win_zip = function(frm_name, frm_zip, frm_addr1, frm_addr2, frm_addr3, frm_jibeon) {
|
||||
if(typeof daum === "undefined"){
|
||||
alert("KAKAO 우편번호 서비스 postcode.v2.js 파일이 로드되지 않았습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 핀치 줌 현상 제거
|
||||
var vContent = "width=device-width,initial-scale=1.0,minimum-scale=0,maximum-scale=10";
|
||||
$("#meta_viewport").attr("content", vContent + ",user-scalable=no");
|
||||
|
||||
var zip_case = 1; //0이면 레이어, 1이면 페이지에 끼워 넣기, 2이면 새창
|
||||
|
||||
var complete_fn = function(data){
|
||||
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
|
||||
|
||||
// 각 주소의 노출 규칙에 따라 주소를 조합한다.
|
||||
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
|
||||
var fullAddr = ''; // 최종 주소 변수
|
||||
var extraAddr = ''; // 조합형 주소 변수
|
||||
|
||||
// 사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
|
||||
if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
|
||||
fullAddr = data.roadAddress;
|
||||
|
||||
} else { // 사용자가 지번 주소를 선택했을 경우(J)
|
||||
fullAddr = data.jibunAddress;
|
||||
}
|
||||
|
||||
// 사용자가 선택한 주소가 도로명 타입일때 조합한다.
|
||||
if(data.userSelectedType === 'R'){
|
||||
//법정동명이 있을 경우 추가한다.
|
||||
if(data.bname !== ''){
|
||||
extraAddr += data.bname;
|
||||
}
|
||||
// 건물명이 있을 경우 추가한다.
|
||||
if(data.buildingName !== ''){
|
||||
extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
|
||||
}
|
||||
// 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.
|
||||
extraAddr = (extraAddr !== '' ? ' ('+ extraAddr +')' : '');
|
||||
}
|
||||
|
||||
// 우편번호와 주소 정보를 해당 필드에 넣고, 커서를 상세주소 필드로 이동한다.
|
||||
var of = document[frm_name];
|
||||
|
||||
of[frm_zip].value = data.zonecode;
|
||||
|
||||
of[frm_addr1].value = fullAddr;
|
||||
of[frm_addr3].value = extraAddr;
|
||||
|
||||
if(of[frm_jibeon] !== undefined){
|
||||
of[frm_jibeon].value = data.userSelectedType;
|
||||
}
|
||||
|
||||
setTimeout(function(){
|
||||
$("#meta_viewport").attr("content", vContent);
|
||||
of[frm_addr2].focus();
|
||||
} , 100);
|
||||
};
|
||||
|
||||
switch(zip_case) {
|
||||
case 1 : //iframe을 이용하여 페이지에 끼워 넣기
|
||||
var daum_pape_id = 'daum_juso_page'+frm_zip,
|
||||
element_wrap = document.getElementById(daum_pape_id),
|
||||
currentScroll = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
|
||||
if (element_wrap == null) {
|
||||
element_wrap = document.createElement("div");
|
||||
element_wrap.setAttribute("id", daum_pape_id);
|
||||
element_wrap.style.cssText = 'display:none;border:1px solid;left:0;width:100%;height:300px;margin:5px 0;position:relative;-webkit-overflow-scrolling:touch;';
|
||||
element_wrap.innerHTML = '<img src="//t1.daumcdn.net/postcode/resource/images/close.png" id="btnFoldWrap" style="cursor:pointer;position:absolute;right:0px;top:-21px;z-index:1" class="close_daum_juso" alt="접기 버튼">';
|
||||
jQuery('form[name="'+frm_name+'"]').find('input[name="'+frm_addr1+'"]').before(element_wrap);
|
||||
jQuery("#"+daum_pape_id).off("click", ".close_daum_juso").on("click", ".close_daum_juso", function(e){
|
||||
e.preventDefault();
|
||||
$("#meta_viewport").attr("content", vContent);
|
||||
jQuery(this).parent().hide();
|
||||
});
|
||||
}
|
||||
|
||||
new daum.Postcode({
|
||||
oncomplete: function(data) {
|
||||
complete_fn(data);
|
||||
// iframe을 넣은 element를 안보이게 한다.
|
||||
element_wrap.style.display = 'none';
|
||||
// 우편번호 찾기 화면이 보이기 이전으로 scroll 위치를 되돌린다.
|
||||
document.body.scrollTop = currentScroll;
|
||||
},
|
||||
// 우편번호 찾기 화면 크기가 조정되었을때 실행할 코드를 작성하는 부분.
|
||||
// iframe을 넣은 element의 높이값을 조정한다.
|
||||
onresize : function(size) {
|
||||
element_wrap.style.height = size.height + "px";
|
||||
},
|
||||
maxSuggestItems : g5_is_mobile ? 6 : 10,
|
||||
width : '100%',
|
||||
height : '100%'
|
||||
}).embed(element_wrap);
|
||||
|
||||
// iframe을 넣은 element를 보이게 한다.
|
||||
element_wrap.style.display = 'block';
|
||||
break;
|
||||
case 2 : //새창으로 띄우기
|
||||
new daum.Postcode({
|
||||
oncomplete: function(data) {
|
||||
complete_fn(data);
|
||||
}
|
||||
}).open();
|
||||
break;
|
||||
default : //iframe을 이용하여 레이어 띄우기
|
||||
var rayer_id = 'daum_juso_rayer'+frm_zip,
|
||||
element_layer = document.getElementById(rayer_id);
|
||||
if (element_layer == null) {
|
||||
element_layer = document.createElement("div");
|
||||
element_layer.setAttribute("id", rayer_id);
|
||||
element_layer.style.cssText = 'display:none;border:5px solid;position:fixed;width:300px;height:460px;left:50%;margin-left:-155px;top:50%;margin-top:-235px;overflow:hidden;-webkit-overflow-scrolling:touch;z-index:10000';
|
||||
element_layer.innerHTML = '<img src="//i1.daumcdn.net/localimg/localimages/07/postcode/320/close.png" id="btnCloseLayer" style="cursor:pointer;position:absolute;right:-3px;top:-3px;z-index:1" class="close_daum_juso" alt="닫기 버튼">';
|
||||
document.body.appendChild(element_layer);
|
||||
jQuery("#"+rayer_id).off("click", ".close_daum_juso").on("click", ".close_daum_juso", function(e){
|
||||
e.preventDefault();
|
||||
$("#meta_viewport").attr("content", vContent);
|
||||
jQuery(this).parent().hide();
|
||||
});
|
||||
}
|
||||
|
||||
new daum.Postcode({
|
||||
oncomplete: function(data) {
|
||||
complete_fn(data);
|
||||
// iframe을 넣은 element를 안보이게 한다.
|
||||
element_layer.style.display = 'none';
|
||||
},
|
||||
maxSuggestItems : g5_is_mobile ? 6 : 10,
|
||||
width : '100%',
|
||||
height : '100%'
|
||||
}).embed(element_layer);
|
||||
|
||||
// iframe을 넣은 element를 보이게 한다.
|
||||
element_layer.style.display = 'block';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 새로운 비밀번호 분실 창 : 101123
|
||||
**/
|
||||
win_password_lost = function(href)
|
||||
{
|
||||
var new_win = window.open(href, 'win_password_lost', 'width=617, height=330, scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 설문조사 결과
|
||||
**/
|
||||
var win_poll = function(href) {
|
||||
var new_win = window.open(href, 'win_poll', 'width=616, height=500, scrollbars=1');
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 쿠폰
|
||||
**/
|
||||
var win_coupon = function(href) {
|
||||
var new_win = window.open(href, "win_coupon", "left=100,top=100,width=700, height=600, scrollbars=1");
|
||||
new_win.focus();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 스크린리더 미사용자를 위한 스크립트 - 지운아빠 2013-04-22
|
||||
* alt 값만 갖는 그래픽 링크에 마우스오버 시 title 값 부여, 마우스아웃 시 title 값 제거
|
||||
**/
|
||||
$(function() {
|
||||
$('a img').mouseover(function() {
|
||||
$a_img_title = $(this).attr('alt');
|
||||
$(this).attr('title', $a_img_title);
|
||||
}).mouseout(function() {
|
||||
$(this).attr('title', '');
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 텍스트 리사이즈
|
||||
**/
|
||||
function font_resize(id, rmv_class, add_class, othis)
|
||||
{
|
||||
var $el = $("#"+id);
|
||||
|
||||
if((typeof rmv_class !== "undefined" && rmv_class) || (typeof add_class !== "undefined" && add_class)){
|
||||
$el.removeClass(rmv_class).addClass(add_class);
|
||||
|
||||
set_cookie("ck_font_resize_rmv_class", rmv_class, 1, g5_cookie_domain);
|
||||
set_cookie("ck_font_resize_add_class", add_class, 1, g5_cookie_domain);
|
||||
}
|
||||
|
||||
if(typeof othis !== "undefined"){
|
||||
$(othis).addClass('select').siblings().removeClass('select');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 댓글 수정 토큰
|
||||
**/
|
||||
function set_comment_token(f)
|
||||
{
|
||||
if(typeof f.token === "undefined")
|
||||
$(f).prepend('<input type="hidden" name="token" value="">');
|
||||
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.comment_token.php",
|
||||
type: "GET",
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
f.token.value = data.token;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(function(){
|
||||
$(".win_point").click(function() {
|
||||
win_point(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_memo").click(function() {
|
||||
win_memo(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_email").click(function() {
|
||||
win_email(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_scrap").click(function() {
|
||||
win_scrap(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_profile").click(function() {
|
||||
win_profile(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_homepage").click(function() {
|
||||
win_homepage(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".win_password_lost").click(function() {
|
||||
win_password_lost(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
/*
|
||||
$(".win_poll").click(function() {
|
||||
win_poll(this.href);
|
||||
return false;
|
||||
});
|
||||
*/
|
||||
|
||||
$(".win_coupon").click(function() {
|
||||
win_coupon(this.href);
|
||||
return false;
|
||||
});
|
||||
|
||||
// 사이드뷰
|
||||
var sv_hide = false;
|
||||
$(".sv_member, .sv_guest").click(function() {
|
||||
$(".sv").removeClass("sv_on");
|
||||
$(this).closest(".sv_wrap").find(".sv").addClass("sv_on");
|
||||
});
|
||||
|
||||
$(".sv, .sv_wrap").hover(
|
||||
function() {
|
||||
sv_hide = false;
|
||||
},
|
||||
function() {
|
||||
sv_hide = true;
|
||||
}
|
||||
);
|
||||
|
||||
$(".sv_member, .sv_guest").focusin(function() {
|
||||
sv_hide = false;
|
||||
$(".sv").removeClass("sv_on");
|
||||
$(this).closest(".sv_wrap").find(".sv").addClass("sv_on");
|
||||
});
|
||||
|
||||
$(".sv a").focusin(function() {
|
||||
sv_hide = false;
|
||||
});
|
||||
|
||||
$(".sv a").focusout(function() {
|
||||
sv_hide = true;
|
||||
});
|
||||
|
||||
// 셀렉트 ul
|
||||
var sel_hide = false;
|
||||
$('.sel_btn').click(function() {
|
||||
$('.sel_ul').removeClass('sel_on');
|
||||
$(this).siblings('.sel_ul').addClass('sel_on');
|
||||
});
|
||||
|
||||
$(".sel_wrap").hover(
|
||||
function() {
|
||||
sel_hide = false;
|
||||
},
|
||||
function() {
|
||||
sel_hide = true;
|
||||
}
|
||||
);
|
||||
|
||||
$('.sel_a').focusin(function() {
|
||||
sel_hide = false;
|
||||
});
|
||||
|
||||
$('.sel_a').focusout(function() {
|
||||
sel_hide = true;
|
||||
});
|
||||
|
||||
$(document).click(function() {
|
||||
if(sv_hide) { // 사이드뷰 해제
|
||||
$(".sv").removeClass("sv_on");
|
||||
}
|
||||
if (sel_hide) { // 셀렉트 ul 해제
|
||||
$('.sel_ul').removeClass('sel_on');
|
||||
}
|
||||
});
|
||||
|
||||
$(document).focusin(function() {
|
||||
if(sv_hide) { // 사이드뷰 해제
|
||||
$(".sv").removeClass("sv_on");
|
||||
}
|
||||
if (sel_hide) { // 셀렉트 ul 해제
|
||||
$('.sel_ul').removeClass('sel_on');
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on( "keyup change", "textarea#wr_content[maxlength]", function(){
|
||||
var str = $(this).val();
|
||||
var mx = parseInt($(this).attr("maxlength"));
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function get_write_token(bo_table)
|
||||
{
|
||||
var token = "";
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: g5_bbs_url+"/write_token.php",
|
||||
data: { bo_table: bo_table },
|
||||
cache: false,
|
||||
async: false,
|
||||
dataType: "json",
|
||||
success: function(data) {
|
||||
if(data.error) {
|
||||
alert(data.error);
|
||||
if(data.url)
|
||||
document.location.href = data.url;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
token = data.token;
|
||||
}
|
||||
});
|
||||
|
||||
return token;
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$(document).on("click", "form[name=fwrite] input:submit, form[name=fwrite] button:submit, form[name=fwrite] input:image", function() {
|
||||
var f = this.form;
|
||||
|
||||
if (typeof(f.bo_table) == "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
var bo_table = f.bo_table.value;
|
||||
var token = get_write_token(bo_table);
|
||||
|
||||
if(!token) {
|
||||
alert("토큰 정보가 올바르지 않습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var $f = $(f);
|
||||
|
||||
if(typeof f.token === "undefined")
|
||||
$f.prepend('<input type="hidden" name="token" value="">');
|
||||
|
||||
$f.find("input[name=token]").val(token);
|
||||
|
||||
return true;
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
//디자인팀 작업 내용 추가
|
||||
// include.js
|
||||
window.addEventListener('load', function() {
|
||||
var allElements = document.getElementsByTagName('*');
|
||||
Array.prototype.forEach.call(allElements, function(el) {
|
||||
var includePath = el.dataset.includePath;
|
||||
if (includePath) {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function () {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
el.outerHTML = this.responseText;
|
||||
}
|
||||
};
|
||||
xhttp.open('GET', includePath, true);
|
||||
xhttp.send();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// ★★ lenis 멈추기★★
|
||||
function handlePopupScroll() {
|
||||
$('body').css('overflow', 'hidden');
|
||||
$('body').on('wheel', function(e) {
|
||||
e.stopPropagation();
|
||||
});
|
||||
lenis.stop();
|
||||
}
|
||||
|
||||
// 각 팝업창 불러오기
|
||||
function agreement(){
|
||||
$(".popup_wrap").hide();
|
||||
$('.btn_close').show();
|
||||
$('#pop_agreement').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
function join(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_join').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function login(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_login').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function mypage01(){
|
||||
$(".popup_wrap").hide();
|
||||
$('.btn_close').show();
|
||||
$('#pop_mypage01').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function mypage02(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_mypage02').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function mypage03(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_mypage03').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function search(){
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_search').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
function sitemap(){
|
||||
$(".popup_sitemap").hide();
|
||||
$('#sitemap').show(0, function(){
|
||||
$.getScript("./js/popup.js", function() {
|
||||
handlePopupScroll();
|
||||
});});
|
||||
};
|
||||
|
||||
|
||||
function privacy(type) {
|
||||
$(".popup_wrap").hide();
|
||||
$('#pop_privacy').show(0, function() {
|
||||
if (type === 'privacy') {
|
||||
$('#pop_privacy li.tab_privacy').addClass('on');
|
||||
$('#pop_privacy li.tab_agreement').removeClass('on');
|
||||
$('.content.pri').addClass('show').removeClass('hide');
|
||||
$('.content.agr').removeClass('show').addClass('hide');
|
||||
|
||||
} else if (type === 'agreement') {
|
||||
$('#pop_privacy li.tab_agreement').addClass('on');
|
||||
$('#pop_privacy li.tab_privacy').removeClass('on');
|
||||
$('.content.agr').addClass('show').removeClass('hide');
|
||||
$('.content.pri').removeClass('show').addClass('hide');
|
||||
}
|
||||
$('body').css('overflow', 'hidden');
|
||||
$('#pop_privacy .content').css('overflow', 'auto');
|
||||
$('#pop_privacy .content').on('wheel', function(e) {
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
$.getScript("./js/popup.js", function() {
|
||||
lenis.stop();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// FOOTER - top버튼 위치 조정하기
|
||||
document.addEventListener('DOMContentLoaded', (event)=> {
|
||||
|
||||
const topButton = document.querySelector('.btn_top');
|
||||
|
||||
function adjustButtonPosition() {
|
||||
const scrollY = window.scrollY; // 현재 스크롤 위치
|
||||
const windowHeight = window.innerHeight; // 윈도우 높이
|
||||
const documentHeight = document.documentElement.scrollHeight; // 문서 전체 높이
|
||||
|
||||
const bottomSpace = 230; // 탑 버튼이 아래에서 떨어져 있어야 하는 거리
|
||||
// const buttonHeight = topButton.offsetHeight; // 탑 버튼의 높이
|
||||
|
||||
// 문서의 맨 아래로부터 300px 떨어지기 위한 계산
|
||||
if (scrollY + windowHeight >= documentHeight - bottomSpace) {
|
||||
topButton.style.bottom = `${bottomSpace + (scrollY + windowHeight - documentHeight)}px`;
|
||||
} else {
|
||||
topButton.style.bottom = '60px'; // 원래의 위치
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', adjustButtonPosition);
|
||||
window.addEventListener('load', adjustButtonPosition);
|
||||
|
||||
const showNav = gsap.from(".js__header", {
|
||||
yPercent: -200,
|
||||
paused: true,
|
||||
duration: 0.2
|
||||
}).progress(1);
|
||||
|
||||
ScrollTrigger.create({
|
||||
start: "top top",
|
||||
end: 99999,
|
||||
onUpdate: (self) => {
|
||||
self.direction === -1 ? showNav.play() : showNav.reverse()
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// FOOTER - 패밀리사이트 열고닫기
|
||||
$(function(){
|
||||
$('.menu_my').mouseover(function(){
|
||||
$('.menu_my_list').show();
|
||||
})
|
||||
|
||||
$('.menu_my').mouseout(function(){
|
||||
$('.menu_my_list').hide();
|
||||
})
|
||||
|
||||
//footer family site toggle
|
||||
$('.family_btn').click(function(){
|
||||
$('.family_list').toggleClass('family_on');
|
||||
$('.family_btn').toggleClass('family_on');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// HEADER - faq버튼이 배경에 따라 블랙&화이트로 변하기
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const goFaq = document.querySelector('.floating_faq');
|
||||
const darkSections = document.querySelectorAll('.js__dark');
|
||||
|
||||
const observerOptions = {
|
||||
root: null,
|
||||
rootMargin: '0px',
|
||||
threshold: 0.5
|
||||
};
|
||||
|
||||
const observerCallback = (entries) => {
|
||||
let darkSectionVisible = false;
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
darkSectionVisible = true;
|
||||
}
|
||||
});
|
||||
if (darkSectionVisible) {
|
||||
goFaq.style.backgroundColor = '#fff';
|
||||
goFaq.style.color = '#000';
|
||||
} else {
|
||||
goFaq.style.backgroundColor = '#000';
|
||||
goFaq.style.color = '#fff';
|
||||
}
|
||||
};
|
||||
const observer = new IntersectionObserver(observerCallback, observerOptions);
|
||||
darkSections.forEach(section => observer.observe(section));
|
||||
});
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$latest_skin_url.'/style.css">', 0);
|
||||
add_javascript('<script src="'.G5_JS_URL.'/jquery.bxslider.js"></script>', 10);
|
||||
$list_count = (is_array($list) && $list) ? count($list) : 0;
|
||||
?>
|
||||
|
||||
<div class="notice ft_cnt">
|
||||
<h2><a href="<?php echo get_pretty_url($bo_table); ?>"><?php echo $bo_subject ?></a></h2>
|
||||
<ul>
|
||||
<?php for ($i=0; $i<$list_count; $i++) { ?>
|
||||
<li>
|
||||
<?php
|
||||
if ($list[$i]['icon_secret']) echo "<span class=\"lock_icon\"><i class=\"fa fa-lock\" aria-hidden=\"true\"></i></span> ";
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">N<span class=\"sound_only\">새글</span></span>";
|
||||
//echo $list[$i]['icon_reply']." ";
|
||||
echo "<a href=\"".get_pretty_url($bo_table, $list[$i]['wr_id'])."\">";
|
||||
if ($list[$i]['is_notice'])
|
||||
echo "<strong>".$list[$i]['subject']."</strong>";
|
||||
else
|
||||
echo $list[$i]['subject'];
|
||||
|
||||
if ($list[$i]['comment_cnt'])
|
||||
echo $list[$i]['comment_cnt'];
|
||||
|
||||
echo "</a>";
|
||||
|
||||
// if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; }
|
||||
// if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; }
|
||||
|
||||
//if ($list[$i]['icon_file']) echo " <i class=\"fa fa-download\" aria-hidden=\"true\"></i>" ;
|
||||
//if ($list[$i]['icon_link']) echo " <i class=\"fa fa-link\" aria-hidden=\"true\"></i>" ;
|
||||
//if ($list[$i]['icon_hot']) echo " <i class=\"fa fa-heart\" aria-hidden=\"true\"></i>";
|
||||
?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ($list_count == 0) { //게시물이 없을 때 ?>
|
||||
<li class="empty_li">게시물이 없습니다.</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 새글 스킨 (latest) */
|
||||
.notice {position:relative;padding:15px 50px}
|
||||
.notice h2 {margin-bottom:20px}
|
||||
.notice h2 a {font-size:1.2em;color:#fff}
|
||||
.notice li {text-overflow:ellipsis;overflow:hidden;white-space:nowrap;border-bottom:1px solid #343434}
|
||||
.notice li a, .notice li.empty_li {color:#e3e3e3;padding:11px 0;display:inline-block}
|
||||
.notice li .lock_icon {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#4f818c;background:#cbe3e8;text-align:center;border-radius:2px;font-size: 12px;border:1px solid #a2c6ce;vertical-align:baseline}
|
||||
.notice li .new_icon {display:inline-block;line-height:16px;width:16px;font-size:0.833em;color:#ffff00;background:#6db142;text-align:center;margin-right:3px;border-radius:2px;vertical-align:baseline}
|
||||
.notice .cnt_cm {background:#5c85c1;color:#fff;font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;white-space:nowrap;margin-left:5px}
|
||||
.notice li.empty_li {border-bottom:0;line-height:120px}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$latest_skin_url.'/style.css">', 0);
|
||||
$thumb_width = 210;
|
||||
$thumb_height = 150;
|
||||
$list_count = (is_array($list) && $list) ? count($list) : 0;
|
||||
?>
|
||||
|
||||
<div class="pic_lt">
|
||||
<h2 class="lat_title"><a href="<?php echo get_pretty_url($bo_table); ?>"><?php echo $bo_subject ?></a></h2>
|
||||
<ul>
|
||||
<?php
|
||||
for ($i=0; $i<$list_count; $i++) {
|
||||
$thumb = get_list_thumbnail($bo_table, $list[$i]['wr_id'], $thumb_width, $thumb_height, false, true);
|
||||
|
||||
if($thumb['src']) {
|
||||
$img = $thumb['src'];
|
||||
} else {
|
||||
$img = G5_IMG_URL.'/no_img.png';
|
||||
$thumb['alt'] = '이미지가 없습니다.';
|
||||
}
|
||||
$img_content = '<img src="'.$img.'" alt="'.$thumb['alt'].'" >';
|
||||
$wr_href = get_pretty_url($bo_table, $list[$i]['wr_id']);
|
||||
?>
|
||||
<li class="gallery_li">
|
||||
<a href="<?php echo $wr_href; ?>" class="lt_img"><?php echo run_replace('thumb_image_tag', $img_content, $thumb); ?></a>
|
||||
<?php
|
||||
if ($list[$i]['icon_secret']) echo "<i class=\"fa fa-lock\" aria-hidden=\"true\"></i><span class=\"sound_only\">비밀글</span> ";
|
||||
|
||||
echo "<a href=\"".$wr_href."\"> ";
|
||||
if ($list[$i]['is_notice'])
|
||||
echo "<strong>".$list[$i]['subject']."</strong>";
|
||||
else
|
||||
echo $list[$i]['subject'];
|
||||
echo "</a>";
|
||||
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">N<span class=\"sound_only\">새글</span></span>";
|
||||
if ($list[$i]['icon_hot']) echo "<span class=\"hot_icon\">H<span class=\"sound_only\">인기글</span></span>";
|
||||
|
||||
// if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; }
|
||||
// if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; }
|
||||
|
||||
// echo $list[$i]['icon_reply']." ";
|
||||
// if ($list[$i]['icon_file']) echo " <i class=\"fa fa-download\" aria-hidden=\"true\"></i>" ;
|
||||
// if ($list[$i]['icon_link']) echo " <i class=\"fa fa-link\" aria-hidden=\"true\"></i>" ;
|
||||
|
||||
if ($list[$i]['comment_cnt']) echo "
|
||||
<span class=\"lt_cmt\">".$list[$i]['wr_comment']."</span>";
|
||||
|
||||
?>
|
||||
|
||||
<div class="lt_info">
|
||||
<span class="lt_nick"><?php echo $list[$i]['name'] ?></span>
|
||||
<span class="lt_date"><?php echo $list[$i]['datetime2'] ?></span>
|
||||
</div>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ($list_count == 0) { //게시물이 없을 때 ?>
|
||||
<li class="empty_li">게시물이 없습니다.</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="lt_more"><span class="sound_only"><?php echo $bo_subject ?></span>더보기</a>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,36 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 새글 스킨 (latest) */
|
||||
.pic_lt {position:relative;margin-bottom:20px;background:#fff}
|
||||
.pic_lt .lat_title {display:block;line-height:45px;font-size:1.2em;color:#253dbe}
|
||||
.pic_lt .lat_title a {color:#000;display:inline-block;position:relative}
|
||||
|
||||
.pic_lt .lt_more {position:absolute;top:11px;right:10px;display:block;width:25px;line-height:25px;color:#aaa;border-radius:3px;text-align:center;}
|
||||
.pic_lt .lt_more:hover {color:#777}
|
||||
.pic_lt ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.pic_lt ul {margin: 0 -10px}
|
||||
.pic_lt li {float:left;width:25%;padding:0 10px}
|
||||
.pic_lt li.gallery_li:nth-child(4n+1) {clear: both!important}
|
||||
.pic_lt li .lt_img {margin:5px 0;display:block}
|
||||
.pic_lt li .lt_img img, .pic_lt li .lt_img video {width:100%;height:auto}
|
||||
.pic_lt li a:hover {color:#a22121}
|
||||
.pic_lt li .fa-heart {color:#ff0000}
|
||||
.pic_lt li .fa-lock {display:inline-block;line-height:14px;width:16px;color:#4f818c;background:#cbe3e8;text-align:center;border-radius:2px;font-size:12px;border:1px solid #cbe3e8;vertical-align:middle}
|
||||
.pic_lt li .new_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#23db79;background:#b9ffda;text-align:center;border-radius:2px;margin-left:2px;font-weight:bold;vertical-align:middle}
|
||||
.pic_lt li .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#ff0000;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
.pic_lt li .fa-caret-right {color:#bbb}
|
||||
.pic_lt li .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#daae37;background:#ffefb9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
.pic_lt li .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#b451fd;background:#edd3fd;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
|
||||
.pic_lt .profile_img img{border-radius:50%}
|
||||
|
||||
.lt_info {padding:10px 0}
|
||||
.lt_info .lt_nick {}
|
||||
.lt_info .lt_date {color:#888}
|
||||
|
||||
.pic_lt .empty_li {line-height:145px ;color:#666;text-align:center;padding:0}
|
||||
.pic_lt .empty_li:before {background:none;padding:0}
|
||||
|
||||
.pic_lt .lt_cmt {background:#e9eff5;color:#3a8afd;font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;vertical-align:middle}
|
||||
.pic_lt .lt_more {position:absolute;top:11px;right:0;display:block;width:40px;line-height:25px;color:#3a8afd;border-radius:3px;text-align:center}
|
||||
.pic_lt .lt_more:hover {color:#777}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$latest_skin_url.'/style.css">', 0);
|
||||
$thumb_width = 297;
|
||||
$thumb_height = 212;
|
||||
$list_count = (is_array($list) && $list) ? count($list) : 0;
|
||||
?>
|
||||
|
||||
<div class="pic_li_lt">
|
||||
<h2 class="lat_title"><a href="<?php echo get_pretty_url($bo_table); ?>"><?php echo $bo_subject ?></a></h2>
|
||||
<ul>
|
||||
<?php
|
||||
for ($i=0; $i<$list_count; $i++) {
|
||||
|
||||
$img_link_html = '';
|
||||
|
||||
$wr_href = get_pretty_url($bo_table, $list[$i]['wr_id']);
|
||||
|
||||
if( $i === 0 ) {
|
||||
$thumb = get_list_thumbnail($bo_table, $list[$i]['wr_id'], $thumb_width, $thumb_height, false, true);
|
||||
|
||||
if($thumb['src']) {
|
||||
$img = $thumb['src'];
|
||||
} else {
|
||||
$img = G5_IMG_URL.'/no_img.png';
|
||||
$thumb['alt'] = '이미지가 없습니다.';
|
||||
}
|
||||
$img_content = '<img src="'.$img.'" alt="'.$thumb['alt'].'" >';
|
||||
$img_link_html = '<a href="'.$wr_href.'" class="lt_img" >'.run_replace('thumb_image_tag', $img_content, $thumb).'</a>';
|
||||
}
|
||||
?>
|
||||
<li>
|
||||
<?php echo $img_link_html; ?>
|
||||
<?php
|
||||
if ($list[$i]['icon_secret']) echo "<i class=\"fa fa-lock\" aria-hidden=\"true\"></i><span class=\"sound_only\">비밀글</span> ";
|
||||
|
||||
echo "<a href=\"".$wr_href."\" class=\"pic_li_tit\"> ";
|
||||
if ($list[$i]['is_notice'])
|
||||
echo "<strong>".$list[$i]['subject']."</strong>";
|
||||
else
|
||||
echo $list[$i]['subject'];
|
||||
|
||||
echo "</a>";
|
||||
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">N<span class=\"sound_only\">새글</span></span>";
|
||||
if ($list[$i]['icon_hot']) echo "<span class=\"hot_icon\">H<span class=\"sound_only\">인기글</span></span>";
|
||||
|
||||
// if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; }
|
||||
// if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; }
|
||||
|
||||
//echo $list[$i]['icon_reply']." ";
|
||||
// if ($list[$i]['icon_file']) echo " <i class=\"fa fa-download\" aria-hidden=\"true\"></i>" ;
|
||||
//if ($list[$i]['icon_link']) echo " <i class=\"fa fa-link\" aria-hidden=\"true\"></i>" ;
|
||||
|
||||
if ($list[$i]['comment_cnt']) echo "
|
||||
<span class=\"lt_cmt\">".$list[$i]['wr_comment']."</span>";
|
||||
|
||||
?>
|
||||
|
||||
<div class="lt_info">
|
||||
<span class="lt_nick"><?php echo $list[$i]['name'] ?></span>
|
||||
<span class="lt_date"><?php echo $list[$i]['datetime2'] ?></span>
|
||||
</div>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ($list_count == 0) { //게시물이 없을 때 ?>
|
||||
<li class="empty_li">게시물이 없습니다.</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="lt_more"><span class="sound_only"><?php echo $bo_subject ?></span>더보기</a>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,37 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 새글 스킨 (latest) */
|
||||
.pic_li_lt {position:relative;width:33.3333%;float:left;padding:0 10px;background:#fff}
|
||||
.pic_li_lt .lat_title {display:block;line-height:45px;font-size:1.2em;color:#253dbe}
|
||||
.pic_li_lt .lat_title a {color:#000;display:inline-block;position:relative}
|
||||
.latest_top_wr .pic_li_lt:nth-child(3n+1) {clear: both!important}
|
||||
|
||||
.pic_li_lt .lt_more {position:absolute;top:11px;right:10px;display:block;width:25px;line-height:25px;color:#aaa;border-radius:3px;text-align:center}
|
||||
.pic_li_lt .lt_more:hover {color:#777}
|
||||
.pic_li_lt ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.pic_li_lt li {border-bottom:1px solid #e5ecee;margin-bottom:10px}
|
||||
.pic_li_lt li .lt_img {display:none}
|
||||
.pic_li_lt li:first-child .lt_img {display:block;margin:0 0 10px;}
|
||||
.pic_li_lt li:first-child .lt_img img, .pic_li_lt li .lt_img video {width:100%;height:auto}
|
||||
.pic_li_lt li .pic_li_tit {font-weight:bold;font-size:1.2em;line-height:20px;vertical-align:middle}
|
||||
|
||||
.pic_li_lt li .fa-heart {color:#ff0000}
|
||||
.pic_li_lt li .fa-lock {display:inline-block;line-height:14px;width:16px;color:#4f818c;background:#cbe3e8;text-align:center;border-radius:2px;font-size:12px;border:1px solid #cbe3e8;vertical-align:middle}
|
||||
.pic_li_lt li .new_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#23db79;background:#b9ffda;text-align:center;border-radius:2px;margin-left:2px;font-weight:bold;vertical-align:middle}
|
||||
.pic_li_lt li .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#ff0000;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
.pic_li_lt li .fa-caret-right {color:#bbb}
|
||||
.pic_li_lt li .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#daae37;background:#ffefb9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
.pic_li_lt li .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#b451fd;background:#edd3fd;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
|
||||
.pic_li_lt .profile_img img{border-radius:50%}
|
||||
|
||||
.lt_info {padding:10px 0}
|
||||
.lt_info .lt_nick {}
|
||||
.lt_info .lt_date {color:#888}
|
||||
|
||||
.pic_li_lt .empty_li {line-height:145px;color:#666;text-align:center;padding:0}
|
||||
.pic_li_lt .empty_li:before {background:none;padding:0}
|
||||
|
||||
.pic_li_lt .lt_cmt {background:#e9eff5;color:#3a8afd;font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;vertical-align:middle}
|
||||
.pic_li_lt .lt_more {position:absolute;top:11px;right:10px;display:block;width:40px;line-height:25px;color:#3a8afd;border-radius:3px;text-align:center}
|
||||
.pic_li_lt .lt_more:hover {color:#777}
|
||||
|
After Width: | Height: | Size: 107 B |
|
After Width: | Height: | Size: 97 B |
|
After Width: | Height: | Size: 145 B |
|
After Width: | Height: | Size: 104 B |
|
After Width: | Height: | Size: 62 B |
|
After Width: | Height: | Size: 169 B |
|
After Width: | Height: | Size: 110 B |
|
After Width: | Height: | Size: 71 B |
|
After Width: | Height: | Size: 77 B |
|
After Width: | Height: | Size: 97 B |
|
After Width: | Height: | Size: 113 B |
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$latest_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<div class="lat">
|
||||
<strong class="lat_title"><i class="fa fa-list-ul" aria-hidden="true"></i> <a href="<?php echo G5_BBS_URL ?>/board.php?bo_table=<?php echo $bo_table ?>"><?php echo $bo_subject ?></a></strong>
|
||||
<ul>
|
||||
<?php for ($i=0; $i<count($list); $i++) { ?>
|
||||
<li>
|
||||
<?php
|
||||
//echo $list[$i]['icon_reply']." ";
|
||||
echo "<a href=\"".$list[$i]['href']."\">";
|
||||
if ($list[$i]['is_notice'])
|
||||
echo "<strong>".$list[$i]['subject']."</strong>";
|
||||
else
|
||||
echo $list[$i]['subject'];
|
||||
|
||||
if ($list[$i]['comment_cnt'])
|
||||
echo $list[$i]['comment_cnt'];
|
||||
|
||||
echo "</a>";
|
||||
|
||||
// if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; }
|
||||
// if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; }
|
||||
|
||||
if (isset($list[$i]['icon_new']) && $list[$i]['icon_new']) echo " <span class=\"new_icon\">NEW</span>";
|
||||
//if (isset($list[$i]['icon_hot'])) echo " <i class=\"fa fa-heart\" aria-hidden=\"true\"></i>" ;
|
||||
//if (isset($list[$i]['icon_file'])) echo " <i class=\"fa fa-download\" aria-hidden=\"true\"></i>" ;
|
||||
//if (isset($list[$i]['icon_link'])) echo " <i class=\"fa fa-link\" aria-hidden=\"true\"></i>" ;
|
||||
//if (isset($list[$i]['icon_secret'])) echo " <i class=\"fa fa-lock\" aria-hidden=\"true\"></i>" ;
|
||||
?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if (count($list) == 0) { //게시물이 없을 때 ?>
|
||||
<li>게시물이 없습니다.</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
@charset "utf-8";
|
||||
/* 새글 스킨 (latest) */
|
||||
.lat {position:relative;}
|
||||
.lat ul {margin:0 0 10px;padding:0;list-style:none;border:1px solid #e5e5e5}
|
||||
.lat li {border-top:1px solid #f3f3f3;padding:10px}
|
||||
.lat li:first-child{border:0}
|
||||
.lat li i{color:#9da4bc}
|
||||
.lat li .fa-heart{color:#ff0000}
|
||||
.lat li .new_icon{display:inline-block;padding: 0 3px;line-height:14px ;font-size:0.833em;color:#fff;background:#c56bed}
|
||||
.lat li .cnt_cmt{color:#ff3970}
|
||||
.lat_title {display:block;padding:10px 0 8px;font-size:1.167em}
|
||||
.lat_more {position:absolute;top:10px;right:0;}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
//if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once("../../../common.php");
|
||||
|
||||
extract($_REQUEST);
|
||||
|
||||
//아이디 중복체크
|
||||
if( $ActionKind =="dupl_check" && isset($reg_mb_id) ){
|
||||
$sql = "select count(*) cnt from g5_member where mb_id = TRIM('$reg_mb_id')";
|
||||
$mb = sql_fetch($sql);
|
||||
|
||||
echo $mb["cnt"];
|
||||
exit();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if (!function_exists('eng_img_url')) {
|
||||
function eng_img_url($path = '')
|
||||
{
|
||||
$baseUrl = '/eng/img';
|
||||
$cdnBaseUrl = '';
|
||||
|
||||
if ($cdnBaseUrl !== '') {
|
||||
$baseUrl = rtrim($cdnBaseUrl, '/');
|
||||
}
|
||||
|
||||
$path = ltrim((string) $path, '/');
|
||||
|
||||
return $path === '' ? $baseUrl : $baseUrl . '/' . $path;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,407 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>구매하기</title>
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<script type="text/javascript" src="../js/common.js"></script>
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" name="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>">
|
||||
<!-- HEADER -->
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
<!-- //Header -->
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- //모든 팝업페이지 경로 -->
|
||||
<!-- 컨텐츠 시작 -->
|
||||
|
||||
<div class="container buy">
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">Contact</h2>
|
||||
<span>EG-BIM Purchase Inquiries & Product Information</span>
|
||||
</div>
|
||||
</section>
|
||||
<section class="contents_wrap">
|
||||
|
||||
<div class="ask_area">
|
||||
<div class="ask_l">
|
||||
<span class="mid_tit">Experience the next-generation <br>S/W with <font class="egbim k">EG-BIM S/W</font></span>
|
||||
</div>
|
||||
<div class="ask_r">
|
||||
<span class="sub_text"><em>License usage <font style="color: var(--color-orange)">may be restricted</font></em> if duplicate licenses are detected.</span>
|
||||
<div class="ask_btn">
|
||||
<a href="/eng/bbs/descope_qa_list.php" class="btn_ask" ><i></i>EG-BIM Purchase Inquiry</a>
|
||||
<!-- <a href="#" onclick="alert('문의 게시판은 준비중입니다.'); return false;" class="btn_ask" ><i></i>EG-BIM 구매 문의</a> -->
|
||||
<a href="../download/EGBIM_leaflet_v01.pdf" download class="btn_brochure"><i></i>Brochure</a>
|
||||
<a href="../download/EGBIM_manual.pdf" download class="btn_manual"><i></i>Manual</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="video_area" data-aos="fade-right" data-aos-duration="1000">
|
||||
<div class="vod_wrap"><video autoplay muted loop playsinline><source src="../img/EGBIM_buy.mp4"></video></div>
|
||||
<div class="contact_area">
|
||||
<p>
|
||||
<span class="mid_tit">Purchase Consultation</span>
|
||||
<span class="sub_text">Contact the EG-BIM team directly</span>
|
||||
</p>
|
||||
<div class="line"></div>
|
||||
<ul>
|
||||
<li class="tel"><i></i><a href="tel:0214147434">02 - 2141 - 7434</a></li>
|
||||
<li class="mail"><i></i>baroncs@baroncs.co.kr</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- //컨텐츠 시작 -->
|
||||
<!-- FOOTER -->
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
<!-- //FOOTER -->
|
||||
</div>
|
||||
<script>
|
||||
AOS.init();
|
||||
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time)=>{
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
</script>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
// footer family site toggle
|
||||
$('.family_btn').click(function(e){
|
||||
e.stopPropagation();
|
||||
$('.family_list, .family_btn').toggleClass('family_on');
|
||||
});
|
||||
$(document).click(function(e){
|
||||
if(!$(e.target).closest('.family_wrap').length){
|
||||
$('.family_list, .family_btn').removeClass('family_on');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/bbs;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/faq;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/qa;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//descope 로그인, 로그아웃 js
|
||||
function updateHeaderMenu() {
|
||||
var isLoggedIn = !!sessionStorage.getItem("sessionJwt");
|
||||
// role 체크 예시 (로그인 시 저장해놓은 값)
|
||||
var isAdmin = sessionStorage.getItem('userRole') === 'super';
|
||||
|
||||
if (isLoggedIn) {
|
||||
$('.my_join2, .my_login2').show();
|
||||
$('.my_join, .my_login').hide();
|
||||
|
||||
// 마이페이지/관리자 메뉴 동적 출력
|
||||
if (isAdmin) {
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/eng/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
} else {
|
||||
$('#my_join2').html("<a href='javascript:mypage03();'>My Page</a>");
|
||||
}
|
||||
} else {
|
||||
$('.my_join2, .my_login2').hide();
|
||||
$('.my_join, .my_login').show();
|
||||
$('#my_join2').html(""); // 혹시모를 내용 초기화
|
||||
}
|
||||
}
|
||||
|
||||
function descopeLogout() {
|
||||
fetch('/eng/skin/member/basic/descope_logout.php', {
|
||||
method: 'POST',
|
||||
credentials: 'include' // PHPSESSID 쿠키 전송
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error('서버 로그아웃 실패');
|
||||
// 1) 로컬 저장소 정리
|
||||
// sessionStorage.removeItem("refreshJwt");
|
||||
// sessionStorage.removeItem("sessionJwt");
|
||||
// sessionStorage.removeItem("userRole");
|
||||
// sessionStorage.removeItem("userName");
|
||||
// sessionStorage.removeItem("loginId");
|
||||
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
// 2) UI 갱신
|
||||
updateHeaderMenu();
|
||||
// 3) 로그인 페이지로 이동
|
||||
window.location.href = '/eng/index.php';
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
alert('로그아웃 중 오류가 발생했습니다.');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// 기존에 있던 updateHeaderMenu() 호출 뒤에
|
||||
$('#my_login2 a').off('click').on('click', function(e){
|
||||
e.preventDefault();
|
||||
descopeLogout();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateHeaderMenu();
|
||||
// (필요하다면, 로그인 성공 후에도 항상 updateHeaderMenu(); 호출)
|
||||
});
|
||||
|
||||
//descope login
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
|
||||
$.ajax({
|
||||
url : '/eng/skin/member/basic/descope_login.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
dataType : "json",
|
||||
success : function(res){
|
||||
if(res.status === "ok") {
|
||||
// 토큰 저장
|
||||
// sessionStorage.setItem("refreshJwt", res.refreshJwt);
|
||||
sessionStorage.setItem("sessionJwt", res.sessionJwt);
|
||||
|
||||
// ✅ 사용자 정보 저장
|
||||
if (res.user) {
|
||||
sessionStorage.setItem("loginId", res.user.loginIds?.[0] || '');
|
||||
sessionStorage.setItem("userName", res.user.name || '');
|
||||
sessionStorage.setItem("company", res.user.customAttributes?.company || '');
|
||||
sessionStorage.setItem("familyCompany", res.user.customAttributes?.familyCompany || '');
|
||||
sessionStorage.setItem("position", res.user.customAttributes?.position || '');
|
||||
sessionStorage.setItem("team", res.user.customAttributes?.team || '');
|
||||
sessionStorage.setItem("familyUniqueKey", res.user.customAttributes?.familyUniqueKey || '');
|
||||
sessionStorage.setItem("phone", res.user.phone || '');
|
||||
}
|
||||
|
||||
// ✅ 추가: 관리자 등 정보 저장
|
||||
if(res.user && res.user.roleNames && res.user.roleNames[0])
|
||||
sessionStorage.setItem("userRole", res.user.roleNames[0]);
|
||||
else
|
||||
sessionStorage.removeItem("userRole");
|
||||
|
||||
// ✅ 로그인 후 메뉴 갱신
|
||||
updateHeaderMenu();
|
||||
|
||||
// UI 처리
|
||||
$('.popup_wrap').hide();
|
||||
$('body').css('overflow', '');
|
||||
lenis.start();
|
||||
// alert('로그인 하셨습니다.');
|
||||
} else {
|
||||
alert(res.message || "로그인 실패");
|
||||
|
||||
// 🔴 실패 횟수에 따라 안내 배너 교체
|
||||
if (res.failCount && res.failCount >= 8) {
|
||||
updateLoginBanner("fail");
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err.statusText || "통신 오류");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ 배너 교체 함수
|
||||
function updateLoginBanner(type = "default") {
|
||||
const $banner = $('#login_notice_banner');
|
||||
if (!$banner.length) return;
|
||||
|
||||
if (type === "default") {
|
||||
$banner.css({ background: "#063e01ff", color: "#fff" });
|
||||
$banner.find("strong").text("[로그인 시스템 변경 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
더 나은 보안을 위해 2025년 8월 8일부터 로그인 시스템이 변경되었습니다.<br>
|
||||
기존 회원 또한 신규 시스템에 맞춰 재가입을 진행해주시기 바랍니다.
|
||||
`);
|
||||
$banner.find("p:last").html(`※ 로그인 및 가입 관련 문의: <strong>010-8721-7453</strong>`);
|
||||
}
|
||||
|
||||
if (type === "fail") {
|
||||
$banner.css({ background: "#6a0202ff", color: "#faf6f6ff" });
|
||||
$banner.find("strong").text("[로그인 시도 제한 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
비밀번호 입력을 <strong>7회 이상 연속 실패</strong>하셨습니다.<br>
|
||||
<strong>8번째 시도부터 3분 대기</strong>가 적용됩니다.<br>
|
||||
10회 이상 실패 시 계정이 잠금 처리됩니다.
|
||||
`);
|
||||
$banner.find("p:last").text("");
|
||||
}
|
||||
}
|
||||
//회원가입 약관동의
|
||||
// $('#fregister button[type=submit]').click(function(e){
|
||||
// e.preventDefault();
|
||||
// let agree11 = $('#agree11').val();
|
||||
// let agree21 = $('#agree21').val();
|
||||
// $.ajax({
|
||||
// url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
// type : "POST",
|
||||
// datatype : "json",
|
||||
// contentType: 'application/json; charset=utf-8',
|
||||
// data : {
|
||||
// 'agree11' : agree11,
|
||||
// 'agree21' : agree21
|
||||
// },
|
||||
// success : function(data){
|
||||
// var ss='';
|
||||
// for(i=0; i<data.length; i++){
|
||||
// ss=ss + data[i];
|
||||
// }
|
||||
// },
|
||||
// error : function(err){
|
||||
// alert(err);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
// 이지빔 프로그램 회원가입 url 쿼리스트링 파싱 함수
|
||||
function getQueryString(name) {
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
mainMask.classList.add('skip');
|
||||
// mainMask.style.aimation = 'none';
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(name);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
const popupParam = getQueryString('popup');
|
||||
|
||||
if (popupParam === 'signup') {
|
||||
console.log('쿼리 감지: signup → 회원가입 팝업 자동 오픈 시도');
|
||||
$('#pop_agreement').show(); // 팝업 보여주기
|
||||
|
||||
// 스크롤 잠금 (사용 중이면)
|
||||
$('body').css('overflow', 'hidden');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업 닫기 버튼 이벤트 연결
|
||||
$('#pop_agreement .btn_close').on('click', function() {
|
||||
$('#pop_agreement').hide();
|
||||
$('body').css('overflow', '');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//이지빔 프로그램 비밀번호 재설정 url 쿼리스트링 파싱 함수
|
||||
$(document).ready(function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const popup = urlParams.get('popup');
|
||||
const token = urlParams.get('t');
|
||||
|
||||
if (popup === 'pwreset') {
|
||||
// 팝업 전체 열기
|
||||
$('#pop_search').show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
|
||||
// 내부 컨텐츠 모두 숨기기
|
||||
$('#pop_search .popup_contents_wrap').hide();
|
||||
|
||||
if (token) {
|
||||
// 토큰이 있으면 비밀번호 재설정 단계
|
||||
if (!sessionStorage.getItem('pwreset_shown')) {
|
||||
$('#password_reset').show();
|
||||
sessionStorage.setItem('pwreset_shown', '1');
|
||||
}
|
||||
} else {
|
||||
// 토큰이 없으면 아이디 입력 단계 (첫 번째 .popup_contents_wrap)
|
||||
$('#pop_search .popup_contents_wrap').first().show();
|
||||
}
|
||||
}
|
||||
|
||||
// 닫기 버튼
|
||||
$('#pop_search .btn_close').on('click', function() {
|
||||
$('#pop_search').hide();
|
||||
$('body').css('overflow', '');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,159 @@
|
||||
<?php
|
||||
// header('Content-Type: application/json; charset=utf-8');
|
||||
// ini_set('display_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
// // 수신
|
||||
// $email = trim($_POST['email'] ?? '');
|
||||
// // $email = 'sdi9429@naver.com';
|
||||
// if (!$email) {
|
||||
// echo json_encode([
|
||||
// 'status' => 'error',
|
||||
// 'message' => '이메일이 전달되지 않았습니다.'
|
||||
// ]);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// // Descope 설정
|
||||
// $management_key = 'K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj'; // 예: P2w0N5fY1K...
|
||||
// $project_id = 'P2wON5fy1K6kyia269VpeIzYP8oP'; // 예: PRJ-xxxx
|
||||
|
||||
// // API URL
|
||||
// $url = 'https://api.descope.com/v1/mgmt/user?loginId=' . urlencode($email);
|
||||
|
||||
// // CURL 호출
|
||||
// $ch = curl_init($url);
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
// "Authorization: Bearer {$project_id}:{$management_key}",
|
||||
// "Content-Type: application/json"
|
||||
// ]);
|
||||
|
||||
// // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
|
||||
|
||||
// $response = curl_exec($ch);
|
||||
// $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// $curl_error = curl_error($ch);
|
||||
// curl_close($ch);
|
||||
|
||||
// $response_json = json_decode($response, true);
|
||||
|
||||
// // 처리 로직
|
||||
// if ($http_code === 200 && isset($response_json['user'])) {
|
||||
// // 아이디가 이미 존재 (중복)
|
||||
// echo json_encode([
|
||||
// 'status' => 'duplicate',
|
||||
// 'message' => '이미 등록된 이메일입니다.'
|
||||
// ]);
|
||||
// } elseif ($http_code === 404) {
|
||||
// // 아이디가 존재하지 않음 (사용 가능)
|
||||
// echo json_encode([
|
||||
// 'status' => 'ok',
|
||||
// 'message' => '사용 가능한 이메일입니다.'
|
||||
// ]);
|
||||
// } else {
|
||||
// // 기타 오류
|
||||
// echo json_encode([
|
||||
// 'status' => 'error',
|
||||
// 'message' => 'Descope API 호출 실패',
|
||||
// 'http_code' => $http_code,
|
||||
// 'error_detail' => $response_json,
|
||||
// 'curl_error' => $curl_error
|
||||
// ]);
|
||||
// }
|
||||
// exit;
|
||||
?>
|
||||
<?php
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
// 수신
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
if (!$email) {
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
'message' => '이메일이 전달되지 않았습니다.'
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Descope 설정
|
||||
$management_key = 'K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj';
|
||||
$project_id = 'P2wON5fy1K6kyia269VpeIzYP8oP';
|
||||
|
||||
// API URL
|
||||
$url = 'https://api.descope.com/v1/mgmt/user?loginId=' . urlencode($email);
|
||||
|
||||
// CURL 호출
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer {$project_id}:{$management_key}",
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$curl_error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
$response_json = json_decode($response, true);
|
||||
|
||||
// ================================
|
||||
// 존재하는 사용자일 때
|
||||
// ================================
|
||||
if ($http_code === 200 && isset($response_json['user'])) {
|
||||
|
||||
$user = $response_json["user"];
|
||||
|
||||
// 비밀번호 여부
|
||||
$hasPassword = $user["providerInfo"]["email"]["password"] ?? false;
|
||||
|
||||
// 추가정보 입력 여부 (completeForm)
|
||||
$completeForm = $user["customAttributes"]["completeForm"] ?? false;
|
||||
|
||||
// -------------------------
|
||||
// 미완성 사용자 감지!!
|
||||
// -------------------------
|
||||
if (!$hasPassword && !$completeForm) {
|
||||
|
||||
echo json_encode([
|
||||
'status' => 'incomplete',
|
||||
'message' => '미완성 사용자입니다. 추가정보 입력이 필요합니다.',
|
||||
'email' => $email
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 완성된 사용자 → 재가입 불가
|
||||
echo json_encode([
|
||||
'status' => 'duplicate',
|
||||
'message' => '이미 등록된 이메일입니다.'
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ================================
|
||||
// 신규 사용자 (404)
|
||||
// ================================
|
||||
if ($http_code === 404) {
|
||||
echo json_encode([
|
||||
'status' => 'ok',
|
||||
'message' => '사용 가능한 이메일입니다.'
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ================================
|
||||
// 기타 오류
|
||||
// ================================
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
'message' => 'Descope API 호출 실패',
|
||||
'http_code' => $http_code,
|
||||
'error_detail' => $response_json,
|
||||
'curl_error' => $curl_error
|
||||
]);
|
||||
exit;
|
||||
?>
|
||||
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
function set_descope_session_cookies(array $user): void {
|
||||
$expire = time() + 86400;
|
||||
$cookieOptions = [
|
||||
'expires' => $expire,
|
||||
'path' => '/',
|
||||
'samesite' => 'Lax',
|
||||
];
|
||||
|
||||
$customAttributes = $user['customAttributes'] ?? [];
|
||||
$roleNames = $user['roleNames'] ?? [];
|
||||
|
||||
setcookie('descope_login_id', (string)($user['loginIds'][0] ?? ''), $cookieOptions);
|
||||
setcookie('descope_user_id', (string)($user['userId'] ?? ''), $cookieOptions);
|
||||
setcookie('descope_user_name', (string)($user['name'] ?? ''), $cookieOptions);
|
||||
setcookie('descope_user_email', (string)($user['email'] ?? ''), $cookieOptions);
|
||||
setcookie('descope_user_phone', (string)($user['phone'] ?? ''), $cookieOptions);
|
||||
setcookie('descope_custom_attributes', base64_encode(json_encode($customAttributes, JSON_UNESCAPED_UNICODE)), $cookieOptions);
|
||||
setcookie('descope_role_names', base64_encode(json_encode($roleNames, JSON_UNESCAPED_UNICODE)), $cookieOptions);
|
||||
}
|
||||
|
||||
$email = trim($_POST['mb_id'] ?? '');
|
||||
$password = trim($_POST['mb_password'] ?? '');
|
||||
|
||||
|
||||
if (!$email || !$password) {
|
||||
echo json_encode(['status'=>'fail', 'message'=>'아이디와 비밀번호는 필수입력입니다.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$descope_project_id = "P2wON5fy1K6kyia269VpeIzYP8oP";
|
||||
|
||||
$api_url = "https://api.descope.com/v1/auth/password/signin";
|
||||
|
||||
$data = [
|
||||
"loginId" => $email,
|
||||
"password" => $password,
|
||||
// "loginOptions" => [ ... ] // 옵션 필요시
|
||||
];
|
||||
$headers = [
|
||||
'Content-Type: application/json',
|
||||
'Authorization: Bearer ' . $descope_project_id,
|
||||
];
|
||||
|
||||
$ch = curl_init($api_url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
$res_data = json_decode($response, true);
|
||||
|
||||
if ($http_code === 200 && isset($res_data['sessionJwt'])) {
|
||||
// 로그인 성공 → 실패횟수 초기화
|
||||
$_SESSION['login_fail_count'] = 0;
|
||||
//session으로도 저장
|
||||
$_SESSION['user'] = $res_data['user']; // userId, email 등
|
||||
$_SESSION['sessionJwt'] = $res_data['sessionJwt'];
|
||||
$_SESSION['refreshJwt'] = $res_data['refreshJwt'];
|
||||
set_descope_session_cookies($res_data['user'] ?? []);
|
||||
|
||||
echo json_encode([
|
||||
'status' => 'ok',
|
||||
'sessionJwt' => $res_data['sessionJwt'] ?? '',
|
||||
// 'refreshJwt' => $res_data['refreshJwt'] ?? '',
|
||||
'user' => $res_data['user'] ?? [],
|
||||
'session' => $_SESSION,
|
||||
]);
|
||||
// } else {
|
||||
// // $msg = $res_data['errorDescription'] ?? '로그인 실패';
|
||||
// // echo json_encode(['status'=>'fail', 'message'=>$msg]);
|
||||
// // Descope 에러 메시지
|
||||
// $errorMsg = $res_data['errorDescription']
|
||||
// ?? $res_data['errorMessage']
|
||||
// ?? '로그인에 실패했습니다.';
|
||||
|
||||
// // 2) 한글 매핑
|
||||
// if (stripos($errorMsg, 'invalid signin credentials') !== false) {
|
||||
// $msg = '비밀번호가 일치하지 않습니다.';
|
||||
// } elseif (stripos($errorMsg, 'user not found') !== false) {
|
||||
// $msg = "계정을 찾을 수 없습니다.\n로그인에 문제가 있으신 경우 010-8721-7453으로 문의해 주세요.";
|
||||
// } else {
|
||||
// $msg = $errorMsg;
|
||||
// }
|
||||
|
||||
|
||||
// echo json_encode([
|
||||
// 'status' => 'fail',
|
||||
// 'message' => $msg
|
||||
// ]);
|
||||
// }
|
||||
} else {
|
||||
// 실패 → 카운트 증가
|
||||
if (!isset($_SESSION['login_fail_count'])) {
|
||||
$_SESSION['login_fail_count'] = 0;
|
||||
}
|
||||
$_SESSION['login_fail_count']++;
|
||||
$failCount = $_SESSION['login_fail_count'];
|
||||
|
||||
// 에러 메시지 가공
|
||||
$errorMsg = $res_data['errorDescription']
|
||||
?? $res_data['errorMessage']
|
||||
?? '로그인에 실패했습니다.';
|
||||
|
||||
// 한글 매핑
|
||||
if (stripos($errorMsg, 'Login is temporarily locked') !== false) {
|
||||
$msg = "Login is temporarily locked. Please try again later.";
|
||||
} elseif (stripos($errorMsg, 'account locked') !== false) {
|
||||
$msg = "Your account has been locked due to too many login attempts.\nPlease contact the administrator.";
|
||||
} elseif (stripos($errorMsg, 'invalid signin credentials') !== false) {
|
||||
$msg = "The password does not match.";
|
||||
} elseif (stripos($errorMsg, 'user not found') !== false) {
|
||||
$msg = "The account could not be found.\nIf you are experiencing login issues, please contact +82-2-2141-7434";
|
||||
} else {
|
||||
$msg = $errorMsg;
|
||||
}
|
||||
|
||||
echo json_encode([
|
||||
'status' => 'fail',
|
||||
'message' => $msg,
|
||||
'failCount' => $failCount
|
||||
]);
|
||||
}
|
||||
exit;
|
||||
?>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
// descope_logout.php
|
||||
// session_start();
|
||||
// $_SESSION = [];
|
||||
// if (ini_get("session.use_cookies")) {
|
||||
// $p = session_get_cookie_params();
|
||||
// setcookie(session_name(), '', time()-42000,
|
||||
// $p['path'], $p['domain'], $p['secure'], $p['httponly']
|
||||
// );
|
||||
// }
|
||||
// session_destroy();
|
||||
|
||||
// // ✅ 그누보드 세션 변수도 제거
|
||||
// unset($_SESSION['ss_mb_id'], $_SESSION['ss_mb_level']);
|
||||
|
||||
// http_response_code(200);
|
||||
// echo json_encode(['status'=>'ok']);
|
||||
// exit;
|
||||
session_start();
|
||||
$_SESSION = [];
|
||||
|
||||
foreach (['PHPSESSID', 'G5sessphp', 'descope_login_id', 'descope_user_id', 'descope_user_name', 'descope_user_email', 'descope_user_phone', 'descope_custom_attributes', 'descope_role_names'] as $cookieName) {
|
||||
setcookie($cookieName, '', [
|
||||
'expires' => time() - 42000,
|
||||
'path' => '/',
|
||||
'samesite' => 'Lax',
|
||||
]);
|
||||
}
|
||||
|
||||
session_destroy();
|
||||
|
||||
http_response_code(200);
|
||||
echo json_encode(['status'=>'ok']);
|
||||
exit;
|
||||
?>
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
// ini_set('display_errors', 1);
|
||||
// ini_set('display_startup_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
// header('Content-Type: application/json');
|
||||
// // require_once './descope_config.php';
|
||||
|
||||
// $email = trim($_POST['email'] ?? '');
|
||||
// $password = trim($_POST['password'] ?? '');
|
||||
// $refreshJwt = trim($_POST['refreshJwt'] ?? '');
|
||||
|
||||
// if (!$email || !$password || !$refreshJwt) {
|
||||
// echo json_encode(['status' => 'fail', 'message' => '필수값 없음']);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// // Descope API - 비밀번호 변경 엔드포인트 사용
|
||||
// $url = "https://api.descope.com/v1/auth/password/update";
|
||||
// $data = [
|
||||
// // "loginId" => $email,
|
||||
// "newPassword" => $password,
|
||||
// ];
|
||||
|
||||
// $ch = curl_init($url);
|
||||
// curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
// "Authorization: Bearer " . $refreshJwt,
|
||||
// "Content-Type: application/json"
|
||||
// ]);
|
||||
// curl_setopt($ch, CURLOPT_POST, 1);
|
||||
// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
|
||||
// $response = curl_exec($ch);
|
||||
// $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// curl_close($ch);
|
||||
|
||||
// if ($code == 200) {
|
||||
// echo json_encode(['status' => 'ok']);
|
||||
// } else {
|
||||
// $resData = json_decode($response, true);
|
||||
// $msg = $resData['errorDescription'] ?? '비밀번호 변경 실패';
|
||||
// echo json_encode(['status' => 'fail', 'message' => $msg, 'raw' => $response]);
|
||||
// }
|
||||
|
||||
// ini_set('display_errors', 1);
|
||||
// ini_set('display_startup_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
// require_once './descope_config.php';
|
||||
|
||||
$projectId = 'P2wON5fy1K6kyia269VpeIzYP8oP';
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$password = trim($_POST['password'] ?? '');
|
||||
$refreshJwt = trim($_POST['refreshJwt'] ?? '');
|
||||
|
||||
// if (!$email || !$password || !$refreshJwt) {
|
||||
// echo json_encode(['status' => 'fail', 'message' => '필수값 없음']);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
if (!$email || !$password || !$refreshJwt) {
|
||||
echo json_encode([
|
||||
'status' => 'fail',
|
||||
'message' => '필수값 없음',
|
||||
'debug' => [
|
||||
'email' => $email,
|
||||
'password' => $password,
|
||||
'refreshJwt' => $refreshJwt // <<< 확인!
|
||||
]
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Descope API - 비밀번호 변경 엔드포인트 사용
|
||||
$url = "https://api.descope.com/v1/auth/password/update";
|
||||
$data = [
|
||||
"loginId" => $email,
|
||||
"newPassword" => $password,
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer {$projectId}:{$refreshJwt}",
|
||||
"Content-Type: application/json",
|
||||
// "x-descope-project-id: $projectId"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($code == 200) {
|
||||
echo json_encode(['status' => 'ok']);
|
||||
} else {
|
||||
$resData = json_decode($response, true);
|
||||
$msg = $resData['errorDescription'] ?? '비밀번호 변경 실패';
|
||||
echo json_encode(['status' => 'fail', 'message' => $msg, 'raw' => $response]);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
header('Content-Type: application/json; charset=UTF-8');
|
||||
|
||||
function set_descope_session_cookies(array $user): void {
|
||||
$expire = time() + 86400;
|
||||
$cookieOptions = [
|
||||
'expires' => $expire,
|
||||
'path' => '/',
|
||||
'samesite' => 'Lax',
|
||||
];
|
||||
|
||||
setcookie('descope_login_id', (string)($user['loginIds'][0] ?? ''), $cookieOptions);
|
||||
setcookie('descope_user_id', (string)($user['userId'] ?? ''), $cookieOptions);
|
||||
setcookie('descope_user_name', (string)($user['name'] ?? ''), $cookieOptions);
|
||||
setcookie('descope_user_email', (string)($user['email'] ?? ''), $cookieOptions);
|
||||
setcookie('descope_user_phone', (string)($user['phone'] ?? ''), $cookieOptions);
|
||||
setcookie('descope_custom_attributes', base64_encode(json_encode($user['customAttributes'] ?? [], JSON_UNESCAPED_UNICODE)), $cookieOptions);
|
||||
setcookie('descope_role_names', base64_encode(json_encode($user['roleNames'] ?? [], JSON_UNESCAPED_UNICODE)), $cookieOptions);
|
||||
}
|
||||
|
||||
$loginId = trim((string)($_POST['loginId'] ?? ''));
|
||||
$sessionJwt = trim((string)($_POST['sessionJwt'] ?? ''));
|
||||
|
||||
if ($loginId === '' || substr_count($sessionJwt, '.') !== 2) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['status' => 'fail', 'message' => 'invalid session payload']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = [
|
||||
'userId' => trim((string)($_POST['userId'] ?? $loginId)),
|
||||
'loginIds' => [$loginId],
|
||||
'name' => trim((string)($_POST['userName'] ?? $loginId)),
|
||||
'email' => trim((string)($_POST['email'] ?? $loginId)),
|
||||
'phone' => trim((string)($_POST['phone'] ?? '')),
|
||||
'customAttributes' => [
|
||||
'company' => trim((string)($_POST['company'] ?? '')),
|
||||
'familyCompany' => trim((string)($_POST['familyCompany'] ?? '')),
|
||||
'position' => trim((string)($_POST['position'] ?? '')),
|
||||
'team' => trim((string)($_POST['team'] ?? '')),
|
||||
'familyUniqueKey' => trim((string)($_POST['familyUniqueKey'] ?? '')),
|
||||
],
|
||||
'roleNames' => array_values(array_filter([trim((string)($_POST['userRole'] ?? ''))])),
|
||||
];
|
||||
|
||||
$_SESSION['user'] = $user;
|
||||
$_SESSION['sessionJwt'] = $sessionJwt;
|
||||
set_descope_session_cookies($user);
|
||||
|
||||
echo json_encode(['status' => 'ok']);
|
||||
exit;
|
||||
?>
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
// header('Content-Type: application/json');
|
||||
|
||||
// require_once './descope_config.php'; // Descope API 키 등 공통설정
|
||||
|
||||
// $email = trim($_POST['email'] ?? '');
|
||||
|
||||
// if (!$email) {
|
||||
// echo json_encode(['status' => 'fail', 'message' => '이메일 없음']);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// // Descope OTP 메일 전송 (예: signup/send/otp)
|
||||
// $url = 'https://api.descope.com/v1/auth/magiclink/email/send'; // API 버전에 맞게!
|
||||
// $data = [
|
||||
// "loginId" => $email,
|
||||
// "user" => ["email" => $email]
|
||||
// ];
|
||||
|
||||
// $ch = curl_init($url);
|
||||
// curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
// "Authorization: Bearer " . $DESCOPE_API_KEY,
|
||||
// "Content-Type: application/json"
|
||||
// ]);
|
||||
// curl_setopt($ch, CURLOPT_POST, 1);
|
||||
// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
|
||||
// $response = curl_exec($ch);
|
||||
// $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// curl_close($ch);
|
||||
|
||||
// if ($code == 200) {
|
||||
// echo json_encode(['status' => 'ok']);
|
||||
// } else {
|
||||
// echo json_encode(['status' => 'fail', 'message' => 'OTP 발송 실패', 'raw' => $response]);
|
||||
// }
|
||||
?>
|
||||
|
||||
<?php
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
$email = $_POST['email'] ?? '';
|
||||
// $email = 'sdi9429@naver.com';
|
||||
// $redirectUrl = 'https://eg-bim.com/eng/index.php?popup=pwreset';
|
||||
if (!$email) exit(json_encode(['status'=>'fail', 'message'=>'이메일 누락']));
|
||||
$api_key = "P2wON5fy1K6kyia269VpeIzYP8oP";
|
||||
$url = "https://api.descope.com/v1/auth/password/reset";
|
||||
$data = [
|
||||
"loginId" => $email,
|
||||
"redirectUrl" => 'https://eg-bim.co.kr/eng/index.php?popup=pwreset'
|
||||
];
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer {$api_key}",
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
$res = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
if ($http_code == 200) {
|
||||
$res_data = json_decode($res, true); // 응답 파싱
|
||||
$linkId = $res_data['linkId'] ?? '';
|
||||
echo json_encode([
|
||||
'status'=>'ok',
|
||||
'linkId'=>$linkId,
|
||||
'raw_response'=>$res_data // (디버깅용 전체도 같이 보고 싶으면)
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status'=>'fail','message'=>'Failed to send.']);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
// // descope_session.php
|
||||
|
||||
// // 1) 에러 출력 (개발용)
|
||||
// // ini_set('display_errors', 1);
|
||||
// // error_reporting(E_ALL);
|
||||
|
||||
// // 2) 세션 시작 (중복 호출 방지)
|
||||
// if (session_status() === PHP_SESSION_NONE) {
|
||||
// session_start();
|
||||
// }
|
||||
|
||||
// // 3) 로그인 검사
|
||||
// // 로그인 시 $_SESSION['user']['userId'] 와 $_SESSION['user']['loginIds'][0] 를 설정해 두었다면
|
||||
// // if (empty($_SESSION['user']['userId'])) {
|
||||
// // // 로그인 필요 알림 후 로그인 페이지로 이동
|
||||
// // echo <<<HTML
|
||||
// // <script>
|
||||
// // alert('Q&A를 이용하시려면 로그인이 필요합니다.');
|
||||
// // window.location.href = '/egbim/index.php';
|
||||
// // </script>
|
||||
// // HTML;
|
||||
// // exit;
|
||||
// // }
|
||||
|
||||
// // ✅ Descope 로그인 성공 시 g5_member 세션 동기화
|
||||
// $loginId = $_SESSION['user']['loginIds'][0] ?? '';
|
||||
// if ($loginId === 'b24014@hanmaceng.co.kr') {
|
||||
// // g5_member 계정이 이미 존재한다고 가정
|
||||
// $_SESSION['ss_mb_id'] = $loginId;
|
||||
// $_SESSION['ss_mb_level'] = 10;
|
||||
|
||||
// $is_member = true;
|
||||
// $is_admin = 'super';
|
||||
|
||||
// $member = [
|
||||
// 'mb_id' => $loginId,
|
||||
// 'mb_name' => $_SESSION['user']['name'] ?? '관리자',
|
||||
// 'mb_email' => $_SESSION['user']['email'] ?? '',
|
||||
// 'mb_level' => 10,
|
||||
// 'mb_nick' => '관리자',
|
||||
// ];
|
||||
// }
|
||||
// // Descope 로그인 성공 시 (예: descope_session.php 내부)
|
||||
// if (!empty($_SESSION['user']['loginIds'][0])) {
|
||||
// $loginId = $_SESSION['user']['loginIds'][0];
|
||||
|
||||
// // g5_member 테이블에 계정이 존재한다고 가정
|
||||
// $_SESSION['ss_mb_id'] = $loginId;
|
||||
// $_SESSION['ss_mb_level'] = 10; // 관리자 레벨
|
||||
|
||||
// // 그누보드 전역 변수 보정
|
||||
// $is_member = true;
|
||||
// $is_admin = 'super';
|
||||
|
||||
// $member = [
|
||||
// 'mb_id' => $loginId,
|
||||
// 'mb_name' => $_SESSION['user']['name'] ?? '관리자',
|
||||
// 'mb_email' => $_SESSION['user']['email'] ?? '',
|
||||
// 'mb_level' => 10,
|
||||
// 'mb_nick' => '관리자',
|
||||
// ];
|
||||
// }
|
||||
// descope_session.php
|
||||
|
||||
// 1) 세션 시작
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
if (empty($_SESSION['user']['userId']) && !empty($_COOKIE['descope_login_id'])) {
|
||||
$customAttributes = json_decode(base64_decode($_COOKIE['descope_custom_attributes'] ?? ''), true);
|
||||
$roleNames = json_decode(base64_decode($_COOKIE['descope_role_names'] ?? ''), true);
|
||||
$loginIdFromCookie = trim((string)($_COOKIE['descope_login_id'] ?? ''));
|
||||
|
||||
$_SESSION['user'] = [
|
||||
'userId' => trim((string)($_COOKIE['descope_user_id'] ?? $loginIdFromCookie)),
|
||||
'loginIds' => $loginIdFromCookie !== '' ? [$loginIdFromCookie] : [],
|
||||
'name' => trim((string)($_COOKIE['descope_user_name'] ?? '')),
|
||||
'email' => trim((string)($_COOKIE['descope_user_email'] ?? '')),
|
||||
'phone' => trim((string)($_COOKIE['descope_user_phone'] ?? '')),
|
||||
'customAttributes' => is_array($customAttributes) ? $customAttributes : [],
|
||||
'roleNames' => is_array($roleNames) ? $roleNames : [],
|
||||
];
|
||||
}
|
||||
|
||||
// 2) 로그인 검사 (비로그인 차단)
|
||||
// if (empty($_SESSION['user']['userId'])) {
|
||||
// // 세션 없으면 바로 차단
|
||||
// session_destroy();
|
||||
// echo "<script>
|
||||
// alert('로그인이 필요합니다.');
|
||||
// // 로그인 팝업 자동 오픈 플래그 전달
|
||||
// window.location.href = '/egbim/index.php?popup=login';
|
||||
// </script>";
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// 3) 로그인 정보 추출
|
||||
$loginIds = $_SESSION['user']['loginIds'] ?? [];
|
||||
$loginId = (is_array($loginIds) && !empty($loginIds)) ? $loginIds[0] : '';
|
||||
|
||||
$userName = $_SESSION['user']['name'] ?? '';
|
||||
$userEmail = $_SESSION['user']['email'] ?? '';
|
||||
|
||||
// 4) 관리자/일반 사용자 구분
|
||||
$ADMIN_EMAILS = [
|
||||
'kjy0426@hanmaceng.co.kr',
|
||||
'b24014@hanmaceng.co.kr',
|
||||
'b23065@hanmaceng.co.kr',
|
||||
'shyeom1@samaneng.com',
|
||||
'cjy627@hanmaceng.co.kr',
|
||||
'b23072@hanmaceng.co.kr',
|
||||
'cozyjin@hanmaceng.co.kr',
|
||||
'm24031@hanmaceng.co.kr',
|
||||
'b24051@hanmaceng.co.kr',
|
||||
'rmsgud1202@hanmaceng.co.kr',
|
||||
'm21318@hanmaceng.co.kr',
|
||||
'b25023@hanmaceng.co.kr',
|
||||
'sdi9429@naver.com',
|
||||
'junsuy@hanmail.net',
|
||||
'ilphilo92@gmail.com'
|
||||
];
|
||||
// $isAdmin = in_array($loginId, $ADMIN_EMAILS, true);
|
||||
$isAdmin = $loginId && in_array($loginId, $ADMIN_EMAILS, true);
|
||||
|
||||
// ✅ 그누보드 전역 세션 동기화
|
||||
if ($loginId) {
|
||||
$_SESSION['ss_mb_id'] = $loginId;
|
||||
$_SESSION['ss_mb_level'] = $isAdmin ? 10 : 2;
|
||||
|
||||
$is_member = true;
|
||||
$is_admin = $isAdmin ? 'super' : '';
|
||||
|
||||
$member = [
|
||||
'mb_id' => $loginId,
|
||||
'mb_name' => $userName ?: $loginId,
|
||||
'mb_email' => $userEmail,
|
||||
'mb_level' => $_SESSION['ss_mb_level'],
|
||||
'mb_nick' => $userName ?: $loginId,
|
||||
];
|
||||
} else {
|
||||
// ✅ 비회원: 로그인 세션 없음
|
||||
$is_member = false;
|
||||
$is_admin = '';
|
||||
$member = [];
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
// header('Content-Type: application/json; charset=utf-8');
|
||||
// ini_set('display_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
// $email = trim($_POST['email'] ?? '');
|
||||
// $password = trim($_POST['password'] ?? '');
|
||||
|
||||
// if (!$email || !$password) {
|
||||
// echo json_encode(['status' => 'error', 'message' => '이메일 또는 비밀번호가 없습니다.']);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// $project_id = 'P2wON5fy1K6kyia269VpeIzYP8oP'; // 너의 Descope 프로젝트 ID
|
||||
|
||||
// $url = 'https://api.descope.com/v1/auth/password/signup';
|
||||
// $data = [
|
||||
// "email" => $email,
|
||||
// "password" => $password
|
||||
// ];
|
||||
// $ch = curl_init($url);
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($ch, CURLOPT_POST, true);
|
||||
// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
|
||||
// "loginId" => $email,
|
||||
// "user" => [
|
||||
// "loginId" => $email,
|
||||
// "email" => $email
|
||||
// ],
|
||||
// "password" => $password
|
||||
// ]));
|
||||
// curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
// "Content-Type: application/json",
|
||||
// "Authorization: Bearer $project_id"
|
||||
// ]);
|
||||
// $response = curl_exec($ch);
|
||||
// $err = curl_error($ch);
|
||||
// $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// curl_close($ch);
|
||||
|
||||
// if ($http_code === 200) {
|
||||
// echo json_encode(['status' => 'ok']);
|
||||
// } else {
|
||||
// $response_json = json_decode($response, true);
|
||||
// echo json_encode([
|
||||
// 'status' => 'error',
|
||||
// 'message' => $response_json['errorDescription'] ?? 'Descope API 호출 실패',
|
||||
// 'code' => $http_code,
|
||||
// 'error' => $err
|
||||
// ]);
|
||||
// }
|
||||
|
||||
// exit;
|
||||
?>
|
||||
<?php
|
||||
// ini_set('display_errors', 1);
|
||||
// ini_set('display_startup_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
// header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
// // $email = trim($_POST['email'] ?? '');
|
||||
// // $password = trim($_POST['password'] ?? '');
|
||||
// $email = 'sdi9429@gmail.com';
|
||||
|
||||
// // if (!$email || !$password) {
|
||||
// // echo json_encode(['status' => 'error', 'message' => '이메일 또는 비밀번호가 없습니다.']);
|
||||
// // exit;
|
||||
// // }
|
||||
// if (!$email) {
|
||||
// echo json_encode(['status' => 'error', 'message' => '이메일이 없습니다.']);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// $project_id = 'P2wON5fy1K6kyia269VpeIzYP8oP'; // Descope 프로젝트 ID
|
||||
|
||||
// // // 1. 비밀번호 회원가입 (Password Signup)
|
||||
// // $url_signup = 'https://api.descope.com/v1/auth/password/signup';
|
||||
// // $signup_data = [
|
||||
// // "loginId" => $email,
|
||||
// // "user" => [
|
||||
// // "loginId" => $email,
|
||||
// // "email" => $email
|
||||
// // ],
|
||||
// // "password" => $password
|
||||
// // ];
|
||||
|
||||
// // $ch = curl_init($url_signup);
|
||||
// // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
// // curl_setopt($ch, CURLOPT_POST, true);
|
||||
// // curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($signup_data));
|
||||
// // curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
// // "Content-Type: application/json",
|
||||
// // "Authorization: Bearer $project_id"
|
||||
// // ]);
|
||||
// // $response_signup = curl_exec($ch);
|
||||
// // $err_signup = curl_error($ch);
|
||||
// // $http_code_signup = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// // curl_close($ch);
|
||||
|
||||
// // if ($http_code_signup !== 200) {
|
||||
// // $response_json = json_decode($response_signup, true);
|
||||
// // echo json_encode([
|
||||
// // 'status' => 'error',
|
||||
// // 'message' => $response_json['errorDescription'] ?? 'Descope 회원가입 API 호출 실패',
|
||||
// // 'code' => $http_code_signup,
|
||||
// // 'error' => $err_signup
|
||||
// // ]);
|
||||
// // exit;
|
||||
// // }
|
||||
|
||||
// // 2. OTP 이메일 전송
|
||||
// $url = "https://api.descope.com/v1/auth/otp/signup/email";
|
||||
// $data = [
|
||||
// "loginId" => $email, // 이메일 주소
|
||||
// "email" => $email
|
||||
// ];
|
||||
|
||||
// $ch = curl_init($url);
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($ch, CURLOPT_POST, true);
|
||||
// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
// curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
// "Content-Type: application/json",
|
||||
// "Authorization: Bearer $project_id"
|
||||
// ]);
|
||||
// $response = curl_exec($ch);
|
||||
// $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// curl_close($ch);
|
||||
|
||||
// // if ($http_code === 200) {
|
||||
// // echo json_encode(['status' => 'ok']);
|
||||
// // } else {
|
||||
// // $response_json = json_decode($response, true);
|
||||
// // echo json_encode([
|
||||
// // 'status' => 'error',
|
||||
// // 'message' => $response_json['errorDescription'] ?? 'Descope API 호출 실패',
|
||||
// // 'code' => $http_code
|
||||
// // ]);
|
||||
// // }
|
||||
|
||||
// // sessionJwt는 반드시 프론트에 넘겨야 함!
|
||||
// if ($http_code === 200 && !empty($res_data['sessionJwt'])) {
|
||||
// echo json_encode(['status'=>'ok', 'sessionJwt'=>$res_data['sessionJwt']]);
|
||||
// } else {
|
||||
// $msg = $res_data['errorDescription'] ?? 'Descope OTP 발송 실패';
|
||||
// echo json_encode(['status'=>'fail', 'message'=>$msg, 'debug'=>$res_data]);
|
||||
// }
|
||||
|
||||
// echo json_encode([
|
||||
// 'status'=>'debug',
|
||||
// 'raw'=> $response, // $response: curl_exec 결과
|
||||
// 'php_error'=> error_get_last()
|
||||
// ]);
|
||||
|
||||
// exit;
|
||||
?>
|
||||
<?php
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
|
||||
// 생략 가능: $email = 'test123@test.com';
|
||||
|
||||
$project_id = 'P2wON5fy1K6kyia269VpeIzYP8oP'; // 실제 프로젝트 ID로 변경
|
||||
|
||||
$url = "https://api.descope.com/v1/auth/otp/signup/email";
|
||||
$data = [
|
||||
"loginId" => $email,
|
||||
"email" => $email
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Content-Type: application/json",
|
||||
"Authorization: Bearer $project_id"
|
||||
]);
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
$res_data = json_decode($response, true); // 항상 선언
|
||||
|
||||
if ($http_code === 200 && isset($res_data['maskedEmail'])) {
|
||||
// 성공 케이스
|
||||
echo json_encode(['status' => 'ok', 'maskedEmail' => $res_data['maskedEmail']]);
|
||||
} else {
|
||||
// 실패 케이스
|
||||
$msg = $res_data['errorDescription'] ?? 'Descope OTP 발송 실패';
|
||||
echo json_encode([
|
||||
'status' => 'fail',
|
||||
'message' => $msg,
|
||||
'debug' => $res_data
|
||||
]);
|
||||
}
|
||||
exit;
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
$email = $_POST['email'] ?? '';
|
||||
if (!$email) exit(json_encode(['status'=>'fail', 'message'=>'이메일 누락']));
|
||||
|
||||
// 아래 내용은 실제 사용중인 Descope OTP 전송 API와 맞게 수정해야 함
|
||||
$api_key = "P2wON5fy1K6kyia269VpeIzYP8oP";
|
||||
$url = "https://api.descope.com/v1/auth/otp/signup/email";
|
||||
|
||||
$data = [
|
||||
"loginId" => $email,
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer {$api_key}",
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
$res = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($http_code == 200) {
|
||||
echo json_encode(['status'=>'ok']);
|
||||
} else {
|
||||
echo json_encode(['status'=>'fail','message'=>'OTP 재전송 실패']);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
session_start();
|
||||
// -- JSON 응답 보장 --
|
||||
header('Content-Type: application/json; charset=UTF-8');
|
||||
|
||||
// -- 실서비스 전에는 환경변수 사용 권장 --
|
||||
$projectId = 'P2wON5fy1K6kyia269VpeIzYP8oP';
|
||||
$managementKey = 'K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj';
|
||||
|
||||
// -- POST 입력값 (여기서 name 값 등 반드시 필수체크 필요!) --
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$name = trim($_POST['name'] ?? '');
|
||||
$password = trim($_POST['password'] ?? '');
|
||||
$family = trim($_POST['familyCompany'] ?? ''); // Machine Name: familycompany
|
||||
$familyUniqueKey = trim($_POST['familyUniqueKey'] ?? ''); // Machine Name: familyUniqueKey
|
||||
$team = trim($_POST['team'] ?? ''); // Machine Name: team
|
||||
$position = trim($_POST['position'] ?? ''); // Machine Name: position
|
||||
$hp = trim($_POST['phone'] ?? ''); // phone
|
||||
// $completeForm = ($_POST['completeForm'] ?? '') ? true : false; // Boolean 처리
|
||||
$completeForm = filter_var($_POST['completeForm'] ?? false, FILTER_VALIDATE_BOOLEAN);
|
||||
$refreshJwt = trim($_POST['refreshJwt']);
|
||||
// $refreshJwt = $_SESSION['refreshJwt'] ?? '';
|
||||
$company = trim($_POST['company'] ?? ''); // Machine Name: company 외부사용자 회사명
|
||||
|
||||
// if (!$refreshJwt) {
|
||||
// // 필수 값 누락시 에러 반환
|
||||
// echo json_encode(["error" => "refreshJWT is missing"]);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
if (!$refreshJwt) {
|
||||
echo json_encode([
|
||||
"status" => "fail",
|
||||
"message" => "세션이 만료되었습니다. 다시 로그인해 주세요."
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$internalDomains = [
|
||||
"hanmaceng.co.kr",
|
||||
"samaneng.com",
|
||||
"jangheon.co.kr",
|
||||
"hallasanup.com",
|
||||
"pre-cast.co.kr",
|
||||
"baroncs.co.kr"
|
||||
];
|
||||
|
||||
$domain = explode('@', $email)[1] ?? '';
|
||||
// if (in_array($domain, $internalDomains)) {
|
||||
// $tenantId = "T2wQcWCBhUfJgUWHWgNwLg4iUDVY"; //내부
|
||||
// } else {
|
||||
// $tenantId = "T2x4TDzxasp7auPCPcN8uOrxXchh"; //외부
|
||||
// }
|
||||
|
||||
if (in_array($domain, $internalDomains)) {
|
||||
// 내부 사용자 → 내부 tenant 하나만
|
||||
$userTenants = [
|
||||
[
|
||||
"tenantId" => "T2wQcWCBhUfJgUWHWgNwLg4iUDVY" // 내부 tenantId
|
||||
]
|
||||
];
|
||||
} else {
|
||||
// 외부 사용자 → customer + egbim 두 개 tenant 자동 등록
|
||||
$userTenants = [
|
||||
[
|
||||
"tenantId" => "T2x4TDzxasp7auPCPcN8uOrxXchh" // customer tenantId
|
||||
],
|
||||
[
|
||||
"tenantId" => "T2yGFrGSnFX601G22JOMojJX7OMd" // egbim tenantId
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
//라이센스 만료일 계산
|
||||
$now = new DateTime('now', new DateTimeZone('Asia/Seoul'));
|
||||
$expiry = (clone $now)->modify('+90 days')->format(DateTime::ATOM);
|
||||
|
||||
// -- Custom Attribute 실제 Machine Name에 맞춰서 할당 (Descope 콘솔 기준) --
|
||||
$custom = [
|
||||
"familyCompany" => $family, // 소속 가족사
|
||||
"familyUniqueKey" => $familyUniqueKey, // 사번
|
||||
"team" => $team, // 소속팀
|
||||
"position" => $position, // 직위
|
||||
"completeForm" => $completeForm, // 정보입력완료 (Boolean)
|
||||
// "egBimLExpiryDate" => $expiry //egbim 라이센스 만료일
|
||||
// 필요하면 추가로 다른 Machine Name도 사용 가능
|
||||
];
|
||||
|
||||
if (! in_array($domain, $internalDomains, true)) {
|
||||
$custom["egBimLExpiryDate"] = $expiry;
|
||||
}
|
||||
|
||||
if ($company) {
|
||||
$custom["company"] = $company; // 외부사용자 회사명 추가
|
||||
}
|
||||
|
||||
// -- 1. 사용자 정보 업데이트 --
|
||||
$update_body = [
|
||||
"loginId" => $email,
|
||||
"email" => $email,
|
||||
"name" => $name,
|
||||
"phone" => $hp,
|
||||
"verifiedPhone" => false,
|
||||
"customAttributes" => $custom,
|
||||
// "roleNames" => [ "Default User" ],
|
||||
"userTenants" => $userTenants
|
||||
];
|
||||
|
||||
$ch = curl_init('https://api.descope.com/v1/mgmt/user/update');
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_CUSTOMREQUEST => "POST",
|
||||
CURLOPT_HTTPHEADER => [
|
||||
"Content-Type: application/json",
|
||||
"Authorization: Bearer {$projectId}:{$managementKey}"
|
||||
],
|
||||
CURLOPT_POSTFIELDS => json_encode($update_body),
|
||||
]);
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
$res_data = json_decode($response, true);
|
||||
|
||||
// -- 1-1. 사용자 정보 업데이트 실패시 --
|
||||
if ($http_code !== 200) {
|
||||
$msg = $res_data['errorDescription'] ?? 'Descope 정보 업데이트 실패';
|
||||
echo json_encode([
|
||||
'status' => 'fail',
|
||||
'step' => 'info',
|
||||
'message' => $msg,
|
||||
'raw' => $response
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// -- 2. 비밀번호 변경 (입력값이 있을 경우) --
|
||||
if ($password) {
|
||||
$pw_body = [
|
||||
"loginId" => $email,
|
||||
"newPassword" => $password
|
||||
];
|
||||
|
||||
error_log("Descope password update payload: " . json_encode($pw_body));
|
||||
error_log("Using refreshJwt for password update: " . $refreshJwt);
|
||||
|
||||
$ch2 = curl_init('https://api.descope.com/v1/auth/password/update');
|
||||
curl_setopt_array($ch2, [
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_CUSTOMREQUEST => "POST",
|
||||
CURLOPT_HTTPHEADER => [
|
||||
"Content-Type: application/json",
|
||||
"Authorization: Bearer {$projectId}:{$refreshJwt}"
|
||||
],
|
||||
CURLOPT_POSTFIELDS => json_encode($pw_body),
|
||||
]);
|
||||
$response2 = curl_exec($ch2);
|
||||
$http_code2 = curl_getinfo($ch2, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch2);
|
||||
|
||||
$res_data2 = json_decode($response2, true);
|
||||
|
||||
if ($http_code2 !== 200) {
|
||||
$msg2 = $res_data2['errorDescription'] ?? 'Descope 비밀번호 변경 실패';
|
||||
echo json_encode([
|
||||
'status' => 'fail',
|
||||
'step' => 'password',
|
||||
'message' => $msg2,
|
||||
'raw' => $response2
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// -- 3. 모두 성공 --
|
||||
echo json_encode(['status' => 'ok']);
|
||||
?>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
require_once './descope_config.php';
|
||||
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$password = trim($_POST['password'] ?? '');
|
||||
$refreshJwt = trim($_POST['refreshJwt'] ?? '');
|
||||
|
||||
if (!$email || !$password || !$refreshJwt) {
|
||||
echo json_encode(['status' => 'fail', 'message' => '필수값 없음']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Descope API - 비밀번호 변경 엔드포인트 사용
|
||||
$url = "https://api.descope.com/v1/auth/password/update";
|
||||
$data = [
|
||||
"loginId" => $email,
|
||||
"newPassword" => $password,
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer " . $refreshJwt,
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($code == 200) {
|
||||
echo json_encode(['status' => 'ok']);
|
||||
} else {
|
||||
$resData = json_decode($response, true);
|
||||
$msg = $resData['errorDescription'] ?? '비밀번호 변경 실패';
|
||||
echo json_encode(['status' => 'fail', 'message' => $msg, 'raw' => $response]);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
$projectId = 'P2wON5fy1K6kyia269VpeIzYP8oP';
|
||||
$managementKey = 'K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj';
|
||||
$loginId = 'sdi9429@gmail.com'; // 테스트할 사용자
|
||||
$status = 'disabled'; // 또는 'enabled'
|
||||
|
||||
$headers = [
|
||||
"Content-Type: application/json",
|
||||
"Authorization: Bearer {$projectId}:{$managementKey}"
|
||||
];
|
||||
|
||||
$body = [
|
||||
"loginId" => $loginId,
|
||||
"status" => $status
|
||||
];
|
||||
|
||||
$ch = curl_init('https://api.descope.com/v1/mgmt/user/update/status');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
// 결과 출력
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode([
|
||||
'httpCode' => $httpCode,
|
||||
'response' => json_decode($response, true)
|
||||
]);
|
||||
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
// header('Content-Type: application/json');
|
||||
|
||||
// $management_key = 'P2wON5fy1K6kyia269VpeIzYP8oP:K2ycqpjeh1voPBdxXxzB3ScZOQ6v9aiLmU2cIj70X1H8Kcoz0KWfCWmofUwAsAkJroXA8QC';
|
||||
|
||||
// // userId 또는 loginId 사용 가능
|
||||
// $userId = $_POST['userId'] ?? '';
|
||||
// $loginId = $_POST['loginId'] ?? '';
|
||||
|
||||
// if (!$userId && !$loginId) {
|
||||
// echo json_encode(['status' => 'fail', 'message' => 'userId 또는 loginId 누락']);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// $url = "https://api.descope.com/v1/mgmt/user/delete";
|
||||
|
||||
// $payload = json_encode([
|
||||
// "userId" => $userId,
|
||||
// "loginId" => $loginId
|
||||
// ]);
|
||||
|
||||
// $headers = [
|
||||
// "Authorization: Bearer $management_key",
|
||||
// "Content-Type: application/json"
|
||||
// ];
|
||||
|
||||
// $ch = curl_init($url);
|
||||
// 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' => 'ok', 'message' => '탈퇴 성공']);
|
||||
// } else {
|
||||
// echo json_encode([
|
||||
// 'status' => 'fail',
|
||||
// 'message' => '탈퇴 실패',
|
||||
// 'code' => $http_code,
|
||||
// 'response' => $response
|
||||
// ]);
|
||||
// }
|
||||
?>
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
|
||||
// TODO: 환경변수/별도 설정파일에서 읽어오세요.
|
||||
$management_key = 'P2wON5fy1K6kyia269VpeIzYP8oP:K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj';
|
||||
|
||||
$userId = $_POST['userId'] ?? '';
|
||||
$loginId = $_POST['loginId'] ?? '';
|
||||
|
||||
if (!$userId && !$loginId) {
|
||||
echo json_encode(['status' => 'fail', 'message' => 'userId 또는 loginId가 필요합니다.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$url = "https://api.descope.com/v1/mgmt/user/delete";
|
||||
$payload = [];
|
||||
if ($userId) $payload['userId'] = $userId;
|
||||
if ($loginId) $payload['loginId'] = $loginId;
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer {$management_key}",
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$err = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
if ($err) {
|
||||
echo json_encode(['status' => 'fail', 'message' => 'cURL error', 'error' => $err]);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($http_code === 200) {
|
||||
echo json_encode(['status' => 'ok', 'message' => '탈퇴 처리 완료']);
|
||||
} else {
|
||||
echo json_encode([
|
||||
'status' => 'fail',
|
||||
'message' => 'Descope delete 실패',
|
||||
'code' => $http_code,
|
||||
'res' => $response
|
||||
]);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,347 @@
|
||||
<?php
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/eng/skin/member/basic/descope_session.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/eng/bbs/userlist_admin_guard.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Descope 유저 리스트</title>
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
|
||||
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
|
||||
<style>
|
||||
#tableContainer { max-height: 80vh; overflow-y: auto; overflow-x: hidden; }
|
||||
#floatingScroll {
|
||||
position: sticky; bottom: 0; left: 0; right: 0;
|
||||
height: 16px; overflow-x: auto; overflow-y: hidden;
|
||||
background: #f9f9f9; border-top: 1px solid #ccc; z-index: 50;
|
||||
}
|
||||
#floatingScrollInner { height: 1px; }
|
||||
thead th { position: sticky; top: 0; z-index: 60; background: #e5e7eb; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-gray-100 p-6">
|
||||
<div class="max-w-[1800px] mx-auto pb-10 bg-white shadow rounded-lg pl-5 pt-5 pr-5">
|
||||
<h1 class="text-2xl font-bold mb-4">Descope 유저 리스트</h1>
|
||||
|
||||
<!-- ✅ 검색 영역 -->
|
||||
<div class="flex items-center gap-2 mb-4">
|
||||
<select id="mode" class="border px-2 py-1 rounded">
|
||||
<option value="created">가입일 기준</option>
|
||||
<option value="lastSignIn">마지막 로그인 기준</option>
|
||||
<option value="license">라이센스 만료일 기준</option>
|
||||
<option value="serverLogin">최근 로그인 기준 (EGBIM)</option> <!-- ✅ 추가 -->
|
||||
</select>
|
||||
<input type="text" id="startDate" placeholder="시작일" class="border px-2 py-1 rounded">
|
||||
<span>~</span>
|
||||
<input type="text" id="endDate" placeholder="종료일" class="border px-2 py-1 rounded">
|
||||
<button id="filterBtn" class="bg-blue-500 text-white px-4 py-1 rounded">검색</button>
|
||||
<button id="resetBtn" class="bg-gray-400 text-white px-4 py-1 rounded">초기화</button>
|
||||
|
||||
<!-- ✅ 테넌트 체크박스 -->
|
||||
<div id="tenantFilter" class="flex items-center gap-2 ml-4">
|
||||
<label><input type="checkbox" name="tenant" value="Hanmac Family"> Hanmac Family</label>
|
||||
<label><input type="checkbox" name="tenant" value="Customer"> Customer</label>
|
||||
<label><input type="checkbox" name="tenant" value="egBIM-edu"> egBIM-edu</label>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- ✅ CSV 대량 생성 버튼 -->
|
||||
<button id="btn-import-descope" class="bg-green-600 text-white px-4 py-1 rounded hover:bg-green-700">계정 일괄 생성</button>
|
||||
|
||||
<!-- ✅ CSV Import 팝업 -->
|
||||
<div id="importModal" class="fixed inset-0 bg-black bg-opacity-40 flex items-center justify-center hidden z-50">
|
||||
<div class="bg-white rounded-lg shadow-lg p-6 w-[590px] max-w-[90%] relative">
|
||||
<h2 class="text-lg font-semibold mb-4">Descope 대량 생성</h2>
|
||||
|
||||
<label class="block text-sm font-medium mb-1">Google Sheet CSV URL</label>
|
||||
<input id="csvUrl" type="url"
|
||||
class="w-full border px-3 py-2 rounded mb-3"
|
||||
placeholder="https://docs.google.com/spreadsheets/d/.../export?format=csv&gid=..." />
|
||||
|
||||
<label class="block text-sm font-medium mb-1">egBIM 라이선스 만료일</label>
|
||||
<input id="expiry" type="date" class="w-full border px-3 py-2 rounded mb-3" />
|
||||
|
||||
<!-- <label class="inline-flex items-center mb-4">
|
||||
<input id="sendReset" type="checkbox" class="mr-2" checked>
|
||||
<span>비밀번호 재설정 메일 발송</span>
|
||||
</label> -->
|
||||
|
||||
<!-- ✅ Tenant Type 선택 -->
|
||||
<label class="block text-sm font-medium mb-1">소속 테넌트 선택</label>
|
||||
<div class="flex gap-4 mb-3">
|
||||
<label class="flex items-center gap-1">
|
||||
<input type="radio" name="tenant_type" value="customer" checked />
|
||||
<span>Customer (외부)</span>
|
||||
</label>
|
||||
<label class="flex items-center gap-1">
|
||||
<input type="radio" name="tenant_type" value="family" />
|
||||
<span>Hanmac Family (내부)</span>
|
||||
</label>
|
||||
<label class="flex items-center gap-1">
|
||||
<input type="radio" name="tenant_type" value="edu" />
|
||||
<span>egBIM-edu (교육용)</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div id="importMsg" class="text-gray-500 text-sm mb-4"></div>
|
||||
|
||||
<div class="flex justify-end gap-2">
|
||||
<button id="importCancel" class="px-4 py-1 bg-gray-400 text-white rounded">취소</button>
|
||||
<button id="importRun" class="px-4 py-1 bg-blue-600 text-white rounded">실행</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ✅ 우측 검색창 -->
|
||||
<div class="flex justify-end flex-1">
|
||||
<input type="text" id="keyword" placeholder="소속 가족사 / 외부회사 검색"
|
||||
class="border px-2 py-1 rounded w-72">
|
||||
<button id="keywordBtn"
|
||||
class="ml-2 bg-blue-500 text-white px-4 py-1 rounded">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ✅ 테이블 -->
|
||||
<div id="tableContainer" class="w-full pb-10 bg-white shadow rounded-lg overflow-x-auto">
|
||||
<table id="userTableWrapper"
|
||||
class="min-w-[2500px] text-sm text-center text-gray-700 border table-fixed">
|
||||
<thead class="bg-gray-200 text-xs uppercase">
|
||||
<tr>
|
||||
<th class="px-4 py-2 w-12">#</th>
|
||||
<th class="px-4 py-2 min-w-[150px]">Login ID</th>
|
||||
<th class="px-4 py-2 min-w-[160px]">Display Name</th>
|
||||
<th class="px-4 py-2 min-w-[140px]">직위</th>
|
||||
<th class="px-4 py-2 min-w-[180px]">Phone</th>
|
||||
<th class="px-4 py-2 min-w-[250px]">Created Time</th>
|
||||
<th class="px-4 py-2 min-w-[220px]">Tenants</th>
|
||||
<th class="px-4 py-2 min-w-[160px]">소속 가족사</th>
|
||||
<th class="px-4 py-2 min-w-[200px]">소속회사(외부용)</th>
|
||||
<th class="px-4 py-2 min-w-[100px]">Status</th>
|
||||
<th class="px-4 py-2 min-w-[220px]">Email</th>
|
||||
<th class="px-4 py-2 min-w-[140px]">정보입력완료</th>
|
||||
<th class="px-4 py-2 min-w-[200px]">egBIM 라이센스 만료일</th>
|
||||
<th class="px-4 py-2 min-w-[120px]">사번</th>
|
||||
<th class="px-4 py-2 min-w-[180px]">마지막 접속 IP</th>
|
||||
<th class="px-4 py-2 min-w-[200px]">Beps 마지막 로그인날짜</th>
|
||||
<th class="px-4 py-2 min-w-[210px]">egBIM 최근 로그인</th>
|
||||
<th class="px-4 py-2 min-w-[200px]">소속센터/부/실</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="userTable" class="divide-y"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="floatingScroll"><div id="floatingScrollInner"></div></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function formatDate(value) {
|
||||
if (!value) return "";
|
||||
let ts = parseInt(value, 10);
|
||||
if (isNaN(ts)) return value;
|
||||
if (ts < 1e12) ts *= 1000; // 초 단위 → 밀리초 보정
|
||||
return new Date(ts).toLocaleString("ko-KR");
|
||||
}
|
||||
|
||||
// ✅ EGBIM DB에서 오는 VARCHAR (ex: "2025-09-16 18:49:48") 전용 포맷터
|
||||
function formatServerLogin(value) {
|
||||
if (!value) return "-";
|
||||
// "2025-09-16 18:49:48"
|
||||
const parts = value.split(" ");
|
||||
if (parts.length < 2) return value;
|
||||
|
||||
const datePart = parts[0].replace(/-/g, ". "); // "2025. 09. 16"
|
||||
const timePart = parts[1]; // "18:49:48"
|
||||
|
||||
let [h, m, s] = timePart.split(":").map(Number);
|
||||
const meridiem = h >= 12 ? "오후" : "오전";
|
||||
if (h === 0) h = 12;
|
||||
else if (h > 12) h -= 12;
|
||||
|
||||
return `${datePart}. ${meridiem} ${h}:${String(m).padStart(2,"0")}:${String(s).padStart(2,"0")}`;
|
||||
}
|
||||
|
||||
function loadUserList(start=null, end=null, mode="created") {
|
||||
let url = "/eng/bbs/descope_user_list.php";
|
||||
const params = [];
|
||||
if (start) params.push("start=" + encodeURIComponent(start));
|
||||
if (end) params.push("end=" + encodeURIComponent(end));
|
||||
if (mode) params.push("mode=" + encodeURIComponent(mode));
|
||||
|
||||
const keyword = $("#keyword").val().trim();
|
||||
if (keyword) params.push("keyword=" + encodeURIComponent(keyword));
|
||||
|
||||
const tenants = $("input[name='tenant']:checked")
|
||||
.map(function(){ return this.value; })
|
||||
.get();
|
||||
if (tenants.length) {
|
||||
params.push("tenants=" + encodeURIComponent(tenants.join(",")));
|
||||
}
|
||||
if (params.length) url += "?" + params.join("&");
|
||||
|
||||
$.getJSON(url, function(data) {
|
||||
let rows = "";
|
||||
if (data.status === "ok" && data.users) {
|
||||
data.users.forEach((u, idx) => {
|
||||
let tenantInfo = "";
|
||||
if (u.userTenants && Array.isArray(u.userTenants)) {
|
||||
tenantInfo = u.userTenants.map(t => t.tenantName || "").join("<br>");
|
||||
}
|
||||
rows += `
|
||||
<tr class="hover:bg-gray-50">
|
||||
<td class="px-4 py-2 text-center">${idx+1}</td>
|
||||
<td class="px-4 py-2">${u.loginIds?.[0] || "-"}</td>
|
||||
<td class="px-4 py-2">${u.name || "-"}</td>
|
||||
<td class="px-4 py-2">${u.customAttributes?.position || "-"}</td>
|
||||
<td class="px-4 py-2">${u.phone || "-"}</td>
|
||||
<td class="px-4 py-2">${formatDate(u.createdTime) || "-"}</td>
|
||||
<td class="px-4 py-2">${tenantInfo || "-"}</td>
|
||||
<td class="px-4 py-2">${u.customAttributes?.familyCompany || "-"}</td>
|
||||
<td class="px-4 py-2">${u.customAttributes?.company || "-"}</td>
|
||||
<td class="px-4 py-2">${u.status || "-"}</td>
|
||||
<td class="px-4 py-2">${u.email || "-"}</td>
|
||||
<td class="px-4 py-2">${u.customAttributes?.completeForm ? "완료" : "미완료"}</td>
|
||||
<td class="px-4 py-2">${formatDate(u.customAttributes?.egBimLExpiryDate) || "-"}</td>
|
||||
<td class="px-4 py-2">${u.customAttributes?.familyUniqueKey || "-"}</td>
|
||||
<td class="px-4 py-2">${u.customAttributes?.lastAccessIp || "-"}</td>
|
||||
<td class="px-4 py-2">${formatDate(u.customAttributes?.lastSignInDate) || "-"}</td>
|
||||
<!-- ✅ EGBIM 최근 로그인 표시 -->
|
||||
<td class="px-4 py-2">${formatServerLogin(u.customAttributes?.serverLastLogin) || "-"}</td>
|
||||
<td class="px-4 py-2">${u.customAttributes?.team || "-"}</td>
|
||||
</tr>`;
|
||||
});
|
||||
} else {
|
||||
rows = `<tr><td colspan="18" class="text-center text-red-500">데이터 없음</td></tr>`;
|
||||
}
|
||||
$("#userTable").html(rows);
|
||||
|
||||
const $tableContainer = $("#tableContainer");
|
||||
const $scroll = $("#floatingScroll");
|
||||
const $scrollInner = $("#floatingScrollInner");
|
||||
|
||||
function syncWidth() {
|
||||
const tableWidth = $("#userTableWrapper").outerWidth();
|
||||
const containerWidth = $tableContainer.width();
|
||||
$scrollInner.width(Math.max(tableWidth, containerWidth));
|
||||
}
|
||||
|
||||
$scroll.off("scroll").on("scroll", () =>
|
||||
$tableContainer.scrollLeft($scroll.scrollLeft())
|
||||
);
|
||||
$tableContainer.off("scroll").on("scroll", () =>
|
||||
$scroll.scrollLeft($tableContainer.scrollLeft())
|
||||
);
|
||||
|
||||
setTimeout(syncWidth, 500);
|
||||
$(window).off("resize.syncScroll").on("resize.syncScroll", syncWidth);
|
||||
});
|
||||
}
|
||||
|
||||
// ✅ 체크박스 클릭 시 즉시 필터링
|
||||
$(document).on("change", "input[name='tenant']", function() {
|
||||
loadUserList($("#startDate").val(), $("#endDate").val(), $("#mode").val());
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
flatpickr("#startDate", { dateFormat: "Y-m-d" });
|
||||
flatpickr("#endDate", { dateFormat: "Y-m-d" });
|
||||
|
||||
$("#filterBtn").on("click", function() {
|
||||
loadUserList($("#startDate").val(), $("#endDate").val(), $("#mode").val());
|
||||
});
|
||||
|
||||
$("#resetBtn").on("click", function() {
|
||||
$("#startDate").val("");
|
||||
$("#endDate").val("");
|
||||
$("#mode").val("created");
|
||||
$("input[name='tenant']").prop("checked", false);
|
||||
$("#keyword").val(""); // ✅ 검색창 초기화
|
||||
loadUserList();
|
||||
});
|
||||
|
||||
$("#keywordBtn").on("click", function() {
|
||||
loadUserList($("#startDate").val(), $("#endDate").val(), $("#mode").val());
|
||||
});
|
||||
$("#keyword").on("keypress", function(e) {
|
||||
if (e.which === 13) {
|
||||
loadUserList($("#startDate").val(), $("#endDate").val(), $("#mode").val());
|
||||
}
|
||||
});
|
||||
|
||||
loadUserList();
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
$(function(){
|
||||
// ✅ 모달 열기
|
||||
$("#btn-import-descope").on("click", () => {
|
||||
$("#importModal").removeClass("hidden");
|
||||
$("#importMsg").text("");
|
||||
$("#importRun").prop("disabled", false).text("실행");
|
||||
});
|
||||
|
||||
// ✅ 모달 닫기 (밖 클릭 포함)
|
||||
$("#importCancel, #importModal").on("click", (e) => {
|
||||
if (e.target.id === "importCancel" || e.target.id === "importModal") {
|
||||
$("#importModal").addClass("hidden");
|
||||
}
|
||||
});
|
||||
|
||||
// ✅ 실행 버튼 클릭
|
||||
$("#importRun").on("click", async () => {
|
||||
const csvUrl = $("#csvUrl").val().trim();
|
||||
const expiry = $("#expiry").val().trim();
|
||||
const tenantType = $('input[name="tenant_type"]:checked').val(); // ✅ 올바른 name 참조
|
||||
|
||||
if (!csvUrl) {
|
||||
$("#importMsg").text("❗ CSV URL을 입력하세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
$("#importRun").prop("disabled", true).text("실행 중...");
|
||||
$("#importMsg").html("<span class='text-blue-600'>처리 중입니다... 잠시만 기다려주세요.</span>");
|
||||
|
||||
try {
|
||||
const res = await fetch("/eng/bbs/descope_import.php", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({
|
||||
csv_url: csvUrl,
|
||||
expiry: expiry,
|
||||
tenant_type: tenantType // ✅ 서버로 전달
|
||||
})
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
console.log("📦 응답:", data);
|
||||
|
||||
if (data.status === "ok") {
|
||||
$("#importMsg").html(`
|
||||
✅ 완료: <b>${data.created}</b> 생성 /
|
||||
<b>${data.updated}</b> 갱신 /
|
||||
<b>${data.failed}</b> 실패
|
||||
`);
|
||||
|
||||
if (data.failed > 0 && data.errors?.length) {
|
||||
console.warn("실패 목록:", data.errors);
|
||||
$("#importMsg").append(`<br><span class='text-gray-600'>일부 실패 로그는 콘솔에서 확인하세요.</span>`);
|
||||
}
|
||||
|
||||
} else {
|
||||
$("#importMsg").html(`❌ 실패: ${data.message || "서버 오류"}`);
|
||||
console.error("서버 응답:", data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("통신 오류:", err);
|
||||
$("#importMsg").html("<span class='text-red-600'>❌ 통신 오류가 발생했습니다.</span>");
|
||||
} finally {
|
||||
$("#importRun").prop("disabled", false).text("실행");
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
// header('Content-Type: application/json');
|
||||
|
||||
// $management_key = 'P2wON5fy1K6kyia269VpeIzYP8oP:K2ycqpjeh1voPBdxXxzB3ScZOQ6v9aiLmU2cIj70X1H8Kcoz0KWfCWmofUwAsAkJroXA8QC';
|
||||
// $loginId = $_POST['loginId'] ?? '';
|
||||
|
||||
// $url = "https://api.descope.com/v2/mgmt/user/search";
|
||||
// $payload = json_encode([
|
||||
// "loginId" => $loginId,
|
||||
// "limit" => 1
|
||||
// ]);
|
||||
|
||||
// $headers = [
|
||||
// "Authorization: Bearer $management_key",
|
||||
// "Content-Type: application/json"
|
||||
// ];
|
||||
|
||||
// $ch = curl_init($url);
|
||||
// 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) {
|
||||
// $res = json_decode($response, true);
|
||||
|
||||
// if (!empty($res['users'][0])) {
|
||||
// // ✅ 먼저 $user에 복사
|
||||
// $user = $res['users'][0];
|
||||
|
||||
// // ✅ 값이 없으면 테스트용 기본값 삽입
|
||||
// $user['name'] = $user['name'] ?: '홍길동';
|
||||
// $user['phone'] = $user['phone'] ?: '01012345678';
|
||||
// $user['customAttributes']['company'] = $user['customAttributes']['company'] ?? '한맥ENG';
|
||||
// $user['customAttributes']['team'] = $user['customAttributes']['team'] ?? '설계팀';
|
||||
// $user['customAttributes']['employeeId'] = $user['customAttributes']['employeeId'] ?? 'HM2024';
|
||||
|
||||
// // ✅ 수정된 $user 사용
|
||||
// echo json_encode(['status' => 'ok', 'user' => $user]);
|
||||
// } else {
|
||||
// echo json_encode(['status' => 'fail', 'message' => '사용자를 찾을 수 없음']);
|
||||
// }
|
||||
// } else {
|
||||
// echo json_encode(['status' => 'fail', 'message' => 'Descope API 오류', 'code' => $http_code]);
|
||||
// }
|
||||
?>
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$management_key = 'P2wON5fy1K6kyia269VpeIzYP8oP:K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj';
|
||||
$loginId = $_POST['loginId'] ?? '';
|
||||
|
||||
$url = "https://api.descope.com/v2/mgmt/user/search";
|
||||
$payload = json_encode([
|
||||
"loginId" => $loginId,
|
||||
"limit" => 1
|
||||
]);
|
||||
|
||||
$headers = [
|
||||
"Authorization: Bearer $management_key",
|
||||
"Content-Type: application/json"
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
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) {
|
||||
$res = json_decode($response, true);
|
||||
|
||||
if (!empty($res['users'][0])) {
|
||||
$user = $res['users'][0];
|
||||
|
||||
// ✅ 실제 값이 있으면 그대로 사용, 없으면 빈 문자열
|
||||
$user['name'] = $user['name'] ?? '';
|
||||
$user['phone'] = $user['phone'] ?? '';
|
||||
$user['customAttributes']['company'] = $user['customAttributes']['company'] ?? '';
|
||||
$user['customAttributes']['team'] = $user['customAttributes']['team'] ?? '';
|
||||
$user['customAttributes']['employeeId'] = $user['customAttributes']['employeeId'] ?? '';
|
||||
|
||||
echo json_encode(['status' => 'ok', 'user' => $user]);
|
||||
} else {
|
||||
echo json_encode(['status' => 'fail', 'message' => '사용자를 찾을 수 없음']);
|
||||
}
|
||||
} else {
|
||||
echo json_encode(['status' => 'fail', 'message' => 'Descope API 오류', 'code' => $http_code]);
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
<?php
|
||||
// // descope_verify.php
|
||||
|
||||
// // _GNUBOARD_ 등 시스템 상수 포함 필요
|
||||
// include_once('../../common.php');
|
||||
|
||||
// // POST 데이터 받기
|
||||
// $otp_code = trim($_POST['otp_code'] ?? '');
|
||||
// $email = trim($_POST['email'] ?? '');
|
||||
|
||||
// // $email = 'sdi9429@gmail.com'; // ★ 실제 인증번호 메일 받은 주소
|
||||
// // $otp_code = '378484';
|
||||
|
||||
// if (strlen($otp_code) !== 6) {
|
||||
// echo json_encode(['status'=>'fail', 'message'=>'잘못된 인증번호']);
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// // 1. Descope API에 검증 요청 (curl 또는 file_get_contents)
|
||||
// $descope_project_id = "P2wON5fy1K6kyia269VpeIzYP8oP";
|
||||
// $descope_api_url = "https://api.descope.com/v1/auth/otp/verify/email"; // email 인증 기준
|
||||
|
||||
// // $data = [
|
||||
// // 'loginId' => $email, // 이메일 아이디
|
||||
// // 'code' => $otp_code, // 입력받은 6자리 코드
|
||||
// // ];
|
||||
|
||||
// // $headers = [
|
||||
// // 'Content-Type: application/json',
|
||||
// // 'Accept: application/json',
|
||||
// // "x-descope-project-id: $descope_project_id"
|
||||
// // ];
|
||||
|
||||
// // $ch = curl_init();
|
||||
// // curl_setopt($ch, CURLOPT_URL, $descope_api_url);
|
||||
// // curl_setopt($ch, CURLOPT_POST, true);
|
||||
// // curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
// // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
// // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
|
||||
// // $response = curl_exec($ch);
|
||||
// // $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// // curl_close($ch);
|
||||
|
||||
// // $res_data = json_decode($response, true);
|
||||
|
||||
// // if ($http_code === 200 && isset($res_data['user'])) {
|
||||
// // // 인증 성공
|
||||
// // echo json_encode(['status'=>'ok']);
|
||||
// // } else {
|
||||
// // // 실패, 에러 메시지 출력
|
||||
// // $msg = $res_data['errorDescription'] ?? '인증 실패';
|
||||
// // echo json_encode(['status'=>'fail', 'message'=>$msg]);
|
||||
// // }
|
||||
|
||||
|
||||
|
||||
// $data = [
|
||||
// 'loginId' => $email,
|
||||
// 'code' => $otp_code,
|
||||
// ];
|
||||
// $headers = [
|
||||
// 'Content-Type: application/json',
|
||||
// 'Authorization: Bearer ' . $descope_project_id,
|
||||
// ];
|
||||
// $ch = curl_init('https://api.descope.com/v1/auth/otp/verify/email');
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($ch, CURLOPT_POST, true);
|
||||
// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
// $response = curl_exec($ch);
|
||||
// $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
// curl_close($ch);
|
||||
|
||||
// $res_data = json_decode($response, true);
|
||||
// if ($http_code === 200 && isset($res_data['sessionJwt'])) {
|
||||
// // 인증 성공
|
||||
// echo json_encode([
|
||||
// 'status'=>'ok',
|
||||
// 'refreshJwt' => $res_data['refreshJwt'] ?? '',
|
||||
// ]);
|
||||
// } else {
|
||||
// // 인증 실패
|
||||
// $msg = $res_data['errorDescription'] ?? '인증 실패';
|
||||
// echo json_encode(['status'=>'fail', 'message'=>$msg]);
|
||||
// }
|
||||
// exit;
|
||||
?>
|
||||
<?php
|
||||
// descope_verify.php
|
||||
|
||||
header('Content-Type: application/json; charset=UTF-8');
|
||||
|
||||
$commonPath = dirname(__DIR__, 3) . '/common.php';
|
||||
if (file_exists($commonPath)) {
|
||||
include_once($commonPath);
|
||||
}
|
||||
|
||||
// POST 데이터 받기
|
||||
$otp_code = trim($_POST['otp_code'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
|
||||
if (strlen($otp_code) !== 6 || !$email) {
|
||||
echo json_encode(['status'=>'fail', 'message'=>'잘못된 입력']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Descope 설정
|
||||
$projectId = 'P2wON5fy1K6kyia269VpeIzYP8oP';
|
||||
$managementKey = 'K32l5ORmzy32OvaaPvpdZsMY3JmKQb7a3vvrl10PgjlJUGk3K7EssMH3uW5VGQSbrgtEdPj'; // baron Access Key
|
||||
|
||||
// 1. OTP 인증 요청
|
||||
$data = [
|
||||
'loginId' => $email,
|
||||
'code' => $otp_code,
|
||||
];
|
||||
|
||||
$headers = [
|
||||
'Content-Type: application/json',
|
||||
'Authorization: Bearer ' . $projectId,
|
||||
];
|
||||
|
||||
$ch = curl_init('https://api.descope.com/v1/auth/otp/verify/email');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
// 응답 파싱
|
||||
$res_data = json_decode($response, true);
|
||||
|
||||
if ($http_code === 200 && isset($res_data['user'])) {
|
||||
$user = $res_data['user'];
|
||||
$userId = $user['userId'] ?? '';
|
||||
$email = $user['email'] ?? '';
|
||||
$refreshJwt = $res_data['refreshJwt'] ?? '';
|
||||
|
||||
// 도메인 분리
|
||||
$domain = explode('@', $email)[1];
|
||||
$internalDomains = [
|
||||
"hanmaceng.co.kr",
|
||||
"samaneng.com",
|
||||
"jangheon.co.kr",
|
||||
"hallasanup.com",
|
||||
"pre-cast.co.kr",
|
||||
"baroncs.co.kr"
|
||||
];
|
||||
|
||||
// 테넌트 결정
|
||||
if (in_array($domain, $internalDomains)) {
|
||||
$tenantId = "T2wQcWCBhUfJgUWHWgNwLg4iUDVY"; // 내부
|
||||
$isInternal = true;
|
||||
} else {
|
||||
$tenantId = "T2x4TDzxasp7auPCPcN8uOrxXchh"; // 외부
|
||||
$isInternal = false;
|
||||
}
|
||||
|
||||
// 2. 테넌트 연결 요청
|
||||
$tenantPayload = [
|
||||
"identifier" => $userId,
|
||||
"tenantId" => $tenantId,
|
||||
"roleNames" => ["Default User"]
|
||||
];
|
||||
|
||||
$ch2 = curl_init('https://api.descope.com/v1/mgmt/user/update/tenant/add');
|
||||
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch2, CURLOPT_POST, true);
|
||||
curl_setopt($ch2, CURLOPT_POSTFIELDS, json_encode($tenantPayload));
|
||||
curl_setopt($ch2, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer {$projectId}:{$managementKey}",
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
$tenantRes = curl_exec($ch2);
|
||||
$tenantHttpCode = curl_getinfo($ch2, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch2);
|
||||
|
||||
// if ($tenantHttpCode !== 200) {
|
||||
// echo json_encode(['status'=>'fail', 'message'=>'테넌트 연결 실패', 'descope_response' => $tenantRes]);
|
||||
|
||||
// exit;
|
||||
// }
|
||||
|
||||
// ✅ 중복 연결은 오류로 간주하지 않음
|
||||
if ($tenantHttpCode !== 200 && !str_contains($tenantRes, 'Tenant already exists')) {
|
||||
echo json_encode(['status'=>'fail', 'message'=>'테넌트 연결 실패', 'descope_response' => $tenantRes]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 성공 응답
|
||||
echo json_encode([
|
||||
'status' => 'ok',
|
||||
'refreshJwt' => $refreshJwt,
|
||||
'loginId' => $email,
|
||||
'isInternal' => $isInternal
|
||||
]);
|
||||
} else {
|
||||
$msg = $res_data['errorDescription'] ?? '인증 실패';
|
||||
echo json_encode(['status'=>'fail', 'message'=>$msg]);
|
||||
}
|
||||
exit;
|
||||
?>
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
// descope_verify_magiclink.php
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$api_key = "P2wON5fy1K6kyia269VpeIzYP8oP"; // 본인 Descope API Key로 교체
|
||||
$token = $_POST['token'] ?? '';
|
||||
if (!$token) exit(json_encode(['status'=>'fail', 'message'=>'토큰 없음']));
|
||||
|
||||
$url = "https://api.descope.com/v1/auth/magiclink/verify";
|
||||
$data = [ "token" => $token ];
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer $api_key",
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
$resData = json_decode($response, true);
|
||||
|
||||
if ($code == 200 && !empty($resData['refreshJwt'])) {
|
||||
echo json_encode([
|
||||
'status' => 'ok',
|
||||
'refreshJwt' => $resData['refreshJwt'],
|
||||
'email' => $resData['user']['email'] ?? ($resData['user']['loginIds'][0] ?? '')
|
||||
]);
|
||||
} else {
|
||||
$msg = $resData['errorDescription'] ?? '인증 실패';
|
||||
echo json_encode(['status'=>'fail', 'message'=>$msg, 'raw'=>$resData]);
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
require_once './descope_config.php';
|
||||
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$otp_code = trim($_POST['otp_code'] ?? '');
|
||||
|
||||
if (!$email || !$otp_code) {
|
||||
echo json_encode(['status' => 'fail', 'message' => '이메일/OTP 없음']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Descope OTP 인증 (verify)
|
||||
$url = 'https://api.descope.com/v1/auth/otp/verify/email';
|
||||
$data = [
|
||||
"loginId" => $email,
|
||||
"code" => $otp_code
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer " . $DESCOPE_API_KEY,
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
$resData = json_decode($response, true);
|
||||
|
||||
if ($code == 200 && isset($resData['refreshJwt'])) {
|
||||
echo json_encode([
|
||||
'status' => 'ok',
|
||||
'refreshJwt' => $resData['refreshJwt'],
|
||||
]);
|
||||
} else {
|
||||
$msg = $resData['errorDescription'] ?? 'OTP 인증 실패';
|
||||
echo json_encode(['status' => 'fail', 'message' => $msg, 'raw' => $response]);
|
||||
}
|
||||
@@ -0,0 +1,651 @@
|
||||
<?php include_once __DIR__ . '/asset_urls.php'; ?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
|
||||
function gtag() {
|
||||
dataLayer.push(arguments);
|
||||
}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>도면관리</title>
|
||||
<link rel="stylesheet" href="../css/reset.css" />
|
||||
<link rel="stylesheet" href="../css/font.css" />
|
||||
<link rel="stylesheet" href="../css/style.css" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css" />
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="../js/common.js"></script>
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
<script type="text/javascript" src="../js/floorplan.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- "js__"로 시작하는 클래스는 only 자바스크립트용입니다. -->
|
||||
<!-- XXXX js__넣어서 css 작성 금지 XXXX -->
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>"></input>
|
||||
<!-- HEADER -->
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
<!-- //Header -->
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- //모든 팝업페이지 경로 -->
|
||||
<div class="container floorplan">
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">Drawing Management</h2>
|
||||
<span>Efficient Management of Large-Scale Design Drawings</span>
|
||||
</div>
|
||||
<div class="keyword">
|
||||
<i class="egbim_obj k"></i>
|
||||
<span>Provides functions to easily find, review, edit,<br> and plot drawings without opening each file</span>
|
||||
<p>By utilizing drawing information such as project name, drawing title,<br> and drawing number recorded within the file, users can efficiently manage<br> a large number of design drawings with simple search, convenient editing, and batch plotting.</p>
|
||||
</div>
|
||||
<div class="diagram_wrap" data-aos="fade-up" data-aos-duration="1000">
|
||||
<div class="dia_elements_wrap">
|
||||
<div class="dia_element dia_element01">
|
||||
<i></i>
|
||||
<span class="dia_tit">Convenient drawing search &<br> information viewing</span>
|
||||
<div class="line"></div>
|
||||
</div>
|
||||
<div class="dia_element dia_element02">
|
||||
<i></i>
|
||||
<span class="dia_tit">Batch editing of<br> drawing information</span>
|
||||
<div class="line"></div>
|
||||
</div>
|
||||
<div class="dia_element dia_element03">
|
||||
<i></i>
|
||||
<span class="dia_tit">Batch plotting of<br> multiple drawings</span>
|
||||
<div class="line"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dia_circles_wrap">
|
||||
<div class="circle_dash"></div>
|
||||
<div class="circle_belt"></div>
|
||||
<div class="circle_core">
|
||||
<span>Efficient</span>
|
||||
<span>Drawing<br> Management</span>
|
||||
</div>
|
||||
<div class="circle_dots move">
|
||||
<div class="dot"></div>
|
||||
<div class="dot"></div>
|
||||
<div class="dot"></div>
|
||||
</div>
|
||||
<div class="circle_dots">
|
||||
<div class="dot"></div>
|
||||
<div class="dot"></div>
|
||||
<div class="dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
<section class="key find layout_fix_left">
|
||||
<div class="left">
|
||||
<div class="mid_tit">
|
||||
<span data-aos="fade-right" data-aos-duration="600">Drawing Search &<br> <em>Information<br class="brk"> Viewing</em></span>
|
||||
</div>
|
||||
<ul data-aos="fade-right" data-aos-duration="1000" data-aos-delay="300" class="js__fixLeft_tit">
|
||||
<li class="on"><span><em>01</em>User-Defined Folder</span></li>
|
||||
<li><span><em>02</em>Drawing Information Viewing</span></li>
|
||||
<li><span><em>03</em>Drawing Preview</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="right js__fixLeft_secs">
|
||||
<div id="content1" class="find01">
|
||||
<span class="sub_tit">User-Defined Folder</span>
|
||||
<div class="sub_text">
|
||||
Add frequently used folders to the User-Defined Folder panel by dragging and dropping from the folder explorer, so you can quickly access them when needed.
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div class="imgs">
|
||||
<object data="<?php echo eng_img_url('find_img_01_01.svg'); ?>" alt="" class="apx"></object>
|
||||
<img src="<?php echo eng_img_url('find_img_01.png'); ?>" alt="">
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="top">
|
||||
<b>Add frequently used folders</b><br> to the User-Defined Folder panel
|
||||
</div>
|
||||
<div class="line">
|
||||
<img src="<?php echo eng_img_url('ico_find_tri.svg'); ?>" alt="">
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<img src="<?php echo eng_img_url('ico_find_01.svg'); ?>" alt="">
|
||||
<div class="bottom_txt">
|
||||
<b>Reduce folder search time</b><br> for more efficient work.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content2" class="find02">
|
||||
<span class="sub_tit">Drawing Information Viewing</span>
|
||||
<div class="sub_text">
|
||||
Easily load and check drawing information such as project name, drawing title, and drawing number.
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div class="imgs">
|
||||
<img src="<?php echo eng_img_url('find_img_02_01.png'); ?>" alt="" class="apx">
|
||||
<img src="<?php echo eng_img_url('find_img_02.png'); ?>" alt="">
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="top">
|
||||
<b>Instantly view the drawing<br> information you need</b>
|
||||
</div>
|
||||
<div class="line">
|
||||
<img src="<?php echo eng_img_url('ico_find_tri.svg'); ?>" alt="">
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<img src="<?php echo eng_img_url('ico_find_02.svg'); ?>" alt="">
|
||||
<div class="bottom_txt">
|
||||
Improve accuracy<br> and efficiency with<br><b> faster data access</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content3" class="find03">
|
||||
<span class="sub_tit">Drawing Preview</span>
|
||||
<div class="sub_text">
|
||||
In dual mode, the drawing preview window can be separated for flexible use.<br> Each preview window can be placed on different monitors,<br> allowing users to conveniently view drawings without opening the actual files.
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div class="imgs">
|
||||
<img src="<?php echo eng_img_url('find_img_03_02.png'); ?>" alt="" class="apx">
|
||||
<div class="find_03_move">
|
||||
<img src="<?php echo eng_img_url('find_img_03_03.png'); ?>" alt="">
|
||||
<img src="<?php echo eng_img_url('find_img_03_01.png'); ?>" alt="" class="element">
|
||||
<img src="<?php echo eng_img_url('find_img_03.png'); ?>" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="top">
|
||||
<b>Separate the drawing preview</b><br> window in dual mode
|
||||
</div>
|
||||
<div class="line">
|
||||
<img src="<?php echo eng_img_url('ico_find_tri.svg'); ?>" alt="">
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<img src="<?php echo eng_img_url('ico_find_03.svg'); ?>" alt="">
|
||||
<div class="bottom_txt">
|
||||
View drawings conveniently<br><b> without opening them</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="key info layout_fix_left">
|
||||
<div class="left">
|
||||
<div class="mid_tit">
|
||||
<span data-aos="fade-right" data-aos-duration="600">Drawing Information<br> <em>Selection &<br class="brk"> Editing</em></span>
|
||||
</div>
|
||||
<ul data-aos="fade-right" data-aos-duration="1000" data-aos-delay="300" class="js__fixLeft_tit">
|
||||
<li class=" on"><span><em>01</em>Edit Drawing Information</span></li>
|
||||
<li><span><em>02</em>Select Drawing Information to View </span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="right js__fixLeft_secs">
|
||||
<div id="content4" class="info01">
|
||||
<span class="sub_tit">Editing Drawing Information</span>
|
||||
<div class="sub_text">
|
||||
Select the desired drawing information to edit multiple drawings at once.<br> Batch editing is supported with an Excel-style drag interface for quick and easy updates.
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div class="imgs">
|
||||
<img src="<?php echo eng_img_url('info_img_01_01.svg'); ?>" alt="" class="apx">
|
||||
<img src="<?php echo eng_img_url('info_img_01.png'); ?>" alt="">
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="top">
|
||||
Batch editing with<br><b> Excel-style drag control</b>
|
||||
</div>
|
||||
<div class="line">
|
||||
<img src="<?php echo eng_img_url('ico_find_tri.svg'); ?>" alt="">
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<img src="<?php echo eng_img_url('ico_info_01.svg'); ?>" alt="">
|
||||
<div class="bottom_txt">
|
||||
<b>Reduce repetitive tasks</b><br> for faster and<br> more accurate edits
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content5" class="info02">
|
||||
<span class="sub_tit">Selecting Drawing Information to View</span>
|
||||
<div class="sub_text">
|
||||
Select which drawing information to display, and easily add or remove it from the drawing list.<br> The interface also indicates which data is currently being modified.
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div class="imgs">
|
||||
<img src="<?php echo eng_img_url('info_img_02_01.png'); ?>" alt="" class="apx">
|
||||
<img src="<?php echo eng_img_url('info_img_02.png'); ?>" alt="">
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="top">
|
||||
Select drawing information<br> <b>to add or remove from the list</b>
|
||||
</div>
|
||||
<div class="line">
|
||||
<img src="<?php echo eng_img_url('ico_find_tri.svg'); ?>" alt="">
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<img src="<?php echo eng_img_url('ico_info_02.svg'); ?>" alt="">
|
||||
<div class="bottom_txt">
|
||||
<b>Flexible drawing<br> management</b> for more<br> efficient workflow
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="key print layout_fix_left">
|
||||
<div class="left">
|
||||
<div class="mid_tit">
|
||||
<span data-aos="fade-right" data-aos-duration="600">Plot Option Settings &<br> <em>Batch<br class="brk"> Plotting</em></span>
|
||||
</div>
|
||||
<ul data-aos="fade-right" data-aos-duration="1000" data-aos-delay="300" class="js__fixLeft_tit">
|
||||
<li class="on"><span><em>01</em>Select Files and View Plot Options</span></li>
|
||||
<li><span><em>02</em>Adjust Plot Options & Preview</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="right js__fixLeft_secs">
|
||||
<div id="content6" class="print01">
|
||||
<span class="sub_tit">Select Files and View Plot Options</span>
|
||||
<div class="sub_text">
|
||||
The drawing list of the selected folder appears in the explorer,<br> allowing users to select drawings for plotting and check their plot options.
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div class="imgs">
|
||||
<img src="<?php echo eng_img_url('print_img_01.png'); ?>" alt="">
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="top">
|
||||
View the drawing list<br><b> for multiple selections<br> and plot options</b>
|
||||
|
||||
</div>
|
||||
<div class="line">
|
||||
<img src="<?php echo eng_img_url('ico_find_tri.svg'); ?>" alt="">
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<img src="<?php echo eng_img_url('ico_print_01.svg'); ?>" alt="">
|
||||
<div class="bottom_txt">
|
||||
<b>Quickly review drawings</b><br> and process batch output<br> with ease
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content7" class="print02">
|
||||
<span class="sub_tit">Adjust Plot Options & Preview</span>
|
||||
<div class="sub_text">
|
||||
Plot options can be adjusted individually or in batches,<br> and previewing before plotting is available to ensure accuracy.
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div class="imgs">
|
||||
<img src="<?php echo eng_img_url('print_img_02.png'); ?>" alt="">
|
||||
</div>
|
||||
<div class="text">
|
||||
<div class="top">
|
||||
Adjust plot options<br><b> individually or in batches and<br> preview before plotting</b>
|
||||
</div>
|
||||
<div class="line">
|
||||
<img src="<?php echo eng_img_url('ico_find_tri.svg'); ?>" alt="">
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<img src="<?php echo eng_img_url('ico_print_02.svg'); ?>" alt="">
|
||||
<div class="bottom_txt">
|
||||
<b>Review plot options</b><br> first to reduce errors<br> and improve accuracy
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<!-- footer -->
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
<!-- //footer -->
|
||||
</div>
|
||||
<script>
|
||||
AOS.init();
|
||||
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
//console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time) => {
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
</script>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
// footer family site toggle
|
||||
$('.family_btn').click(function(e){
|
||||
e.stopPropagation();
|
||||
$('.family_list, .family_btn').toggleClass('family_on');
|
||||
});
|
||||
$(document).click(function(e){
|
||||
if(!$(e.target).closest('.family_wrap').length){
|
||||
$('.family_list, .family_btn').removeClass('family_on');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/bbs;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/faq;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/qa;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//descope 로그인, 로그아웃 js
|
||||
function updateHeaderMenu() {
|
||||
var isLoggedIn = !!sessionStorage.getItem("sessionJwt");
|
||||
// role 체크 예시 (로그인 시 저장해놓은 값)
|
||||
var isAdmin = sessionStorage.getItem('userRole') === 'super';
|
||||
|
||||
if (isLoggedIn) {
|
||||
$('.my_join2, .my_login2').show();
|
||||
$('.my_join, .my_login').hide();
|
||||
|
||||
// 마이페이지/관리자 메뉴 동적 출력
|
||||
if (isAdmin) {
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/eng/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
} else {
|
||||
$('#my_join2').html("<a href='javascript:mypage03();'>My Page</a>");
|
||||
}
|
||||
} else {
|
||||
$('.my_join2, .my_login2').hide();
|
||||
$('.my_join, .my_login').show();
|
||||
$('#my_join2').html(""); // 혹시모를 내용 초기화
|
||||
}
|
||||
}
|
||||
|
||||
function descopeLogout() {
|
||||
fetch('/eng/skin/member/basic/descope_logout.php', {
|
||||
method: 'POST',
|
||||
credentials: 'include' // PHPSESSID 쿠키 전송
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error('서버 로그아웃 실패');
|
||||
// 1) 로컬 저장소 정리
|
||||
// sessionStorage.removeItem("refreshJwt");
|
||||
// sessionStorage.removeItem("sessionJwt");
|
||||
// sessionStorage.removeItem("userRole");
|
||||
// sessionStorage.removeItem("userName");
|
||||
// sessionStorage.removeItem("loginId");
|
||||
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
// 2) UI 갱신
|
||||
updateHeaderMenu();
|
||||
// 3) 로그인 페이지로 이동
|
||||
window.location.href = '/eng/index.php';
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
alert('로그아웃 중 오류가 발생했습니다.');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// 기존에 있던 updateHeaderMenu() 호출 뒤에
|
||||
$('#my_login2 a').off('click').on('click', function(e){
|
||||
e.preventDefault();
|
||||
descopeLogout();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateHeaderMenu();
|
||||
// (필요하다면, 로그인 성공 후에도 항상 updateHeaderMenu(); 호출)
|
||||
});
|
||||
|
||||
//descope login
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
|
||||
$.ajax({
|
||||
url : '/eng/skin/member/basic/descope_login.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
dataType : "json",
|
||||
success : function(res){
|
||||
if(res.status === "ok") {
|
||||
// 토큰 저장
|
||||
// sessionStorage.setItem("refreshJwt", res.refreshJwt);
|
||||
sessionStorage.setItem("sessionJwt", res.sessionJwt);
|
||||
|
||||
// ✅ 사용자 정보 저장
|
||||
if (res.user) {
|
||||
sessionStorage.setItem("loginId", res.user.loginIds?.[0] || '');
|
||||
sessionStorage.setItem("userName", res.user.name || '');
|
||||
sessionStorage.setItem("company", res.user.customAttributes?.company || '');
|
||||
sessionStorage.setItem("familyCompany", res.user.customAttributes?.familyCompany || '');
|
||||
sessionStorage.setItem("position", res.user.customAttributes?.position || '');
|
||||
sessionStorage.setItem("team", res.user.customAttributes?.team || '');
|
||||
sessionStorage.setItem("familyUniqueKey", res.user.customAttributes?.familyUniqueKey || '');
|
||||
sessionStorage.setItem("phone", res.user.phone || '');
|
||||
}
|
||||
|
||||
// ✅ 추가: 관리자 등 정보 저장
|
||||
if(res.user && res.user.roleNames && res.user.roleNames[0])
|
||||
sessionStorage.setItem("userRole", res.user.roleNames[0]);
|
||||
else
|
||||
sessionStorage.removeItem("userRole");
|
||||
|
||||
// ✅ 로그인 후 메뉴 갱신
|
||||
updateHeaderMenu();
|
||||
|
||||
// UI 처리
|
||||
$('.popup_wrap').hide();
|
||||
$('body').css('overflow', '');
|
||||
lenis.start();
|
||||
// alert('로그인 하셨습니다.');
|
||||
} else {
|
||||
alert(res.message || "로그인 실패");
|
||||
|
||||
// 🔴 실패 횟수에 따라 안내 배너 교체
|
||||
if (res.failCount && res.failCount >= 8) {
|
||||
updateLoginBanner("fail");
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err.statusText || "통신 오류");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ 배너 교체 함수
|
||||
function updateLoginBanner(type = "default") {
|
||||
const $banner = $('#login_notice_banner');
|
||||
if (!$banner.length) return;
|
||||
|
||||
if (type === "default") {
|
||||
$banner.css({ background: "#063e01ff", color: "#fff" });
|
||||
$banner.find("strong").text("[로그인 시스템 변경 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
더 나은 보안을 위해 2025년 8월 8일부터 로그인 시스템이 변경되었습니다.<br>
|
||||
기존 회원 또한 신규 시스템에 맞춰 재가입을 진행해주시기 바랍니다.
|
||||
`);
|
||||
$banner.find("p:last").html(`※ 로그인 및 가입 관련 문의: <strong>010-8721-7453</strong>`);
|
||||
}
|
||||
|
||||
if (type === "fail") {
|
||||
$banner.css({ background: "#6a0202ff", color: "#faf6f6ff" });
|
||||
$banner.find("strong").text("[로그인 시도 제한 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
비밀번호 입력을 <strong>7회 이상 연속 실패</strong>하셨습니다.<br>
|
||||
<strong>8번째 시도부터 3분 대기</strong>가 적용됩니다.<br>
|
||||
10회 이상 실패 시 계정이 잠금 처리됩니다.
|
||||
`);
|
||||
$banner.find("p:last").text("");
|
||||
}
|
||||
}
|
||||
|
||||
//회원가입 약관동의
|
||||
// $('#fregister button[type=submit]').click(function(e){
|
||||
// e.preventDefault();
|
||||
// let agree11 = $('#agree11').val();
|
||||
// let agree21 = $('#agree21').val();
|
||||
// $.ajax({
|
||||
// url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
// type : "POST",
|
||||
// datatype : "json",
|
||||
// contentType: 'application/json; charset=utf-8',
|
||||
// data : {
|
||||
// 'agree11' : agree11,
|
||||
// 'agree21' : agree21
|
||||
// },
|
||||
// success : function(data){
|
||||
// var ss='';
|
||||
// for(i=0; i<data.length; i++){
|
||||
// ss=ss + data[i];
|
||||
// }
|
||||
// },
|
||||
// error : function(err){
|
||||
// alert(err);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
// 이지빔 프로그램 회원가입 url 쿼리스트링 파싱 함수
|
||||
function getQueryString(name) {
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
mainMask.classList.add('skip');
|
||||
// mainMask.style.aimation = 'none';
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(name);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
const popupParam = getQueryString('popup');
|
||||
|
||||
if (popupParam === 'signup') {
|
||||
console.log('쿼리 감지: signup → 회원가입 팝업 자동 오픈 시도');
|
||||
$('#pop_agreement').show(); // 팝업 보여주기
|
||||
|
||||
// 스크롤 잠금 (사용 중이면)
|
||||
$('body').css('overflow', 'hidden');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업 닫기 버튼 이벤트 연결
|
||||
$('#pop_agreement .btn_close').on('click', function() {
|
||||
$('#pop_agreement').hide();
|
||||
$('body').css('overflow', '');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//이지빔 프로그램 비밀번호 재설정 url 쿼리스트링 파싱 함수
|
||||
$(document).ready(function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const popup = urlParams.get('popup');
|
||||
const token = urlParams.get('t');
|
||||
|
||||
if (popup === 'pwreset') {
|
||||
// 팝업 전체 열기
|
||||
$('#pop_search').show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
|
||||
// 내부 컨텐츠 모두 숨기기
|
||||
$('#pop_search .popup_contents_wrap').hide();
|
||||
|
||||
if (token) {
|
||||
// 토큰이 있으면 비밀번호 재설정 단계
|
||||
if (!sessionStorage.getItem('pwreset_shown')) {
|
||||
$('#password_reset').show();
|
||||
sessionStorage.setItem('pwreset_shown', '1');
|
||||
}
|
||||
} else {
|
||||
// 토큰이 없으면 아이디 입력 단계 (첫 번째 .popup_contents_wrap)
|
||||
$('#pop_search .popup_contents_wrap').first().show();
|
||||
}
|
||||
}
|
||||
|
||||
// 닫기 버튼
|
||||
$('#pop_search .btn_close').on('click', function() {
|
||||
$('#pop_search').hide();
|
||||
$('body').css('overflow', '');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,501 @@
|
||||
<?php include_once __DIR__ . '/asset_urls.php'; ?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
|
||||
function gtag() {
|
||||
dataLayer.push(arguments);
|
||||
}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>for BIM</title>
|
||||
<link rel="stylesheet" href="../css/reset.css" />
|
||||
<link rel="stylesheet" href="../css/font.css" />
|
||||
<link rel="stylesheet" href="../css/style.css" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css" />
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="../js/common.js"></script>
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
<script type="text/javascript" src="../js/forbim.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- "js__"로 시작하는 클래스는 only 자바스크립트용입니다. -->
|
||||
<!-- XXXX js__넣어서 css 작성 금지 XXXX -->
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>"></input>
|
||||
<!-- HEADER -->
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
<!-- //Header -->
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- 컨텐츠 시작 -->
|
||||
<div class="container forbim">
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">for BIM</h2>
|
||||
<span>In the Digital Transformation Era, View Drawings and BIM Models Together</span>
|
||||
</div>
|
||||
<div class="keyword">
|
||||
<i class="egbim_obj k"></i>
|
||||
<span>View 3D BIM Models<br> Alongside Drawings with a Double Click</span>
|
||||
<p>EG-BIM provides a feature that allows users to easily view complex design information<br> that is difficult to check from drawings alone together with BIM models through the 3D Viewer.</p>
|
||||
</div>
|
||||
<div class="visual" data-aos="fade-up" data-aos-duration="1000">
|
||||
<img src="<?php echo eng_img_url('forbim_visual.png'); ?>" alt="">
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="theorys js__dark full_screen">
|
||||
<span class="mid_tit" data-aos="fade-down" data-aos-duration="1000">
|
||||
“ Cross Checking Between<br class="brk"><b class="gr_txt">BIM Model Data</b> & <b class="og_txt">Drawings</b> ”
|
||||
</span>
|
||||
<div class="diagram_wrap" data-aos="fade-up" data-aos-duration="1000">
|
||||
<div class="dia_elements_wrap">
|
||||
<div class="dia_element">
|
||||
<ul class="dia_text">
|
||||
<li>Location Data</li>
|
||||
<li>Shape Data</li>
|
||||
<li>Property Information</li>
|
||||
</ul>
|
||||
<div class="line"></div>
|
||||
</div>
|
||||
<div class="dia_element">
|
||||
<ul class="dia_text">
|
||||
<li>Longitudinal Section</li>
|
||||
<li>General Drawing</li>
|
||||
<li>Detail Drawing</li>
|
||||
</ul>
|
||||
<div class="line"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dia_circles_wrap">
|
||||
<div class="circle_bim">
|
||||
<div class="circle_belt"></div>
|
||||
<div class="circle_core">
|
||||
<span>BIM Model</span>
|
||||
<i></i>
|
||||
</div>
|
||||
<div class="circle_dots move">
|
||||
<div class="dot"></div>
|
||||
</div>
|
||||
<div class="circle_dots">
|
||||
<div class="dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="circle_floorplan">
|
||||
<div class="circle_belt"></div>
|
||||
<div class="circle_core">
|
||||
<span>Drawing</span>
|
||||
<i></i>
|
||||
</div>
|
||||
<div class="circle_dots move">
|
||||
<div class="dot"></div>
|
||||
</div>
|
||||
<div class="circle_dots">
|
||||
<div class="dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="layout_fix_left process">
|
||||
<div class="left" data-aos="fade-right" data-aos-duration="1000">
|
||||
<div class="bg js__fixLeft_bg on"></div>
|
||||
<div class="bg js__fixLeft_bg"></div>
|
||||
<span class="mid_tit js__fixLeft_tit on">
|
||||
<font class="num">01. </font>Simultaneous<br> <em>Drawing & BIM View</em>
|
||||
</span>
|
||||
<span class="mid_tit js__fixLeft_tit">
|
||||
<font class="num">02. </font><em>Detailed<br> </em>BIM Model View</em>
|
||||
</span>
|
||||
</div>
|
||||
<div class="right js__fixLeft_secs">
|
||||
<span class="mid_tit m" style="display:none;">
|
||||
<font class="num">01. </font>Simultaneous Drawing & BIM View
|
||||
</span>
|
||||
<div id="content1" class="link">
|
||||
<span class="sub_tit">
|
||||
<img src="<?php echo eng_img_url('ico_forbim_link.svg'); ?>" alt="">
|
||||
Data Linkage Between Drawings and BIM Models
|
||||
</span>
|
||||
<div class="sub_text">
|
||||
With data linkage between drawings and BIM models, selected components are displayed in real time, enabling users to view both simultaneously and check their location, shape, and property information.
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div class="fig01"><span>Drawings</span></div>
|
||||
<div class="fig02"><span>BIM Models</span></div>
|
||||
<div class="fig03"><span>Property Information</span></div>
|
||||
<div class="fig04"><span>Real-time display of selected components</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="mid_tit m" style="display:none;">
|
||||
<font class="num">02. </font>Detailed BIM Model View
|
||||
</span>
|
||||
<div id="content2" class="info">
|
||||
<span class="sub_tit">
|
||||
<img src="<?php echo eng_img_url('ico_forbim_check.svg'); ?>" alt="">
|
||||
Check BIM Model Property Information and Geometry
|
||||
</span>
|
||||
<div class="sub_text">
|
||||
<span>
|
||||
Through the various visualization features of the 3D Viewer, users can closely examine the model’s geometry and the interference relationships between each component.
|
||||
</span>
|
||||
</div>
|
||||
<div class="sub_figs">
|
||||
<div><span>Displays component-specific property information, toggles layers On/Off, applies clipping and transparency, and adjusts scale</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<!-- FOOTER -->
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
<!-- //FOOTER -->
|
||||
</div>
|
||||
<script>
|
||||
AOS.init();
|
||||
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time) => {
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
</script>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
// footer family site toggle
|
||||
$('.family_btn').click(function(e){
|
||||
e.stopPropagation();
|
||||
$('.family_list, .family_btn').toggleClass('family_on');
|
||||
});
|
||||
$(document).click(function(e){
|
||||
if(!$(e.target).closest('.family_wrap').length){
|
||||
$('.family_list, .family_btn').removeClass('family_on');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/bbs;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/faq;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/qa;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//descope 로그인, 로그아웃 js
|
||||
function updateHeaderMenu() {
|
||||
var isLoggedIn = !!sessionStorage.getItem("sessionJwt");
|
||||
// role 체크 예시 (로그인 시 저장해놓은 값)
|
||||
var isAdmin = sessionStorage.getItem('userRole') === 'super';
|
||||
|
||||
if (isLoggedIn) {
|
||||
$('.my_join2, .my_login2').show();
|
||||
$('.my_join, .my_login').hide();
|
||||
|
||||
// 마이페이지/관리자 메뉴 동적 출력
|
||||
if (isAdmin) {
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/eng/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
} else {
|
||||
$('#my_join2').html("<a href='javascript:mypage03();'>My Page</a>");
|
||||
}
|
||||
} else {
|
||||
$('.my_join2, .my_login2').hide();
|
||||
$('.my_join, .my_login').show();
|
||||
$('#my_join2').html(""); // 혹시모를 내용 초기화
|
||||
}
|
||||
}
|
||||
|
||||
function descopeLogout() {
|
||||
fetch('/eng/skin/member/basic/descope_logout.php', {
|
||||
method: 'POST',
|
||||
credentials: 'include' // PHPSESSID 쿠키 전송
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error('서버 로그아웃 실패');
|
||||
// 1) 로컬 저장소 정리
|
||||
// sessionStorage.removeItem("refreshJwt");
|
||||
// sessionStorage.removeItem("sessionJwt");
|
||||
// sessionStorage.removeItem("userRole");
|
||||
// sessionStorage.removeItem("userName");
|
||||
// sessionStorage.removeItem("loginId");
|
||||
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
// 2) UI 갱신
|
||||
updateHeaderMenu();
|
||||
// 3) 로그인 페이지로 이동
|
||||
window.location.href = '/eng/index.php';
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
alert('로그아웃 중 오류가 발생했습니다.');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// 기존에 있던 updateHeaderMenu() 호출 뒤에
|
||||
$('#my_login2 a').off('click').on('click', function(e){
|
||||
e.preventDefault();
|
||||
descopeLogout();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateHeaderMenu();
|
||||
// (필요하다면, 로그인 성공 후에도 항상 updateHeaderMenu(); 호출)
|
||||
});
|
||||
|
||||
//descope login
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
|
||||
$.ajax({
|
||||
url : '/eng/skin/member/basic/descope_login.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
dataType : "json",
|
||||
success : function(res){
|
||||
if(res.status === "ok") {
|
||||
// 토큰 저장
|
||||
// sessionStorage.setItem("refreshJwt", res.refreshJwt);
|
||||
sessionStorage.setItem("sessionJwt", res.sessionJwt);
|
||||
|
||||
// ✅ 사용자 정보 저장
|
||||
if (res.user) {
|
||||
sessionStorage.setItem("loginId", res.user.loginIds?.[0] || '');
|
||||
sessionStorage.setItem("userName", res.user.name || '');
|
||||
sessionStorage.setItem("company", res.user.customAttributes?.company || '');
|
||||
sessionStorage.setItem("familyCompany", res.user.customAttributes?.familyCompany || '');
|
||||
sessionStorage.setItem("position", res.user.customAttributes?.position || '');
|
||||
sessionStorage.setItem("team", res.user.customAttributes?.team || '');
|
||||
sessionStorage.setItem("familyUniqueKey", res.user.customAttributes?.familyUniqueKey || '');
|
||||
sessionStorage.setItem("phone", res.user.phone || '');
|
||||
}
|
||||
|
||||
// ✅ 추가: 관리자 등 정보 저장
|
||||
if(res.user && res.user.roleNames && res.user.roleNames[0])
|
||||
sessionStorage.setItem("userRole", res.user.roleNames[0]);
|
||||
else
|
||||
sessionStorage.removeItem("userRole");
|
||||
|
||||
// ✅ 로그인 후 메뉴 갱신
|
||||
updateHeaderMenu();
|
||||
|
||||
// UI 처리
|
||||
$('.popup_wrap').hide();
|
||||
$('body').css('overflow', '');
|
||||
lenis.start();
|
||||
// alert('로그인 하셨습니다.');
|
||||
} else {
|
||||
alert(res.message || "로그인 실패");
|
||||
|
||||
// 🔴 실패 횟수에 따라 안내 배너 교체
|
||||
if (res.failCount && res.failCount >= 8) {
|
||||
updateLoginBanner("fail");
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err.statusText || "통신 오류");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ 배너 교체 함수
|
||||
function updateLoginBanner(type = "default") {
|
||||
const $banner = $('#login_notice_banner');
|
||||
if (!$banner.length) return;
|
||||
|
||||
if (type === "default") {
|
||||
$banner.css({ background: "#063e01ff", color: "#fff" });
|
||||
$banner.find("strong").text("[로그인 시스템 변경 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
더 나은 보안을 위해 2025년 8월 8일부터 로그인 시스템이 변경되었습니다.<br>
|
||||
기존 회원 또한 신규 시스템에 맞춰 재가입을 진행해주시기 바랍니다.
|
||||
`);
|
||||
$banner.find("p:last").html(`※ 로그인 및 가입 관련 문의: <strong>010-8721-7453</strong>`);
|
||||
}
|
||||
|
||||
if (type === "fail") {
|
||||
$banner.css({ background: "#6a0202ff", color: "#faf6f6ff" });
|
||||
$banner.find("strong").text("[로그인 시도 제한 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
비밀번호 입력을 <strong>7회 이상 연속 실패</strong>하셨습니다.<br>
|
||||
<strong>8번째 시도부터 3분 대기</strong>가 적용됩니다.<br>
|
||||
10회 이상 실패 시 계정이 잠금 처리됩니다.
|
||||
`);
|
||||
$banner.find("p:last").text("");
|
||||
}
|
||||
}
|
||||
|
||||
//회원가입 약관동의
|
||||
// $('#fregister button[type=submit]').click(function(e){
|
||||
// e.preventDefault();
|
||||
// let agree11 = $('#agree11').val();
|
||||
// let agree21 = $('#agree21').val();
|
||||
// $.ajax({
|
||||
// url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
// type : "POST",
|
||||
// datatype : "json",
|
||||
// contentType: 'application/json; charset=utf-8',
|
||||
// data : {
|
||||
// 'agree11' : agree11,
|
||||
// 'agree21' : agree21
|
||||
// },
|
||||
// success : function(data){
|
||||
// var ss='';
|
||||
// for(i=0; i<data.length; i++){
|
||||
// ss=ss + data[i];
|
||||
// }
|
||||
// },
|
||||
// error : function(err){
|
||||
// alert(err);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
// 이지빔 프로그램 회원가입 url 쿼리스트링 파싱 함수
|
||||
function getQueryString(name) {
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
|
||||
if (intro) {
|
||||
intro.style.display = "none";
|
||||
}
|
||||
|
||||
if (mainMask) {
|
||||
mainMask.classList.add('skip');
|
||||
}
|
||||
|
||||
// mainMask.style.aimation = 'none';
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(name);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
const popupParam = getQueryString('popup');
|
||||
|
||||
if (popupParam === 'signup') {
|
||||
console.log('쿼리 감지: signup → 회원가입 팝업 자동 오픈 시도');
|
||||
$('#pop_agreement').show(); // 팝업 보여주기
|
||||
|
||||
// 스크롤 잠금 (사용 중이면)
|
||||
$('body').css('overflow', 'hidden');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업 닫기 버튼 이벤트 연결
|
||||
$('#pop_agreement .btn_close').on('click', function() {
|
||||
$('#pop_agreement').hide();
|
||||
$('body').css('overflow', '');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//이지빔 프로그램 비밀번호 재설정 url 쿼리스트링 파싱 함수
|
||||
$(document).ready(function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const popup = urlParams.get('popup');
|
||||
const token = urlParams.get('t');
|
||||
|
||||
if (popup === 'pwreset') {
|
||||
// 팝업 전체 열기
|
||||
$('#pop_search').show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
|
||||
// 내부 컨텐츠 모두 숨기기
|
||||
$('#pop_search .popup_contents_wrap').hide();
|
||||
|
||||
if (token) {
|
||||
// 토큰이 있으면 비밀번호 재설정 단계
|
||||
if (!sessionStorage.getItem('pwreset_shown')) {
|
||||
$('#password_reset').show();
|
||||
sessionStorage.setItem('pwreset_shown', '1');
|
||||
}
|
||||
} else {
|
||||
// 토큰이 없으면 아이디 입력 단계 (첫 번째 .popup_contents_wrap)
|
||||
$('#pop_search .popup_contents_wrap').first().show();
|
||||
}
|
||||
}
|
||||
|
||||
// 닫기 버튼
|
||||
$('#pop_search .btn_close').on('click', function() {
|
||||
$('#pop_search').hide();
|
||||
$('body').css('overflow', '');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<!-- 폼메일 시작 { -->
|
||||
<div id="formmail" class="new_win">
|
||||
<h1 id="win_title"><?php echo $name ?>님께 메일보내기</h1>
|
||||
|
||||
<form name="fformmail" action="./formmail_send.php" onsubmit="return fformmail_submit(this);" method="post" enctype="multipart/form-data" style="margin:0px;">
|
||||
<input type="hidden" name="to" value="<?php echo $email ?>">
|
||||
<input type="hidden" name="attach" value="2">
|
||||
<?php if ($is_member) { // 회원이면 ?>
|
||||
<input type="hidden" name="fnick" value="<?php echo get_text($member['mb_nick']) ?>">
|
||||
<input type="hidden" name="fmail" value="<?php echo $member['mb_email'] ?>">
|
||||
<?php } ?>
|
||||
|
||||
<div class="form_01 new_win_con">
|
||||
<h2 class="sound_only">메일쓰기</h2>
|
||||
<ul>
|
||||
<?php if (!$is_member) { ?>
|
||||
<li>
|
||||
<label for="fnick" class="sound_only">이름<strong>필수</strong></label>
|
||||
<input type="text" name="fnick" id="fnick" required class="frm_input full_input required" placeholder="이름">
|
||||
</li>
|
||||
<li>
|
||||
<label for="fmail" class="sound_only">E-mail<strong>필수</strong></label>
|
||||
<input type="text" name="fmail" id="fmail" required class="frm_input full_input required" placeholder="E-mail">
|
||||
</li>
|
||||
<?php } ?>
|
||||
<li>
|
||||
<label for="subject" class="sound_only">제목<strong>필수</strong></label>
|
||||
<input type="text" name="subject" id="subject" required class="frm_input full_input required" placeholder="제목">
|
||||
</li>
|
||||
<li class="chk_box">
|
||||
<span class="sound_only">형식</span>
|
||||
<input type="radio" name="type" value="0" id="type_text" checked>
|
||||
<label for="type_text"><span></span>TEXT</label>
|
||||
|
||||
<input type="radio" name="type" value="1" id="type_html">
|
||||
<label for="type_html"><span></span>HTML</label>
|
||||
|
||||
<input type="radio" name="type" value="2" id="type_both">
|
||||
<label for="type_both"><span></span>TEXT+HTML</label>
|
||||
</li>
|
||||
<li>
|
||||
<label for="content" class="sound_only">내용<strong>필수</strong></label>
|
||||
<textarea name="content" id="content" required class="required"></textarea>
|
||||
</li>
|
||||
<li class="formmail_flie">
|
||||
<div class="file_wr">
|
||||
<label for="file1" class="lb_icon"><i class="fa fa-download" aria-hidden="true"></i><span class="sound_only"> 첨부 파일 1</span></label>
|
||||
<input type="file" name="file1" id="file1" class="frm_file full_input">
|
||||
</div>
|
||||
<div class="frm_info">첨부 파일은 누락될 수 있으므로 메일을 보낸 후 파일이 첨부 되었는지 반드시 확인해 주시기 바랍니다.</div>
|
||||
</li>
|
||||
<li class="formmail_flie">
|
||||
<div class="file_wr">
|
||||
<label for="file2" class="lb_icon"><i class="fa fa-download" aria-hidden="true"></i><span class="sound_only"> 첨부 파일 2</span></label>
|
||||
<input type="file" name="file2" id="file2" class="frm_file full_input">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<span class="sound_only">자동등록방지</span>
|
||||
<?php echo captcha_html(); ?>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="win_btn">
|
||||
<button type="submit" id="btn_submit" class="btn_b02 reply_btn">메일발송</button>
|
||||
<button type="button" onclick="window.close();" class="btn_close">창닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
with (document.fformmail) {
|
||||
if (typeof fname != "undefined")
|
||||
fname.focus();
|
||||
else if (typeof subject != "undefined")
|
||||
subject.focus();
|
||||
}
|
||||
|
||||
function fformmail_submit(f)
|
||||
{
|
||||
<?php echo chk_captcha_js(); ?>
|
||||
|
||||
if (f.file1.value || f.file2.value) {
|
||||
// 4.00.11
|
||||
if (!confirm("첨부파일의 용량이 큰경우 전송시간이 오래 걸립니다.\n\n메일보내기가 완료되기 전에 창을 닫거나 새로고침 하지 마십시오."))
|
||||
return false;
|
||||
}
|
||||
|
||||
document.getElementById('btn_submit').disabled = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
<!-- } 폼메일 끝 -->
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 54 B |
@@ -0,0 +1,515 @@
|
||||
<?php include_once __DIR__ . '/asset_urls.php'; ?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>인터페이스</title>
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<!-- 듀얼모니터 시퀀스애니메이션 스크립트 -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/ScrollMagic.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/animation.gsap.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/debug.addIndicators.min.js"></script>
|
||||
<!-- 듀얼모니터 시퀀스애니메이션 스크립트 -->
|
||||
<script type="text/javascript" src="../js/common.js"></script>
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
<script type="text/javascript" src="../js/interface.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- "js__"로 시작하는 클래스는 only 자바스크립트용입니다. -->
|
||||
<!-- XXXX js__넣어서 css 작성 금지 XXXX -->
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>"></input>
|
||||
|
||||
<!-- HEADER -->
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
<!-- //Header -->
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- 컨텐츠 시작 -->
|
||||
<div class="container interface">
|
||||
<div class="mouse_mark js__mouse_mark" style="display:none"><span>SCROLL</span></div>
|
||||
<div class="mouse_mark js__mouse_mark02" style="display:none"><span>SCROLL</span></div>
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">Interface</h2>
|
||||
<span>UX design refined through real user experience</span>
|
||||
</div>
|
||||
</section>
|
||||
<section class="route js__mouse_area">
|
||||
<div class="fix">
|
||||
<div class="keyword">
|
||||
<i class="egbim_obj k"></i>
|
||||
<span>Easy & Simple</span>
|
||||
<p>Leave complex work environments behind and <b>enjoy a simple, intuitive interface.</b></p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<ul class="subs">
|
||||
<li class="on">
|
||||
<span class="sub_tit">Interface</span>
|
||||
<span class="mid_tit">Easy & Simple<br> <b>Interface</b></span>
|
||||
<span class="sub_text">
|
||||
Designed with user convenience as the top priority, EG-BIM replaces the complex and cluttered interface with <b>a clean, intuitive menu layout</b> that anyone can use with ease.
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="sub_tit">Grouping</span>
|
||||
<span class="mid_tit"><b>Grouped by Function,</b><br> Refined in design</span>
|
||||
<span class="sub_text">
|
||||
The interface is <b>simplified and systemized by function</b>, allowing users to easily locate the tools they need through structured menus.
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="sub_tit">Imaging</span>
|
||||
<span class="mid_tit"><b>Visualized</b><br> Information Delivery</span>
|
||||
<span class="sub_text">
|
||||
Object Property Information is displayed visually with images, making it easier for users to understand and improving clarity in information delivery.
|
||||
<ul>
|
||||
<li>Property windows by object type</li>
|
||||
<li>Displays basic, geometric, and positional data</li>
|
||||
<li>Improves readability and work efficiency</li>
|
||||
</ul>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="imgs">
|
||||
<li class="on">
|
||||
<span>File Menu</span>
|
||||
<span>Object Properties Display</span>
|
||||
<span>Workspace Settings</span>
|
||||
<span>Command Icons</span>
|
||||
<span>Spacious Workspace</span>
|
||||
<div class="img_box">
|
||||
<object data="<?php echo eng_img_url('interface_img_01.svg'); ?>"></object>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>Object Properties Menu</span>
|
||||
<span>Home Menu</span>
|
||||
<span>Workspace Icon Bar</span>
|
||||
<span>Command Icon Bar</span>
|
||||
<div class="img_box">
|
||||
<object data="<?php echo eng_img_url('interface_img_02.png'); ?>"></object>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>Object Property Window</span>
|
||||
<div class="img_box">
|
||||
<object data="<?php echo eng_img_url('interface_img_03.svg'); ?>"></object>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="sec1"></div>
|
||||
<div id="sec2"></div>
|
||||
<div id="sec3"></div>
|
||||
</section>
|
||||
|
||||
<section class="dual full_screen" id="dualm">
|
||||
<div class="dual_top js__mouse_area02">
|
||||
<div class="sub_tit">
|
||||
Dual-Monitor Workspace <br>
|
||||
Experience a new workspace with <b>dual-monitor support.</b>
|
||||
</div>
|
||||
<div id="imagesequence" class="pin" style="text-align: center;">
|
||||
<!-- <img id="myimg" src="<?php echo eng_img_url('com_img/comp_1.png'); ?>"> KR sequence -->
|
||||
<img id="myimg" src="<?php echo eng_img_url('com_img/eng/comp_1.png'); ?>"><!-- 영문시퀀스 -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="sub_tit">
|
||||
Simultaneous Work<br><b> through Linked Workspace</b>
|
||||
</div>
|
||||
<div class="subs">
|
||||
<div class="element">
|
||||
<div class="exam">
|
||||
<div class="exam_01">
|
||||
<span>Model Space</span>
|
||||
<img src="<?php echo eng_img_url('dual_img01_01.png'); ?>" alt="">
|
||||
</div>
|
||||
<div class="exam_02">
|
||||
<span>Layout Space</span>
|
||||
<img src="<?php echo eng_img_url('dual_img01_02.png'); ?>" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="sub_text">
|
||||
<span>
|
||||
Work seamlessly between model and layout spaces <b>without switching back and forth, thanks to linked workspace functionality.</b>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="element">
|
||||
<div class="exam">
|
||||
<div class="exam_01">
|
||||
<span>Working Drawing</span>
|
||||
<img src="<?php echo eng_img_url('dual_img02_01.png'); ?>" alt="">
|
||||
</div>
|
||||
<div class="exam_02">
|
||||
<span>Reference Drawing</span>
|
||||
<img src="<?php echo eng_img_url('dual_img02_02.png'); ?>" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="sub_text">
|
||||
<span>Separate the workspace for reference drawing <b>to prevent accidental changes, and work safely</b> in read-only mode.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<!-- FOOTER -->
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
<!-- //FOOTER -->
|
||||
</div>
|
||||
<script>
|
||||
AOS.init();
|
||||
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time)=>{
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
|
||||
// 페이지 로드 시에도 실행하여 초기 상태 확인
|
||||
if (window.innerWidth <= 1200) {
|
||||
const element = document.getElementById('dualm');
|
||||
if (element) {
|
||||
console.log('b')
|
||||
element.removeAttribute('id');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
// footer family site toggle
|
||||
$('.family_btn').click(function(e){
|
||||
e.stopPropagation();
|
||||
$('.family_list, .family_btn').toggleClass('family_on');
|
||||
});
|
||||
$(document).click(function(e){
|
||||
if(!$(e.target).closest('.family_wrap').length){
|
||||
$('.family_list, .family_btn').removeClass('family_on');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/bbs;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/faq;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/qa;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//descope 로그인, 로그아웃 js
|
||||
function updateHeaderMenu() {
|
||||
var isLoggedIn = !!sessionStorage.getItem("sessionJwt");
|
||||
// role 체크 예시 (로그인 시 저장해놓은 값)
|
||||
var isAdmin = sessionStorage.getItem('userRole') === 'super';
|
||||
|
||||
if (isLoggedIn) {
|
||||
$('.my_join2, .my_login2').show();
|
||||
$('.my_join, .my_login').hide();
|
||||
|
||||
// 마이페이지/관리자 메뉴 동적 출력
|
||||
if (isAdmin) {
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/eng/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
} else {
|
||||
$('#my_join2').html("<a href='javascript:mypage03();'>My Page</a>");
|
||||
}
|
||||
} else {
|
||||
$('.my_join2, .my_login2').hide();
|
||||
$('.my_join, .my_login').show();
|
||||
$('#my_join2').html(""); // 혹시모를 내용 초기화
|
||||
}
|
||||
}
|
||||
|
||||
function descopeLogout() {
|
||||
fetch('/eng/skin/member/basic/descope_logout.php', {
|
||||
method: 'POST',
|
||||
credentials: 'include' // PHPSESSID 쿠키 전송
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error('서버 로그아웃 실패');
|
||||
// 1) 로컬 저장소 정리
|
||||
// sessionStorage.removeItem("refreshJwt");
|
||||
// sessionStorage.removeItem("sessionJwt");
|
||||
// sessionStorage.removeItem("userRole");
|
||||
// sessionStorage.removeItem("userName");
|
||||
// sessionStorage.removeItem("loginId");
|
||||
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
// 2) UI 갱신
|
||||
updateHeaderMenu();
|
||||
// 3) 로그인 페이지로 이동
|
||||
window.location.href = '/eng/index.php';
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
alert('로그아웃 중 오류가 발생했습니다.');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// 기존에 있던 updateHeaderMenu() 호출 뒤에
|
||||
$('#my_login2 a').off('click').on('click', function(e){
|
||||
e.preventDefault();
|
||||
descopeLogout();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateHeaderMenu();
|
||||
// (필요하다면, 로그인 성공 후에도 항상 updateHeaderMenu(); 호출)
|
||||
});
|
||||
|
||||
//descope login
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
|
||||
$.ajax({
|
||||
url : '/eng/skin/member/basic/descope_login.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
dataType : "json",
|
||||
success : function(res){
|
||||
if(res.status === "ok") {
|
||||
// 토큰 저장
|
||||
// sessionStorage.setItem("refreshJwt", res.refreshJwt);
|
||||
sessionStorage.setItem("sessionJwt", res.sessionJwt);
|
||||
|
||||
// ✅ 사용자 정보 저장
|
||||
if (res.user) {
|
||||
sessionStorage.setItem("loginId", res.user.loginIds?.[0] || '');
|
||||
sessionStorage.setItem("userName", res.user.name || '');
|
||||
sessionStorage.setItem("company", res.user.customAttributes?.company || '');
|
||||
sessionStorage.setItem("familyCompany", res.user.customAttributes?.familyCompany || '');
|
||||
sessionStorage.setItem("position", res.user.customAttributes?.position || '');
|
||||
sessionStorage.setItem("team", res.user.customAttributes?.team || '');
|
||||
sessionStorage.setItem("familyUniqueKey", res.user.customAttributes?.familyUniqueKey || '');
|
||||
sessionStorage.setItem("phone", res.user.phone || '');
|
||||
}
|
||||
|
||||
// ✅ 추가: 관리자 등 정보 저장
|
||||
if(res.user && res.user.roleNames && res.user.roleNames[0])
|
||||
sessionStorage.setItem("userRole", res.user.roleNames[0]);
|
||||
else
|
||||
sessionStorage.removeItem("userRole");
|
||||
|
||||
// ✅ 로그인 후 메뉴 갱신
|
||||
updateHeaderMenu();
|
||||
|
||||
// UI 처리
|
||||
$('.popup_wrap').hide();
|
||||
$('body').css('overflow', '');
|
||||
lenis.start();
|
||||
// alert('로그인 하셨습니다.');
|
||||
} else {
|
||||
alert(res.message || "로그인 실패");
|
||||
|
||||
// 🔴 실패 횟수에 따라 안내 배너 교체
|
||||
if (res.failCount && res.failCount >= 8) {
|
||||
updateLoginBanner("fail");
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err.statusText || "통신 오류");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ 배너 교체 함수
|
||||
function updateLoginBanner(type = "default") {
|
||||
const $banner = $('#login_notice_banner');
|
||||
if (!$banner.length) return;
|
||||
|
||||
if (type === "default") {
|
||||
$banner.css({ background: "#063e01ff", color: "#fff" });
|
||||
$banner.find("strong").text("[로그인 시스템 변경 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
더 나은 보안을 위해 2025년 8월 8일부터 로그인 시스템이 변경되었습니다.<br>
|
||||
기존 회원 또한 신규 시스템에 맞춰 재가입을 진행해주시기 바랍니다.
|
||||
`);
|
||||
$banner.find("p:last").html(`※ 로그인 및 가입 관련 문의: <strong>010-8721-7453</strong>`);
|
||||
}
|
||||
|
||||
if (type === "fail") {
|
||||
$banner.css({ background: "#6a0202ff", color: "#faf6f6ff" });
|
||||
$banner.find("strong").text("[로그인 시도 제한 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
비밀번호 입력을 <strong>7회 이상 연속 실패</strong>하셨습니다.<br>
|
||||
<strong>8번째 시도부터 3분 대기</strong>가 적용됩니다.<br>
|
||||
10회 이상 실패 시 계정이 잠금 처리됩니다.
|
||||
`);
|
||||
$banner.find("p:last").text("");
|
||||
}
|
||||
}
|
||||
|
||||
//회원가입 약관동의
|
||||
// $('#fregister button[type=submit]').click(function(e){
|
||||
// e.preventDefault();
|
||||
// let agree11 = $('#agree11').val();
|
||||
// let agree21 = $('#agree21').val();
|
||||
// $.ajax({
|
||||
// url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
// type : "POST",
|
||||
// datatype : "json",
|
||||
// contentType: 'application/json; charset=utf-8',
|
||||
// data : {
|
||||
// 'agree11' : agree11,
|
||||
// 'agree21' : agree21
|
||||
// },
|
||||
// success : function(data){
|
||||
// var ss='';
|
||||
// for(i=0; i<data.length; i++){
|
||||
// ss=ss + data[i];
|
||||
// }
|
||||
// },
|
||||
// error : function(err){
|
||||
// alert(err);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
// 이지빔 프로그램 회원가입 url 쿼리스트링 파싱 함수
|
||||
function getQueryString(name) {
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
mainMask.classList.add('skip');
|
||||
// mainMask.style.aimation = 'none';
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(name);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
const popupParam = getQueryString('popup');
|
||||
|
||||
if (popupParam === 'signup') {
|
||||
console.log('쿼리 감지: signup → 회원가입 팝업 자동 오픈 시도');
|
||||
$('#pop_agreement').show(); // 팝업 보여주기
|
||||
|
||||
// 스크롤 잠금 (사용 중이면)
|
||||
$('body').css('overflow', 'hidden');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업 닫기 버튼 이벤트 연결
|
||||
$('#pop_agreement .btn_close').on('click', function() {
|
||||
$('#pop_agreement').hide();
|
||||
$('body').css('overflow', '');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//이지빔 프로그램 비밀번호 재설정 url 쿼리스트링 파싱 함수
|
||||
$(document).ready(function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const popup = urlParams.get('popup');
|
||||
const token = urlParams.get('t');
|
||||
|
||||
if (popup === 'pwreset') {
|
||||
// 팝업 전체 열기
|
||||
$('#pop_search').show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
|
||||
// 내부 컨텐츠 모두 숨기기
|
||||
$('#pop_search .popup_contents_wrap').hide();
|
||||
|
||||
if (token) {
|
||||
// 토큰이 있으면 비밀번호 재설정 단계
|
||||
if (!sessionStorage.getItem('pwreset_shown')) {
|
||||
$('#password_reset').show();
|
||||
sessionStorage.setItem('pwreset_shown', '1');
|
||||
}
|
||||
} else {
|
||||
// 토큰이 없으면 아이디 입력 단계 (첫 번째 .popup_contents_wrap)
|
||||
$('#pop_search .popup_contents_wrap').first().show();
|
||||
}
|
||||
}
|
||||
|
||||
// 닫기 버튼
|
||||
$('#pop_search .btn_close').on('click', function() {
|
||||
$('#pop_search').hide();
|
||||
$('body').css('overflow', '');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,513 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-STZ2R5Q7HG"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-STZ2R5Q7HG');
|
||||
</script>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>인터페이스</title>
|
||||
<link rel="stylesheet" href="../css/reset.css"/>
|
||||
<link rel="stylesheet" href="../css/font.css"/>
|
||||
<link rel="stylesheet" href="../css/style.css"/>
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script type="text/javascript" src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<!-- 듀얼모니터 시퀀스애니메이션 스크립트 -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/ScrollMagic.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/animation.gsap.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/debug.addIndicators.min.js"></script>
|
||||
<!-- 듀얼모니터 시퀀스애니메이션 스크립트 -->
|
||||
<script type="text/javascript" src="../js/common.js"></script>
|
||||
<script type="text/javascript" src="../js/popup.js"></script>
|
||||
<script type="text/javascript" src="../js/interface.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- "js__"로 시작하는 클래스는 only 자바스크립트용입니다. -->
|
||||
<!-- XXXX js__넣어서 css 작성 금지 XXXX -->
|
||||
<div class="wrapper">
|
||||
<input id="hid_mb_id" type="hidden" value="<?echo $_SESSION['session_id'];?>"></input>
|
||||
|
||||
<!-- HEADER -->
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
<!-- //Header -->
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
<!-- 컨텐츠 시작 -->
|
||||
<div class="container interface">
|
||||
<div class="mouse_mark js__mouse_mark" style="display:none"><span>SCROLL</span></div>
|
||||
<div class="mouse_mark js__mouse_mark02" style="display:none"><span>SCROLL</span></div>
|
||||
<section class="intro">
|
||||
<div class="top js__dark">
|
||||
<h2 data-aos="fade-down" data-aos-duration="1000">Interface</h2>
|
||||
<span>UX design refined through real user experience</span>
|
||||
</div>
|
||||
</section>
|
||||
<section class="route js__mouse_area">
|
||||
<div class="fix">
|
||||
<div class="keyword">
|
||||
<i class="egbim_obj k"></i>
|
||||
<span>Easy & Simple</span>
|
||||
<p>Leave complex work environments behind and <b>enjoy a simple, intuitive interface.</b></p>
|
||||
</div>
|
||||
<div class="content">
|
||||
<ul class="subs">
|
||||
<li class="on">
|
||||
<span class="sub_tit">Interface</span>
|
||||
<span class="mid_tit">Easy & Simple<br> <b>Interface</b></span>
|
||||
<span class="sub_text">
|
||||
Designed with user convenience as the top priority, EG-BIM replaces the complex and cluttered interface with <b>a clean, intuitive menu layout</b> that anyone can use with ease.
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="sub_tit">Grouping</span>
|
||||
<span class="mid_tit"><b>Grouped by Function,</b><br> Refined in design</span>
|
||||
<span class="sub_text">
|
||||
The interface is <b>simplified and systemized by function</b>, allowing users to easily locate the tools they need through structured menus.
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="sub_tit">Imaging</span>
|
||||
<span class="mid_tit"><b>Visualized</b><br> Information Delivery</span>
|
||||
<span class="sub_text">
|
||||
Object Property Information is displayed visually with images, making it easier for users to understand and improving clarity in information delivery.
|
||||
<ul>
|
||||
<li>Property windows by object type</li>
|
||||
<li>Displays basic, geometric, and positional data</li>
|
||||
<li>Improves readability and work efficiency</li>
|
||||
</ul>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="imgs">
|
||||
<li class="on">
|
||||
<span>File Menu</span>
|
||||
<span>Object Properties Display</span>
|
||||
<span>Workspace Settings</span>
|
||||
<span>Command Icons</span>
|
||||
<span>Spacious Workspace</span>
|
||||
<div class="img_box">
|
||||
<object data="../img/interface_img_01.svg"></object>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>Object Properties Menu</span>
|
||||
<span>Home Menu</span>
|
||||
<span>Workspace Icon Bar</span>
|
||||
<span>Command Icon Bar</span>
|
||||
<div class="img_box">
|
||||
<object data="../img/interface_img_02.png"></object>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>Object Property Window</span>
|
||||
<div class="img_box">
|
||||
<object data="../img/interface_img_03.svg"></object>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="sec1"></div>
|
||||
<div id="sec2"></div>
|
||||
<div id="sec3"></div>
|
||||
</section>
|
||||
|
||||
<section class="dual" id="dualm">
|
||||
<div class="dual_top js__mouse_area02">
|
||||
<div class="sub_tit">
|
||||
Dual-Monitor Workspace <br>
|
||||
Experience a new workspace with <b>dual-monitor support.</b>
|
||||
</div>
|
||||
<div id="imagesequence" class="pin" style="text-align: center;">
|
||||
<img id="myimg" src="../img/com_img/comp_1.png">
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="sub_tit">
|
||||
Simultaneous Work<br><b> through Linked Workspace</b>
|
||||
</div>
|
||||
<div class="subs">
|
||||
<div class="element">
|
||||
<div class="exam">
|
||||
<div class="exam_01">
|
||||
<span>Model Space</span>
|
||||
<img src="../img/dual_img01_01.png" alt="">
|
||||
</div>
|
||||
<div class="exam_02">
|
||||
<span>Layout Space</span>
|
||||
<img src="../img/dual_img01_02.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="sub_text">
|
||||
<span>
|
||||
Work seamlessly between model and layout spaces <b>without switching back and forth, thanks to linked workspace functionality.</b>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="element">
|
||||
<div class="exam">
|
||||
<div class="exam_01">
|
||||
<span>Working Drawing</span>
|
||||
<img src="../img/dual_img02_01.png" alt="">
|
||||
</div>
|
||||
<div class="exam_02">
|
||||
<span>Reference Drawing</span>
|
||||
<img src="../img/dual_img02_02.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="sub_text">
|
||||
<span>Separate the workspace for reference drawing <b>to prevent accidental changes, and work safely</b> in read-only mode.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<!-- FOOTER -->
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
<!-- //FOOTER -->
|
||||
</div>
|
||||
<script>
|
||||
AOS.init();
|
||||
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time)=>{
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
|
||||
// 페이지 로드 시에도 실행하여 초기 상태 확인
|
||||
if (window.innerWidth <= 1200) {
|
||||
const element = document.getElementById('dualm');
|
||||
if (element) {
|
||||
console.log('b')
|
||||
element.removeAttribute('id');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
// footer family site toggle
|
||||
$('.family_btn').click(function(e){
|
||||
e.stopPropagation();
|
||||
$('.family_list, .family_btn').toggleClass('family_on');
|
||||
});
|
||||
$(document).click(function(e){
|
||||
if(!$(e.target).closest('.family_wrap').length){
|
||||
$('.family_list, .family_btn').removeClass('family_on');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/bbs;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/faq;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/qa;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//descope 로그인, 로그아웃 js
|
||||
function updateHeaderMenu() {
|
||||
var isLoggedIn = !!sessionStorage.getItem("sessionJwt");
|
||||
// role 체크 예시 (로그인 시 저장해놓은 값)
|
||||
var isAdmin = sessionStorage.getItem('userRole') === 'super';
|
||||
|
||||
if (isLoggedIn) {
|
||||
$('.my_join2, .my_login2').show();
|
||||
$('.my_join, .my_login').hide();
|
||||
|
||||
// 마이페이지/관리자 메뉴 동적 출력
|
||||
if (isAdmin) {
|
||||
$('#my_join2').html("<a href='http://eg-bim.com/eng/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
} else {
|
||||
$('#my_join2').html("<a href='javascript:mypage03();'>My Page</a>");
|
||||
}
|
||||
} else {
|
||||
$('.my_join2, .my_login2').hide();
|
||||
$('.my_join, .my_login').show();
|
||||
$('#my_join2').html(""); // 혹시모를 내용 초기화
|
||||
}
|
||||
}
|
||||
|
||||
function descopeLogout() {
|
||||
fetch('/eng/skin/member/basic/descope_logout.php', {
|
||||
method: 'POST',
|
||||
credentials: 'include' // PHPSESSID 쿠키 전송
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error('서버 로그아웃 실패');
|
||||
// 1) 로컬 저장소 정리
|
||||
// sessionStorage.removeItem("refreshJwt");
|
||||
// sessionStorage.removeItem("sessionJwt");
|
||||
// sessionStorage.removeItem("userRole");
|
||||
// sessionStorage.removeItem("userName");
|
||||
// sessionStorage.removeItem("loginId");
|
||||
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
// 2) UI 갱신
|
||||
updateHeaderMenu();
|
||||
// 3) 로그인 페이지로 이동
|
||||
window.location.href = '/eng/index.php';
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
alert('로그아웃 중 오류가 발생했습니다.');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// 기존에 있던 updateHeaderMenu() 호출 뒤에
|
||||
$('#my_login2 a').off('click').on('click', function(e){
|
||||
e.preventDefault();
|
||||
descopeLogout();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateHeaderMenu();
|
||||
// (필요하다면, 로그인 성공 후에도 항상 updateHeaderMenu(); 호출)
|
||||
});
|
||||
|
||||
//descope login
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
|
||||
$.ajax({
|
||||
url : '/eng/skin/member/basic/descope_login.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
dataType : "json",
|
||||
success : function(res){
|
||||
if(res.status === "ok") {
|
||||
// 토큰 저장
|
||||
// sessionStorage.setItem("refreshJwt", res.refreshJwt);
|
||||
sessionStorage.setItem("sessionJwt", res.sessionJwt);
|
||||
|
||||
// ✅ 사용자 정보 저장
|
||||
if (res.user) {
|
||||
sessionStorage.setItem("loginId", res.user.loginIds?.[0] || '');
|
||||
sessionStorage.setItem("userName", res.user.name || '');
|
||||
sessionStorage.setItem("company", res.user.customAttributes?.company || '');
|
||||
sessionStorage.setItem("familyCompany", res.user.customAttributes?.familyCompany || '');
|
||||
sessionStorage.setItem("position", res.user.customAttributes?.position || '');
|
||||
sessionStorage.setItem("team", res.user.customAttributes?.team || '');
|
||||
sessionStorage.setItem("familyUniqueKey", res.user.customAttributes?.familyUniqueKey || '');
|
||||
sessionStorage.setItem("phone", res.user.phone || '');
|
||||
}
|
||||
|
||||
// ✅ 추가: 관리자 등 정보 저장
|
||||
if(res.user && res.user.roleNames && res.user.roleNames[0])
|
||||
sessionStorage.setItem("userRole", res.user.roleNames[0]);
|
||||
else
|
||||
sessionStorage.removeItem("userRole");
|
||||
|
||||
// ✅ 로그인 후 메뉴 갱신
|
||||
updateHeaderMenu();
|
||||
|
||||
// UI 처리
|
||||
$('.popup_wrap').hide();
|
||||
$('body').css('overflow', '');
|
||||
lenis.start();
|
||||
// alert('로그인 하셨습니다.');
|
||||
} else {
|
||||
alert(res.message || "로그인 실패");
|
||||
|
||||
// 🔴 실패 횟수에 따라 안내 배너 교체
|
||||
if (res.failCount && res.failCount >= 8) {
|
||||
updateLoginBanner("fail");
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err.statusText || "통신 오류");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ 배너 교체 함수
|
||||
function updateLoginBanner(type = "default") {
|
||||
const $banner = $('#login_notice_banner');
|
||||
if (!$banner.length) return;
|
||||
|
||||
if (type === "default") {
|
||||
$banner.css({ background: "#063e01ff", color: "#fff" });
|
||||
$banner.find("strong").text("[로그인 시스템 변경 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
더 나은 보안을 위해 2025년 8월 8일부터 로그인 시스템이 변경되었습니다.<br>
|
||||
기존 회원 또한 신규 시스템에 맞춰 재가입을 진행해주시기 바랍니다.
|
||||
`);
|
||||
$banner.find("p:last").html(`※ 로그인 및 가입 관련 문의: <strong>010-8721-7453</strong>`);
|
||||
}
|
||||
|
||||
if (type === "fail") {
|
||||
$banner.css({ background: "#6a0202ff", color: "#faf6f6ff" });
|
||||
$banner.find("strong").text("[로그인 시도 제한 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
비밀번호 입력을 <strong>7회 이상 연속 실패</strong>하셨습니다.<br>
|
||||
<strong>8번째 시도부터 3분 대기</strong>가 적용됩니다.<br>
|
||||
10회 이상 실패 시 계정이 잠금 처리됩니다.
|
||||
`);
|
||||
$banner.find("p:last").text("");
|
||||
}
|
||||
}
|
||||
|
||||
//회원가입 약관동의
|
||||
// $('#fregister button[type=submit]').click(function(e){
|
||||
// e.preventDefault();
|
||||
// let agree11 = $('#agree11').val();
|
||||
// let agree21 = $('#agree21').val();
|
||||
// $.ajax({
|
||||
// url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
// type : "POST",
|
||||
// datatype : "json",
|
||||
// contentType: 'application/json; charset=utf-8',
|
||||
// data : {
|
||||
// 'agree11' : agree11,
|
||||
// 'agree21' : agree21
|
||||
// },
|
||||
// success : function(data){
|
||||
// var ss='';
|
||||
// for(i=0; i<data.length; i++){
|
||||
// ss=ss + data[i];
|
||||
// }
|
||||
// },
|
||||
// error : function(err){
|
||||
// alert(err);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
// 이지빔 프로그램 회원가입 url 쿼리스트링 파싱 함수
|
||||
function getQueryString(name) {
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
mainMask.classList.add('skip');
|
||||
// mainMask.style.aimation = 'none';
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(name);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
const popupParam = getQueryString('popup');
|
||||
|
||||
if (popupParam === 'signup') {
|
||||
console.log('쿼리 감지: signup → 회원가입 팝업 자동 오픈 시도');
|
||||
$('#pop_agreement').show(); // 팝업 보여주기
|
||||
|
||||
// 스크롤 잠금 (사용 중이면)
|
||||
$('body').css('overflow', 'hidden');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업 닫기 버튼 이벤트 연결
|
||||
$('#pop_agreement .btn_close').on('click', function() {
|
||||
$('#pop_agreement').hide();
|
||||
$('body').css('overflow', '');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//이지빔 프로그램 비밀번호 재설정 url 쿼리스트링 파싱 함수
|
||||
$(document).ready(function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const popup = urlParams.get('popup');
|
||||
const token = urlParams.get('t');
|
||||
|
||||
if (popup === 'pwreset') {
|
||||
// 팝업 전체 열기
|
||||
$('#pop_search').show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
|
||||
// 내부 컨텐츠 모두 숨기기
|
||||
$('#pop_search .popup_contents_wrap').hide();
|
||||
|
||||
if (token) {
|
||||
// 토큰이 있으면 비밀번호 재설정 단계
|
||||
if (!sessionStorage.getItem('pwreset_shown')) {
|
||||
$('#password_reset').show();
|
||||
sessionStorage.setItem('pwreset_shown', '1');
|
||||
}
|
||||
} else {
|
||||
// 토큰이 없으면 아이디 입력 단계 (첫 번째 .popup_contents_wrap)
|
||||
$('#pop_search .popup_contents_wrap').first().show();
|
||||
}
|
||||
}
|
||||
|
||||
// 닫기 버튼
|
||||
$('#pop_search .btn_close').on('click', function() {
|
||||
$('#pop_search').hide();
|
||||
$('body').css('overflow', '');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,166 @@
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/jquery-3.6.1.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/jquery.mousewheel.min.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/common.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/include.js"></script>
|
||||
<script type="text/javascript" src="<?php echo G5_URL ?>/js/popup.js?v=20260723"></script>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
|
||||
|
||||
<!--popup_wrap-->
|
||||
<div id="pop_login" class="popup_wrap">
|
||||
<!--popup_in-->
|
||||
<div class="popup_in">
|
||||
<button class="btn_close">
|
||||
<div class="close_div"><img src="<?php echo G5_URL ?>/img/ico_close.svg" alt="sdi"></div>
|
||||
</button>
|
||||
<!--popup_container-->
|
||||
<div class="popup_container login">
|
||||
<!--popup_tit-->
|
||||
<div class="popup_tit">
|
||||
<h1 class="h_1">Login</h1>
|
||||
<h3 class="h_3">
|
||||
Log in to access <br><br class="brk"><strong>1:1 purchase inquiries and <br>product support services.</strong>
|
||||
</h3>
|
||||
</div>
|
||||
<!--//popup_tit-->
|
||||
<!-- popup_contents_wrap -->
|
||||
<div class="popup_contents_wrap">
|
||||
<form id="flogin" name="flogin" action="<?php //echo $login_action_url?>" onsubmit="return flogin_submit(this);" method="post">
|
||||
<input type="hidden" name="url" value="<?php //echo $login_url?>">
|
||||
<div class="input_wrap id">
|
||||
<i class="id"></i><input type="text" name="mb_id" id="login_id" required class="id " placeholder="ID">
|
||||
</div>
|
||||
<div class="input_wrap pw" style="position: relative;">
|
||||
<i class="pw"></i><input type="password" name="mb_password" id="login_pw" required class="pw " size="20" maxLength="20" placeholder="Password" onkeyup="ufn_loginpw_onkeyup(this);">
|
||||
<!-- 👁 Font Awesome 아이콘 -->
|
||||
<i id="toggle_pw"
|
||||
class="fa-solid fa-eye"
|
||||
style="position:absolute; right:10px; top:50%;
|
||||
transform:translateY(-50%);
|
||||
cursor:pointer; color:#888;"></i>
|
||||
<!-- ✅ CapsLock 경고 (커서 오른쪽 표시용) -->
|
||||
<div id="capslock_hint"
|
||||
style="display:none;
|
||||
position:absolute;
|
||||
left:0;
|
||||
bottom:-20px;
|
||||
font-size:13px;
|
||||
color:#f87171;
|
||||
pointer-events:none;
|
||||
animation:fadein 0.15s ease;">
|
||||
⚠️ Caps Lock is on.
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
@keyframes fadein { from { opacity:0; } to { opacity:1; } }
|
||||
</style>
|
||||
<div class="join_btn_wrap">
|
||||
<button type="submit" id="btn_login">Login</button>
|
||||
</div>
|
||||
<div class="btn_go">
|
||||
<div class="go_signup"><a href="javascript:agreement();"><span>Sign up</span><i class="arrow_r"></i></a></div>
|
||||
<div class="go_find"><a href="javascript:search();"><span>Reset Password</span><i class="arrow_r"></i></a></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- //popup_contents_wrap -->
|
||||
</div>
|
||||
<!--//popup_container-->
|
||||
</div>
|
||||
<!--//popup_in-->
|
||||
</div>
|
||||
<!--//popup_wrap-->
|
||||
|
||||
|
||||
<script>
|
||||
function ufn_loginpw_onkeyup(l_pw){
|
||||
var loginButton = document.getElementById('btn_login');
|
||||
if (!loginButton) {
|
||||
return;
|
||||
}
|
||||
|
||||
loginButton.disabled = !(l_pw && l_pw.value.length > 0);
|
||||
}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// (function () {
|
||||
// // 1) 공지 팝업 DOM이 없으면 생성
|
||||
// if (!document.getElementById('egbimNotice')) {
|
||||
// $('body').append(`
|
||||
// <div class="notice-backdrop" style="display:none;position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:9998;"></div>
|
||||
// <div class="notice-box" id="egbimNotice" style="display:none;position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:9999;background:#103a2f;color:#fff;border-radius:14px;max-width:520px;width:92%;box-shadow:0 10px 30px rgba(0,0,0,.35);padding:28px;">
|
||||
// <button class="notice-close" aria-label="닫기" style="position:absolute;right:10px;top:8px;border:none;background:transparent;color:#fff;font-size:24px;cursor:pointer;">×</button>
|
||||
// <h3 style="margin:0 0 10px;font-size:20px;font-weight:700;">공지사항</h3>
|
||||
// <p style="line-height:1.6;margin:0 0 18px;">
|
||||
// EG-BIM 프로그램 사용자 인증 신규 시스템 도입으로 인해<br>
|
||||
// 기존 회원분들께서는 <strong>재가입</strong> 해주시기 바랍니다.
|
||||
// </p>
|
||||
// <div class="notice-actions" style="display:flex;gap:8px;justify-content:flex-end;">
|
||||
// <button class="btn-ok" style="padding:10px 16px;border:none;border-radius:10px;background:#ffb02e;color:#111;cursor:pointer;font-weight:700;">확인</button>
|
||||
// </div>
|
||||
// </div>
|
||||
// `);
|
||||
// }
|
||||
|
||||
// // 팝업 열기/닫기
|
||||
// function openNotice(onConfirm) {
|
||||
// $('.notice-backdrop, #egbimNotice').fadeIn(120);
|
||||
// const close = () => {
|
||||
// $('#egbimNotice .btn-ok, #egbimNotice .notice-close').off('click');
|
||||
// $('.notice-backdrop, #egbimNotice').fadeOut(120);
|
||||
// };
|
||||
// $('#egbimNotice .notice-close').on('click', close);
|
||||
// $('#egbimNotice .btn-ok').on('click', function () {
|
||||
// close();
|
||||
// if (typeof onConfirm === 'function') onConfirm();
|
||||
// });
|
||||
// }
|
||||
|
||||
// // 2) 로그인 버튼 클릭 → 공지 팝업 먼저 띄우고, 확인 시 로그인 실행
|
||||
// $('#btn_login').off('click.notice').on('click.notice', function (e) {
|
||||
// e.preventDefault();
|
||||
// openNotice(doLoginAjax);
|
||||
// });
|
||||
// })();
|
||||
//
|
||||
</script>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
// form submit (Enter 눌러도 실행됨)
|
||||
$('#flogin').on('submit', function(e) {
|
||||
e.preventDefault(); // 기본 제출 막기
|
||||
$('#btn_login').click(); // 버튼 클릭 이벤트 재사용
|
||||
});
|
||||
});
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const pwInput = document.getElementById("login_pw");
|
||||
const toggle = document.getElementById("toggle_pw");
|
||||
const hint = document.getElementById("capslock_hint");
|
||||
|
||||
// 👁 토글 기능
|
||||
toggle.addEventListener("click", () => {
|
||||
const isHidden = pwInput.type === "password";
|
||||
pwInput.type = isHidden ? "text" : "password";
|
||||
toggle.classList.toggle("fa-eye");
|
||||
toggle.classList.toggle("fa-eye-slash");
|
||||
});
|
||||
|
||||
// ⚠ CapsLock 감지
|
||||
pwInput.addEventListener("keydown", e => {
|
||||
const caps = e.getModifierState && e.getModifierState("CapsLock");
|
||||
hint.style.display = caps ? "block" : "none";
|
||||
});
|
||||
pwInput.addEventListener("keyup", e => {
|
||||
const caps = e.getModifierState && e.getModifierState("CapsLock");
|
||||
hint.style.display = caps ? "block" : "none";
|
||||
});
|
||||
pwInput.addEventListener("blur", () => hint.style.display = "none");
|
||||
|
||||
// 🚫 한글 차단
|
||||
pwInput.addEventListener("input", function() {
|
||||
this.value = this.value.replace(/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/g, '');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 자신만의 코드를 넣어주세요.
|
||||
@@ -0,0 +1,694 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
include_once __DIR__ . '/asset_urls.php';
|
||||
?>
|
||||
<head>
|
||||
<!-- Google Tag Manager -->
|
||||
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-5GX3FS9R');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7J3S6MHW3Y"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-7J3S6MHW3Y');
|
||||
</script>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="디지털전환시대 EG-BIM, 도면과 3차원 정보모델을 하나의 S/W로" />
|
||||
<meta name="keywords" content="EG-BIM, 이지빔, egbim, eg bim, CAD, 대안CAD, 도면, BIM, 삼안, 한맥, 바론컨설턴트" />
|
||||
|
||||
<!-- Open Graph: 카카오톡 미리보기용 -->
|
||||
<meta property="og:title" content="EG-BIM" />
|
||||
<meta property="og:description" content="디지털전환시대 EG-BIM, 도면과 3차원 정보모델을 하나의 S/W로" />
|
||||
<meta property="og:image" content="<?php echo eng_img_url('og-main-thumb.JPG'); ?>" />
|
||||
<meta property="og:url" content="/eng/" />
|
||||
<meta property="og:type" content="website" />
|
||||
|
||||
<title>EG-BIM</title>
|
||||
<link rel="stylesheet" href="/eng/css/reset.css" />
|
||||
<link rel="stylesheet" href="/eng/css/font.css" />
|
||||
<link rel="stylesheet" href="/eng/css/style.css" />
|
||||
<link rel="stylesheet" href="/eng/theme/basic/skin/qa/basic/style.css?ver=2303229">
|
||||
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css" type="text/css"/>
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="https://unpkg.com/lenis@1.1.9/dist/lenis.min.js"></script>
|
||||
<link rel="stylesheet" href="https://unpkg.com/lenis@1.1.9/dist/lenis.css">
|
||||
<script type="text/javascript" src="/eng/js/jquery-3.6.1.min.js"></script>
|
||||
<script type="text/javascript" src="/eng/js/jquery.mousewheel.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollTrigger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/ScrollToPlugin.min.js"></script>
|
||||
<script type="text/javascript" src="/eng/js/common.js"></script>
|
||||
<script type="text/javascript" src="/eng/js/popup.js"></script>
|
||||
<script>
|
||||
window.EGBIM_IMG_BASE_URL = <?php echo json_encode(eng_img_url()); ?>;
|
||||
</script>
|
||||
<script type="text/javascript" src="/eng/js/index.js"></script>
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Google Tag Manager (noscript) -->
|
||||
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5GX3FS9R"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
||||
<!-- End Google Tag Manager (noscript) -->
|
||||
|
||||
<div class="wrapper">
|
||||
<div class="main_mask">
|
||||
<!-- Header -->
|
||||
<?php include_once($member_skin_path.'/main_header.skin.php'); ?>
|
||||
<!-- //Header -->
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<?php
|
||||
include_once($member_skin_path.'/login.skin.php');
|
||||
include_once($member_skin_path.'/mypage01.skin.php');
|
||||
include_once($member_skin_path.'/register.skin.php');
|
||||
include_once($member_skin_path.'/register_form.skin.php');
|
||||
include_once($member_skin_path.'/mypage02.skin.php');
|
||||
include_once($member_skin_path.'/mypage03.skin.php');
|
||||
include_once($member_skin_path.'/sitemap.skin.php');
|
||||
include_once($member_skin_path.'/privacy.skin.php');
|
||||
include_once($member_skin_path.'/password_lost.skin.php');
|
||||
?>
|
||||
|
||||
|
||||
<?php
|
||||
// 오늘 날짜 (Y-m-d 형식)
|
||||
$main_today = date('Y-m-d');
|
||||
|
||||
// 시작일과 종료일
|
||||
$main_startDate = '2025-10-25';
|
||||
$main_endDate = '2026-01-31';
|
||||
// 기간 내에 있으면 배너 표시
|
||||
if ($main_today >= $main_startDate && $main_today <= $main_endDate) {
|
||||
// 쿠키 확인
|
||||
$popup_hidden = isset($_COOKIE['hide_popup']) ? $_COOKIE['hide_popup'] : '';
|
||||
if ($popup_hidden !== date('Y-m-d'))
|
||||
include_once($member_skin_path.'/main_popup.skin.php');
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- 모든 팝업페이지 경로 -->
|
||||
<!-- main -->
|
||||
<div class="main">
|
||||
<ul class="pagination_main">
|
||||
<li><div class="page_01 page_on">Value of EG-BIM</div><span>01</span></li>
|
||||
<li><div class="page_02">Interface</div><span>02</span></li>
|
||||
<li><div class="page_03">Key Features</div><span>03</span></li>
|
||||
<li><div class="page_04">Drawing Management</div><span>04</span></li>
|
||||
<li><div class="page_05">for BIM</div><span>05</span></li>
|
||||
</ul>
|
||||
<div class="main_link">
|
||||
<a href="#01" class="main_link_01 link_on" onclick="location.href='<?php echo G5_BBS_URL ?>/value.php'"></a>
|
||||
<a href="#02" class="main_link_02" onclick="location.href='<?php echo G5_BBS_URL ?>/interface.php'"></a>
|
||||
<a href="#03" class="main_link_03" onclick="location.href='<?php echo G5_BBS_URL ?>/primary.php'"></a>
|
||||
<a href="#04" class="main_link_04" onclick="location.href='<?php echo G5_BBS_URL ?>/floorplan.php'"></a>
|
||||
<a href="#05" class="main_link_05" onclick="location.href='<?php echo G5_BBS_URL ?>/forbim.php'"></a>
|
||||
</div>
|
||||
<div class="bg_video">
|
||||
<video id="video_play" muted playsinline>
|
||||
<source src="<?php echo eng_img_url('main_1.mp4'); ?>" type="video/mp4" class="main_video_01">
|
||||
</video>
|
||||
</div>
|
||||
<!-- <button class="btn_top js__top" onclick="window.scrollTo(0,0);"><div class="arrow"></div></button> -->
|
||||
<!-- FOOTER -->
|
||||
<?php include_once($member_skin_path.'/main_footer.skin.php'); ?>
|
||||
<!-- //FOOTER -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="intro_wrap">
|
||||
<div class="intro_mask"></div>
|
||||
<div class="intro_txt">
|
||||
<div class="txt_mask"><span><b>Digital Transformation Era</b></span></div>
|
||||
<div class="txt_mask"><span><font class="egbim k">EG-BIM_software</font></span></div>
|
||||
<div class="txt_mask"><span><em>Drawings</em> & <em>3D Information Models</em> <br class="brk">in One Software</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
AOS.init();
|
||||
|
||||
const lenis = new Lenis()
|
||||
lenis.on('scroll', (e) => {
|
||||
// console.log(e)
|
||||
})
|
||||
lenis.on('scroll', ScrollTrigger.update)
|
||||
gsap.ticker.add((time)=>{
|
||||
lenis.raf(time * 1000)
|
||||
})
|
||||
gsap.ticker.lagSmoothing(0)
|
||||
</script>
|
||||
</body>
|
||||
<script>
|
||||
$(function(){
|
||||
// footer family site toggle
|
||||
$('.family_btn').click(function(e){
|
||||
e.stopPropagation();
|
||||
$('.family_list, .family_btn').toggleClass('family_on');
|
||||
});
|
||||
$(document).click(function(e){
|
||||
if(!$(e.target).closest('.family_wrap').length){
|
||||
$('.family_list, .family_btn').removeClass('family_on');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 회원 탈퇴
|
||||
function member_leave() {
|
||||
if (confirm("회원에서 탈퇴 하시겠습니까?"))
|
||||
location.href = '<?php echo G5_BBS_URL ?>/member_leave.php';
|
||||
}
|
||||
// 회원 탈퇴
|
||||
|
||||
|
||||
let x = document.cookie;
|
||||
if(x.includes("tmp_1=John")){
|
||||
deleteCookie("tmp_1");
|
||||
$('#pop_mypage02').show();
|
||||
}
|
||||
|
||||
function deleteCookie(name) {
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/bbs;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/faq;";
|
||||
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/eng/qa;";
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(';');
|
||||
for(let i = 0; i <ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//descope 로그인, 로그아웃 js
|
||||
function updateHeaderMenu() {
|
||||
var isLoggedIn = !!sessionStorage.getItem("sessionJwt");
|
||||
// role 체크 예시 (로그인 시 저장해놓은 값)
|
||||
var adminList = [
|
||||
'b24014@hanmaceng.co.kr',
|
||||
'kjy0426@hanmaceng.co.kr',
|
||||
'b23065@hanmaceng.co.kr',
|
||||
'b23008@baroncs.co.kr',
|
||||
'cjy627@hanmaceng.co.kr',
|
||||
'b23072@hanmaceng.co.kr'
|
||||
];
|
||||
|
||||
var loginId = sessionStorage.getItem('loginId') || '';
|
||||
var normalizedLoginId = loginId.toLowerCase();
|
||||
var isAdmin = adminList.includes(normalizedLoginId);
|
||||
|
||||
if ($('#hid_mb_id').length) {
|
||||
$('#hid_mb_id').val(isLoggedIn ? loginId : '');
|
||||
}
|
||||
|
||||
if (isLoggedIn) {
|
||||
$('.my_join2, .my_login2').show();
|
||||
$('.my_join, .my_login').hide();
|
||||
|
||||
// 마이페이지/관리자 메뉴 동적 출력
|
||||
if (isAdmin) {
|
||||
$('#my_join2').html("<a href='https://eg-bim.co.kr/eng/adm/index.php' target='_blank'>관리페이지</a>");
|
||||
} else {
|
||||
$('#my_join2').html("<a href='javascript:mypage03();'>My Page</a>");
|
||||
}
|
||||
} else {
|
||||
$('.my_join2, .my_login2').hide();
|
||||
$('.my_join, .my_login').show();
|
||||
$('#my_join2').html(""); // 혹시모를 내용 초기화
|
||||
}
|
||||
}
|
||||
|
||||
function descopeLogout() {
|
||||
fetch('/eng/skin/member/basic/descope_logout.php', {
|
||||
method: 'POST',
|
||||
credentials: 'include' // PHPSESSID 쿠키 전송
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error('서버 로그아웃 실패');
|
||||
// 1) 로컬 저장소 정리
|
||||
// sessionStorage.removeItem("refreshJwt");
|
||||
// sessionStorage.removeItem("sessionJwt");
|
||||
// sessionStorage.removeItem("userRole");
|
||||
// sessionStorage.removeItem("userName");
|
||||
// sessionStorage.removeItem("loginId");
|
||||
|
||||
sessionStorage.clear();
|
||||
localStorage.clear();
|
||||
// 2) UI 갱신
|
||||
updateHeaderMenu();
|
||||
window.dispatchEvent(new CustomEvent('descope-auth-changed', {
|
||||
detail: { loginId: '' }
|
||||
}));
|
||||
// 3) 로그인 페이지로 이동
|
||||
window.location.href = '/eng/index.php';
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
alert('로그아웃 중 오류가 발생했습니다.');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
// 기존에 있던 updateHeaderMenu() 호출 뒤에
|
||||
$('#my_login2 a').off('click').on('click', function(e){
|
||||
e.preventDefault();
|
||||
descopeLogout();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateHeaderMenu();
|
||||
// (필요하다면, 로그인 성공 후에도 항상 updateHeaderMenu(); 호출)
|
||||
});
|
||||
|
||||
//descope login
|
||||
$('#flogin button[type=submit]').click(function(e){
|
||||
e.preventDefault();
|
||||
let mb_id = $('#login_id').val();
|
||||
let mb_password = $('#login_pw').val();
|
||||
|
||||
$.ajax({
|
||||
url : '/eng/skin/member/basic/descope_login.php',
|
||||
data : {
|
||||
'mb_id' : mb_id,
|
||||
'mb_password' : mb_password
|
||||
},
|
||||
type : "POST",
|
||||
dataType : "json",
|
||||
success : function(res){
|
||||
if(res.status === "ok") {
|
||||
// 토큰 저장
|
||||
// sessionStorage.setItem("refreshJwt", res.refreshJwt);
|
||||
sessionStorage.setItem("sessionJwt", res.sessionJwt);
|
||||
|
||||
// ✅ 사용자 정보 저장
|
||||
if (res.user) {
|
||||
sessionStorage.setItem("loginId", res.user.loginIds?.[0] || '');
|
||||
sessionStorage.setItem("userName", res.user.name || '');
|
||||
sessionStorage.setItem("company", res.user.customAttributes?.company || '');
|
||||
sessionStorage.setItem("familyCompany", res.user.customAttributes?.familyCompany || '');
|
||||
sessionStorage.setItem("position", res.user.customAttributes?.position || '');
|
||||
sessionStorage.setItem("team", res.user.customAttributes?.team || '');
|
||||
sessionStorage.setItem("familyUniqueKey", res.user.customAttributes?.familyUniqueKey || '');
|
||||
sessionStorage.setItem("phone", res.user.phone || '');
|
||||
}
|
||||
|
||||
// ✅ 추가: 관리자 등 정보 저장
|
||||
if(res.user && res.user.roleNames && res.user.roleNames[0])
|
||||
sessionStorage.setItem("userRole", res.user.roleNames[0]);
|
||||
else
|
||||
sessionStorage.removeItem("userRole");
|
||||
|
||||
// ✅ 로그인 후 메뉴 갱신
|
||||
updateHeaderMenu();
|
||||
window.dispatchEvent(new CustomEvent('descope-auth-changed', {
|
||||
detail: {
|
||||
loginId: res.user?.loginIds?.[0] || '',
|
||||
user: res.user || null
|
||||
}
|
||||
}));
|
||||
|
||||
// UI 처리
|
||||
$('.popup_wrap').hide();
|
||||
$('body').css('overflow', '');
|
||||
lenis.start();
|
||||
// alert('로그인 하셨습니다.');
|
||||
} else {
|
||||
alert(res.message || "로그인 실패");
|
||||
|
||||
// 🔴 실패 횟수에 따라 안내 배너 교체
|
||||
if (res.failCount && res.failCount >= 8) {
|
||||
updateLoginBanner("fail");
|
||||
}
|
||||
}
|
||||
},
|
||||
error : function(err){
|
||||
alert(err.statusText || "통신 오류");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ 배너 교체 함수
|
||||
function updateLoginBanner(type = "default") {
|
||||
const $banner = $('#login_notice_banner');
|
||||
if (!$banner.length) return;
|
||||
|
||||
if (type === "default") {
|
||||
$banner.css({ background: "#063e01ff", color: "#fff" });
|
||||
$banner.find("strong").text("[로그인 시스템 변경 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
더 나은 보안을 위해 2025년 8월 8일부터 로그인 시스템이 변경되었습니다.<br>
|
||||
기존 회원 또한 신규 시스템에 맞춰 재가입을 진행해주시기 바랍니다.
|
||||
`);
|
||||
$banner.find("p:last").html(`※ 로그인 및 가입 관련 문의: <strong>010-8721-7453</strong>`);
|
||||
}
|
||||
|
||||
if (type === "fail") {
|
||||
$banner.css({ background: "#6a0202ff", color: "#faf6f6ff" });
|
||||
$banner.find("strong").text("[로그인 시도 제한 안내]");
|
||||
$banner.find("p.left").html(`
|
||||
비밀번호 입력을 <strong>7회 이상 연속 실패</strong>하셨습니다.<br>
|
||||
<strong>8번째 시도부터 3분 대기</strong>가 적용됩니다.<br>
|
||||
10회 이상 실패 시 계정이 잠금 처리됩니다.
|
||||
`);
|
||||
$banner.find("p:last").text("");
|
||||
}
|
||||
}
|
||||
|
||||
//회원가입 약관동의
|
||||
// $('#fregister button[type=submit]').click(function(e){
|
||||
// e.preventDefault();
|
||||
// let agree11 = $('#agree11').val();
|
||||
// let agree21 = $('#agree21').val();
|
||||
// $.ajax({
|
||||
// url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
// type : "POST",
|
||||
// datatype : "json",
|
||||
// contentType: 'application/json; charset=utf-8',
|
||||
// data : {
|
||||
// 'agree11' : agree11,
|
||||
// 'agree21' : agree21
|
||||
// },
|
||||
// success : function(data){
|
||||
// var ss='';
|
||||
// for(i=0; i<data.length; i++){
|
||||
// ss=ss + data[i];
|
||||
// }
|
||||
// },
|
||||
// error : function(err){
|
||||
// alert(err);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// 회원가입 약관동의 (중복 바인딩 방지용 네임스페이스 사용)
|
||||
// $('#fregister button[type=submit]').off('click.agree').on('click.agree', function (e) {
|
||||
// e.preventDefault();
|
||||
|
||||
// // ① 체크 여부는 is(':checked') 로 판단
|
||||
// var agree1 = $('#agree11').is(':checked');
|
||||
// var agree2 = $('#agree21').is(':checked');
|
||||
|
||||
// if (!(agree1 && agree2)) {
|
||||
// alert('약관에 모두 동의해주세요.');
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// // ② 둘 다 체크되어 있으면 서버로 넘길 값 만들기
|
||||
// // (PHP register_form.php에서 $_POST['agree'], $_POST['agree2']로 받게)
|
||||
// $.ajax({
|
||||
// url: '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
// type: 'POST',
|
||||
// dataType: 'html', // or 'json' (서버 응답 형식에 맞게)
|
||||
// // contentType/processData 기본값 유지 ← JSON 전송 아니면 이게 맞습니다.
|
||||
// data: {
|
||||
// agree: 1,
|
||||
// agree2: 1
|
||||
// },
|
||||
// success: function (data) {
|
||||
// // 통과 시 다음 화면으로 전환
|
||||
// $('#pop_agreement').hide();
|
||||
// $('#pop_register_form').show(); // 실제 다음 팝업 ID에 맞춰 수정
|
||||
// $('body').css('overflow', 'hidden');
|
||||
// },
|
||||
// error: function (xhr) {
|
||||
// alert('처리 중 오류가 발생했습니다.\n다시 시도해주세요.');
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// $(document).ready(function() {
|
||||
|
||||
// // 기존에 바인딩된 거 있으면 제거 (중복 방지)
|
||||
// $('#fregister button[type=submit], #btn_agree').off('click.agree');
|
||||
|
||||
// $('#fregister button[type=submit], #btn_agree').on('click.agree', function(e){
|
||||
// e.preventDefault();
|
||||
// e.stopPropagation();
|
||||
// e.stopImmediatePropagation();
|
||||
|
||||
// // 체크 여부는 반드시 :checked 로 확인해야 함
|
||||
// var a1 = $('#agree11').is(':checked');
|
||||
// var a2 = $('#agree21').is(':checked');
|
||||
|
||||
// if (!(a1 && a2)) {
|
||||
// alert('약관에 모두 동의해주세요.');
|
||||
// return false; // 진행 막기
|
||||
// }
|
||||
|
||||
// // === 여기부터는 통과 시 동작(필요 없으면 주석 처리 가능) ===
|
||||
// // AJAX 그대로 유지하되, 실제 동작하려면 서버가 받는 파라미터명에 맞추세요.
|
||||
// // 서버 기본 로직은 보통 'agree', 'agree2'를 받습니다.
|
||||
// $.ajax({
|
||||
// url : '<?php echo G5_URL ?>/bbs/register_form.php',
|
||||
// type : 'POST',
|
||||
// dataType : 'json',
|
||||
// // contentType 은 JSON 전송할 때만 쓰세요. 지금은 기본 폼 인코딩으로 보냅니다.
|
||||
// // contentType: 'application/json; charset=utf-8',
|
||||
// data : {
|
||||
// 'agree' : a1 ? 1 : 0, // 서버가 'agree' 로 받는 경우
|
||||
// 'agree2' : a2 ? 1 : 0
|
||||
// },
|
||||
// success : function(data){
|
||||
// // 필요 시 다음 단계 이동
|
||||
// // $('#pop_agreement').hide();
|
||||
// // $('#pop_register_form').show();
|
||||
// // $('body').css('overflow','hidden');
|
||||
// },
|
||||
// error : function(err){
|
||||
// alert('오류가 발생했습니다. 잠시 후 다시 시도해주세요.');
|
||||
// console.error(err);
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
|
||||
|
||||
|
||||
//이지빔 프로그램 회원가입 url 쿼리스트링 파싱 함수
|
||||
function getQueryString(name) {
|
||||
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(name);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
const popupParam = getQueryString('popup');
|
||||
|
||||
if (popupParam === 'signup') {
|
||||
console.log('쿼리 감지: signup → 회원가입 팝업 자동 오픈 시도');
|
||||
//251013 위치 이동
|
||||
const intro = document.querySelector('.intro_wrap');
|
||||
intro.style.display = "none";
|
||||
const mainMask = document.querySelector('.main_mask');
|
||||
mainMask.classList.add('skip');
|
||||
// mainMask.style.aimation = 'none';
|
||||
//251013 위치 이동 END
|
||||
$('#pop_agreement').show(); // 팝업 보여주기
|
||||
|
||||
// 스크롤 잠금 (사용 중이면)
|
||||
$('body').css('overflow', 'hidden');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업 닫기 버튼 이벤트 연결
|
||||
$('#pop_agreement .btn_close').on('click', function() {
|
||||
$('#pop_agreement').hide();
|
||||
$('body').css('overflow', '');
|
||||
if (typeof lenis !== 'undefined') {
|
||||
lenis.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//이지빔 프로그램 비밀번호 재설정 url 쿼리스트링 파싱 함수
|
||||
$(document).ready(function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const popup = urlParams.get('popup');
|
||||
const token = urlParams.get('t');
|
||||
|
||||
if (popup === 'pwreset') {
|
||||
// 팝업 전체 열기
|
||||
$('#pop_search').show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
|
||||
// 내부 컨텐츠 모두 숨기기
|
||||
$('#pop_search .popup_contents_wrap').hide();
|
||||
|
||||
if (token) {
|
||||
// 토큰이 있으면 비밀번호 재설정 단계
|
||||
if (!sessionStorage.getItem('pwreset_shown')) {
|
||||
$('#password_reset').show();
|
||||
sessionStorage.setItem('pwreset_shown', '1');
|
||||
}
|
||||
} else {
|
||||
// 토큰이 없으면 아이디 입력 단계 (첫 번째 .popup_contents_wrap)
|
||||
$('#pop_search .popup_contents_wrap').first().show();
|
||||
}
|
||||
}
|
||||
|
||||
// 닫기 버튼
|
||||
$('#pop_search .btn_close').on('click', function() {
|
||||
$('#pop_search').hide();
|
||||
$('body').css('overflow', '');
|
||||
});
|
||||
});
|
||||
|
||||
//로그인 팝업창 쿼리스트링
|
||||
document.addEventListener("DOMContentLoaded", function(){
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
if (urlParams.get("popup") === "login") {
|
||||
const $popup = $("#pop_login");
|
||||
if ($popup.length) {
|
||||
$popup.show();
|
||||
|
||||
// ✅ 배너가 없으면 붙이기
|
||||
if (!$("#login_notice_banner").length) {
|
||||
const bannerHtml = `
|
||||
<div id="login_notice_banner" class="login-notice-banner" style="
|
||||
background:#0f3a2f;color:#fff;border-radius:12px;padding:14px 44px 14px 14px;
|
||||
position:relative;margin:0 0 12px 0;line-height:1.6;word-break:keep-all;">
|
||||
<button type="button" class="lnb-close" aria-label="닫기" style="
|
||||
position:absolute;right:10px;top:8px;background:transparent;border:0;
|
||||
color:#fff;font-size:20px;cursor:pointer;">×</button>
|
||||
<strong style="display:block;margin-bottom:6px;">[로그인 시스템 변경 안내]</strong>
|
||||
<p class="left" style="margin:0 0 6px;">
|
||||
더 나은 보안을 위해 2025년 8월 8일부터
|
||||
로그인 시스템이 변경되었습니다.
|
||||
기존 회원 또한 신규 시스템에 맞춰<br>
|
||||
재가입을 진행해주시기 바랍니다.
|
||||
</p>
|
||||
<p style="margin:0;">※ 로그인 및 가입 관련 문의: <strong>02-2141-7434</strong></p>
|
||||
</div>
|
||||
`;
|
||||
$("#pop_login .popup_contents_wrap").prepend(bannerHtml);
|
||||
|
||||
// 닫기 버튼 동작
|
||||
$("#login_notice_banner .lnb-close").on("click", function(){
|
||||
$("#login_notice_banner").fadeOut(120);
|
||||
});
|
||||
} else {
|
||||
$("#login_notice_banner").show();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
// //공지사항 팝업 스크립트
|
||||
// (function(){
|
||||
// const KEY = 'egbim_notice_2025-08-07'; // 키 바꾸면 전체 사용자에게 다시 노출
|
||||
// const dim = document.getElementById('egbimNoticeDim');
|
||||
// const box = document.getElementById('egbimNoticeBox');
|
||||
// const btnX = document.getElementById('egbimNoticeClose');
|
||||
// const btnOk = document.getElementById('egbimNoticeOk');
|
||||
// const btnToday = document.getElementById('egbimNoticeToday');
|
||||
|
||||
// function todayStr(){
|
||||
// const d = new Date(); return d.toISOString().slice(0,10);
|
||||
// }
|
||||
// function shouldShow(){
|
||||
// const v = localStorage.getItem(KEY);
|
||||
// // 항상 띄우고 싶으면 다음 줄을 `return true;` 로 바꾸세요.
|
||||
// return v !== todayStr();
|
||||
// }
|
||||
// function openNotice(){
|
||||
// dim.style.display = 'block';
|
||||
// box.style.display = 'block';
|
||||
// document.body.style.overflow = 'hidden';
|
||||
// if (typeof lenis !== 'undefined') try{ lenis.stop(); }catch(_){}
|
||||
// }
|
||||
// function closeNotice(storeToday){
|
||||
// if (storeToday) localStorage.setItem(KEY, todayStr());
|
||||
// dim.style.display = 'none';
|
||||
// box.style.display = 'none';
|
||||
// document.body.style.overflow = '';
|
||||
// if (typeof lenis !== 'undefined') try{ lenis.start(); }catch(_){}
|
||||
// }
|
||||
|
||||
// btnOk.addEventListener('click', () => closeNotice(true)); // 확인 누르면 오늘은 다시 안봄
|
||||
// btnToday.addEventListener('click', () => closeNotice(true)); // 오늘 하루 보지 않기
|
||||
// btnX.addEventListener('click', () => closeNotice(true));
|
||||
// dim.addEventListener('click', () => closeNotice(true));
|
||||
|
||||
// document.addEventListener('DOMContentLoaded', () => {
|
||||
// if (shouldShow()) openNotice();
|
||||
// });
|
||||
// })();
|
||||
|
||||
|
||||
/* 메인 마우스 클릭 문구 */
|
||||
if (window.location.pathname === '/eng/index.php' || window.location.pathname === '/eng/' || window.location.pathname === '/eng') {
|
||||
|
||||
// 커서 따라다니는 텍스트 요소 생성
|
||||
const cursorText = document.createElement('div');
|
||||
cursorText.className = 'cursor-text';
|
||||
cursorText.textContent = 'Click!';
|
||||
cursorText.style.cssText = `
|
||||
position: fixed;
|
||||
pointer-events: none;
|
||||
z-index: 9999;
|
||||
font-size: 20px;
|
||||
color: #fff;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
transform: translate(-0%, -50%);
|
||||
transition: opacity 0.3s;
|
||||
`;
|
||||
document.body.appendChild(cursorText);
|
||||
|
||||
// 마우스 움직임 추적
|
||||
document.addEventListener('mousemove', (e) => {
|
||||
// 마우스 위치의 요소 확인
|
||||
const elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);
|
||||
|
||||
// footer 또는 .popup_wrap 영역인지 확인
|
||||
const isInFooter = elementUnderMouse?.closest('footer');
|
||||
const isInPopup = elementUnderMouse?.closest('.popup_wrap');
|
||||
const isInFloating = elementUnderMouse?.closest('.floating_menu');
|
||||
const isInPagination = elementUnderMouse?.closest('.pagination_main');
|
||||
const isInHeader = elementUnderMouse?.closest('.js__header');
|
||||
const isInSitemap = elementUnderMouse?.closest('.popup_sitemap');
|
||||
|
||||
|
||||
// footer나 popup 영역이면 숨김
|
||||
if (isInFooter || isInPopup || isInFloating || isInPagination || isInHeader || isInSitemap) {
|
||||
cursorText.style.opacity = '0';
|
||||
} else {
|
||||
cursorText.style.opacity = '1';
|
||||
// 커서 오른쪽 아래에 위치
|
||||
cursorText.style.left = (e.clientX + 15) + 'px';
|
||||
cursorText.style.top = (e.clientY + 15) + 'px';
|
||||
}
|
||||
});
|
||||
|
||||
// 마우스가 페이지를 벗어나면 숨김
|
||||
document.addEventListener('mouseleave', () => {
|
||||
cursorText.style.opacity = '0';
|
||||
});
|
||||
|
||||
document.addEventListener('mouseenter', () => {
|
||||
cursorText.style.opacity = '1';
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php include_once __DIR__ . '/asset_urls.php'; ?>
|
||||
|
||||
<button class="btn_top js__top" onclick="window.scrollTo(0,0);"><div class="arrow"></div></button>
|
||||
|
||||
<footer class="footer_off">
|
||||
<div class="footer_close"></div>
|
||||
<div class="footer_wrap">
|
||||
<div class="comp_info">
|
||||
<img class="logo_baron" src="<?php echo eng_img_url('baron_logo_eng.svg'); ?>" alt="">
|
||||
<span class="ceo">CEO <em>Jang Jong Chan</em></span>
|
||||
</div>
|
||||
<div class="comp_inner">
|
||||
<span class="btn_privacy"><a href="javascript:privacy('privacy');"><em>Privacy Policy</em></a><a href="javascript:privacy('agreement');">Terms of Service</a></span>
|
||||
<div class="comp_contact">
|
||||
<ul class="footer_menu">
|
||||
<li><a href="<?php echo G5_BBS_URL ?>/value.php">Value of EG-BIM</a></li>
|
||||
<li><a href="<?php echo G5_BBS_URL ?>/interface.php">Interface</a></li>
|
||||
<li><a href="<?php echo G5_BBS_URL ?>/primary.php">Key Features</a></li>
|
||||
<li><a href="<?php echo G5_BBS_URL ?>/floorplan.php">Drawing Management</a></li>
|
||||
<li><a href="<?php echo G5_BBS_URL ?>/forbim.php">for BIM</a></li>
|
||||
</ul>
|
||||
<div class="footer_sitemap">
|
||||
<!-- <span>TOVA의 <em>다양한 소식</em>을 만나보세요</span>
|
||||
<div class="tova_sns">
|
||||
<a href="https://cafe.naver.com/imtas" class="tova_cafe"><img src="<?php echo G5_URL ?>/img/ico_cafe.svg" alt=""></a>
|
||||
<a href="" class="tova_facebook"><img src="<?php echo G5_URL ?>/img/ico_facebook.svg" alt=""></a>
|
||||
</div>-->
|
||||
<div class="family_wrap">
|
||||
<div class="family_btn"><span>Family Site</span><i></i></div>
|
||||
<ul class="family_list">
|
||||
<li><a href="http://k-tova.com/eng/" target="_blank">TOVA</a></li>
|
||||
<li><a href="http://k-gaia.co.kr/eng/" target="_blank">GAIA</a></li>
|
||||
<!--li>바론컨설턴트(준비중)</li-->
|
||||
<!-- <li><a href="http://baroncs.co.kr" target="_blank">바론컨설턴트</a></li> -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="address">554, Ogeum-ro, Songpa-gu, Seoul, Republic of Korea<br class="brk"> <em class="tel">Tel : +82-2-2141-7434</em></span>
|
||||
<span class="copyright">© BARON Consultants Co,.Ltd All Rights Reserved.</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
<?php
|
||||
include_once __DIR__ . '/asset_urls.php';
|
||||
// include_once $_SERVER['DOCUMENT_ROOT']."/egbim/skin/member/basic/descope_session.php";
|
||||
// 디버깅용 출력
|
||||
echo "<!-- isAdmin = " . (isset($isAdmin) ? ($isAdmin ? "true" : "false") : "unset") . " -->";
|
||||
|
||||
// ✅ DB 연결
|
||||
$pdo = new PDO("mysql:host=db;dbname=egbim;charset=utf8mb4", "egbim", "baron3840!!", [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
]);
|
||||
|
||||
// ✅ EG-BIM (product_code=8) 기준 최신 external_version 가져오기
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT external_version
|
||||
FROM deploy_versions
|
||||
WHERE product_code = 1
|
||||
ORDER BY updated_at DESC
|
||||
LIMIT 1
|
||||
");
|
||||
$stmt->execute();
|
||||
$version = $stmt->fetchColumn() ?: '1.0.0'; // fallback
|
||||
|
||||
// ✅ 다운로드 URL 자동 생성
|
||||
$download_url = "https://release-download.hmac.kr/eg-bim/{$version}/setup_eg-bim_{$version}.exe";
|
||||
?>
|
||||
<header class="js__header">
|
||||
<h1><a href="/eng/index.php"></a></h1>
|
||||
|
||||
<!-- ✅ 사용자 관리 아이콘 (관리자 전용, 기본 숨김) -->
|
||||
<div id="userListBtnWrap" class="menu_userlist" style="display:none;">
|
||||
<a href="/eng/skin/member/basic/descope_user_list_skin_w3.php">
|
||||
<img src="<?php echo eng_img_url('ico_userlist.svg'); ?>" alt="사용자 관리">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="language">
|
||||
<a href="/egbim/">KR</a>
|
||||
<a href="#" class="on">EN</a>
|
||||
</div>
|
||||
|
||||
<!-- ✅ 업로드 아이콘 (관리자 전용, 기본 숨김) -->
|
||||
<div id="uploadBtnWrap" class="menu_upload" style="display:none;">
|
||||
<a href="/eng/sw_upload/upload_page.php">
|
||||
<img src="<?php echo eng_img_url('ico_upload.svg'); ?>" alt="업로드">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="menu_my">
|
||||
<img src="<?php echo eng_img_url('ico_my.svg'); ?>" alt="">
|
||||
<ul class="menu_my_list" style="display: none;">
|
||||
<li id="my_join2" class="my_join2">
|
||||
<!-- JS에서 "마이페이지" or "관리페이지" 링크를 넣어줌 -->
|
||||
</li>
|
||||
<li id="my_login2" class="my_login2">
|
||||
<a href="javascript:descopeLogout();">Logout</a>
|
||||
</li>
|
||||
<li id="my_join" class="my_join">
|
||||
<a href="javascript:agreement();">Sign up</a>
|
||||
</li>
|
||||
<li id="my_login" class="my_login">
|
||||
<a href="javascript:login();">Login</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="menu_ham"><a href="javascript:sitemap();"><div></div><div></div><div></div></a></div>
|
||||
</header>
|
||||
<!-- floating_menu -->
|
||||
<div class="floating_menu">
|
||||
<ul>
|
||||
<li class="floating_faq"><a href="/eng/bbs/descope_qa_list.php">
|
||||
<i></i>
|
||||
<span>Q&A</span>
|
||||
</a></li>
|
||||
<li class="floating_guide"><a href="https://baron-consultant.github.io/eg-bim_guide\help" target="_blank">
|
||||
<i></i>
|
||||
<span>Guide</span>
|
||||
</a></li>
|
||||
<li class="floating_download">
|
||||
<a href="<?= htmlspecialchars($download_url) ?>">
|
||||
<i></i>
|
||||
<span>Download</span>
|
||||
</a></li>
|
||||
<li class="floating_buy"><a href="/eng/bbs/buy.php">
|
||||
<i></i>
|
||||
<span>Contact</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- //floating_menu -->
|
||||
|
||||
<script>
|
||||
// 다운로드 버튼 안내
|
||||
// $(document).on('click', '.floating_download a', function (e) {
|
||||
// e.preventDefault(); // 링크 이동 막기
|
||||
// alert('다운로드 기능은 준비중입니다.');
|
||||
// });
|
||||
</script>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
const ADMIN_ICON_IDS = [
|
||||
'b24014@hanmaceng.co.kr',
|
||||
'kjy0426@hanmaceng.co.kr',
|
||||
'b23065@hanmaceng.co.kr',
|
||||
'shyeom1@samaneng.com',
|
||||
'cjy627@hanmaceng.co.kr',
|
||||
'b23072@hanmaceng.co.kr',
|
||||
'b23018@hanmaceng.co.kr',
|
||||
'm20331@hanmaceng.co.kr',
|
||||
'cozyjin@hanmaceng.co.kr',
|
||||
'm24031@hanmaceng.co.kr',
|
||||
'b24051@hanmaceng.co.kr',
|
||||
'rmsgud1202@hanmaceng.co.kr',
|
||||
'm21318@hanmaceng.co.kr',
|
||||
'b21367@hanmaceng.co.kr',
|
||||
'b25023@hanmaceng.co.kr',
|
||||
'sdi9429@naver.com',
|
||||
'junsuy@hanmail.net',
|
||||
'ilphilo92@gmail.com'
|
||||
];
|
||||
|
||||
function normalizeLoginId(loginId) {
|
||||
return String(loginId || '').trim().toLowerCase();
|
||||
}
|
||||
|
||||
function isAdminLoginId(loginId) {
|
||||
return ADMIN_ICON_IDS.includes(normalizeLoginId(loginId));
|
||||
}
|
||||
|
||||
function applyAdminIconVisibility(loginId) {
|
||||
const visible = isAdminLoginId(loginId || sessionStorage.getItem('loginId'));
|
||||
$('#uploadBtnWrap').toggle(visible);
|
||||
$('#userListBtnWrap').toggle(visible);
|
||||
}
|
||||
|
||||
// 공지 HTML (닫기 가능 / 입력 방해 X)
|
||||
const bannerHtml = `
|
||||
<div id="login_notice_banner" class="login-notice-banner" style="
|
||||
background:#0f3a2f;color:#fff;border-radius:12px;padding:14px 44px 14px 14px;
|
||||
position:relative;margin:0 0 12px 0;line-height:1.6;word-break:keep-all;">
|
||||
<button type="button" class="lnb-close" aria-label="Close" style="
|
||||
position:absolute;right:10px;top:8px;background:transparent;border:0;
|
||||
color:#fff;font-size:20px;cursor:pointer;">×</button>
|
||||
<strong style="display:block;margin-bottom:6px;">[Login System Notice]</strong>
|
||||
<p class="left" style="margin:0 0 6px;">
|
||||
For improved security, the login system changed on August 8, 2025.<br>
|
||||
Existing users also need to sign up again in the new system.
|
||||
</p>
|
||||
<p style="margin:0;">Support: <strong>+82-2-2141-7434</strong></p>
|
||||
</div>
|
||||
`;
|
||||
|
||||
function injectBanner() {
|
||||
const $wrap = $('#pop_login .popup_contents_wrap');
|
||||
if (!$wrap.length) return false;
|
||||
|
||||
if (!$('#login_notice_banner').length) {
|
||||
$wrap.prepend(bannerHtml);
|
||||
// 닫기 버튼
|
||||
$('#login_notice_banner .lnb-close').on('click', function () {
|
||||
$('#login_notice_banner').fadeOut(120);
|
||||
});
|
||||
} else {
|
||||
$('#login_notice_banner').show();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 로그인 메뉴 클릭 → 기존 login() 실행 + 배너 주입(팝업 DOM 뜰 때까지 재시도)
|
||||
$(document).on('click', '#my_login a, .my_login a', function (e) {
|
||||
e.preventDefault();
|
||||
if (typeof login === 'function') login();
|
||||
|
||||
let tries = 0;
|
||||
const maxTries = 20; // 1초 정도 재시도(50ms*20)
|
||||
const iv = setInterval(() => {
|
||||
tries++;
|
||||
if (injectBanner() || tries >= maxTries) clearInterval(iv);
|
||||
}, 50);
|
||||
});
|
||||
|
||||
// 혹시 로그인 팝업을 다른 곳에서 열어도 배너가 필요하면, 팝업 열릴 때 한 번 더 시도
|
||||
$(document).on('show-login-popup', function () {
|
||||
injectBanner();
|
||||
});
|
||||
$(function () {
|
||||
applyAdminIconVisibility();
|
||||
});
|
||||
|
||||
window.addEventListener('storage', function (e) {
|
||||
if (e.key === 'loginId') {
|
||||
applyAdminIconVisibility(e.newValue || '');
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('descope-auth-changed', function (e) {
|
||||
applyAdminIconVisibility(e.detail?.loginId || '');
|
||||
});
|
||||
|
||||
let checkCount = 0;
|
||||
const checkInterval = setInterval(function () {
|
||||
checkCount += 1;
|
||||
const loginId = sessionStorage.getItem('loginId') || '';
|
||||
if (loginId || checkCount >= 20) {
|
||||
applyAdminIconVisibility(loginId);
|
||||
clearInterval(checkInterval);
|
||||
}
|
||||
}, 300);
|
||||
})();
|
||||
</script>
|
||||
@@ -0,0 +1,270 @@
|
||||
<!--popup_wrap-->
|
||||
<div id="pop_noti" class="popup_wrap popup-notice" style="display:none">
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/8.4.7/swiper-bundle.min.css"
|
||||
/>
|
||||
<!--popup_in-->
|
||||
<div class="popup_in">
|
||||
<span class="border-effect"></span>
|
||||
<div class="popup_container notice">
|
||||
<style>
|
||||
|
||||
.popup-notice a.link {
|
||||
cursor: pointer;
|
||||
}
|
||||
.popup-notice .swiper-wrapper {
|
||||
height: auto !important;
|
||||
}
|
||||
.popup_container.notice img {
|
||||
max-width: 420px;
|
||||
}
|
||||
.popup-notice .swiper-pagination {
|
||||
width: auto;
|
||||
right: 8px;
|
||||
left: auto;
|
||||
padding: 4px 12px;
|
||||
border-radius: 25px;
|
||||
background: rgba(255,255,255,0.6);
|
||||
font-size:14px
|
||||
}
|
||||
.popup-notice .popupSwiper {
|
||||
max-width: 420px; /* 기본: 1280px 미만 */
|
||||
}
|
||||
|
||||
/* PC */
|
||||
@media (min-width: 1280px) {
|
||||
.popup-notice .popupSwiper {
|
||||
max-width:900px;
|
||||
}
|
||||
.popup-notice .swiper-slide:nth-child(2n) {
|
||||
position: relative;
|
||||
|
||||
}
|
||||
.popup-notice .swiper-slide:nth-child(2n):before {
|
||||
content:" ";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top:0;
|
||||
width: 1px;height: 100%;
|
||||
background:#9E958F;
|
||||
}
|
||||
.popup-notice .swiper-slide {
|
||||
min-width: 450px;
|
||||
height: 598px;
|
||||
}
|
||||
.popup_container.notice img {
|
||||
max-width: 450px;
|
||||
}
|
||||
.popup-notice .swiper-pagination {
|
||||
display:none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 721px) {
|
||||
.popup_wrap.popup-notice .popup_in ,
|
||||
.popup_container.notice img,
|
||||
.popup_container.notice img {
|
||||
max-width: 320px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="pop-content" >
|
||||
<div class="swiper popupSwiper">
|
||||
<div class="swiper-wrapper">
|
||||
|
||||
<?php
|
||||
// 오늘 날짜 (Y-m-d 형식)
|
||||
$main_today = date('Y-m-d');
|
||||
|
||||
// 시작일과 종료일
|
||||
$mainpop_startDate = '2025-12-01';
|
||||
$mainpop_endDate = '2025-12-31';
|
||||
// 기간 내에 있으면 배너 표시
|
||||
if ($main_today >= $mainpop_startDate && $main_today <= $mainpop_endDate) {
|
||||
?>
|
||||
<!-- 슬라이드 1 -->
|
||||
<div class="swiper-slide">
|
||||
<a class="link" href="http://www.ggherald.com/default/index_view_page.php?part_idx=119&idx=74819" target="_blank" alt="‘경기헤럴드’ 기사 전문 바로가기">
|
||||
<picture>
|
||||
<source
|
||||
media="(max-width: 721px)"
|
||||
srcset="./img/main_popup/251128_main_popup_m.png?251223"
|
||||
/>
|
||||
<img
|
||||
src="./img/main_popup/251128_main_popup.png"
|
||||
alt="EG-BIM X 의왕도시공사 민관 상호 협력 성장 지원을 위한 업무 협약 체결"
|
||||
/>
|
||||
</picture>
|
||||
</a>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<!-- 슬라이드 2 -->
|
||||
<div class="swiper-slide">
|
||||
<picture>
|
||||
<source
|
||||
media="(max-width: 721px)"
|
||||
srcset="./img/main_popup/251223_main_popup_m.png?251223"
|
||||
/>
|
||||
<img
|
||||
src="./img/main_popup/251223_main_popup.png"
|
||||
alt="EG-BIM X 베트남 Nam Can Tho University "
|
||||
/>
|
||||
</picture>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 페이지네이션 -->
|
||||
<div class="swiper-pagination"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-wrap">
|
||||
<button id="todayClose" type="button">Don’t show again today</button>
|
||||
<button id="popupClose" type="button">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--//popup_in-->
|
||||
</div>
|
||||
<!--//popup_wrap-->
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/8.4.7/swiper-bundle.min.js"></script>
|
||||
<script>
|
||||
(function() {
|
||||
// 쿠키 읽기 함수
|
||||
function getCookie(name) {
|
||||
var value = "; " + document.cookie;
|
||||
var parts = value.split("; " + name + "=");
|
||||
if (parts.length === 2) return parts.pop().split(";").shift();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// 페이지 로드시 쿠키 확인
|
||||
var hidePopup = getCookie("hide_popup");
|
||||
var today = new Date().toISOString().split('T')[0];
|
||||
|
||||
var popup = document.getElementById("pop_noti");
|
||||
if (!popup) return;
|
||||
|
||||
// 오늘 날짜와 쿠키 날짜가 같으면 팝업 숨김
|
||||
if (hidePopup === today) {
|
||||
popup.style.display = "none";
|
||||
} else {
|
||||
popup.style.display = "block";
|
||||
}
|
||||
|
||||
// 팝업 외부 클릭 시 닫기
|
||||
popup.onclick = function(e) {
|
||||
if (e.target === popup) {
|
||||
popup.style.display = "none";
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// 닫기 버튼
|
||||
var closeBtn = document.getElementById("popupClose");
|
||||
if (closeBtn) {
|
||||
closeBtn.onclick = function() {
|
||||
popup.style.display = "none";
|
||||
};
|
||||
}
|
||||
|
||||
// 오늘 하루 보지 않기 버튼
|
||||
var todayChk = document.getElementById("todayClose");
|
||||
if (todayChk) {
|
||||
todayChk.onclick = function() {
|
||||
var today = new Date();
|
||||
var expire = new Date();
|
||||
expire.setHours(23, 59, 59, 999);
|
||||
document.cookie = "hide_popup=" + today.toISOString().split('T')[0] + "; path=/; expires=" + expire.toUTCString();
|
||||
popup.style.display = "none";
|
||||
};
|
||||
}
|
||||
|
||||
let swiper = null;
|
||||
let resizeTimer = null;
|
||||
let currentMode = window.innerWidth >= 1280 ? 'pc' : 'mo';
|
||||
|
||||
function initSwiper() {
|
||||
const slideCount = document.querySelectorAll(
|
||||
'.popupSwiper .swiper-slide'
|
||||
).length;
|
||||
|
||||
const isSingleSlide = slideCount <= 1;
|
||||
const isPC = window.innerWidth >= 1280;
|
||||
|
||||
swiper = new Swiper('.popupSwiper', {
|
||||
speed: 600,
|
||||
watchOverflow: true,
|
||||
|
||||
slidesPerView: isSingleSlide ? 1 : (isPC ? 2 : 1),
|
||||
slidesPerGroup: isSingleSlide ? 1 : (isPC ? 2 : 1),
|
||||
|
||||
loop: false, // ⭐ loop 고정 (중요)
|
||||
allowTouchMove: !isPC,
|
||||
|
||||
observer: true,
|
||||
observeParents: true,
|
||||
updateOnWindowResize: false,
|
||||
|
||||
pagination: {
|
||||
el: '.swiper-pagination',
|
||||
type: 'fraction',
|
||||
},
|
||||
|
||||
on: {
|
||||
init(swiper) {
|
||||
// single slide면 pagination 숨김
|
||||
if (isSingleSlide && swiper.pagination?.el) {
|
||||
swiper.pagination.el.style.display = 'none';
|
||||
} else if (swiper.pagination?.el) {
|
||||
swiper.pagination.el.style.display = isPC ? 'none' : 'block';
|
||||
}
|
||||
},
|
||||
|
||||
// fraction NaN 방어
|
||||
paginationUpdate(swiper, el) {
|
||||
if (el && el.textContent.includes('NaN')) {
|
||||
swiper.slideTo(0, 0, false);
|
||||
swiper.update();
|
||||
|
||||
requestAnimationFrame(() => {
|
||||
swiper.pagination.render();
|
||||
swiper.pagination.update();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 최초 실행
|
||||
initSwiper();
|
||||
|
||||
// PC ↔ MO 경계 통과 시에만 재생성
|
||||
window.addEventListener('resize', function () {
|
||||
clearTimeout(resizeTimer);
|
||||
|
||||
resizeTimer = setTimeout(() => {
|
||||
const newMode = window.innerWidth >= 1280 ? 'pc' : 'mo';
|
||||
|
||||
if (newMode !== currentMode) {
|
||||
currentMode = newMode;
|
||||
|
||||
if (swiper) {
|
||||
swiper.destroy(true, true);
|
||||
swiper = null;
|
||||
}
|
||||
|
||||
initSwiper();
|
||||
}
|
||||
}, 200);
|
||||
});
|
||||
|
||||
})();
|
||||
</script>
|
||||
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $member_skin_url . '/style.css">', 0);
|
||||
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
|
||||
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
|
||||
?>
|
||||
<!-- 기존 회원 본인인증 시작 { -->
|
||||
<div class="member_cert_refresh">
|
||||
<form name="fcertrefreshform" id="member_cert_refresh" action="<?php echo $action_url ?>" onsubmit="return fcertrefreshform_submit(this);" method="POST" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="url" value="<?php echo $urlencode ?>">
|
||||
<input type="hidden" name="cert_type" value="<?php echo $member['mb_certify']; ?>">
|
||||
<input type="hidden" name="mb_id" value="<?php echo $member['mb_id']; ?>">
|
||||
<input type="hidden" name="mb_hp" value="<?php echo $member['mb_hp']; ?>">
|
||||
<input type="hidden" name="mb_name" value="<?php echo $member['mb_name']; ?>">
|
||||
<input type="hidden" name="cert_no" value="">
|
||||
<section id="member_cert_refresh_private">
|
||||
<h2>(필수) 추가 개인정보처리방침 안내</h2>
|
||||
<div>
|
||||
<div class="tbl_head01 tbl_wrap">
|
||||
<table>
|
||||
<caption>추가 개인정보처리방침 안내</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>목적</th>
|
||||
<th>항목</th>
|
||||
<th>보유기간</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>이용자 식별 및 본인여부 확인</td>
|
||||
<td>생년월일<?php echo (empty($member['mb_dupinfo']))? ", 휴대폰 번호(아이핀 제외)" : ""; ?>, 암호화된 개인식별부호(CI)</td>
|
||||
<td>회원 탈퇴 시까지</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<fieldset class="member_cert_refresh_agree">
|
||||
<input type="checkbox" name="agree2" value="1" id="agree21" class="selec_chk">
|
||||
<label for="agree21"><span></span><b class="sound_only">추가 개인정보처리방침에 동의합니다.</b></label>
|
||||
</fieldset>
|
||||
</section>
|
||||
|
||||
<section id="find_info" class="new_win">
|
||||
<h2>인증수단 선택하기</h2>
|
||||
|
||||
<div class="find_btn">
|
||||
<?php
|
||||
if ($config['cf_cert_use']) {
|
||||
echo '<div class="cert_btn">';
|
||||
if ($config['cf_cert_simple']) {
|
||||
echo '<button type="button" id="win_sa_kakao_cert" class="btn_submit win_sa_cert" data-type="">간편인증</button>' . PHP_EOL;
|
||||
}
|
||||
if ($config['cf_cert_hp'])
|
||||
echo '<button type="button" id="win_hp_cert" class="btn_submit">휴대폰 본인확인</button>' . PHP_EOL;
|
||||
if ($config['cf_cert_ipin'])
|
||||
echo '<button type="button" id="win_ipin_cert" class="btn_submit">아이핀 본인확인</button>' . PHP_EOL;
|
||||
echo '</div>';
|
||||
echo '<noscript>본인확인을 위해서는 자바스크립트 사용이 가능해야합니다.</noscript>' . PHP_EOL;
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
var pageTypeParam = "pageType=register";
|
||||
var f = document.fcertrefreshform;
|
||||
|
||||
<?php if ($config['cf_cert_use'] && $config['cf_cert_simple']) { ?>
|
||||
// 이니시스 간편인증
|
||||
var url = "<?php echo G5_INICERT_URL; ?>/ini_request.php";
|
||||
var type = "";
|
||||
var params = "";
|
||||
var request_url = "";
|
||||
|
||||
$(".win_sa_cert").click(function() {
|
||||
if (!fcertrefreshform_submit(f)) return false;
|
||||
type = $(this).data("type");
|
||||
params = "?directAgency=" + type + "&" + pageTypeParam;
|
||||
request_url = url + params;
|
||||
call_sa(request_url);
|
||||
});
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($config['cf_cert_use'] && $config['cf_cert_ipin']) { ?>
|
||||
// 아이핀인증
|
||||
var params = "";
|
||||
$("#win_ipin_cert").click(function() {
|
||||
if (!fcertrefreshform_submit(f)) return false;
|
||||
params = "?" + pageTypeParam;
|
||||
var url = "<?php echo G5_OKNAME_URL; ?>/ipin1.php" + params;
|
||||
certify_win_open('kcb-ipin', url);
|
||||
return;
|
||||
});
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($config['cf_cert_use'] && $config['cf_cert_hp']) { ?>
|
||||
// 휴대폰인증
|
||||
var params = "";
|
||||
$("#win_hp_cert").click(function() {
|
||||
if (!fcertrefreshform_submit(f)) return false;
|
||||
params = "?" + pageTypeParam;
|
||||
<?php
|
||||
switch ($config['cf_cert_hp']) {
|
||||
case 'kcb':
|
||||
$cert_url = G5_OKNAME_URL.'/hpcert1.php';
|
||||
$cert_type = 'kcb-hp';
|
||||
break;
|
||||
case 'kcp':
|
||||
$cert_url = G5_KCPCERT_URL.'/kcpcert_form.php';
|
||||
$cert_type = 'kcp-hp';
|
||||
break;
|
||||
case 'lg':
|
||||
$cert_url = G5_LGXPAY_URL.'/AuthOnlyReq.php';
|
||||
$cert_type = 'lg-hp';
|
||||
break;
|
||||
default:
|
||||
echo 'alert("기본환경설정에서 휴대폰 본인확인 설정을 해주십시오");';
|
||||
echo 'return false;';
|
||||
break;
|
||||
}
|
||||
?>
|
||||
|
||||
certify_win_open("<?php echo $cert_type; ?>", "<?php echo $cert_url; ?>" + params);
|
||||
return;
|
||||
});
|
||||
<?php } ?>
|
||||
});
|
||||
|
||||
function fcertrefreshform_submit(f) {
|
||||
if (!f.agree2.checked) {
|
||||
alert("추가 개인정보처리방침에 동의하셔야 인증을 진행하실 수 있습니다.");
|
||||
f.agree2.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
<!-- } 기존 회원 본인인증 끝 -->
|
||||
@@ -0,0 +1,145 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>TOVA Join</title>
|
||||
<link rel="stylesheet" href="../css/reset.css" />
|
||||
<link rel="stylesheet" href="../css/font.css" />
|
||||
<link rel="stylesheet" href="../css/style.css" />
|
||||
<script src="../js/jquery-3.6.1.min.js"></script>
|
||||
<script src="../js/common.js"></script>
|
||||
</head>
|
||||
|
||||
|
||||
<!-- 회원 비밀번호 확인 시작 { -->
|
||||
<div id="mb_confirm" class="mbskin">
|
||||
<h1><?php echo $g5['title'] ?></h1>
|
||||
|
||||
<p>
|
||||
<!-- <strong>비밀번호를 한번 더 입력해주세요.</strong> -->
|
||||
<?php if ($url == 'member_leave.php') { ?>
|
||||
비밀번호를 입력하시면 회원탈퇴가 완료됩니다.
|
||||
<?php }else{ ?>
|
||||
회원님의 정보를 안전하게 보호하기 위해 비밀번호를 한번 더 확인합니다.
|
||||
<?php } ?>
|
||||
</p>
|
||||
|
||||
<form name="fmemberconfirm" action="<?php echo $url ?>" onsubmit="return fmemberconfirm_submit(this);" method="post">
|
||||
<input type="hidden" name="mb_id" value="<?php echo $member['mb_id'] ?>">
|
||||
<input type="hidden" name="w" value="u">
|
||||
|
||||
<!-- <fieldset>
|
||||
<span class="confirm_id">회원아이디</span>
|
||||
<span id="mb_confirm_id"><?php //echo $member['mb_id'] ?></span>
|
||||
<label for="confirm_mb_password" class="sound_only">비밀번호<strong>필수</strong></label>
|
||||
<input type="password" name="mb_password" id="confirm_mb_password" required class="required frm_input" size="15" maxLength="20" placeholder="비밀번호">
|
||||
<input type="submit" value="확인" id="btn_submit" class="btn_submit">
|
||||
</fieldset> -->
|
||||
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<!-- Header -->
|
||||
<header class="header">
|
||||
<h1>
|
||||
<img src="../img/logo_w.svg" alt="">
|
||||
</h1>
|
||||
<div class="menu_wrap">
|
||||
<div class="menu_my"><img src="../img/ico_my.svg" alt=""></div>
|
||||
<div class="menu_ham"><img src="../img/ico_ham.svg" alt=""></div>
|
||||
</div>
|
||||
</header>
|
||||
<!-- //Header -->
|
||||
|
||||
<!--popup_wrap-->
|
||||
<div class="popup_wrap ">
|
||||
<!--popup_in-->
|
||||
<div class="popup_in">
|
||||
<hgroup>
|
||||
<div class="pop_close_wrap">
|
||||
<button class="btn_close">
|
||||
<div class="close_div"><img src="../img/ico_close.svg" alt=""></div>
|
||||
</button>
|
||||
</div>
|
||||
</hgroup>
|
||||
<!--popup_content-->
|
||||
<div class="popup_content join">
|
||||
<!--pop_join_left-->
|
||||
<div class="pop_join_left">
|
||||
<?php if ($url == 'member_leave.php') { ?>
|
||||
<span class="bg_tit_left">Canc</span>
|
||||
<div class="join_info">
|
||||
<h1 class="h_1"> 회원탈퇴 </h1>
|
||||
<h3 class="h_3">
|
||||
회원님의 <em>정보 보호</em>를 <br>
|
||||
위하여 <em>비밀번호</em>를 한번 더 확인합니다.
|
||||
</h3>
|
||||
</div>
|
||||
<?php }else{ ?>
|
||||
<span class="bg_tit_left">My pa</span>
|
||||
<div class="join_info">
|
||||
<h1 class="h_1"> My Page </h1>
|
||||
<h3 class="h_3">
|
||||
회원님의 <em>정보 보호</em>를 <br>
|
||||
위하여 <em>비밀번호</em>를 한번 더 확인합니다.
|
||||
</h3>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<!--//pop_join_right-->
|
||||
<div class="pop_input_wrap pop_join_right">
|
||||
<?php if ($url == 'member_leave.php') { ?>
|
||||
<span class="bg_tit_right">el</span>
|
||||
<?php }else{ ?>
|
||||
<span class="bg_tit_right">ge</span>
|
||||
<?php } ?>
|
||||
<div class="contents_wrap">
|
||||
<div class="content">
|
||||
<table class="ph">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="h_4">비밀번호 확인</th>
|
||||
<td>
|
||||
<div class="id_wrap">
|
||||
<input type="password" name="mb_password" id="confirm_mb_password" required class="required frm_input" placeholder="비밀번호 입력" required>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="join_btn_wrap">
|
||||
<button id="btn_submit" type="submit" class="btn_submit">확인</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!--//pop_join_right-->
|
||||
</div>
|
||||
<!--//popup_content-->
|
||||
</div>
|
||||
<!--//popup_in-->
|
||||
</div>
|
||||
<!--//popup_wrap-->
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function fmemberconfirm_submit(f)
|
||||
{
|
||||
document.getElementById("btn_submit").disabled = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
<!-- } 회원 비밀번호 확인 끝 -->
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<!-- 쪽지 목록 시작 { -->
|
||||
<div id="memo_list" class="new_win">
|
||||
<h1 id="win_title">
|
||||
<?php echo $g5['title'] ?>
|
||||
<div class="win_total">전체 <?php echo $kind_title ?>쪽지 <?php echo $total_count ?>통<br></div>
|
||||
</h1>
|
||||
<div class="new_win_con2">
|
||||
<ul class="win_ul">
|
||||
<li class="<?php if ($kind == 'recv') { ?>selected<?php } ?>"><a href="./memo.php?kind=recv">받은쪽지</a></li>
|
||||
<li class="<?php if ($kind == 'send') { ?>selected<?php } ?>"><a href="./memo.php?kind=send">보낸쪽지</a></li>
|
||||
<li><a href="./memo_form.php">쪽지쓰기</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="memo_list">
|
||||
<ul>
|
||||
<?php
|
||||
for ($i=0; $i<count($list); $i++) {
|
||||
$readed = (substr($list[$i]['me_read_datetime'],0,1) == 0) ? '' : 'read';
|
||||
$memo_preview = utf8_strcut(strip_tags($list[$i]['me_memo']), 30, '..');
|
||||
?>
|
||||
<li class="<?php echo $readed; ?>">
|
||||
<div class="memo_li profile_big_img">
|
||||
<?php echo get_member_profile_img($list[$i]['mb_id']); ?>
|
||||
<?php if (! $readed){ ?><span class="no_read">안 읽은 쪽지</span><?php } ?>
|
||||
</div>
|
||||
<div class="memo_li memo_name">
|
||||
<?php echo $list[$i]['name']; ?> <span class="memo_datetime"><i class="fa fa-clock-o" aria-hidden="true"></i> <?php echo $list[$i]['send_datetime']; ?></span>
|
||||
<div class="memo_preview">
|
||||
<a href="<?php echo $list[$i]['view_href']; ?>"><?php echo $memo_preview; ?></a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="<?php echo $list[$i]['del_href']; ?>" onclick="del(this.href); return false;" class="memo_del"><i class="fa fa-trash-o" aria-hidden="true"></i> <span class="sound_only">삭제</span></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ($i==0) { echo '<li class="empty_table">자료가 없습니다.</li>'; } ?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- 페이지 -->
|
||||
<?php echo $write_pages; ?>
|
||||
|
||||
<p class="win_desc"><i class="fa fa-info-circle" aria-hidden="true"></i> 쪽지 보관일수는 최장 <strong><?php echo $config['cf_memo_del'] ?></strong>일 입니다.
|
||||
</p>
|
||||
|
||||
<div class="win_btn">
|
||||
<button type="button" onclick="window.close();" class="btn_close">창닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- } 쪽지 목록 끝 -->
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<!-- 쪽지 보내기 시작 { -->
|
||||
<div id="memo_write" class="new_win">
|
||||
<h1 id="win_title"><i class="fa fa-envelope-o" aria-hidden="true"></i> 쪽지 보내기</h1>
|
||||
<div class="new_win_con2">
|
||||
<ul class="win_ul">
|
||||
<li><a href="./memo.php?kind=recv">받은쪽지</a></li>
|
||||
<li><a href="./memo.php?kind=send">보낸쪽지</a></li>
|
||||
<li class="selected"><a href="./memo_form.php">쪽지쓰기</a></li>
|
||||
</ul>
|
||||
|
||||
<form name="fmemoform" action="<?php echo $memo_action_url; ?>" onsubmit="return fmemoform_submit(this);" method="post" autocomplete="off">
|
||||
<div class="form_01">
|
||||
<h2 class="sound_only">쪽지쓰기</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<label for="me_recv_mb_id" class="sound_only">받는 회원아이디<strong>필수</strong></label>
|
||||
|
||||
<input type="text" name="me_recv_mb_id" value="<?php echo $me_recv_mb_id; ?>" id="me_recv_mb_id" required class="frm_input full_input required" size="47" placeholder="받는 회원아이디">
|
||||
<span class="frm_info">여러 회원에게 보낼때는 컴마(,)로 구분하세요.</span>
|
||||
<?php if ($config['cf_memo_send_point']) { ?>
|
||||
<br ><span class="frm_info">쪽지 보낼때 회원당 <?php echo number_format($config['cf_memo_send_point']); ?>점의 포인트를 차감합니다.</span>
|
||||
<?php } ?>
|
||||
</li>
|
||||
<li>
|
||||
<label for="me_memo" class="sound_only">내용</label>
|
||||
<textarea name="me_memo" id="me_memo" required class="required"><?php echo $content ?></textarea>
|
||||
</li>
|
||||
<li>
|
||||
<span class="sound_only">자동등록방지</span>
|
||||
|
||||
<?php echo captcha_html(); ?>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="win_btn">
|
||||
<button type="submit" id="btn_submit" class="btn btn_b02 reply_btn">보내기</button>
|
||||
<button type="button" onclick="window.close();" class="btn_close">창닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function fmemoform_submit(f)
|
||||
{
|
||||
<?php echo chk_captcha_js(); ?>
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
<!-- } 쪽지 보내기 끝 -->
|
||||