add community theme

This commit is contained in:
Amberstone 2024-10-07 13:06:40 +09:00
parent 8c1f5dabac
commit 2a8c8b3953
Signed by: amber
GPG key ID: 094B0E55F98D8BF1
84 changed files with 8679 additions and 206 deletions

View file

@ -4,7 +4,7 @@
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; exit;
if (!defined('_BOARD_DELETE_')) if (!defined('_BOARD_DELETE_'))
exit; // 개별 페이지 접근 불가 exit;
// $tmp_bo_table 에는 $bo_table 값을 넘겨주어야 함 // $tmp_bo_table 에는 $bo_table 값을 넘겨주어야 함
if (!$tmp_bo_table) { if (!$tmp_bo_table) {

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
check_site_auth(); check_site_auth();
$begin_time = microtime(true); $begin_time = microtime(true);

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
include_once G5_BBS_PATH . '/_head.php'; include_once G5_BBS_PATH . '/_head.php';

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
if(is_include_path_check($board['bo_include_tail'])) { if(is_include_path_check($board['bo_include_tail'])) {
@include $board['bo_include_tail']; @include $board['bo_include_tail'];

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
// 최고관리자일 때만 실행 // 최고관리자일 때만 실행
if ($config['cf_admin'] != $member['mb_id'] || $is_admin != 'super') if ($config['cf_admin'] != $member['mb_id'] || $is_admin != 'super')

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
if (!$is_admin) if (!$is_admin)
alert('접근 권한이 없습니다.', G5_URL); alert('접근 권한이 없습니다.', G5_URL);

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
$is_category = false; $is_category = false;
$category_option = ''; $category_option = '';

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
// 분류 사용 여부 // 분류 사용 여부
$is_category = false; $is_category = false;

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined("_GNUBOARD_")) if (!defined("_GNUBOARD_"))
exit; // 개별 페이지 접근 불가 exit;
$sql = "SELECT * FROM {$g5['new_win_table']} $sql = "SELECT * FROM {$g5['new_win_table']}
where '" . G5_TIME_YMDHIS . "' between nw_begin_time and nw_end_time where '" . G5_TIME_YMDHIS . "' between nw_begin_time and nw_end_time

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
$qa_skin_path = get_skin_path('qa', $qaconfig['qa_skin']); $qa_skin_path = get_skin_path('qa', $qaconfig['qa_skin']);
$qa_skin_url = get_skin_url('qa', $qaconfig['qa_skin']); $qa_skin_url = get_skin_url('qa', $qaconfig['qa_skin']);

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
if (G5_IS_MOBILE) { if (G5_IS_MOBILE) {
echo conv_content($qaconfig['qa_mobile_content_tail'], 1); echo conv_content($qaconfig['qa_mobile_content_tail'], 1);

View file

@ -1,7 +1,7 @@
<?php <?php
// 회원가입축하 메일 (회원님께 발송) // 회원가입축하 메일 (회원님께 발송)
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
?> ?>
<!doctype html> <!doctype html>

View file

@ -1,7 +1,7 @@
<?php <?php
// 회원가입 메일 (관리자 메일로 발송) // 회원가입 메일 (관리자 메일로 발송)
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
?> ?>
<!doctype html> <!doctype html>

View file

@ -1,7 +1,7 @@
<?php <?php
// E-mail 수정시 인증 메일 (회원님께 발송) // E-mail 수정시 인증 메일 (회원님께 발송)
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
?> ?>
<!doctype html> <!doctype html>

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
// 게시판에서 두단어 이상 검색 후 검색된 게시물에 코멘트를 남기면 나오던 오류 수정 // 게시판에서 두단어 이상 검색 후 검색된 게시물에 코멘트를 남기면 나오던 오류 수정
$sop = strtolower($sop); $sop = strtolower($sop);

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
include_once G5_CAPTCHA_PATH . "/captcha.lib.php"; include_once G5_CAPTCHA_PATH . "/captcha.lib.php";
$captcha_html = ""; $captcha_html = "";

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
if (!(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE)) if (!(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE))
return; return;

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
// 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함 // 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함
if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) { if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) {

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
if (!$board['bo_use_sns']) if (!$board['bo_use_sns'])
return; return;

View file

@ -1,7 +1,7 @@
<?php <?php
// 게시물 입력시 게시자, 관리자에게 드리는 메일을 수정하고 싶으시다면 이 파일을 수정하십시오. // 게시물 입력시 게시자, 관리자에게 드리는 메일을 수정하고 싶으시다면 이 파일을 수정하십시오.
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
?> ?>
<!doctype html> <!doctype html>
<html lang="ko"> <html lang="ko">

View file

@ -912,21 +912,24 @@ unset($extend_file);
// ----- 테마 추가기능 불러오기 (확장) // ----- 테마 추가기능 불러오기 (확장)
if (defined('G5_THEME_PATH')) { if (defined('G5_THEME_PATH')) {
$extend_file = []; $extend_file = [];
$tmp = dir(G5_THEME_PATH . '/' . G5_EXTEND_DIR); $theme_extend = G5_THEME_PATH . '/' . G5_EXTEND_DIR;
if (is_dir($theme_extend)) {
while ($entry = $tmp->read()) { $tmp = dir($theme_extend);
// php 파일만 include 함
if (preg_match("/(\.php)$/i", $entry)) while ($entry = $tmp->read()) {
$extend_file[] = $entry; if (preg_match("/(\.php)$/i", $entry)) {
} $extend_file[] = $entry;
}
if (!empty($extend_file) && is_array($extend_file)) {
natsort($extend_file);
foreach ($extend_file as $file) {
include_once G5_THEME_PATH . '/' . G5_EXTEND_DIR . "/" . $file;
} }
if (!empty($extend_file) && is_array($extend_file)) {
natsort($extend_file);
foreach ($extend_file as $file) {
@include_once "{$theme_extend}/{$file}";
}
}
unset($extend_file);
} }
unset($extend_file);
} }
ob_start(); ob_start();

View file

@ -4,7 +4,7 @@
* @suppress PHP0419 * @suppress PHP0419
*/ */
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
// 배너출력 // 배너출력
// 스킨, 슬라이드 이펙트(slide/fade), 슬라이드 속도, 자동재생 여부(true/false), 슬라이드 방향 (default/alter), 컨트롤 출력여부(true/false), 애니메이션 속도 // 스킨, 슬라이드 이펙트(slide/fade), 슬라이드 속도, 자동재생 여부(true/false), 슬라이드 방향 (default/alter), 컨트롤 출력여부(true/false), 애니메이션 속도

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
/******************************************* /*******************************************

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
function get_side_name($si_id) function get_side_name($si_id)
{ {

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
//플러그인 폴더 이름 및 스킨 폴더 이름 //플러그인 폴더 이름 및 스킨 폴더 이름
define('SMARTEDITOR_UPLOAD_IMG_CHECK', 1); // 이미지 파일을 썸네일 할수 있는지 여부를 체크합니다. ( 해당 파일이 이미지 파일인지 체크합니다. 1이면 사용, 0이면 사용 안함 ) define('SMARTEDITOR_UPLOAD_IMG_CHECK', 1); // 이미지 파일을 썸네일 할수 있는지 여부를 체크합니다. ( 해당 파일이 이미지 파일인지 체크합니다. 1이면 사용, 0이면 사용 안함 )

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
function get_status($ch_id, $st_id) function get_status($ch_id, $st_id)
{ {

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
function get_title($ti_id) function get_title($ti_id)
{ {

View file

@ -1,3 +1,3 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
/** /**
* cache burster * cache burster

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
$data_path = '../' . G5_DATA_DIR; $data_path = '../' . G5_DATA_DIR;
$css_path = '../' . G5_CSS_DIR; $css_path = '../' . G5_CSS_DIR;

View file

@ -1,6 +1,6 @@
<?php <?php
if (!defined('_GNUBOARD_')) if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가 exit;
/* /*
환경설정에서 에디터 선택이 없는 경우에 사용하는 라이브러리 입니다. 환경설정에서 에디터 선택이 없는 경우에 사용하는 라이브러리 입니다.

View file

@ -1,163 +1,163 @@
<?php <?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 if (!defined('_GNUBOARD_')) exit;
function editor_html($id, $content, $is_dhtml_editor=true) function editor_html($id, $content, $is_dhtml_editor=true)
{ {
global $config, $w, $board, $write; global $config, $w, $board, $write;
global $editor_width, $editor_height; global $editor_width, $editor_height;
static $js = true; static $js = true;
if( if(
$is_dhtml_editor && $content && $is_dhtml_editor && $content &&
( (
(!$w && (isset($board['bo_insert_content']) && !empty($board['bo_insert_content']))) (!$w && (isset($board['bo_insert_content']) && !empty($board['bo_insert_content'])))
|| ($w == 'u' && isset($write['wr_option']) && strpos($write['wr_option'], 'html') === false ) || ($w == 'u' && isset($write['wr_option']) && strpos($write['wr_option'], 'html') === false )
) )
){ //글쓰기 기본 내용 처리 ){ //글쓰기 기본 내용 처리
if( preg_match('/\r|\n/', $content) && $content === strip_tags($content, '<a><strong><b>') ) { //textarea로 작성되고, html 내용이 없다면 if( preg_match('/\r|\n/', $content) && $content === strip_tags($content, '<a><strong><b>') ) { //textarea로 작성되고, html 내용이 없다면
$content = nl2br($content); $content = nl2br($content);
} }
} }
$width = isset($editor_width) ? $editor_width : "100%"; $width = isset($editor_width) ? $editor_width : "100%";
$height = isset($editor_height) ? $editor_height : "250px"; $height = isset($editor_height) ? $editor_height : "250px";
if (defined('G5_PUNYCODE')) if (defined('G5_PUNYCODE'))
$editor_url = G5_PUNYCODE.'/'.G5_EDITOR_DIR.'/'.$config['cf_editor']; $editor_url = G5_PUNYCODE.'/'.G5_EDITOR_DIR.'/'.$config['cf_editor'];
else else
$editor_url = G5_EDITOR_URL.'/'.$config['cf_editor']; $editor_url = G5_EDITOR_URL.'/'.$config['cf_editor'];
$html = ""; $html = "";
if ($is_dhtml_editor) { if ($is_dhtml_editor) {
if ($js) { if ($js) {
$html .= "<script src=\"{$editor_url}/cheditor.js\"></script>"; $html .= "<script src=\"{$editor_url}/cheditor.js\"></script>";
} }
$html .= "<script>\n"; $html .= "<script>\n";
$html .= "var ed_nonce = \"".ft_nonce_create('cheditor')."\";\n"; $html .= "var ed_nonce = \"".ft_nonce_create('cheditor')."\";\n";
$html .= "var ed_{$id} = new cheditor('ed_{$id}');\n"; $html .= "var ed_{$id} = new cheditor('ed_{$id}');\n";
$html .= "ed_{$id}.config.editorWidth = \"{$width}\";\n"; $html .= "ed_{$id}.config.editorWidth = \"{$width}\";\n";
$html .= "ed_{$id}.config.editorHeight = \"{$height}\";\n"; $html .= "ed_{$id}.config.editorHeight = \"{$height}\";\n";
$html .= "ed_{$id}.config.imgReSize = false;\n"; $html .= "ed_{$id}.config.imgReSize = false;\n";
$html .= "ed_{$id}.config.fullHTMLSource = false;\n"; $html .= "ed_{$id}.config.fullHTMLSource = false;\n";
$html .= "ed_{$id}.config.editorPath = \"{$editor_url}\";\n"; $html .= "ed_{$id}.config.editorPath = \"{$editor_url}\";\n";
$html .= "ed_{$id}.inputForm = \"tx_{$id}\";\n"; $html .= "ed_{$id}.inputForm = \"tx_{$id}\";\n";
$html .= "</script>\n"; $html .= "</script>\n";
$html .= "<span class=\"sound_only\">웹에디터 시작</span>"; $html .= "<span class=\"sound_only\">웹에디터 시작</span>";
$html .= "<textarea name=\"{$id}\" id=\"tx_{$id}\" style=\"display:none;\">{$content}</textarea>\n"; $html .= "<textarea name=\"{$id}\" id=\"tx_{$id}\" style=\"display:none;\">{$content}</textarea>\n";
$html .= "\n<span class=\"sound_only\">웹 에디터 끝</span>"; $html .= "\n<span class=\"sound_only\">웹 에디터 끝</span>";
$html .= "<script>ed_{$id}.run();</script>\n"; $html .= "<script>ed_{$id}.run();</script>\n";
} else { } else {
$html .= "<textarea id=\"$id\" name=\"$id\" style=\"width:{$width};height:{$height};\" maxlength=\"65536\">$content</textarea>\n"; $html .= "<textarea id=\"$id\" name=\"$id\" style=\"width:{$width};height:{$height};\" maxlength=\"65536\">$content</textarea>\n";
} }
return $html; return $html;
} }
// textarea 로 값을 넘긴다. javascript 반드시 필요 // textarea 로 값을 넘긴다. javascript 반드시 필요
function get_editor_js($id, $is_dhtml_editor=true) function get_editor_js($id, $is_dhtml_editor=true)
{ {
if ($is_dhtml_editor) { if ($is_dhtml_editor) {
return "document.getElementById('tx_{$id}').value = ed_{$id}.outputBodyHTML();\n"; return "document.getElementById('tx_{$id}').value = ed_{$id}.outputBodyHTML();\n";
} else { } else {
return "var {$id}_editor = document.getElementById('{$id}');\n"; return "var {$id}_editor = document.getElementById('{$id}');\n";
} }
} }
// textarea 의 값이 비어 있는지 검사 // textarea 의 값이 비어 있는지 검사
function chk_editor_js($id, $is_dhtml_editor=true) function chk_editor_js($id, $is_dhtml_editor=true)
{ {
if ($is_dhtml_editor) { if ($is_dhtml_editor) {
return "if (document.getElementById('tx_{$id}') && jQuery.inArray(ed_{$id}.outputBodyHTML().toLowerCase().replace(/^\s*|\s*$/g, ''), ['&nbsp;','<p>&nbsp;</p>','<p><br></p>','<div><br></div>','<p></p>','<br>','']) != -1) { alert(\"내용을 입력해 주십시오.\"); ed_{$id}.returnFalse(); return false; }\n"; return "if (document.getElementById('tx_{$id}') && jQuery.inArray(ed_{$id}.outputBodyHTML().toLowerCase().replace(/^\s*|\s*$/g, ''), ['&nbsp;','<p>&nbsp;</p>','<p><br></p>','<div><br></div>','<p></p>','<br>','']) != -1) { alert(\"내용을 입력해 주십시오.\"); ed_{$id}.returnFalse(); return false; }\n";
} else { } else {
return "if (!{$id}_editor.value) { alert(\"내용을 입력해 주십시오.\"); {$id}_editor.focus(); return false; }\n"; return "if (!{$id}_editor.value) { alert(\"내용을 입력해 주십시오.\"); {$id}_editor.focus(); return false; }\n";
} }
} }
/* /*
https://github.com/timostamm/NonceUtil-PHP https://github.com/timostamm/NonceUtil-PHP
*/ */
if (!defined('FT_NONCE_UNIQUE_KEY')) if (!defined('FT_NONCE_UNIQUE_KEY'))
define( 'FT_NONCE_UNIQUE_KEY' , sha1($_SERVER['SERVER_SOFTWARE'].G5_MYSQL_USER.session_id().G5_TABLE_PREFIX) ); define( 'FT_NONCE_UNIQUE_KEY' , sha1($_SERVER['SERVER_SOFTWARE'].G5_MYSQL_USER.session_id().G5_TABLE_PREFIX) );
if (!defined('FT_NONCE_SESSION_KEY')) if (!defined('FT_NONCE_SESSION_KEY'))
define( 'FT_NONCE_SESSION_KEY' , substr(md5(FT_NONCE_UNIQUE_KEY), 5) ); define( 'FT_NONCE_SESSION_KEY' , substr(md5(FT_NONCE_UNIQUE_KEY), 5) );
if (!defined('FT_NONCE_DURATION')) if (!defined('FT_NONCE_DURATION'))
define( 'FT_NONCE_DURATION' , 60 * 30 ); // 300 makes link or form good for 5 minutes from time of generation, 300은 5분간 유효, 60 * 60 은 1시간 define( 'FT_NONCE_DURATION' , 60 * 30 ); // 300 makes link or form good for 5 minutes from time of generation, 300은 5분간 유효, 60 * 60 은 1시간
if (!defined('FT_NONCE_KEY')) if (!defined('FT_NONCE_KEY'))
define( 'FT_NONCE_KEY' , '_nonce' ); define( 'FT_NONCE_KEY' , '_nonce' );
// This method creates a key / value pair for a url string // This method creates a key / value pair for a url string
if(!function_exists('ft_nonce_create_query_string')){ if(!function_exists('ft_nonce_create_query_string')){
function ft_nonce_create_query_string( $action = '' , $user = '' ){ function ft_nonce_create_query_string( $action = '' , $user = '' ){
return FT_NONCE_KEY."=".ft_nonce_create( $action , $user ); return FT_NONCE_KEY."=".ft_nonce_create( $action , $user );
} }
} }
if(!function_exists('ft_get_secret_key')){ if(!function_exists('ft_get_secret_key')){
function ft_get_secret_key($secret){ function ft_get_secret_key($secret){
return md5(FT_NONCE_UNIQUE_KEY.$secret); return md5(FT_NONCE_UNIQUE_KEY.$secret);
} }
} }
// This method creates an nonce. It should be called by one of the previous two functions. // This method creates an nonce. It should be called by one of the previous two functions.
if(!function_exists('ft_nonce_create')){ if(!function_exists('ft_nonce_create')){
function ft_nonce_create( $action = '',$user='', $timeoutSeconds=FT_NONCE_DURATION ){ function ft_nonce_create( $action = '',$user='', $timeoutSeconds=FT_NONCE_DURATION ){
$secret = ft_get_secret_key($action.$user); $secret = ft_get_secret_key($action.$user);
$salt = ft_nonce_generate_hash(); $salt = ft_nonce_generate_hash();
$time = time(); $time = time();
$maxTime = $time + $timeoutSeconds; $maxTime = $time + $timeoutSeconds;
$nonce = $salt . "|" . $maxTime . "|" . sha1( $salt . $secret . $maxTime ); $nonce = $salt . "|" . $maxTime . "|" . sha1( $salt . $secret . $maxTime );
set_session('nonce_'.FT_NONCE_SESSION_KEY, $nonce); set_session('nonce_'.FT_NONCE_SESSION_KEY, $nonce);
return $nonce; return $nonce;
} }
} }
// This method validates an nonce // This method validates an nonce
if(!function_exists('ft_nonce_is_valid')){ if(!function_exists('ft_nonce_is_valid')){
function ft_nonce_is_valid( $nonce, $action = '', $user='' ){ function ft_nonce_is_valid( $nonce, $action = '', $user='' ){
$secret = ft_get_secret_key($action.$user); $secret = ft_get_secret_key($action.$user);
if (is_string($nonce) == false) { if (is_string($nonce) == false) {
return false; return false;
} }
$a = explode('|', $nonce); $a = explode('|', $nonce);
if (count($a) != 3) { if (count($a) != 3) {
return false; return false;
} }
$salt = $a[0]; $salt = $a[0];
$maxTime = intval($a[1]); $maxTime = intval($a[1]);
$hash = $a[2]; $hash = $a[2];
$back = sha1( $salt . $secret . $maxTime ); $back = sha1( $salt . $secret . $maxTime );
if ($back != $hash) { if ($back != $hash) {
return false; return false;
} }
if (time() > $maxTime) { if (time() > $maxTime) {
return false; return false;
} }
return true; return true;
} }
} }
// This method generates the nonce timestamp // This method generates the nonce timestamp
if(!function_exists('ft_nonce_generate_hash')){ if(!function_exists('ft_nonce_generate_hash')){
function ft_nonce_generate_hash(){ function ft_nonce_generate_hash(){
$length = 10; $length = 10;
$chars='1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'; $chars='1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
$ll = strlen($chars)-1; $ll = strlen($chars)-1;
$o = ''; $o = '';
while (strlen($o) < $length) { while (strlen($o) < $length) {
$o .= $chars[ rand(0, $ll) ]; $o .= $chars[ rand(0, $ll) ];
} }
return $o; return $o;
} }
} }

View file

@ -0,0 +1,2 @@
<?php
include_once '../../common.php';

View file

@ -0,0 +1,32 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
add_stylesheet('<link rel="stylesheet" href="' . G5_CSS_URL . '/style.couple.css">', 0);
?>
<div id="couple_page">
<div id="couple_list">
<ul>
<?php for ($i = 0; $i < count($list); $i++) { ?>
<li>
<div class="visual">
<a href="<?= G5_URL ?>/member/viewer.php?ch_id=<?= $list[$i]['left']['idx'] ?>" class="left" target="_blank">
<img src="<?= $list[$i]['left']['thumb'] ?>" />
</a>
<a href="<?= G5_URL ?>/member/viewer.php?ch_id=<?= $list[$i]['right']['idx'] ?>" class="right" target="_blank">
<img src="<?= $list[$i]['right']['thumb'] ?>" />
</a>
</div>
<p>
<?= $list[$i]['left']['name'] ?> ♥ <?= $list[$i]['right']['name'] ?> 커플<br />
<?= $list[$i]['dday'] ?>일 째입니다.
</p>
</li>
<?php } ?>
</ul>
</div>
</div>

View file

@ -0,0 +1,23 @@
@charset "utf-8";
/* -----------------------------------------------
* 커플란 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
#couple_page {
position: relative;
padding: 50px 0;
}
#couple_list {
text-align: center;
}
#couple_list li {
display: block;
padding-bottom: 50px;
}

View file

@ -0,0 +1,338 @@
@charset "utf-8";
/* -----------------------------------------------
* 스타일 초기화
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
/****************************************
Import
****************************************/
@import url(./swiper.css);
@font-face {
font-family: 'icon';
src: url('./fonts/icomoon.eot?y5isk6');
src: url('./fonts/icomoon.eot?y5isk6#iefix') format('embedded-opentype'),
url('./fonts/icomoon.ttf?y5isk6') format('truetype'),
url('./fonts/icomoon.woff?y5isk6') format('woff'),
url('./fonts/icomoon.svg?y5isk6#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
.sound_only {
display: none;
}
/****************************************
소스코드 초기화
****************************************/
html {
overflow-y: auto
}
body {
margin: 0;
padding: 0;
}
html,
h1,
h2,
h3,
h4,
h5,
h6,
form,
fieldset,
img {
margin: 0;
padding: 0;
border: 0
}
h1,
h2,
h3,
h4,
h5,
h6 {}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block
}
ul,
li {
margin: 0;
padding: 0;
list-style: none
}
legend {
display: none;
}
label,
input,
button,
select,
img {
vertical-align: middle
}
input,
button {
margin: 0;
padding: 0;
}
button {
cursor: pointer
}
textarea,
select {
font-size: 1em
}
select {
margin: 0
}
p {
margin: 0;
padding: 0;
word-break: break-all
}
hr {
display: none
}
pre {
overflow-x: scroll;
}
a:link,
a:visited {
text-decoration: none
}
a:hover,
a:focus,
a:active {
text-decoration: none
}
ul,
li {
margin: 0;
padding: 0;
}
i,
sup,
em {
font-style: normal;
}
label {
cursor: pointer;
}
img {
max-width: 100%;
vertical-align: middle;
}
table {
width: 100%;
}
/****************************************
기본 레이아웃 정의
****************************************/
.fix-layout {
max-width: 1000px;
margin: 0 auto;
padding: 0 10px;
}
.fix-layout .fix-layout {
padding: 0;
margin: 0;
}
#body {
min-height: 100%;
box-sizing: border-box;
padding: 30px 0;
}
/****************************************
애니메이션 효과 지정 / 초기화
****************************************/
* {
transition: all .3s ease;
-webkit-transition: all .3s ease;
-ms-transition: all .3s ease;
}
.trans,
.trans *,
.trans *:after,
.trans *:before {
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
-ms-transition: all 0.3s ease;
-o-transition: all 0.3s ease;
}
.none-trans,
.none-trans *,
.none-trans *:after,
.none-trans *:before {
-webkit-transition: none;
-moz-transition: none;
-ms-transition: none;
-o-transition: none;
}
/****************************************
텍스트 코드 정렬
****************************************/
.txt-left {
text-align: left;
}
.txt-center {
text-align: center;
}
.txt-right {
text-align: right;
}
/****************************************
스크롤 스타일 정의
****************************************/
/* scrollbar : ie except */
*::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
background-color: rgba(0, 0, 0, 0.2);
}
*::-webkit-scrollbar {
width: 5px;
height: 5px;
background-color: transparent;
}
*::-webkit-scrollbar-thumb {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
background: #fff677;
border: none;
border-radius: 6.0em;
}
/**********************
스타일
**********************/
.theme-form {
width: 100%;
}
/**************************************************************
Web Size Viewer Control - 반응형 코딩
-
모바일 기준 :width 1024px
***************************************************************/
@media all and (min-width:1025px) {
.only-pc {}
.only-ta {
display: none !important;
}
.only-mo {
display: none !important;
}
.not-pc {
display: none !important;
}
.not-ta {}
.not-mo {}
}
@media all and (max-width:1024px) and (min-width:1025px) {
.only-pc {
display: none !important;
}
.only-ta {}
.only-mo {
display: none !important;
}
.not-pc {}
.not-ta {
display: none !important;
}
.not-mo {}
}
@media all and (max-width:1025px) {
.only-pc {
display: none !important;
}
.only-ta {
display: none !important;
}
.only-mo {}
.not-pc {}
.not-ta {}
.not-mo {
display: none !important;
}
}

View file

@ -0,0 +1,122 @@
@charset "utf-8";
/* -----------------------------------------------
* 자비란 이모티콘 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
#emoticon_page {
position: relative;
padding: 20px;
margin: 0 auto;
box-sizing: border-box;
}
#emoticon_page:after {
content: "";
display: block;
clear: both;
}
#page_title {
display: block;
font-size: 18px;
padding: 10px 0;
text-align: center;
}
#page_title li {
display: inline-block;
}
#page_title li a {
line-height: 55px;
font-size: 18px;
padding: 0 20px;
}
/*********************************
반응형 처리
**********************************/
@media all and (max-width:670px) {
.fix-layout {
padding: 0;
}
#page_title li a {
font-size: 14px;
padding: 0 10px;
line-height: 40px;
}
#lnb_mark {
width: 70px;
}
}
@media all and (max-width:670px) {
#emoticon_page:before {
left: 10px;
right: 10px;
}
}
/*********************************
리스트
**********************************/
#emoticon_content {
position: relative;
text-align: center;
}
#emoticon_content .no-data {
text-align: center;
width: 100%;
line-height: 100px;
}
#emoticon_content li {
display: inline-block;
position: relative;
width: 80px;
}
#emoticon_content li em {
display: block;
position: relative;
width: 80px;
height: 80px;
vertical-align: middle;
background: rgba(0, 0, 0, 0.3);
border-radius: 10px;
overflow: hidden;
}
#emoticon_content li em:before {
content: "";
display: inline-block;
vertical-align: middle;
width: 0;
height: 100%;
}
#emoticon_content li em img {
display: inline-block;
vertical-align: middle;
max-width: 95%;
}
#emoticon_content li span {
display: block;
padding: 5px 0 10px 0;
font-size: 12px;
}

