first commit
This commit is contained in:
258
application/controllers/Grace.php
Executable file
258
application/controllers/Grace.php
Executable file
@@ -0,0 +1,258 @@
|
||||
<?php if (!defined('BASEPATH')) {
|
||||
exit('No direct script access allowed');
|
||||
}
|
||||
|
||||
class Grace extends MY_Controller
|
||||
{
|
||||
private $sections;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->load->model('post_model', 'post');
|
||||
$this->load->model('comment_model', 'comment');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
if ($this->isMobile()) {
|
||||
$this->mobile();
|
||||
} else {
|
||||
$this->desktop();
|
||||
}
|
||||
}
|
||||
|
||||
private function desktop()
|
||||
{
|
||||
$section = $this->uri->segment(2);
|
||||
$article = $this->uri->segment(3);
|
||||
$this->data['sectionCategory'] = NEWS_SECTION_CATEGORY;
|
||||
if (is_numeric($article)) {
|
||||
$this->article($article);
|
||||
$this->load->view('templates/grace/grace-article', $this->data);
|
||||
} elseif ($section) {
|
||||
$this->section();
|
||||
$this->load->view('templates/grace/grace-section', $this->data);
|
||||
} else {
|
||||
$this->main();
|
||||
$this->load->view('templates/grace/grace-home', $this->data);
|
||||
}
|
||||
}
|
||||
|
||||
private function mobile()
|
||||
{
|
||||
$section = $this->uri->segment(2);
|
||||
$article = $this->uri->segment(3);
|
||||
if (is_numeric($article)) {
|
||||
$this->load->view('mobile/grace/grace-article', $this->data);
|
||||
} else if ($article) {
|
||||
$this->load->view('mobile/grace/grace-editor', $this->data);
|
||||
} elseif ($section) {
|
||||
$this->load->view('mobile/grace/grace-section', $this->data);
|
||||
} else {
|
||||
$this->load->view('mobile/grace/grace-home', $this->data);
|
||||
}
|
||||
}
|
||||
|
||||
private function main()
|
||||
{
|
||||
$this->data['featured'] = $this->post->getPagePostsByCategoryId(getChildrenByParentId(30000), 5)
|
||||
->join('cm_user u', 'p.userID=u.userID', 'left')->where('img !=', '')
|
||||
->order_by('p.dateUpdated', 'desc')->group_by('pp.pageID')
|
||||
->get()->result();
|
||||
$this->getLink($this->data['featured']);
|
||||
$this->setSections();
|
||||
foreach ($this->sections as $k => $s) {
|
||||
if($k == 'search') continue;
|
||||
$this->data[$k] = $this->sections[$k][2]()
|
||||
->join('cm_user u', 'p.userID=u.userID', 'left')
|
||||
->join('cm_page_attributes pa', 'pp.pageID=pa.pageID', 'left')
|
||||
->join('cm_page_content pcn', 'pp.pageID=pcn.pageID', 'left')
|
||||
->select('p.*')
|
||||
->select('if(pa.pageIcon is null, if(pcn.img is null, if(u.profile_img is null, p.postImage, u.profile_img), pcn.img), pa.pageIcon) pageIcon')
|
||||
->select('0 likes, 0 views, 0 comments')
|
||||
->select("if(u.nickname = '' or u.nickname is null, u.userName, u.nickName) as author")
|
||||
->group_by('p.postID')
|
||||
->get()->result();
|
||||
$this->getLink($this->data[$k]);
|
||||
}
|
||||
foreach ($this->data as $k => $v) {
|
||||
getPostsImageUrl($this->data[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
private function setSections()
|
||||
{
|
||||
// 은혜충전(구 라이프)의 해당 카테고리의 최신 글 테그
|
||||
// 은혜충전(구 라이프)의 해당 카테고리의 업데이트 순과 좋아요순
|
||||
// 페이징처리
|
||||
|
||||
$this->sections = [
|
||||
'storyqt' => [[30005, 30008], function () {
|
||||
return $this->post->getCountPostsByPageIdAndCategoryId($this->sections['storyqt'][0][0], $this->sections['storyqt'][0][1]);
|
||||
}, function () {
|
||||
return $this->post->getPostsByPageIdAndCategoryId($this->sections['storyqt'][0][0], $this->sections['storyqt'][0][1], 20);
|
||||
}],
|
||||
'wordcard' => [[30003, 30005], function () {
|
||||
return $this->post->getCountPostsByPageId($this->sections['wordcard'][0]);
|
||||
}, function () {
|
||||
return $this->post->getPostsByPageId($this->sections['wordcard'][0], 20);
|
||||
}],
|
||||
'english' => [[30005, 30008], function () {
|
||||
return $this->post->getCountPostsByPageIdAndCategoryId($this->sections['english'][0][0], $this->sections['english'][0][1]);
|
||||
}, function () {
|
||||
return $this->post->getPostsByPageIdAndCategoryId($this->sections['english'][0][0], $this->sections['english'][0][1], 20);
|
||||
}],
|
||||
'videoqt' => [null, function () {
|
||||
return $this->post->getPostQuery()->join('cm_post_video v', 'p.postID=v.postID', 'inner')->count_all_results();
|
||||
}, function () {
|
||||
return $this->post->getPostQuery()->join('cm_post_video v', 'p.postID=v.postID', 'inner')->limit(20);
|
||||
}],
|
||||
'cpost' => [[30006, 30008], function () {
|
||||
return $this->post->getCountPostsByPageId($this->sections['cpost'][0]);
|
||||
}, function () {
|
||||
return $this->post_model->getPostsByPageId($this->sections['cpost'][0], 20);
|
||||
}],
|
||||
'poem' => [[30043], function () {
|
||||
return $this->post->getCountPostsByPageId($this->sections['poem'][0]);
|
||||
}, function () {
|
||||
return $this->post_model->getPostsByPageId($this->sections['poem'][0], 20);
|
||||
}],
|
||||
'popular' => [[30043], function () {
|
||||
return $this->post->getCountPostsByPageId($this->sections['poem'][0]);
|
||||
}, function () {
|
||||
return $this->post_model->getPostsByPageId($this->sections['poem'][0], 20);
|
||||
}],
|
||||
'tagFeatured' => [[30043], function () {
|
||||
return $this->post->getCountPostsByPageId($this->sections['poem'][0]);
|
||||
}, function () {
|
||||
return $this->post_model->getPostQuery()->join('cm_post_tag t', 'p.postID=t.postID', 'left');
|
||||
}],
|
||||
'search' => [[30043], function () {
|
||||
$this->load->library('search');
|
||||
return $this->search->searchByPostTitle($this->input->get('keyword'), 20, [], true)->count_all_results();
|
||||
}, function () {
|
||||
$this->load->library('search');
|
||||
return $this->search->searchByPostTitle($this->input->get('keyword'), 20, [], true)
|
||||
->join('cm_post_page pp', 'p.postID=pp.postID', 'left')->limit(20);
|
||||
}]
|
||||
];
|
||||
}
|
||||
|
||||
private function section()
|
||||
{
|
||||
$this->setSections();
|
||||
$this->load->library('pagination');
|
||||
$this->data['totalRows'] = $this->sections[$this->uri->segment(2)][1]();
|
||||
$this->pagination->initialize([
|
||||
'base_url' => BASE_URL . '/grace/' . $this->uri->segment(2),
|
||||
'total_rows' => $this->data['totalRows'],
|
||||
'per_page' => 20,
|
||||
'full_tag_open' => '',
|
||||
'full_tag_close' => '',
|
||||
'num_tag_open' => '',
|
||||
'num_tag_close' => '',
|
||||
'cur_tag_open' => '<a class="current">',
|
||||
'cur_tag_close' => '</a>',
|
||||
'next_tag_open' => '',
|
||||
'next_tag_close' => '',
|
||||
'prev_tag_open' => '',
|
||||
'prev_tag_close' => '',
|
||||
'next_link' => '',
|
||||
'prev_link' => '',
|
||||
'last_link' => '<img src="' . THEME_FOLDER . '/img/mypage_arrow_right.gif">',
|
||||
'first_link' => '<img src="' . THEME_FOLDER . '/img/mypage_arrow_left.gif">',
|
||||
'prefix' => 'page-',
|
||||
'suffix' => $this->input->get('keyword') ? '?keyword='. $this->input->get('keyword') :''
|
||||
]);
|
||||
$countQuery = $this->db->last_query();
|
||||
$this->data['posts'] = $this->sections[$this->uri->segment(2)][2]()->offset(
|
||||
$this->uri->segment(3) ? str_replace('page-', '', $this->uri->segment(3)) : 0
|
||||
)->join('cm_user u', 'p.userID=u.userID', 'left')
|
||||
->join('cm_page_attributes pa', 'pp.pageID=pa.pageID', 'left')
|
||||
->join('cm_page_content pcn', 'pp.pageID=pcn.pageID', 'left')
|
||||
->select('p.*, if(pa.pageIcon is null, if(pcn.img is null, if(u.profile_img is null, p.postImage, u.profile_img), pcn.img), pa.pageIcon) pageIcon, 0 likes, 0 views, 0 comments, u.userName')->get()->result();
|
||||
|
||||
$sqlSegments = explode('WHERE', explode('FROM', $countQuery)[1]);
|
||||
$tags = $this->db->query('select t.tag from ' . $sqlSegments[0] . ($this->uri->segment(2) == 'search' ? ' ':' inner join cm_post_tag t on p.postID=t.postID ') . (isset($sqlSegments[1]) ? 'where ' . $sqlSegments[1] : '') . ' order by p.dateUpdated desc')->result();
|
||||
// $this->sections[$this->uri->segment(2)][2]()->join('cm_post_tag t', 'p.postID=t.postID', 'inner');
|
||||
$this->data['tags'] = [];
|
||||
foreach ($tags as $t) {
|
||||
$this->data['tags'] = array_merge($this->data['tags'], explode(strpos($t->tag, ',')? ',': ' ', $t->tag));
|
||||
}
|
||||
|
||||
if(count($this->data['posts'])) {
|
||||
array_map(function ($c) {
|
||||
foreach ($this->data['posts'] as $k => $v) {
|
||||
if ($v->postID == $c->postID) {
|
||||
$this->data['posts'][$k]->comments = $c->cnt;
|
||||
}
|
||||
}
|
||||
}, $this->comment->getCountByPostId(array_column($this->data['posts'], 'postID'))->get()->result());
|
||||
array_map(function ($c) {
|
||||
foreach ($this->data['posts'] as $k => $v) {
|
||||
if ($v->postID == $c->postID) {
|
||||
if ($c->title == 'L') {
|
||||
$this->data['posts'][$k]->likes = $c->rating;
|
||||
} else {
|
||||
$this->data['posts'][$k]->views = $c->rating;
|
||||
}
|
||||
}
|
||||
}
|
||||
}, $this->post->getPostsRankingByPostId(array_column($this->data['posts'], 'postID'))->get()->result());
|
||||
}
|
||||
$this->data['tags'] = array_unique($this->data['tags']);
|
||||
$this->getLink($this->data['posts']);
|
||||
}
|
||||
|
||||
private function article($article)
|
||||
{
|
||||
$this->load->model('comment_model');
|
||||
$section = $this->uri->segment(2);
|
||||
|
||||
$this->data['comments'] = $this->comment_model->getByPostId($article)
|
||||
->where('parentID', 0)
|
||||
->join('cm_user', 'cm_comment.userID=cm_user.userID', 'left')
|
||||
->select('*, 0 like, 0 bad, 0 replies')->get()->result();
|
||||
|
||||
$this->comment_model->getRepliesAndRankings($this->data['comments']);
|
||||
|
||||
$this->data['post'] = $this->post->getPostQuery()->join('cm_user u', 'p.userID=u.userID', 'left')
|
||||
->join('cm_page_attributes pa', 'pp.pageID=pa.pageID', 'left')
|
||||
->join('cm_page_content pcn', 'pp.pageID=pcn.pageID', 'left')
|
||||
->where('p.postID', $this->uri->segment(3))->get()->row();
|
||||
$this->data['video'] = $this->post->getPostVideo($this->data['post']->postID);
|
||||
|
||||
|
||||
$this->setSections();
|
||||
foreach ($this->sections as $k => $s) {
|
||||
if($k == 'search') continue;
|
||||
$this->data[$k] = $this->sections[$k][2]()
|
||||
->join('cm_user u', 'p.userID=u.userID', 'left')
|
||||
->join('cm_page_attributes pa', 'pp.pageID=pa.pageID', 'left')
|
||||
->join('cm_page_content pcn', 'pp.pageID=pcn.pageID', 'left')
|
||||
->select('p.*')
|
||||
->select('if(pa.pageIcon is null, if(pcn.img is null, if(u.profile_img is null, p.postImage, u.profile_img), pcn.img), pa.pageIcon) pageIcon')
|
||||
->select('0 likes, 0 views, 0 comments')
|
||||
->select("if(u.nickname = '' or u.nickname is null, u.userName, u.nickName) as author")
|
||||
->group_by('p.postID')
|
||||
->get()->result();
|
||||
$this->getLink($this->data[$k]);
|
||||
}
|
||||
$this->load->library('search');
|
||||
$this->data['related'] = $this->search->searchByPostTitle($this->data['post']->postTitle, 12, [$this->data['post']->postID], true)
|
||||
->join('cm_user u', 'cm_post.userID=u.userID', 'left')
|
||||
->select("*,if(u.nickname = '' or u.nickname is null, u.userName, u.nickName) as author")->get()->result();
|
||||
$this->getLink($this->data['related']);
|
||||
foreach ($this->data as $k => $v) {
|
||||
getPostsImageUrl($this->data[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
private function getLink(&$rows)
|
||||
{
|
||||
array_walk($rows, function (&$r) {
|
||||
$r->articleURL = '/grace/' . ($this->uri->segment(2) ? $this->uri->segment(2) : 'cpost') . '/' . $r->postID;
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user