* @copyright 2007-2014 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_VERSION_'))
exit;
use PrestaShop\PrestaShop\Core\Module\WidgetInterface;
require_once _PS_MODULE_DIR_.'stpagebanner/classes/StPageBannerClass.php';
require_once _PS_MODULE_DIR_.'stpagebanner/classes/StPageBannerFontClass.php';
class StPageBanner extends Module implements WidgetInterface
{
protected static $access_rights = 0775;
public static $_type = array(
1 => 'Category',
//2 => 'Product',
3 => 'CMS page',
4 => 'Manufacturer',
5 => 'Supplier',
6 => 'Cms category',
//7 => 'Icon',
8 => 'Blog category',
//9 => 'Blog article',
10 => 'Page',
11 => 'All',
// 12 => 'Product',
);
public static $text_position = array(
array('id' =>'center' , 'name' => 'Middle'),
array('id' =>'bottom' , 'name' => 'Bottom'),
array('id' =>'top' , 'name' => 'Top'),
);
public $fields_list;
public $fields_value;
public $fields_form;
public $fields_form_banner;
private $_html = '';
private $spacer_size = '5';
public $stblog_status = true;
private $_prefix_st = 'ST_PAGEBANNER_';
private $googleFonts;
protected $templatePath;
public function __construct()
{
$this->name = 'stpagebanner';
$this->tab = 'front_office_features';
$this->version = '1.7.0';
$this->author = 'SUNNYTOO.COM';
$this->need_instance = 0;
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->getTranslator()->trans('Breadcrumbs', array(), 'Modules.Stpagebanner.Admin');
$this->description = $this->getTranslator()->trans('This module allows you put different backgrounds to breadcrumbs on different pages.', array(), 'Modules.Stpagebanner.Admin');
$this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
if(!Module::isInstalled('stblog') || !Module::isEnabled('stblog'))
$this->stblog_status = false;
if($this->stblog_status)
{
require_once (_PS_MODULE_DIR_.'stblog/classes/StBlogClass.php');
require_once (_PS_MODULE_DIR_.'stblog/classes/StBlogCategory.php');
}
$this->templatePath = 'module:'.$this->name.'/views/templates/hook/';
}
public function install()
{
$res = parent::install() &&
$this->installDB() &&
$this->registerHook('displayHeader') &&
$this->registerHook('displayBreadcrumb') &&
$this->registerHook('actionObjectCategoryDeleteAfter') &&
$this->registerHook('actionObjectCmsDeleteAfter') &&
$this->registerHook('actionObjectSupplierDeleteAfter') &&
$this->registerHook('actionObjectManufacturerDeleteAfter') &&
$this->registerHook('actionShopDataDuplication');
if ($res) {
foreach(Shop::getShops(false) as $shop) {
$res &= $this->sampleData($shop['id_shop']);
}
}
$this->clearBannerCache();
return (bool)$res;
}
/**
* Creates tables
*/
public function installDB()
{
/* Banners */
$return = (bool)Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'st_page_banner` (
`id_st_page_banner` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`active` tinyint(1) unsigned NOT NULL DEFAULT 1,
`position` int(10) unsigned NOT NULL DEFAULT 0,
`text_align` tinyint(1) unsigned NOT NULL DEFAULT 1,
`hide_breadcrumb` tinyint(1) unsigned NOT NULL DEFAULT 0,
`show_subcate` tinyint(1) unsigned NOT NULL DEFAULT 0,
`item_k` tinyint(2) unsigned NOT NULL DEFAULT 0,
`item_v` varchar(255) DEFAULT NULL,
`hide_on_mobile` tinyint(1) unsigned NOT NULL DEFAULT 0,
`top_spacing` varchar(10) DEFAULT NULL,
`bottom_spacing` varchar(10) DEFAULT NULL,
`padding_top` varchar(10) DEFAULT NULL,
`padding_bottom` varchar(10) DEFAULT NULL,
`text_color` varchar(7) DEFAULT NULL,
`font_size` int(10) unsigned NOT NULL DEFAULT 0,
`link_color` varchar(7) DEFAULT NULL,
`link_hover_color` varchar(7) DEFAULT NULL,
`bg_color` varchar(7) DEFAULT NULL,
`border_color` varchar(7) DEFAULT NULL,
`border_size` varchar(10) DEFAULT NULL,
`border_top_size` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id_st_page_banner`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;');
/* Banners lang configuration */
$return &= Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'st_page_banner_lang` (
`id_st_page_banner` int(10) UNSIGNED NOT NULL,
`id_lang` int(10) unsigned NOT NULL ,
`description` text,
`image_multi_lang` varchar(255) DEFAULT NULL,
`image_lang_default` varchar(255) DEFAULT NULL,
`width` int(10) unsigned NOT NULL DEFAULT 0,
`height` int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id_st_page_banner`, `id_lang`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;');
$return &= (bool)Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'st_page_banner_shop` (
`id_st_page_banner` int(10) UNSIGNED NOT NULL,
`id_shop` int(11) NOT NULL,
PRIMARY KEY (`id_st_page_banner`,`id_shop`),
KEY `id_shop` (`id_shop`)
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;');
$return &= Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'st_page_banner_font` (
`id_st_page_banner` int(10) unsigned NOT NULL,
`font_name` varchar(255) NOT NULL
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;');
return $return;
}
public function uninstall()
{
$this->clearBannerCache();
// Delete configuration
return $this->deleteTables() &&
parent::uninstall();
}
public function sampleData($id_shop)
{
//to do add breadcumb for all and login page, generally the breadcrumb on login page is different.
$return = true;
$samples = array(
array(
'item_k' => 11,
'item_v' => 1,
'active' => 1,
'text_align' => 1,
'top_spacing' => 5,
'bottom_spacing' => 20,
'padding_top' => 8,
'padding_bottom'=> 8,
'description' => '',
)
);
foreach($samples as $k=>$sample)
{
$module = new StPageBannerClass();
foreach (Language::getLanguages(false) as $lang)
{
$module->description[$lang['id_lang']] = $sample['description'];
}
$module->item_k = $sample['item_k'];
$module->item_v = $sample['item_v'];
$module->active = $sample['active'];
$module->text_align = $sample['text_align'];
$module->top_spacing = $sample['top_spacing'];
$module->bottom_spacing = $sample['bottom_spacing'];
$module->padding_top = $sample['padding_top'];
$module->padding_bottom = $sample['padding_bottom'];
$module->position = $k;
$module->id_shop_list = array((int)$id_shop);
$return &= $module->add();
}
return $return;
}
/**
* deletes tables
*/
public function deleteTables()
{
return Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'st_page_banner`,`'._DB_PREFIX_.'st_page_banner_lang`,`'._DB_PREFIX_.'st_page_banner_font`');
}
private function _checkImageDir()
{
$result = '';
if (!file_exists(_PS_UPLOAD_DIR_.$this->name))
{
$success = @mkdir(_PS_UPLOAD_DIR_.$this->name, self::$access_rights, true)
|| @chmod(_PS_UPLOAD_DIR_.$this->name, self::$access_rights);
if(!$success)
$this->_html .= $this->displayError('"'._PS_UPLOAD_DIR_.$this->name.'" '.$this->getTranslator()->trans('An error occurred during new folder creation', array(), 'Admin.Theme.Panda'));
}
if (!is_writable(_PS_UPLOAD_DIR_))
$this->_html .= $this->displayError('"'._PS_UPLOAD_DIR_.$this->name.'" '.$this->getTranslator()->trans('directory isn\'t writable.', array(), 'Admin.Theme.Panda'));
return $result;
}
public function getContent()
{
$check_result = $this->_checkImageDir();
$this->context->controller->addCSS(($this->_path).'views/css/admin.css');
$this->context->controller->addJS(($this->_path).'views/js/admin.js');
$this->googleFonts = include(_PS_MODULE_DIR_.'stthemeeditor/googlefonts.php');
$this->_html .= '';
$id_st_page_banner = (int)Tools::getValue('id_st_page_banner');
if(Tools::getValue('act')=='delete_image' && $id_st_page_banner)
{
$result = array(
'r' => false,
'm' => '',
'd' => ''
);
$id_lang = Tools::getValue('id_lang');
$banner = new StPageBannerClass($id_st_page_banner, $id_lang);
$banner->image_multi_lang = '';
$result['r'] = $banner->save();
die(json_encode($result));
}
if (isset($_POST['savesettingstpagebanner']) || isset($_POST['savesettingstpagebannerAndStay']))
{
$this->initSettingForm();
foreach($this->fields_form as $form)
foreach($form['form']['input'] as $field)
if(isset($field['validation']))
{
$errors = array();
$value = Tools::getValue($field['name']);
if (isset($field['required']) && $field['required'] && $value==false && (string)$value != '0')
$errors[] = sprintf(Tools::displayError('Field "%s" is required.'), $field['label']);
elseif($value)
{
$field_validation = $field['validation'];
if (!Validate::$field_validation($value))
$errors[] = sprintf(Tools::displayError('Field "%s" is invalid.'), $field['label']);
}
// Set default value
if ($value === false && isset($field['default_value']))
$value = $field['default_value'];
if(count($errors))
{
$this->validation_errors = array_merge($this->validation_errors, $errors);
}
elseif($value==false)
{
switch($field['validation'])
{
case 'isUnsignedId':
case 'isUnsignedInt':
case 'isInt':
case 'isBool':
$value = 0;
break;
case 'isNullOrUnsignedId':
$value = $value==='0' ? '0' : '';
break;
default:
$value = '';
break;
}
Configuration::updateValue($this->_prefix_st.strtoupper($field['name']), $value);
}
else
Configuration::updateValue($this->_prefix_st.strtoupper($field['name']), $value);
}
if(count($this->validation_errors))
$this->_html .= $this->displayError(implode('
',$this->validation_errors));
else
{
$this->clearBannerCache();
Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&conf=4&token='.Tools::getAdminTokenLite('AdminModules'));
}
}
if ((Tools::isSubmit('bannerstatusstpagebanner')))
{
$banner = new StPageBannerClass((int)$id_st_page_banner);
if($banner->id && $banner->toggleStatus())
{
$this->clearBannerCache();
Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'));
}
else
$this->_html .= $this->displayError($this->getTranslator()->trans('An error occurred while updating the status.', array(), 'Admin.Theme.Panda'));
}
if (isset($_POST['savestpagebanner']) || isset($_POST['savestpagebannerAndStay']))
{
if ($id_st_page_banner)
$banner = new StPageBannerClass((int)$id_st_page_banner);
else
$banner = new StPageBannerClass();
$error = array();
$item = Tools::getValue('links');
if($item)
{
$item_arr = explode('_',$item);
if(count($item_arr)!=2)
{
$this->_html .= $this->displayError($this->getTranslator()->trans('"Pages" error', array(), 'Modules.Stpagebanner.Admin'));
return;
}
$banner->item_k = $item_arr[0];
if ($banner->item_k == 12)
$banner->item_v = Tools::getValue('filter','0');
else
$banner->item_v = $item_arr[1];
}
else
{
$error[] = $this->displayError($this->getTranslator()->trans('The field "Pages" is required', array(), 'Modules.Stpagebanner.Admin'));
}
$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
/*if (!Tools::isSubmit('has_image_'.$default_lang) && (!isset($_FILES['image_multi_lang_'.$default_lang]) || empty($_FILES['image_multi_lang_'.$default_lang]['tmp_name'])))
{
$defaultLanguage = new Language($default_lang);
$error[] = $this->displayError($this->getTranslator()->trans('Image is required at least in ', array(), 'Modules.Stpagebanner.Admin').$defaultLanguage->name);
}*/
$banner->copyFromPost();
$languages = Language::getLanguages(false);
$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
$res = $this->stUploadImage('image_multi_lang_'.$default_lang);
if(count($res['error']))
$error = array_merge($error,$res['error']);
elseif($res['image'])
{
$banner->image_multi_lang[$default_lang] = $res['image'];
$banner->image_lang_default[$default_lang] = $res['image'];
$banner->width[$default_lang] = $res['width'];
$banner->height[$default_lang] = $res['height'];
}
foreach ($languages as $lang)
{
if($lang['id_lang']==$default_lang)
continue;
$banner->image_lang_default[$lang['id_lang']] = $banner->image_multi_lang[$default_lang];
$banner->width[$lang['id_lang']] = $banner->width[$default_lang];
$banner->height[$lang['id_lang']] = $banner->height[$default_lang];
$res = $this->stUploadImage('image_multi_lang_'.$lang['id_lang']);
if(count($res['error']))
$error = array_merge($error,$res['error']);
elseif($res['image'])
{
$banner->image_multi_lang[$lang['id_lang']] = $res['image'];
$banner->width[$lang['id_lang']] = $res['width'];
$banner->height[$lang['id_lang']] = $res['height'];
}
}
if (!count($error) && $banner->validateFields(false) && $banner->validateFieldsLang(false))
{
/*position*/
$banner->position = $banner->checkPosition();
$shop_ids = $banner->getShopIds();
$banner->clearShopIds();
$id_shop_list = array();
if($assos_shop = Tools::getValue('checkBoxShopAsso_st_page_banner')) {
foreach ($assos_shop as $id_shop => $row) {
$id_shop_list[] = $id_shop;
}
}
if (!$id_shop_list) {
$id_shop_list = array(Context::getContext()->shop->id);
}
$banner->id_shop_list = array_unique($id_shop_list);
if($banner->save())
{
$jon = trim(Tools::getValue('google_font_name'),'¤');
StPageBannerFontClass::deleteBySlider($banner->id);
$jon_arr = array_unique(explode('¤', $jon));
StPageBannerFontClass::changeSliderFont($banner->id, $jon_arr);
$this->clearBannerCache();
if(isset($_POST['savestpagebannerAndStay']))
Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&id_st_page_banner='.$banner->id.'&conf='.($id_st_page_banner?4:3).'&update'.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'));
else
Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&conf='.($id_st_page_banner?4:3).'&token='.Tools::getAdminTokenLite('AdminModules'));
}
else {
$banner->restoreShopIds($shop_ids);
$this->_html .= $this->displayError($this->getTranslator()->trans('An error occurred during banner', array(), 'Admin.Theme.Panda').' '.($id_st_page_banner ? $this->getTranslator()->trans('updating', array(), 'Admin.Theme.Panda') : $this->getTranslator()->trans('creation', array(), 'Admin.Theme.Panda')));
}
}
else
$this->_html .= count($error) ? implode('',$error) : $this->displayError($this->getTranslator()->trans('Invalid value for field(s).', array(), 'Admin.Theme.Panda'));
}
if(Tools::isSubmit('addstpagebanner') || (Tools::isSubmit('updatestpagebanner') && $id_st_page_banner))
{
$helper = $this->initForm();
return $this->_html.$helper->generateForm($this->fields_form_banner);
}
else if (Tools::isSubmit('deletestpagebanner') && $id_st_page_banner)
{
$banner = new StPageBannerClass($id_st_page_banner);
$banner->delete();
$this->clearBannerCache();
Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'));
}
else
{
$helper = $this->initList();
$this->_html .= $helper->generateList(StPageBannerClass::getAll(0, 0, (int)$this->context->language->id, 0), $this->fields_list);
$helper = $this->initSettingForm();
return $this->_html.$helper->generateForm($this->fields_form);
}
}
protected function initSettingForm()
{
$this->fields_form[0]['form'] = array(
'legend' => array(
'title' => $this->getTranslator()->trans('Settings', array(), 'Admin.Theme.Panda'),
'icon' => 'icon-cogs'
),
'input' => array(
array(
'type' => 'radio',
'label' => $this->getTranslator()->trans('Breadcrumb width:', array(), 'Modules.Stpagebanner.Admin'),
'name' => 'breadcrumb_width',
'default_value' => 1,
'values' => array(
array(
'id' => 'breadcrumb_width_fullwidth',
'value' => 0,
'label' => $this->getTranslator()->trans('Full width', array(), 'Admin.Theme.Panda')),
array(
'id' => 'breadcrumb_width_normal',
'value' => 1,
'label' => $this->getTranslator()->trans('Boxed', array(), 'Admin.Theme.Panda')),
),
'validation' => 'isUnsignedInt',
),
),
'buttons' => array(
array(
'type' => 'submit',
'title' => $this->getTranslator()->trans('Save', array(), 'Admin.Actions'),
'icon' => 'process-icon-save',
'class'=> 'pull-right'
),
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$helper->module = $this;
$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;
$helper->submit_action = 'savesettingstpagebanner';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFieldsValues(),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper;
}
private function getConfigFieldsValues()
{
$fields_values = array(
'breadcrumb_width' => Configuration::get($this->_prefix_st.'BREADCRUMB_WIDTH'),
);
return $fields_values;
}
protected function stUploadImage($item)
{
$result = array(
'error' => array(),
'image' => '',
);
if (isset($_FILES[$item]) && isset($_FILES[$item]['tmp_name']) && !empty($_FILES[$item]['tmp_name']))
{
$type = strtolower(substr(strrchr($_FILES[$item]['name'], '.'), 1));
$name = str_replace(strrchr($_FILES[$item]['name'], '.'), '', $_FILES[$item]['name']);
$imagesize = array();
$imagesize = @getimagesize($_FILES[$item]['tmp_name']);
if (!empty($imagesize) &&
in_array(strtolower(substr(strrchr($imagesize['mime'], '/'), 1)), array('jpg', 'gif', 'jpeg', 'png')) &&
in_array($type, array('jpg', 'gif', 'jpeg', 'png')))
{
$this->_checkEnv();
$temp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS');
$salt = $name ? Tools::str2url($name) : sha1(microtime());
$c_name = $salt;
if ($upload_error = ImageManager::validateUpload($_FILES[$item]))
$result['error'][] = $upload_error;
elseif (!$temp_name || !move_uploaded_file($_FILES[$item]['tmp_name'], $temp_name))
$result['error'][] = $this->getTranslator()->trans('An error occurred during the image upload.', array(), 'Admin.Theme.Panda');
else{
$infos = getimagesize($temp_name);
if(!ImageManager::resize($temp_name, _PS_UPLOAD_DIR_.$this->name.'/'.$c_name.'.'.$type, null, null, $type))
$result['error'][] = $this->getTranslator()->trans('An error occurred during the image upload.', array(), 'Admin.Theme.Panda');
}
if (isset($temp_name))
@unlink($temp_name);
if(!count($result['error']))
{
$result['image'] = $this->name.'/'.$c_name.'.'.$type;
$result['width'] = $imagesize[0];
$result['height'] = $imagesize[1];
}
return $result;
}
}
else
return $result;
}
private function _checkEnv()
{
$file = _PS_UPLOAD_DIR_.'.htaccess';
$file_tpl = _PS_MODULE_DIR_.'stthemeeditor/config/upload_htaccess.tpl';
if (!file_exists($file) || !file_exists($file_tpl))
return true;
if (!is_writeable($file) || !is_readable($file_tpl))
return false;
return @file_put_contents($file, @file_get_contents($file_tpl));
}
public function createLinks($icon=true)
{
$id_lang = $this->context->language->id;
$category_arr = array();
$this->getCategoryOption($category_arr, Category::getRootCategory()->id, (int)$id_lang, (int)Shop::getContextShopID(),true);
$supplier_arr = array();
$suppliers = Supplier::getSuppliers(false, $id_lang);
foreach ($suppliers as $supplier)
$supplier_arr[] = array('id'=>'5_'.$supplier['id_supplier'],'name'=>$supplier['name']);
$manufacturer_arr = array();
$manufacturers = Manufacturer::getManufacturers(false, $id_lang);
foreach ($manufacturers as $manufacturer)
$manufacturer_arr[] = array('id'=>'4_'.$manufacturer['id_manufacturer'],'name'=>$manufacturer['name']);
$cms_arr = array();
$this->getCMSOptions($cms_arr, 0, 1, $id_lang);
$blog_category_arr = array();
if($this->stblog_status)
{
$this->getBlogCategoryOption($blog_category_arr, StBlogCategory::getTopCategory()->id, (int)$id_lang, (int)Shop::getContextShopID(), true);
}
$links = array(
// array('name'=>$this->getTranslator()->trans('Product', array(), 'Admin.Theme.Panda'),'query'=>array(array('id'=>'12_0','name'=>$this->getTranslator()->trans('Product page', array(), 'Admin.Theme.Panda')))),
array('name'=>$this->getTranslator()->trans('Category', array(), 'Admin.Theme.Panda'),'query'=>$category_arr),
array('name'=>$this->getTranslator()->trans('CMS', array(), 'Admin.Theme.Panda'),'query'=>$cms_arr),
array('name'=>$this->getTranslator()->trans('Informations', array(), 'Admin.Theme.Panda'),'query'=>$this->getInformationLinks()),
array('name'=>$this->getTranslator()->trans('My account', array(), 'Admin.Theme.Panda'),'query'=>$this->getMyAccountLinks()),
array('name'=>$this->getTranslator()->trans('Supplier', array(), 'Admin.Theme.Panda'),'query'=>$supplier_arr),
array('name'=>$this->getTranslator()->trans('Manufacturer', array(), 'Admin.Theme.Panda'),'query'=>$manufacturer_arr),
array('name'=>$this->getTranslator()->trans('Blog', array(), 'Admin.Theme.Panda'),'query'=>$blog_category_arr),
);
return $links;
}
public function createSubLinks()
{
$id_lang = $this->context->language->id;
$category_arr = array();
$this->getCategoryOption($category_arr, Category::getRootCategory()->id, (int)$id_lang, (int)Shop::getContextShopID(),true);
$manufacturer_arr = array();
$manufacturers = Manufacturer::getManufacturers(false, $id_lang);
foreach ($manufacturers as $manufacturer)
$manufacturer_arr[] = array('id'=>'4_'.$manufacturer['id_manufacturer'],'name'=>$manufacturer['name']);
$cms_arr = array();
$this->getCMSOptions($cms_arr, 0, 1, $id_lang);
$links = array(
array('name'=>$this->getTranslator()->trans('Category', array(), 'Admin.Theme.Panda'),'query'=>$category_arr),
array('name'=>$this->getTranslator()->trans('Manufacturer', array(), 'Admin.Theme.Panda'),'query'=>$manufacturer_arr),
);
return $links;
}
private function getBlogCategoryOption(&$category_arr, $id_st_blog_category = 1, $id_lang = false, $id_shop = false, $recursive = true)
{
$id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
$category = new StBlogCategory((int)$id_st_blog_category, (int)$id_lang, (int)$id_shop);
if (is_null($category->id))
return;
if ($recursive)
{
$children = StBlogCategory::getChildren((int)$id_st_blog_category, (int)$id_lang, (int)$id_shop, true);
$spacer = str_repeat(' ', $this->spacer_size * (int)$category->level_depth);
}
$shop = (object) Shop::getShop($id_shop);
$category_arr[] = array('id'=>'8_'.(int)$category->id,'name'=>(isset($spacer) ? $spacer : '').$category->name.' ('.$shop->name.')');
if (isset($children) && is_array($children) && count($children))
foreach ($children as $child)
{
$this->getBlogCategoryOption($category_arr, (int)$child['id_st_blog_category'], (int)$id_lang, (int)$child['id_shop'], $recursive);
}
}
private function getCategoryOption(&$category_arr, $id_category = 1, $id_lang = false, $id_shop = false, $recursive = true)
{
$id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
$category = new Category((int)$id_category, (int)$id_lang, (int)$id_shop);
if (is_null($category->id))
return;
if ($recursive)
{
$children = Category::getChildren((int)$id_category, (int)$id_lang, true, (int)$id_shop);
$spacer = str_repeat(' ', $this->spacer_size * (int)$category->level_depth);
}
$shop = (object) Shop::getShop((int)$category->getShopID());
$category_arr[] = array('id'=>'1_'.(int)$category->id,'name'=>(isset($spacer) ? $spacer : '').$category->name.' ('.$shop->name.')');
if (isset($children) && is_array($children) && count($children))
foreach ($children as $child)
{
$this->getCategoryOption($category_arr, (int)$child['id_category'], (int)$id_lang, (int)$child['id_shop'],$recursive);
}
}
private function getBlogPage($id_st_blog_category=0, $id_shop=false, $id_lang=false)
{
return StBlogClass::getCategoryBlogs($id_st_blog_category);
}
private function getCMSOptions(&$cms_arr, $parent = 0, $depth = 1, $id_lang = false)
{
$id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
$categories = $this->getCMSCategories(false, (int)$parent, (int)$id_lang);
$pages = $this->getCMSPages((int)$parent, false, (int)$id_lang);
$spacer = str_repeat(' ', $this->spacer_size * (int)$depth);
foreach ($categories as $category)
{
$cms_arr[] = array('id'=>'6_'.$category['id_cms_category'],'name'=>$spacer.$category['name']);
$this->getCMSOptions($cms_arr, $category['id_cms_category'], (int)$depth + 1, (int)$id_lang);
}
foreach ($pages as $page)
$cms_arr[] = array('id'=>'3_'.$page['id_cms'],'name'=>$spacer.$page['meta_title']);
}
private function getCMSCategories($recursive = false, $parent = 1, $id_lang = false)
{
$id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
$id_shop = (int)Context::getContext()->shop->id;
if ($recursive === false)
{
if(version_compare(_PS_VERSION_, '1.6.0.12', '>='))
$sql = 'SELECT bcp.`id_cms_category`, bcp.`id_parent`, bcp.`level_depth`, bcp.`active`, bcp.`position`, cl.`name`, cl.`link_rewrite`
FROM `'._DB_PREFIX_.'cms_category` bcp
INNER JOIN `'._DB_PREFIX_.'cms_category_shop` cs
ON (bcp.`id_cms_category` = cs.`id_cms_category`)
INNER JOIN `'._DB_PREFIX_.'cms_category_lang` cl
ON (bcp.`id_cms_category` = cl.`id_cms_category`)
WHERE cl.`id_lang` = '.(int)$id_lang.'
AND cs.`id_shop` = '.(int)$id_shop.'
AND cl.`id_shop` = '.(int)$id_shop.'
AND bcp.`id_parent` = '.(int)$parent;
else
$sql = 'SELECT bcp.`id_cms_category`, bcp.`id_parent`, bcp.`level_depth`, bcp.`active`, bcp.`position`, cl.`name`, cl.`link_rewrite`
FROM `'._DB_PREFIX_.'cms_category` bcp
INNER JOIN `'._DB_PREFIX_.'cms_category_lang` cl
ON (bcp.`id_cms_category` = cl.`id_cms_category`)
WHERE cl.`id_lang` = '.(int)$id_lang.'
AND bcp.`id_parent` = '.(int)$parent;
return Db::getInstance()->executeS($sql);
}
else
{
if(version_compare(_PS_VERSION_, '1.6.0.12', '>='))
$sql = 'SELECT bcp.`id_cms_category`, bcp.`id_parent`, bcp.`level_depth`, bcp.`active`, bcp.`position`, cl.`name`, cl.`link_rewrite`
FROM `'._DB_PREFIX_.'cms_category` bcp
INNER JOIN `'._DB_PREFIX_.'cms_category_shop` cs
ON (bcp.`id_cms_category` = cs.`id_cms_category`)
INNER JOIN `'._DB_PREFIX_.'cms_category_lang` cl
ON (bcp.`id_cms_category` = cl.`id_cms_category`)
WHERE cl.`id_lang` = '.(int)$id_lang.'
AND cs.`id_shop` = '.(int)$id_shop.'
AND cl.`id_shop` = '.(int)$id_shop.'
AND bcp.`id_parent` = '.(int)$parent;
else
$sql = 'SELECT bcp.`id_cms_category`, bcp.`id_parent`, bcp.`level_depth`, bcp.`active`, bcp.`position`, cl.`name`, cl.`link_rewrite`
FROM `'._DB_PREFIX_.'cms_category` bcp
INNER JOIN `'._DB_PREFIX_.'cms_category_lang` cl
ON (bcp.`id_cms_category` = cl.`id_cms_category`)
WHERE cl.`id_lang` = '.(int)$id_lang.'
AND bcp.`id_parent` = '.(int)$parent;
$results = Db::getInstance()->executeS($sql);
foreach ($results as $result)
{
$sub_categories = $this->getCMSCategories(true, $result['id_cms_category'], (int)$id_lang);
if ($sub_categories && count($sub_categories) > 0)
$result['sub_categories'] = $sub_categories;
$categories[] = $result;
}
return isset($categories) ? $categories : false;
}
}
private function getCMSPages($id_cms_category, $id_shop = false, $id_lang = false)
{
$id_shop = ($id_shop !== false) ? (int)$id_shop : (int)Context::getContext()->shop->id;
$id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
$sql = 'SELECT c.`id_cms`, cl.`meta_title`, cl.`link_rewrite`
FROM `'._DB_PREFIX_.'cms` c
INNER JOIN `'._DB_PREFIX_.'cms_shop` cs
ON (c.`id_cms` = cs.`id_cms`)
INNER JOIN `'._DB_PREFIX_.'cms_lang` cl
ON (c.`id_cms` = cl.`id_cms`)
WHERE c.`id_cms_category` = '.(int)$id_cms_category.'
AND cs.`id_shop` = '.(int)$id_shop.
(version_compare(_PS_VERSION_, '1.6.0.12', '>=') ? ' AND cl.`id_shop` = '.(int)$id_shop : '' ).'
AND cl.`id_lang` = '.(int)$id_lang.'
AND c.`active` = 1
ORDER BY `position`';
return Db::getInstance()->executeS($sql);
}
protected function initForm()
{
$id_st_page_banner = (int)Tools::getValue('id_st_page_banner');
$banner = new StPageBannerClass($id_st_page_banner);
$google_font_name_html = $google_font_name = $google_font_link = '';
if(Validate::isLoadedObject($banner)){
$jon_arr = StPageBannerFontClass::getBySlider($banner->id);
if(is_array($jon_arr) && count($jon_arr))
foreach ($jon_arr as $key => $value) {
$google_font_name_html .= '
'.$this->getTranslator()->trans('Once a font has been added, you can use it everywhere without adding it again.', array(), 'Modules.Stpagebanner.Admin').'
AddExample Title
'.$this->getTranslator()->trans(' Delete', array(), 'Admin.Theme.Panda').'
' : ''); } } $this->fields_form_banner[0]['form']['input'][] = array( 'type' => 'html', 'id' => 'a_cancel_0', 'label' => '', 'name' => ' Back to list', ); $this->fields_form_banner[1]['form']['input'][] = array( 'type' => 'html', 'id' => 'a_cancel_1', 'label' => '', 'name' => ' Back to list', ); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->id = (int)$banner->id; $helper->module = $this; $helper->table = 'st_page_banner'; $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; $helper->identifier = 'id_st_page_banner'; $helper->submit_action = 'savestpagebanner'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getFieldsValueSt($banner,"fields_form_banner"), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); $helper->tpl_vars['fields_value']['google_font_name'] = $google_font_name; if(Validate::isLoadedObject($banner)) { if ($banner->item_k == 12) { $helper->tpl_vars['fields_value']['links'] = $banner->item_k.'_0'; $helper->tpl_vars['fields_value']['filter'] = $banner->item_v; } else $helper->tpl_vars['fields_value']['links'] = $banner->item_k.'_'.$banner->item_v; } return $helper; } public function getMyAccountLinks() { return array( 'authentication' => array('id'=>'10_authentication', 'name'=>$this->getTranslator()->trans('Login', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Login', array(), 'Shop.Theme.Panda')), 'my-account' => array('id'=>'10_my-account', 'name'=>$this->getTranslator()->trans('My account', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Manage my customer account', array(), 'Shop.Theme.Panda')), 'order-follow' => array('id'=>'10_history', 'name'=>$this->getTranslator()->trans('My orders', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('My orders', array(), 'Shop.Theme.Panda')), 'order-follow' => array('id'=>'10_order-follow', 'name'=>$this->getTranslator()->trans('My merchandise returns', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('My returns', array(), 'Shop.Theme.Panda')), 'order-slip' => array('id'=>'10_order-slip', 'name'=>$this->getTranslator()->trans('My credit slips', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('My credit slips', array(), 'Shop.Theme.Panda')), 'addresses' => array('id'=>'10_addresses', 'name'=>$this->getTranslator()->trans('My addresses', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('My addresses', array(), 'Shop.Theme.Panda')), 'identity' => array('id'=>'10_identity', 'name'=>$this->getTranslator()->trans('My personal info', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Manage my personal information', array(), 'Shop.Theme.Panda')), 'discount' => array('id'=>'10_discount', 'name'=>$this->getTranslator()->trans('My vouchers', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('My vouchers', array(), 'Shop.Theme.Panda')), ); } public function getInformationLinks() { return array( 'prices-drop' => array('id'=>'10_prices-drop', 'name'=>$this->getTranslator()->trans('Specials', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Specials', array(), 'Shop.Theme.Panda')), 'new-products' => array('id'=>'10_new-products', 'name'=>$this->getTranslator()->trans('New products', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('New products', array(), 'Shop.Theme.Panda')), 'best-sales' => array('id'=>'10_best-sales', 'name'=>$this->getTranslator()->trans('Top sellers', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Top sellers', array(), 'Shop.Theme.Panda')), 'stores' => array('id'=>'10_stores', 'name'=>$this->getTranslator()->trans('Our stores', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Our stores', array(), 'Shop.Theme.Panda')), 'contact' => array('id'=>'10_contact', 'name'=>$this->getTranslator()->trans('Contact us', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Contact us', array(), 'Shop.Theme.Panda')), 'sitemap' => array('id'=>'10_sitemap', 'name'=>$this->getTranslator()->trans('Sitemap', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Sitemap', array(), 'Shop.Theme.Panda')), 'manufacturer' => array('id'=>'10_manufacturer', 'name'=>$this->getTranslator()->trans('Manufacturers', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Manufacturers', array(), 'Shop.Theme.Panda')), 'supplier' => array('id'=>'10_supplier', 'name'=>$this->getTranslator()->trans('Suppliers', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Suppliers', array(), 'Shop.Theme.Panda')), 'checkout' => array('id'=>'10_checkout', 'name'=>$this->getTranslator()->trans('Checkout', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Checkout', array(), 'Shop.Theme.Panda'), 'php_self'=>'order'), 'order-confirmation' => array('id'=>'10_order-confirmation', 'name'=>$this->getTranslator()->trans('Order confirmation', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Order confirmation', array(), 'Shop.Theme.Panda')), 'search' => array('id'=>'10_search', 'name'=>$this->getTranslator()->trans('Search', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Search', array(), 'Shop.Theme.Panda')), 'cart' => array('id'=>'10_cart', 'name'=>$this->getTranslator()->trans('Shopping cart', array(), 'Shop.Theme.Panda'), 'title'=>$this->getTranslator()->trans('Shopping cart', array(), 'Shop.Theme.Panda')), ); } public static function showBannerImage($value,$row) { return $value ? '