first commit

This commit is contained in:
2024-11-05 12:22:50 +01:00
commit e5682a3912
19641 changed files with 2948548 additions and 0 deletions

View File

@@ -0,0 +1,293 @@
<?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();
}
}
}