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

5963 lines
280 KiB
PHP

<?php
/**
* 2007-2017 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;
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_category_class.php');
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_post_class.php');
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_list_helper_class.php');
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_paggination_class.php');
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_comment_class.php');
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_slide_class.php');
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_gallery_class.php');
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ybc_blog_free_link_class.php');
include_once(_PS_MODULE_DIR_.'ybc_blog_free/classes/ImportExport.php');
class Ybc_blog_free extends Module
{
private $baseAdminPath;
private $errorMessage = false;
private $_html = '';
public $blogDir;
public $alias;
public $friendly;
public $is17 = false;
public $configTabs = array();
private $categoryFields = array(
array(
'name' => 'id_category',
'primary_key' => true
),
array(
'name' => 'title',
'multi_lang' => true
),
array(
'name' => 'description',
'multi_lang' => true
),
array(
'name' => 'url_alias',
'multi_lang'=>true,
),
array(
'name' => 'meta_keywords',
'multi_lang' => true
),
array(
'name' => 'meta_description',
'multi_lang' => true
),
array(
'name' => 'image'
),
array(
'name' => 'enabled',
'default' => 1
),
array(
'name' => 'sort_order',
'default' => 1
)
);
private $postFields = array(
array(
'name' => 'id_post',
'primary_key' => true
),
array(
'name' => 'title',
'multi_lang' => true
),
array(
'name' => 'meta_description',
'multi_lang' => true
),
array(
'name' => 'meta_keywords',
'multi_lang' => true
),
array(
'name' => 'products'
),
array(
'name' => 'description',
'multi_lang' => true
),
array(
'name' => 'short_description',
'multi_lang' => true
),
array(
'name' => 'url_alias',
'multi_lang'=>true,
),
array(
'name' => 'image'
),
array(
'name' => 'thumb'
),
array(
'name' => 'enabled',
'default' => 1
),
array(
'name' => 'datetime_active',
),
array(
'name' => 'is_featured',
'default' => 1
),
array(
'name' => 'sort_order',
'default' => 1
),
array(
'name' => 'click_number',
'default' => 0
),
array(
'name' => 'likes',
'default' => 0
)
);
private $commentFields = array(
array(
'name' => 'id_comment',
'primary_key' => true
),
array(
'name' => 'subject'
),
array(
'name' => 'comment'
),
array(
'name' => 'reply'
),
array(
'name' => 'rating'
),
array(
'name' => 'approved'
),
array(
'name' => 'reported'
)
);
private $galleryFields = array(
array(
'name' => 'id_gallery',
'primary_key' => true
),
array(
'name' => 'title',
'multi_lang' => true
),
array(
'name' => 'description',
'multi_lang' => true
),
array(
'name' => 'sort_order',
'default' => 1
),
array(
'name' => 'image'
),
array(
'name' => 'enabled',
'default' => 1
),
array(
'name' => 'is_featured',
'default' => 1
)
);
private $slideFields = array(
array(
'name' => 'id_slide',
'primary_key' => true
),
array(
'name' => 'caption',
'multi_lang' => true
),
array(
'name' => 'sort_order',
'default' => 1
),
array(
'name' => 'image'
),
array(
'name' => 'url',
'multi_lang'=>true
),
array(
'name' => 'enabled',
'default' => 1
)
);
public $configs = array();
public $errors = array();
public $import_ok=false;
public function __construct()
{
//Ajax search
$this->ajaxProductSearch();
//Init
$this->name = 'ybc_blog_free';
$this->tab = 'front_office_features';
$this->version = '1.0.4';
$this->author = 'ETS-Soft';
$this->need_instance = 0;
$this->secure_key = Tools::encrypt($this->name);
$this->bootstrap = true;
if(version_compare(_PS_VERSION_, '1.7', '>='))
$this->is17 = true;
$this->module_key = 'da314fdf1af6d043f9b2f15dce2bef1e';
parent::__construct();
$this->displayName = $this->l('PRO blog - All in one package');
$this->description = $this->l('PRO Blog - All in one package is the most powerful, flexible Prestashop blog module');
$this->ps_versions_compliancy = array('min' => '1.6.0.0', 'max' => _PS_VERSION_);
$this->configTabs = array(
'general' => $this->l('General'),
'seo' => $this->l('SEO'),
'blog' => $this->l('Blog post'),
'gallery' => $this->l('Gallery'),
'slider' => $this->l('Slider'),
'comment' => $this->l('Likes and Comments'),
'mail' => $this->l('E-mail'),
'social' => $this->l('Socials'),
'sidebar' => $this->l('Sidebar'),
'home' => $this->l('Home Page'),
);
//Config fields
$this->configs = array(
'YBC_BLOG_FREE_LAYOUT' => array(
//GENERAL
'label' => $this->l('Blog layout'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'large_grid',
'name' => $this->l('Large box and grid')
),
array(
'id_option' => 'large_list',
'name' => $this->l('Large box and list')
),
array(
'id_option' => 'grid',
'name' => $this->l('Grid')
),
array(
'id_option' => 'list',
'name' => $this->l('List')
),
),
'id' => 'id_option',
'name' => 'name'
),
'default' => 'list'
),
'YBC_BLOG_FREE_CUSTOM_COLOR' => array(
'label' => $this->l('Custom color'),
'type' => 'color',
'default' => '#2fb5d2'
),
'YBC_BLOG_FREE_MAIN_PAGE_POST_TYPE' => array(
//GENERAL
'label' => $this->l('Posts to display on main page'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'latest',
'name' => $this->l('Latest posts')
),
array(
'id_option' => 'featured',
'name' => $this->l('Featured posts')
),
),
'id' => 'id_option',
'name' => 'name'
),
'default' => 'latest'
),
'YBC_BLOG_FREE_ENABLE_MAIL' => array(
'label' => $this->l('Receive alert when a comment is posted '),
'type' => 'switch',
'default' => 1,
'tab' => 'mail',
),
'YBC_BLOG_FREE_ENABLE_MAIL_REPORT' => array(
'label' => $this->l('Receive alert when a comment is reported as abuse'),
'type' => 'switch',
'default' => 0,
'tab' => 'mail',
),
'YBC_BLOG_FREE_ALERT_EMAILS' => array(
'label' => $this->l('Alert emails'),
'type' => 'text',
'width' => 200,
'desc' => $this->l('Emails that you want to receive notifications, separated by a comma (,)'),
'tab' => 'mail',
),
'YBC_BLOG_FREE_DATE_FORMAT' => array(
'label' => $this->l('Date format'),
'type' => 'text',
'default' => 'F jS Y',
'width' => 200,
'desc' => $this->l('Default: F jS Y, Check more at http://php.net/manual/en/function.date.php')
),
//SEO
'YBC_BLOG_FREE_FRIENDLY_URL' => array(
'label' => $this->l('Enable blog friendly url'),
'type' => 'switch',
'default' => 1,
'tab' => 'seo',
),
'YBC_BLOG_FREE_ALIAS' => array(
'label' => $this->l('Blog alias'),
'type' => 'text',
'default' => 'blog',
'desc' => $this->l('Default: "blog"'),
'required' => true,
'lang'=>true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_URL_SUBFIX' => array(
'label' => $this->l('Use URL subfix'),
'type' => 'switch',
'default' => 1,
'tab' => 'seo',
),
'YBC_BLOG_FREE_META_TITLE' => array(
'label' => $this->l('Blog meta title'),
'type' => 'text',
'default' => $this->l('PRO Blog - All in one package'),
'lang' => true,
'required' => true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_META_KEYWORDS' => array(
'label' => $this->l('Blog meta key words'),
'type' => 'tags',
'default' => $this->l('lorem,ipsum,dolor'),
'lang' => true,
'desc' => $this->l('Separated by a comma (,)'),
'tab' => 'seo',
),
'YBC_BLOG_FREE_META_DESCRIPTION' => array(
'label' => $this->l('Blog meta description'),
'type' => 'textarea',
'default' => $this->l('PRO Blog - All in one package is the most powerful, flexible Prestashop blog module'),
'lang' => true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_ALIAS_POST' => array(
'label' => $this->l('Single post page alias'),
'type' => 'text',
'default' => 'post',
'desc' => $this->l('Default: "post"'),
'required' => true,
'lang'=>true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_ALIAS_CATEGORY' => array(
'label' => $this->l('Category page alias'),
'type' => 'text',
'default' => 'category',
'desc' => $this->l('Default: "category"'),
'required' => true,
'lang'=>true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_ALIAS_GALLERY' => array(
'label' => $this->l('Gallery page alias'),
'type' => 'text',
'default' => 'gallery',
'desc' => $this->l('Default: "gallery"'),
'required' => true,
'lang'=>true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_ALIAS_LATEST' => array(
'label' => $this->l('Latest posts page alias'),
'type' => 'text',
'default' => 'latest',
'desc' => $this->l('Default: "latest"'),
'required' => true,
'lang'=>true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_ALIAS_SEARCH' => array(
'label' => $this->l('Search page alias'),
'type' => 'text',
'default' => 'search',
'desc' => $this->l('Default: "search"'),
'required' => true,
'lang'=>true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_ALIAS_AUTHOR' => array(
'label' => $this->l('Author page alias'),
'type' => 'text',
'default' => 'author',
'desc' => $this->l('Default: "author"'),
'required' => true,
'lang'=>true,
'tab' => 'seo',
),
'YBC_BLOG_FREE_ALIAS_TAG' => array(
'label' => $this->l('Tag page alias'),
'type' => 'text',
'default' => 'tag',
'desc' => $this->l('Default: "tag"'),
'required' => true,
'lang'=>true,
'tab' => 'seo',
),
//SIDEBAR
'YBC_BLOG_FREE_SIDEBAR_POSITION' => array(
'label' => $this->l('Sidebar position'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'left',
'name' => $this->l('Left')
),
array(
'id_option' => 'right',
'name' => $this->l('Right')
),
array(
'id_option' => 'none',
'name' => $this->l('No sidebar')
),
),
'id' => 'id_option',
'name' => 'name'
),
'default' => 'left',
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_SIDEBAR_POST_TYPE' => array(
'label' => $this->l('Type of post blocks in sidebar'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'carousel',
'name' => $this->l('Carousel slider')
),
array(
'id_option' => 'default',
'name' => $this->l('List')
),
),
'id' => 'id_option',
'name' => 'name'
),
'default' => 'carousel',
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_SHOW_LATEST_NEWS_BLOCK' => array(
'label' => $this->l('Display latest news block'),
'type' => 'switch',
'default' => 1,
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_LATES_POST_NUMBER' => array(
'label' => $this->l('Maximum number of newest posts displayed'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 5,
'validate' => 'isInt',
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_SHOW_POPULAR_POST_BLOCK' => array(
'label' => $this->l('Display pupular posts block'),
'type' => 'switch',
'default' => 1,
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_PUPULAR_POST_NUMBER' => array(
'label' => $this->l('Maximum number of pupular posts displayed'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 5,
'validate' => 'isInt',
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_SHOW_FEATURED_BLOCK' => array(
'label' => $this->l('Display featured posts'),
'type' => 'switch',
'default' => 1,
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_FEATURED_POST_NUMBER' => array(
'label' => $this->l('Maximum number of feature posts displayed'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 5,
'validate' => 'isInt',
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_SHOW_GALLERY_BLOCK' => array(
'label' => $this->l('Display featured gallery images'),
'type' => 'switch',
'default' => 1,
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_GALLERY_BLOCK_SIDEBAR_SLIDER_ENABLED' => array(
'label' => $this->l('Enable gallery carousel slider'),
'type' => 'switch',
'default' => 0,
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_GALLERY_POST_NUMBER' => array(
'label' => $this->l('Maximum number of featured gallery images displayed'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 6,
'validate' => 'isInt',
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_SHOW_CATEGORIES_BLOCK' => array(
'label' => $this->l('Display categories block'),
'type' => 'switch',
'default' => 1,
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_SHOW_TAGS_BLOCK' => array(
'label' => $this->l('Display tags block'),
'type' => 'switch',
'default' => 1,
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_TAGS_NUMBER' => array(
'label' => $this->l('Maximum number of tags displayed on Tags block'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 20,
'validate' => 'isInt',
'tab' => 'sidebar',
),
'YBC_BLOG_FREE_SHOW_SEARCH_BLOCK' => array(
'label' => $this->l('Display post search block'),
'type' => 'switch',
'default' => 1,
'tab' => 'sidebar',
),
//Home page
'YBC_BLOG_FREE_HOME_POST_TYPE' => array(
'label' => $this->l('Type of post blocks on home page'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'default',
'name' => $this->l('List')
),
array(
'id_option' => 'carousel',
'name' => $this->l('Carousel slider')
),
),
'id' => 'id_option',
'name' => 'name'
),
'default' => 'carousel',
'tab' => 'home',
),
'YBC_BLOG_FREE_SHOW_LATEST_BLOCK_HOME' => array(
'label' => $this->l('Display latest posts'),
'type' => 'switch',
'default' => 1,
'tab' => 'home',
),
'YBC_BLOG_FREE_LATEST_POST_NUMBER_HOME' => array(
'label' => $this->l('Maximum number of latest posts displayed'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 5,
'validate' => 'isInt',
'tab' => 'home',
),
'YBC_BLOG_FREE_SHOW_POPULAR_BLOCK_HOME' => array(
'label' => $this->l('Display popular posts'),
'type' => 'switch',
'default' => 0,
'tab' => 'home',
),
'YBC_BLOG_FREE_POPULAR_POST_NUMBER_HOME' => array(
'label' => $this->l('Maximum number of popular posts displayed'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 5,
'validate' => 'isInt',
'tab' => 'home',
),
'YBC_BLOG_FREE_SHOW_FEATURED_BLOCK_HOME' => array(
'label' => $this->l('Display feature posts'),
'type' => 'switch',
'default' => 0,
'tab' => 'home',
),
'YBC_BLOG_FREE_FEATURED_POST_NUMBER_HOME' => array(
'label' => $this->l('Maximum number of feature posts displayed'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 5,
'validate' => 'isInt',
'tab' => 'home',
),
'YBC_BLOG_FREE_SHOW_GALLERY_BLOCK_HOME' => array(
'label' => $this->l('Display featured gallery images'),
'type' => 'switch',
'default' => 0,
'tab' => 'home',
),
'YBC_BLOG_FREE_GALLERY_BLOCK_HOME_SLIDER_ENABLED' => array(
'label' => $this->l('Enable carousel slider for featured gallery images block'),
'type' => 'switch',
'default' => 0,
'tab' => 'home',
),
'YBC_BLOG_FREE_GALLERY_POST_NUMBER_HOME' => array(
'label' => $this->l('Maximum number of featured gallery images displayed'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 12,
'validate' => 'isInt',
'tab' => 'home',
),
//MAIN BLOG PAGE
'YBC_BLOG_FREE_SHOW_SLIDER' => array(
'label' => $this->l('Display slider'),
'type' => 'switch',
'default' => 1,
'tab' => 'slider',
),
'YBC_BLOG_FREE_SLIDER_AUTO_PLAY' => array(
'label' => $this->l('Auto play slider'),
'type' => 'switch',
'default' => 1,
'tab' => 'slider',
),
'YBC_BLOG_FREE_SLIDER_SPEED' => array(
'label' => $this->l('Slider speed'),
'type' => 'text',
'default' => 5000,
'validate' => 'isInt',
'tab' => 'slider',
'suffix' => 'ms'
),
'YBC_BLOG_FREE_SLIDER_DISPLAY_CAPTION' => array(
'label' => $this->l('Display caption'),
'type' => 'switch',
'default' => 1,
'tab' => 'slider',
),
'YBC_BLOG_FREE_SLIDER_DISPLAY_NAV' => array(
'label' => $this->l('Display control buttons'),
'type' => 'switch',
'default' => 1,
'tab' => 'slider',
),
//GALLERY
'YBC_BLOG_FREE_GALLERY_MAX_NUM' => array(
'label' => $this->l('Number of images on gallery block'),
'type' => 'text',
'required' => true,
'default' => 10,
'validate' => 'isInt',
'tab' => 'gallery',
),
'YBC_BLOG_FREE_GALLERY_SLIDESHOW_ENABLED' => array(
'label' => $this->l('Enable gallery slideshow'),
'type' => 'switch',
'default' => 1,
'tab' => 'gallery',
),
'YBC_BLOG_FREE_GALLERY_SKIN' => array(
'label' => $this->l('Gallery slideshow effect'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'default',
'name' => $this->l('Default')
),
array(
'id_option' => 'dark_square',
'name' => $this->l('Dark Square')
),
array(
'id_option' => 'dark_rounded',
'name' => $this->l('Dark Rounded')
),
array(
'id_option' => 'facebook',
'name' => $this->l('Facebook')
),
array(
'id_option' => 'light_square',
'name' => $this->l('Light Square')
),
array(
'id_option' => 'light_rounded',
'name' => $this->l('Light Rounded')
),
),
'id' => 'id_option',
'name' => 'name'
),
'default' => 'light_square',
'tab' => 'gallery',
),
'YBC_BLOG_FREE_GALLERY_AUTO_PLAY' => array(
'label' => $this->l('Auto play gallery slideshow'),
'type' => 'switch',
'default' => 1,
'tab' => 'gallery',
),
'YBC_BLOG_FREE_GALLERY_SPEED' => array(
'label' => $this->l('Slideshow speed'),
'type' => 'text',
'default' => 5000,
'validate' => 'isInt',
'tab' => 'gallery',
'suffix' => 'ms',
'required' => true,
),
'YBC_BLOG_FREE_GALLERY_THUMB_WIDTH' => array(
'label' => $this->l('Thumbnail width (px)'),
'type' => 'text',
'default' => 200,
'validate' => 'isInt',
'desc' => $this->l('Valid values: 50 - 1000'),
'required' => true,
'tab' => 'gallery',
),
'YBC_BLOG_FREE_GALLERY_THUMB_HEIGHT' => array(
'label' => $this->l('Thumbnail height (px)'),
'type' => 'text',
'default' => 200,
'validate' => 'isInt',
'desc' => $this->l('Valid values: 50 - 1000'),
'required' => true,
'tab' => 'gallery',
),
//BLOG SINGLE PAGE
'YBC_BLOG_FREE_SHOW_RELATED_PRODUCTS' => array(
'label' => $this->l('Display related products'),
'type' => 'switch',
'default' => 1,
'tab' => 'blog',
),
'YBC_RELATED_PRODUCTS_TYPE' => array(
'label' => $this->l('Type of related products'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'carousel',
'name' => $this->l('Carousel slider')
),
array(
'id_option' => 'default',
'name' => $this->l('List')
),
),
'id' => 'id_option',
'name' => 'name'
),
'default' => 'carousel',
'tab' => 'blog',
),
'YBC_BLOG_FREE_DISPLAY_RELATED_POSTS' => array(
'label' => $this->l('Display related posts'),
'type' => 'switch',
'default' => 1,
'tab' => 'blog',
'desc' => $this->l('Posts with the same post tags'),
),
'YBC_BLOG_FREE_RELATED_POST_NUMBER' => array(
'label' => $this->l('Number of related posts displayed'),
'type' => 'text',
'default' => 5,
'validate' => 'isInt',
'tab' => 'blog',
'required' => true,
),
'YBC_RELATED_POSTS_TYPE' => array(
'label' => $this->l('Type of related posts block'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'carousel',
'name' => $this->l('Carousel slider')
),
array(
'id_option' => 'default',
'name' => $this->l('List')
),
),
'id' => 'id_option',
'name' => 'name',
),
'default' => 'carousel',
'tab' => 'blog',
),
'YBC_BLOG_FREE_ENABLE_POST_SLIDESHOW' => array(
'label' => $this->l('Enable post image popup'),
'type' => 'switch',
'default' => 1,
'tab' => 'blog',
),
//POST FEATURES
'YBC_BLOG_FREE_ALLOW_LIKE' => array(
'label' => $this->l('Enable post likes'),
'type' => 'switch',
'default' => 1,
'tab' => 'comment',
),
'YBC_BLOG_FREE_GUEST_LIKE' => array(
'label' => $this->l('Allow guests to like posts'),
'type' => 'switch',
'default' => 0,
'tab' => 'comment',
),
'YBC_BLOG_FREE_ALLOW_COMMENT' => array(
'label' => $this->l('Allow comments'),
'type' => 'switch',
'default' => 1,
'tab' => 'comment',
),
'YBC_BLOG_FREE_ALLOW_GUEST_COMMENT' => array(
'label' => $this->l('Allow guests comments'),
'type' => 'switch',
'default' => 0,
'tab' => 'comment',
),
'YBC_BLOG_FREE_USE_CAPCHA' => array(
'label' => $this->l('Use capcha security for comment'),
'type' => 'switch',
'default' => 1,
'tab' => 'comment',
),
'YBC_BLOG_FREE_COMMENT_AUTO_APPROVED' => array(
'label' => $this->l('Auto approved comments'),
'type' => 'switch',
'default' => 0,
'tab' => 'comment',
),
'YBC_BLOG_FREE_MAX_COMMENT' => array(
'label' => $this->l('Maximum number of latest comments displayed'),
'type' => 'text',
'default' => 50,
'validate' => 'isInt',
'required' => true,
'desc' => $this->l('Set 0 if you want to show all comments of each post'),
'tab' => 'comment',
),
'YBC_BLOG_FREE_ALLOW_REPORT' => array(
'label' => $this->l('Allow vistor to report a comment'),
'type' => 'switch',
'default' => 1,
'tab' => 'comment',
),
'YBC_BLOG_FREE_ALLOW_RATING' => array(
'label' => $this->l('Allow vistor to rate a post in their comment'),
'type' => 'switch',
'default' => 1,
'tab' => 'comment',
),
'YBC_BLOG_FREE_DEFAULT_RATING' => array(
'label' => $this->l('Default rating'),
'type' => 'text',
'default' => 5,
'validate' => 'isInt',
'required' => true,
'tab' => 'comment',
),
'YBC_BLOG_FREE_ENABLE_FACEBOOK_SHARE' => array(
'label' => $this->l('Enable Facebook share'),
'type' => 'switch',
'default' => 1,
'tab' => 'social',
),
'YBC_BLOG_FREE_ENABLE_GOOGLE_SHARE' => array(
'label' => $this->l('Enable Google Plus share'),
'type' => 'switch',
'default' => 1,
'tab' => 'social',
),
'YBC_BLOG_FREE_ENABLE_TWITTER_SHARE' => array(
'label' => $this->l('Enable Twitter share'),
'type' => 'switch',
'default' => 1,
'tab' => 'social',
),
'YBC_BLOG_FREE_SHOW_POST_VIEWS' => array(
'label' => $this->l('Show post views'),
'type' => 'switch',
'default' => 1,
'tab' => 'blog',
),
'YBC_BLOG_FREE_SHOW_POST_DATE' => array(
'label' => $this->l('Show post publish date'),
'type' => 'switch',
'default' => 1,
'tab' => 'blog',
),
'YBC_BLOG_FREE_SHOW_POST_AUTHOR' => array(
'label' => $this->l('Show post author'),
'type' => 'switch',
'default' => 1,
'tab' => 'blog',
),
'YBC_BLOG_FREE_SHOW_POST_TAGS' => array(
'label' => $this->l('Show post tags'),
'type' => 'switch',
'default' => 1,
'tab' => 'blog',
),
'YBC_BLOG_FREE_SHOW_POST_CATEGORIES' => array(
'label' => $this->l('Show post categories'),
'type' => 'switch',
'default' => 1,
'tab' => 'blog',
),
//BLOG LISTING PAGES
'YBC_BLOG_FREE_ITEMS_PER_PAGE' => array(
'label' => $this->l('Number of posts per page on main page'),
'type' => 'text',
'width' => 200,
'validate' => 'isInt',
'required' => true,
'default' => 20,
'tab' => 'blog',
),
'YBC_BLOG_FREE_ITEMS_PER_PAGE_INNER' => array(
'label' => $this->l('Number of posts per page on inner pages'),
'type' => 'text',
'width' => 200,
'validate' => 'isInt',
'required' => true,
'default' => 20,
'tab' => 'blog',
),
'YBC_BLOG_FREE_POST_EXCERPT_LENGTH' => array(
'label' => $this->l('Post excerpt length'),
'type' => 'text',
'width' => 200,
'validate' => 'isInt',
'required' => true,
'default' => 120,
'tab' => 'blog',
),
'YBC_BLOG_FREE_RTL_MODE' => array(
'label' => $this->l('RTL mode'),
'type' => 'select',
'options' => array(
'query' => array(
array(
'id_option' => 'auto',
'name' => $this->l('Auto detect')
),
array(
'id_option' => 'rtl',
'name' => $this->l('RTL')
),
array(
'id_option' => 'ltr',
'name' => $this->l('LTR')
),
),
'id' => 'id_option',
'name' => 'name',
),
'default' => 'auto',
'tab' => 'general',
),
'YBC_BLOG_FREE_GALLERY_PER_PAGE' => array(
'label' => $this->l('Number of image per page'),
'type' => 'text',
'width' => 200,
'required' => true,
'default' => 24,
'validate' => 'isInt',
'tab' => 'gallery',
),
);
if(Module::isInstalled('ybc_blog_free') && Module::isEnabled('ybc_blog_free'))
Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'ybc_blog_free_post SET enabled=1 WHERE datetime_active!="0000-00-00" AND enabled=0 AND datetime_active<=NOW()');
//die('UPDATE '._DB_PREFIX_.'ybc_blog_free_post SET enabled=1 WHERE datetime_active!="0000-00-00" AND enabled=0 AND datetime_active<=NOW()');
if(!$this->is17 && isset($this->configs['YBC_BLOG_FREE_SIDEBAR_POSITION']))
unset($this->configs['YBC_BLOG_FREE_SIDEBAR_POSITION']);
$this->blogDir = $this->_path;
$this->alias = Configuration::get('YBC_BLOG_FREE_ALIAS',$this->context->language->id);
$this->friendly = (int)Configuration::get('YBC_BLOG_FREE_FRIENDLY_URL') && (int)Configuration::get('PS_REWRITING_SETTINGS') ? true : false;
$this->setMetas();
}
/**
* @see Module::install()
*/
public function install()
{
return parent::install()
&& $this->registerHook('displayLeftColumn')
&& $this->registerHook('displayBackOfficeHeader')
&& $this->registerHook('displayHome')
&& $this->registerHook('displayHeader')
&& $this->registerHook('displayFooter')
&& $this->registerHook('blogSearchBlock')
&& $this->registerHook('blogTagsBlock')
&& $this->registerHook('blogNewsBlock')
&& $this->registerHook('blogCategoriesBlock')
&& $this->registerHook('blogSlidersBlock')
&& $this->registerHook('blogGalleryBlock')
&& $this->registerHook('blogPopularPostsBlock')
&& $this->registerHook('moduleRoutes')
&& $this->registerHook('blogSidebar')
&& $this->registerHook('blogFeaturedPostsBlock')
&& $this->_installDb()
&& $this->_installTabs();
}
/**
* @see Module::uninstall()
*/
public function uninstall()
{
return parent::uninstall() && $this->_uninstallDb() && $this->_uninstallTabs();
}
private function _installDb()
{
$languages = Language::getLanguages(false);
if($this->configs)
{
foreach($this->configs as $key => $config)
{
if(isset($config['lang']) && $config['lang'])
{
$values = array();
foreach($languages as $lang)
{
$values[$lang['id_lang']] = isset($config['default']) ? $config['default'] : '';
}
Configuration::updateValue($key, $values);
}
else
Configuration::updateValue($key, isset($config['default']) ? $config['default'] : '');
}
}
//Install db structure
require_once(dirname(__FILE__).'/install/sql.php');
require_once(dirname(__FILE__).'/install/data.php');
//$import = new ImportExport();
//$import->importData();
return true;
}
private function _uninstallDb()
{
if($this->configs)
{
foreach($this->configs as $key => $config)
{
Configuration::deleteByName($key);
}
unset($config);
}
$tbls = array('post', 'post_lang', 'post_category', 'category', 'category_lang', 'comment', 'gallery', 'gallery_lang', 'tag', 'slide', 'slide_lang');
foreach($tbls as $tbl)
{
Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'ybc_blog_free_'.$tbl.'`');
}
$dirs = array('post','category','slide','gallery','post/thumb','gallery/thumb');
foreach($dirs as $dir)
{
$files = glob(dirname(__FILE__).'/views/img/'.$dir.'/*');
foreach($files as $file){
if(is_file($file) && $file!=dirname(__FILE__).'/views/img/'.$dir.'/index.php')
@unlink($file);
}
}
return true;
}
public function getContent()
{
$this->baseAdminPath = $this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$this->context->controller->addJqueryPlugin('tagify');
$control = trim(Tools::getValue('control'));
if(!$control)
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=post&list=true');
//Process post
if($control=='category')
{
$this->_postCategory();
}
elseif($control=='post')
{
$this->_postPost();
}
elseif($control=='config')
{
$this->_postConfig();
}
elseif($control=='comment')
{
$this->_postComment();
}
elseif($control=='gallery')
{
$this->_postGallery();
}
elseif($control=='slide')
{
$this->_postSlide();
}
elseif($control=='export')
{
$this->_postExport();
}
return $this->getAminHtml($control).$this->displayIframe();
}
public function displayIframe()
{
switch($this->context->language->iso_code) {
case 'en':
$url = 'https://cdn.prestahero.com/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe';
break;
case 'it':
$url = 'https://cdn.prestahero.com/it/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe';
break;
case 'fr':
$url = 'https://cdn.prestahero.com/fr/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe';
break;
case 'es':
$url = 'https://cdn.prestahero.com/es/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe';
break;
default:
$url = 'https://cdn.prestahero.com/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe';
}
$this->smarty->assign(
array(
'url_iframe' => $url
)
);
return $this->display(__FILE__,'iframe.tpl');
}
public function renderAdminBodyHtml($control)
{
if($control=='category')
{
$this->renderCategoryForm();
}
elseif($control=='post')
{
$this->renderPostForm();
}
elseif($control=='config')
{
$this->renderConfig();
}
elseif($control=='comment')
{
$this->renderCommentsForm();
}
elseif($control=='gallery')
{
$this->renderGalleryForm();
}
elseif($control=='slide')
{
$this->renderSlideForm();
}
elseif($control=='export')
{
$this->renderExportForm();
}
return $this->_html;
}
public function getAminHtml($control)
{
$this->smarty->assign(array(
'ybc_blog_free_ajax_url' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&ajaxproductsearch=true',
'ybc_blog_free_default_lang' => Configuration::get('PS_LANG_DEFAULT'),
'ybc_blog_free_is_updating' => Tools::getValue('id_post') || Tools::getValue('id_category') ? 1 : 0,
'ybc_blog_free_is_config_page' => Tools::getValue('control') == 'config' ? 1 : 0,
'ybc_blog_free_invalid_file' => $this->l('Invalid file'),
'ybc_blog_free_module_dir' => $this->_path,
'ybc_blog_free_sidebar' => $this->renderSidebar(),
'ybc_blog_free_body_html' => $this->renderAdminBodyHtml($control),
'ybc_blog_free_error_message' => $this->errorMessage,
));
return $this->display(__FILE__, 'admin.tpl');
}
/**
* Category
*/
public function renderCategoryForm()
{
$this->baseAdminPath = $this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
//List
if(trim(Tools::getValue('list'))=='true')
{
$fields_list = array(
'id_category' => array(
'title' => $this->l('Id'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'title' => array(
'title' => $this->l('Name'),
'width' => 140,
'type' => 'text',
'sort' => true,
'filter' => true
),
'description' => array(
'title' => $this->l('Description'),
'width' => 140,
'type' => 'text',
'sort' => true,
'filter' => true
),
'sort_order' => array(
'title' => $this->l('Sort order'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'enabled' => array(
'title' => $this->l('Enabled'),
'width' => 80,
'type' => 'active',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'enabled',
'value' => 'title',
'list' => array(
0 => array(
'enabled' => 1,
'title' => $this->l('Yes')
),
1 => array(
'enabled' => 0,
'title' => $this->l('No')
)
)
)
),
);
//Filter
$filter = "";
if(trim(Tools::getValue('id_category'))!='')
$filter .= " AND c.id_category = ".(int)trim(urldecode(Tools::getValue('id_category')));
if(trim(Tools::getValue('sort_order'))!='')
$filter .= " AND c.sort_order = ".(int)trim(urldecode(Tools::getValue('sort_order')));
if(trim(Tools::getValue('title'))!='')
$filter .= " AND cl.title like '%".addslashes(trim(urldecode(Tools::getValue('title'))))."%'";
if(trim(Tools::getValue('description'))!='')
$filter .= " AND cl.description like '%".addslashes(trim(urldecode(Tools::getValue('description'))))."%'";
if(trim(Tools::getValue('enabled'))!='')
$filter .= " AND c.enabled =".(int)Tools::getValue('enabled');
//Sort
$sort = "";
if(trim(Tools::getValue('sort')) && isset($fields_list[Tools::getValue('sort')]))
{
$sort .= trim(Tools::getValue('sort'))." ".(Tools::getValue('sort_type')=='asc' ? ' ASC ' :' DESC ')." , ";
}
else
$sort = false;
//Paggination
$page = (int)Tools::getValue('page') && (int)Tools::getValue('page') > 0 ? (int)Tools::getValue('page') : 1;
$totalRecords = (int)$this->countCategoriesWithFilter($filter);
$paggination = new Ybc_blog_free_paggination_class();
$paggination->total = $totalRecords;
$paggination->url = $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=category&list=true&page=_page_'.$this->getUrlExtra($fields_list);
$paggination->limit = 20;
$totalPages = ceil($totalRecords / $paggination->limit);
if($page > $totalPages)
$page = $totalPages;
$paggination->page = $page;
$start = $paggination->limit * ($page - 1);
if($start < 0)
$start = 0;
$categories = $this->getCategoriesWithFilter($filter, $sort, $start, $paggination->limit);
if($categories)
{
foreach($categories as &$cat)
{
$cat['view_url'] = $this->getLink('blog',array('id_category' => $cat['id_category']));
}
}
$paggination->text = $this->l('Showing {start} to {end} of {total} ({pages} Pages)');
$paggination->style_links = $this->l('links');
$paggination->style_results = $this->l('results');
$listData = array(
'name' => 'ybc_category',
'actions' => array('edit', 'delete', 'view'),
'currentIndex' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=category',
'identifier' => 'id_category',
'show_toolbar' => true,
'show_action' => true,
'title' => $this->l('Blog categories'),
'fields_list' => $fields_list,
'field_values' => $categories,
'paggination' => $paggination->render(),
'filter_params' => $this->getFilterParams($fields_list),
'show_reset' =>trim(Tools::getValue('sort_order'))!='' || trim(Tools::getValue('enabled'))!='' || trim(Tools::getValue('id_category'))!='' || trim(Tools::getValue('description'))!='' || trim(Tools::getValue('title'))!='' ? true : false,
'totalRecords' => $totalRecords
);
return $this->_html .= $this->renderList($listData);
}
//Form
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Manage blog categories'),
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Category title'),
'name' => 'title',
'lang' => true,
'required' => true,
),
array(
'type' => 'textarea',
'label' => $this->l('Meta description'),
'name' => 'meta_description',
'lang' => true,
'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}'
),
array(
'type' => 'tags',
'label' => $this->l('Meta keywords'),
'name' => 'meta_keywords',
'lang' => true,
'hint' => array(
$this->l('To add "keywords" click in the field, write something, and then press "Enter."'),
$this->l('Invalid characters:').' &lt;&gt;;=#{}'
)
),
array(
'type' => 'textarea',
'label' => $this->l('Description'),
'name' => 'description',
'lang' => true,
'autoload_rte' => true
),
array(
'type' => 'text',
'label' => $this->l('Url alias'),
'name' => 'url_alias',
'required' => true,
'lang'=>true,
),
array(
'type' => 'file',
'label' => $this->l('Image'),
'name' => 'image',
'desc' => $this->l('Recommended size: 1920x750'),
),
array(
'type' => 'text',
'label' => $this->l('Sort order'),
'name' => 'sort_order',
'required' => true
),
array(
'type' => 'switch',
'label' => $this->l('Enabled'),
'name' => 'enabled',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'hidden',
'name' => 'control'
)
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->module = $this;
$helper->identifier = $this->identifier;
$helper->submit_action = 'saveCategory';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$language = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->tpl_vars = array(
'base_url' => $this->context->shop->getBaseURL(),
'language' => array(
'id_lang' => $language->id,
'iso_code' => $language->iso_code
),
'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'),
'fields_value' => $this->getFieldsValues($this->categoryFields,'id_category','Ybc_blog_free_category_class','saveCategory'),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
'image_baseurl' => $this->_path.'views/img/',
'link' => $this->context->link,
'cancel_url' => $this->baseAdminPath.'&control=category&list=true',
'post_key' => 'id_category',
'addNewUrl' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=category',
);
if(Tools::isSubmit('id_category') && $this->itemExists('category','id_category',(int)Tools::getValue('id_category')))
{
$fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_category');
$category = new Ybc_blog_free_category_class((int)Tools::getValue('id_category'));
if($category->image)
{
$helper->tpl_vars['display_img'] = $this->_path.'views/img/category/'.$category->image;
$helper->tpl_vars['img_del_link'] = $this->baseAdminPath.'&id_category='.Tools::getValue('id_category').'&delcategoryimage=true&control=category';
}
}
$helper->override_folder = '/';
$this->_html .= $helper->generateForm(array($fields_form));
}
private function _postCategory()
{
$errors = array();
$id_category = (int)Tools::getValue('id_category');
if($id_category && !$this->itemExists('category','id_category',$id_category) && !Tools::isSubmit('list'))
Tools::redirectAdmin($this->baseAdminPath);
/**
* Change status
*/
if(Tools::isSubmit('change_enabled'))
{
$status = (int)Tools::getValue('change_enabled') ? 1 : 0;
$field = Tools::getValue('field');
$id_category = (int)Tools::getValue('id_category');
if(($field == 'enabled' && $id_category))
{
$this->changeStatus('category',$field,$id_category,$status);
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(array(
'listId' => $id_category,
'enabled' => $status,
'field' => $field,
'href' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=category&change_enabled='.($status ? '0' : '1').'&field='.$field.'&id_category='.$id_category,
)));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=category&list=true');
}
}
/**
* Delete image
*/
if($id_category && $this->itemExists('category','id_category',$id_category) && Tools::isSubmit('delcategoryimage'))
{
$category = new Ybc_blog_free_category_class($id_category);
$icoUrl = dirname(__FILE__).'/views/img/category/'.$category->image;
if($category->image && file_exists($icoUrl))
{
@unlink($icoUrl);
$category->image = '';
$category->datetime_modified = date('Y-m-d H:i:s');
$category->modified_by = (int)$this->context->employee->id;
$category->update();
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => 'success',
'message' => $this->displayConfirmation($this->l('Category image deleted')),
)
));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_category='.$id_category.'&control=category');
}
else
$errors[] = $this->l('Image does not exist');
}
/**
* Delete category
*/
if(Tools::isSubmit('del'))
{
$id_category = (int)Tools::getValue('id_category');
if(!$this->itemExists('category','id_category',$id_category))
$errors[] = $this->l('Category does not exist');
elseif($this->_deleteCategory($id_category))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=category&list=true');
}
else
$errors[] = $this->l('Could not delete the category. Please try again');
}
/**
* Save category
*/
if(Tools::isSubmit('saveCategory'))
{
if($id_category && $this->itemExists('category','id_category',$id_category))
{
$category = new Ybc_blog_free_category_class($id_category);
$category->datetime_modified = date('Y-m-d H:i:s');
$category->modified_by = (int)$this->context->employee->id;
}
else
{
$category = new Ybc_blog_free_category_class();
$category->datetime_added = date('Y-m-d H:i:s');
$category->datetime_modified = date('Y-m-d H:i:s');
$category->modified_by = (int)$this->context->employee->id;
$category->added_by = (int)$this->context->employee->id;
}
$category->enabled = trim(Tools::getValue('enabled',1)) ? 1 : 0;
$category->sort_order = (int)trim(Tools::getValue('sort_order',1));
$languages = Language::getLanguages(false);
foreach ($languages as $language)
{
$category->title[$language['id_lang']] = trim(Tools::getValue('title_'.$language['id_lang'])) != '' ? trim(Tools::getValue('title_'.$language['id_lang'])) : trim(Tools::getValue('title_'.Configuration::get('PS_LANG_DEFAULT')));
$category->url_alias[$language['id_lang']] = trim(Tools::getValue('url_alias_'.$language['id_lang'])) != '' ? trim(Tools::getValue('url_alias_'.$language['id_lang'])) : trim(Tools::getValue('url_alias_'.Configuration::get('PS_LANG_DEFAULT')));
if($category->title[$language['id_lang']] && !Validate::isCleanHtml($category->title[$language['id_lang']]))
$errors[] = $this->l('Title in '.$language['name'].' is not valid');
$category->meta_description[$language['id_lang']] = trim(Tools::getValue('meta_description_'.$language['id_lang'])) != '' ? trim(Tools::getValue('meta_description_'.$language['id_lang'])) : trim(Tools::getValue('meta_description_'.Configuration::get('PS_LANG_DEFAULT')));
if($category->meta_description[$language['id_lang']] && !Validate::isCleanHtml($category->meta_description[$language['id_lang']], true))
$errors[] = $this->l('Meta description in '.$language['name'].' is not valid');
$category->meta_keywords[$language['id_lang']] = trim(Tools::getValue('meta_keywords_'.$language['id_lang'])) != '' ? trim(Tools::getValue('meta_keywords_'.$language['id_lang'])) : trim(Tools::getValue('meta_keywords_'.Configuration::get('PS_LANG_DEFAULT')));
if($category->meta_keywords[$language['id_lang']] && !Validate::isTagsList($category->meta_keywords[$language['id_lang']], true))
$errors[] = $this->l('Meta keywords in '.$language['name'].' is not valid');
$category->description[$language['id_lang']] = trim(Tools::getValue('description_'.$language['id_lang'])) != '' ? trim(Tools::getValue('description_'.$language['id_lang'])) : trim(Tools::getValue('description_'.Configuration::get('PS_LANG_DEFAULT')));
if($category->description[$language['id_lang']] && !Validate::isCleanHtml($category->description[$language['id_lang']], true))
$errors[] = $this->l('Description in '.$language['name'].' is not valid');
}
if(Tools::getValue('title_'.Configuration::get('PS_LANG_DEFAULT'))=='')
$errors[] = $this->l('You need to set blog category title');
if($category->url_alias[Configuration::get('PS_LANG_DEFAULT')]=='')
$errors[] = $this->l('Url alias is required');
if(Tools::getValue('sort_order')=='')
$errors[] = $this->l('Sort order is required');
elseif(!Validate::isInt(Tools::getValue('sort_order')))
$errors[] = $this->l('Sort order is not valid');
/**
* Upload image
*/
$oldImage = false;
$newImage = false;
if(isset($_FILES['image']['tmp_name']) && isset($_FILES['image']['name']) && $_FILES['image']['name'])
{
if(file_exists(dirname(__FILE__).'/views/img/category/'.$_FILES['image']['name']))
{
$_FILES['image']['name'] = sha1(microtime()).'-'.$_FILES['image']['name'];
}
$type = Tools::strtolower(Tools::substr(strrchr($_FILES['image']['name'], '.'), 1));
$imagesize = @getimagesize($_FILES['image']['tmp_name']);
if (isset($_FILES['image']) &&
!empty($_FILES['image']['tmp_name']) &&
!empty($imagesize) &&
in_array($type, array('jpg', 'gif', 'jpeg', 'png'))
)
{
$temp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS');
if ($error = ImageManager::validateUpload($_FILES['image']))
$errors[] = $error;
elseif (!$temp_name || !move_uploaded_file($_FILES['image']['tmp_name'], $temp_name))
$errors[] = $this->l('Can not upload the file');
elseif (!ImageManager::resize($temp_name, dirname(__FILE__).'/views/img/category/'.$_FILES['image']['name'], null, null, $type))
$errors[] = $this->displayError($this->l('An error occurred during the image upload process.'));
if (isset($temp_name))
@unlink($temp_name);
if($category->image)
$oldImage = dirname(__FILE__).'/views/img/category/'.$category->image;
$category->image = $_FILES['image']['name'];
$newImage = dirname(__FILE__).'/views/img/category/'.$category->image;
}
}
/**
* Save
*/
if(!$errors)
{
if (!Tools::getValue('id_category'))
{
if (!$category->add())
{
$errors[] = $this->displayError($this->l('The category could not be added.'));
if($newImage && file_exists($newImage))
@unlink($newImage);
}
else
{
$id_category = $this->getMaxId('category','id_category');
}
}
elseif (!$category->update())
{
if($newImage && file_exists($newImage))
@unlink($newImage);
$errors[] = $this->displayError($this->l('The category could not be updated.'));
}
else
{
if($oldImage && file_exists($oldImage))
@unlink($oldImage);
}
}
}
if (count($errors))
{
if($newImage && file_exists($newImage))
@unlink($newImage);
$this->errorMessage = $this->displayError($errors);
}
$changedImages = array();
if(!$errors && isset($newImage) && $newImage && file_exists($newImage) && isset($category) && $category){
$changedImages[] = array(
'name' => 'image',
'url' => $this->_path.'views/img/category/'.$category->image,
'delete_url' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_category='.Tools::getValue('id_category').'&delcategoryimage=true&control=category',
);
}
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => $errors ? 'error' : 'success',
'message' => $errors ? $this->errorMessage : (isset($id_category) && $id_category ? $this->displaySuccessMessage($this->l('Category updated'),$this->l('View category'),$this->getLink('blog',array('id_category'=>$id_category))) : $this->displayConfirmation($this->l('Category updated'))),
'images' => isset($changedImages) && $changedImages ? $changedImages : array(),
'postUrl' => !$errors && Tools::isSubmit('saveCategory') && !(int)Tools::getValue('id_category') ? $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_category='.$this->getMaxId('category','id_category').'&control=category' : 0,
'itemKey' => 'id_category',
'itemId' => !$errors && Tools::isSubmit('saveCategory') && !(int)Tools::getValue('id_category') ? $this->getMaxId('category','id_category') : ((int)Tools::getValue('id_category') > 0 ? (int)Tools::getValue('id_category') : 0),
)
));
}
if (Tools::isSubmit('saveCategory') && Tools::isSubmit('id_category'))
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_category='.Tools::getValue('id_category').'&control=category');
elseif (Tools::isSubmit('saveCategory'))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=3&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_category='.$this->getMaxId('category','id_category').'&control=category');
}
}
public function displaySuccessMessage($msg, $title = false, $link = false)
{
$this->smarty->assign(array(
'msg' => $msg,
'title' => $title,
'link' => $link
));
if($msg)
return $this->displayConfirmation($this->display(__FILE__, 'success_message.tpl'));
}
private function _deleteCategory($id_category)
{
if($this->itemExists('category','id_category',$id_category))
{
$category = new Ybc_blog_free_category_class($id_category);
if($category->image && file_exists(dirname(__FILE__).'/views/img/category/'.$category->image))
{
@unlink(dirname(__FILE__).'/views/img/category/'.$category->image);
}
if($category->delete())
{
$posts = $this->getPostsByIdCategory($id_category);
if($posts)
{
foreach($posts as $post)
{
if($this->itemExists('post','id_post',$post['id_post']))
{
$categories = $this->getCategoriesByIdPost($post['id_post']);
if(count($categories) <= 1)
{
$this->_deletePost($post['id_post']);
}
}
}
}
$req = "DELETE FROM "._DB_PREFIX_."ybc_blog_free_post_category WHERE id_category=".(int)$id_category;
Db::getInstance()->execute($req);
return true;
}
}
return false;
}
/**
* Post
*/
public function renderPostForm()
{
//List
if(trim(Tools::getValue('list'))=='true')
{
$fields_list = array(
'id_post' => array(
'title' => $this->l('Id'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'title' => array(
'title' => $this->l('Name'),
'width' => 100,
'type' => 'text',
'sort' => true,
'filter' => true
),
'id_category' => array(
'title' => $this->l('Category'),
'width' => 100,
'type' => 'select',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'id_category',
'value' => 'title',
'list' => $this->getCategories()
)
),
'sort_order' => array(
'title' => $this->l('Sort order'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'click_number' => array(
'title' => $this->l('Views'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'likes' => array(
'title' => $this->l('Likes'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'enabled' => array(
'title' => $this->l('Enabled'),
'width' => 80,
'type' => 'active',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'enabled',
'value' => 'title',
'list' => array(
0 => array(
'enabled' => 1,
'title' => $this->l('Yes')
),
1 => array(
'enabled' => 0,
'title' => $this->l('No')
)
)
)
),
'is_featured' => array(
'title' => $this->l('Featured'),
'width' => 80,
'type' => 'active',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'is_featured',
'value' => 'title',
'list' => array(
0 => array(
'is_featured' => 1,
'title' => $this->l('Yes')
),
1 => array(
'is_featured' => 0,
'title' => $this->l('No')
)
)
)
),
);
//Filter
$filter = "";
if(trim(Tools::getValue('id_post'))!='')
$filter .= " AND p.id_post = ".(int)trim(urldecode(Tools::getValue('id_post')));
if(trim(Tools::getValue('sort_order'))!='')
$filter .= " AND p.sort_order = ".(int)trim(urldecode(Tools::getValue('sort_order')));
if(trim(Tools::getValue('click_number'))!='')
$filter .= " AND p.click_number = ".(int)trim(urldecode(Tools::getValue('click_number')));
if(trim(Tools::getValue('likes'))!='')
$filter .= " AND p.likes = ".(int)trim(urldecode(Tools::getValue('likes')));
if(trim(Tools::getValue('title'))!='')
$filter .= " AND pl.title like '%".addslashes(trim(urldecode(Tools::getValue('title'))))."%'";
if(trim(Tools::getValue('description'))!='')
$filter .= " AND pl.description like '%".addslashes(trim(urldecode(Tools::getValue('description'))))."%'";
if(trim(Tools::getValue('id_category'))!='')
$filter .= " AND p.id_post IN (SELECT id_post FROM "._DB_PREFIX_."ybc_blog_free_post_category WHERE id_category = ".(int)trim(urldecode(Tools::getValue('id_category'))).") ";
if(trim(Tools::getValue('enabled'))!='')
$filter .= " AND p.enabled = ".(int)trim(urldecode(Tools::getValue('enabled')));
if(trim(Tools::getValue('is_featured'))!='')
$filter .= " AND p.is_featured = ".(int)trim(urldecode(Tools::getValue('is_featured')));
//Sort
$sort = "";
if(trim(Tools::getValue('sort')) && isset($fields_list[Tools::getValue('sort')]))
{
$sort .= trim(Tools::getValue('sort'))." ".(Tools::getValue('sort_type')=='asc' ? ' ASC ' :' DESC ')." , ";
}
else
$sort = false;
//Paggination
$page = (int)Tools::getValue('page') && (int)Tools::getValue('page') > 0 ? (int)Tools::getValue('page') : 1;
$totalRecords = (int)$this->countPostsWithFilter($filter);
$paggination = new Ybc_blog_free_paggination_class();
$paggination->total = $totalRecords;
$paggination->url = $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=post&list=true&page=_page_'.$this->getUrlExtra($fields_list);
$paggination->limit = 20;
$totalPages = ceil($totalRecords / $paggination->limit);
if($page > $totalPages)
$page = $totalPages;
$paggination->page = $page;
$start = $paggination->limit * ($page - 1);
if($start < 0)
$start = 0;
$posts = $this->getPostsWithFilter($filter, $sort, $start, $paggination->limit);
if($posts)
{
foreach($posts as &$post)
{
$post['id_category'] = $this->getCategoriesStrByIdPost($post['id_post']);
$post['view_url'] = $this->getLink('blog',array('id_post'=>$post['id_post']));
}
}
$paggination->text = $this->l('Showing {start} to {end} of {total} ({pages} Pages)');
$paggination->style_links = $this->l('links');
$paggination->style_results = $this->l('results');
$listData = array(
'name' => 'ybc_post',
'actions' => array('edit', 'delete', 'view'),
'currentIndex' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=post',
'identifier' => 'id_post',
'show_toolbar' => true,
'show_action' => true,
'title' => $this->l('Blog posts'),
'fields_list' => $fields_list,
'field_values' => $posts,
'paggination' => $paggination->render(),
'filter_params' => $this->getFilterParams($fields_list),
'show_reset' => trim(Tools::getValue('likes'))!='' || trim(Tools::getValue('sort_order'))!='' || trim(Tools::getValue('click_number'))!='' || trim(Tools::getValue('enabled'))!='' || trim(Tools::getValue('is_featured'))!='' || trim(Tools::getValue('id_category'))!='' || trim(Tools::getValue('id_post'))!='' || trim(Tools::getValue('description'))!='' || trim(Tools::getValue('title'))!='' ? true : false,
'totalRecords' => $totalRecords,
'preview_link' => $this->getLink('blog')
);
return $this->_html .= $this->renderList($listData);
}
//Form
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Manage blog posts'),
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Post title'),
'name' => 'title',
'lang' => true,
'required' => true,
'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}'
),
array(
'type' => 'textarea',
'label' => $this->l('Meta description'),
'name' => 'meta_description',
'lang' => true,
'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}'
),
array(
'type' => 'tags',
'label' => $this->l('Meta keywords'),
'name' => 'meta_keywords',
'lang' => true,
'hint' => array(
$this->l('To add "keywords" click in the field, write something, and then press "Enter."'),
$this->l('Invalid characters:').' &lt;&gt;;=#{}'
)
),
array(
'type' => 'text',
'label' => $this->l('Url alias'),
'name' => 'url_alias',
'required' => true,
'lang'=>true,
'hint' => $this->l('Only letters and the hyphen (-) character are allowed.')
),
array(
'type' => 'tags',
'label' => $this->l('Tags'),
'name' => 'tags',
'lang' => true,
'hint' => array(
$this->l('To add "tags" click in the field, write something, and then press "Enter."'),
$this->l('Invalid characters:').' &lt;&gt;;=#{}'
)
),
array(
'type' => 'textarea',
'label' => $this->l('Short description'),
'name' => 'short_description',
'lang' => true,
'required' => true,
'autoload_rte' => true,
'hint' => $this->l('Invalid characters:').' <>;=#{}'
),
array(
'type' => 'textarea',
'label' => $this->l('Description'),
'name' => 'description',
'lang' => true,
'autoload_rte' => true,
'hint' => $this->l('Invalid characters:').' <>;=#{}'
),
array(
'type' => 'file',
'label' => $this->l('Thumbnail'),
'name' => 'thumb',
'imageType' => 'thumb',
'desc' => $this->l('Recommended size: 260x180'),
),
array(
'type' => 'file',
'label' => $this->l('Image'),
'name' => 'image',
'desc' => $this->l('Recommended size: 1920x750'),
),
array(
'type' => 'blog_categories',
'label' => $this->l('Choose one or more categories:'),
'categories' => $this->getCategories(),
'name' => 'categories',
'required' => true,
'selected_categories' => $this->getSelectedCategories((int)Tools::getValue('id_post'))
),
array(
'type' => 'products_search',
'label' => $this->l('Related products'),
'name' => 'products',
'selected_products' => $this->getSelectedProducts((int)Tools::getValue('id_post')),
'hint' => array(
$this->l('To add "products" type in product name and choose the product from the dropdown'),
$this->l('Invalid characters:').' &lt;&gt;;=#{}'
)
),
array(
'type' => 'switch',
'label' => $this->l('Is featured post'),
'name' => 'is_featured',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'text',
'label' => $this->l('Sort order'),
'name' => 'sort_order',
'required' => true,
),
array(
'type' => 'text',
'label' => $this->l('Views'),
'name' => 'click_number',
'required' => true,
),
array(
'type' => 'text',
'label' => $this->l('Likes'),
'name' => 'likes',
'required' => true,
),
array(
'type' => 'switch',
'label' => $this->l('Enabled'),
'name' => 'enabled',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'date',
'label' => $this->l('Date Enabled'),
'name' => 'datetime_active',
),
array(
'type' => 'hidden',
'name' => 'control'
)
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->module = $this;
$helper->identifier = $this->identifier;
$helper->submit_action = 'savePost';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$language = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->tpl_vars = array(
'base_url' => $this->context->shop->getBaseURL(),
'language' => array(
'id_lang' => $language->id,
'iso_code' => $language->iso_code
),
'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'),
'fields_value' => $this->getFieldsValues($this->postFields,'id_post','Ybc_blog_free_post_class','savePost'),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
'image_baseurl' => $this->_path.'views/img/',
'link' => $this->context->link,
'post_key' => 'id_post',
'cancel_url' => $this->baseAdminPath.'&control=post&list=true',
'addNewUrl' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=post',
);
if(Tools::isSubmit('id_post') && $this->itemExists('post','id_post',(int)Tools::getValue('id_post')))
{
$fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_post');
$post = new Ybc_blog_free_post_class((int)Tools::getValue('id_post'));
if($post->image)
{
$helper->tpl_vars['display_img'] = $this->_path.'views/img/post/'.$post->image;
$helper->tpl_vars['img_del_link'] = $this->baseAdminPath.'&id_post='.Tools::getValue('id_post').'&delpostimage=true&control=post';
}
if($post->thumb)
{
$helper->tpl_vars['display_thumb'] = $this->_path.'views/img/post/thumb/'.$post->thumb;
$helper->tpl_vars['thumb_del_link'] = $this->baseAdminPath.'&id_post='.Tools::getValue('id_post').'&delpostthumb=true&control=post';
}
}
$helper->override_folder = '/';
$this->_html .= $helper->generateForm(array($fields_form));
}
private function _postPost()
{
$errors = array();
$id_post = (int)Tools::getValue('id_post');
if($id_post && !$this->itemExists('post','id_post',$id_post) && !Tools::isSubmit('list'))
Tools::redirectAdmin($this->baseAdminPath);
/**
* Change status
*/
if(Tools::isSubmit('change_enabled'))
{
$status = (int)Tools::getValue('change_enabled') ? 1 : 0;
$field = Tools::getValue('field');
$id_post = (int)Tools::getValue('id_post');
if(($field == 'enabled' || $field=='is_featured') && $id_post)
{
$this->changeStatus('post',$field,$id_post,$status);
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(array(
'listId' => $id_post,
'enabled' => $status,
'field' => $field,
'href' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=post&change_enabled='.($status ? '0' : '1').'&field='.$field.'&id_post='.$id_post,
)));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=post&list=true');
}
}
/**
* Delete image
*/
if($id_post && $this->itemExists('post','id_post',$id_post) && (Tools::isSubmit('delpostimage') || Tools::isSubmit('delpostthumb')))
{
$post = new Ybc_blog_free_post_class($id_post);
$imageUrl = dirname(__FILE__).'/views/img/post/'.$post->image;
$thumbUrl = dirname(__FILE__).'/views/img/post/thumb/'.$post->thumb;
$post->datetime_modified = date('Y-m-d H:i:s');
$post->modified_by = (int)$this->context->employee->id;
if(Tools::isSubmit('delpostthumb'))
{
if(file_exists($thumbUrl) && $post->thumb)
{
@unlink($thumbUrl);
$post->thumb = '';
$post->update();
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => 'success',
'message' => $this->displayConfirmation($this->l('Thumbnail image deleted')),
)
));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_post='.$id_post.'&control=post');
}
else
{
$errors[] = $this->l('Thumbnail image does not exist');
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => 'error',
'message' => $this->displayError($errors),
)
));
}
}
}
elseif(Tools::isSubmit('delpostimage'))
{
if($post->image && file_exists($imageUrl))
{
@unlink($imageUrl);
$post->image = '';
$post->update();
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => 'success',
'message' => $this->displayConfirmation($this->l('Image deleted')),
)
));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_post='.$id_post.'&control=post');
}
else
{
$errors[] = $this->l('Image does not exist');
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => 'error',
'message' => $this->displayError($errors),
)
));
}
}
}
else
$errors[] = $this->l('Image does not exist');
}
/**
* Delete post
*/
if(Tools::isSubmit('del'))
{
$id_post = (int)Tools::getValue('id_post');
if(!$this->itemExists('post','id_post',$id_post))
$errors[] = $this->l('Post does not exist');
elseif($this->_deletePost($id_post))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=post&list=true');
}
else
$errors[] = $this->l('Could not delete the post. Please try again');
}
/**
* Save post
*/
if(Tools::isSubmit('savePost'))
{
if($id_post && $this->itemExists('post','id_post',$id_post))
{
$post = new Ybc_blog_free_post_class($id_post);
$post->datetime_modified = date('Y-m-d H:i:s');
$post->modified_by = (int)$this->context->employee->id;
}
else
{
$post = new Ybc_blog_free_post_class();
$post->datetime_added = date('Y-m-d H:i:s');
$post->datetime_modified = date('Y-m-d H:i:s');
$post->modified_by = (int)$this->context->employee->id;
$post->added_by = (int)$this->context->employee->id;
}
$post->products = trim(trim(Tools::getValue('inputAccessories','')),'-');
$post->enabled = Tools::getValue('enabled') ? 1 : 0;
$post->is_featured = Tools::getValue('is_featured') ? 1 : 0;
$post->sort_order = (int)Tools::getValue('sort_order',1);
$post->click_number = (int)Tools::getValue('click_number',0);
$post->likes = (int)Tools::getValue('likes',0);
$post->datetime_active=Tools::getValue('datetime_active');
if($post->click_number < 0)
$errors[] = $this->l('Views can not be smaller than 0');
$post->likes = (int)Tools::getValue('likes',1);
if($post->likes < 0)
$errors[] = $this->l('Likes can not be smaller than 0');
$languages = Language::getLanguages(false);
$tags = array();
foreach ($languages as $language)
{
$post->title[$language['id_lang']] = trim(Tools::getValue('title_'.$language['id_lang'])) != '' ? trim(Tools::getValue('title_'.$language['id_lang'])) : trim(Tools::getValue('title_'.Configuration::get('PS_LANG_DEFAULT')));
$post->url_alias[$language['id_lang']] = trim(Tools::getValue('url_alias_'.$language['id_lang'])) != '' ? trim(Tools::getValue('url_alias_'.$language['id_lang'])) : trim(Tools::getValue('url_alias_'.Configuration::get('PS_LANG_DEFAULT')));
if($post->title[$language['id_lang']] && !Validate::isCleanHtml($post->title[$language['id_lang']]))
$errors[] = $this->l('Title in '.$language['name'].' is not valid');
if($post->url_alias[$language['id_lang']] && !Validate::isLinkRewrite($post->url_alias[$language['id_lang']]))
$errors[] = $this->l('Url alias in '.$language['name'].' is not valid');
$post->meta_description[$language['id_lang']] = trim(Tools::getValue('meta_description_'.$language['id_lang'])) != '' ? trim(Tools::getValue('meta_description_'.$language['id_lang'])) : trim(Tools::getValue('meta_description_'.Configuration::get('PS_LANG_DEFAULT')));
if($post->meta_description[$language['id_lang']] && !Validate::isCleanHtml($post->meta_description[$language['id_lang']], true))
$errors[] = $this->l('Meta description in '.$language['name'].' is not valid');
$post->meta_keywords[$language['id_lang']] = trim(Tools::getValue('meta_keywords_'.$language['id_lang'])) != '' ? trim(Tools::getValue('meta_keywords_'.$language['id_lang'])) : trim(Tools::getValue('meta_keywords_'.Configuration::get('PS_LANG_DEFAULT')));
if($post->meta_keywords[$language['id_lang']] && !Validate::isTagsList($post->meta_keywords[$language['id_lang']], true))
$errors[] = $this->l('Meta keywords in '.$language['name'].' is not valid');
$post->short_description[$language['id_lang']] = trim(Tools::getValue('short_description_'.$language['id_lang'])) != '' ? trim(Tools::getValue('short_description_'.$language['id_lang'])) : trim(Tools::getValue('short_description_'.Configuration::get('PS_LANG_DEFAULT')));
if($post->short_description[$language['id_lang']] && !Validate::isCleanHtml($post->short_description[$language['id_lang']], true))
$errors[] = $this->l('Short description in '.$language['name'].' is not valid');
$post->description[$language['id_lang']] = trim(Tools::getValue('description_'.$language['id_lang'])) != '' ? trim(Tools::getValue('description_'.$language['id_lang'])) : trim(Tools::getValue('description_'.Configuration::get('PS_LANG_DEFAULT')));
if($post->description[$language['id_lang']] && !Validate::isCleanHtml($post->description[$language['id_lang']], true))
$errors[] = $this->l('Description in '.$language['name'].' is not valid');
if($post->products && !preg_match('/^[0-9]+([\-0-9])*$/', $post->products))
{
$errors[] = $this->l('Products is not valid');
}
$tagStr = trim(Tools::getValue('tags_'.$language['id_lang']));
if($tagStr && Validate::isTagsList($tagStr))
$tags[$language['id_lang']] = explode(',',$tagStr);
elseif($tagStr && !Validate::isTagsList($tagStr))
{
$tags[$language['id_lang']] = array();
$errors[] = $this->l('Tags in '.$language['name'].' is not valid');
}
else
$tags[$language['id_lang']] = array();
}
$categories = Tools::getValue('categories');
if(Tools::getValue('title_'.Configuration::get('PS_LANG_DEFAULT'))=='')
$errors[] = $this->l('You need to set blog post title');
if(Tools::getValue('short_description_'.Configuration::get('PS_LANG_DEFAULT'))=='')
$errors[] = $this->l('You need to set blog post short description');
if($post->url_alias[(int)Configuration::get('PS_LANG_DEFAULT')]=='')
$errors[] = $this->l('Url alias is required');
if(!$categories || !is_array($categories))
$errors[] = $this->l('You need to choose at least 1 category');
if(Tools::getValue('sort_order')=='')
$errors[] = $this->l('Sort order is required');
elseif(!Validate::isInt(Tools::getValue('sort_order')))
$errors[] = $this->l('Sort order is not valid');
if(Tools::getValue('click_number')=='')
$errors[] = $this->l('Views is required');
elseif(!Validate::isInt(Tools::getValue('click_number')))
$errors[] = $this->l('Views is not valid');
if(Tools::getValue('likes')=='')
$errors[] = $this->l('Likes is required');
elseif(!Validate::isInt(Tools::getValue('likes')))
$errors[] = $this->l('Likes is not valid');
/**
* Upload image
*/
$oldImage = false;
$newImage = false;
if(isset($_FILES['image']['tmp_name']) && isset($_FILES['image']['name']) && $_FILES['image']['name'])
{
if(file_exists(dirname(__FILE__).'/views/img/post/'.$_FILES['image']['name']))
{
$_FILES['image']['name'] = sha1(microtime()).'-'.$_FILES['image']['name'];
}
$type = Tools::strtolower(Tools::substr(strrchr($_FILES['image']['name'], '.'), 1));
$imagesize = @getimagesize($_FILES['image']['tmp_name']);
if (isset($_FILES['image']) &&
in_array($type, array('jpg', 'gif', 'jpeg', 'png'))
)
{
$temp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS');
if ($error = ImageManager::validateUpload($_FILES['image']))
$errors[] = $error;
elseif (!$temp_name || !move_uploaded_file($_FILES['image']['tmp_name'], $temp_name))
$errors[] = $this->l('Can not upload the file');
elseif (!ImageManager::resize($temp_name, dirname(__FILE__).'/views/img/post/'.$_FILES['image']['name'], null, null, $type))
$errors[] = $this->displayError($this->l('An error occurred during the image upload process.'));
if (isset($temp_name))
@unlink($temp_name);
if($post->image)
$oldImage = dirname(__FILE__).'/views/img/post/'.$post->image;
$post->image = $_FILES['image']['name'];
$newImage = dirname(__FILE__).'/views/img/post/'.$post->image;
}
elseif(isset($_FILES['image']) &&
!empty($_FILES['image']['tmp_name']) &&
!empty($imagesize) &&
in_array($type, array('jpg', 'gif', 'jpeg', 'png')
))
$errors[] = $this->l('Image is invalid');
}
/**
* Upload thumbnail
*/
$oldThumb = false;
$newThumb = false;
if(isset($_FILES['thumb']['tmp_name']) && isset($_FILES['thumb']['name']) && $_FILES['thumb']['name'])
{
if(file_exists(dirname(__FILE__).'/views/img/post/thumb/'.$_FILES['thumb']['name']))
{
$_FILES['thumb']['name'] = sha1(microtime()).'-'.$_FILES['thumb']['name'];
}
$type = Tools::strtolower(Tools::substr(strrchr($_FILES['thumb']['name'], '.'), 1));
$thumbsize = @getimagesize($_FILES['thumb']['tmp_name']);
if (isset($_FILES['thumb']) &&
!empty($_FILES['thumb']['tmp_name']) &&
!empty($thumbsize) &&
in_array($type, array('jpg', 'gif', 'jpeg', 'png'))
)
{
$temp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS');
if ($error = ImageManager::validateUpload($_FILES['thumb']))
$errors[] = $error;
elseif (!$temp_name || !move_uploaded_file($_FILES['thumb']['tmp_name'], $temp_name))
$errors[] = $this->l('Can not upload the file');
elseif (!ImageManager::resize($temp_name, dirname(__FILE__).'/views/img/post/thumb/'.$_FILES['thumb']['name'], null, null, $type))
$errors[] = $this->displayError($this->l('An error occurred during the thumb upload process.'));
if (isset($temp_name))
@unlink($temp_name);
if($post->thumb)
$oldThumb = dirname(__FILE__).'/views/img/post/thumb/'.$post->thumb;
$post->thumb = $_FILES['thumb']['name'];
$newThumb = dirname(__FILE__).'/views/img/post/thumb/'.$post->thumb;
}
elseif(isset($_FILES['thumb']) &&
!in_array($type, array('jpg', 'gif', 'jpeg', 'png'))
)
$errors[] = $this->l('Thumbnail image is invalid');
}
/**
* Save
*/
$changedImages = array();
if(!$errors)
{
if (!Tools::getValue('id_post'))
{
if (!$post->add())
{
$errors[] = $this->displayError($this->l('The post could not be added.'));
if($newImage && file_exists($newImage))
@unlink($newImage);
if($newThumb && file_exists($newThumb))
@unlink($newThumb);
}
else
{
$id_post = $this->getMaxId('post','id_post');
$this->updateCategories($categories, $id_post);
$this->updateTags($id_post, $tags);
}
}
elseif (!$post->update())
{
if($newImage && file_exists($newImage))
@unlink($newImage);
if($newThumb && file_exists($newThumb))
@unlink($newThumb);
$errors[] = $this->displayError($this->l('The post could not be updated.'));
}
else
{
if($oldImage && file_exists($oldImage))
{
@unlink($oldImage);
}
if($oldThumb && file_exists($oldThumb))
{
@unlink($oldThumb);
}
$this->updateCategories($categories, $id_post);
$this->updateTags($id_post, $tags);
}
}
}
if (count($errors))
{
if($newImage && file_exists($newImage))
@unlink($newImage);
if($newThumb && file_exists($newThumb))
@unlink($newThumb);
$this->errorMessage = $this->displayError($errors);
}
if(isset($newThumb) && $newThumb && file_exists($newThumb) && !$errors && isset($post))
{
$changedImages[] = array(
'name' => 'thumb',
'url' => $this->_path.'views/img/post/thumb/'.$post->thumb,
'delete_url' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_post='.Tools::getValue('id_post').'&delpostthumb=true&control=post',
);
}
if(isset($newImage) && $newImage && file_exists($newImage) && !$errors && isset($post)){
$changedImages[] = array(
'name' => 'image',
'url' => $this->_path.'views/img/post/'.$post->image,
'delete_url' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_post='.Tools::getValue('id_post').'&delpostimage=true&control=post',
);
}
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => $errors ? 'error' : 'success',
'message' => $errors ? $this->errorMessage : (isset($id_post) && $id_post ? $this->displaySuccessMessage($this->l('Post saved'),$this->l('View this post'),$this->getLink('blog',array('id_post'=>$id_post))) : $this->displayConfirmation($this->l('Post saved'))),
'images' => isset($changedImages) && $changedImages ? $changedImages : array(),
'postUrl' => !$errors && Tools::isSubmit('savePost') && !(int)Tools::getValue('id_post') ? $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_post='.$this->getMaxId('post','id_post').'&control=post' : 0,
'itemKey' => 'id_post',
'itemId' => !$errors && Tools::isSubmit('savePost') && !(int)Tools::getValue('id_post') ? $this->getMaxId('post','id_post') : ((int)Tools::getValue('id_post') > 0 ? (int)Tools::getValue('id_post') : 0),
)
));
}
if(!$errors)
{
if (Tools::isSubmit('savePost') && Tools::isSubmit('id_post'))
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_post='.Tools::getValue('id_post').'&control=post');
elseif (Tools::isSubmit('savePost'))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=3&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_post='.$this->getMaxId('post','id_post').'&control=post');
}
}
}
private function _deletePost($id_post)
{
if($this->itemExists('post','id_post',$id_post))
{
$post = new Ybc_blog_free_post_class($id_post);
if($post->image && file_exists(dirname(__FILE__).'/views/img/post/'.$post->image))
{
@unlink(dirname(__FILE__).'/views/img/post/'.$post->image);
}
if($post->thumb && file_exists(dirname(__FILE__).'/views/img/post/thumb/'.$post->thumb))
{
@unlink(dirname(__FILE__).'/views/img/post/thumb/'.$post->thumb);
}
if($post->delete())
{
$req = "DELETE FROM "._DB_PREFIX_."ybc_blog_free_post_category WHERE id_post=".(int)$id_post;
Db::getInstance()->execute($req);
$req = "DELETE FROM "._DB_PREFIX_."ybc_blog_free_tag WHERE id_post=".(int)$id_post;
Db::getInstance()->execute($req);
$req = "DELETE FROM "._DB_PREFIX_."ybc_blog_free_comment WHERE id_post=".(int)$id_post;
Db::getInstance()->execute($req);
return true;
}
}
return false;
}
private function _deleteComment($id_comment)
{
if($this->itemExists('comment','id_comment',$id_comment))
{
$comment = new Ybc_blog_free_comment_class($id_comment);
return $comment->delete();
}
return false;
}
private function _deleteSlide($id_slide)
{
if($this->itemExists('slide','id_slide',$id_slide))
{
$slide = new Ybc_blog_free_slide_class($id_slide);
if($slide->image && file_exists(dirname(__FILE__).'/views/img/slide/'.$slide->image))
{
@unlink(dirname(__FILE__).'/views/img/slide/'.$slide->image);
}
return $slide->delete();
}
return false;
}
private function _deleteGallery($id_gallery)
{
if($this->itemExists('gallery','id_gallery',$id_gallery))
{
$gallery = new Ybc_blog_free_gallery_class($id_gallery);
if($gallery->image && file_exists(dirname(__FILE__).'/views/img/gallery/'.$gallery->image))
{
@unlink(dirname(__FILE__).'/views/img/gallery/'.$gallery->image);
}
if($gallery->image && file_exists(dirname(__FILE__).'/views/img/gallery/thumb/'.$gallery->image))
{
@unlink(dirname(__FILE__).'/views/img/gallery/thumb/'.$gallery->image);
}
return $gallery->delete();
}
return false;
}
public function updateCategories($categories, $id_post)
{
$req = "DELETE FROM "._DB_PREFIX_."ybc_blog_free_post_category WHERE id_post = ".(int)$id_post;
Db::getInstance()->execute($req);
if($categories)
{
foreach($categories as $cat)
{
if(!$this->checkPostCategory($id_post, (int)$cat))
{
$req = "INSERT INTO "._DB_PREFIX_."ybc_blog_free_post_category(id_post, id_category) VALUES(".(int)$id_post.", ".(int)$cat.")";
Db::getInstance()->execute($req);
}
}
}
}
public function checkPostCategory($id_post, $id_category)
{
$req = "SELECT * FROM "._DB_PREFIX_."ybc_blog_free_post_category WHERE id_post = ".(int)$id_post." AND id_category = ".(int)$id_category;
return Db::getInstance()->getRow($req);
}
public function getCategories()
{
$req = "SELECT c.*, cl.title, cl.description
FROM "._DB_PREFIX_."ybc_blog_free_category c
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_category_lang cl ON c.id_category = cl.id_category
WHERE cl.id_lang = ".(int)$this->context->language->id;
return Db::getInstance()->executeS($req);
}
public function getCategoriesWithFilter($filter = false, $sort = false, $start = false, $limit = false)
{
$req = "SELECT c.*, cl.title, cl.description
FROM "._DB_PREFIX_."ybc_blog_free_category c
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_category_lang cl ON c.id_category = cl.id_category
WHERE cl.id_lang = ".(int)$this->context->language->id.($filter ? $filter : '')."
ORDER BY ".($sort ? $sort : '')." datetime_added ASC " . ($start !== false && $limit ? " LIMIT ".(int)$start.", ".(int)$limit : "");
return Db::getInstance()->executeS($req);
}
public function getSlidesWithFilter($filter = false, $sort = false, $start = false, $limit = false)
{
$req = "SELECT s.*, sl.caption, sl.url
FROM "._DB_PREFIX_."ybc_blog_free_slide s
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_slide_lang sl ON s.id_slide = sl.id_slide
WHERE sl.id_lang = ".(int)$this->context->language->id.($filter ? $filter : '')."
ORDER BY ".($sort ? $sort : '')." s.id_slide ASC " . ($start !== false && $limit ? " LIMIT ".(int)$start.", ".(int)$limit : "");
return Db::getInstance()->executeS($req);
}
public function countSlidesWithFilter($filter = false)
{
$req = "SELECT COUNT(s.id_slide) as total_slides
FROM "._DB_PREFIX_."ybc_blog_free_slide s
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_slide_lang sl ON s.id_slide = sl.id_slide
WHERE sl.id_lang = ".(int)$this->context->language->id.($filter ? $filter : '');
$row = Db::getInstance()->getRow($req);
return isset($row['total_slides']) ? (int)$row['total_slides'] : 0;
}
public function getGalleriesWithFilter($filter = false, $sort = false, $start = false, $limit = false)
{
$req = "SELECT g.*, gl.title, gl.description
FROM "._DB_PREFIX_."ybc_blog_free_gallery g
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_gallery_lang gl ON g.id_gallery = gl.id_gallery
WHERE gl.id_lang = ".(int)$this->context->language->id.($filter ? $filter : '')."
ORDER BY ".($sort ? $sort : '')." g.id_gallery ASC " . ($start !== false && $limit ? " LIMIT ".(int)$start.", ".(int)$limit : "");
return Db::getInstance()->executeS($req);
}
public function countGalleriesWithFilter($filter = false)
{
$req = "SELECT COUNT(g.id_gallery) as total_galleries
FROM "._DB_PREFIX_."ybc_blog_free_gallery g
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_gallery_lang gl ON g.id_gallery = gl.id_gallery
WHERE gl.id_lang = ".(int)$this->context->language->id.($filter ? $filter : '');
$row = Db::getInstance()->getRow($req);
return isset($row['total_galleries']) ? (int)$row['total_galleries'] : 0;
}
public function getCategoryById($id_category, $id_lang = false)
{
if(!$id_lang)
$id_lang = (int)$this->context->language->id;
$req = "SELECT c.*, cl.title, cl.description,cl.meta_keywords,cl.meta_description
FROM "._DB_PREFIX_."ybc_blog_free_category c
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_category_lang cl ON c.id_category = cl.id_category
WHERE cl.id_lang = ".(int)$id_lang." AND c.id_category=".(int)$id_category;
return Db::getInstance()->getRow($req);
}
public function countCategoriesWithFilter($filter)
{
$req = "SELECT c.*, cl.title, cl.description
FROM "._DB_PREFIX_."ybc_blog_free_category c
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_category_lang cl ON c.id_category = cl.id_category
WHERE cl.id_lang = ".(int)$this->context->language->id.($filter ? $filter : '');
$res = Db::getInstance()->executeS($req);
return $res ? count($res) : 0;
}
public function getSelectedCategories($id_post)
{
if(Tools::isSubmit('savePost'))
{
$categories = Tools::getValue('categories');
if(is_array($categories))
return $categories;
else
return array();
}
$categories = array();
if($id_post)
{
$req = "SELECT id_category FROM "._DB_PREFIX_."ybc_blog_free_post_category
WHERE id_post = ".(int)$id_post;
$rows = Db::getInstance()->executeS($req);
if($rows)
foreach($rows as $row)
$categories[] = $row['id_category'];
}
return $categories;
}
public function getSelectedProducts($id_post)
{
$products = array();
if(Tools::isSubmit('inputAccessories') && trim(trim(Tools::getValue('inputAccessories')),','))
{
$products = explode('-', trim(trim(Tools::getValue('inputAccessories')),'-'));
}
elseif($id_post)
{
$req = "SELECT products FROM "._DB_PREFIX_."ybc_blog_free_post
WHERE id_post = ".(int)$id_post;
$row = Db::getInstance()->getRow($req);
if($row)
{
$products = explode('-', trim($row['products'],'-'));
}
}
if($products)
{
foreach($products as $key => &$product)
{
$product = (int)$product;
}
unset($key);
$sql = 'SELECT p.`id_product`, pl.`name`,p.`reference`
FROM `'._DB_PREFIX_.'product` p
'.Shop::addSqlAssociation('product', 'p').'
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` '.Shop::addSqlRestrictionOnLang('pl').')
WHERE pl.`id_lang` = '.(int)$this->context->language->id.' AND p.`id_product` IN ('.implode(',',$products).')';
$product_list = Db::getInstance()->executeS($sql);
return $product_list;
}
return false;
}
public function getTagsByIdPost($id_post, $id_lang = false)
{
if(!$id_lang)
$id_lang = $this->context->language->id;
$req = "SELECT * FROM "._DB_PREFIX_."ybc_blog_free_tag
WHERE id_lang = ".(int)$id_lang." AND id_post = ".(int)$id_post."
ORDER by tag asc";
$tags = Db::getInstance()->executeS($req);
if($tags)
{
foreach($tags as &$tag)
{
$tag['link'] = $this->getLink('blog',array('tag' => urlencode($tag['tag'])));
}
}
return $tags;
}
public function increasTagViews($tag)
{
$sql = "UPDATE "._DB_PREFIX_."ybc_blog_free_tag
SET click_number = click_number + 1
WHERE tag = '".pSQL($tag)."'";
return Db::getInstance()->execute($sql);
}
public function getTags($limit = 20, $id_lang = false)
{
if(!$id_lang)
$id_lang = $this->context->language->id;
$req = "SELECT DISTINCT ROUND(SUM(t.click_number)/COUNT(t.id_tag)) as viewed, t.tag FROM "._DB_PREFIX_."ybc_blog_free_tag t
WHERE id_lang = ".(int)$id_lang."
GROUP BY t.tag
ORDER BY viewed desc, tag asc
LIMIT 0,".(int)$limit;
$tags = Db::getInstance()->executeS($req);
if($tags)
{
foreach($tags as &$tag)
{
$tag['link'] = $this->getLink('blog',array('tag' => urlencode($tag['tag'])));
}
}
return $tags;
}
public function updateTags($id_post, $tags)
{
if($id_post && $tags && is_array($tags))
{
foreach($tags as $id_lang => $tagList)
{
if($tagList && is_array($tagList))
{
$str = '';
foreach($tagList as $tag)
{
$tag = Tools::strtolower($tag);
if($tag && !$this->checkTagLang($id_post, $id_lang, $tag))
{
$req = "INSERT INTO "._DB_PREFIX_."ybc_blog_free_tag(id_tag,id_post, id_lang, tag, click_number)
VALUES(null, ".(int)$id_post.", ".(int)$id_lang.", '".pSQL($tag)."',0)";
Db::getInstance()->execute($req);
}
$str .= pSQL($tag)."','";
}
$req = "DELETE FROM "._DB_PREFIX_."ybc_blog_free_tag
WHERE id_post = ".(int)$id_post." AND id_lang = ".(int)$id_lang." AND tag NOT IN ('".rtrim($str,"','")."')";
Db::getInstance()->execute($req);
}
else
{
$req = "DELETE FROM "._DB_PREFIX_."ybc_blog_free_tag
WHERE id_post = ".(int)$id_post." AND id_lang = ".(int)$id_lang;
Db::getInstance()->execute($req);
}
}
}
}
public function checkTagLang($id_post, $id_lang, $tag)
{
$req = "SELECT * FROM "._DB_PREFIX_."ybc_blog_free_tag
WHERE id_lang = ".(int)$id_lang." AND id_post = ".(int)$id_post." AND tag = '".pSQL($tag)."'";
return Db::getInstance()->getRow($req);
}
public function getTagStr($id_post, $id_lang)
{
if(!$id_post || !$id_lang)
return '';
$req = "SELECT tag FROM "._DB_PREFIX_."ybc_blog_free_tag WHERE id_post = ".(int)$id_post." AND id_lang = ".(int)$id_lang;
$tags = Db::getInstance()->executeS($req);
$tagStr = '';
if($tags)
{
foreach($tags as $tag)
$tagStr .= $tag['tag'].',';
}
return trim($tagStr,',');
}
/**
* Sidebar
*/
public function renderSidebar()
{
$this->baseAdminPath = $this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$this->context->smarty->assign(
array(
'link' => $this->context->link,
'list' => array(
array(
'label' => $this->l('Blog posts'),
'url' => $this->baseAdminPath.'&control=post&list=true',
'id' => 'ybc_tab_post',
'icon' => 'icon-AdminPriceRule'
),
array(
'label' => $this->l('Blog categories'),
'url' => $this->baseAdminPath.'&control=category&list=true',
'id' => 'ybc_tab_category',
'icon' => 'icon-AdminCatalog'
),
array(
'label' => $this->l('Blog comments'),
'url' => $this->baseAdminPath.'&control=comment&list=true',
'id' => 'ybc_tab_comment',
'icon' => 'icon-comments'
),
array(
'label' => $this->l('Blog slider'),
'url' => $this->baseAdminPath.'&control=slide&list=true',
'id' => 'ybc_tab_slide',
'icon' => 'icon-AdminParentModules'
),
array(
'label' => $this->l('Blog gallery'),
'url' => $this->baseAdminPath.'&control=gallery&list=true',
'id' => 'ybc_tab_gallery',
'icon' => 'icon-AdminDashboard'
),
array(
'label' => $this->l('Settings'),
'url' => $this->baseAdminPath.'&control=config',
'id' => 'ybc_tab_config',
'icon' => 'icon-AdminAdmin'
),
array(
'label' => $this->l('Import/Export'),
'url' => $this->baseAdminPath.'&control=export',
'id' => 'ybc_tab_export',
'icon' => 'icon-exchange'
)
),
'admin_path' => $this->baseAdminPath,
'active' => 'ybc_tab_'.(trim(Tools::getValue('control')) ? trim(Tools::getValue('control')) : 'post')
)
);
return $this->display(__FILE__, 'sidebar.tpl');
}
/**
* Functions
*/
public function itemExists($tbl, $primaryKey, $id)
{
$req = 'SELECT `'.$primaryKey.'`
FROM `'._DB_PREFIX_.'ybc_blog_free_'.$tbl.'` tbl
WHERE tbl.`'.$primaryKey.'` = '.(int)$id;
$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($req);
return ($row);
}
public function getMaxId($tbl, $primaryKey)
{
$req = 'SELECT max(`'.$primaryKey.'`) as maxid
FROM `'._DB_PREFIX_.'ybc_blog_free_'.$tbl.'` tbl';
$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($req);
return isset($row['maxid']) ? (int)$row['maxid'] : 0;
}
public function getMaxOrder($tbl)
{
$req = 'SELECT max(`sort_order`) as maxorder
FROM `'._DB_PREFIX_.'ybc_blog_free_'.$tbl.'` tbl';
$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($req);
return isset($row['maxorder']) ? (int)$row['maxorder'] : 0;
}
public function getFieldsValues($formFields, $primaryKey, $objClass, $saveBtnName)
{
$fields = array();
if (Tools::isSubmit($primaryKey))
{
$obj = new $objClass((int)Tools::getValue($primaryKey));
$fields[$primaryKey] = (int)Tools::getValue($primaryKey, $obj->$primaryKey);
}
else
{
$obj = new $objClass();
}
foreach($formFields as $field)
{
if(!isset($field['primary_key']) && !isset($field['multi_lang']) && !isset($field['connection']))
{
$fieldName = $field['name'];
$fields[$field['name']] = trim(Tools::getValue($field['name'], $obj->$fieldName));
}
}
$languages = Language::getLanguages(false);
/**
* Default
*/
if(!Tools::isSubmit($saveBtnName) && !Tools::isSubmit($primaryKey))
{
foreach($formFields as $field)
{
if(isset($field['default']) && !isset($field['multi_lang']))
{
if(isset($field['default_submit']))
$fields[$field['name']] = (int)Tools::getValue($field['name']) ? (int)Tools::getValue($field['name']) : $field['default'];
else
$fields[$field['name']] = $field['default'];
}
}
}
/**
* Multiple language
*/
foreach ($languages as $lang)
{
foreach($formFields as $field)
{
if(!Tools::isSubmit($saveBtnName) && !Tools::isSubmit($primaryKey))
{
if(isset($field['multi_lang']))
{
if(isset($field['default']))
$fields[$field['name']][$lang['id_lang']] = $field['default'];
else
$fields[$field['name']][$lang['id_lang']] = '';
}
}
elseif(Tools::isSubmit($saveBtnName))
{
if(isset($field['multi_lang']))
$fields[$field['name']][$lang['id_lang']] = Tools::getValue($field['name'].'_'.(int)$lang['id_lang']);
}
else{
if(isset($field['multi_lang']))
{
$fieldName = $field['name'];
$field_langs = $obj->$fieldName;
$fields[$field['name']][$lang['id_lang']] = $field_langs[$lang['id_lang']];
}
}
}
}
$fields['control'] = trim(Tools::getValue('control')) ? trim(Tools::getValue('control')) : '';
/**
* Tags
*/
if($primaryKey=='id_post')
{
foreach ($languages as $lang)
{
if(Tools::isSubmit('savePost'))
{
$fields['tags'][$lang['id_lang']] = trim(trim(Tools::getValue('tags_'.(int)$lang['id_lang'])),',') ? trim(trim(Tools::getValue('tags_'.(int)$lang['id_lang'])),',') : '';
}
else
$fields['tags'][$lang['id_lang']] = $this->getTagStr((int)Tools::getValue('id_post'), (int)$lang['id_lang']);
}
}
return $fields;
}
public function renderList($listData)
{
if(isset($listData['fields_list']) && $listData['fields_list'])
{
foreach($listData['fields_list'] as $key => &$val)
{
$val['active'] = trim(Tools::getValue($key));
}
}
$this->context->smarty->assign($listData);
return $this->display(__FILE__, 'list_helper.tpl');
}
public function getUrlExtra($field_list)
{
$params = '';
if(trim(Tools::getValue('sort')) && isset($field_list[trim(Tools::getValue('sort'))]))
{
$params .= '&sort='.trim(Tools::getValue('sort')).'&sort_type='.(trim(Tools::getValue('sort_type')) =='asc' ? 'asc' : 'desc');
}
if($field_list)
{
foreach($field_list as $key => $val)
{
if(Tools::getValue($key)!='')
{
$params .= '&'.$key.'='.urlencode(Tools::getValue($key));
}
}
unset($val);
}
return $params;
}
public function getFilterParams($field_list)
{
$params = '';
if($field_list)
{
foreach($field_list as $key => $val)
{
if(Tools::getValue($key)!='')
{
$params .= '&'.$key.'='.urlencode(Tools::getValue($key));
}
}
unset($val);
}
return $params;
}
public function getPostsWithFilter($filter = false, $sort = false, $start = false, $limit = false)
{
$req = "SELECT p.*, pl.title, pl.description, pl.short_description, pl.meta_keywords, pl.meta_description
FROM "._DB_PREFIX_."ybc_blog_free_post p
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post_lang pl ON p.id_post = pl.id_post
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post_category pc ON p.id_post = pc.id_post
WHERE pl.id_lang = ".(int)$this->context->language->id.($filter ? $filter : '')."
GROUP BY p.id_post
ORDER BY ".($sort ? $sort : '')." datetime_added ASC " . ($start !== false && $limit ? " LIMIT ".(int)$start.", ".(int)$limit : "");
$posts = Db::getInstance()->executeS($req);
return $posts;
}
public function countPostsWithFilter($filter)
{
$req = "SELECT DISTINCT p.*, pl.title, pl.description
FROM "._DB_PREFIX_."ybc_blog_free_post p
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post_lang pl ON p.id_post = pl.id_post
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post_category pc ON p.id_post = pc.id_post
WHERE pl.id_lang = ".(int)$this->context->language->id.($filter ? $filter : '');
$res = Db::getInstance()->executeS($req);
return $res ? count($res) : 0;
}
public function getCategoriesStrByIdPost($id_post)
{
$categories = Db::getInstance()->executeS("
SELECT DISTINCT cl.id_category, cl.title
FROM "._DB_PREFIX_."ybc_blog_free_post_category pc
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_category_lang cl ON pc.id_category = cl.id_category AND cl.id_lang=".(int)$this->context->language->id."
WHERE pc.id_post=".(int)$id_post."
");
$this->smarty->assign(array('categories' => $categories));
return $this->display(__FILE__,'categories_str.tpl');
}
public function changeStatus($tbl, $field, $id , $status)
{
$req = "UPDATE "._DB_PREFIX_."ybc_blog_free_$tbl SET `$field`=".(int)$status." WHERE id_$tbl=".(int)$id;
return Db::getInstance()->execute($req);
}
public function getPostsByIdCategory($id_category, $id_lang = false, $enabled = false)
{
if(!$id_lang)
$id_lang = $this->context->language->id;
$req = "SELECT p.*, pl.title,pl.url_alias, pl.description ,pl.short_description , pl.meta_keywords, pl.meta_description
FROM "._DB_PREFIX_."ybc_blog_free_post p
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post_lang pl ON p.id_post = pl.id_post AND pl.id_lang=".(int)$id_lang."
JOIN "._DB_PREFIX_."ybc_blog_free_post_category pc ON p.id_post = pc.id_post AND pc.id_category=".(int)$id_category."
".($enabled ? " WHERE p.enabled = 1" : '');
return Db::getInstance()->executeS($req);
}
public function getPostById($id_post, $id_lang = false)
{
if(!$id_lang)
$id_lang = $this->context->language->id;
$req = "SELECT p.*, pl.title,pl.url_alias, pl.description ,pl.short_description , pl.meta_keywords, pl.meta_description, e.firstname, e.lastname
FROM "._DB_PREFIX_."ybc_blog_free_post p
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post_lang pl ON p.id_post = pl.id_post AND pl.id_lang=".(int)$id_lang."
LEFT JOIN "._DB_PREFIX_."employee e ON p.added_by = e.id_employee
WHERE p.id_post = ".(int)$id_post;
return Db::getInstance()->getRow($req);
}
public function getCategoriesByIdPost($id_post, $id_lang = false, $enabled = false)
{
if(!$id_lang)
$id_lang = $this->context->language->id;
$req = "SELECT c.*, cl.title,cl.url_alias, cl.description, cl.meta_keywords, cl.meta_description
FROM "._DB_PREFIX_."ybc_blog_free_category c
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_category_lang cl ON c.id_category = cl.id_category AND cl.id_lang=".(int)$id_lang."
WHERE c.id_category IN (SELECT id_category FROM "._DB_PREFIX_."ybc_blog_free_post_category WHERE id_post = ".(int)$id_post.")
".($enabled ? " AND c.enabled = 1" : '');
$categories = Db::getInstance()->executeS($req);
if($categories)
{
foreach($categories as &$cat)
$cat['link'] = $this->getLink('blog',array('id_category' => $cat['id_category']));
}
return $categories;
}
private function getProductInfo($id_product, $id_lang = false)
{
if(!$id_lang)
$id_lang = $this->context->language->id;
$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($group->price_display_method)
$tax=false;
else
$tax=true;
$product = new Product($id_product, true, $id_lang, $this->context->shop->id);
$pinfo = array();
$pinfo['short_description'] = $product->description_short;
$pinfo['name'] = $product->name;
$price = $product->getPrice($tax,null);
$oldPrice = $product->getPriceWithoutReduct(!$tax,false);
$discount = $oldPrice - $price;
$pinfo['price'] = Tools::displayPrice($price);
$pinfo['old_price'] = Tools::displayPrice($oldPrice);
$pinfo['discount_percent'] = round(($oldPrice - $price) / $oldPrice * 100);
$pinfo['discount_amount'] = Tools::displayPrice($discount);
$pinfo['product'] = array('id_product' => $id_product);
$images = $product->getImages((int)$this->context->cookie->id_lang);
$link = $this->context->link;
if(isset($images[0]))
$id_image = Configuration::get('PS_LEGACY_IMAGES') ? ($product->id.'-'.$images[0]['id_image']) : $images[0]['id_image'];
else
$id_image = $this->context->language->iso_code.'-default';
$pinfo['img_url'] = $link->getImageLink($product->link_rewrite, $id_image, $this->is17 ? ImageType::getFormattedName('home') : ImageType::getFormatedName('home'));
$pinfo['link'] = $product->getLink();
return $pinfo;
}
public function getRelatedProductByProductsStr($pstr)
{
if($pstr)
{
$products = array();
$ids = explode('-', $pstr);
if($ids)
{
foreach($ids as $pid)
{
$product = $this->getProductInfo((int)$pid);
if($product)
$products[] = $product;
}
}
return $products;
}
return false;
}
/**
* Render config form
*/
public function renderConfig()
{
$configs = $this->configs;
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('General settings'),
'icon' => 'icon-cogs'
),
'input' => array(),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
if($configs)
{
foreach($configs as $key => $config)
{
$arg = array(
'name' => $key,
'type' => $config['type'],
'label' => $config['label'],
'desc' => isset($config['desc']) ? $config['desc'] : false,
'required' => isset($config['required']) && $config['required'] ? true : false,
'options' => isset($config['options']) && $config['options'] ? $config['options'] : array(),
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
),
'lang' => isset($config['lang']) ? $config['lang'] : false,
'tab' => isset($config['tab']) && $config['tab'] ? $config['tab'] : 'general',
'suffix' => isset($config['suffix']) && $config['suffix'] ? $config['suffix'] : false,
);
if(isset($arg['suffix']) && !$arg['suffix'])
unset($arg['suffix']);
$fields_form['form']['input'][] = $arg;
}
}
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->module = $this;
$helper->identifier = $this->identifier;
$helper->submit_action = 'saveConfig';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=config';
$helper->token = Tools::getAdminTokenLite('AdminModules');
$language = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$fields = array();
$languages = Language::getLanguages(false);
$helper->override_folder = '/';
if(Tools::isSubmit('saveConfig'))
{
if($configs)
{
foreach($configs as $key => $config)
{
if(isset($config['lang']) && $config['lang'])
{
foreach($languages as $l)
{
$fields[$key][$l['id_lang']] = Tools::getValue($key.'_'.$l['id_lang'],isset($config['default']) ? $config['default'] : '');
}
}
else
$fields[$key] = Tools::getValue($key,isset($config['default']) ? $config['default'] : '');
}
}
}
else
{
if($configs)
{
foreach($configs as $key => $config)
{
if(isset($config['lang']) && $config['lang'])
{
foreach($languages as $l)
{
$fields[$key][$l['id_lang']] = Configuration::get($key,$l['id_lang']);
}
}
else
$fields[$key] = Configuration::get($key);
}
}
}
$helper->tpl_vars = array(
'base_url' => $this->context->shop->getBaseURL(),
'language' => array(
'id_lang' => $language->id,
'iso_code' => $language->iso_code
),
'fields_value' => $fields,
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
'cancel_url' => $this->baseAdminPath.'&control=post&list=true',
'isConfigForm' => true,
'configTabs' => $this->configTabs,
'image_baseurl' => $this->_path.'views/img/',
);
$this->_html .= $helper->generateForm(array($fields_form));
}
private function _postConfig()
{
$errors = array();
$languages = Language::getLanguages(false);
$id_lang_default = (int)Configuration::get('PS_LANG_DEFAULT');
if(Tools::isSubmit('saveConfig'))
{
$configs = $this->configs;
if($configs)
{
foreach($configs as $key => $config)
{
if(isset($config['lang']) && $config['lang'])
{
if(isset($config['required']) && $config['required'] && $config['type']!='switch' && trim(Tools::getValue($key.'_'.$id_lang_default) == ''))
{
$errors[] = $config['label'].' '.$this->l('is required');
}
}
else
{
if(isset($config['required']) && $config['required'] && $config['type']!='switch' && trim(Tools::getValue($key) == ''))
{
$errors[] = $config['label'].' '.$this->l('is required');
}
if(isset($config['validate']) && method_exists('Validate',$config['validate']))
{
$validate = $config['validate'];
if(!Validate::$validate(trim(Tools::getValue($key))))
$errors[] = $config['label'].' '.$this->l('is invalid');
unset($validate);
}
elseif(!Validate::isCleanHtml(trim(Tools::getValue($key))))
{
$errors[] = $config['label'].' '.$this->l('is invalid');
}
}
}
}
//Custom validation
foreach($languages as $lang)
{
if($lang['id_lang']==$id_lang_default)
{
if(!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_'.$lang['id_lang'])))
$errors[] = $this->l('Blog alias is not valid in ').$lang['iso_code'];
if(!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_POST_'.$lang['id_lang'])))
$errors[] = $this->l('Single post page alias is not valid in ').$lang['iso_code'];
if(!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_CATEGORY_'.$lang['id_lang'])))
$errors[] = $this->l('Category page alias is not valid in ').$lang['iso_code'];
if(!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_GALLERY_'.$lang['id_lang'])))
$errors[] = $this->l('Gallery page alias is not valid in ').$lang['iso_code'];
if(!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_LATEST_'.$lang['id_lang'])))
$errors[] = $this->l('Latest posts page alias is not valid in ').$lang['iso_code'];
if(!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_SEARCH_'.$lang['id_lang'])))
$errors[] = $this->l('Search page alias is not valid in ').$lang['iso_code'];
if(!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_AUTHOR_'.$lang['id_lang'])))
$errors[] = $this->l('Author page alias is not valid in ').$lang['iso_code'];
if(!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_TAG_'.$lang['id_lang'])))
$errors[] = $this->l('Tag page alias is not valid in').$lang['iso_code'];
}
else
{
if(Tools::getValue('YBC_BLOG_FREE_ALIAS_'.$lang['id_lang']) && !Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_'.$lang['id_lang'])))
$errors[] = $this->l('Blog alias is not valid in ').$lang['iso_code'];
if(Tools::getValue('YBC_BLOG_FREE_ALIAS_POST_'.$lang['id_lang']) && !Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_POST_'.$lang['id_lang'])))
$errors[] = $this->l('Single post page alias is not valid in ').$lang['iso_code'];
if(Tools::getValue('YBC_BLOG_FREE_ALIAS_CATEGORY_'.$lang['id_lang'])&&!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_CATEGORY_'.$lang['id_lang'])))
$errors[] = $this->l('Category page alias is not valid in ').$lang['iso_code'];
if(Tools::getValue('YBC_BLOG_FREE_ALIAS_GALLERY_'.$lang['id_lang'])&&!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_GALLERY_'.$lang['id_lang'])))
$errors[] = $this->l('Gallery page alias is not valid in ').$lang['iso_code'];
if(Tools::getValue('YBC_BLOG_FREE_ALIAS_LATEST_'.$lang['id_lang'])&&!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_LATEST_'.$lang['id_lang'])))
$errors[] = $this->l('Latest posts page alias is not valid in ').$lang['iso_code'];
if(Tools::getValue('YBC_BLOG_FREE_ALIAS_SEARCH_'.$lang['id_lang'])&&!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_SEARCH_'.$lang['id_lang'])))
$errors[] = $this->l('Search page alias is not valid in ').$lang['iso_code'];
if(Tools::getValue('YBC_BLOG_FREE_ALIAS_AUTHOR_'.$lang['id_lang'])&&!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_AUTHOR_'.$lang['id_lang'])))
$errors[] = $this->l('Author page alias is not valid in ').$lang['iso_code'];
if(Tools::getValue('YBC_BLOG_FREE_ALIAS_TAG_'.$lang['id_lang'])&&!Validate::isLinkRewrite(Tools::getValue('YBC_BLOG_FREE_ALIAS_TAG_'.$lang['id_lang'])))
$errors[] = $this->l('Tag page alias is not valid in ').$lang['iso_code'];
}
}
if(!$errors)
{
$aliasArg = array('YBC_BLOG_FREE_ALIAS','YBC_BLOG_FREE_ALIAS_POST','YBC_BLOG_FREE_ALIAS_CATEGORY','YBC_BLOG_FREE_ALIAS_GALLERY','YBC_BLOG_FREE_ALIAS_LATEST','YBC_BLOG_FREE_ALIAS_SEARCH','YBC_BLOG_FREE_ALIAS_AUTHOR','YBC_BLOG_FREE_ALIAS_TAG');
$alias = array();
foreach($languages as $lang)
{
$alias[$lang['id_lang']]=array();
foreach($aliasArg as $aliaKey)
{
$postedAlias = trim(Tools::getValue($aliaKey.'_'.$lang['id_lang']));
if($postedAlias && in_array($postedAlias,$alias[$lang['id_lang']]))
{
$errors[] = $this->l('Alias need to be unique in ').$lang['iso_code'];
break;
}
elseif($postedAlias){
$alias[$lang['id_lang']][] = $postedAlias;
}
}
}
}
if((int)Tools::getValue('YBC_BLOG_FREE_LATES_POST_NUMBER') <= 0)
$errors[] = $this->l('Number of latest posts displyed need to be greater than 0');
if((int)Tools::getValue('YBC_BLOG_FREE_PUPULAR_POST_NUMBER') <= 0)
$errors[] = $this->l('Number of popular posts displayed need to be greater than 0');
if((int)Tools::getValue('YBC_BLOG_FREE_GALLERY_MAX_NUM') <= 0)
$errors[] = $this->l('Number of images on gallery block need to be greater than 0');
if((int)Tools::getValue('YBC_BLOG_FREE_GALLERY_THUMB_WIDTH') < 50 || (int)Tools::getValue('YBC_BLOG_FREE_GALLERY_THUMB_WIDTH') > 1000)
$errors[] = $this->l('Gallery thumbnail width need to be from 50 to 1000');
if((int)Tools::getValue('YBC_BLOG_FREE_GALLERY_THUMB_HEIGHT') < 50 || (int)Tools::getValue('YBC_BLOG_FREE_GALLERY_THUMB_HEIGHT') > 1000)
$errors[] = $this->l('Gallery thumbnail height need to be from 50 to 1000');
if((int)Tools::getValue('YBC_BLOG_FREE_MAX_COMMENT') < 0)
$errors[] = $this->l('Maximum number of latest comments displayed need to be from 0');
if((int)Tools::getValue('YBC_BLOG_FREE_DEFAULT_RATING') < 1 || (int)Tools::getValue('YBC_BLOG_FREE_DEFAULT_RATING') >5)
$errors[] = $this->l('Default rating must be between 1 - 5');
if((int)Tools::getValue('YBC_BLOG_FREE_ITEMS_PER_PAGE') <= 0)
$errors[] = $this->l('Number of items per page need to be greater than 0');
if((int)Tools::getValue('YBC_BLOG_FREE_TAGS_NUMBER') <= 0)
$errors[] = $this->l('Maximum number of tags displayed on Tags block need to be greater than 0');
if((int)Tools::getValue('YBC_BLOG_FREE_POST_EXCERPT_LENGTH') < 0)
$errors[] = $this->l('Post excerpt length cannot be smaller than 0');
if((int)Tools::getValue('YBC_BLOG_FREE_GALLERY_PER_PAGE') <= 0)
$errors[] = $this->l('Number of image per page need to be greater than 0');
if($emailsStr = Tools::getValue('YBC_BLOG_FREE_ALERT_EMAILS'))
{
$emails = explode(',',$emailsStr);
if($emails)
{
foreach($emails as $email)
{
if(!Validate::isEmail(trim($email)))
{
$errors[] = $this->l('One of the sumitted emails is not valid');
break;
}
}
}
}
if(!$errors)
{
if($configs)
{
foreach($configs as $key => $config)
{
if(isset($config['lang']) && $config['lang'])
{
$valules = array();
foreach($languages as $lang)
{
if($config['type']=='switch')
$valules[$lang['id_lang']] = (int)trim(Tools::getValue($key.'_'.$lang['id_lang'])) ? 1 : 0;
else
$valules[$lang['id_lang']] = trim(Tools::getValue($key.'_'.$lang['id_lang'])) ? trim(Tools::getValue($key.'_'.$lang['id_lang'])) : trim(Tools::getValue($key.'_'.$id_lang_default));
}
Configuration::updateValue($key,$valules);
}
else
{
if($config['type']=='switch')
{
Configuration::updateValue($key,(int)trim(Tools::getValue($key)) ? 1 : 0);
}
else
Configuration::updateValue($key,trim(Tools::getValue($key)));
}
}
}
}
if (count($errors))
{
$this->errorMessage = $this->displayError($errors);
}
//
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => $errors ? 'error' : 'success',
'message' => $errors ? $this->errorMessage : $this->displayConfirmation($this->l('Configuration saved')),
)
));
}
if(!count($errors))
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=config');
}
}
public function getLink($controller = 'blog', $params = array())
{
$context = Context::getContext();
$id_lang = $context->language->id;
$link = $context->link;
$alias = $this->alias;
$friendly = $this->friendly;
$blogLink = new Ybc_blog_free_link_class();
$subfix = (int)Configuration::get('YBC_BLOG_FREE_URL_SUBFIX') ? '.html' : '';
$page = isset($params['page']) && $params['page'] ? $params['page'] : '';
if($page)
{
$page = $page.'/';
}
if($friendly && $alias)
{
$url = $blogLink->getBaseLinkFriendly(null, null).$blogLink->getLangLinkFriendly($id_lang, null, null).$alias.'/';
if($controller=='gallery')
{
$url .= (($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_GALLERY',$this->context->language->id)) ? $subAlias : 'gallery').($page ? '/'.rtrim($page,'/') : '');
return $url;
}
elseif($controller=='blog')
{
if(isset($params['id_post']) && $postAlias = $this->getPostAlias((int)$params['id_post']))
{
$url .= (($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_POST',$this->context->language->id)) ? $subAlias : 'post').'/'.(int)$params['id_post'].'-'.$postAlias.$subfix;
}
elseif(isset($params['id_category']) && $categoryAlias = $this->getCategoryAlias((int)$params['id_category']))
{
$url .= (($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_CATEGORY',$this->context->language->id)) ? $subAlias : 'category').'/'.$page.(int)$params['id_category'].'-'.$categoryAlias.$subfix;
}
elseif(isset($params['id_author']) && $authorAlias = (isset($params['alias']) ? $params['alias'] : 'author'))
{
$url .= (($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_AUTHOR',$this->context->language->id)) ? $subAlias : 'author').'/'.$page.(int)$params['id_author'].'-'.$authorAlias;
}
elseif(isset($params['tag']))
{
$url .= $page.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_TAG',$this->context->language->id)) ? $subAlias : 'tag').'/'.(string)$params['tag'];
}
elseif(isset($params['search']))
{
$url .= $page.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_SEARCH',$this->context->language->id)) ? $subAlias : 'search').'/'.(string)$params['search'];
}
elseif(isset($params['latest']))
{
$url .= (($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_LATEST',$this->context->language->id)) ? $subAlias : 'latest').($page ? '/'.rtrim($page,'/') : '');
}
else
{
if($page)
$url .= trim($page,'/');
else
$url = rtrim($url,'/');
}
return $url;
}
}
return $link->getModuleLink('ybc_blog_free', $controller, $params);
}
private function getCategoryAlias($id_category)
{
$req = "SELECT cl.url_alias
FROM "._DB_PREFIX_."ybc_blog_free_category_lang cl
WHERE cl.id_category = ".(int)$id_category.' AND cl.id_lang='.(int)$this->context->language->id;
$row = Db::getInstance()->getRow($req);
if(isset($row['url_alias']))
return $row['url_alias'];
return false;
}
private function getPostAlias($id_post)
{
$req = "SELECT pl.url_alias
FROM "._DB_PREFIX_."ybc_blog_free_post_lang pl
WHERE pl.id_post = ".(int)$id_post.' AND pl.id_lang='.(int)$this->context->language->id;
$row = Db::getInstance()->getRow($req);
if(isset($row['url_alias']))
return $row['url_alias'];
return false;
}
public function getCommentsWithFilter($filter = false, $sort = false, $start = false, $limit = false)
{
$req = "SELECT bc.*, e.firstname as efirstname, e.lastname as elastname
FROM "._DB_PREFIX_."ybc_blog_free_comment bc
LEFT JOIN "._DB_PREFIX_."employee e ON e.id_employee = bc.replied_by
WHERE 1=1 ".($filter ? $filter : '')."
ORDER BY ".($sort ? $sort : '')." bc.datetime_added desc " . ($start !== false && $limit ? " LIMIT ".(int)$start.", ".(int)$limit : "");
return Db::getInstance()->executeS($req);
}
public function getCommentById($id_comment)
{
return Db::getInstance()->getRow("SELECT bc.*, e.firstname as efirstname, e.lastname as elastname,pl.title as post_title
FROM "._DB_PREFIX_."ybc_blog_free_comment bc
LEFT JOIN "._DB_PREFIX_."employee e ON e.id_employee = bc.replied_by
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post_lang pl ON bc.id_post = pl.id_post AND pl.id_lang=".(int)$this->context->language->id."
WHERE bc.id_comment=".(int)$id_comment."
");
}
public function countCommentsWithFilter($filter = false)
{
$req = "SELECT COUNT(bc.id_comment) as total_comment
FROM "._DB_PREFIX_."ybc_blog_free_comment bc
WHERE 1=1 ".($filter ? $filter : '');
$row = Db::getInstance()->getRow($req);
return isset($row['total_comment']) ? (int)$row['total_comment'] : 0;
}
public function getEverageReviews($id_post)
{
$totalRating = $this->getTotalReviewsWithRating($id_post);
$numRating = $this->countTotalReviewsWithRating($id_post);
if($numRating > 0)
return round($totalRating/$numRating);
return 0;
}
public function getTotalReviewsWithRating($id_post)
{
$req = "SELECT SUM(rating) as total_rating
FROM "._DB_PREFIX_."ybc_blog_free_comment
WHERE id_post = ".(int)$id_post." AND rating > 0 AND approved = 1";
$row = Db::getInstance()->getRow($req);
if(isset($row['total_rating']))
return (int)$row['total_rating'];
return 0;
}
public function countTotalReviewsWithRating($id_post)
{
$req = "SELECT COUNT(rating) as num_rating
FROM "._DB_PREFIX_."ybc_blog_free_comment
WHERE id_post = ".(int)$id_post." AND rating > 0 AND approved = 1";
$row = Db::getInstance()->getRow($req);
if(isset($row['num_rating']))
return (int)$row['num_rating'];
return 0;
}
/**
* Hooks
*/
public function hookDisplayLeftColumn()
{
return $this->display(__FILE__, 'blocks.tpl');
}
public function hookBlogSidebar()
{
return $this->hookDisplayLeftColumn();
}
public function hookRightColumn()
{
return $this->hookDisplayLeftColumn();
}
public function hookDisplayBackOfficeHeader()
{
$this->context->controller->addCSS($this->_path.'views/css/admin.css');
}
public function hookDisplayFooter()
{
$this->smarty->assign(array(
'like_url' => $this->getLink('like'),
'YBC_BLOG_FREE_SLIDER_SPEED' => (int)Configuration::get('YBC_BLOG_FREE_SLIDER_SPEED') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_SLIDER_SPEED') : 5000,
'YBC_BLOG_FREE_GALLERY_SPEED' => (int)Configuration::get('YBC_BLOG_FREE_GALLERY_SPEED') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_GALLERY_SPEED') : 5000,
'YBC_BLOG_FREE_GALLERY_SPEED' => (int)Configuration::get('YBC_BLOG_FREE_GALLERY_SPEED') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_GALLERY_SPEED') : 5000,
'YBC_BLOG_FREE_GALLERY_SKIN' => Configuration::get('YBC_BLOG_FREE_GALLERY_SKIN') ? Configuration::get('YBC_BLOG_FREE_GALLERY_SKIN') : 'default',
'YBC_BLOG_FREE_GALLERY_AUTO_PLAY' => (int)Configuration::get('YBC_BLOG_FREE_GALLERY_AUTO_PLAY') ? 1 : 0,
'ybc_like_error' => addslashes($this->l('There was a problem while submitting your request. Try again later'))
)
);
return $this->display(__FILE__, 'footer.tpl');
}
public function hookDisplayHeader()
{
$this->context->controller->addJS($this->_path.'views/js/owl.carousel.js');
$this->context->controller->addJS($this->_path.'views/js/jquery.prettyPhoto.js');
$this->context->controller->addJS($this->_path.'views/js/prettyPhoto.inc.js');
$this->context->controller->addJS($this->_path.'views/js/blog.js');
$this->context->controller->addCSS($this->_path.'views/css/prettyPhoto.css');
if($this->is17)
{
$this->context->controller->addCSS($this->_path.'views/css/font-awesome.css');
$this->context->controller->addCSS($this->_path.'views/css/fix17.css');
}
else
$this->context->controller->addCSS($this->_path.'views/css/fix16.css');
$this->context->controller->addCSS($this->_path.'views/css/blog.css');
$this->context->controller->addCSS($this->_path.'views/css/owl.carousel.css');
$this->context->controller->addCSS($this->_path.'views/css/owl.theme.css');
$this->context->controller->addCSS($this->_path.'views/css/owl.transitions.css');
if(Configuration::get('YBC_BLOG_FREE_RTL_MODE')=='auto' && isset($this->context->language->is_rtl) && $this->context->language->is_rtl || Configuration::get('YBC_BLOG_FREE_RTL_MODE')=='rtl')
$this->context->controller->addCSS($this->_path.'views/css/rtl.css');
if(trim(Tools::getValue('fc'))=='module' && trim(Tools::getValue('module'))=='ybc_blog_free')
{
$this->context->controller->addJS($this->_path.'views/js/jquery.nivo.slider.js');
$this->context->controller->addCSS($this->_path.'views/css/nivo-slider.css');
$this->context->controller->addCSS($this->_path.'views/css/themes/default/default.css');
}
$this->assignConfig();
return $this->getInternalStyles();
}
public function assignConfig()
{
$assign = array();
foreach($this->configs as $key => $val)
{
$assign[$key] = isset($val['lang']) && $val['lang'] ? Configuration::get($key, $this->context->language->id) : Configuration::get($key);
}
if(Configuration::get('YBC_BLOG_FREE_RTL_MODE')=='auto' && isset($this->context->language->is_rtl) && $this->context->language->is_rtl || Configuration::get('YBC_BLOG_FREE_RTL_MODE')=='rtl')
$rtl = true;
else
$rtl = false;
$assign['YBC_BLOG_FREE_RTL_CLASS'] = $rtl ? 'ybc_blog_free_rtl_mode' : 'ybc_blog_free_ltr_mode';
$assign['YBC_BLOG_FREE_SHOP_URI'] = _PS_BASE_URL_.__PS_BASE_URI__;
$this->context->smarty->assign(array('blog_config' => $assign));
}
public function hookBlogSearchBlock()
{
if(!Configuration::get('YBC_BLOG_FREE_SHOW_SEARCH_BLOCK'))
return;
$this->smarty->assign(
array(
'action' => $this->getLink('blog'),
'search' => urldecode(trim(Tools::getValue('search'))),
'id_lang' => $this->context->language->id
)
);
if(trim(Tools::getValue('blog_search'))!='')
{
Tools::redirect($this->getLink('blog',array('search'=>urlencode(trim(Tools::getValue('blog_search'))))));
}
return $this->display(__FILE__, 'search_block.tpl');
}
public function hookBlogCategoriesBlock()
{
if(!Configuration::get('YBC_BLOG_FREE_SHOW_CATEGORIES_BLOCK'))
return;
$categories = $this->getCategoriesWithFilter(' AND c.enabled=1','c.sort_order asc, cl.title asc,');
if($categories)
{
foreach($categories as &$cat)
{
$cat['link'] = $this->getLink('blog',array('id_category'=>$cat['id_category']));
}
}
$this->smarty->assign(
array(
'categories' => $categories,
'active' => (int)Tools::getValue('id_category')
)
);
return $this->display(__FILE__, 'categories_block.tpl');
}
public function hookBlogTagsBlock()
{
if(!Configuration::get('YBC_BLOG_FREE_SHOW_TAGS_BLOCK'))
return;
$tags = $this->getTags((int)Configuration::get('YBC_BLOG_FREE_TAGS_NUMBER') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_TAGS_NUMBER') : 20);
if(is_array($tags) && $tags)
shuffle($tags);
$this->smarty->assign(
array(
'tags' => $tags
)
);
return $this->display(__FILE__, 'tags_block.tpl');
}
public function hookBlogNewsBlock($params)
{
$context = Context::getContext();
if(isset($params['page']) && $params['page']=='home')
$postCount = (int)Configuration::get('YBC_BLOG_FREE_LATEST_POST_NUMBER_HOME') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_LATEST_POST_NUMBER_HOME') : 5;
else
$postCount = (int)Configuration::get('YBC_BLOG_FREE_LATES_POST_NUMBER') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_LATES_POST_NUMBER') : 5;
$posts = $this->getPostsWithFilter(' AND p.enabled=1','p.id_post desc,',0,$postCount);
if(!$context->cookie->liked_posts)
$likedPosts = array();
else
$likedPosts = @unserialize($context->cookie->liked_posts);
if($posts)
{
foreach($posts as $key => &$post)
{
$post['link'] = $this->getLink('blog',array('id_post' => $post['id_post']));
if($post['thumb'])
$post['thumb'] = $this->_path.'views/img/post/thumb/'.$post['thumb'];
$post['comments_num'] = $this->countCommentsWithFilter(' AND bc.id_post='.$post['id_post'].' AND approved=1');
if(is_array($likedPosts) && in_array($post['id_post'], $likedPosts))
$post['liked'] = true;
else
$post['liked'] = false;
$post['categories'] = $this->getCategoriesByIdPost($post['id_post'],false,true);
}
unset($key);
}
$this->smarty->assign(
array(
'posts' => $posts,
'latest_link' => $this->getLink('blog',array('latest' => true)),
'allowComments' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_COMMENT') ? true : false,
'show_views' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_VIEWS') ? true : false,
'allow_like' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_LIKE') ? true : false,
'sidebar_post_type' => Configuration::get('YBC_BLOG_FREE_SIDEBAR_POST_TYPE'),
'date_format' => trim((string)Configuration::get('YBC_BLOG_FREE_DATE_FORMAT')),
'hook' => 'homeblog',
'blog_skin' => Tools::strtolower(Configuration::get('YBC_BLOG_FREE_SKIN')),
'page' => isset($params['page']) && $params['page'] ? $params['page'] : false,
)
);
return $this->display(__FILE__, 'latest_posts_block.tpl');
}
public function hookDisplayHome()
{
return $this->display(__FILE__, 'home_blocks.tpl');
}
public function hookBlogPopularPostsBlock($params)
{
$context = Context::getContext();
if(isset($params['page']) && $params['page']=='home')
$postCount = (int)Configuration::get('YBC_BLOG_FREE_POPULAR_POST_NUMBER_HOME') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_POPULAR_POST_NUMBER_HOME') : 5;
else
$postCount = (int)Configuration::get('YBC_BLOG_FREE_PUPULAR_POST_NUMBER') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_PUPULAR_POST_NUMBER') : 5;
$posts = $this->getPostsWithFilter(' AND p.enabled=1','p.click_number desc,',0,$postCount);
if(!$context->cookie->liked_posts)
$likedPosts = array();
else
$likedPosts = @unserialize($context->cookie->liked_posts);
if($posts)
foreach($posts as &$post)
{
$post['link'] = $this->getLink('blog',array('id_post' => $post['id_post']));
if($post['thumb'])
$post['thumb'] = $this->_path.'views/img/post/thumb/'.$post['thumb'];
$post['comments_num'] = $this->countCommentsWithFilter(' AND bc.id_post='.$post['id_post'].' AND approved=1');
if(is_array($likedPosts) && in_array($post['id_post'], $likedPosts))
$post['liked'] = true;
else
$post['liked'] = false;
$post['categories'] = $this->getCategoriesByIdPost($post['id_post'],false,true);
}
$this->smarty->assign(
array(
'posts' => $posts,
'latest_link' => $this->getLink('blog',array('latest' => true)),
'allowComments' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_COMMENT') ? true : false,
'show_views' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_VIEWS') ? true : false,
'allow_like' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_LIKE') ? true : false,
'sidebar_post_type' => Configuration::get('YBC_BLOG_FREE_SIDEBAR_POST_TYPE'),
'date_format' => trim((string)Configuration::get('YBC_BLOG_FREE_DATE_FORMAT')),
'blog_skin' => Tools::strtolower(Configuration::get('YBC_BLOG_FREE_SKIN')),
'page' => isset($params['page']) && $params['page'] ? $params['page'] : false,
)
);
return $this->display(__FILE__, 'popular_posts_block.tpl');
}
public function hookBlogFeaturedPostsBlock($params)
{
$context = Context::getContext();
if(isset($params['page']) && $params['page']=='home')
$postCount = (int)Configuration::get('YBC_BLOG_FREE_FEATURED_POST_NUMBER_HOME') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_FEATURED_POST_NUMBER_HOME') : 5;
else
$postCount = (int)Configuration::get('YBC_BLOG_FREE_FEATURED_POST_NUMBER') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_FEATURED_POST_NUMBER') : 5;
$posts = $this->getPostsWithFilter(' AND p.enabled=1 && p.is_featured=1','p.sort_order asc,p.id_post desc,',0,$postCount);
if(!$context->cookie->liked_posts)
$likedPosts = array();
else
$likedPosts = @unserialize($context->cookie->liked_posts);
if($posts)
foreach($posts as &$post)
{
$post['link'] = $this->getLink('blog',array('id_post' => $post['id_post']));
if($post['thumb'])
$post['thumb'] = $this->_path.'views/img/post/thumb/'.$post['thumb'];
$post['comments_num'] = $this->countCommentsWithFilter(' AND bc.id_post='.$post['id_post'].' AND approved=1');
if(is_array($likedPosts) && in_array($post['id_post'], $likedPosts))
$post['liked'] = true;
else
$post['liked'] = false;
$post['categories'] = $this->getCategoriesByIdPost($post['id_post'],false,true);
}
$this->smarty->assign(
array(
'posts' => $posts,
'latest_link' => $this->getLink('blog',array('latest' => true)),
'allowComments' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_COMMENT') ? true : false,
'show_views' => (int)Configuration::get('YBC_BLOG_FREE_SHOW_POST_VIEWS') ? true : false,
'allow_like' => (int)Configuration::get('YBC_BLOG_FREE_ALLOW_LIKE') ? true : false,
'sidebar_post_type' => Configuration::get('YBC_BLOG_FREE_SIDEBAR_POST_TYPE'),
'date_format' => trim((string)Configuration::get('YBC_BLOG_FREE_DATE_FORMAT')),
'blog_skin' => Tools::strtolower(Configuration::get('YBC_BLOG_FREE_SKIN')),
'page' => isset($params['page']) && $params['page'] ? $params['page'] : false,
)
);
return $this->display(__FILE__, 'featured_posts_block.tpl');
}
public function hookBlogSlidersBlock()
{
if(!Configuration::get('YBC_BLOG_FREE_SHOW_SLIDER'))
return;
$slides = $this->getSlidesWithFilter(' AND s.enabled=1','s.sort_order asc, s.id_slide asc,');
if($slides)
foreach($slides as &$slide)
{
if($slide['image'])
$slide['image'] = $this->_path.'views/img/slide/'.$slide['image'];
}
$this->smarty->assign(
array(
'loading_img' => $this->_path.'views/img/img/loading.gif',
'slides' => $slides,
'nivoTheme' => 'default',
'nivoAutoPlay' => (int)Configuration::get('YBC_BLOG_FREE_SLIDER_AUTO_PLAY') ? true : false,
)
);
return $this->display(__FILE__, 'slider_block.tpl');
}
public function hookBlogGalleryBlock($params)
{
if(isset($params['page']) && $params['page']=='home')
$postCount = (int)Configuration::get('YBC_BLOG_FREE_GALLERY_POST_NUMBER_HOME') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_GALLERY_POST_NUMBER_HOME') : 10;
else
$postCount = (int)Configuration::get('YBC_BLOG_FREE_GALLERY_POST_NUMBER') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_GALLERY_POST_NUMBER') : 10;
$galleries = $this->getGalleriesWithFilter(' AND g.enabled=1 AND g.is_featured=1','g.sort_order asc, g.id_gallery asc,',0,$postCount);
if($galleries)
foreach($galleries as &$gallery)
{
if($gallery['image'])
{
$gallery['thumb'] = file_exists(dirname(__FILE__).'/views/img/gallery/thumb/'.$gallery['image']) ? $this->_path.'views/img/gallery/thumb/'.$gallery['image'] : $this->_path.'views/img/gallery/'.$gallery['image'];
$gallery['image'] = $this->_path.'views/img/gallery/'.$gallery['image'];
}
}
$this->smarty->assign(
array(
'galleries' => $galleries,
'gallery_link' => $this->getLink('gallery',array()),
'page' => isset($params['page']) && $params['page'] ? $params['page'] : false,
)
);
return $this->display(__FILE__, 'gallery_block.tpl');
}
/**
* Comments
*/
private function _postComment()
{
$errors = array();
$id_comment = (int)Tools::getValue('id_comment');
if(Tools::getValue('list')!='true' && ($id_comment && !$this->itemExists('comment','id_comment',$id_comment) || !$id_comment))
Tools::redirectAdmin($this->baseAdminPath);
/**
* Change status
*/
if(Tools::isSubmit('change_enabled'))
{
$status = (int)Tools::getValue('change_enabled') ? 1 : 0;
$field = Tools::getValue('field');
$id_comment = (int)Tools::getValue('id_comment');
if($field == 'approved' || $field == 'reported' && $id_comment)
{
$this->changeStatus('comment',$field,$id_comment,$status);
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(array(
'listId' => $id_comment,
'enabled' => $status,
'field' => $field,
'href' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=comment&change_enabled='.($status ? '0' : '1').'&field='.$field.'&id_comment='.$id_comment,
)));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=comment&list=true');
}
}
/**
* Delete comment
*/
if(Tools::isSubmit('del'))
{
$id_comment = (int)Tools::getValue('id_comment');
if(!$this->itemExists('comment','id_comment',$id_comment))
$errors[] = $this->l('Comment does not exist');
elseif($this->_deleteComment($id_comment))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=comment&list=true');
}
else
$errors[] = $this->l('Could not delete the comment. Please try again');
}
/**
* Save comment
*/
if(Tools::isSubmit('saveComment'))
{
if($id_comment && $this->itemExists('comment','id_comment',$id_comment))
{
$comment = new Ybc_blog_free_comment_class($id_comment);
}
else
{
$errors[] = $this->l('Comment does not exist');
}
$comment->subject = trim(Tools::getValue('subject',''));
$comment->comment = trim(Tools::getValue('comment',''));
$comment->reply = trim(Tools::getValue('reply',''));
$comment->rating = trim(Tools::getValue('rating',0)) >=0 && trim(Tools::getValue('rating',0)) <=5 ? trim(Tools::getValue('rating',0)) : 0;
$comment->approved = trim(Tools::getValue('approved',1)) ? 1 : 0;
$comment->reported = trim(Tools::getValue('reported',0)) ? 1 : 0;
$comment->replied_by = (int)$this->context->employee->id;
if(Tools::strlen($comment->subject) < 10)
$errors[] = $this->l('Subject need to be at least 10 characters');
if(Tools::strlen($comment->subject) >300)
$errors[] = $this->l('Subject can not be longer than 300 characters');
if(!Validate::isCleanHtml($comment->subject,false))
$errors[] = $this->l('Subject need to be clean HTML');
if(Tools::strlen($comment->comment) < 20)
$errors[] = $this->l('Comment need to be at least 20 characters');
if(!Validate::isCleanHtml($comment->comment,false))
$errors[] = $this->l('Comment need to be clean HTML');
if(Tools::strlen($comment->comment) >2000)
$errors[] = $this->l('Comment can not be longer than 2000 characters');
if(!Validate::isCleanHtml($comment->reply,false))
$errors[] = $this->l('Reply need to be clean HTML');
if(Tools::strlen($comment->reply) >2000)
$errors[] = $this->l('Reply can not be longer than 2000 characters');
if(!$errors)
{
if(!$comment->update())
{
$errors[] = $this->displayError($this->l('The comment could not be updated.'));
}
}
}
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => $errors ? 'error' : 'success',
'message' => $errors ? $this->displayError($errors) : $this->displayConfirmation($this->l('Comment saved')),
)
));
}
if (count($errors))
{
$this->errorMessage = $this->displayError($errors);
}
elseif (Tools::isSubmit('saveComment') && Tools::isSubmit('id_comment'))
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_comment='.Tools::getValue('id_comment').'&control=comment');
elseif (Tools::isSubmit('saveComment'))
{
Tools::redirectAdmin($this->baseAdminPath);
}
}
public function renderCommentsForm()
{
//List
if(trim(Tools::getValue('list'))=='true')
{
$fields_list = array(
'id_comment' => array(
'title' => $this->l('Id'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'subject' => array(
'title' => $this->l('Subject'),
'width' => 140,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'rating' => array(
'title' => $this->l('Rating'),
'width' => 100,
'type' => 'select',
'sort' => true,
'filter' => true,
'rating_field' => true,
'filter_list' => array(
'id_option' => 'rating',
'value' => 'stars',
'list' => array(
0 => array(
'rating' => 0,
'stars' => $this->l('No reviews')
),
1 => array(
'rating' => 1,
'stars' => '1 '.$this->l('star')
),
2 => array(
'rating' => 2,
'stars' => '2 '.$this->l('stars')
),
3 => array(
'rating' => 3,
'stars' => '3 '.$this->l('stars')
),
4 => array(
'rating' => 4,
'stars' => '4 '.$this->l('stars')
),
5 => array(
'rating' => 5,
'stars' => '5 '.$this->l('stars')
),
)
)
),
'name' => array(
'title' => $this->l('Customer'),
'width' => 100,
'type' => 'text',
'sort' => true,
'filter' => true
),
'approved' => array(
'title' => $this->l('Approved'),
'width' => 50,
'type' => 'active',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'enabled',
'value' => 'title',
'list' => array(
0 => array(
'enabled' => 1,
'title' => $this->l('Yes')
),
1 => array(
'enabled' => 0,
'title' => $this->l('No')
)
)
)
),
'reported' => array(
'title' => $this->l('Not reported'),
'width' => 50,
'type' => 'active',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'enabled',
'value' => 'title',
'list' => array(
0 => array(
'enabled' => 1,
'title' => $this->l('Yes')
),
1 => array(
'enabled' => 0,
'title' => $this->l('No')
)
)
)
)
);
//Filter
$filter = "";
if(trim(Tools::getValue('id_comment'))!='')
$filter .= " AND bc.id_comment = ".(int)trim(urldecode(Tools::getValue('id_comment')));
if(trim(Tools::getValue('comment'))!='')
$filter .= " AND bc.comment like '%".addslashes(trim(urldecode(Tools::getValue('comment'))))."%'";
if(trim(Tools::getValue('subject'))!='')
$filter .= " AND bc.subject like '%".addslashes(trim(urldecode(Tools::getValue('subject'))))."%'";
if(trim(Tools::getValue('rating'))!='')
$filter .= " AND bc.rating = ".(int)trim(urldecode(Tools::getValue('rating')));
if(trim(Tools::getValue('name'))!='')
$filter .= " AND bc.name like '%".addslashes(trim(urldecode(Tools::getValue('name'))))."%'";
if(trim(Tools::getValue('approved'))!='')
$filter .= " AND bc.approved = ".(int)trim(urldecode(Tools::getValue('approved')));
if(trim(Tools::getValue('reported'))!='')
$filter .= " AND bc.reported = ".(int)trim(urldecode(Tools::getValue('reported')));
//Sort
$sort = "";
if(trim(Tools::getValue('sort')) && isset($fields_list[Tools::getValue('sort')]))
{
$sort .= trim(Tools::getValue('sort'))." ".(Tools::getValue('sort_type')=='asc' ? ' ASC ' :' DESC ')." , ";
}
else
$sort = false;
//Paggination
$page = (int)Tools::getValue('page') && (int)Tools::getValue('page') > 0 ? (int)Tools::getValue('page') : 1;
$totalRecords = (int)$this->countCommentsWithFilter($filter);
$paggination = new Ybc_blog_free_paggination_class();
$paggination->total = $totalRecords;
$paggination->url = $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=comment&list=true&page=_page_'.$this->getUrlExtra($fields_list);
$paggination->limit = 20;
$totalPages = ceil($totalRecords / $paggination->limit);
if($page > $totalPages)
$page = $totalPages;
$paggination->page = $page;
$start = $paggination->limit * ($page - 1);
if($start < 0)
$start = 0;
$comments = $this->getCommentsWithFilter($filter, $sort, $start, $paggination->limit);
if($comments)
{
foreach($comments as &$comment)
{
$comment['view_url'] = $this->getLink('blog', array('id_post' => $comment['id_post']));
$comment['view_text'] = $this->l('View in post');
}
}
$paggination->text = $this->l('Showing {start} to {end} of {total} ({pages} Pages)');
$paggination->style_links = $this->l('links');
$paggination->style_results = $this->l('results');
$listData = array(
'name' => 'ybc_comment',
'actions' => array('edit', 'delete', 'view'),
'currentIndex' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=comment',
'identifier' => 'id_comment',
'show_toolbar' => true,
'show_action' => true,
'title' => $this->l('Blog comments'),
'fields_list' => $fields_list,
'field_values' => $comments,
'paggination' => $paggination->render(),
'filter_params' => $this->getFilterParams($fields_list),
'show_reset' => trim(Tools::getValue('id_comment'))!='' || trim(Tools::getValue('comment'))!='' || trim(Tools::getValue('rating'))!='' || trim(Tools::getValue('subject'))!='' || trim(Tools::getValue('customer'))!='' || trim(Tools::getValue('approved'))!='' || trim(Tools::getValue('reported'))!='' ? true : false,
'totalRecords' => $totalRecords,
'show_add_new' => false,
);
return $this->_html .= $this->renderList($listData);
}
//Form
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Manage blog comments'),
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Subject'),
'name' => 'subject',
'required' => true,
'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}',
'desc' => ($id_comment = (int)Tools::getValue('id_comment')) && ($comment = $this->getCommentById($id_comment)) ? $this->displayCommentInfo($comment,(int)$comment['id_user']?$this->context->link->getAdminLink('AdminCustomers').'&id_customer='.(int)$comment['id_user'].'&updatecustomer':'#',$this->getLink('blog',array('id_post' => (int)$comment['id_post']))) : '',
),
array(
'type' => 'select',
'label' => $this->l('Rating'),
'name' => 'rating',
'options' => array(
'query' => array(
array(
'id_option' => '0',
'name' => $this->l('No ratings')
),
array(
'id_option' => '1',
'name' => '1 '. $this->l('rating')
),
array(
'id_option' => '2',
'name' => '2 '. $this->l('ratings')
),
array(
'id_option' => '3',
'name' => '3 '. $this->l('ratings')
),
array(
'id_option' => '4',
'name' => '4 '. $this->l('ratings')
),
array(
'id_option' => '5',
'name' => '5 '. $this->l('ratings')
)
),
'id' => 'id_option',
'name' => 'name'
)
),
array(
'type' => 'textarea',
'label' => $this->l('Comment'),
'name' => 'comment',
'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}',
'required' => true
),
array(
'type' => 'textarea',
'label' => $this->l('Reply to this comment'),
'name' => 'reply',
'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}'
),
array(
'type' => 'switch',
'label' => $this->l('Approved'),
'name' => 'approved',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'switch',
'label' => $this->l('Not reported'),
'name' => 'reported',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'hidden',
'name' => 'control'
)
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->module = $this;
$helper->identifier = $this->identifier;
$helper->submit_action = 'saveComment';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$language = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->tpl_vars = array(
'base_url' => $this->context->shop->getBaseURL(),
'language' => array(
'id_lang' => $language->id,
'iso_code' => $language->iso_code
),
'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'),
'fields_value' => $this->getFieldsValues($this->commentFields,'id_comment','Ybc_blog_free_comment_class','saveComment'),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
'image_baseurl' => $this->_path.'views/img/',
'link' => $this->context->link,
'cancel_url' => $this->baseAdminPath.'&control=comment&list=true'
);
if(Tools::isSubmit('id_comment') && $this->itemExists('comment','id_comment',(int)Tools::getValue('id_comment')))
{
$fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_comment');
}
$helper->override_folder = '/';
$this->_html .= $helper->generateForm(array($fields_form));
}
public function displayCommentInfo($comment, $customerLink, $postLink)
{
$this->smarty->assign(array(
'comment' => $comment,
'customerLink' => $customerLink,
'postLink' => $postLink,
));
return $this->display(__FILE__,'comment_info.tpl');
}
/**
* Side
*/
public function renderSlideForm()
{
//List
if(trim(Tools::getValue('list'))=='true')
{
$fields_list = array(
'id_slide' => array(
'title' => $this->l('Id'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true
),
'image' => array(
'title' => $this->l('Image'),
'width' => 100,
'type' => 'text',
'filter' => false
),
'caption' => array(
'title' => $this->l('Caption'),
'width' => 140,
'type' => 'text',
'sort' => true,
'filter' => true
),
'sort_order' => array(
'title' => $this->l('Sort order'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true
),
'enabled' => array(
'title' => $this->l('Enabled'),
'width' => 80,
'type' => 'active',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'enabled',
'value' => 'title',
'list' => array(
0 => array(
'enabled' => 1,
'title' => $this->l('Yes')
),
1 => array(
'enabled' => 0,
'title' => $this->l('No')
)
)
)
),
);
//Filter
$filter = "";
if(trim(Tools::getValue('id_slide'))!='')
$filter .= " AND s.id_slide = ".(int)trim(urldecode(Tools::getValue('id_slide')));
if(trim(Tools::getValue('sort_order'))!='')
$filter .= " AND s.sort_order = ".(int)trim(urldecode(Tools::getValue('sort_order')));
if(trim(Tools::getValue('caption'))!='')
$filter .= " AND sl.caption like '%".addslashes(trim(urldecode(Tools::getValue('title'))))."%'";
if(trim(Tools::getValue('enabled'))!='')
$filter .= " AND s.enabled =".(int)Tools::getValue('enabled');
//Sort
$sort = "";
if(trim(Tools::getValue('sort')) && isset($fields_list[Tools::getValue('sort')]))
{
$sort .= trim(Tools::getValue('sort'))." ".(Tools::getValue('sort_type')=='asc' ? ' ASC ' :' DESC ')." , ";
}
else
$sort = false;
//Paggination
$page = (int)Tools::getValue('page') && (int)Tools::getValue('page') > 0 ? (int)Tools::getValue('page') : 1;
$totalRecords = (int)$this->countSlidesWithFilter($filter);
$paggination = new Ybc_blog_free_paggination_class();
$paggination->total = $totalRecords;
$paggination->url = $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=slide&list=true&page=_page_'.$this->getUrlExtra($fields_list);
$paggination->limit = 20;
$totalPages = ceil($totalRecords / $paggination->limit);
if($page > $totalPages)
$page = $totalPages;
$paggination->page = $page;
$start = $paggination->limit * ($page - 1);
if($start < 0)
$start = 0;
$slides = $this->getSlidesWithFilter($filter, $sort, $start, $paggination->limit);
if($slides)
{
foreach($slides as &$slide)
{
if($slide['image'])
{
$slide['image'] = array(
'image_field' => true,
'img_url' => $this->_path.'views/img/slide/'.$slide['image'],
'width' => 150
);
}
}
}
$paggination->text = $this->l('Showing {start} to {end} of {total} ({pages} Pages)');
$paggination->style_links = $this->l('links');
$paggination->style_results = $this->l('results');
$listData = array(
'name' => 'ybc_slide',
'actions' => array('edit', 'delete', 'view'),
'currentIndex' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=slide',
'identifier' => 'id_slide',
'show_toolbar' => true,
'show_action' => true,
'title' => $this->l('Blog slider'),
'fields_list' => $fields_list,
'field_values' => $slides,
'paggination' => $paggination->render(),
'filter_params' => $this->getFilterParams($fields_list),
'show_reset' => trim(Tools::getValue('enabled'))!='' || trim(Tools::getValue('id_slide'))!='' || trim(Tools::getValue('description'))!='' || trim(Tools::getValue('title'))!='' || trim(Tools::getValue('sort_order'))!='' ? true : false,
'totalRecords' => $totalRecords
);
return $this->_html .= $this->renderList($listData);
}
//Form
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Manage blog slider'),
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Caption'),
'name' => 'caption',
'lang' => true,
'required' => true,
),
array(
'type' => 'text',
'label' => $this->l('Url'),
'name' => 'url',
'lang'=>true,
),
array(
'type' => 'file',
'label' => $this->l('Image'),
'name' => 'image',
'required' => true,
'desc' => $this->l('Recommended size: 800x470'),
),
array(
'type' => 'text',
'label' => $this->l('Sort order'),
'name' => 'sort_order',
'required' => true
),
array(
'type' => 'switch',
'label' => $this->l('Enabled'),
'name' => 'enabled',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'hidden',
'name' => 'control'
)
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->module = $this;
$helper->identifier = $this->identifier;
$helper->submit_action = 'saveSlide';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$language = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->tpl_vars = array(
'base_url' => $this->context->shop->getBaseURL(),
'language' => array(
'id_lang' => $language->id,
'iso_code' => $language->iso_code
),
'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'),
'fields_value' => $this->getFieldsValues($this->slideFields,'id_slide','Ybc_blog_free_slide_class','saveSlide'),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
'image_baseurl' => $this->_path.'views/img/',
'link' => $this->context->link,
'post_key' => 'id_slide',
'addNewUrl' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=slide',
'cancel_url' => $this->baseAdminPath.'&control=slide&list=true'
);
if(Tools::isSubmit('id_slide') && $this->itemExists('slide','id_slide',(int)Tools::getValue('id_slide')))
{
$fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_slide');
$slide = new Ybc_blog_free_slide_class((int)Tools::getValue('id_slide'));
if($slide->image)
{
$helper->tpl_vars['display_img'] = $this->_path.'views/img/slide/'.$slide->image;
$helper->tpl_vars['img_del_link'] = $this->baseAdminPath.'&id_slide='.Tools::getValue('id_slide').'&delslideimage=true&control=slide';
}
}
$helper->override_folder = '/';
$this->_html .= $helper->generateForm(array($fields_form));
}
public function renderExportForm()
{
$this->context->smarty->assign(array(
'errors'=>$this->errors,
'import_ok'=>$this->import_ok,
));
$this->_html= $this->display(__FILE__,'export.tpl');
}
private function _postSlide()
{
$errors = array();
$id_slide = (int)Tools::getValue('id_slide');
if($id_slide && !$this->itemExists('slide','id_slide',$id_slide) && !Tools::isSubmit('list'))
Tools::redirectAdmin($this->baseAdminPath);
/**
* Change status
*/
if(Tools::isSubmit('change_enabled'))
{
$status = (int)Tools::getValue('change_enabled') ? 1 : 0;
$field = Tools::getValue('field');
$id_slide = (int)Tools::getValue('id_slide');
if(($field == 'enabled' && $id_slide))
{
$this->changeStatus('slide',$field,$id_slide,$status);
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(array(
'listId' => $id_slide,
'enabled' => $status,
'field' => $field,
'href' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=slide&change_enabled='.($status ? '0' : '1').'&field='.$field.'&id_slide='.$id_slide,
)));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=slide&list=true');
}
}
/**
* Delete image
*/
if($id_slide && $this->itemExists('slide','id_slide',$id_slide) && Tools::isSubmit('delslideimage'))
{
Tools::redirectAdmin($this->baseAdminPath);
$slide = new Ybc_blog_free_slide_class($id_slide);
$icoUrl = dirname(__FILE__).'/views/img/slide/'.$slide->image;
if($slide->image && file_exists($icoUrl))
{
@unlink($icoUrl);
$slide->image = '';
$slide->update();
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => 'success',
'message' => $this->displayConfirmation($this->l('Image deleted')),
)
));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_slide='.$id_slide.'&control=slide');
}
else
$errors[] = $this->l('Image does not exist');
}
/**
* Delete slide
*/
if(Tools::isSubmit('del'))
{
$id_slide = (int)Tools::getValue('id_slide');
if(!$this->itemExists('slide','id_slide',$id_slide))
$errors[] = $this->l('Slide does not exist');
elseif($this->_deleteSlide($id_slide))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=slide&list=true');
}
else
$errors[] = $this->l('Could not delete the slide. Please try again');
}
/**
* Save slide
*/
if(Tools::isSubmit('saveSlide'))
{
if($id_slide && $this->itemExists('slide','id_slide',$id_slide))
{
$slide = new Ybc_blog_free_slide_class($id_slide);
}
else
{
$slide = new Ybc_blog_free_slide_class();
if(!isset($_FILES['image']['name']) || isset($_FILES['image']['name']) && !$_FILES['image']['name'])
$errors[] = $this->l('You need to upload an image');
}
$slide->enabled = trim(Tools::getValue('enabled',1)) ? 1 : 0;
$slide->sort_order = (int)trim(Tools::getValue('sort_order',1));
$slide->url = trim(Tools::getValue('url',''));
$languages = Language::getLanguages(false);
foreach ($languages as $language)
{
$slide->caption[$language['id_lang']] = trim(Tools::getValue('caption_'.$language['id_lang'])) != '' ? trim(Tools::getValue('caption_'.$language['id_lang'])) : trim(Tools::getValue('caption_'.Configuration::get('PS_LANG_DEFAULT')));
if($slide->caption[$language['id_lang']] && !Validate::isCleanHtml($slide->caption[$language['id_lang']]))
$errors[] = $this->l('Caption in '.$language['name'].' is not valid');
}
if(Tools::getValue('caption_'.Configuration::get('PS_LANG_DEFAULT'))=='')
$errors[] = $this->l('You need to set caption');
if(Tools::getValue('sort_order')=='')
$errors[] = $this->l('Sort order is required');
elseif(!Validate::isInt(Tools::getValue('sort_order')))
$errors[] = $this->l('Sort order is not valid');
/**
* Upload image
*/
$oldImage = false;
$newImage = false;
if(isset($_FILES['image']['tmp_name']) && isset($_FILES['image']['name']) && $_FILES['image']['name'])
{
if(file_exists(dirname(__FILE__).'/views/img/slide/'.$_FILES['image']['name']))
{
$_FILES['image']['name'] = sha1(microtime()).'-'.$_FILES['image']['name'];
//$errors[] = $this->l('Image file name already exists');
}
$type = Tools::strtolower(Tools::substr(strrchr($_FILES['image']['name'], '.'), 1));
$imagesize = @getimagesize($_FILES['image']['tmp_name']);
if (isset($_FILES['image']) &&
!empty($_FILES['image']['tmp_name']) &&
!empty($imagesize) &&
in_array($type, array('jpg', 'gif', 'jpeg', 'png'))
)
{
$temp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS');
if ($error = ImageManager::validateUpload($_FILES['image']))
$errors[] = $error;
elseif (!$temp_name || !move_uploaded_file($_FILES['image']['tmp_name'], $temp_name))
$errors[] = $this->l('Can not upload the file');
elseif (!ImageManager::resize($temp_name, dirname(__FILE__).'/views/img/slide/'.$_FILES['image']['name'], null, null, $type))
$errors[] = $this->displayError($this->l('An error occurred during the image upload process.'));
if (isset($temp_name))
@unlink($temp_name);
if($slide->image)
$oldImage = dirname(__FILE__).'/views/img/slide/'.$slide->image;
$slide->image = $_FILES['image']['name'];
$newImage = dirname(__FILE__).'/views/img/slide/'.$slide->image;
}
}
/**
* Save
*/
if(!$errors)
{
if (!Tools::getValue('id_slide'))
{
if (!$slide->add())
{
$errors[] = $this->displayError($this->l('The slide could not be added.'));
if($newImage && file_exists($newImage))
@unlink($newImage);
}
}
elseif (!$slide->update())
{
if($newImage && file_exists($newImage))
@unlink($newImage);
$errors[] = $this->displayError($this->l('The slide could not be updated.'));
}
else
{
if($oldImage && file_exists($oldImage))
@unlink($oldImage);
}
}
}
$changedImages = array();
if(isset($newImage) && $newImage && file_exists($newImage) && !$errors && isset($slide)){
$changedImages[] = array(
'name' => 'image',
'url' => $this->_path.'views/img/slide/'.$slide->image,
);
}
if (count($errors))
{
if($newImage && file_exists($newImage))
@unlink($newImage);
$this->errorMessage = $this->displayError($errors);
}
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => $errors ? 'error' : 'success',
'message' => $errors ? $this->errorMessage : $this->displaySuccessMessage($this->l('Slide saved'),$this->l('View slider on blog page'),$this->getLink('blog')),
'images' => isset($changedImages) && $changedImages ? $changedImages : array(),
'postUrl' => !$errors && Tools::isSubmit('saveSlide') && !(int)Tools::getValue('id_slide') ? $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_slide='.$this->getMaxId('slide','id_slide').'&control=slide' : 0,
'itemKey' => 'id_slide',
'itemId' => !$errors && Tools::isSubmit('saveSlide') && !(int)Tools::getValue('id_slide') ? $this->getMaxId('slide','id_slide') : ((int)Tools::getValue('id_slide') > 0 ? (int)Tools::getValue('id_slide') : 0),
)
));
}
if (!$errors && Tools::isSubmit('saveSlide') && Tools::isSubmit('id_slide'))
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_slide='.Tools::getValue('id_slide').'&control=slide');
elseif (!$errors && Tools::isSubmit('saveSlide'))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=3&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_slide='.$this->getMaxId('slide','id_slide').'&control=slide');
}
}
public function _postExport()
{
if(Tools::isSubmit('submitExportBlog'))
{
$import= new YbcImportExport();
$import->generateArchive();
}
if(Tools::isSubmit('submitImportBlog'))
{
$import= new YbcImportExport();
$errors =$import->processImport();
if($errors)
$this->errors=$errors;
else
$this->import_ok=true;
}
}
/**
* Gallery
*/
public function renderGalleryForm()
{
//List
if(trim(Tools::getValue('list'))=='true')
{
$fields_list = array(
'id_gallery' => array(
'title' => $this->l('Id'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true,
),
'image' => array(
'title' => $this->l('Image'),
'width' => 140,
'type' => 'text',
'required' => true
),
'title' => array(
'title' => $this->l('Name'),
'width' => 140,
'type' => 'text',
'sort' => true,
'filter' => true
),
'description' => array(
'title' => $this->l('Description'),
'width' => 140,
'type' => 'text',
'sort' => true,
'filter' => true
),
'sort_order' => array(
'title' => $this->l('Sort order'),
'width' => 40,
'type' => 'text',
'sort' => true,
'filter' => true
),
'is_featured' => array(
'title' => $this->l('Featured'),
'width' => 80,
'type' => 'active',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'enabled',
'value' => 'title',
'list' => array(
0 => array(
'enabled' => 1,
'title' => $this->l('Yes')
),
1 => array(
'enabled' => 0,
'title' => $this->l('No')
)
)
)
),
'enabled' => array(
'title' => $this->l('Enabled'),
'width' => 80,
'type' => 'active',
'sort' => true,
'filter' => true,
'strip_tag' => false,
'filter_list' => array(
'id_option' => 'enabled',
'value' => 'title',
'list' => array(
0 => array(
'enabled' => 1,
'title' => $this->l('Yes')
),
1 => array(
'enabled' => 0,
'title' => $this->l('No')
)
)
)
),
);
//Filter
$filter = "";
if(trim(Tools::getValue('id_gallery'))!='')
$filter .= " AND g.id_gallery = ".(int)trim(urldecode(Tools::getValue('id_gallery')));
if(trim(Tools::getValue('sort_order'))!='')
$filter .= " AND g.sort_order = ".(int)trim(urldecode(Tools::getValue('sort_order')));
if(trim(Tools::getValue('title'))!='')
$filter .= " AND gl.title like '%".addslashes(trim(urldecode(Tools::getValue('title'))))."%'";
if(trim(Tools::getValue('description'))!='')
$filter .= " AND gl.description like '%".addslashes(trim(urldecode(Tools::getValue('description'))))."%'";
if(trim(Tools::getValue('enabled'))!='')
$filter .= " AND g.enabled =".(int)Tools::getValue('enabled');
if(trim(Tools::getValue('is_featured'))!='')
$filter .= " AND g.is_featured =".(int)Tools::getValue('is_featured');
//Sort
$sort = "";
if(trim(Tools::getValue('sort')) && isset($fields_list[Tools::getValue('sort')]))
{
$sort .= trim(Tools::getValue('sort'))." ".(Tools::getValue('sort_type')=='asc' ? ' ASC ' :' DESC ')." , ";
}
else
$sort = false;
//Paggination
$page = (int)Tools::getValue('page') && (int)Tools::getValue('page') > 0 ? (int)Tools::getValue('page') : 1;
$totalRecords = (int)$this->countGalleriesWithFilter($filter);
$paggination = new Ybc_blog_free_paggination_class();
$paggination->total = $totalRecords;
$paggination->url = $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=gallery&list=true&page=_page_'.$this->getUrlExtra($fields_list);
$paggination->limit = 20;
$totalPages = ceil($totalRecords / $paggination->limit);
if($page > $totalPages)
$page = $totalPages;
$paggination->page = $page;
$start = $paggination->limit * ($page - 1);
if($start < 0)
$start = 0;
$galleries = $this->getGalleriesWithFilter($filter, $sort, $start, $paggination->limit);
if($galleries)
{
foreach($galleries as &$gallery)
{
if($gallery['image'])
{
$gallery['image'] = array(
'image_field' => true,
'img_url' => file_exists(dirname(__FILE__).'/views/img/gallery/thumb/'.$gallery['image']) ? $this->_path.'views/img/gallery/thumb/'.$gallery['image'] : $this->_path.'views/img/gallery/'.$gallery['image'],
'width' => 150
);
}
}
}
$paggination->text = $this->l('Showing {start} to {end} of {total} ({pages} Pages)');
$paggination->style_links = $this->l('links');
$paggination->style_results = $this->l('results');
$listData = array(
'name' => 'ybc_gallery',
'actions' => array('edit', 'delete', 'view'),
'currentIndex' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=gallery',
'identifier' => 'id_gallery',
'show_toolbar' => true,
'show_action' => true,
'title' => $this->l('Blog gallery'),
'fields_list' => $fields_list,
'field_values' => $galleries,
'paggination' => $paggination->render(),
'filter_params' => $this->getFilterParams($fields_list),
'show_reset' => trim(Tools::getValue('is_featured'))!='' || trim(Tools::getValue('enabled'))!='' || trim(Tools::getValue('id_gallery'))!='' || trim(Tools::getValue('description'))!='' || trim(Tools::getValue('title'))!='' || trim(Tools::getValue('sort_order'))!='' ? true : false,
'totalRecords' => $totalRecords,
'preview_link' => $this->getLink('gallery'),
);
return $this->_html .= $this->renderList($listData);
}
//Form
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Manage blog galleryr'),
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Title'),
'name' => 'title',
'lang' => true,
'required' => true
),
array(
'type' => 'textarea',
'label' => $this->l('Description'),
'name' => 'description',
'lang' => true,
'autoload_rte' => true
),
array(
'type' => 'file',
'label' => $this->l('Image'),
'name' => 'image',
'required' => true,
'desc' => $this->l('Recommended size: 600x600'),
),
array(
'type' => 'text',
'label' => $this->l('Sort order'),
'name' => 'sort_order',
'required' => true
),
array(
'type' => 'switch',
'label' => $this->l('Featured'),
'name' => 'is_featured',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'switch',
'label' => $this->l('Enabled'),
'name' => 'enabled',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Yes')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('No')
)
)
),
array(
'type' => 'hidden',
'name' => 'control'
)
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->module = $this;
$helper->identifier = $this->identifier;
$helper->submit_action = 'saveGallery';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$language = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->tpl_vars = array(
'base_url' => $this->context->shop->getBaseURL(),
'language' => array(
'id_lang' => $language->id,
'iso_code' => $language->iso_code
),
'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'),
'fields_value' => $this->getFieldsValues($this->galleryFields,'id_gallery','Ybc_blog_free_gallery_class','saveGallery'),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
'image_baseurl' => $this->_path.'views/img/',
'link' => $this->context->link,
'cancel_url' => $this->baseAdminPath.'&control=gallery&list=true',
'post_key' => 'id_gallery',
'addNewUrl' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=gallery',
);
if(Tools::isSubmit('id_gallery') && $this->itemExists('gallery','id_gallery',(int)Tools::getValue('id_gallery')))
{
$fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_gallery');
$gallery = new Ybc_blog_free_gallery_class((int)Tools::getValue('id_gallery'));
if($gallery->image)
{
$helper->tpl_vars['display_img'] = $this->_path.'views/img/gallery/'.$gallery->image;
$helper->tpl_vars['img_del_link'] = $this->baseAdminPath.'&id_gallery='.Tools::getValue('id_gallery').'&delgalleryimage=true&control=gallery';
}
}
$helper->override_folder = '/';
$this->_html .= $helper->generateForm(array($fields_form));
}
private function _postGallery()
{
$errors = array();
$id_gallery = (int)Tools::getValue('id_gallery');
if($id_gallery && !$this->itemExists('gallery','id_gallery',$id_gallery) && !Tools::isSubmit('list'))
Tools::redirectAdmin($this->baseAdminPath);
/**
* Change status
*/
if(Tools::isSubmit('change_enabled'))
{
$status = (int)Tools::getValue('change_enabled') ? 1 : 0;
$field = Tools::getValue('field');
$id_gallery = (int)Tools::getValue('id_gallery');
if(($field == 'enabled' || $field=='is_featured') && $id_gallery)
{
$this->changeStatus('gallery',$field,$id_gallery,$status);
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(array(
'listId' => $id_gallery,
'enabled' => $status,
'field' => $field,
'href' => $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=gallery&change_enabled='.($status ? '0' : '1').'&field='.$field.'&id_gallery='.$id_gallery,
)));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=gallery&list=true');
}
}
/**
* Delete image
*/
if($id_gallery && $this->itemExists('gallery','id_gallery',$id_gallery) && Tools::isSubmit('delgalleryimage'))
{
Tools::redirectAdmin($this->baseAdminPath);
$gallery = new Ybc_blog_free_gallery_class($id_gallery);
if($gallery->image)
{
$icoUrl = dirname(__FILE__).'/views/img/gallery/'.$gallery->image;
$thumbUrl = dirname(__FILE__).'/views/img/gallery/thumb/'.$gallery->image;
if(file_exists($thumbUrl))
@unlink($thumbUrl);
if(file_exists($icoUrl))
{
@unlink($icoUrl);
$gallery->image = '';
$gallery->update();
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => 'success',
'message' => $this->displayConfirmation($this->l('Image deleted')),
)
));
}
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_gallery='.$id_gallery.'&control=gallery');
}
else
$errors[] = $this->l('Image does not exist');
}
else
$errors[] = $this->l('Image is empty');
}
/**
* Delete gallery
*/
if(Tools::isSubmit('del'))
{
$id_gallery = (int)Tools::getValue('id_gallery');
if(!$this->itemExists('gallery','id_gallery',$id_gallery))
$errors[] = $this->l('Item does not exist');
elseif($this->_deleteGallery($id_gallery))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=gallery&list=true');
}
else
$errors[] = $this->l('Could not delete the item. Please try again');
}
/**
* Save gallery
*/
if(Tools::isSubmit('saveGallery'))
{
if($id_gallery && $this->itemExists('gallery','id_gallery',$id_gallery))
{
$gallery = new Ybc_blog_free_gallery_class($id_gallery);
}
else
{
$gallery = new Ybc_blog_free_gallery_class();
}
$gallery->enabled = trim(Tools::getValue('enabled',1)) ? 1 : 0;
$gallery->is_featured = trim(Tools::getValue('is_featured',1)) ? 1 : 0;
$gallery->sort_order = (int)trim(Tools::getValue('sort_order',1));
$languages = Language::getLanguages(false);
foreach ($languages as $language)
{
$gallery->title[$language['id_lang']] = trim(Tools::getValue('title_'.$language['id_lang'])) != '' ? trim(Tools::getValue('title_'.$language['id_lang'])) : trim(Tools::getValue('title_'.Configuration::get('PS_LANG_DEFAULT')));
if($gallery->title[$language['id_lang']] && !Validate::isCleanHtml($gallery->title[$language['id_lang']]))
$errors[] = $this->l('Title in '.$language['name'].' is not valid');
$gallery->description[$language['id_lang']] = trim(Tools::getValue('description_'.$language['id_lang'])) != '' ? trim(Tools::getValue('description_'.$language['id_lang'])) : trim(Tools::getValue('description_'.Configuration::get('PS_LANG_DEFAULT')));
if($gallery->description[$language['id_lang']] && !Validate::isCleanHtml($gallery->description[$language['id_lang']], true))
$errors[] = $this->l('Description in '.$language['name'].' is not valid');
}
if(Tools::getValue('title_'.Configuration::get('PS_LANG_DEFAULT'))=='')
$errors[] = $this->l('Title is required');
if(Tools::getValue('sort_order')=='')
$errors[] = $this->l('Sort order is required');
elseif(!Validate::isInt(Tools::getValue('sort_order')))
$errors[] = $this->l('Sort order is not valid');
/**
* Upload image
*/
$oldImage = false;
$newImage = false;
$newThumb = false;
$oldThumb = false;
if(isset($_FILES['image']['tmp_name']) && isset($_FILES['image']['name']) && $_FILES['image']['name'])
{
if(file_exists(dirname(__FILE__).'/views/img/gallery/'.$_FILES['image']['name']))
{
$_FILES['image']['name'] = sha1(microtime()).'-'.$_FILES['image']['name'];
}
$type = Tools::strtolower(Tools::substr(strrchr($_FILES['image']['name'], '.'), 1));
$imagesize = @getimagesize($_FILES['image']['tmp_name']);
if (isset($_FILES['image']) &&
!empty($_FILES['image']['tmp_name']) &&
!empty($imagesize) &&
in_array($type, array('jpg', 'gif', 'jpeg', 'png'))
)
{
$temp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS');
if ($error = ImageManager::validateUpload($_FILES['image']))
$errors[] = $error;
elseif (!$temp_name || !move_uploaded_file($_FILES['image']['tmp_name'], $temp_name))
$errors[] = $this->l('Can not upload the file');
elseif(!ImageManager::resize($temp_name, dirname(__FILE__).'/views/img/gallery/'.$_FILES['image']['name'], null, null, $type))
$errors[] = $this->displayError($this->l('An error occurred during the image upload process.'));
if($gallery->image)
{
$oldImage = dirname(__FILE__).'/views/img/gallery/'.$gallery->image;
$oldThumb = dirname(__FILE__).'/views/img/gallery/thumb/'.$gallery->image;
}
$gallery->image = $_FILES['image']['name'];
$newImage = dirname(__FILE__).'/views/img/gallery/'.$gallery->image;
$newThumb = dirname(__FILE__).'/views/img/gallery/thumb/'.$gallery->image;
if(!$errors)
{
$thumbWidth = (int)Configuration::get('YBC_BLOG_FREE_GALLERY_THUMB_WIDTH');
$thumbWidth = $thumbWidth >= 50 && $thumbWidth <= 1000 ? $thumbWidth : 200;
$thumbHeight = (int)Configuration::get('YBC_BLOG_FREE_GALLERY_THUMB_HEIGHT');
$thumbHeight = $thumbHeight >= 50 && $thumbHeight <= 1000 ? $thumbHeight : 200;
if(!ImageManager::resize($temp_name, dirname(__FILE__).'/views/img/gallery/thumb/'.$_FILES['image']['name'], $thumbWidth, $thumbHeight, $type))
$errors[] = $this->displayError($this->l('Could not create thumbnail. Please try to upload another image.'));
}
if (isset($temp_name))
@unlink($temp_name);
}
}
elseif(!$id_gallery)
$errors[] = $this->l('Image is required');
/**
* Save
*/
if(!$errors)
{
if (!Tools::getValue('id_gallery'))
{
if (!$gallery->add())
{
$errors[] = $this->displayError($this->l('The item could not be added.'));
if($newImage && file_exists($newImage))
@unlink($newImage);
if($newThumb && file_exists($newThumb))
@unlink($newThumb);
}
}
elseif (!$gallery->update())
{
if($newImage && file_exists($newImage))
@unlink($newImage);
if($newThumb && file_exists($newThumb))
@unlink($newThumb);
$errors[] = $this->displayError($this->l('The item could not be updated.'));
}
else
{
if($oldImage && file_exists($oldImage))
@unlink($oldImage);
if($oldThumb && file_exists($oldThumb))
@unlink($oldThumb);
}
}
}
$changedImages = array();
if(isset($newImage) && $newImage && file_exists($newImage) && !$errors && isset($gallery)){
$changedImages[] = array(
'name' => 'image',
'url' => $this->_path.'views/img/gallery/'.$gallery->image,
);
}
if(Tools::isSubmit('ajax'))
{
die(Tools::jsonEncode(
array(
'messageType' => $errors ? 'error' : 'success',
'message' => $errors ? $this->displayError($errors) : $this->displaySuccessMessage($this->l('Gallery image saved'),$this->l('View blog gallery'),$this->getLink('gallery')),
'images' => isset($changedImages) && $changedImages ? $changedImages : array(),
'postUrl' => !$errors && Tools::isSubmit('saveGallery') && !(int)Tools::getValue('id_gallery') ? $this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_gallery='.$this->getMaxId('gallery','id_gallery').'&control=gallery' : 0,
'itemKey' => 'id_gallery',
'itemId' => !$errors && Tools::isSubmit('saveGallery') && !(int)Tools::getValue('id_gallery') ? $this->getMaxId('gallery','id_gallery') : ((int)Tools::getValue('id_gallery') > 0 ? (int)Tools::getValue('id_gallery') : 0),
)
));
}
if (count($errors))
{
if($newImage && file_exists($newImage))
@unlink($newImage);
if($newThumb && file_exists($newThumb))
@unlink($newThumb);
$this->errorMessage = $this->displayError($errors);
}
elseif (Tools::isSubmit('saveGallery') && Tools::isSubmit('id_gallery'))
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_gallery='.Tools::getValue('id_gallery').'&control=gallery');
elseif (Tools::isSubmit('saveGallery'))
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=3&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_gallery='.$this->getMaxId('gallery','id_gallery').'&control=gallery');
}
}
public function hookModuleRoutes($params) {
$subfix = (int)Configuration::get('YBC_BLOG_FREE_URL_SUBFIX') ? '.html' : '';
$blogAlias = Configuration::get('YBC_BLOG_FREE_ALIAS',$this->context->language->id);
if(!$blogAlias)
return array();
$routes = array(
'ybcblogmainpage' => array(
'controller' => 'blog',
'rule' => $blogAlias,
'keywords' => array(),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'ybcblogfeaturedpostspage' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/{page}',
'keywords' => array(
'page' => array('regexp' => '[0-9]+', 'param' => 'page'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'ybcblogpost' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_POST',$this->context->language->id)) ? $subAlias : 'post').'/{id_post}-{url_alias}'.$subfix,
'keywords' => array(
'id_post' => array('regexp' => '[0-9]+', 'param' => 'id_post'),
'url_alias' => array('regexp' => '[_a-zA-Z0-9-]+','param' => 'url_alias'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'categoryblogpost' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_CATEGORY',$this->context->language->id)) ? $subAlias : 'category').'/{id_category}-{url_alias}'.$subfix,
'keywords' => array(
'id_category' => array('regexp' => '[0-9]+', 'param' => 'id_category'),
'url_alias' => array('regexp' => '[_a-zA-Z0-9-]+','param' => 'url_alias'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'categoryblogpostpage' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_CATEGORY',$this->context->language->id)) ? $subAlias : 'category').'/{page}/{id_category}-{url_alias}'.$subfix,
'keywords' => array(
'id_category' => array('regexp' => '[0-9]+', 'param' => 'id_category'),
'page' => array('regexp' => '[0-9]+', 'param' => 'page'),
'url_alias' => array('regexp' => '[_a-zA-Z0-9-]+','param' => 'url_alias'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'authorblogpost' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_AUTHOR',$this->context->language->id)) ? $subAlias : 'author').'/{id_author}-{author_name}',
'keywords' => array(
'id_author' => array('regexp' => '[0-9]+', 'param' => 'id_author'),
'author_name' => array('regexp' => '(.)+','param' => 'author_name'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'authorblogpostpage' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_AUTHOR',$this->context->language->id)) ? $subAlias : 'author').'/{page}/{id_author}-{author_name}',
'keywords' => array(
'id_author' => array('regexp' => '[0-9]+', 'param' => 'id_author'),
'page' => array('regexp' => '[0-9]+', 'param' => 'page'),
'author_name' => array('regexp' => '(.)+','param' => 'author_name'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'categoryblogtag' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_TAG',$this->context->language->id)) ? $subAlias : 'tag').'/{tag}',
'keywords' => array(
'tag' => array('regexp' => '.+','param' => 'tag'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'categoryblogtagpage' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/{page}/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_TAG',$this->context->language->id)) ? $subAlias : 'tag').'/{tag}',
'keywords' => array(
'tag' => array('regexp' => '.+','param' => 'tag'),
'page' => array('regexp' => '[0-9]+', 'param' => 'page'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'categorybloglatest' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_LATEST',$this->context->language->id)) ? $subAlias : 'latest'),
'keywords' => array(),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
'latest' => 'true'
),
),
'categorybloglatestpage' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_LATEST',$this->context->language->id)) ? $subAlias : 'latest').'/{page}',
'keywords' => array(
'page' => array('regexp' => '[0-9]+', 'param' => 'page'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
'latest' => 'true'
),
),
'categoryblogsearch' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_SEARCH',$this->context->language->id)) ? $subAlias : 'search').'/{search}',
'keywords' => array(
'search' => array('regexp' => '.+','param' => 'search'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'categoryblogsearchpage' => array(
'controller' => 'blog',
'rule' => $blogAlias.'/{page}/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_SEARCH',$this->context->language->id)) ? $subAlias : 'search').'/{search}',
'keywords' => array(
'search' => array('regexp' => '.+','param' => 'search'),
'page' => array('regexp' => '[0-9]+', 'param' => 'page'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'categorybloggallerypage' => array(
'controller' => 'gallery',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_GALLERY',$this->context->language->id)) ? $subAlias : 'gallery').'/{page}',
'keywords' => array(
'page' => array('regexp' => '[0-9]+', 'param' => 'page'),
),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
'categorybloggallery' => array(
'controller' => 'gallery',
'rule' => $blogAlias.'/'.(($subAlias = Configuration::get('YBC_BLOG_FREE_ALIAS_GALLERY',$this->context->language->id)) ? $subAlias : 'gallery'),
'keywords' => array(),
'params' => array(
'fc' => 'module',
'module' => 'ybc_blog_free',
),
),
);
return $routes;
}
public function setMetas()
{
$meta = array();
if(trim(Tools::getValue('module'))!='ybc_blog_free')
return;
$id_lang = $this->context->language->id;
$meta['meta_title'] = Configuration::get('YBC_BLOG_FREE_META_TITLE',$id_lang);
$meta['meta_description'] = Configuration::get('YBC_BLOG_FREE_META_DESCRIPTION',$id_lang);
$meta['meta_keywords'] = Configuration::get('YBC_BLOG_FREE_META_KEYWORDS',$id_lang);
$id_category = (int)Tools::getValue('id_category');
$id_post = (int)Tools::getValue('id_post');
if($id_category && $this->itemExists('category','id_category', $id_category))
{
$category = $this->getCategoryById($id_category);
if($category['title'])
$meta['meta_title'] = $category['title'];
if($category['meta_description'])
$meta['meta_description'] = $category['meta_description'];
if($category['meta_keywords'])
$meta['meta_keywords'] = $category['meta_keywords'];
}
elseif($id_post && $this->itemExists('post','id_post', $id_post))
{
$post = $this->getPostById($id_post);
if($post['title'])
$meta['meta_title'] = $post['title'];
if($post['meta_description'])
$meta['meta_description'] = $post['meta_description'];
if($post['meta_keywords'])
$meta['meta_keywords'] = $post['meta_keywords'];
}
elseif(Tools::getValue('tag'))
{
$meta['meta_title'] = $this->l('Tag: ').' "'.Tools::getValue('tag').'"';
}
elseif(Tools::getValue('latest'))
{
$meta['meta_title'] = $this->l('Latest posts');
}
elseif(Tools::getValue('search'))
{
$meta['meta_title'] = $this->l('Search:').' "'.Tools::getValue('search').'"';
}
elseif(Tools::getValue('controller')=='gallery')
{
$meta['meta_title'] = $this->l('Gallery');
}
elseif(Tools::getValue('id_author'))
{
$employee = new Employee((int)Tools::getValue('id_author'));
if($employee->firstname || $employee->lastname)
$meta['meta_title'] = $this->l('Author: ').'"'.$employee->firstname.' '.$employee->lastname.'"';
}
if(Configuration::get('YBC_BLOG_FREE_RTL_MODE')=='auto' && isset($this->context->language->is_rtl) && $this->context->language->is_rtl || Configuration::get('YBC_BLOG_FREE_RTL_MODE')=='rtl')
$rtl = true;
else
$rtl = false;
if($this->is17)
{
$body_classes = array(
'lang-'.$this->context->language->iso_code => true,
'lang-rtl' => (bool) $this->context->language->is_rtl,
'country-'.$this->context->country->iso_code => true,
'ybc_blog_free' => true,
'ybc_blog_free_rtl' => $rtl,
);
$page = array(
'title' => '',
'canonical' => '',
'meta' => array(
'title' => $meta['meta_title'],
'description' => $meta['meta_description'],
'keywords' => $meta['meta_keywords'],
'robots' => 'index',
),
'page_name' => 'ybc_blog_free_page',
'body_classes' => $body_classes,
'admin_notifications' => array(),
);
$this->context->smarty->assign(array('page' => $page));
}
else
{
$this->context->smarty->assign($meta);
if($rtl)
$this->context->smarty->assign(array(
'body_classes' => array('ybc_blog_free_rtl'),
));
}
}
private function getAuthorById($id_employee)
{
return Db::getInstance()->getRow('SELECT * FROM '._DB_PREFIX_.'employee WHERE id_employee = '.(int)$id_employee);
}
public function getBreadCrumb()
{
$id_post = (int)Tools::getValue('id_post');
$id_category = (int)Tools::getValue('id_category');
$id_author = (int)Tools::getValue('id_author');
$nodes = array();
$nodes[] = array(
'title' => $this->l('Home'),
'url' => $this->context->link->getPageLink('index', true),
);
$nodes[] = array(
'title' => $this->l('Blog'),
'url' => $this->getLink('blog')
);
if($id_category && $category = $this->getCategoryById($id_category))
{
$nodes[] = array(
'title' => $category['title'],
'url' => $this->getLink('blog',array('id_category' => $id_category)),
);
}
if($id_author && $author = $this->getAuthorById($id_author))
{
$nodes[] = array(
'title' => trim(Tools::ucfirst($author['firstname']).' '.Tools::ucfirst($author['lastname'])),
'url' => $this->getLink('blog',array('id_author' => $id_author)),
);
}
if($id_post && $post = $this->getPostById($id_post))
{
$nodes[] = array(
'title' => $post['title'],
'url' => $this->getLink('blog',array('id_post' => $id_post)),
);
}
if(Tools::getValue('controller') == 'gallery')
{
$nodes[] = array(
'title' => $this->l('Gallery'),
'url' => $this->getLink('gallery'),
);
}
if(Tools::getValue('controller') == 'blog' && Tools::getValue('latest'))
{
$nodes[] = array(
'title' => $this->l('Latest posts'),
'url' => $this->getLink('blog',array('latest' => true)),
);
}
if(Tools::getValue('controller') == 'blog' && Tools::getValue('tag'))
{
$nodes[] = array(
'title' => $this->l('Blog tag').': '.Tools::getValue('tag'),
'url' => $this->getLink('blog',array('tag' => Tools::getValue('tag'))),
);
}
if(Tools::getValue('controller') == 'blog' && Tools::getValue('search'))
{
$nodes[] = array(
'title' => $this->l('Blog search').': '.Tools::getValue('search'),
'url' => $this->getLink('blog',array('search' => Tools::getValue('search'))),
);
}
if($this->is17)
return array('links' => $nodes,'count' => count($nodes));
return $this->displayBreadcrumb($nodes);
}
public function displayBreadcrumb($nodes)
{
$this->smarty->assign(array('nodes' => $nodes));
return $this->display(__FILE__, 'nodes.tpl');
}
private function _installTabs()
{
$languages = Language::getLanguages(false);
$tab = new Tab();
$tab->class_name = 'AdminYbcBlogFree';
$tab->module = 'ybc_blog_free';
$tab->id_parent = 0;
foreach($languages as $lang){
$tab->name[$lang['id_lang']] = $this->l('Blog');
}
$tab->save();
$blogTabId = Tab::getIdFromClassName('AdminYbcBlogFree');
if($blogTabId)
{
$subTabs = array(
array(
'class_name' => 'AdminYbcBlogFreePost',
'tab_name' => $this->l('Blog posts')
),
array(
'class_name' => 'AdminYbcBlogFreeCategory',
'tab_name' => $this->l('Blog categories')
),
array(
'class_name' => 'AdminYbcBlogFreeComment',
'tab_name' => $this->l('Blog comments')
),
array(
'class_name' => 'AdminYbcBlogFreeSlider',
'tab_name' => $this->l('Blog Slider')
),
array(
'class_name' => 'AdminYbcBlogFreeGallery',
'tab_name' => $this->l('Blog gallery')
),
array(
'class_name' => 'AdminYbcBlogFreeSetting',
'tab_name' => $this->l('Settings')
),
);
foreach($subTabs as $tabArg)
{
$tab = new Tab();
$tab->class_name = $tabArg['class_name'];
$tab->module = 'ybc_blog_free';
$tab->id_parent = $blogTabId;
foreach($languages as $lang){
$tab->name[$lang['id_lang']] = $tabArg['tab_name'];
}
$tab->save();
}
}
return true;
}
private function _uninstallTabs()
{
$tabs = array('AdminYbcBlogFree','AdminYbcBlogFreePost','AdminYbcBlogFreeCategory','AdminYbcBlogFreeComment','AdminYbcBlogFreeSlider','AdminYbcBlogFreeGallery','AdminYbcBlogFreeSetting');
if($tabs)
foreach($tabs as $classname)
{
if($tabId = Tab::getIdFromClassName($classname))
{
$tab = new Tab($tabId);
if($tab)
$tab->delete();
}
}
return true;
}
public function getRelatedPosts($id_post, $tags, $id_lang = false)
{
if(!$id_lang)
$id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
$tagElements = array();
$limit = (int)Configuration::get('YBC_BLOG_FREE_RELATED_POST_NUMBER') > 0 ? (int)Configuration::get('YBC_BLOG_FREE_RELATED_POST_NUMBER') : 5;
if($tags && is_array($tags))
{
foreach($tags as $tag)
if($tag)
$tagElements[] = pSQL($tag['tag']);
if($tagElements)
{
$sql = "SELECT pl.title, pl.short_description, p.*
FROM "._DB_PREFIX_."ybc_blog_free_tag t
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post p ON p.id_post = t.id_post
LEFT JOIN "._DB_PREFIX_."ybc_blog_free_post_lang pl ON pl.id_post = t.id_post AND pl.id_lang = ".(int)$id_lang."
WHERE t.tag IN ('".implode("','",$tagElements)."') AND t.id_post != ".(int)$id_post."
GROUP BY pl.id_post
ORDER BY p.sort_order ASC, p.datetime_added DESC
LIMIT 0,".(int)$limit."
";
$posts = Db::getInstance()->executeS($sql);
return $posts;
}
}
return false;
}
public function getInternalStyles()
{
$color = Configuration::get('YBC_BLOG_FREE_CUSTOM_COLOR');
if(!$color)
$color = '#FF4C65';
$css = file_exists(dirname(__FILE__).'/views/css/dynamic_style.css') ? Tools::file_get_contents(dirname(__FILE__).'/views/css/dynamic_style.css') : '';
if($css)
$css = str_replace('[color]',$color,$css);
$this->smarty->assign(array('css' => $css));
return $this->display(__FILE__, 'head.tpl');;
}
public function ajaxProductSearch()
{
if(!Tools::isSubmit('ajaxproductsearch'))
return;
$query = Tools::getValue('q', false);
if (!$query OR $query == '' OR Tools::strlen($query) < 1)
die();
/*
* In the SQL request the "q" param is used entirely to match result in database.
* In this way if string:"(ref : #ref_pattern#)" is displayed on the return list,
* they are no return values just because string:"(ref : #ref_pattern#)"
* is not write in the name field of the product.
* So the ref pattern will be cut for the search request.
*/
if($pos = strpos($query, ' (ref:'))
$query = Tools::substr($query, 0, $pos);
$excludeIds = Tools::getValue('excludeIds', false);
if ($excludeIds && $excludeIds != 'NaN')
$excludeIds = implode(',', array_map('intval', explode(',', $excludeIds)));
else
$excludeIds = '';
// Excluding downloadable products from packs because download from pack is not supported
$excludeVirtuals = (bool)Tools::getValue('excludeVirtuals', false);
$exclude_packs = (bool)Tools::getValue('exclude_packs', false);
$sql = 'SELECT p.`id_product`, pl.`link_rewrite`, p.`reference`, pl.`name`, MAX(image_shop.`id_image`) id_image, il.`legend`
FROM `'._DB_PREFIX_.'product` p
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.id_product = p.id_product AND pl.id_lang = '.(int)Context::getContext()->language->id.Shop::addSqlRestrictionOnLang('pl').')
LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)Context::getContext()->language->id.')
WHERE (pl.name LIKE \'%'.pSQL($query).'%\' OR p.reference LIKE \'%'.pSQL($query).'%\')'.
(!empty($excludeIds) ? ' AND p.id_product NOT IN ('.$excludeIds.') ' : ' ').
($excludeVirtuals ? 'AND p.id_product NOT IN (SELECT pd.id_product FROM `'._DB_PREFIX_.'product_download` pd WHERE (pd.id_product = p.id_product))' : '').
($exclude_packs ? 'AND (p.cache_is_pack IS NULL OR p.cache_is_pack = 0)' : '').
' GROUP BY p.id_product';
$items = Db::getInstance()->executeS($sql);
$acc = (bool)Tools::isSubmit('excludeIds');
if ($items && $acc)
foreach ($items AS $item)
echo trim($item['name']).(!empty($item['reference']) ? ' (ref: '.$item['reference'].')' : '').'|'.(int)($item['id_product'])."\n";
elseif ($items)
{
// packs
$results = array();
foreach ($items AS $item)
{
$product = array(
'id' => (int)($item['id_product']),
'name' => $item['name'],
'ref' => (!empty($item['reference']) ? $item['reference'] : ''),
'image' => str_replace('http://', Tools::getShopProtocol(), Context::getContext()->link->getImageLink($item['link_rewrite'], $item['id_image'], ImageType::getFormatedName('home'))),
);
array_push($results, $product);
}
echo Tools::jsonEncode($results);
}
else
Tools::jsonEncode(new stdClass);
die;
}
}