Files
2025-05-30 15:12:20 +02:00

109 lines
4.8 KiB
PHP

<?php
/**
*
* @author Patryk Marek <info@prestadev.pl>
* @copyright 2013 - 2017 Patryk Marek
* @link http://prestadev.pl
* @package Product attributes list for PrestaShop 1.5.x and 1.6.x and 1.7.x
* @version 1.0.3
* @license Do not edit, modify or copy this file, if you wish to customize it, contact us at info@prestadev.pl
* @date 28-10-2017
*
*/
class PdProductAttributesListAjaxModuleFrontController extends ModuleFrontController
{
public function initContent()
{
$this->ajax = true;
parent::initContent();
}
public function displayAjax()
{
$this->createCart();
}
public function createCart()
{
$module = new PdProductAttributesList();
if (Tools::getValue('secure_key') == $module->secure_key) {
$action = Tools::getValue('action');
if ($action == 'addProductsToCart') {
$products = (array)Tools::getValue('products');
$context = Context::getContext();
if ((int)$context->cart->id == 0) {
$cart = new Cart();
$cart->id_currency = $this->context->currency->id;
$cart->add();
$context->cart = $cart;
$context->cookie->id_cart = $cart->id;
$context->cookie->write();
} else {
$cart = $context->cart;
}
$result = false;
if (is_array($products) && sizeof($products)) {
$n = 0;
$res = [];
foreach ($products as $p) {
$product = new Product($p['id_product'], false, $this->context->language->id, $this->context->shop->id);
$n++;
$res[$n]['response'] = $this->context->cart->updateQty(
$p['quantity'],
$p['id_product'],
$p['id_product_attribute'],
$p['id_customization']
);
$res[$n]['id_product'] = $p['id_product'];
$res[$n]['id_product_attribute'] = $p['id_product_attribute'];
$res[$n]['quantity'] = $p['quantity'];
$res[$n]['product_name'] = $product->name;
$res[$n]['max_quantity'] = StockAvailable::getQuantityAvailableByProduct($p['id_product'], $p['id_product_attribute'], $this->context->shop->id);
$res[$n]['combination_name'] = $this->getAttributeCombinationsFullNameById($p['id_product'], $p['id_product_attribute'], $this->context->language->id, true);
}
$result = [true];
}
die(json_encode($res));
}
}
}
public function getAttributeCombinationsFullNameById($id_product, $id_product_attribute, $id_lang, $groupByIdAttributeGroup = true)
{
if (!Combination::isFeatureActive()) {
return [];
}
$sql = 'SELECT CONCAT(agl.`name`, al.`name`) AS combination_name, agl.`name` AS group_name, al.`name` AS attribute_name,
a.`id_attribute`, a.`position`
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) $id_lang . ')
LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = ' . (int) $id_lang . ')
WHERE pa.`id_product` = ' . (int) $id_product . '
AND pa.`id_product_attribute` = ' . (int) $id_product_attribute . '
GROUP BY pa.`id_product_attribute`' . ($groupByIdAttributeGroup ? ',ag.`id_attribute_group`' : '') . '
ORDER BY pa.`id_product_attribute`';
$res = Db::getInstance()->executeS($sql);
$combination_name = '';
foreach ($res as $key => $row) {
$combination_name .= $row['group_name'] . ': '.$row['attribute_name'].', ';
}
if (empty($combination_name)) {
$module = new PdProductAttributesList();
return $module->l('No variant');
} else {
return rtrim($combination_name, ', ');
}
}
}