function index($view = FALSE) { $board =& $this->board; $member =& $this->member; $wr_field =& $this->wr_field; $seg =& $this->seg; $param =& $this->param; $wr_id = $seg->get('wr_id'); // 게시물아이디 $page = $seg->get('page', 1); // 페이지 $qstr = $seg->replace('wr_id') . $param->output(); $sst = $param->get('sst'); // 정렬필드 $sod = $param->get('sod'); // 정렬순서 $sfl = $param->get('sfl'); // 검색필드 $stx = $param->get('stx'); // 검색어 $sca = $param->get('sca'); // 분류 $spt = $param->get('spt'); // 검색 파트 $js = array('board'); // JavaScript Files if ($member['mb_level'] < $board['bo_list_level']) { if (IS_MEMBER) { alert('목록을 볼 권한이 없습니다.'); } else { alert("목록을 볼 권한이 없습니다.\\n\\n회원이라면 로그인 후 이용하세요.", 'member/login/qry/' . url_encode('board/' . BO_TABLE . '/lists' . $qstr)); } } // 분류 사용 여부 $sca_str = $sca ? '?sca=' . $sca : ''; $category = FALSE; if ($board['bo_use_category']) { $this->load->helper('category'); $category = make_category(array('type' => 'bo_' . BO_TABLE, 'id' => 'ca_code', 'code' => $sca, 'lst' => TRUE)); } // 검색 파트 row $search_part = $this->config->item('cf_search_part'); $btn_prev_part = $btn_next_part = ''; // 분류 선택, 검색어, 검색 파트 적용 if ($sca || $sfl && $stx || $board['bo_count_write'] > $search_part) { if ($stx) { $stx = get_text($stx); } $min_spt = $board['bo_min_wr_num']; if (!$spt) { $spt = $min_spt; } $total_count = $this->Board_model->list_count(BO_TABLE, $spt, $sca, $sfl, $stx); $prev_spt = $spt - $search_part; if ($min_spt && $prev_spt >= $min_spt) { $btn_prev_part = '<li><a href="' . RT_PATH . '/board/' . BO_TABLE . '/lists' . $param->replace('spt', $prev_spt, $qstr) . '">이전검색</a></li>'; } $next_spt = $spt + $search_part; if ($next_spt < 0) { $btn_next_part = '<li><a href="' . RT_PATH . '/board/' . BO_TABLE . '/lists' . $param->replace('spt', $next_spt, $qstr) . '">다음검색</a></li>'; } } else { $total_count = $board['bo_count_write']; } $config['suffix'] = $qstr; $config['base_url'] = RT_PATH . '/board/' . BO_TABLE . '/lists/page/'; $config['per_page'] = $board['bo_page_rows']; $config['total_rows'] = $total_count; $config['uri_segment'] = $seg->pos('page'); // 검색 파트 ADD $config['full_tag_open'] = '<ul class="pagination">' . $btn_prev_part; $config['full_tag_close'] = $btn_next_part . '</ul>'; $CI =& get_instance(); $CI->load->library('pagination', $config); // 정렬 if (!$sst) { if ($board['bo_sort_field']) { $sst = $board['bo_sort_field']; } else { $sst = 'wr_num, wr_reply'; $sod = 'asc'; } } else { $sst = preg_match("/^(wr_datetime|wr_hit)\$/i", $sst) ? $sst : FALSE; } $offset = ($page - 1) * $config['per_page']; $result = $this->Board_model->list_result(BO_TABLE, $spt, $sca, $sst, $sod, $sfl, $stx, $config['per_page'], $offset, $wr_field); // 사이드 뷰 if ($board['bo_use_sideview']) { $this->load->helper('sideview'); } // 일반 리스트 $list = $wr_ids = array(); foreach ($result as $i => $row) { $row = get_convert($row, $board, $board['bo_subject_len'], $qstr, TRUE); $list[$i] = new stdClass(); $list[$i]->num = $total_count - ($page - 1) * $config['per_page'] - $i; $list[$i]->href = $row['href']; $list[$i]->wr_id = $row['wr_id']; $list[$i]->subject = strpos($sfl, 'subject') ? search_font($row['subject'], $stx) : $row['subject']; $list[$i]->comment_cnt = $row['comment_cnt']; $list[$i]->name = $row['name']; $list[$i]->datetime2 = $row['datetime2']; $list[$i]->wr_hit = $row['wr_hit']; $list[$i]->ico_reply = $row['ico_reply']; $list[$i]->ico_new = $row['ico_new']; $list[$i]->ico_hot = $row['ico_hot']; $list[$i]->ico_secret = $row['ico_secret']; $list[$i]->ico_file = $row['ico_file']; $list[$i]->ico_image = $row['ico_image']; $list[$i]->ico_movie = $row['ico_movie']; $wr_ids[$row['wr_id']] = $i; } // Extra if ($board['bo_use_extra'] && $wr_ids) { $result = $this->Board_model->get_extra(BO_TABLE, array_keys($wr_ids)); foreach ($result as $row) { $i = $wr_ids[$row['wr_id']]; foreach ($row as $fld => $val) { $list[$i]->{$fld} = $val; } } } // 공지사항 리스트 if (!$sca && !$stx) { $notice = explode(',', trim($board['bo_notice'])); if ($notice[0]) { $result = $this->Board_model->list_notice(BO_TABLE, $notice, $wr_field); $list_nt = array(); foreach ($result as $i => $row) { $row = get_convert($row, $board, $board['bo_subject_len'], $qstr, TRUE); $list_nt[$i] = new stdClass(); $list_nt[$i]->href = $row['href']; $list_nt[$i]->wr_id = $row['wr_id']; $list_nt[$i]->subject = $row['subject']; $list_nt[$i]->comment_cnt = $row['comment_cnt']; $list_nt[$i]->name = $row['name']; $list_nt[$i]->datetime2 = $row['datetime2']; $list_nt[$i]->wr_hit = $row['wr_hit']; } } } // 리스트 버튼 $btn_list = ''; if ($sfl && $stx) { $btn_list = '<a href="' . RT_PATH . '/board/' . BO_TABLE . '/lists' . $sca_str . '" class="btn btn-warning">목록</a>'; } // 글쓰기 버튼 $btn_write = ''; if ($board['bo_use_private'] && !IS_ADMIN) { $btn_write = FALSE; } elseif ($member['mb_level'] >= $board['bo_write_level']) { $btn_write = '<a href="' . RT_PATH . '/board/' . BO_TABLE . '/write' . $sca_str . '" class="btn btn-primary"><span class="glyphicon glyphicon-pencil"></span> 글쓰기</a>'; } // RSS 버튼 $btn_rss = ''; if ($board['bo_use_rss']) { $btn_rss = '<a href="' . RT_PATH . '/board/' . BO_TABLE . '/rss" class="btn btn-xs btn-warning" target="_blank">RSS</a>'; } // 관리자 버튼 $btn_admin = ''; if (SU_ADMIN) { $btn_admin = '<a href="' . RT_PATH . '/' . ADM_F . '/board/form/u/' . BO_TABLE . '" class="btn btn-xs btn-primary" target="_blank">관리자</a>'; } else { if (IS_ADMIN) { $btn_admin = '<button type="button" class="btn btn-xs btn-primary" onclick="board_admin();">관리자</button>'; } } // 관리자 체크박스 및 버튼 표시xsxs $btn_chkbox = ''; if (IS_ADMIN) { $btn_chkbox = '<button type="button" class="btn btn-danger" onclick="select_delete();">선택삭제</button>'; if (SU_ADMIN || IS_ADMIN == 'group') { $btn_chkbox .= '<button type="button" class="btn btn-info" onclick="select_copy(\'copy\');">선택복사</button>'; $btn_chkbox .= '<button type="button" class="btn btn-info" onclick="select_copy(\'move\');">선택이동</button>'; } } // 정렬 링크 $head = array('title' => $board['gr_subject'] . ' > ' . $board['bo_subject'], 'sca' => $sca); $data = array('total_count' => $total_count, 'category' => $category, 'btn_list' => $btn_list, 'btn_write' => $btn_write, 'btn_rss' => $btn_rss, 'btn_admin' => $btn_admin, 'btn_chkbox' => $btn_chkbox, 'wr_id' => $wr_id, 'sca' => $sca, 'sfl' => $sfl, 'stx' => $stx, 'list' => $list, 'list_nt' => isset($list_nt) ? $list_nt : array(), 'paging' => $CI->pagination->create_links(), 'sort_datetime' => $param->sort('wr_datetime', 'desc'), 'sort_hit' => $param->sort('wr_hit', 'desc')); if ($view) { $this->load->view('board/' . $board['bo_skin'] . '/list', $data); } else { // JavaScript Load if (IS_ADMIN) { $js[] = 'board_check'; } if ($board['bo_use_sideview']) { $js[] = 'sideview'; } if ($board['bo_use_category']) { $js[] = 'category'; } widget::run('head', $head); $this->load->view('board/' . $board['bo_skin'] . '/list', $data); widget::run('tail', array('js' => $js)); } }
function index() { $board =& $this->board; $member =& $this->member; $seg =& $this->seg; $param =& $this->param; $wr_id = $seg->get('wr_id'); // 게시물아이디 $qstr = $seg->output(); $dqstr = $seg->replace('wr_id') . $param->output(); $stx = $param->get('stx'); // 검색어 $sfl = $param->get('sfl'); // 검색필드 $sca = $param->get('sca'); // 분류 $js = array('board'); // JavaScript Files if ($wr_id) { $write =& $this->write; if (!isset($write['wr_id'])) { alert('글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.', 'board/' . BO_TABLE); } // 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면 if ($member['mb_level'] < $board['bo_read_level']) { if (IS_MEMBER) { alert('글을 읽을 권한이 없습니다.'); } else { alert('글을 읽을 권한이 없습니다.\\n\\n회원이라면 로그인 후 이용하세요.', 'member/login/qry/' . url_encode('board/' . BO_TABLE . '/view' . $qstr)); } } // 자신의 글 and 관리자가 아니라면 비밀글 체크 if (!(IS_MEMBER && $write['mb_id'] && $write['mb_id'] == $member['mb_id']) && !IS_ADMIN) { if (strpos($write['wr_option'], 'secret') !== FALSE) { $is_owner = FALSE; if ($write['wr_reply'] && IS_MEMBER) { // 자신의 비밀글의 답변이라면 통과 $row = $this->Board_model->is_owner(BO_TABLE, $write['wr_num']); if ($row['mb_id'] == $member['mb_id']) { $is_owner = TRUE; } } $ss_name = 'ss_secret_' . BO_TABLE . '_' . $write['wr_num']; if (!$is_owner) { // 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 비밀번호를 묻지 않습니다. // 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면 if (!$this->session->userdata($ss_name)) { goto_url('board/' . BO_TABLE . '/password/w/s/wr_id/' . $wr_id . $dqstr); } } $this->session->set_userdata($ss_name, TRUE); } } // 한번 읽은글은 브라우저를 닫기전까지는 카운트를 증가시키지 않음 $ss_name = 'ss_view_' . BO_TABLE . '_' . $wr_id; if (!$this->session->userdata($ss_name)) { $this->Board_model->hit_update(BO_TABLE, $wr_id); $this->session->set_userdata($ss_name, TRUE); } } else { goto_url('board/' . BO_TABLE); } // IP 표시 $is_ip_view = $board['bo_use_ip_view']; if (IS_ADMIN) { $is_ip_view = TRUE; $ip = $write['wr_ip']; } else { // 관리자가 아니라면 IP 주소를 감춘후 보여줍니다. $ip = preg_replace("/([0-9]+).([0-9]+).([0-9]+).([0-9]+)/", "\\1.♡.\\3.\\4", $write['wr_ip']); } if ($stx) { $stx = get_text($stx); } // 최고, 그룹관리자라면 글 복사, 이동 버튼 $btn_admin = ''; if ($write['wr_reply'] == '' && (IS_ADMIN == 'super' || IS_ADMIN == 'group')) { $start = "post_win('mvcp', '_board/movecopy', {'is_admin':'" . IS_ADMIN . "','bo_table':'" . BO_TABLE . "','wr_id':'" . $wr_id . "','sw':'"; $end = "'}, 'left=50, top=50, width=500, height=550, scrollbars=1');"; $btn_admin = '<span class="btn-group">'; $btn_admin .= "<button type='button' class='btn btn-default' onclick=\"" . $start . "copy" . $end . "\">복사</button>"; $btn_admin .= "<button type='button' class='btn btn-default' onclick=\"" . $start . "move" . $end . "\">이동</button>"; $btn_admin .= '</span> '; } // 목록 버튼 $btn_list = "<a href='" . RT_PATH . "/board/" . BO_TABLE . "/lists" . $dqstr . "' class='btn btn-warning'>목록</a>"; // 글쓰기 & 답변 버튼 $btn_write = $btn_reply = ''; if ($board['bo_use_private'] && !IS_ADMIN) { $btn_write = $btn_reply = FALSE; } else { if ($member['mb_level'] >= $board['bo_write_level']) { $btn_write = "<a href='" . RT_PATH . "/board/" . BO_TABLE . "/write" . ($sca ? '?sca=' . $sca : '') . "' class='btn btn-primary'><span class='glyphicon glyphicon-pencil'></span> 글쓰기</a>"; } if ($member['mb_level'] >= $board['bo_reply_level']) { $btn_reply = "<a href='" . RT_PATH . "/board/" . BO_TABLE . "/write/w/r" . $qstr . "' class='btn btn-info'>답변</a>"; } } // 수정 & 삭제 버튼 $btn_update = $btn_delete = ''; // 로그인중이고 자신의 글이라면 또는 관리자라면 비밀번호를 묻지 않고 바로 수정, 삭제 가능 if (IS_MEMBER && $member['mb_id'] == $write['mb_id'] || IS_ADMIN) { $btn_update = "<a href='" . RT_PATH . "/board/" . BO_TABLE . "/write/w/u" . $qstr . "' class='btn btn-info'>수정</a>"; $btn_delete = "<button type='button' class='btn btn-danger' onclick=\"javascript:post_send('_trans/board_write/delete', {bo_table:'" . BO_TABLE . "', wr_id:'" . $wr_id . "', is_admin:'" . IS_ADMIN . "', qstr:'" . $dqstr . "'}, true);\">삭제</button>"; } else { if (!$write['mb_id']) { // 회원이 쓴 글이 아니라면 $btn_update = "<a href='" . RT_PATH . "/board/" . BO_TABLE . "/password/w/u" . $qstr . "' class='btn btn-info'>수정</a>"; $btn_delete = "<a href='" . RT_PATH . "/board/" . BO_TABLE . "/password/w/d" . $qstr . "' class='btn btn-danger'>삭제</a>"; } } $btn_prev = $btn_next = ''; if (!$board['bo_use_list_view']) { $pn = $this->Board_model->prev_next_link(BO_TABLE, $write['wr_num'], $write['wr_reply'], $sca, $sfl, $stx); // 이전글 링크 $prev = $pn['prev']; if ($prev['wr_id']) { $prev_wr_subject = cut_str(get_text($prev['wr_subject']), 255); $btn_prev = "<a href='" . RT_PATH . "/board/" . BO_TABLE . "/view" . $seg->replace('wr_id', $prev['wr_id']) . "' title='" . $prev_wr_subject . "'>← 이전글</a>"; } // 다음글 링크 $next = $pn['next']; if ($next['wr_id']) { $next_wr_subject = cut_str(get_text($next['wr_subject']), 255); $btn_next = "<a href='" . RT_PATH . "/board/" . BO_TABLE . "/view" . $seg->replace('wr_id', $next['wr_id']) . "' title='" . $next_wr_subject . "'>다음글 →</a>"; } } // 버튼s $link_btns = $btn_admin . '<span class="btn-group">' . $btn_list . $btn_update . $btn_delete . $btn_reply . $btn_write . '</span>'; // 전체목록보이기 $list_view = FALSE; if ($member['mb_level'] >= $board['bo_list_level'] && $board['bo_use_list_view']) { $list_view = TRUE; } // 사이드 뷰 if ($board['bo_use_sideview']) { $this->load->helper('sideview'); } // 가공 $view = get_convert($write, $board, 255, $qstr); if (strpos($sfl, 'subject')) { $view['subject'] = search_font($view['subject'], $stx); } // 이미지 리사이즈 if ($write['wr_count_image'] > 0) { define('RESIZE_WIDTH', $board['bo_image_width']); $this->load->helper('resize'); $view['wr_content'] = resize_content($view['wr_content']); } $is_editor = strpos($view['wr_option'], 'editor') !== FALSE ? TRUE : FALSE; $view['content'] = conv_content($view['wr_content'], $is_editor); if (strpos($sfl, 'content')) { $view['content'] = search_font($view['content'], $stx); } // SyntaxHighlighter $is_syntax = FALSE; if ($board['bo_use_syntax'] && $is_editor) { $this->load->config('cf_syntax'); $brush_js = $this->config->item('brush_js'); preg_match_all("/brush: (" . implode('|', array_keys($brush_js)) . ")/i", $view['content'], $match); $match = array_unique($match[1]); if ($match) { $is_syntax = TRUE; // 있을 때 $view['content'] = preg_replace_callback('/(<pre class="brush:[^>]+>)([\\s\\S]+?)(<\\/pre>)/i', create_function('$content', 'return $content[1] .str_ireplace("<br>", "\\n",strip_tags(str_ireplace("</p>", "<br>", $content[2]), "<br>")) .$content[3];'), $view['content']); $js[] = 'syntax/shCore'; foreach ($match as $brush) { $js[] = 'syntax/' . $brush_js[$brush]; } } } // 댓글 출력 여부 $is_comment = FALSE; if ($board['bo_use_comment'] && strpos($write['wr_option'], 'nocomt') === FALSE) { $is_comment = TRUE; } $head = array('title' => $board['gr_subject'] . ' > ' . $board['bo_subject'] . ' > ' . strip_tags($view['subject']), 'sca' => $sca); $data = array('subject' => $view['subject'], 'content' => $view['content'], 'name' => $view['name'], 'ip' => $is_ip_view ? '(' . $ip . ')' : '', 'datetime' => date('y-m-d H:i', strtotime($view['wr_datetime'])), 'hit' => number_format($view['wr_hit']), 'btn_prev' => $btn_prev, 'btn_next' => $btn_next, 'link_btns' => $link_btns, 'btn_sns' => $board['bo_use_sns'] ? sns_post(BO_TABLE, $wr_id, $view['subject'], $view['content']) : '', 'is_comment' => $is_comment, 'is_syntax' => $is_syntax, 'wr_id' => $wr_id, 'qstr' => $qstr); // JavaScript Load if ($board['bo_use_sideview']) { $js[] = 'sideview'; } if (!IS_MEMBER && $is_comment) { $js[] = 'md5'; $js[] = 'kcaptcha'; } // Extra if ($board['bo_use_extra']) { $data = array_merge($data, $this->Board_model->get_extra(BO_TABLE, $wr_id)); } widget::run('head', $head); $this->load->view('board/' . $board['bo_skin'] . '/view', $data); if ($list_view) { if (IS_ADMIN) { $js[] = 'board_check'; } if ($board['bo_use_category']) { $js[] = 'category'; } widget::run('_board/lists', TRUE); } widget::run('tail', array('js' => $js)); }