first commit
This commit is contained in:
377
modules/leobootstrapmenu/classes/widgetbase.php
Normal file
377
modules/leobootstrapmenu/classes/widgetbase.php
Normal file
@@ -0,0 +1,377 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user