View file

@ -0,0 +1,76 @@
@charset "utf-8";
/* -----------------------------------------------
* 대문 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
/*********************************
인트로 스타일 정의
**********************************/
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
.wrapper {
display: table;
width: 100%;
height: 100%;
position: relative;
z-index: 1;
}
.wrapper>.inner {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.index-logo {
display: block;
padding: 10px;
margin-top: -80px;
word-break: keep-all;
text-align: center;
font-size: 14px;
padding-bottom: 23px;
}
.index-logo img {
max-width: 70%;
}
.index-logo p {
padding: 10px 0;
}
.index-logo a {
display: inline-block;
text-decoration: none;
}
@media all and (max-width:640px) {
.index-logo {
font-size: 14px;
}
}
@media all and (max-width:480px) {
.index-logo {
font-size: 13px;
}
}
@media all and (max-width:380px) {
.index-logo {
font-size: 12px;
}
}

View file

@ -0,0 +1,69 @@
@charset "utf-8";
/* -----------------------------------------------
* 인덱스 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
/****************************************************
Index Wrap Style
*****************************************************/
html,
body {
position: relative;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
/****************************************************
Index User Style
*****************************************************/
#wrap {
height: 100%;
}
#wrapper {
width: 100%;
height: 100%;
}
#wrapper iframe {
width: 100%;
height: 100%;
background-color: transparent;
overflow: scroll;
}
#bgm {
position: fixed;
top: 0;
right: 0;
text-align: center;
width: 145px;
z-index: -999;
}
#bgm a {
display: none;
width: 15px;
height: 15px;
text-indent: -999px;
overflow: hidden;
}
#bgm a.on {
display: inline-block;
}
#site_bgm_box {
width: 0px;
height: 0px;
overflow: hidden;
}

