Files
2024-11-05 12:22:50 +01:00

378 lines
16 KiB
PHP

<?php
/**
* 2007-2015 Leotheme
*
* NOTICE OF LICENSE
*
* Leo Bootstrap Menu
*
* DISCLAIMER
*
* @author leotheme <leotheme@gmail.com>
* @copyright 2007-2015 Leotheme
* @license http://leotheme.com - prestashop template provider
*/
if (!defined('_PS_VERSION_')) {
# module validation
exit;
}
if (!class_exists('LeoWidgetBase')) {
abstract class LeoWidgetBase
{
public $widget_name = 'base';
public $name = 'leobootstrapmenu';
public $id_shop = 0;
public $fields_form = array();
public $types = array();
public $theme_img_module;
// public $translator = Context::getContext()->getTranslator();
//add parameter
public function __construct()
{
$this->theme_img_module = _THEME_IMG_DIR_.'modules/leobootstrapmenu/';
}
/**
* abstract method to return html widget form
*/
public function getWidgetInfo()
{
return array('key' => 'base', 'label' => 'Widget Base');
}
/**
* abstract method to return html widget form
*/
public function renderForm($args, $data)
{
# validate module
unset($args);
unset($data);
return false;
}
/**
* abstract method to return widget data
*/
public function renderContent($args, $data)
{
# validate module
unset($args);
unset($data);
return false;
}
/**
* Get translation for a given module text
*
* Note: $specific parameter is mandatory for library files.
* Otherwise, translation key will not match for Module library
* when module is loaded with eval() Module::getModulesOnDisk()
*
* @param string $string String to translate
* @param boolean|string $specific filename to use in translation key
* @return string Translation
*/
public function l($string, $specific = false)
{
return Translate::getModuleTranslation($this->name, $string, ($specific) ? $specific : $this->name);
}
/**
* Asign value for each input of Data form
*/
public function getConfigFieldsValues($data = null)
{
$languages = Language::getLanguages(false);
$fields_values = array();
$obj = isset($data['params']) ? $data['params'] : array();
foreach ($this->fields_form as $k => $f) {
foreach ($f['form']['input'] as $j => $input) {
if (isset($input['lang'])) {
foreach ($languages as $lang) {
$fields_values[$input['name']][$lang['id_lang']] = isset($obj[$input['name'].'_'.$lang['id_lang']]) ? Tools::stripslashes($obj[$input['name'].'_'.$lang['id_lang']]) : $input['default'];
}
} else {
if (isset($obj[trim($input['name'])])) {
$value = $obj[trim($input['name'])];
if ($input['name'] == 'image' && $value) {
$thumb = __PS_BASE_URI__.'modules/'.$this->name.'/img/'.$value;
$this->fields_form[$k]['form']['input'][$j]['thumb'] = $thumb;
}
$fields_values[$input['name']] = Tools::stripslashes($value);
} else {
$v = Tools::getValue($input['name'], Configuration::get($input['name']));
$fields_values[$input['name']] = $v ? $v : $input['default'];
}
}
}
}
if (isset($data['id_btmegamenu_widgets'])) {
$fields_values['id_btmegamenu_widgets'] = $data['id_btmegamenu_widgets'];
}
//update for new plugin facebook like
if (isset($data['params']['tabdisplay_timeline'])) {
$fields_values['tabdisplay_timeline'] = $data['params']['tabdisplay_timeline'];
}
//update for new plugin facebook like
if (isset($data['params']['tabdisplay_events'])) {
$fields_values['tabdisplay_events'] = $data['params']['tabdisplay_events'];
}
//update for new plugin facebook like
if (isset($data['params']['tabdisplay_messages'])) {
$fields_values['tabdisplay_messages'] = $data['params']['tabdisplay_messages'];
}
return $fields_values;
}
public function getFormHelper()
{
$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
$this->fields_form[0]['form'] = array(
'legend' => array(
'title' => $this->l('Widget Info.'),
),
'input' => array(
array(
'type' => 'hidden',
'label' => $this->l('Megamenu ID'),
'name' => 'id_btmegamenu_widgets',
'default' => 0,
),
array(
'type' => 'text',
'label' => $this->l('Widget Name'),
'name' => 'widget_name',
'default' => '',
'required' => true,
'desc' => $this->l('Using for show in Listing Widget Management')
),
array(
'type' => 'text',
'label' => $this->l('Widget Title'),
'name' => 'widget_title',
'default' => '',
'lang' => true,
'desc' => $this->l('This tile will be showed as header of widget block. Empty to disable')
),
array(
'type' => 'select',
'label' => $this->l('Widget Type'),
'id' => 'widget_type',
'name' => 'widget_type',
'options' => array('query' => $this->types,
'id' => 'type',
'name' => 'label'
),
'default' => Tools::getValue('wtype'),
'desc' => $this->l('Select a alert style')
),
),
'buttons' => array(
array(
'title' => $this->l('Save And Stay'),
'icon' => 'process-icon-save',
'class' => 'pull-right',
'type' => 'submit',
'name' => 'saveandstayleowidget'
),
array(
'title' => $this->l('Save'),
'icon' => 'process-icon-save',
'class' => 'pull-right',
'type' => 'submit',
'name' => 'saveleowidget'
),
)
);
$helper = new HelperForm();
$helper->show_cancel_button = true;
$helper->module = $this;
$helper->name_controller = $this->name;
$helper->identifier = $this->name;
$helper->token = Tools::getAdminTokenLite('AdminLeoWidgets');
foreach (Language::getLanguages(false) as $lang) {
$helper->languages[] = array(
'id_lang' => $lang['id_lang'],
'iso_code' => $lang['iso_code'],
'name' => $lang['name'],
'is_default' => ($default_lang == $lang['id_lang'] ? 1 : 0)
);
}
$helper->currentIndex = AdminController::$currentIndex.'&widgets=1&rand='.rand().'&wtype='.Tools::getValue('wtype');
$helper->default_form_language = $default_lang;
$helper->allow_employee_form_lang = $default_lang;
$helper->toolbar_scroll = true;
$helper->title = $this->name;
$helper->submit_action = 'addbtmegamenu_widgets';
# validate module
// $liveeditorURL = AdminController::$currentIndex.'&edit=1&token='.Tools::getAdminTokenLite('AdminLeotempcpWidgets');
$helper->toolbar_btn = array(
'back' =>
array(
'desc' => $this->l('Back'),
'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminLeoWidgets').'&widgets=1&rand='.rand(),
),
);
return $helper;
}
public function getManufacturers($id_shop)
{
if (!$id_shop) {
$id_shop = $this->context->shop->id;
}
$pmanufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT m.`id_manufacturer`,m.`name`
FROM `'._DB_PREFIX_.'manufacturer` m
LEFT JOIN `'._DB_PREFIX_.'manufacturer_shop` ms ON (m.`id_manufacturer` = ms.`id_manufacturer` AND ms.`id_shop` = '.(int)$id_shop.')');
return $pmanufacturers;
}
public function getProducts($where, $id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null)
{
# validate module
unset($check_access);
if (!$context) {
$context = Context::getContext();
}
$front = true;
if (!in_array($context->controller->controller_type, array('front', 'modulefront'))) {
$front = false;
}
if ($p < 1) {
$p = 1;
}
if (empty($order_by)) {
$order_by = 'position';
} else {
/* Fix for all modules which are now using lowercase values for 'orderBy' parameter */
$order_by = Tools::strtolower($order_by);
}
if (empty($order_way)) {
$order_way = 'ASC';
}
if ($order_by == 'id_product' || $order_by == 'date_add' || $order_by == 'date_upd') {
$order_by_prefix = 'p';
} elseif ($order_by == 'name') {
$order_by_prefix = 'pl';
} elseif ($order_by == 'manufacturer') {
$order_by_prefix = 'm';
$order_by = 'name';
} elseif ($order_by == 'position') {
$order_by_prefix = 'cp';
}
if ($order_by == 'price') {
$order_by = 'orderprice';
}
if (!Validate::isBool($active) || !Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) {
die(Tools::displayError());
}
$id_supplier = (int)Tools::getValue('id_supplier');
/* Return only the number of products */
if ($get_total) {
$sql = 'SELECT COUNT(cp.`id_product`) AS total
FROM `'._DB_PREFIX_.'product` p
'.Shop::addSqlAssociation('product', 'p').'
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON p.`id_product` = cp.`id_product`
'.pSQL($where).'
'.pSQL($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').
pSQL($active ? ' AND product_shop.`active` = 1' : '').
pSQL($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : '');
return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
}
$sql = 'SELECT DISTINCT p.id_product, p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`id_product_attribute`, product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity, pl.`description`, pl.`description_short`, pl.`available_now`,
pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image`,
il.`legend`, m.`name` AS manufacturer_name, cl.`name` AS category_default,
DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(),
INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).'
DAY)) > 0 AS new, product_shop.price AS orderprice
FROM `'._DB_PREFIX_.'category_product` cp
LEFT JOIN `'._DB_PREFIX_.'product` p
ON p.`id_product` = cp.`id_product`
'.Shop::addSqlAssociation('product', 'p').'
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
ON (p.`id_product` = pa.`id_product`)
'.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').'
'.Product::sqlStock('p', 'product_attribute_shop', false, $context->shop).'
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
ON (product_shop.`id_category_default` = cl.`id_category`
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
ON (p.`id_product` = pl.`id_product`
AND pl.`id_lang` = '.(int)$id_lang.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 (image_shop.`id_image` = il.`id_image`
AND il.`id_lang` = '.(int)$id_lang.')
LEFT JOIN `'._DB_PREFIX_.'manufacturer` m
ON m.`id_manufacturer` = p.`id_manufacturer`
'.$where.'
AND product_shop.`id_shop` = '.(int)$context->shop->id.'
AND (pa.id_product_attribute IS NULL OR product_attribute_shop.id_shop='.(int)$context->shop->id.')
AND (i.id_image IS NULL OR image_shop.id_shop='.(int)$context->shop->id.')
'.($active ? ' AND product_shop.`active` = 1' : '')
.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '')
.($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : '');
if ($random === true) {
$sql .= ' ORDER BY RAND()';
$sql .= ' LIMIT 0, '.(int)$random_number_products;
} else {
$order_way = Validate::isOrderWay($order_way) ? Tools::strtoupper($order_way) : 'ASC'; // $order_way Validate::isOrderWay()
$sql .= ' ORDER BY '.(isset($order_by_prefix) ? '`'.pSQL($order_by_prefix).'`.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).'
LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;
}
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
if ($order_by == 'orderprice') {
Tools::orderbyPrice($result, $order_way);
}
if (!$result) {
return array();
}
/* Modify SQL result */
return Product::getProductsProperties($id_lang, $result);
}
public static function getImageList($path)
{
if (!file_exists($path) && !is_dir($path)) {
@mkdir($path, 0777, true);
}
$items = array();
$handle = opendir($path);
if (!$handle) {
return $items;
}
while (false !== ($file = readdir($handle))) {
//if (is_dir($path . $file))
$items[$file] = $file;
}
unset($items['.'], $items['..'], $items['.svn']);
return $items;
}
}
}