Files
cm-app-web/application/models/Post_model.php

577 lines
15 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Post model class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @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;
}
}