View file

@ -0,0 +1,44 @@
@charset "utf-8";
/* -----------------------------------------------
* 인트로 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
/*********************************
인트로 스타일 정의
**********************************/
html.close-intro,
.close-intro body {
height: auto;
}
html.close-intro {
overflow-y: auto;
}
#intro_wrap {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
text-align: center;
z-index: 9999;
background: #000;
}
#intro_wrap .intro-item {
display: block;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow-y: auto;
}

View file

@ -0,0 +1,66 @@
@charset "utf-8";
/* -----------------------------------------------
* 로그인 화면 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
/****************************************************
Login Style
****************************************************/
html,
body {
height: 100%;
}
.loginWrap {
display: table;
width: 100%;
height: 100%;
}
.login-inner {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.login-logo {
margin-top: -50px;
}
.login-form-box {
position: relative;
box-sizing: border-box;
max-width: 280px;
margin: 0 auto;
padding: 5px;
}
.login-form-box .inner {
display: block;
position: relative;
padding-right: 80px;
}
.login-form-box button {
display: block;
position: absolute;
right: 0;
top: 0;
width: 75px;
bottom: 0;
height: 100%;
}
.login-form-box fieldset+fieldset {
margin-top: 5px;
}
.login-form-box input {
width: 100%;
}

View file

@ -0,0 +1,9 @@
@charset "utf-8";
/* -----------------------------------------------
* Basic 메인 화면 스타일 정의
--------------------------------------------------
- 최초 작성일 :
- 최초 작성자 :
- 최종 수정일 :
- 최종 수정자 :
--------------------------------------------------*/

View file

@ -0,0 +1,423 @@
@charset "utf-8";
/* -----------------------------------------------
* 멤버란 디자인 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
/****************************************************
신청자 목록 레이아웃
****************************************************/
.ready-member-list {
display: block;
position: relative;
overflow: hidden;
}
.ready-member-list li {
float: left;
width: 50%;
margin-bottom: 8px;
}
.ready-member-list li.empty {
width: 100%;
line-height: 300px;
text-align: center;
}
.ready-member-list li .item {
position: relative;
padding: 10px;
margin: 0 5px;
}
.ready-member-list li .ui-thumb {
display: block;
position: absolute;
top: 10px;
left: 10px;
width: 80px;
height: 80px;
overflow: hidden;
box-sizing: border-box;
}
.ready-member-list li .ui-thumb span {
display: block;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
text-align: center;
font-size: 11px;
line-height: 96px;
opacity: 1;
}
.ready-member-list li .ui-thumb span.ing {}
.ready-member-list li .ui-thumb span.com {
display: none;
}
.ready-member-list li .ui-thumb a:hover span {
opacity: 0;
}
.ready-member-list li .ui-profile {
display: block;
position: relative;
margin-left: 95px;
min-height: 85px;
}
.ready-member-list li .ui-profile i {
display: block;
position: absolute;
top: 0;
left: 0;
width: 18px;
}
.ready-member-list li .ui-profile .name {
padding: 5px 0;
}
.ready-member-list li .ui-profile em {
display: block;
font-style: normal;
font-size: 11px;
}
.ready-member-list li .ui-profile strong {
font-size: 14px;
}
.ready-member-list li .ui-profile span {
display: block;
padding: 3px 0;
font-size: 11px;
}
.ready-member-list li .ui-profile span.owner {
text-align: right;
margin-top: 5px;
padding-top: 5px;
}
/* 반응형 */
@media all and (max-width:1024px) {
#submenu li.menu-first {
display: block;
text-align: center;
}
}
@media all and (max-width:640px) {
.ready-member-list li {
width: 100%;
}
}
/****************************************************
멤버 목록 레이아웃
****************************************************/
.memberWrap {
display: table;
width: 100%;
}
.memberWrap>.member-box {
display: table-cell;
text-align: center;
vertical-align: top;
}
.member-list {
text-align: center;
}
.member-list li {
display: inline-block;
vertical-align: top;
margin: 5px;
}
.member-list .item {
display: block;
position: relative;
padding: 0;
}
.member-list .ui-profile {
position: absolute;
left: 0;
right: 0;
bottom: 0;
padding: 5px;
text-align: center;
}
@media all and (max-width:800px) {
.memberWrap,
.memberWrap>.member-box {
display: block;
}
}
/****************************************************
멤버 프로필 레이아웃
****************************************************/
#character_profile .visual-area {
position: relative;
}
#character_profile #character_body {
position: relative;
z-index: 0;
}
#character_profile #character_body img {
display: block;
margin: 0 auto;
}
#character_profile #character_head {
position: absolute;
left: 0;
bottom: 0;
right: 0;
z-index: 1;
}
/****************************************************
인벤토리 스타일
****************************************************/
.inventory-list {
display: block;
position: relative;
overflow: hidden;
}
.inventory-list li {
display: block;
float: left;
padding: 5px;
}
.inventory-list a {
display: block;
position: relative;
width: 40px;
height: 40px;
overflow: hidden;
}
.inventory-list a img {
display: block;
position: relative;
margin: 0 auto;
}
.inventory-list a i {
display: block;
position: absolute;
right: 1px;
bottom: 1px;
background: rgba(0, 0, 0, .5);
min-width: 15px;
height: 15px;
line-height: 15px;
color: #fff;
font-size: 10px;
font-weight: 800;
padding: 0 1px;
text-align: center;
z-index: 2;
box-sizing: border-box;
border: none !important;
}
.inventory-list a i.present:before {
content: "\e99f";
font-family: 'icon';
font-weight: 400;
}
.title-list {
display: block;
position: relative;
padding: 20px 0;
}
.title-list p {
padding: 5px;
}
.title-list .item {
display: inline-block;
min-width: 25%;
padding: 5px;
box-sizing: border-box;
text-align: left;
vertical-align: middle;
}
/******************************************
관계란 스타일
*******************************************/
.relation-member-list {
position: relative;
}
.relation-member-list>li {
position: relative;
padding-left: 90px;
min-height: 120px;
margin-bottom: 20px;
}
.relation-member-list .ui-thumb {
position: absolute;
top: 0;
left: 0;
width: 80px;
overflow: hidden;
}
.relation-member-list .rm-name {
font-size: 14px;
font-weight: 800;
padding-right: 150px;
padding-left: 10px;
}
.relation-member-list .rm-like-style {
position: absolute;
right: 0;
top: 0;
width: 80px;
}
.relation-member-list .rm-like-style i {
display: block;
width: 13px;
height: 15px;
position: relative;
float: left;
margin: 0 1px;
}
.relation-member-list .rm-like-style i:before {
content: "\e9da";
font-family: 'icon';
font-style: normal;
display: block;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
font-family: 'icon';
}
.relation-member-list .memo {
font-family: 'Dotum';
padding: 10px;
margin: 5px 0;
line-height: 1.2em;
min-height: 30px;
}
.relation-member-list ol {
display: block;
position: relative;
clear: both;
text-align: right;
padding-right: 10px;
}
.relation-member-list ol li {
display: inline-block;
}
.relation-member-list ol li a.btn-log {
display: block;
position: relative;
width: 20px;
height: 20px;
margin: 0 auto;
}
.relation-member-list ol li a.btn-log:before {
content: "\e925";
font-family: 'icon';
font-size: 15px;
font-style: normal;
display: block;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
font-family: 'icon';
}
.relation-member-list .modify-box {
display: none;
}
.relation-member-list .state-modify {}
.relation-member-list .state-modify .rm-like-style,
.relation-member-list .state-modify .memo .ori-content,
.relation-member-list .state-modify ol {
display: none;
}
.relation-member-list .state-modify .modify-box {
display: block;
}
@media all and (max-width: 500px) {
.relation-member-list .rm-name {
padding-right: 0;
font-size: 13px;
}
.relation-member-list .rm-like-style {
position: relative;
width: auto;
overflow: hidden;
}
.relation-member-list>li {
padding-left: 0px;
}
.relation-member-list .ui-thumb {
width: 50px;
}
.relation-member-list .info {
min-height: 62px;
margin-left: 60px;
}
}

View file

