그누보드 최신버전 (5.1.1) 살펴보기 - bbs/board.php (1)
그 외의 부분은 비밀글 열람에 관한 체크와 조회수 증가에 대한 부분입니다.
bbs/board.php 는 게시판의 리스트와 내용보기에 사용됩니다.
common.php 에서 생성된 $write 배열에 값이 있을 경우에는 내용보기, 없을시에는 리스트로 출력됩니다.
include_once('./_common.php');
그누보드를 이용한다면 기본적으로 항상 포함되어야 하는 내용입니다.
_common.php 에는
include_once('../common.php');
와 같이 그누보드 최상단의 common.php 를 인클루드 합니다.
if (!$board['bo_table']) {
alert('존재하지 않는 게시판입니다.', G5_URL);
}
$board 배열변수는 common.php에서
if (isset($_REQUEST['bo_table'])) {
$bo_table = preg_replace('/[^a-z0-9_]/i', '', trim($_REQUEST['bo_table']));
$bo_table = substr($bo_table, 0, 20);
} else {
$bo_table = '';
}
이 부분과
if ($bo_table) {
$board = sql_fetch(" select * from {$g5['board_table']} where bo_table = '$bo_table' ");
이 부분을 통해서 배열값이 저장됩니다.
$board 변수가 존재하더라도
$board = sql_fetch(" select * from {$g5['board_table']} where bo_table = '$bo_table' ");
에서 보는 바와 같이 해당 $bo_table 이 설정되지 않은 게시판이라면 false 값을 가지고 있습니다.
따라서
if (!$board['bo_table']) {
alert('존재하지 않는 게시판입니다.', G5_URL);
}
이 부분은
if (!isset($board) || !is_array($board) || !isset($board['bo_table']) || strlen($board['bo_table']) == 0) {
와 같이 사용하는 것이 정확합니다.
check_device($board['bo_device']);
$board['bo_device'] 는 게시판 환경설정에서 접속기기 설정에 의해 저장된값입니다.
both, pc, mobile 세가지 값이 올 수 있으며
pc 는 pc 만 허용, mobile 은 mobile 만 허용, both는 모두 허용 입니다.
lib/common.lib.php
function check_device($device)
{
global $is_admin;
if ($is_admin) return;
if ($device=='pc' && G5_IS_MOBILE) {
alert('PC 전용 게시판입니다.', G5_URL);
} else if ($device=='mobile' && !G5_IS_MOBILE) {
alert('모바일 전용 게시판입니다.', G5_URL);
}
}
관리자 일경우는 상관이 없고
pc 전용 게시판인데 현재 모바일용 출력 상황이라면 경고메시지 띄우고 메인으로 이동,
모바일 전용 게시판인데 현재 pc용 출력 상황이라면 경고메시지 띄우고 메인으로 이동합니다.
if (isset($write['wr_is_comment']) && $write['wr_is_comment']) {
goto_url('./board.php?bo_table='.$bo_table.'&wr_id='.$write['wr_parent'].'#c_'.$wr_id);
}
$write 배열변수는 common.php에서
if (isset($_REQUEST['wr_id'])) {
$wr_id = (int)$_REQUEST['wr_id'];
} else {
$wr_id = 0;
}
이 부분과
$write = array();
$write_table = "";
if ($bo_table) {
$board = sql_fetch(" select * from {$g5['board_table']} where bo_table = '$bo_table' ");
if ($board['bo_table']) {
set_cookie("ck_bo_table", $board['bo_table'], 86400 * 1);
$gr_id = $board['gr_id'];
$write_table = $g5['write_prefix'] . $bo_table; // 게시판 테이블 전체이름
//$comment_table = $g5['write_prefix'] . $bo_table . $g5['comment_suffix']; // 코멘트 테이블 전체이름
if (isset($wr_id) && $wr_id)
$write = sql_fetch(" select * from $write_table where wr_id = '$wr_id' ");
}
}
이 부분을 통해서 배열값이 저장됩니다.
$write 변수가 존재하더라도
$write = array(); 배열로 선언한 초기값을 가지거나
$write = sql_fetch(" select * from $write_table where wr_id = '$wr_id' ");
에서 보는 바와 같이 해당 $wr_id 의 게시물이 없는 경우 false 의 값을 가질수 있습니다.
if (isset($write['wr_is_comment']) && $write['wr_is_comment']) {
해당 게시물의 댓글 인지 여부를 따지는 $write['wr_is_comment'] 변수가 정의 되어 있고 $write['wr_is_comment'] 에 값(1)이 있으면
댓글 보기 페이지로 이동 시키기 위한 부분입니다.
if (isset($write['wr_is_comment']) && $write['wr_is_comment'] == 1) {
또는
if (isset($write['wr_is_comment']) && !empty($write['wr_is_comment'])) {
정도가 더 정확할것 같습니다.
if (!$bo_table) {
$msg = "bo_table 값이 넘어오지 않았습니다.\\n\\nboard.php?bo_table=code 와 같은 방식으로 넘겨 주세요.";
alert($msg);
}
이 부분은 굳이 필요없는 부분입니다.
$bo_table 가 없다면 $board 에 값이 없고 이미 이전의
if (!$board['bo_table']) {
alert('존재하지 않는 게시판입니다.', G5_URL);
}
이 부분에 걸려 여기까지 내려올수 없습니다.
만약 제대로 된 형식으로 접속하라는 경고를 보여주고 싶으면
if (!$board['bo_table']) {
alert('존재하지 않는 게시판입니다.', G5_URL);
}
이 부분 상위에
if (!$bo_table) {
$msg = "bo_table 값이 넘어오지 않았습니다.\\n\\nboard.php?bo_table=code 와 같은 방식으로 넘겨 주세요.";
alert($msg);
}
이 부분을 넣는게 맞다고 보여집니다.
if (isset($wr_id) && $wr_id) {
// 글이 없을 경우 해당 게시판 목록으로 이동
if (!$write['wr_id']) {
$msg = '글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.';
alert($msg, './board.php?bo_table='.$bo_table);
}
// 그룹접근 사용
if (isset($group['gr_use_access']) && $group['gr_use_access']) {
if ($is_guest) {
$msg = "비회원은 이 게시판에 접근할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.";
alert($msg, './login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr));
}
// 그룹관리자 이상이라면 통과
if ($is_admin == "super" || $is_admin == "group") {
;
} else {
// 그룹접근
$sql = " select count(*) as cnt from {$g5['group_member_table']} where gr_id = '{$board['gr_id']}' and mb_id = '{$member['mb_id']}' ";
$row = sql_fetch($sql);
if (!$row['cnt']) {
alert("접근 권한이 없으므로 글읽기가 불가합니다.\\n\\n궁금하신 사항은 관리자에게 문의 바랍니다.", G5_URL);
}
}
}
// 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면
if ($member['mb_level'] < $board['bo_read_level']) {
if ($is_member)
alert('글을 읽을 권한이 없습니다.', G5_URL);
else
alert('글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.', './login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr));
}
// 본인확인을 사용한다면
if ($config['cf_cert_use'] && !$is_admin) {
// 인증된 회원만 가능
if ($board['bo_use_cert'] != '' && $is_guest) {
alert('이 게시판은 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.', './login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr));
}
if ($board['bo_use_cert'] == 'cert' && !$member['mb_certify']) {
alert('이 게시판은 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원정보 수정에서 본인확인을 해주시기 바랍니다.', G5_URL);
}
if ($board['bo_use_cert'] == 'adult' && !$member['mb_adult']) {
alert('이 게시판은 본인확인으로 성인인증 된 회원님만 글읽기가 가능합니다.\\n\\n현재 성인인데 글읽기가 안된다면 회원정보 수정에서 본인확인을 다시 해주시기 바랍니다.', G5_URL);
}
if ($board['bo_use_cert'] == 'hp-cert' && $member['mb_certify'] != 'hp') {
alert('이 게시판은 휴대폰 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원정보 수정에서 휴대폰 본인확인을 해주시기 바랍니다.', G5_URL);
}
if ($board['bo_use_cert'] == 'hp-adult' && (!$member['mb_adult'] || $member['mb_certify'] != 'hp')) {
alert('이 게시판은 휴대폰 본인확인으로 성인인증 된 회원님만 글읽기가 가능합니다.\\n\\n현재 성인인데 글읽기가 안된다면 회원정보 수정에서 휴대폰 본인확인을 다시 해주시기 바랍니다.', G5_URL);
}
}
// 자신의 글이거나 관리자라면 통과
if (($write['mb_id'] && $write['mb_id'] == $member['mb_id']) || $is_admin) {
;
} else {
// 비밀글이라면
if (strstr($write['wr_option'], "secret"))
{
// 회원이 비밀글을 올리고 관리자가 답변글을 올렸을 경우
// 회원이 관리자가 올린 답변글을 바로 볼 수 없던 오류를 수정
$is_owner = false;
if ($write['wr_reply'] && $member['mb_id'])
{
$sql = " select mb_id from {$write_table}
where wr_num = '{$write['wr_num']}'
and wr_reply = ''
and wr_is_comment = 0 ";
$row = sql_fetch($sql);
if ($row['mb_id'] == $member['mb_id'])
$is_owner = true;
}
$ss_name = 'ss_secret_'.$bo_table.'_'.$write['wr_num'];
if (!$is_owner)
{
//$ss_name = "ss_secret_{$bo_table}_{$wr_id}";
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 비밀번호를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
//if ("$bo_table|$write['wr_num']" != get_session("ss_secret"))
if (!get_session($ss_name))
goto_url('./password.php?w=s&bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr);
}
set_session($ss_name, TRUE);
}
}
// 한번 읽은글은 브라우저를 닫기전까지는 카운트를 증가시키지 않음
$ss_name = 'ss_view_'.$bo_table.'_'.$wr_id;
if (!get_session($ss_name))
{
sql_query(" update {$write_table} set wr_hit = wr_hit + 1 where wr_id = '{$wr_id}' ");
// 자신의 글이면 통과
if ($write['mb_id'] && $write['mb_id'] == $member['mb_id']) {
;
} else if ($is_guest && $board['bo_read_level'] == 1 && $write['wr_ip'] == $_SERVER['REMOTE_ADDR']) {
// 비회원이면서 읽기레벨이 1이고 등록된 아이피가 같다면 자신의 글이므로 통과
;
} else {
// 글읽기 포인트가 설정되어 있다면
if ($config['cf_use_point'] && $board['bo_read_point'] && $member['mb_point'] + $board['bo_read_point'] < 0)
alert('보유하신 포인트('.number_format($member['mb_point']).')가 없거나 모자라서 글읽기('.number_format($board['bo_read_point']).')가 불가합니다.\\n\\n포인트를 모으신 후 다시 글읽기 해 주십시오.');
insert_point($member['mb_id'], $board['bo_read_point'], "{$board['bo_subject']} {$wr_id} 글읽기", $bo_table, $wr_id, '읽기');
}
set_session($ss_name, TRUE);
}
$g5['title'] = strip_tags(conv_subject($write['wr_subject'], 255))." > ".$board['bo_subject'];
}
이 부분은 $wr_id 변수가 존재하고 값이 있다면 내용보기 페이지이므로 거기에 맞는 체크를 하는 부분입니다.
if (isset($wr_id) && $wr_id) {
보다는
if (isset($wr_id) && $wr_id > 0) {
이 나아보입니다.
if (!$write['wr_id']) {
$msg = '글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.';
alert($msg, './board.php?bo_table='.$bo_table);
}
이 부분은 $wr_id 변수는 존재하지만, 해당 게시글 존재하지 않을때 에러를 발생시키는 부분입니다.
if (empty($write['wr_id'])) {
정도가 적당할것 같습니다.
empty 는 인자로 들어오는 변수가 정의되어잇지 않거나
0, 0.0, false, null, 빈값, 빈배열 같은 경우에 참을 반환합니다.
참고로 게시판 리스트 일 경우 필수 변수는
$bo_table, $board, $group
게시판 내용보기 일 경우 필수 변수는
$bo_table, $board, $group, $wr_id, $write
입니다. 모두 값이 empty 이어서는 안됩니다.
if (isset($group['gr_use_access']) && $group['gr_use_access']) {
if ($is_guest) {
$msg = "비회원은 이 게시판에 접근할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.";
alert($msg, './login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr));
}
// 그룹관리자 이상이라면 통과
if ($is_admin == "super" || $is_admin == "group") {
;
} else {
// 그룹접근
$sql = " select count(*) as cnt from {$g5['group_member_table']} where gr_id = '{$board['gr_id']}' and mb_id = '{$member['mb_id']}' ";
$row = sql_fetch($sql);
if (!$row['cnt']) {
alert("접근 권한이 없으므로 글읽기가 불가합니다.\\n\\n궁금하신 사항은 관리자에게 문의 바랍니다.", G5_URL);
}
}
}
이 부분은 해당 게시판이 속한 그룹의 설정에서
접근회원사용 이라는 설정에 체크를 한경우에 동작합니다.
즉, 해당 설정이 활성화 되어있을 경우 그 그룹에 소속된 회원만이 해당 게시판에 접근 할수 있도록 하는 것입니다.
어차피 슈퍼관리자와 그룹관리자는 해당 사항이 없으므로
if ($is_admin != "super" && $is_admin != "group") {
if (isset($group['gr_use_access']) && $group['gr_use_access']) {
if ($is_guest) {
$msg = "비회원은 이 게시판에 접근할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.";
alert($msg, './login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr));
}
else {
$sql = " select count(*) as cnt from {$g5['group_member_table']} where gr_id = '{$board['gr_id']}' and mb_id = '{$member['mb_id']}' ";
$row = sql_fetch($sql);
if (!$row['cnt']) {
alert("접근 권한이 없으므로 글읽기가 불가합니다.\\n\\n궁금하신 사항은 관리자에게 문의 바랍니다.", G5_URL);
}
}
}
}
와 같은 형태로 바꾸는것이 더 좋아 보입니다.
if ($member['mb_level'] < $board['bo_read_level']) {
if ($is_member)
alert('글을 읽을 권한이 없습니다.', G5_URL);
else
alert('글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.', './login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr));
}
이 부분은 게시판의 읽기 레벨을 체크하는 부분입니다.
이 부분 역시 if ($is_admin != "super" && $is_admin != "group") { 안으로 들어가고
if ($is_admin != "board") {
안으로 넣는 것이 좋아보입니다.
어차피 관리자(슈퍼, 그룹, 게시판)로 지정된 회원은 레벨을 따지는 것은 의미가 크지 않기 때문입니다.
if ($config['cf_cert_use'] && !$is_admin) {
// 인증된 회원만 가능
if ($board['bo_use_cert'] != '' && $is_guest) {
alert('이 게시판은 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.', './login.php?wr_id='.$wr_id.$qstr.'&url='.urlencode(G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&wr_id='.$wr_id.$qstr));
}
if ($board['bo_use_cert'] == 'cert' && !$member['mb_certify']) {
alert('이 게시판은 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원정보 수정에서 본인확인을 해주시기 바랍니다.', G5_URL);
}
if ($board['bo_use_cert'] == 'adult' && !$member['mb_adult']) {
alert('이 게시판은 본인확인으로 성인인증 된 회원님만 글읽기가 가능합니다.\\n\\n현재 성인인데 글읽기가 안된다면 회원정보 수정에서 본인확인을 다시 해주시기 바랍니다.', G5_URL);
}
if ($board['bo_use_cert'] == 'hp-cert' && $member['mb_certify'] != 'hp') {
alert('이 게시판은 휴대폰 본인확인 하신 회원님만 글읽기가 가능합니다.\\n\\n회원정보 수정에서 휴대폰 본인확인을 해주시기 바랍니다.', G5_URL);
}
if ($board['bo_use_cert'] == 'hp-adult' && (!$member['mb_adult'] || $member['mb_certify'] != 'hp')) {
alert('이 게시판은 휴대폰 본인확인으로 성인인증 된 회원님만 글읽기가 가능합니다.\\n\\n현재 성인인데 글읽기가 안된다면 회원정보 수정에서 휴대폰 본인확인을 다시 해주시기 바랍니다.', G5_URL);
}
}
게시판 환경설정에서 본인확인사용 설정에 사용안함 외의 값이 설정되어 있을때 동작합니다. 사용안함은 빈값입니다.
부가서비스인 아이폰 본인인증이나 핸드폰 본인인증을 사용할경우 위의 설정이 활성화됩니다.
댓글 13개
게시글 목록
| 번호 | 제목 |
|---|---|
| 32341 | |
| 32339 | |
| 32326 | |
| 32325 | |
| 32322 | |
| 32319 | |
| 32318 | |
| 32316 | |
| 32315 | |
| 32313 | |
| 32312 | |
| 32311 | |
| 32310 | |
| 32304 | |
| 32303 | |
| 32300 | |
| 32293 | |
| 32292 | |
| 32291 | |
| 32285 | |
| 32284 | |
| 32275 | |
| 32271 | |
| 32268 | |
| 32265 | |
| 32261 | |
| 32258 | |
| 32257 | |
| 32255 | |
| 32254 | |
| 32253 | |
| 32251 | |
| 32250 | |
| 32249 | |
| 32247 | |
| 32246 | |
| 32245 | |
| 32244 | |
| 32243 | |
| 32242 | |
| 32241 | |
| 32240 | |
| 32239 | |
| 32238 | |
| 32237 | |
| 32236 | |
| 32232 | |
| 32229 | |
| 32228 | |
| 32227 | |
| 32217 | |
| 32215 | |
| 32214 | |
| 32213 | |
| 32211 | |
| 32207 | |
| 32196 | |
| 32193 | |
| 32192 | |
| 32190 | |
| 32188 | |
| 32186 | |
| 32184 | |
| 32173 | |
| 32172 | |
| 32171 | |
| 32167 | |
| 32165 | |
| 32163 | |
| 32162 | |
| 32158 | |
| 32157 | |
| 32155 | |
| 32151 | |
| 32149 | |
| 32135 | |
| 32132 | |
| 32127 | |
| 32125 | |
| 32122 | |
| 32120 | |
| 32119 | |
| 32117 | |
| 32116 | |
| 32115 | |
| 32114 | |
| 32112 | |
| 32111 | |
| 32109 | |
| 32107 | |
| 32104 | |
| 32103 | |
| 32102 | |
| 32101 | |
| 32094 | |
| 32089 | |
| 20404 | |
| 31036 | |
| 8279 | |
| 8268 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기