Ekdant-Online-Store/catalog/controller/cms/blog.php

453 lines
14 KiB
PHP
Raw Normal View History

2024-08-06 12:21:00 +00:00
<?php
namespace Opencart\Catalog\Controller\Cms;
/**
* Class Blog
*
* @package Opencart\Catalog\Controller\Cms
*/
class Blog extends \Opencart\System\Engine\Controller {
/**
* @return void
*/
public function index(): void {
$this->load->language('cms/blog');
if (isset($this->request->get['search'])) {
$search = (string)$this->request->get['search'];
} else {
$search = '';
}
if (isset($this->request->get['topic_id'])) {
$topic_id = (int)$this->request->get['topic_id'];
} else {
$topic_id = 0;
}
if (isset($this->request->get['author'])) {
$author = (string)$this->request->get['author'];
} else {
$author = '';
}
if (isset($this->request->get['page'])) {
$page = (int)$this->request->get['page'];
} else {
$page = 1;
}
$data['breadcrumbs'] = [];
$data['breadcrumbs'][] = [
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
];
$url = '';
if (isset($this->request->get['search'])) {
$url .= '&search=' . (string)$this->request->get['search'];
}
if (isset($this->request->get['author'])) {
$url .= '&author=' . (string)$this->request->get['author'];
}
if (isset($this->request->get['page'])) {
$url .= '&page=' . $this->request->get['page'];
}
$data['breadcrumbs'][] = [
'text' => $this->language->get('text_blog'),
'href' => $this->url->link('cms/blog', 'language=' . $this->config->get('config_language') . $url)
];
$this->load->model('cms/topic');
$topic_info = $this->model_cms_topic->getTopic($topic_id);
if ($topic_info) {
$url = '';
if (isset($this->request->get['search'])) {
$url .= '&search=' . (string)$this->request->get['search'];
}
if (isset($this->request->get['topic_id'])) {
$url .= '&topic_id=' . (int)$this->request->get['topic_id'];
}
if (isset($this->request->get['author'])) {
$url .= '&author=' . (string)$this->request->get['author'];
}
if (isset($this->request->get['page'])) {
$url .= '&page=' . $this->request->get['page'];
}
$data['breadcrumbs'][] = [
'text' => $topic_info['name'],
'href' => $this->url->link('cms/blog', 'language=' . $this->config->get('config_language') . $url)
];
}
$this->load->model('tool/image');
if ($topic_info && is_file(DIR_IMAGE . html_entity_decode($topic_info['image'], ENT_QUOTES, 'UTF-8'))) {
$data['thumb'] = $this->model_tool_image->resize(html_entity_decode($topic_info['image'], ENT_QUOTES, 'UTF-8'), $this->config->get('config_image_blog_width'), $this->config->get('config_image_blog_height'));
} else {
$data['thumb'] = '';
}
if ($topic_info) {
$this->document->setTitle($topic_info['meta_title']);
$this->document->setDescription($topic_info['meta_description']);
$this->document->setKeywords($topic_info['meta_keyword']);
$data['heading_title'] = $topic_info['name'];
} else {
$this->document->setTitle($this->language->get('heading_title'));
$data['heading_title'] = $this->language->get('heading_title');
}
if ($topic_info) {
$data['description'] = html_entity_decode($topic_info['description'], ENT_QUOTES, 'UTF-8');
} else {
$data['description'] = '';
}
$limit = 20;
$data['articles'] = [];
$filter_data = [
'filter_search' => $search,
'filter_topic_id' => $topic_id,
'filter_author' => $author,
'start' => ($page - 1) * $limit,
'limit' => $limit
];
$this->load->model('cms/article');
$article_total = $this->model_cms_article->getTotalArticles($filter_data);
$results = $this->model_cms_article->getArticles($filter_data);
foreach ($results as $result) {
if (is_file(DIR_IMAGE . html_entity_decode($result['image'], ENT_QUOTES, 'UTF-8'))) {
$image = $this->model_tool_image->resize(html_entity_decode($result['image'], ENT_QUOTES, 'UTF-8'), $this->config->get('config_image_blog_width'), $this->config->get('config_image_blog_height'));
} else {
$image = '';
}
$data['articles'][] = [
'article_id' => $result['article_id'],
'image' => $image,
'name' => $result['name'],
'description' => oc_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('config_article_description_length')) . '..',
'author' => $result['author'],
'comment_total' => $this->model_cms_article->getTotalComments($result['article_id']),
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
'href' => $this->url->link('cms/blog.info', 'language=' . $this->config->get('config_language') . '&article_id=' . $result['article_id'] . $url)
];
}
$url = '';
if (isset($this->request->get['search'])) {
$url .= '&search=' . $this->request->get['search'];
}
if (isset($this->request->get['topic_id'])) {
$url .= '&topic_id=' . $this->request->get['topic_id'];
}
if (isset($this->request->get['author'])) {
$url .= '&author=' . (string)$this->request->get['author'];
}
$data['pagination'] = $this->load->controller('common/pagination', [
'total' => $article_total,
'page' => $page,
'limit' => $limit,
'url' => $this->url->link('cms/blog', 'language=' . $this->config->get('config_language') . $url . '&page={page}')
]);
$data['results'] = sprintf($this->language->get('text_pagination'), ($article_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($article_total - $limit)) ? $article_total : ((($page - 1) * $limit) + $limit), $article_total, ceil($article_total / $limit));
// http://googlewebmastercentral.articlespot.com/2011/09/pagination-with-relnext-and-relprev.html
if ($page == 1) {
$this->document->addLink($this->url->link('cms/blog', 'language=' . $this->config->get('config_language')), 'canonical');
} else {
$this->document->addLink($this->url->link('cms/blog', 'language=' . $this->config->get('config_language') . '&page='. $page), 'canonical');
}
if ($page > 1) {
$this->document->addLink($this->url->link('cms/blog', 'language=' . $this->config->get('config_language') . (($page - 2) ? '&page='. ($page - 1) : '')), 'prev');
}
if (ceil($article_total / $limit) > $page) {
$this->document->addLink($this->url->link('cms/blog', 'language=' . $this->config->get('config_language') . '&page='. ($page + 1)), 'next');
}
$data['search'] = $search;
$data['topic_id'] = $topic_id;
$data['topics'] = [];
$data['topics'][] = [
'name' => $this->language->get('text_all'),
'href' => $this->url->link('cms/blog', 'language=' . $this->config->get('config_language'))
];
$results = $this->model_cms_topic->getTopics();
foreach ($results as $result) {
$data['topics'][] = [
'name' => $result['name'],
'href' => $this->url->link('cms/blog', 'language=' . $this->config->get('config_language') . '&topic_id='. $result['topic_id'])
];
}
$data['column_left'] = $this->load->controller('common/column_left');
$data['column_right'] = $this->load->controller('common/column_right');
$data['content_top'] = $this->load->controller('common/content_top');
$data['content_bottom'] = $this->load->controller('common/content_bottom');
$data['footer'] = $this->load->controller('common/footer');
$data['header'] = $this->load->controller('common/header');
$this->response->setOutput($this->load->view('cms/blog_list', $data));
}
public function info(): object|null {
$this->load->language('cms/blog');
if (isset($this->request->get['article_id'])) {
$article_id = (int)$this->request->get['article_id'];
} else {
$article_id = 0;
}
if (isset($this->request->get['topic_id'])) {
$topic_id = (int)$this->request->get['topic_id'];
} else {
$topic_id = 0;
}
$this->load->model('cms/article');
$article_info = $this->model_cms_article->getArticle($article_id);
if ($article_info) {
$this->document->setTitle($article_info['meta_title']);
$this->document->setDescription($article_info['meta_description']);
$this->document->setKeywords($article_info['meta_keyword']);
$data['breadcrumbs'] = [];
$data['breadcrumbs'][] = [
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
];
$data['breadcrumbs'][] = [
'text' => $this->language->get('text_blog'),
'href' => $this->url->link('cms/blog', 'language=' . $this->config->get('config_language'))
];
$url = '';
if (isset($this->request->get['topic_id'])) {
$url .= '&topic_id=' . $this->request->get['topic_id'];
}
if (isset($this->request->get['author'])) {
$url .= '&author=' . (string)$this->request->get['author'];
}
if (isset($this->request->get['page'])) {
$url .= '&page=' . $this->request->get['page'];
}
$this->load->model('cms/topic');
$topic_info = $this->model_cms_topic->getTopic($topic_id);
if ($topic_info) {
$data['breadcrumbs'][] = [
'text' => $topic_info['name'],
'href' => $this->url->link('cms/article', 'language=' . $this->config->get('config_language') . $url)
];
}
$data['breadcrumbs'][] = [
'text' => $article_info['name'],
'href' => $this->url->link('cms/article.info', 'language=' . $this->config->get('config_language') . '&article_id=' . $article_id . $url)
];
$data['heading_title'] = $article_info['name'];
$data['description'] = html_entity_decode($article_info['description'], ENT_QUOTES, 'UTF-8');
$data['author'] = $article_info['author'];
$data['date_added'] = $article_info['date_added'];
$data['comment'] = $this->getComments();
$data['continue'] = $this->url->link('cms/article', 'language=' . $this->config->get('config_language') . $url);
$data['column_left'] = $this->load->controller('common/column_left');
$data['column_right'] = $this->load->controller('common/column_right');
$data['content_top'] = $this->load->controller('common/content_top');
$data['content_bottom'] = $this->load->controller('common/content_bottom');
$data['footer'] = $this->load->controller('common/footer');
$data['header'] = $this->load->controller('common/header');
$this->response->setOutput($this->load->view('cms/blog_info', $data));
} else {
return new \Opencart\System\Engine\Action('error/not_found');
}
return null;
}
/**
* @return void
*/
public function comment() {
$this->load->language('cms/blog');
$this->response->setOutput($this->getComments());
}
/**
* @return string
*/
public function getComments(): string {
if (isset($this->request->get['article_id'])) {
$article_id = $this->request->get['article_id'];
} else {
$article_id = 0;
}
if (isset($this->request->get['page'])) {
$page = (int)$this->request->get['page'];
} else {
$page = 1;
}
$data['articles'] = [];
$this->load->model('cms/article');
$comment_total = $this->model_cms_article->getTotalComments($article_id);
$results = $this->model_cms_article->getComments($article_id, ($page - 1) * (int)$this->config->get('config_pagination_admin'), (int)$this->config->get('config_pagination_admin'));
foreach ($results as $result) {
$data['articles'][] = [
'text' => nl2br($result['text']),
'author' => $result['author'],
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
];
}
$data['pagination'] = $this->load->controller('common/pagination', [
'total' => $comment_total,
'page' => $page,
'limit' => 5,
'url' => $this->url->link('cms/blog.comment', 'language=' . $this->config->get('config_language') . '&article_id=' . $article_id . '&page={page}')
]);
$data['results'] = sprintf($this->language->get('text_pagination'), ($comment_total) ? (($page - 1) * 5) + 1 : 0, ((($page - 1) * 5) > ($comment_total - 5)) ? $comment_total : ((($page - 1) * 5) + 5), $comment_total, ceil($comment_total / 5));
return $this->load->view('cms/comment', $data);
}
public function addComment(): void {
$this->load->language('cms/article');
$json = array();
if (isset($this->request->get['article_id'])) {
$article_id = $this->request->get['article_id'];
} else {
$article_id = 0;
}
if (!isset($this->request->get['comment_token']) || !isset($this->session->data['comment_token']) || $this->request->get['comment_token'] != $this->session->data['comment_token']) {
$json['error']['warning'] = $this->language->get('error_token');
}
$keys = [
'comment',
'author'
];
foreach ($keys as $key) {
if (!isset($this->request->post[$key])) {
$this->request->post[$key] = '';
}
}
$this->load->model('cms/article');
$article_info = $this->model_cms_article->getArticle($article_id);
if (!$article_info) {
$json['error']['warning'] = $this->language->get('error_article');
}
if (!$this->customer->isLogged() && !$this->config->get('config_comment_guest')) {
$json['error']['warning'] = $this->language->get('error_guest');
}
if ((oc_strlen($this->request->post['author']) < 3) || (oc_strlen($this->request->post['author']) > 25)) {
$json['error']['author'] = $this->language->get('error_author');
}
if ((utf8_strlen($this->request->post['comment']) < 2) || (utf8_strlen($this->request->post['comment']) > 1000)) {
$json['error']['comment'] = $this->language->get('error_comment');
}
// Captcha
$this->load->model('setting/extension');
$extension_info = $this->model_setting_extension->getExtensionByCode('captcha', $this->config->get('config_captcha'));
if ($extension_info && $this->config->get('captcha_' . $this->config->get('config_captcha') . '_status') && in_array('comment', (array)$this->config->get('config_captcha_page'))) {
$captcha = $this->load->controller('extension/' . $extension_info['extension'] . '/captcha/' . $extension_info['code'] . '.validate');
if ($captcha) {
$json['error']['captcha'] = $captcha;
}
}
if (!$json) {
// Anti-Spam
$comment = str_replace(' ', '', $this->request->post['comment']);
$this->load->model('cms/antispam');
$spam = $this->model_cms_antispam->getSpam($comment);
if (!$this->customer->isCommentor() || $spam) {
$status = 0;
} else {
$status = 1;
}
$this->model_cms_article->addComment($article_id, $this->request->post + ['status' => $status]);
if (!$status) {
$json['success'] = $this->language->get('text_queue');
} else {
$json['success'] = $this->language->get('text_success');
}
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
}