@ -0,0 +1,958 @@
@charset "utf-8";
/* -----------------------------------------------
* 마이페이지 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
/**************************************************************
기본 레이아웃
***************************************************************/
.mypageWrap {
padding: 20px 0;
}
.mypageInside {
position: relative;
}
.my-inner {
max-width: 900px;
padding: 20px;
margin: 0 auto;
}
@media all and (max-width:640px) {
.mypageWrap {
padding: 10px 0px;
}
}
/**************************************************************
캐릭터 작성
***************************************************************/
.list-character-box {
display: block;
position: relative;
margin: 10px 0;
overflow: hidden;
}
.list-character-box .item {
display: block;
position: relative;
color: #fff;
margin: 10px 0;
padding: 0;
}
.list-character-box .item a {
display: block;
position: relative;
padding: 10px 10px 10px 100px;
min-height: 100px;
box-sizing: border-box;
}
.list-character-box .item a em {
display: block;
position: absolute;
width: 80px;
height: 80px;
top: 10px;
left: 10px;
background: no-repeat 50% 50%;
background-size: cover;
}
.list-character-box .item strong {
display: block;
position: relative;
margin-bottom: 5px;
font-size: 18px;
line-height: 1.5;
font-weight: 800;
font-family: 'HeirofLight';
}
.list-character-box .item span {
display: inline-block;
font-size: 13px;
color: #fff;
}
.list-character-box .item span:after {
content: " | ";
margin: 0 4px;
opacity: .5;
}
.list-character-box .item span:last-child:after {
display: none;
}
.list-character-box .item span i {
margin-right: 5px;
}
/**************************************************************
설정
***************************************************************/
#tab_list {
display: block;
position: relative;
overflow: hidden;
box-sizing: border-box;
text-align: center;
border: none;
}
#tab_list ul {
position: relative;
z-index: 1;
}
#tab_list li {
font-size: 14px;
font-weight: 600;
padding: 5px;
}
#tab_list li a {
color: #fff;
opacity: .7
}
#tab_list li a.point,
#tab_list li a:hover {
opacity: 1;
}
#tab_list li a.point:before {
content: "《";
}
#tab_list li a.point:after {
content: "》";
}
/**************************************************************
로그 리스트
***************************************************************/
.mypage-log-list {
display: Block;
position: relative;
}
.mypage-log-list dl {
position: relative;
padding-left: 100px;
min-height: 80px;
margin: 20px 15px;
border-bottom: 1px solid rgba(255, 255, 255, .2);
}
.mypage-log-list dl dt {
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 80px;
overflow: hidden;
}
.mypage-log-list dl dt img {
max-width: 100%;
}
.mypage-log-list dl dd {
margin-left: 10px;
}
.mypage-log-list dl .comemnt-list li {
overflow: hidden;
padding-bottom: 3px;
}
.mypage-log-list dl .comemnt-list li+li {
padding-top: 3px;
border-top: 1px dashed rgba(255, 255, 255, .2);
}
.mypage-log-list dl .comemnt-list li p {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.mypage-log-list dl .comemnt-list li p.con {
opacity: .8;
}
.mypage-log-list dl .comemnt-list li p .date {
font-size: 11px;
font-family: 'Dotum';
}
@media all and (max-width:500px) {
.mypage-log-list dl {
padding-left: 0;
font-size: 12px;
}
.mypage-log-list dl dt {
position: relative;
width: auto;
text-align: center;
}
.mypage-log-list dl dd {
padding-top: 10px;
margin-left: 0;
}
}
/**************************************************************
좋아요 추가한 로그 리스트
***************************************************************/
.mypage-favorite-list {
overflow: hidden;
}
.mypage-favorite-list dl {
width: 20%;
float: left;
padding: 3px;
box-sizing: border-box;
}
.mypage-favorite-list dl dt {
display: block;
position: relative;
}
.mypage-favorite-list dl dt:before {
content: "";
display: block;
position: relative;
padding-top: 100%;
}
.mypage-favorite-list dl dt a {
display: block;
position: absolute;
top: 3px;
left: 3px;
right: 3px;
bottom: 3px;
overflow: hidden;
text-align: center;
}
.mypage-favorite-list dl dt a img {
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
.mypage-favorite-list dl dd {
margin: 0;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@media all and (max-width:820px) {
.mypage-favorite-list dl {
width: 25%;
}
}
@media all and (max-width:600px) {
.mypage-favorite-list dl {
width: 33.33%;
}
}
@media all and (max-width:450px) {
.mypage-favorite-list dl {
width: 50%;
}
}
.mypage-log-list .no-data,
.mypage-favorite-list .no-data {
text-align: center;
line-height: 150px;
}
/**************************************************************
마이페이지 캐릭터 관리
***************************************************************/
.profile-viewer {
display: block;
position: relative;
padding-left: 100px;
}
.profile-viewer .theme-box {
padding: 0;
}
.profile-viewer .body {
display: block;
position: absolute;
top: 0;
left: 0;
width: 100px;
bottom: 0;
}
.profile-viewer .body em {
display: block;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: no-repeat 50% 0% rgba(0, 0, 0, .5);
}
.profile-viewer .data {
display: block;
position: relative;
margin-left: 15px;
padding-right: 15px;
padding-bottom: 20px;
}
.profile-viewer .data>.control {
text-align: center;
margin-bottom: 20px;
border-bottom: 1px solid rgba(255, 255, 255, .5);
}
.profile-viewer .data>.control a {
display: inline-block;
vertical-align: middle;
padding: 10px 0;
color: #fff;
}
.profile-viewer .data>.control a+a {
margin-left: -4px;
}
.profile-viewer .data>.control a+a:before {
content: " · ";
margin: 0 10px;
font-size: 15px;
vertical-align: middle;
}
.profile-viewer .prof {
display: block;
position: relative;
}
.profile-viewer .prof .thumb-item {
display: block;
position: relative;
max-width: 100px;
margin: 0 auto;
transform: scale(.9);
-webkit-transform: scale(.9);
text-align: center;
}
.profile-viewer .prof .thumb-item a {
display: block;
background: rgba(0, 0, 0, .3);
border: 1px solid rgba(255, 255, 255, .3);
}
.profile-viewer .prof .thumb-item em {
display: block;
}
.profile-viewer .prof .thumb-item em img {
display: block;
}
.profile-viewer .prof .thumb-item .name {
display: block;
padding: 3px 10px;
background: #000;
color: #fff;
}
.profile-viewer .prof-data {
text-align: center;
padding: 10px 0 30px;
;
}
.profile-viewer .prof-data p {
padding-left: 0;
}
.profile-viewer .prof-data p:before {
display: none;
}
.profile-viewer .prof-data p strong {
display: block;
position: relative;
font-size: 16px;
}
.profile-viewer .prof-data p+p {
margin-top: 5px;
opacity: .7;
}
.profile-viewer .comment {
padding: 20px 0;
text-align: center;
font-size: 18px;
font-family: 'HeirofLight';
}
.profile-viewer .comment:before,
.profile-viewer .comment:after {
content: '"';
}
.profile-viewer .status-bar dd p {
padding-left: 0;
}
.profile-viewer .status-bar dd p:before {
display: none;
}
.profile-viewer .mypage-box {
padding: 10px 0;
}
.profile-viewer .no-data {
text-align: center;
opacity: .5;
padding: 50px 0;
}
@media all and (max-width:520px) {
.profile-viewer {
padding-left: 0;
}
.profile-viewer .body {
display: none;
}
.profile-viewer .tab-box-group {
margin: 0 -15px;
}
}
/** Quick Navigation **/
#character_profile {
position: relative;
padding: 20px 0 100px;
}
#character_profile #profile_menu {
display: block;
position: absolute;
top: 20px;
right: 10px;
z-index: 10;
}
#character_profile #profile_menu a {
display: block;
position: relative;
margin-bottom: 5px;
}
.relation-member-list {
margin-top: 30px;
}
.relation-box .ui-btn {
margin-top: 10px;
}
.pattern-box .inner-wrap {}
.pattern-box .inner-wrap h4 {
line-height: 1.2;
font-size: 16px;
margin-bottom: 10px;
border-left: 4px solid #fff;
padding-left: .5em;
}
@media all and (max-width:520px) {
.tbl-scroll {
overflow: auto;
}
.tbl-scroll>table {
width: 620px;
}
}
.inventory-list {
display: block;
position: relative;
overflow: hidden;
}
.inventory-list li {
display: block;
float: left;
padding: 5px;
}
.inventory-list a {
display: block;
position: relative;
width: 40px;
height: 40px;
overflow: hidden;
}
.inventory-list a img {
display: block;
position: relative;
margin: 0 auto;
}
.inventory-list a i {
display: block;
position: absolute;
right: 1px;
bottom: 1px;
background: rgba(0, 0, 0, .5);
min-width: 15px;
height: 15px;
line-height: 15px;
color: #fff;
font-size: 10px;
font-weight: 800;
padding: 0 1px;
text-align: center;
z-index: 2;
box-sizing: border-box;
border: none !important;
}
.inventory-list a i.present:before {
content: "\e99f";
font-family: 'icon';
font-weight: 400;
}
.title-list {
display: block;
position: relative;
padding: 20px 0;
}
.title-list p {
padding: 5px;
}
.title-list .item {
display: inline-block;
min-width: 25%;
padding: 5px;
box-sizing: border-box;
text-align: left;
vertical-align: middle;
}
/********************************
쪽지란
********************************/
.memo-inner {
padding: 30px 10px;
max-width: 640px;
margin: 0 auto;
min-height: 300px;
overflow: hidden;
}
.ui-list-control {
text-align: right;
padding-bottom: 20px;
}
.message-item {
display: block;
position: relative;
max-width: 90%;
width: 570px;
box-sizing: border-box;
clear: both;
margin-top: 10px;
}
.message-item.index {
max-width: 100%;
width: 100%;
}
.message-item .thumb {
display: block;
position: absolute;
top: 0;
width: 80px;
text-align: center;
}
.message-item .thumb em {
display: block;
position: relative;
padding-top: 100%;
background: no-repeat 50% 50%;
background-size: cover;
border: 2px solid #656567;
}
.message-item .thumb strong {
display: block;
padding-top: 5px;
font-size: 13px;
word-break: break-all;
}
.message-item .con {
display: block;
position: relative;
min-height: 70px;
padding: 15px;
box-sizing: border-box;
}
.message-item .con:after {
content: "";
display: block;
position: absolute;
width: 0;
height: 0;
border: 20px solid transparent;
border-top-width: 10px;
border-bottom-width: 0;
top: 0;
}
.message-item .con .txt {
font-size: 14px;
}
.message-item .con .txt a {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
word-wrap: break-word;
clear: both;
overflow: hidden;
height: 2.8em;
text-overflow: ellipsis;
color: #fff;
}
.message-item .con .control {
display: block;
margin-top: 10px;
font-size: 12px;
opacity: .7;
}
.message-item .con .control .ui-btn {
height: auto;
line-height: 1.2;
padding: 0 10px;
border-radius: 9em;
}
.message-item.you {
padding-left: 105px;
float: left;
}
.message-item.you .thumb {
left: 0;
}
.message-item.you .con {
background: rgba(103, 103, 103, .8);
border-radius: 0 10px 10px 10px;
}
.message-item.you .con:after {
border-top-color: rgba(103, 103, 103, .8);
border-top-width: 10px;
border-right-width: 0;
left: -20px;
}
.message-item.you .con .control {
text-align: right;
}
.message-item.me {
padding-right: 105px;
float: right;
margin-top: 20px;
}
.message-item.me .thumb {
right: 0;
}
.message-item.me .con {
background: rgba(62, 62, 62, .8);
border-radius: 10px 0 10px 10px;
}
.message-item.me .con:after {
border-top-color: rgba(62, 62, 62, .8);
border-left-width: 0;
right: -20px;
}
.message-item.me .con .control {
text-align: left;
}
.ui-chatting-list:after {
content: "";
display: block;
clear: both;
min-height: 200px;
}
.ui-memo-write {
border-top: 1px solid rgba(255, 255, 255, .2);
padding-top: 20px;
}
@media all and (max-width:640px) {
.message-item .thumb {
width: 60px;
}
.message-item .con {
min-height: 50px;
padding: 10px;
}
.message-item .con:after {
border-left-width: 10px;
border-right-width: 10px;
}
.message-item .con .txt {
font-size: 12px;
}
.message-item.you {
padding-left: 75px;
}
.message-item.you .con:after {
left: -10px;
}
.message-item.me {
padding-right: 75px;
}
.message-item.me .con:after {
right: -10px;
}
}
@media all and (max-width:420px) {
.message-item {
max-width: 100%;
}
.message-item.you {
padding-left: 75px;
}
.message-item.me {
padding-right: 75px;
}
}
/******************************************
관계란 스타일
*******************************************/
.relation-member-list {
position: relative;
}
.relation-member-list>li {
position: relative;
padding-left: 90px;
min-height: 120px;
margin-bottom: 20px;
}
.relation-member-list .ui-thumb {
position: absolute;
top: 0;
left: 0;
width: 80px;
overflow: hidden;
}
.relation-member-list .rm-name {
font-size: 14px;
font-weight: 800;
padding-right: 150px;
padding-left: 10px;
}
.relation-member-list .rm-like-style {
position: absolute;
right: 0;
top: 0;
width: 80px;
}
.relation-member-list .rm-like-style i {
display: block;
width: 13px;
height: 15px;
position: relative;
float: left;
margin: 0 1px;
}
.relation-member-list .rm-like-style i:before {
content: "\e9da";
font-family: 'icon';
font-style: normal;
display: block;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
font-family: 'icon';
}
.relation-member-list .memo {
font-family: 'Dotum';
padding: 10px;
margin: 5px 0;
line-height: 1.2em;
min-height: 30px;
}
.relation-member-list ol {
display: block;
position: relative;
clear: both;
text-align: right;
padding-right: 10px;
}
.relation-member-list ol li {
display: inline-block;
}
.relation-member-list ol li a.btn-log {
display: block;
position: relative;
width: 20px;
height: 20px;
margin: 0 auto;
}
.relation-member-list ol li a.btn-log:before {
content: "\e925";
font-family: 'icon';
font-size: 15px;
font-style: normal;
display: block;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
font-family: 'icon';
}
.relation-member-list .modify-box {
display: none;
}
.relation-member-list .state-modify {}
.relation-member-list .state-modify .rm-like-style,
.relation-member-list .state-modify .memo .ori-content,
.relation-member-list .state-modify ol {
display: none;
}
.relation-member-list .state-modify .modify-box {
display: block;
}
@media all and (max-width: 500px) {
.relation-member-list .rm-name {
padding-right: 0;
font-size: 13px;
}
.relation-member-list .rm-like-style {
position: relative;
width: auto;
overflow: hidden;
}
.relation-member-list>li {
padding-left: 0px;
}
.relation-member-list .ui-thumb {
width: 50px;
}
.relation-member-list .info {
min-height: 62px;
margin-left: 60px;
}
}

