Files
lulandia.pl/modules/ybc_blog_free/controllers/front/blog.php
2025-04-01 00:38:54 +02:00

514 lines
29 KiB
PHP

<?php
/**
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2017 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @version Release: $Revision$
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_VERSION_'))
exit;
class Ybc_blog_freeBlogModuleFrontController extends ModuleFrontController
{
public $display_column_left = false;
public $display_column_right = false;
public function __construct()
{
parent::__construct();
if(Configuration::get('YBC_BLOG_FREE_SIDEBAR_POSITION')=='right')
$this->display_column_right=true;
if(Configuration::get('YBC_BLOG_FREE_SIDEBAR_POSITION')=='left')
$this->display_column_left =true;
$this->context = Context::getContext();
}
public function init()
{
parent::init();
}
public function initContent()
{
$module = new Ybc_blog_free();
parent::initContent();
$id_post = (int)Tools::getValue('id_post');
$context = Context::getContext();
if($id_post)
{
//Increase views
if(!$context->cookie->posts_viewed)
$postsViewed = array();
else
$postsViewed = @unserialize($context->cookie->posts_viewed);
if(is_array($postsViewed) && !in_array($id_post, $postsViewed))
{
if($module->itemExists('post','id_post',$id_post))
{
$post = new Ybc_blog_free_post_class($id_post);
$post->click_number = (int)$post->click_number + 1;
if($post->update())
{
$postsViewed[] = $id_post;
$context->cookie->posts_viewed = @serialize($postsViewed);
$context->cookie->write();
}
}
}
$errors = array();
$justAdded = false;
$success = false;
if(Tools::isSubmit('bcsubmit') && (int)Configuration::get('YBC_BLOG_FREE_ALLOW_COMMENT'))
{
$comment = new Ybc_blog_free_comment_class();
$comment->approved = (int)Configuration::get('YBC_BLOG_FREE_COMMENT_AUTO_APPROVED') ? 1 : 0;
$comment->subject = trim(Tools::getValue('subject'));
$comment->comment = trim(Tools::getValue('comment'));
$comment->id_post = (int)Tools::getValue('id_post');
$comment->datetime_added = date('Y-m-d H:i:s');
if((int)$this->context->cookie->id_customer)
{
$comment->id_user = (int)$this->context->cookie->id_customer;
$comment->name = $this->context->customer->firstname.' '.$this->context->customer->lastname;
$comment->email = $this->context->customer->email;
}
else
{
$comment->name = Tools::getValue('name_customer');
$comment->email = Tools::getValue('email_customer');
}
$comment->rating = (int)Tools::getValue('rating');
$comment->reported = 1;
if(!$this->context->cookie->id_customer)
{
if(!Tools::getValue('name_customer'))
{
$errors[] = $this->module->l('Name is required');
}
if(Tools::getValue('email_customer') && !Validate::isEmail(Tools::getValue('email_customer')))
{
$errors[] = $this->module->l('Invalid email address');
}
}
if(Tools::strlen($comment->subject) < 10)
$errors[] = $this->module->l('Subject need to be at least 10 characters');
if(Tools::strlen($comment->subject) >300)
$errors[] = $this->module->l('Subject can not be longer than 300 characters');
if(!Validate::isCleanHtml($comment->subject,false))
$errors[] = $this->module->l('Subject need to be clean HTML');
if(Tools::strlen($comment->comment) < 20)
$errors[] = $this->module->l('Comment need to be at least 20 characters');
if(!Validate::isCleanHtml($comment->comment,false))
$errors[] = $this->module->l('Comment need to be clean HTML');
if(Tools::strlen($comment->comment) >2000)
$errors[] = $this->module->l('Subject can not be longer than 2000 characters');
if(!$comment->id_user && !(int)Configuration::get('YBC_BLOG_FREE_ALLOW_GUEST_COMMENT'))
$errors[] = $this->module->l('You need to log in before posting a comment');
if((int)Configuration::get('YBC_BLOG_FREE_ALLOW_RATING'))
{
if($comment->rating > 5 || $comment->rating < 1)
$errors[] = $this->module->l('Rating need to be from 1 to 5');
}
else
$comment->rating = 0;
if(!$module->itemExists('post','id_post',$comment->id_post))
$errors[] = $this->module->l('This post does not exist');
if((int)Configuration::get('YBC_BLOG_FREE_USE_CAPCHA'))
{
$savedCode = $context->cookie->security_capcha_code;
$capcha_code = trim(Tools::getValue('capcha_code'));
if($savedCode && Tools::strtolower($capcha_code)!=Tools::strtolower($savedCode))
{
$errors[] = $this->module->l('Security code is invalid');
}
}
if(!count($errors))
{
$comment->add();
if((int)$this->context->cookie->id_customer)
{
$customer = new Customer((int)$this->context->cookie->id_customer);
$this->sendCommentNotificationEmail(
trim($customer->firstname.' '.$customer->lastname),
$customer->email,
$comment->subject,
$comment->comment,
$comment->rating.' '.($comment->rating != 1 ? $this->module->l('stars') : $this->module->l('star')),
$module->getLink('blog', array('id_post' => $comment->id_post))
);
}
else
{
$this->sendCommentNotificationEmail(
trim(Tools::getValue('name_customer')),
Tools::getValue('email_customer'),
$comment->subject,
$comment->comment,
$comment->rating.' '.($comment->rating != 1 ? $this->module->l('stars') : $this->module->l('star')),
$module->getLink('blog', array('id_post' => $comment->id_post))
);
}
$justAdded = true;
$success = $this->module->l('Comment has been submitted ');
if($comment->approved)
$success .= $this->module->l('and approved');
else
$success .= $this->module->l('and waiting for approval');
}
}
$post = $this->getPost((int)Tools::getValue('id_post'));
$id_customer = ($this->context->customer->id) ? (int)($this->context->customer->id) : 0;
$id_group = null;
if ($id_customer) {
$id_group = Customer::getDefaultGroupId((int)$id_customer);
}
if (!$id_group) {
$id_group = (int)Group::getCurrent()->id;
}
$group= new Group($id_group);
if($post)
{
$urlAlias = Tools::strtolower(trim(Tools::getValue('url_alias')));
if($urlAlias && $urlAlias != Tools::strtolower(trim($post['url_alias'])))
Tools::redirect($module->getLink('blog',array('id_post' => $post['id_post'])));
//check if liked post
if(!$context->cookie->liked_posts)
$likedPosts = array();
else
$likedPosts = @unserialize($context->cookie->liked_posts);
if(is_array($likedPosts) && in_array($id_post, $likedPosts))
$likedPost = true;
else
$likedPost = false;
$climit = (int)Configuration::get('YBC_BLOG_FREE_MAX_COMMENT') ? (int)Configuration::get('YBC_BLOG_FREE_MAX_COMMENT') : false;
$cstart = $climit ? 0 : false;
$prettySkin = Configuration::get('YBC_BLOG_FREE_GALLERY_SKIN');
$randomcode = time();
$this->context->smarty->assign(
array(
'blog_post' => $post,
'allowComments' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_COMMENT') ? true : false,
'allowGuestsComments' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_GUEST_COMMENT') ? true : false,
'blogCommentAction' => $module->getLink('blog',array('id_post'=>(int)Tools::getValue('id_post'))),
'comment' => !$justAdded ? Tools::getValue('comment') : '',
'subject' => !$justAdded ?Tools::getValue('subject') : '',
'name_customer' => !$justAdded ? Tools::getValue('name_customer') : '',
'email_customer' => !$justAdded ?Tools::getValue('email_customer') : '',
'hasLoggedIn' => $this->context->customer->isLogged(true),
'blog_errors' => $errors,
'comments' => $module->getCommentsWithFilter(' AND bc.approved = 1 AND bc.id_post='.(int)Tools::getValue('id_post'),' bc.id_comment desc, ',$cstart,$climit),
'reportedComments' => $context->cookie->reported_comments ? @unserialize($context->cookie->reported_comments) : false,
'blog_success' => $success,
'allow_report_comment' =>(int)Configuration::get('YBC_BLOG_FREE_ALLOW_REPORT') ? true : false,
'display_related_products' =>(int)Configuration::get('YBC_BLOG_FREE_SHOW_RELATED_PRODUCTS') ? true : false,
'allow_rating' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_RATING') ? true : false,
'default_rating' => (int)Tools::getValue('rating') > 0 && (int)Tools::getValue('rating') <=5 ? (int)Tools::getValue('rating') :(int)Configuration::get('YBC_BLOG_FREE_DEFAULT_RATING'),
'everage_rating' => (int)$module->getEverageReviews($post['id_post']),
'total_review' =>(int)$module->countTotalReviewsWithRating($post['id_post']),
'use_capcha' => (int)Configuration::get('YBC_BLOG_FREE_USE_CAPCHA') ? true : false,
'capcha_image' => $module->getLink('capcha',array('randcode'=>$randomcode)),
'use_facebook_share' => (int)Configuration::get('YBC_BLOG_FREE_ENABLE_FACEBOOK_SHARE') ? true : false,
'use_google_share' => (int)Configuration::get('YBC_BLOG_FREE_ENABLE_GOOGLE_SHARE') ? true : false,
'use_twitter_share' => (int)Configuration::get('YBC_BLOG_FREE_ENABLE_TWITTER_SHARE') ? true : false,
'post_url' => $module->getLink('blog',array('id_post'=>(int)Tools::getValue('id_post'))),
'report_url' => $module->getLink('report'),
'likedPost' => $likedPost,
'allow_like' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_LIKE') ? true : false,
'show_date' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_DATE') ? true : false,
'show_tags' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_TAGS') ? true : false,
'show_categories' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_CATEGORIES') ? true : false,
'show_views' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_VIEWS') ? true : false,
'enable_slideshow' => (int)Configuration::get('YBC_BLOG_FREE_ENABLE_POST_SLIDESHOW') ? true : false,
'prettySkin' => in_array($prettySkin, array('dark_square','dark_rounded','default','facebook','light_rounded','light_square')) ? $prettySkin : 'dark_square',
'prettyAutoPlay' => (int)Configuration::get('YBC_BLOG_FREE_GALLERY_AUTO_PLAY') ? 1 : 0,
'path' => $module->getBreadCrumb(),
'show_author' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_AUTHOR') ? 1 : 0,
'blog_random_code' => $randomcode,
'date_format' => trim((string)Configuration::get('YBC_BLOG_FREE_DATE_FORMAT')),
'blog_layout' => Tools::strtolower(Configuration::get('YBC_BLOG_FREE_LAYOUT')),
'blog_related_product_type' => Tools::strtolower(Configuration::get('YBC_RELATED_PRODUCTS_TYPE')),
'blog_related_posts_type' => Tools::strtolower(Configuration::get('YBC_RELATED_POSTS_TYPE')),
'blog_template_dir' => dirname(__FILE__).'/../../views/templates/front',
'breadcrumb' => $module->is17 ? $module->getBreadCrumb() : false,
'show_price'=>$group->show_prices,
)
);
}
else
$this->context->smarty->assign(
array(
'blog_post' => false
));
if($module->is17)
$this->setTemplate('module:ybc_blog_free/views/templates/front/single_post.tpl');
else
$this->setTemplate('single_post_16.tpl');
}
else
{
$postData = $this->getPosts();
$this->context->smarty->assign(
array(
'blog_posts' => $postData['posts'],
'blog_paggination' => $postData['paggination'],
'blog_category' => $postData['category'],
'blog_latest' => $postData['latest'],
'blog_dir' => $postData['blogDir'],
'blog_tag' => $postData['tag'],
'blog_search' => $postData['search'],
'is_main_page' => !$postData['category'] && !$postData['tag'] && !$postData['search'] && !Tools::isSubmit('latest') && !Tools::isSubmit('id_author') ? true : false,
'allow_rating' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_RATING') ? true : false,
'show_featured_post' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_FEATURED_BLOCK') ? true : false,
'allow_like' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_LIKE') ? true : false,
'show_date' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_DATE') ? true : false,
'show_views' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_VIEWS') ? true : false,
'path' => $module->getBreadCrumb(),
'date_format' => trim((string)Configuration::get('YBC_BLOG_FREE_DATE_FORMAT')),
'show_categories' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_CATEGORIES') ? true : false,
'blog_layout' => Tools::strtolower(Configuration::get('YBC_BLOG_FREE_LAYOUT')),
'blog_skin' => Tools::strtolower(Configuration::get('YBC_BLOG_FREE_SKIN')),
'author' => $postData['author'],
'breadcrumb' => $module->is17 ? $module->getBreadCrumb() : false,
)
);
if($module->is17)
$this->setTemplate('module:ybc_blog_free/views/templates/front/blog_list.tpl');
else
$this->setTemplate('blog_list_16.tpl');
}
}
public function getPost($id_post)
{
$module = new Ybc_blog_free();
$post = $module->getPostById($id_post);
if($post)
{
$post['id_category'] = $module->getCategoriesStrByIdPost($post['id_post']);
$post['tags'] = $module->getTagsByIdPost($post['id_post']);
$post['related_posts'] = (int)Configuration::get('YBC_BLOG_FREE_DISPLAY_RELATED_POSTS') ? $module->getRelatedPosts($id_post, $post['tags'], $this->context->language->id) : false;
if($post['related_posts'])
{
foreach($post['related_posts'] as &$rpost)
if($rpost['image'])
{
$rpost['image'] = $module->blogDir.'views/img/post/'.$rpost['image'];
$rpost['thumb'] = $module->blogDir.'views/img/post/thumb/'.$rpost['thumb'];
$rpost['link'] = $module->getLink('blog',array('id_post'=>$rpost['id_post']));
$rpost['categories'] = $module->getCategoriesByIdPost($rpost['id_post'],false,true);
$rpost['comments_num'] = $module->countCommentsWithFilter(' AND bc.id_post='.$rpost['id_post'].' AND approved=1');
if(!$this->context->cookie->liked_posts)
$likedPosts = array();
else
$likedPosts = @unserialize($this->context->cookie->liked_posts);
if(is_array($likedPosts) && in_array($rpost['id_post'], $likedPosts))
$rpost['liked'] = true;
else
$rpost['liked'] = false;
}
}
$post['img_name'] = isset($post['image']) ? $post['image'] : '';
if($post['image'])
$post['image'] = 'http://'.$this->context->shop->domain.$this->context->shop->getBaseURI().'modules/'.$module->name.'/views/img/post/'.$post['image'];
$post['link'] = $module->getLink('blog',array('id_post'=>$post['id_post']));
$post['categories'] = $module->getCategoriesByIdPost($post['id_post'],false,true);
$post['products'] = $post['products'] ? $module->getRelatedProductByProductsStr($post['products']) : false;
$params = array();
$params['id_author'] = (int)$post['added_by'];
$employee = $this->getAuthorById($params['id_author']);
if($employee)
$params['alias'] = str_replace(' ','-',trim(Tools::strtolower($employee['firstname'].' '.$employee['lastname'])));
$post['author_link'] = $module->getLink('blog', $params);
return $post;
}
return false;
}
public function getPosts()
{
$context = Context::getContext();
$params = array('page'=>"_page_");
$module = new Ybc_blog_free();
$filter = ' AND p.enabled = 1 ';
$featurePage = false;
$id_category = (int)trim(Tools::getValue('id_category'));
if($id_category)
{
if($module->itemExists('category','id_category',$id_category))
{
$category = new Ybc_blog_free_category_class($id_category,$this->context->language->id);
$urlAlias = Tools::strtolower(trim(Tools::getValue('url_alias')));
if($urlAlias && $urlAlias != Tools::strtolower(trim($category->url_alias)))
Tools::redirect($module->getLink('blog',array('id_category' => $id_category)));
}
$filter .= " AND p.id_post IN (SELECT id_post FROM "._DB_PREFIX_."ybc_blog_free_post_category WHERE id_category = ".(int)trim(Tools::getValue('id_category')).") ";
$params['id_category'] = (int)trim(Tools::getValue('id_category'));
}
elseif(trim(Tools::getValue('latest')))
{
$params['latest'] = 'true';
}
elseif(trim(Tools::getValue('tag'))!='')
{
$tag = addslashes(urldecode(trim(Tools::getValue('tag'))));
$md5tag = md5(urldecode(trim(Tools::strtolower(Tools::getValue('tag')))));
$filter .= " AND p.id_post IN (SELECT id_post FROM "._DB_PREFIX_."ybc_blog_free_tag WHERE tag = '$tag' AND id_lang = ".$this->context->language->id.")";
//Increase views
if(!$context->cookie->tags_viewed)
$tagsViewed = array();
else
$tagsViewed = @unserialize($context->cookie->tags_viewed);
if(is_array($tagsViewed) && !in_array($md5tag, $tagsViewed))
{
if($module->increasTagViews($tag))
{
$tagsViewed[] = $md5tag;
$context->cookie->tags_viewed = @serialize($tagsViewed);
$context->cookie->write();
}
}
$params['tag'] = trim(Tools::getValue('tag'));
}
elseif(trim(Tools::getValue('search'))!='')
{
$search = addslashes(trim(Tools::getValue('search')));
$filter .= " AND p.id_post IN (SELECT id_post FROM "._DB_PREFIX_."ybc_blog_free_post_lang WHERE (title like '%$search%' OR description like '%$search%') AND id_lang = ".$this->context->language->id.")";
$params['search'] = trim(Tools::getValue('search'));
}
elseif($id_employee = (int)Tools::getValue('id_author'))
{
$filter .= " AND p.added_by = ".$id_employee;
$params['id_author'] = $id_employee;
$employee = $this->getAuthorById($id_employee);
if($employee)
$params['alias'] = str_replace(' ','-',trim(Tools::strtolower($employee['firstname'].' '.$employee['lastname'])));
}
else
{
if(Configuration::get('YBC_BLOG_FREE_MAIN_PAGE_POST_TYPE') == 'featured')
{
$filter .= ' AND p.is_featured = 1';
$featurePage = true;
}
}
if(!trim(Tools::getValue('latest')))
$sort = 'p.sort_order ASC, p.id_post DESC, ';
else
$sort = 'p.id_post DESC, ';
//Paggination
$page = (int)Tools::getValue('page') && (int)Tools::getValue('page') > 0 ? (int)Tools::getValue('page') : 1;
$totalRecords = (int)$module->countPostsWithFilter($filter);
$paggination = new Ybc_blog_free_paggination_class();
$paggination->total = $totalRecords;
$paggination->url = $module->getLink('blog', $params);
if(!Tools::isSubmit('id_category') && !Tools::isSubmit('search') && !Tools::isSubmit('tag') && !Tools::isSubmit('latest') && !Tools::isSubmit('id_author'))
$paggination->limit = (int)Configuration::get('YBC_BLOG_FREE_ITEMS_PER_PAGE') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_ITEMS_PER_PAGE') : 20;
else
$paggination->limit = (int)Configuration::get('YBC_BLOG_FREE_ITEMS_PER_PAGE_INNER') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_ITEMS_PER_PAGE_INNER') : 20;
$totalPages = ceil($totalRecords / $paggination->limit);
if($page > $totalPages)
$page = $totalPages;
$paggination->page = $page;
$start = $paggination->limit * ($page - 1);
if($start < 0)
$start = 0;
if(!$featurePage)
$posts = $module->getPostsWithFilter($filter, $sort, $start, $paggination->limit);
else
$posts = $module->getPostsWithFilter($filter, $sort, 0, false);
if(!$context->cookie->liked_posts)
$likedPosts = array();
else
$likedPosts = @unserialize($context->cookie->liked_posts);
if($posts)
{
foreach($posts as &$post)
{
$post['id_category'] = $module->getCategoriesStrByIdPost($post['id_post']);
$post['tags'] = $module->getTagsByIdPost($post['id_post']);
if($post['thumb'])
$post['thumb'] = $module->blogDir.'views/img/post/thumb/'.$post['thumb'];
if($post['image'])
$post['image'] = $module->blogDir.'views/img/post/'.$post['image'];
$post['link'] = $module->getLink('blog',array('id_post'=>$post['id_post']));
$post['categories'] = $module->getCategoriesByIdPost($post['id_post'],false,true);
$post['everage_rating'] = $module->getEverageReviews($post['id_post']);
$post['total_review'] = $module->countTotalReviewsWithRating($post['id_post']);
if(is_array($likedPosts) && in_array($post['id_post'], $likedPosts))
$post['liked'] = true;
else
$post['liked'] = false;
}
}
return array(
'posts' => $posts ,
'paggination' => $featurePage ? '' : $paggination->render(),
'category' => (int)Tools::getValue('id_category') ? (($cat = $module->getCategoryById((int)Tools::getValue('id_category'))) ? $cat : array('enabled' => false)) : false,
'blogDir' => $module->blogDir,
'tag' => trim(Tools::getValue('tag')) !='' ? urldecode(trim(Tools::getValue('tag'))) : false,
'search' => trim(Tools::getValue('search'))!='' ? urldecode(trim(Tools::getValue('search'))) : false,
'latest' => trim(Tools::getValue('latest'))=='true' ? true : false,
'author' => isset($employee) && $employee ? trim(Tools::ucfirst($employee['firstname']).' '.Tools::ucfirst($employee['lastname'])) : false,
);
}
public function sendCommentNotificationEmail($customer, $bemail, $subject, $comment, $rating, $postLink)
{
if(!(int)Configuration::get('YBC_BLOG_FREE_ENABLE_MAIL'))
return false;
$mailDir = dirname(__FILE__).'/../../mails/';
$lang = new Language((int)$this->context->language->id);
$mail_lang_id = (int)$this->context->language->id;
if(!is_dir($mailDir.$lang->iso_code))
$mail_lang_id = (int)Configuration::get('PS_LANG_DEFAULT');
if(Configuration::get('YBC_BLOG_FREE_ALERT_EMAILS'))
$emails = explode(',',Configuration::get('YBC_BLOG_FREE_ALERT_EMAILS'));
else
$emails = array();
if($emails)
{
foreach($emails as $email)
{
if(Validate::isEmail(trim($email)))
{
Mail::Send(
$mail_lang_id,
'new_comment', trim($subject) ? trim($subject) :
Mail::l('New comment from customer [{customer}]', $this->context->language->id),
array('{customer}' => $customer, '{email}' => $bemail,'{rating}' => $rating, '{subject}' => $subject, '{comment}'=>$comment, '{post_link}' => $postLink),
trim($email), null, null, null, null, null,
$mailDir,
false, $this->context->shop->id
);
}
}
}
}
private function getAuthorById($id_employee)
{
return Db::getInstance()->getRow('SELECT * FROM '._DB_PREFIX_.'employee WHERE id_employee = '.(int)$id_employee);
}
}