* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
*/
if (!defined('_PS_VERSION_')) {
exit;
}
require_once dirname(__FILE__) . '/AdminStEasyVideoListController.php';
class AdminStEasyVideoProductController extends AdminStEasyVideoListController
{
protected $contr = 'product';
public function addWhere($where = '')
{
return $where.' AND id_product!=\'\' AND id_category=0 AND id_manufacturer=0 ';
}
public function filterFormFields(&$fileds, $obj)
{
$products_html = '';
if (($id_product = (int)Tools::getValue('id_product')) && Tools::getValue('ref') == 'product') {
$obj->id_product = (int)$id_product;
}
foreach (explode(',', trim($obj->id_product, ',')) as $id_product) {
if (!(int)$id_product) {
continue;
}
$product = new Product((int)$id_product, false, $this->context->language->id);
$products_html .= '
'.$product->name.'['.$product->reference.']
';
}
array_splice($fileds['input'], 1, 0, array(
'products' => array(
'type' => 'text',
'label' => $this->l('Products:'),
'name' => 'ac_products',
'autocomplete' => false,
'required' => true,
'class' => 'fixed-width-xxl ac_products',
'desc' => $this->l('Enter product names here:').'
'.$this->l('Selected products')
.': ',
),
));
}
public function getAjaxProductsList()
{
$query = Tools::getValue('q', false);
if (!$query || $query == '' || strlen($query) < 1) {
die();
}
if ($pos = strpos($query, ' (ref:')) {
$query = substr($query, 0, $pos);
}
$excludeIds = Tools::getValue('excludeIds', false);
if ($excludeIds && $excludeIds != 'NaN') {
$excludeIds = implode(',', array_map('intval', explode(',', $excludeIds)));
} else {
$excludeIds = '';
}
// Excluding downloadable products from packs because download from pack is not supported
$forceJson = Tools::getValue('forceJson', false);
$disableCombination = Tools::getValue('disableCombination', false);
$excludeVirtuals = (bool)Tools::getValue('excludeVirtuals', true);
$exclude_packs = (bool)Tools::getValue('exclude_packs', false);
$context = Context::getContext();
$sql = 'SELECT p.`id_product`, pl.`link_rewrite`, p.`reference`, pl.`name`, image_shop.`id_image` id_image, il.`legend`, p.`cache_default_attribute`
FROM `'._DB_PREFIX_.'product` p
'.Shop::addSqlAssociation('product', 'p').'
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.id_product = p.id_product AND pl.id_lang = '.(int)$context->language->id.Shop::addSqlRestrictionOnLang('pl').')
LEFT JOIN `'._DB_PREFIX_.'image_shop` image_shop
ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop='.(int)$context->shop->id.')
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$context->language->id.')
WHERE (pl.name LIKE \'%'.pSQL($query).'%\' OR p.reference LIKE \'%'.pSQL($query).'%\')'.
(!empty($excludeIds) ? ' AND p.id_product NOT IN ('.$excludeIds.') ' : ' ').
($excludeVirtuals ? 'AND NOT EXISTS (SELECT 1 FROM `'._DB_PREFIX_.'product_download` pd WHERE (pd.id_product = p.id_product))' : '').
($exclude_packs ? 'AND (p.cache_is_pack IS NULL OR p.cache_is_pack = 0)' : '').
' GROUP BY p.id_product';
$items = Db::getInstance()->executeS($sql);
if ($items && ($disableCombination || $excludeIds)) {
$results = [];
foreach ($items as $item) {
if (!$forceJson) {
$item['name'] = str_replace('|', '|', $item['name']);
$results[] = trim($item['name']).(!empty($item['reference']) ? ' (ref: '.$item['reference'].')' : '').'|'.(int)($item['id_product']);
} else {
$results[] = array(
'id' => $item['id_product'],
'name' => $item['name'].(!empty($item['reference']) ? ' (ref: '.$item['reference'].')' : ''),
'ref' => (!empty($item['reference']) ? $item['reference'] : ''),
'image' => str_replace('http://', Tools::getShopProtocol(), $context->link->getImageLink($item['link_rewrite'], $item['id_image'], 'home'.'_'.'default')),
);
}
}
if (!$forceJson) {
echo implode("\n", $results);
} else {
echo json_encode($results);
}
} elseif ($items) {
// packs
$results = array();
foreach ($items as $item) {
// check if product have combination
if (Combination::isFeatureActive() && $item['cache_default_attribute']) {
$sql = 'SELECT pa.`id_product_attribute`, pa.`reference`, ag.`id_attribute_group`, pai.`id_image`, agl.`name` AS group_name, al.`name` AS attribute_name,
a.`id_attribute`
FROM `'._DB_PREFIX_.'product_attribute` pa
'.Shop::addSqlAssociation('product_attribute', 'pa').'
LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute`
LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$context->language->id.')
LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$context->language->id.')
LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute`
WHERE pa.`id_product` = '.(int)$item['id_product'].'
GROUP BY pa.`id_product_attribute`, ag.`id_attribute_group`
ORDER BY pa.`id_product_attribute`';
$combinations = Db::getInstance()->executeS($sql);
if (!empty($combinations)) {
foreach ($combinations as $k => $combination) {
$results[$combination['id_product_attribute']]['id'] = $item['id_product'];
$results[$combination['id_product_attribute']]['id_product_attribute'] = $combination['id_product_attribute'];
!empty($results[$combination['id_product_attribute']]['name']) ? $results[$combination['id_product_attribute']]['name'] .= ' '.$combination['group_name'].'-'.$combination['attribute_name']
: $results[$combination['id_product_attribute']]['name'] = $item['name'].' '.$combination['group_name'].'-'.$combination['attribute_name'];
if (!empty($combination['reference'])) {
$results[$combination['id_product_attribute']]['ref'] = $combination['reference'];
} else {
$results[$combination['id_product_attribute']]['ref'] = !empty($item['reference']) ? $item['reference'] : '';
}
if (empty($results[$combination['id_product_attribute']]['image'])) {
$results[$combination['id_product_attribute']]['image'] = str_replace('http://', Tools::getShopProtocol(), $context->link->getImageLink($item['link_rewrite'], $combination['id_image'], 'home'.'_'.'default'));
}
}
} else {
$results[] = array(
'id' => $item['id_product'],
'name' => $item['name'],
'ref' => (!empty($item['reference']) ? $item['reference'] : ''),
'image' => str_replace('http://', Tools::getShopProtocol(), $context->link->getImageLink($item['link_rewrite'], $item['id_image'], 'home'.'_'.'default')),
);
}
} else {
$results[] = array(
'id' => $item['id_product'],
'name' => $item['name'],
'ref' => (!empty($item['reference']) ? $item['reference'] : ''),
'image' => str_replace('http://', Tools::getShopProtocol(), $context->link->getImageLink($item['link_rewrite'], $item['id_image'], 'home'.'_'.'default')),
);
}
}
echo json_encode(array_values($results));
} else {
echo json_encode([]);
}
die;
}
}