View file

@ -0,0 +1,185 @@
@charset "utf-8";
/* -----------------------------------------------
* 상점 디자인 스타일 정의
--------------------------------------------------
- 최초 작성일 : 2021.08.15
- 최초 작성자 : 아보카도
- 최종 수정일 : 2024.10.07
- 최종 수정자 : Amber
--------------------------------------------------*/
#shop_page {
position: relative;
min-height: 500px;
}
/*********************************
NPC
**********************************/
#shop_npc {
position: absolute;
top: 0px;
bottom: 0;
left: 0px;
width: 300px;
z-index: 1;
}
/******************************************
아이템 정보 출력
*******************************************/
#item_info {
display: block;
position: absolute;
bottom: 0px;
left: 0px;
width: 300px;
box-sizing: border-box;
z-index: 3;
}
#item_info #item_talk {}
#item_info #btn_buy {
display: block;
margin-right: -11px;
}
#item_simple_viewer {
position: relative;
}
#item_simple_viewer .item-thumb {
position: absolute;
top: 0;
left: 0;
width: 50px;
}
#item_simple_viewer .item-name {
margin-left: 60px;
min-height: 50px;
font-size: 16px;
padding: 5px 0;
font-weight: 600;
box-sizing: border-box;
}
#item_simple_viewer .item-name sup {
display: block;
margin: 0;
padding-top: 4px;
font-size: 12px;
}
#item_simple_viewer .item-content {
padding: 15px 0;
font-size: 11px;
}
/*********************************
아이템 리스트
**********************************/
#item_list_box {
position: relative;
margin-left: 350px;
box-sizing: border-box;
padding: 20px 0;
z-index: 2;
}
#shop_item_list {
display: block;
position: relative;
box-sizing: border-box;
z-index: 0;
}
#shop_item_list>ul {
display: block;
position: relative;
box-sizing: border-box;
}
#shop_item_list>ul li {
display: inline-block;
position: relative;
text-align: center;
margin-bottom: 10px;
font-size: 11px;
}
#shop_item_list li a {
display: block;
position: relative;
}
#shop_item_list li span {
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#shop_paging {
display: block;
}
#shop_paging .pg_wrap .pg_page {
border: none;
}
#shop_cate {
overflow: hidden;
padding-bottom: 20px;
}
#shop_cate ul {
display: block;
overflow: hidden;
}
#shop_cate li {
float: left;
}
/*********************************
반응형 처리
**********************************/
@media all and (max-width:640px) {
#shop_npc {
display: none;
}
#item_info {
position: fixed;
top: auto;
left: 0;
right: 0;
bottom: 0;
width: auto;
height: auto;
z-index: 9;
}
#body .fix-layout {
padding: 0;
}
#shop_page {
height: auto;
padding: 10px;
}
#item_list_box {
margin-left: 0;
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,58 @@
<?php
include_once './_common.php';
if ($is_member & !$config['cf_open']) {
goto_url(G5_URL . '/main.php');
}
/*********** Logo Data ************/
$logo = get_logo();
$logo_data = "";
if ($logo)
$logo_data .= "<img src='" . $logo . "' ";
if ($m_logo)
$logo_data .= "class='only-pc' /><img src='" . $m_logo . "' class='not-pc'";
if ($logo_data)
$logo_data .= " />";
/*********************************/
?>
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="imagetoolbar" content="no">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="title" content="<?= $g5['title'] ?>">
<meta name="keywords" content="<?= $config['cf_site_descript'] ?>">
<meta name="description" content="<?= $config['cf_site_descript'] ?>">
<meta property="og:title" content="<?= $g5['title'] ?>">
<meta property="og:description" content="<?= $config['cf_site_descript'] ?>">
<meta property="og:url" content="<?= G5_URL ?>">
<title><?= $g5['title'] ?></title>
<link rel="shortcut icon" href="<?= $config['cf_favicon'] ?>">
<link rel="icon" href="<?= $config['cf_favicon'] ?>">
<link media="all" type="text/css" rel="stylesheet" href="<?= G5_THEME_CSS_URL ?>/enter.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<div class="wrapper">
<div class="inner">
<div class="index-logo">
<a href="./main.php">
<?= $logo_data ?>
<p class="txt-default"> 홈페이지는 1920 * 1080 PC를 기준으로 제작되었으며, 크롬 브라우저 이용을 권장합니다.</p>
</a>
</div>
</div>
</div>
<script>
window.onload = function () {
$('html').addClass('on')
setTimeout(function () { $('html').addClass('active') }, 800);
};
</script>
</body>
</html>

View file

@ -0,0 +1,6 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
// 테마파일 설정 시 사용할 전용 확장 소스코드입니다.
// - 테마가 적용될 시에만 작동됩니다.

View file

@ -0,0 +1,52 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
if (G5_IS_MOBILE) {
include_once G5_THEME_MOBILE_PATH . '/group.php';
return;
}
if (!$is_admin && $group['gr_device'] == 'mobile')
alert($group['gr_subject'] . ' 그룹은 모바일에서만 접근할 수 있습니다.');
$g5['title'] = $group['gr_subject'];
include_once G5_THEME_PATH . '/head.php';
include_once G5_LIB_PATH . '/latest.lib.php';
?>
<div class="latest_wr">
<!-- 메인화면 최신글 시작 -->
<?php
// 최신글
$sql = " select bo_table, bo_subject
from {$g5['board_table']}
where gr_id = '{$gr_id}'
and bo_list_level <= '{$member['mb_level']}'
and bo_device <> 'mobile' ";
if (!$is_admin)
$sql .= " and bo_use_cert = '' ";
$sql .= " order by bo_order ";
$result = sql_query($sql);
for ($i = 0; $row = sql_fetch_array($result); $i++) {
$lt_style = "";
if ($i % 3 !== 0)
$lt_style = "margin-left:2%";
else
$lt_style = "";
?>
<div style="float:left;<?php echo $lt_style ?>" class="lt_wr">
<?php
// 이 함수가 바로 최신글을 추출하는 역할을 합니다.
// 사용방법 : latest(스킨, 게시판아이디, 출력라인, 글자수);
echo latest('theme/basic', $row['bo_table'], 6, 25);
?>
</div>
<?php
}
?>
<!-- 메인화면 최신글 -->
</div>
<?php
include_once G5_THEME_PATH . '/tail.php';

View file

@ -0,0 +1,100 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
include_once G5_PATH . '/head.sub.php';
include_once G5_LIB_PATH . '/latest.lib.php';
include_once G5_LIB_PATH . '/outlogin.lib.php';
include_once G5_LIB_PATH . '/poll.lib.php';
include_once G5_LIB_PATH . '/visit.lib.php';
include_once G5_LIB_PATH . '/connect.lib.php';
include_once G5_LIB_PATH . '/popular.lib.php';
/*********** Logo Data ************/
$logo = get_logo();
$m_logo = get_logo();
$logo_data = "";
if ($logo)
$logo_data .= "<img src='" . $logo . "' ";
if ($m_logo)
$logo_data .= "class='only-pc' /><img src='" . $m_logo . "' class='not-pc'";
if ($logo_data)
$logo_data .= " />";
/*********************************/
?>
<!-- 헤더 영역 -->
<header id="header">
<div class="fix-layout">
<!-- 로고 영역 : PC 로고 / 모바일 로고 동시 출력 - 디자인 사용을 체크하지 않을 , 제대로 출력되지 않을 있습니다. -->
<!-- 관리자 기능을 사용하지 않고 로고를 넣고 싶을 , < ? = $ log_data ? > 항목을 제거 하고 <img> 태그를 넣으세요. -->
<h1 id="logo">
<a href="<?= G5_URL ?>/main.php">
<?= $logo_data ?>
</a>
</h1>
<!-- 모바일 모드에서 메뉴를 열고 닫기 있는 버튼 -->
<a href="#gnb" id="gnb_control_box">
<img src="<?= G5_IMG_URL ?>/ico_menu_control_pannel.png" alt="메뉴열고닫기" />
</a>
<script>
$('#gnb_control_box').on('click', function() {
$('body').toggleClass('open-gnb');
return false;
});
</script>
<!-- 모바일 메뉴 열고 닫기 버튼 종료 -->
<div id="gnb">
<?php
$menu_content = get_site_content('site_menu');
if ($menu_content) {
echo $menu_content;
} else {
?>
<ul id="no_design_gnb">
<li>
<a href="<?= G5_URL ?>/member">
멤버목록
</a>
</li>
<li>
<a href="<?= G5_URL ?>/member/ready.php">
신청자목록
</a>
</li>
<li>
<a href="<?= G5_URL ?>/couple">
커플목록
</a>
</li>
<li>
<a href="<?= G5_URL ?>/shop">
상점
</a>
</li>
<li>
<a href="<?= G5_URL ?>/mypage">
마이페이지
</a>
</li>
<li>
<a href="<?= G5_BBS_URL ?>/current_connect.php">
현재접속자
</a>
</li>
</ul>
<?php include(G5_PATH . "/templete/txt.bgm.php"); ?>
<?php } ?>
</div>
</div>
</header>
<!-- // 헤더 영역 -->
<section id="body">
<div class="fix-layout">

View file

