* * @author CIBoard (develop@ciboard.co.kr) */ class Post_model extends CB_Model { /** * 테이블명 */ public $_table = 'post'; /** * 사용되는 테이블의 프라이머리키 */ public $primary_key = 'post_id'; // 사용되는 테이블의 프라이머리키 public $allow_order = array('post_num, post_reply', 'post_datetime desc', 'post_datetime asc', 'post_hit desc', 'post_hit asc', 'post_comment_count desc', 'post_comment_count asc', 'post_comment_updated_datetime desc', 'post_comment_updated_datetime asc', 'post_like desc', 'post_like asc', 'post_id desc'); function __construct() { parent::__construct(); } /** * List 페이지 커스테마이징 함수 */ public function get_post_list($limit = '', $offset = '', $where = '', $category_id = '', $orderby = '', $sfield = '', $skeyword = '', $sop = 'OR') { if ( ! in_array(strtolower($orderby), $this->allow_order)) { $orderby = 'post_num, post_reply'; } $sop = (strtoupper($sop) === 'AND') ? 'AND' : 'OR'; if (empty($sfield)) { $sfield = array('post_title', 'post_content'); } $search_where = array(); $search_like = array(); $search_or_like = array(); if ($sfield && is_array($sfield)) { foreach ($sfield as $skey => $sval) { $ssf = $sval; if ($skeyword && $ssf && in_array($ssf, $this->allow_search_field)) { if (in_array($ssf, $this->search_field_equal)) { $search_where[$ssf] = $skeyword; } else { $swordarray = explode(' ', $skeyword); foreach ($swordarray as $str) { if (empty($ssf)) { continue; } if ($sop === 'AND') { $search_like[] = array($ssf => $str); } else { $search_or_like[] = array($ssf => $str); } } } } } } else { $ssf = $sfield; if ($skeyword && $ssf && in_array($ssf, $this->allow_search_field)) { if (in_array($ssf, $this->search_field_equal)) { $search_where[$ssf] = $skeyword; } else { $swordarray = explode(' ', $skeyword); foreach ($swordarray as $str) { if (empty($ssf)) { continue; } if ($sop === 'AND') { $search_like[] = array($ssf => $str); } else { $search_or_like[] = array($ssf => $str); } } } } } $this->db->select('post.*, member.mem_id, member.mem_userid, member.mem_nickname, member.mem_icon, member.mem_photo, member.mem_point'); $this->db->from($this->_table); $this->db->join('member', 'post.mem_id = member.mem_id', 'left'); if ($where) { $this->db->where($where); } if ($search_where) { $this->db->where($search_where); } if ($category_id) { if (strpos($category_id, '.')) { $this->db->like('post_category', $category_id . '', 'after'); } else { $this->db->group_start(); $this->db->where('post_category', $category_id); $this->db->or_like('post_category', $category_id . '.', 'after'); $this->db->group_end(); } } if ($search_like) { foreach ($search_like as $item) { foreach ($item as $skey => $sval) { $this->db->like($skey, $sval); } } } if ($search_or_like) { $this->db->group_start(); foreach ($search_or_like as $item) { foreach ($item as $skey => $sval) { $this->db->or_like($skey, $sval); } } $this->db->group_end(); } $this->db->order_by($orderby); if ($limit) { $this->db->limit($limit, $offset); } $qry = $this->db->get(); $result['list'] = $qry->result_array(); $this->db->select('count(*) as rownum'); $this->db->from($this->_table); $this->db->join('member', 'post.mem_id = member.mem_id', 'left'); if ($where) { $this->db->where($where); } if ($search_where) { $this->db->where($search_where); } if ($category_id) { if (strpos($category_id, '.')) { $this->db->like('post_category', $category_id . '', 'after'); } else { $this->db->group_start(); $this->db->where('post_category', $category_id); $this->db->or_like('post_category', $category_id . '.', 'after'); $this->db->group_end(); } } if ($search_like) { foreach ($search_like as $item) { foreach ($item as $skey => $sval) { $this->db->like($skey, $sval); } } } if ($search_or_like) { $this->db->group_start(); foreach ($search_or_like as $item) { foreach ($item as $skey => $sval) { $this->db->or_like($skey, $sval); } } $this->db->group_end(); } $qry = $this->db->get(); $rows = $qry->row_array(); $result['total_rows'] = $rows['rownum']; return $result; } public function get_notice_list($brd_id = 0, $except_all_notice = '', $sfield = '', $skeyword = '', $sop = 'OR') { $brd_id = (int) $brd_id; if (empty($brd_id) OR $brd_id < 1) { return; } $sop = (strtoupper($sop) === 'AND') ? 'AND' : 'OR'; if (empty($sfield)) { $sfield = array('post_title', 'post_content'); } $search_where = array(); $search_like = array(); $search_or_like = array(); if ($sfield && is_array($sfield)) { foreach ($sfield as $skey => $sval) { $ssf = $sval; if ($skeyword && $ssf && in_array($ssf, $this->allow_search_field)) { if (in_array($ssf, $this->search_field_equal)) { $search_where[$ssf] = $skeyword; } else { $swordarray = explode(' ', $skeyword); foreach ($swordarray as $str) { if (empty($ssf)) { continue; } if ($sop === 'AND') { $search_like[] = array($ssf => $str); } else { $search_or_like[] = array($ssf => $str); } } } } } } else { $ssf = $sfield; if ($skeyword && $ssf && in_array($ssf, $this->allow_search_field)) { if (in_array($ssf, $this->search_field_equal)) { $search_where[$ssf] = $skeyword; } else { $swordarray = explode(' ', $skeyword); foreach ($swordarray as $str) { if (empty($ssf)) { continue; } if ($sop === 'AND') { $search_like[] = array($ssf => $str); } else { $search_or_like[] = array($ssf => $str); } } } } } $this->db->select('post.*, member.mem_id, member.mem_userid, member.mem_nickname, member.mem_icon, member.mem_photo, member.mem_point'); $this->db->from($this->_table); $this->db->join('member', 'post.mem_id = member.mem_id', 'left'); if ($except_all_notice) { $this->db->where('brd_id', $brd_id); $this->db->where('post_notice', 1); } else { $this->db->where('(( brd_id = ' . $brd_id . ' AND post_notice = 1) OR post_notice = 2) ', null, false); } $this->db->where('post_del <>', 2); if ($search_like) { foreach ($search_like as $item) { foreach ($item as $skey => $sval) { $this->db->like($skey, $sval); } } } if ($search_or_like) { $this->db->group_start(); foreach ($search_or_like as $item) { foreach ($item as $skey => $sval) { $this->db->or_like($skey, $sval); } } $this->db->group_end(); } $this->db->order_by('post_num, post_reply'); $qry = $this->db->get(); $result = $qry->result_array(); return $result; } /** * List 페이지 커스테마이징 함수 */ public function get_prev_next_post($post_id = 0, $post_num = 0, $type = '', $where = '', $sfield = '', $skeyword = '', $sop = 'OR') { $post_id = (int) $post_id; if (empty($post_id) OR $post_id < 1) { return false; } $sop = (strtoupper($sop) === 'AND') ? 'AND' : 'OR'; if (empty($sfield)) { $sfield = array('post_title', 'post_content'); } $search_where = array(); $search_like = array(); $search_or_like = array(); if ($sfield && is_array($sfield)) { foreach ($sfield as $skey => $sval) { $ssf = $sval; if ($skeyword && $ssf && in_array($ssf, $this->allow_search_field)) { if (in_array($ssf, $this->search_field_equal)) { $search_where[$ssf] = $skeyword; } else { $swordarray = explode(' ', $skeyword); foreach ($swordarray as $str) { if (empty($ssf)) { continue; } if ($sop === 'AND') { $search_like[] = array($ssf => $str); } else { $search_or_like[] = array($ssf => $str); } } } } } } else { $ssf = $sfield; if ($skeyword && $ssf && in_array($ssf, $this->allow_search_field)) { if (in_array($ssf, $this->search_field_equal)) { $search_where[$ssf] = $skeyword; } else { $swordarray = explode(' ', $skeyword); foreach ($swordarray as $str) { if (empty($ssf)) { continue; } if ($sop === 'AND') { $search_like[] = array($ssf => $str); } else { $search_or_like[] = array($ssf => $str); } } } } } $this->db->select('post.*, member.mem_id, member.mem_userid, member.mem_nickname, member.mem_icon, member.mem_photo, member.mem_point'); $this->db->from($this->_table); $this->db->join('member', 'post.mem_id = member.mem_id', 'left'); if ($type === 'next') { $where['post_num >'] = $post_num; } else { $where['post_num <'] = $post_num; } if ($where) { $this->db->where($where); } if ($search_where) { $this->db->where($search_where); } if ($search_like) { foreach ($search_like as $item) { foreach ($item as $skey => $sval) { $this->db->like($skey, $sval); } } } if ($search_or_like) { $this->db->group_start(); foreach ($search_or_like as $item) { foreach ($item as $skey => $sval) { $this->db->or_like($skey, $sval); } } $this->db->group_end(); } $orderby = $type === 'next' ? 'post_num, post_reply' : 'post_num desc, post_reply desc'; $this->db->order_by($orderby); $this->db->limit(1); $qry = $this->db->get(); $result = $qry->row_array(); return $result; } /** * List 페이지 커스테마이징 함수 */ public function get_search_list($limit = '', $offset = '', $where = '', $like = '', $board_id = 0, $orderby = '', $sfield = '', $skeyword = '', $sop = 'OR') { if ( ! in_array(strtolower($orderby), $this->allow_order)) { $orderby = 'post_num, post_reply'; } $sop = (strtoupper($sop) === 'AND') ? 'AND' : 'OR'; if (empty($sfield)) { $sfield = array('post_title', 'post_content'); } $search_where = array(); $search_like = array(); $search_or_like = array(); if ($sfield && is_array($sfield)) { foreach ($sfield as $skey => $sval) { $ssf = $sval; if ($skeyword && $ssf && in_array($ssf, $this->allow_search_field)) { if (in_array($ssf, $this->search_field_equal)) { $search_where[$ssf] = $skeyword; } else { $swordarray = explode(' ', $skeyword); foreach ($swordarray as $str) { if (empty($ssf)) { continue; } if ($sop === 'AND') { $search_like[] = array($ssf => $str); } else { $search_or_like[] = array($ssf => $str); } } } } } } else { $ssf = $sfield; if ($skeyword && $ssf && in_array($ssf, $this->allow_search_field)) { if (in_array($ssf, $this->search_field_equal)) { $search_where[$ssf] = $skeyword; } else { $swordarray = explode(' ', $skeyword); foreach ($swordarray as $str) { if (empty($ssf)) { continue; } if ($sop === 'AND') { $search_like[] = array($ssf => $str); } else { $search_or_like[] = array($ssf => $str); } } } } } $this->db->select('post.*, board.brd_key, board.brd_name, board.brd_mobile_name, board.brd_order, board.brd_search, member.mem_id, member.mem_userid, member.mem_nickname, member.mem_icon, member.mem_photo, member.mem_point '); $this->db->from('post'); $this->db->join('board', 'post.brd_id = board.brd_id', 'inner'); $this->db->join('member', 'post.mem_id = member.mem_id', 'left'); if ($where) { $this->db->where($where); } if ($search_where) { $this->db->where($search_where); } if ($like) { $this->db->like($like); } if ($search_like) { foreach ($search_like as $item) { foreach ($item as $skey => $sval) { $this->db->like($skey, $sval); } } } if ($search_or_like) { $this->db->group_start(); foreach ($search_or_like as $item) { foreach ($item as $skey => $sval) { $this->db->or_like($skey, $sval); } } $this->db->group_end(); } $this->db->where( array('brd_search' => 1)); $board_id = (int) $board_id; if ($board_id) { $this->db->where( array('b.brd_id' => $board_id)); } $this->db->order_by($orderby); if ($limit) { $this->db->limit($limit, $offset); } $qry = $this->db->get(); $result['list'] = $qry->result_array(); $this->db->select('count(*) cnt, board.brd_id'); $this->db->from('post'); $this->db->join('board', 'post.brd_id = board.brd_id', 'inner'); if ($where) { $this->db->where($where); } if ($search_where) { $this->db->where($search_where); } if ($like) { $this->db->like($like); } if ($search_like) { foreach ($search_like as $item) { foreach ($item as $skey => $sval) { $this->db->like($skey, $sval); } } } if ($search_or_like) { $this->db->group_start(); foreach ($search_or_like as $item) { foreach ($item as $skey => $sval) { $this->db->or_like($skey, $sval); } } $this->db->group_end(); } $this->db->where( array('brd_search' => 1)); $this->db->group_by('board.brd_id'); $qry = $this->db->get(); $cnt = $qry->result_array(); $result['total_rows'] = 0; if ($cnt) { foreach ($cnt as $key => $value) { if (element('brd_id', $value)) { $result['board_rows'][$value['brd_id']] = element('cnt', $value); } } if ($board_id) { $result['total_rows'] = $result['board_rows'][$board_id]; } else { $result['total_rows'] = array_sum($result['board_rows']); } } return $result; } public function get_rss_list($where = '', $where_in = '', $limit = '', $offset = '') { if ($where) { $this->db->where($where); } if ($where_in) { $this->db->where_in('brd_id', $where_in); } $this->db->order_by('post_num, post_reply'); if ($limit) { $this->db->limit($limit, $offset); } $qry = $this->db->get($this->_table); $result['list'] = $qry->result_array(); return $result; } public function comment_updated($primary_value = '', $datetime = '') { if (empty($primary_value)) { return false; } $this->db->where($this->primary_key, $primary_value); $this->db->set('post_comment_count', 'post_comment_count+1', false); $this->db->set('post_comment_updated_datetime', $datetime); $result = $this->db->update($this->_table); return $result; } public function next_post_num() { $this->db->select_min('post_num'); $result = $this->db->get($this->_table); $row = $result->row_array(); $row['post_num'] = (isset($row['post_num'])) ? $row['post_num'] : 0; $post_num = $row['post_num'] - 1; return $post_num; } }