Ejemplo n.º 1
0
 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));
     }
 }
Ejemplo n.º 2
0
 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 . "'>&larr; 이전글</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 . "'>다음글 &rarr;</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));
 }