@ -0,0 +1,128 @@
<?php
// 이 파일은 새로운 파일 생성시 반드시 포함되어야 함
if (!defined('_GNUBOARD_'))
exit;
if (!isset($g5['title'])) {
$g5['title'] = $config['cf_title'];
$g5_head_title = $g5['title'];
} else {
$g5_head_title = $g5['title']; // 상태바에 표시될 제목
$g5_head_title .= " | " . $config['cf_title'];
}
// 현재 접속자
// 게시판 제목에 ' 포함되면 오류 발생
$g5['lo_location'] = addslashes($g5['title']);
if (!$g5['lo_location'])
$g5['lo_location'] = addslashes(clean_xss_tags($_SERVER['REQUEST_URI']));
$g5['lo_url'] = addslashes(clean_xss_tags($_SERVER['REQUEST_URI']));
if (strstr($g5['lo_url'], '/' . G5_ADMIN_DIR . '/') || $is_admin == 'super')
$g5['lo_url'] = '';
$is_page_login = (strstr($_SERVER["REQUEST_URI"], 'login') == "") ? false : true;
if (defined('_INDEX_')) {
echo "<script>if(parent && parent!=this) location.href='./main.php';</script>";
} ?>
<!doctype html>
<html lang="ko"
class='<?= $is_page_login ? "login" : "" ?> <?= $_COOKIE['header_close'] == 'close' ? "close-header" : "" ?>'>
<head>
<meta charset="utf-8">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<?php
if (G5_IS_MOBILE) {
echo '<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">' . PHP_EOL;
echo '<meta name="HandheldFriendly" content="true">' . PHP_EOL;
echo '<meta name="format-detection" content="telephone=no">' . PHP_EOL;
} else {
echo '<meta http-equiv="imagetoolbar" content="no">' . PHP_EOL;
echo '<meta http-equiv="X-UA-Compatible" content="IE=Edge">' . PHP_EOL;
}
if ($config['cf_add_meta'])
echo $config['cf_add_meta'] . PHP_EOL;
?>
<?php if ($config['cf_site_img']) { ?>
<link rel="image_src" href="<?= $config['cf_site_img'] ?>" />
<?php } ?>
<meta name="description" content="<?= $config['cf_site_descript'] ?>" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:url" content="<?= G5_URL ?>" />
<meta name="twitter:title" content="<?php echo $g5_head_title; ?>" />
<meta name="twitter:description" content="<?= $config['cf_site_descript'] ?>" />
<?php if ($config['cf_site_img']) { ?>
<meta name="twitter:image" content="<?= $config['cf_site_img'] ?>" />
<?php } ?>
<title><?php echo $g5_head_title; ?></title>
<?php
if (defined('G5_IS_ADMIN')) {
echo '<link rel="stylesheet" href="' . G5_ADMIN_URL . '/css/admin.css" type="text/css">' . PHP_EOL;
echo '<link rel="stylesheet" href="' . G5_ADMIN_URL . '/css/admin.layout.css" type="text/css">' . PHP_EOL;
} else {
echo '<link rel="stylesheet" href="' . G5_THEME_CSS_URL . '/default.css" type="text/css">' . PHP_EOL;
if (!$config['cf_7']) {
echo '<link rel="stylesheet" href="' . G5_DATA_URL . '/css/_design.config.css" type="text/css" />';
}
echo '<link rel="stylesheet" href="' . G5_THEME_CSS_URL . '/style.css" type="text/css">' . PHP_EOL;
}
?>
<?php if ($config['cf_favicon']) { ?>
<link rel="shortcut icon" href="<?= $config['cf_favicon'] ?>" type="image/x-icon">
<link rel="icon" href="<?= $config['cf_favicon'] ?>" type="image/x-icon">
<?php } ?>
<!--[if lte IE 8]>
<script src="<?php echo G5_JS_URL ?>/html5.js"></script>
<![endif]-->
<script>
// 자바스크립트에서 사용하는 전역변수 선언
var g5_url = "<?php echo G5_URL ?>";
var g5_bbs_url = "<?php echo G5_BBS_URL ?>";
var g5_is_member = "<?php echo isset($is_member) ? $is_member : ''; ?>";
var g5_is_admin = "<?php echo isset($is_admin) ? $is_admin : ''; ?>";
var g5_is_mobile = "<?php echo G5_IS_MOBILE ?>";
var g5_bo_table = "<?php echo isset($bo_table) ? $bo_table : ''; ?>";
var g5_sca = "<?php echo isset($sca) ? $sca : ''; ?>";
var g5_editor = "<?php echo ($config['cf_editor'] && $board['bo_use_dhtml_editor']) ? $config['cf_editor'] : ''; ?>";
var g5_cookie_domain = "<?php echo G5_COOKIE_DOMAIN ?>";
<?php if (defined('G5_IS_ADMIN')) { ?>
var g5_admin_url = "<?php echo G5_ADMIN_URL; ?>";
<?php } ?>
</script>
<?php if (defined('G5_IS_ADMIN')) { ?>
<script src="<?php echo G5_JS_URL ?>/jquery-1.8.3.min.js"></script>
<?php } else { ?>
<script src="<?php echo G5_JS_URL ?>/jquery-1.12.3.min.js"></script>
<?php } ?>
<script src="<?php echo G5_JS_URL ?>/jquery.cookie.js"></script>
<script src="<?php echo G5_JS_URL ?>/jquery.rwdImageMaps.js"></script>
<script src="<?php echo G5_JS_URL ?>/common.js"></script>
<script src="<?php echo G5_JS_URL ?>/wrest.js?ver=<?php echo G5_JS_VER; ?>"></script>
<?php
if (G5_IS_MOBILE) {
echo '<script src="' . G5_JS_URL . '/modernizr.custom.70111.js"></script>' . PHP_EOL; // overflow scroll 감지
}
if (!defined('G5_IS_ADMIN'))
echo $config['cf_add_script'];
?>
<script>
if (!parent || parent == this) $('html').addClass('single');
</script>
</head>
<body>

View file

@ -0,0 +1,36 @@
<?php
include_once './_common.php';
define('_INDEX_', true);
if (G5_IS_MOBILE) {
include_once G5_PATH . '/main.php';
exit;
}
include_once './head.sub.php';
add_stylesheet('<link rel="stylesheet" href="' . G5_THEME_CSS_URL . '/index.css">', 0);
?>
<?php if ($config['cf_bgm']) { // 배경음악 출력부분 ?>
<div id="site_bgm_box">
<iframe src="./bgm.php?action=play" name="bgm_frame" id="bgm_frame" border="0" frameborder="0" marginheight="0"
marginwidth="0" topmargin="0" scrolling="no" allowTransparency="true"></iframe>
</div>
<?php } ?>
<!-- 콘텐츠 시작 -->
<div id="wrapper">
<iframe src="./main.php" name="frm_main" id="main" border="0" frameborder="0" marginheight="0" marginwidth="0"
topmargin="0" scrolling="auto" allowTransparency="true"></iframe>
</div>
<script>
$(document.body).on("keydown", this, function (event) {
if (event.keyCode == 116) {
document.getElementById('main').contentDocument.location.reload(true);
return false;
}
});
</script>
<?php
include_once G5_PATH . '/tail.sub.php';
?>

View file

@ -0,0 +1,52 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
?>
<div class="info">
<div class="ui-thumb">
<img src="<?= $in['it_img'] ?>" />
</div>
</div>
<div class="text">
<p class="title">
<?= $in['it_name'] ?>
<span><?= number_format($in['it_sell']) ?><?= $config['cf_money_pice'] ?></span>
</p>
<div class="item-content-box">
<div class="default">
<?= $in['it_content'] ?>
</div>
<?php if ($in['it_content2']) { ?>
<div class="effect">
<?= $in['it_content2'] ?>
</div>
<?php } ?>
<?php if ($in['se_ch_name']) { ?>
<div class="memo">
<?php if ($in['in_memo']) { ?>
<p><?= $in['in_memo'] ?></p><?php } ?>
<p style="text-align: right;">By. <?= $in['se_ch_name'] ?></p>
</div>
<?php } ?>
</div>
</div>
<div class="control-box">
<?php if ($is_mine) { ?>
<ul>
<?php if ($in['it_use_sell']) { ?>
<li><a href="javascript:fn_inven_link_event('<?= $in['in_id'] ?>', 'sell');" data-idx="<?= $in['in_id'] ?>"
data-type="sell" class="ui-style-btn">판매하기</a></li>
<?php } ?>
<?php if ($in['it_use_able']) { ?>
<li><a href="javascript:fn_inven_link_event('<?= $in['in_id'] ?>', 'use');" data-idx="<?= $in['in_id'] ?>"
data-type="use" class="ui-style-btn">사용하기</a></li>
<?php } ?>
<?php if (!$in['it_has']) { ?>
<li><a href="javascript:fn_inven_link_event('<?= $in['in_id'] ?>', 'take');" data-idx="<?= $in['in_id'] ?>"
data-type="take" class="ui-style-btn">선물하기</a></li>
<?php } ?>
</ul>
<?php } ?>
</div>

View file

@ -0,0 +1,32 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
?>
<ul class="inventory-list">
<?php
for ($i = 0; $i < count($inven_list); $i++) { ?>
<li class="box-line bak">
<?php if ($inven_list[$i]['in_id']) { ?>
<a href="#<?= $inven_list[$i]['in_id'] ?>" class="inven-open-popup" data-idx="<?= $inven_list[$i]['in_id'] ?>"
data-type="">
<img src="<?= $inven_list[$i]['it_img'] ?>" />
<?php if ($inven_list[$i]['cnt'] > 1) { ?>
<i class="count"><?= $inven_list[$i]['cnt'] ?></i>
<?php } ?>
<?php if ($inven_list[$i]['se_ch_id'] != '') { ?>
<i class="present"></i>
<?php } ?>
</a>
<?php } ?>
</li>
<?php }
if ($i == 0) {
?>
<li class="no-data">
보유중인 아이템이 없습니다.
</li>
<?php } ?>
</ul>

View file

@ -0,0 +1,16 @@
<?php
include_once './_common.php';
define('_MAIN_', true);
include_once G5_PATH . '/head.php';
add_stylesheet('<link rel="stylesheet" href="' . G5_THEME_CSS_URL . '/main.css">', 0);
include_once G5_PATH . "/intro.php";
?>
THEME BASIC MAIN
<?php
include_once G5_PATH . '/tail.php';
?>

View file

@ -0,0 +1,53 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
add_stylesheet('<link rel="stylesheet" href="' . G5_CSS_URL . '/member.css">', 0);
?>
<div class="memberWrap">
<?php for ($i = 0; $i < count($list); $i++) {
$ch_list = $list[$i];
if ($side['si_name']) {
echo "<div class='title'>{$side['si_name']}</div>";
}
?>
<div class="member-box">
<ul class="member-list">
<?php for ($k = 0; $k < count($ch_list); $k++) {
$ch = $ch_list[$k];
?>
<li>
<div class="item theme-box">
<div class="ui-thumb">
<a href="./viewer.php?ch_id=<?= $ch['ch_id'] ?>">
<?php if ($ch['ch_thumb']) { ?>
<img src="<?= $ch['ch_thumb'] ?>" />
<?php } ?>
</a>
</div>
<div class="ui-profile">
<a href="<?= G5_BBS_URL ?>/memo_form.php?me_recv_mb_id=<?= $ch['mb_id'] ?>" class='send_memo'>
<strong><?= $ch['ch_name'] ?></strong>
</a>
</div>
</div>
</li>
<?php
}
if ($k == 0) {
echo "<li class='no-data'>등록된 멤버가 없습니다.</li>";
}
?>
</ul>
</div>
<?php } ?>
</div>
<script>
$('.send_memo').on('click', function () {
var target = $(this).attr('href');
window.open(target, 'memo', "width=500, height=300");
return false;
});
</script>

View file

@ -0,0 +1,91 @@
<?php
/**
* @var array $character_list
*/
if (!defined('_GNUBOARD_'))
exit;
add_stylesheet('<link rel="stylesheet" href="' . G5_CSS_URL . '/member.css">', 0);
?>
<nav id="submenu" class="scroll-fix">
<ul>
<?= $side_link ?>
</ul>
</nav>
<div id="subpage">
<div class="searc-sub-box" style="padding: 10px 5px;">
<div class="ui-search-box">
<form name='frmSearch' method='get'>
<fieldset class="sch_category">
<select name="sfl">
<option value="mb_name" <?= $sfl == 'mb_name' ? "selected" : "" ?>>오너명</option>
<option value="ch_name" <?= $sfl == 'ch_name' ? "selected" : "" ?>>캐릭명</option>
<?php if (count($ch_ar) > 0) {
for ($i = 0; $i < count($ch_ar); $i++) {
?>
<option value="arcode||<?= $ch_ar[$i]['ar_code'] ?>" <?= $sfl == 'arcode||' . $ch_ar[$i]['ar_code'] ? "selected" : "" ?>><?= $ch_ar[$i]['ar_name'] ?></option>
<?php }
} ?>
</select>
</fieldset>
<fieldset class="sch_text">
<input type="text" name="stx" value="<?= $stx ?>" />
</fieldset>
<fieldset class="sch_button">
<input type="submit" value="Search" class="ui-btn" />
</fieldset>
</form>
</div>
</div>
<div class="ui-page txt-center">
<?= $write_pages ?>
</div>
<ul class="ready-member-list">
<?php
for ($i = 0; $i < count($character_list); $i++) {
$ch = $character_list[$i];
?>
<li>
<div class="item theme-box">
<div class="ui-thumb">
<a href="./viewer.php?ch_id=<?= $ch['ch_id'] ?>">
<?php if ($ch['ch_thumb']) { ?>
<img src="<?= $ch['ch_thumb'] ?>" />
<?php } ?>
</a>
</div>
<div class="ui-profile">
<p class="name">
<a href="./viewer.php?ch_id=<?= $ch['ch_id'] ?>">
<strong>[<?= $ch['ch_state'] ?>] <?= $ch['ch_name'] ?></strong>
</a>
</p>
<span>
<?php
if ($config['cf_side_title']) {
echo get_side_name($ch['ch_side']);
}
if ($config['cf_class_title']) {
if ($config['cf_side_title']) {
echo " / ";
}
echo get_class_name($ch['ch_class']);
}
?>
</span>
<span class="owner">
<?= get_member_name($ch['mb_id']) ?>
</span>
</div>
</div>
</li>
<?php
}
if ($i == 0) {
echo "<li class='empty'>대기자가 없습니다.</li>";
}
?>
</ul>
<div class="ui-page">
<?= $write_pages ?>
</div>
</div>

