294 lines
11 KiB
PHP
294 lines
11 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;
|
|
}
|
|
|
|
class LeoWidgetImageProduct extends LeoWidgetBase
|
|
{
|
|
public $name = 'imageproduct';
|
|
public $for_module = 'all';
|
|
|
|
public function getWidgetInfo()
|
|
{
|
|
return array('label' => $this->l('Images Gallery Product'), 'explain' => $this->l('Create Images Mini Generalallery From Product'));
|
|
}
|
|
|
|
public function renderForm($args, $data)
|
|
{
|
|
# validate module
|
|
unset($args);
|
|
$helper = $this->getFormHelper();
|
|
$source = array(
|
|
array(
|
|
'value' => 'ip_pcategories', // The value of the 'value' attribute of the <option> tag.
|
|
'name' => $this->l('Category') // The value of the text content of the <option> tag.
|
|
),
|
|
array(
|
|
'value' => 'ip_pproductids',
|
|
'name' => $this->l('Product Ids')
|
|
));
|
|
$pimagetypes = $this->getImageTypes();
|
|
$selected_cat = array();
|
|
if ($data) {
|
|
if ($data['params'] && isset($data['params']['categories']) && $data['params']['categories']) {
|
|
$selected_cat = $data['params']['categories'];
|
|
}
|
|
}
|
|
|
|
$this->fields_form[1]['form'] = array(
|
|
'legend' => array(
|
|
'title' => $this->l('Widget Form.'),
|
|
),
|
|
'input' => array(
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Source'),
|
|
'name' => 'ip_source',
|
|
'class' => 'group',
|
|
'default' => '',
|
|
'options' => array(
|
|
'query' => $source,
|
|
'id' => 'value',
|
|
'name' => 'name'
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'categories',
|
|
'label' => $this->l('Categories'),
|
|
'name' => 'categories',
|
|
'default' => '',
|
|
'tree' => array(
|
|
'id' => 'ip_pcategories',
|
|
'title' => 'Categories',
|
|
'selected_categories' => $selected_cat,
|
|
'use_search' => true,
|
|
'use_checkbox' => true
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Product Ids'),
|
|
'name' => 'ip_pproductids',
|
|
'default' => '',
|
|
'desc' => $this->l('Enter Product Ids with format id1,id2,...')
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Small image'),
|
|
'name' => 'smallimage',
|
|
'class' => 'group',
|
|
'id' => 'psmallimagetypes',
|
|
'default' => '',
|
|
'options' => array(
|
|
'query' => $pimagetypes,
|
|
'id' => 'name',
|
|
'name' => 'name'
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Thick image'),
|
|
'name' => 'thickimage',
|
|
'id' => 'pthickimagetypes',
|
|
'default' => '',
|
|
'options' => array(
|
|
'query' => $pimagetypes,
|
|
'id' => 'name',
|
|
'name' => 'name'
|
|
)
|
|
),
|
|
array(
|
|
'type' => 'text',
|
|
'label' => $this->l('Limit'),
|
|
'name' => 'ip_limit',
|
|
'default' => '12',
|
|
'desc' => $this->l('Enter a number')
|
|
),
|
|
array(
|
|
'type' => 'select',
|
|
'label' => $this->l('Columns'),
|
|
'name' => 'columns',
|
|
'options' => array('query' => array(
|
|
array('id' => '1', 'name' => $this->l('1 Column')),
|
|
array('id' => '2', 'name' => $this->l('2 Columns')),
|
|
array('id' => '3', 'name' => $this->l('3 Columns')),
|
|
array('id' => '4', 'name' => $this->l('4 Columns')),
|
|
array('id' => '5', 'name' => $this->l('5 Columns')),
|
|
),
|
|
'id' => 'id',
|
|
'name' => 'name'),
|
|
'default' => '4',
|
|
),
|
|
),
|
|
'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'
|
|
),
|
|
)
|
|
);
|
|
|
|
$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
|
|
|
|
$helper->tpl_vars = array(
|
|
'fields_value' => $this->getConfigFieldsValues($data),
|
|
'languages' => Context::getContext()->controller->getLanguages(),
|
|
'id_language' => $default_lang
|
|
);
|
|
|
|
return $helper->generateForm($this->fields_form);
|
|
}
|
|
|
|
public function renderContent($args, $setting)
|
|
{
|
|
# validate module
|
|
unset($args);
|
|
$smallimage = ($setting['smallimage']) ? ($setting['smallimage']) : 'small'.'_default';
|
|
|
|
$thickimage = ($setting['thickimage']) ? ($setting['thickimage']) : 'thickbox'.'_default';
|
|
switch ($setting['ip_source']) {
|
|
case 'ip_pproductids':
|
|
if (empty($setting['ip_pproductids'])) {
|
|
return false;
|
|
}
|
|
if ($pproductids = $setting['ip_pproductids']) {
|
|
$results = $this->getImagesByProductId($pproductids, 0, $setting['ip_limit'], (int)Context::getContext()->language->id);
|
|
$setting['images'] = $results;
|
|
}
|
|
break;
|
|
|
|
case 'ip_pcategories':
|
|
$catids = (isset($setting['categories']) && $setting['categories']) ? ($setting['categories']) : array();
|
|
if ($catids) {
|
|
$categories = implode(',', array_map('intval', $catids));
|
|
$results = $this->getImagesByCategory($categories, 0, $setting['ip_limit'], (int)Context::getContext()->language->id);
|
|
$setting['images'] = $results;
|
|
}
|
|
break;
|
|
}
|
|
$setting['thickimage'] = $thickimage;
|
|
$setting['smallimage'] = $smallimage;
|
|
|
|
$output = array('type' => 'imageproduct', 'data' => $setting);
|
|
return $output;
|
|
}
|
|
# them
|
|
|
|
public function getImageTypes()
|
|
{
|
|
$pimagetypes = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
|
SELECT tp.`id_image_type`,tp.`name`
|
|
FROM `'._DB_PREFIX_.'image_type` tp
|
|
WHERE tp.`products` = 1
|
|
ORDER BY tp.`name` ASC');
|
|
return $pimagetypes;
|
|
}
|
|
|
|
public function getImagesByProductId($productids, $start, $limit, $id_lang, $id_shop = null)
|
|
{
|
|
if (is_null($id_shop)) {
|
|
$id_shop = Context::getContext()->shop->id;
|
|
}
|
|
$sql = 'SELECT i.`id_image`, pl.`link_rewrite`
|
|
FROM `'._DB_PREFIX_.'image` i
|
|
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON(i.`id_image` = il.`id_image`)
|
|
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON(i.`id_product` = pl.`id_product`)';
|
|
|
|
$sql .= ' WHERE i.`id_product` IN ('.pSQL($productids).') AND il.`id_lang` ='.(int)$id_lang.
|
|
' AND pl.`id_lang` ='.(int)$id_lang.
|
|
' AND pl.`id_shop` ='.(int)$id_shop.
|
|
' AND i.cover = 1 ORDER BY i.`position` ASC'
|
|
.($limit > 0 ? ' LIMIT '.(int)$start.','.(int)$limit : '');
|
|
$results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
|
return $results;
|
|
}
|
|
|
|
public static function getImagesByCategory($categories, $start, $limit, $id_lang, Context $context = null)
|
|
{
|
|
if (!$context) {
|
|
$context = Context::getContext();
|
|
}
|
|
|
|
$front = true;
|
|
if (!in_array($context->controller->controller_type, array('front', 'modulefront'))) {
|
|
$front = false;
|
|
}
|
|
$sql_groups = '';
|
|
if (Group::isFeatureActive()) {
|
|
$groups = FrontController::getCurrentCustomerGroups();
|
|
$sql_groups = 'AND cg.`id_group` '.(count($groups) ? 'IN ('.pSQL(implode(',', array_map('intval', $groups))).')' : '= 1');
|
|
}
|
|
$sql = 'SELECT i.`id_image`, pl.`link_rewrite` FROM `'._DB_PREFIX_.'image` i
|
|
INNER JOIN `'._DB_PREFIX_.'image_lang` il ON(i.`id_image` = il.`id_image`)
|
|
INNER JOIN `'._DB_PREFIX_.'product_lang` pl ON(i.`id_product` = pl.`id_product`)
|
|
INNER JOIN `'._DB_PREFIX_.'image_shop` ish ON (i.`id_image` = ish.`id_image`)';
|
|
$sql .= 'WHERE i.`id_product` IN (SELECT cp.`id_product`
|
|
FROM `'._DB_PREFIX_.'category_product` cp
|
|
'.(Group::isFeatureActive() ? 'INNER JOIN `'._DB_PREFIX_.'category_group` cg ON cp.`id_category` = cg.`id_category`' : '').'
|
|
INNER JOIN `'._DB_PREFIX_.'category` c ON cp.`id_category` = c.`id_category`
|
|
INNER JOIN `'._DB_PREFIX_.'product` p ON cp.`id_product` = p.`id_product`
|
|
'.Shop::addSqlAssociation('product', 'p', false).'
|
|
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` '.Shop::addSqlRestrictionOnLang('pl').')
|
|
WHERE c.`active` = 1
|
|
AND product_shop.`active` = 1
|
|
'.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').'
|
|
'.pSQL($sql_groups).
|
|
' AND cp.id_category in ('.pSQL($categories).')'.
|
|
' AND pl.id_lang ='.(int)$id_lang.') AND il.`id_lang` ='.(int)$id_lang.
|
|
' AND pl.id_lang = '.(int)$id_lang.
|
|
' AND pl.id_shop = '.(int)$context->shop->id.
|
|
' AND ish.id_shop = '.(int)$context->shop->id.
|
|
' AND ish.cover = 1 ORDER BY i.`position` ASC'.($limit > 0 ? ' LIMIT '.(int)$start.','.(int)$limit : '');
|
|
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
|
}
|
|
|
|
/**
|
|
* 0 no multi_lang
|
|
* 1 multi_lang follow id_lang
|
|
* 2 multi_lnag follow code_lang
|
|
*/
|
|
public function getConfigKey($multi_lang = 0)
|
|
{
|
|
if ($multi_lang == 0) {
|
|
return array(
|
|
'ip_source',
|
|
'categories',
|
|
'ip_pproductids',
|
|
'smallimage',
|
|
'thickimage',
|
|
'ip_limit',
|
|
'columns',
|
|
);
|
|
} elseif ($multi_lang == 1) {
|
|
return array();
|
|
} elseif ($multi_lang == 2) {
|
|
return array();
|
|
}
|
|
}
|
|
}
|