View file

@ -0,0 +1,276 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
add_stylesheet('<link rel="stylesheet" href="' . G5_CSS_URL . '/member.css">', 0);
?>
<div id="character_profile">
<nav id="profile_menu">
<?php if ($article['ad_use_closet'] && $article['ad_use_body']) { ?>
<a href="<?= G5_URL ?>/member/closet.php?ch_id=<?= $ch['ch_id'] ?>"
onclick="window.open(this.href, 'big_viewer', 'width=800 height=800 menubar=no status=no toolbar=no location=no scrollbars=yes resizable=yes'); return false;"
class="ui-btn ico point camera circle big">
옷장보기
</a>
<?php } ?>
<?php if ($article['ad_use_exp']) { ?>
<a href="<?= G5_URL ?>/member/exp.php?ch_id=<?= $ch['ch_id'] ?>"
onclick="popup_window(this.href, 'exp', 'width=400, height=500'); return false;"
class="ui-btn ico point exp circle big">
경험치 내역 보기
</a>
<?php } ?>
</nav>
<!-- 캐릭터 비쥬얼 (이미지) 출력 영역 -->
<div class="visual-area">
<?php if ($article['ad_use_body'] && $ch['ch_body']) { ?>
<div id="character_body">
<img src="<?= $ch['ch_body'] ?>" alt="캐릭터 전신" />
</div>
<?php } ?>
<?php if ($article['ad_use_head'] && $ch['ch_head']) { ?>
<div id="character_head">
<img src="<?= $ch['ch_head'] ?>" alt="캐릭터 흉상" />
</div>
<?php } ?>
</div>
<!-- //캐릭터 비쥬얼 (이미지) 출력 영역 -->
<!-- 캐릭터 기본정보 출력 영역 -->
<table class="theme-form">
<colgroup>
<col style="width: 110px;">
<col>
</colgroup>
<tbody>
<?php if ($article['ad_use_name']) { ?>
<tr>
<th scope="row"><?= $article['ad_text_name'] ?></th>
<td>
<?php echo $ch['ch_name'] ?>
</td>
</tr>
<?php } ?>
<?php if ($config['cf_side_title']) {
// 소속 정보 출력
?>
<tr>
<th><?= $config['cf_side_title'] ?></th>
<td>
<?= get_side_name($ch['ch_side']) ?>
</td>
</tr>
<?php } ?>
<?php if ($config['cf_class_title']) {
// 종족 정보 출력
?>
<tr>
<th><?= $config['cf_class_title'] ?></th>
<td>
<?= get_class_name($ch['ch_class']) ?>
</td>
</tr>
<?php } ?>
<?php if ($article['ad_use_rank']) {
// 랭킹정보 출력
?>
<tr>
<th scope="row"><?= $config['cf_rank_name'] ?></th>
<td>
<?php echo get_rank_name($ch['ch_rank']); ?>
</td>
</tr>
<?php } ?>
<?php if ($article['ad_use_exp']) {
// 경험치 정보 출력
?>
<tr>
<th scope="row"><?= $config['cf_exp_name'] ?></th>
<td>
<?= $ch['ch_exp'] ?>
<?= $config['cf_exp_pice'] ?>
</td>
</tr>
<?php } ?>
<?php for ($i = 0; $i < count($ch_ar); $i++) {
// 추가 프로필 항목 출력
$ar = $ch_ar[$i];
$key = $ar['ar_code'];
?>
<tr>
<th>
<?= $ar['ar_name'] ?>
</th>
<?php
if ($ar['ar_type'] == 'file' || $ar['ar_type'] == 'url') {
?>
<td>
<img src="<?= $ch[$key] ?>" />
</td>
<?php } else { ?>
<td>
<?php
if ($ar['ar_type'] == 'textarea')
echo nl2br($ch[$key]);
else
echo $ch[$key];
if ($ar['ar_type'] != 'textarea' && $ar['ar_type'] != 'select')
echo $ar['ar_text'];
?>
</td>
<?php } ?>
</tr>
<?php } ?>
</tbody>
</table>
<!-- // 캐릭터 기본정보 출력 영역 -->
<?php if ($article['ad_use_status']) { // 스탯 설정 ?>
<hr class="padding" />
<h3>
STATUS
<span style="float:right;">
<em class="txt-point" data-type="point_space"><?= get_space_status($ch['ch_id']) ?></em> / <?= $ch['ch_point'] ?>
</span>
</h3>
<div class="theme-box">
<div class="status-bar">
<?php for ($i = 0; $i < count($status); $i++) {
$status[$i]['has'] = $status[$i]['has'] ? $status[$i]['has'] : $status[$i]['min'];
$status_percent = $status[$i]['max'] ? $status[$i]['has'] / $status[$i]['max'] * 100 : 0;
$mine_percent = $status[$i]['max'] ? $status[$i]['now'] / $status[$i]['max'] * 100 : 0;
$resent_use_point += $status[$i]['has'];
$sub_text = "";
if ($status[$i]['drop'])
$sub_text = "(" . $status[$i]['now'] . ")";
?>
<dl>
<dt><?= $status[$i]['name'] ?></dt>
<dd>
<p>
<i><?= $status[$i]['has'] ?><?= $sub_text ?></i>
<span style="width: <?= $status_percent ?>%;"></span>
<sup style="width: <?= $mine_percent ?>%;"></sup>
</p>
</dd>
</dl>
<?php } ?>
</div>
</div>
<?php } ?>
<?php if ($article['ad_use_title']) { // 타이틀 설정 ?>
<hr class="padding" />
<h3>
TITLE
</h3>
<div class="theme-box">
<div class="title-list">
<?php for ($i = 0; $i < count($title); $i++) { ?>
<img src="<?= $title[$i]['ti_img'] ?>" />
<?php }
if ($i == 0) {
echo "<div class='no-data'>보유중인 타이틀이 없습니다.</div>";
}
?>
</div>
</div>
<?php } ?>
<?php if ($article['ad_use_inven']) { // 인벤토리 출력 ?>
<hr class="padding" />
<h3>
INVENTORY
<?php if ($article['ad_use_money']) { // 소지금 사용시 현재 보유 중인 소지금 출력 ?>
<span style="float:right;">
<em class="txt-point"><?= $mb['mb_point'] ?></em><?= $config['cf_money_pice'] ?>
</span>
<?php } ?>
</h3>
<div class="theme-box">
<?php include(G5_PATH . "/inventory/list.inc.php"); ?>
</div>
<?php } ?>
<?php if ($ch['ch_state'] == '승인') { // 관계란 출력, 승인된 캐릭터만 출력됩니다. ?>
<hr class="padding" />
<h3>STORY</h3>
<div class="relation-box">
<ul class="relation-member-list">
<?php
for ($i = 0; $i < count($relation); $i++) {
$re_ch = get_character($relation[$i]['re_ch_id']);
if ($relation[$i]['rm_memo'] == '') {
continue;
}
?>
<li>
<div class="ui-thumb">
<a href="<?= G5_URL ?>/member/viewer.php?ch_id=<?= $re_ch['ch_id'] ?>" target="_blank">
<img src="<?= $re_ch['ch_thumb'] ?>" />
</a>
</div>
<div class="info">
<div class="rm-name">
<?= $re_ch['ch_name'] ?>
</div>
<div class="rm-like-style">
<p>
<?php for ($j = 0; $j < 5; $j++) {
$class = "";
$style = "";
if ($j < $relation[$i]['rm_like']) {
$class = "txt-point";
} else {
$style = "opacity: 0.2;";
}
echo "<i class='{$class}' style='{$style}'></i>";
} ?>
</p>
</div>
</div>
<div class="memo theme-box">
<?= nl2br($relation[$i]['rm_memo']) ?>
</div>
<ol>
<?php
$relation[$i]['rm_link'] = nl2br($relation[$i]['rm_link']);
$link_list = explode('<br />', $relation[$i]['rm_link']);
for ($j = 0; $j < count($link_list); $j++) {
$r_row = $link_list[$j];
if (!$r_row)
continue;
?>
<li>
<a href="<?= $r_row ?>" class="btn-log" target="_blank"></a>
</li>
<?php } ?>
</ol>
</li>
<?php } ?>
</ul>
</div>
<?php } ?>
<div class="ui-btn point small full">
오너 : <?= $mb['mb_name'] ?>
</div>
<hr class="padding" />
<hr class="padding" />
</div>

View file

@ -0,0 +1,8 @@
Theme Name: 기본(커뮤니티용)
Theme URI:
Maker: Avocado
Maker URI: https://avocado-edition-rout.postype.com/
Version: 1.0.0
Detail: 기본 테마는 기본적인 부분만을 제공하는 테마입니다.
License: GNU LESSER GENERAL PUBLIC LICENSE Version 2.1
License URI: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View file

@ -0,0 +1,39 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
?>
<?php
if ($item['sh_id']) {
// 상품 진열 정보가 있을 경우
?>
<div class="type-item theme-box">
<div id="item_talk">
<div id="item_simple_viewer">
<div id="buy_item_data">
<div class="item-thumb">
<img src="<?= $item['it_img'] ?>" />
</div>
<div class="item-name"><?= $item['it_name'] ?> <sup><?= $money ?></sup></div>
<div class="item-content"><?= $item['it_content'] ?></div>
</div>
</div>
<div class="item_talk"><?= $item['sh_content'] ?></div>
<br />
</div>
<?php if ($character['ch_id'] && $character['ch_state'] == '승인') { ?>
<a href="javascript:fn_buy_item('<?= $item['sh_id'] ?>');" id="btn_buy" class="ui-btn full point">
구매하기
</a>
<?php } ?>
</div>
<?php } else {
// 상품 진열 정보가 없을 경우
?>
<div id="default_talk">
<p>
오류가 발생했습니다. 다시 한번 선택해 주시길 바랍니다.
</p>
</div>
<?php } ?>

View file

@ -0,0 +1,8 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
?>
<div id="default_talk">
<p><?= $msg ?></p>
</div>

View file

@ -0,0 +1,59 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
add_stylesheet('<link rel="stylesheet" href="' . G5_THEME_CSS_URL . '/shop.css">', 0);
?>
<div id="shop_page">
<div id="shop_npc">
<img src="<?= G5_IMG_URL ?>/shop/npc.png" />
</div>
<div id="item_info">
<div id="default_talk"></div>
</div>
<div id="item_list_box">
<div id="shop_cate" class="ajax-link">
<ul>
<?php for ($i = 0; $i < count($shop_cate); $i++) { ?>
<li>
<a href="?cate=<?= $shop_cate[$i] ?>"
class='ui-btn <?= $cate == $shop_cate[$i] ? 'point' : '' ?>'><?= $shop_cate[$i] ?></a>
</li>
<?php } ?>
</ul>
</div>
<div id="shop_item_list">
<ul>
<?php for ($i = 0; $i < count($shop_list); $i++) {
$shop = $shop_list[$i];
?>
<li>
<a href="javascript:view_shop_item('<?= $shop['sh_id'] ?>');">
<img src="<?= $shop['item']['it_img'] ?>" />
<span><?= $shop['item']['it_name'] ?></span>
</a>
</li>
<?php } ?>
</ul>
<div id="shop_paging" class="ajax-link">
<?= $write_pages ?>
</div>
</div>
</div>
</div>
<script>
function view_shop_item_complete() {
// 아이템 상세 팝업 창 실행 종료 후 실행할 코드
};
function view_shop_item_buy() {
// 아이템 구매 완료 후 실행할 코드
};
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

View file

@ -0,0 +1,337 @@
<?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 } ?>
<!-- } 게시판 목록 -->

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,340 @@
<?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"></div>
<div class="profile_info_ct">
<span class="sound_only">작성자</span>
<strong><?php echo $view['name'] ?><?php if ($is_ip_view) {
echo "&nbsp;($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 . '&amp;' . $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 . '&amp;' . $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>
<!-- } 게시글 읽기 -->

View file

@ -0,0 +1,346 @@
<?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 . '&amp;c_id=' . $comment_id . '&amp;w=c#bo_vc_w';
$c_edit_href = $comment_common_url . '&amp;c_id=' . $comment_id . '&amp;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"></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 (!($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>

View file

@ -0,0 +1,271 @@
<?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>
<!-- } 게시물 작성/수정 -->

View file

@ -0,0 +1,18 @@
<?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>

View file

@ -0,0 +1,33 @@
@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
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,63 @@
<?php
if (!defined("_GNUBOARD_"))
exit;
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="' . $outlogin_skin_url . '/style.css">', 0);
?>
<!-- 로그인 아웃로그인 시작 { -->
<section id="ol_before" class="ol">
<div id="ol_be_cate">
<h2><span class="sound_only">회원</span>로그인</h2>
<a href="<?php echo G5_BBS_URL ?>/register.php" class="join">회원가입</a>
</div>
<form name="foutlogin" action="<?php echo $outlogin_action_url ?>" onsubmit="return fhead_submit(this);" method="post"
autocomplete="off">
<fieldset>
<div class="ol_wr">
<input type="hidden" name="url" value="<?php echo $outlogin_url ?>">
<label for="ol_id" id="ol_idlabel" class="sound_only">회원아이디<strong>필수</strong></label>
<input type="text" id="ol_id" name="mb_id" required maxlength="20" placeholder="아이디">
<label for="ol_pw" id="ol_pwlabel" class="sound_only">비밀번호<strong>필수</strong></label>
<input type="password" name="mb_password" id="ol_pw" required maxlength="20" placeholder="비밀번호">
<input type="submit" id="ol_submit" value="로그인" class="btn_b02">
</div>
<div class="ol_auto_wr">
<div id="ol_auto" class="chk_box">
<input type="checkbox" name="auto_login" value="1" id="auto_login" class="selec_chk">
<label for="auto_login" id="auto_login_label"><span></span>자동로그인</label>
</div>
<div id="ol_svc">
<a href="<?php echo G5_BBS_URL ?>/password_lost.php" id="ol_password_lost">정보찾기</a>
</div>
</div>
</fieldset>
</form>
</section>
<script>
jQuery(function ($) {
var $omi = $('#ol_id'),
$omp = $('#ol_pw'),
$omi_label = $('#ol_idlabel'),
$omp_label = $('#ol_pwlabel');
$omi_label.addClass('ol_idlabel');
$omp_label.addClass('ol_pwlabel');
$("#auto_login").click(function () {
if ($(this).is(":checked")) {
if (!confirm("자동로그인을 사용하시면 다음부터 회원아이디와 비밀번호를 입력하실 필요가 없습니다.\n\n공공장소에서는 개인정보가 유출될 수 있으니 사용을 자제하여 주십시오.\n\n자동로그인을 사용하시겠습니까?"))
return false;
}
});
});
function fhead_submit(f) {
if ($(document.body).triggerHandler('outlogin1', [f, 'foutlogin']) !== false) {
return true;
}
return false;
}
</script>
<!-- } 로그인 아웃로그인 -->

View file

@ -0,0 +1,55 @@
<?php
if (!defined("_GNUBOARD_"))
exit;
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="' . $outlogin_skin_url . '/style.css">', 0);
?>
<!-- 로그인 아웃로그인 시작 { -->
<section id="ol_after" class="ol">
<header id="ol_after_hd">
<h2>나의 회원정보</h2>
<span class="profile_img">
</span>
<strong><?php echo $nick ?>님</strong>
<a href="<?php echo G5_BBS_URL ?>/member_confirm.php?url=register_form.php" id="ol_after_info" title="정보수정">정보수정</a>
<?php if ($is_admin == 'super' || $is_auth) { ?><a href="<?php echo correct_goto_url(G5_ADMIN_URL); ?>"
class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span
class="sound_only">관리자</span></a><?php } ?>
</header>
<ul id="ol_after_private">
<li>
<a href="<?php echo G5_BBS_URL ?>/point.php" target="_blank" id="ol_after_pt" class="win_point">
<i class="fa fa-database" aria-hidden="true"></i>포인트
<strong><?php echo $point; ?></strong>
</a>
</li>
<li>
<a href="<?php echo G5_BBS_URL ?>/memo.php" target="_blank" id="ol_after_memo" class="win_memo">
<i class="fa fa-envelope-o" aria-hidden="true"></i><span class="sound_only"> 읽은 </span>쪽지
<strong><?php echo $memo_not_read; ?></strong>
</a>
</li>
<li>
<a href="<?php echo G5_BBS_URL ?>/scrap.php" target="_blank" id="ol_after_scrap" class="win_scrap">
<i class="fa fa-thumb-tack" aria-hidden="true"></i>스크랩
<strong class="scrap"><?php echo $mb_scrap_cnt; ?></strong>
</a>
</li>
</ul>
<footer>
<a href="<?php echo G5_BBS_URL ?>/logout.php" id="ol_after_logout"><i class="fa fa-sign-out" aria-hidden="true"></i>
로그아웃</a>
</footer>
</section>
<script>
// 탈퇴의 경우 아래 코드를 연동하시면 됩니다.
function member_leave() {
if (confirm("정말 회원에서 탈퇴 하시겠습니까?"))
location.href = "<?php echo G5_BBS_URL ?>/member_confirm.php?url=member_leave.php";
}
</script>
<!-- } 로그인 아웃로그인 -->

View file

@ -0,0 +1,370 @@
@charset "utf-8";
/* 아웃로그인 스킨 */
.ol {
position: relative;
border: 1px solid #dde7e9;
margin-bottom: 15px;
border-radius: 3px
}
.ol h2 {
width: 117px;
float: left;
padding: 15px 0;
text-align: center
}
.ol .join {
width: 116px;
float: left;
padding: 15px 0;
text-align: center;
background: #f7f7f7;
color: #6e6e6e
}
.ol #ol_be_cate:after {
display: block;
visibility: hidden;
clear: both;
content: ""
}
.ol form {
padding: 20px
}
.ol a.btn_admin {
display: inline-block;
padding: 0 10px;
height: 25px;
text-decoration: none;
line-height: 25px;
vertical-align: middle
}
/* 관리자 전용 버튼 */
.ol a.btn_admin:focus,
.ol a.btn_admin:hover {
text-decoration: none
}
.ol .login-sns {
padding-bottom: 0px
}
#ol_before {}
#ol_before:after {
display: block;
visibility: hidden;
clear: both;
content: ""
}
#ol_before .ol_wr {
position: relative;
margin-bottom: 5px
}
#ol_id {
display: block;
width: 100%;
border: 1px solid #d0d3db;
padding: 0 10px;
height: 35px;
margin-bottom: 5px;
border-radius: 3px
}
#ol_pw {
display: block;
width: 100%;
border: 1px solid #d0d3db;
padding: 0 10px;
height: 35px;
margin-bottom: 5px;
border-radius: 3px
}
#ol_submit {
width: 100%;
height: 35px;
background: #3a8afd;
border-left: 1px solid #ccc;
color: #fff;
font-weight: bold;
font-size: 1.167em;
border-radius: 3px
}
#ol_svc {
float: right;
line-height: 20px
}
#ol_svc a {
display: inline-block;
border: 1px solid #d5d9dd;
color: #3a8afd;
border-radius: 2px;
padding: 2px 5px
}
#ol_auto {
float: left;
line-height: 20px;
margin-top: 5px
}
#ol_auto label {
color: #555;
vertical-align: baseline
}
#ol_auto input {
width: 13px;
height: 13px
}
.ol_auto_wr:after {
display: block;
visibility: hidden;
clear: both;
content: ""
}
#sns_login {
margin-top: 0 !important;
border-top: 0 !important
}
#sns_login h3 {
position: absolute;
font-size: 0;
line-height: 0;
overflow: hidden
}
#ol_after {}
#ol_after_hd {
position: relative;
padding: 10px;
padding-left: 80px;
height: 80px
}
#ol_after_hd strong {
display: block;
margin: 5px 0 10px
}
#ol_after_hd .profile_img {
position: absolute;
top: 15px;
left: 15px;
display: inline-block
}
#ol_after_hd .profile_img img {
border: 1px solid #bbb;
border-radius: 50%;
width: 50px;
height: 50px
}
#ol_after_hd .profile_img a {
text-align: center;
font-size: 17px;
width: 30px;
line-height: 30px;
color: #777
}
#ol_after_info {
display: inline-block;
height: 28px;
line-height: 22px;
border: 1px solid #d5d9dd;
color: #3a8afd;
border-radius: 2px;
padding: 2px 5px
}
#ol_after h2 {
margin: 0;
padding: 0;
width: 1px;
height: 1px;
font-size: 0;
line-height: 0;
overflow: hidden
}
#ol_after_hd .btn_admin {
border-radius: 3px;
height: 28px;
line-height: 28px;
vertical-align: baseline
}
#ol_after_hd .btn_b04 {
line-height: 23px;
padding: 0 5px
}
#ol_after_private {
zoom: 1
}
#ol_after_private:after {
display: block;
visibility: hidden;
clear: both;
content: ""
}
#ol_after_private li {
text-align: left;
position: relative;
text-align: left
}
#ol_after_private li:first-child a {
border-left: 0
}
#ol_after_private a {
display: block;
color: #465168;
line-height: 18px;
padding: 10px 10px 10px 20px
}
#ol_after_private a strong {
display: inline-block;
float: right;
max-width: 87px;
overflow: hidden;
white-space: nowrap;
text-overflow: clip;
color: #3a8afd;
padding: 0 5px;
border-radius: 15px;
font-size: 0.92em
}
#ol_after_private a:hover strong {
background: #4b8bff
}
#ol_after_private li a:hover {
color: #4b8bff;
background: #f7f7f7
}
#ol_after_private li a:hover:after {
position: absolute;
left: -1px;
top: 0;
width: 2px;
height: 38px;
background: #3a8afd;
content: ""
}
#ol_after_private li i {
width: 25px;
color: #8c9eb0;
margin-right: 5px
}
#ol_after_private li:hover i {
color: #3a8afd
}
#ol_after_private .win_point:hover strong {
background: #37bc9b;
color: #fff
}
#ol_after_private .win_memo:hover strong {
background: #8cc152;
color: #fff
}
#ol_after_private .win_scrap:hover strong {
background: #ff8b77;
color: #fff
}
#ol_after_logout {
text-align: center;
font-weight: bold;
display: block;
padding: 15px 0;
color: #a0a0a1;
border-top: 1px solid #dde7e9
}
#ol_after_logout:hover {
color: #3c8bfd
}
#ol_after_memo {
margin-right: 1px
}
#ol_after_pt {
margin-right: 1px
}
.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 {
padding-left: 20px;
color: #676e70
}
.chk_box input[type="checkbox"]+label:hover {
color: #2172f8
}
.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
}

View file

@ -0,0 +1,36 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
?>
<hr class="padding" />
</div>
</section>
<a href="#header" id="goto_top" class="scroll-fix">
<img src="<?= G5_IMG_URL ?>/btn_top.png" />
</a>
<script>
$('#goto_top').click(function () {
$('body,html').animate({
scrollTop: 0
}, 800);
return false;
});
</script>
<script src="<?php echo G5_JS_URL ?>/jquery.flexslider.js"></script>
<script src="<?php echo G5_JS_URL ?>/_custom.js"></script>
<?php
if ($is_member) {
include_once G5_PATH . "/ajax/memo_call.php";
include_once G5_PATH . "/ajax/board_call.php";
}
include_once G5_PATH . "/ajax/inventory_popup.php";
?>
<?php
include_once G5_PATH . "/tail.sub.php";
?>

View file

@ -0,0 +1,17 @@
<?php
if (!defined('_GNUBOARD_'))
exit;
unset($ch);
unset($mb);
unset($row);
unset($row2);
unset($character);
unset($member);
?>
</body>
</html>
<?php echo html_end(); // HTML 마지막 처리 함수 : 반드시 넣어주시기 바랍니다. ?>