File Manager Lite
Dir:
/home/u540325668/domains/dumbafarm.in/public_html/src/Adapter/Product
Upload
[..]
AbstractProductSupplierHandler.php (4.26 KB)
Edit
Rename
Del
AdminProductDataProvider.php (16.73 KB)
Edit
Rename
Del
AdminProductDataUpdater.php (11.3 KB)
Edit
Rename
Del
AdminProductWrapper.php (36.74 KB)
Edit
Rename
Del
Attachment/
Rename
Del
AttachmentDataProvider.php (1.69 KB)
Edit
Rename
Del
AttributeGroup/
Rename
Del
Combination/
Rename
Del
CommandHandler/
Rename
Del
Customization/
Rename
Del
FeatureValue/
Rename
Del
FilterCategoriesRequestPurifier.php (1.9 KB)
Edit
Rename
Del
Grid/
Rename
Del
Image/
Rename
Del
ListParametersUpdater.php (4.72 KB)
Edit
Rename
Del
Options/
Rename
Del
Pack/
Rename
Del
PageConfiguration.php (3.21 KB)
Edit
Rename
Del
PaginationConfiguration.php (2.9 KB)
Edit
Rename
Del
PriceCalculator.php (7.15 KB)
Edit
Rename
Del
ProductColorsRetriever.php (1.5 KB)
Edit
Rename
Del
ProductDataProvider.php (4.64 KB)
Edit
Rename
Del
ProductDeleter.php (4.05 KB)
Edit
Rename
Del
QueryHandler/
Rename
Del
Repository/
Rename
Del
Shop/
Rename
Del
SpecificPrice/
Rename
Del
Stock/
Rename
Del
StockConfiguration.php (4.75 KB)
Edit
Rename
Del
Supplier/
Rename
Del
Update/
Rename
Del
Validate/
Rename
Del
VirtualProduct/
Rename
Del
Edit: AdminProductDataUpdater.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) */ namespace PrestaShop\PrestaShop\Adapter\Product; use Category; use Configuration; use Db; use GroupReduction; use Image; use Pack; use PrestaShop\PrestaShop\Core\Hook\HookDispatcherInterface; use PrestaShopBundle\Exception\UpdateProductException; use PrestaShopBundle\Service\DataUpdater\Admin\ProductInterface; use Product; use Search; use Shop; use ShopGroup; use StockAvailable; use Validate; /** * @deprecated since 8.1 and will be removed in next major. * * This class will update/insert/delete data from DB / ORM about Product, for both Front and Admin interfaces. */ class AdminProductDataUpdater implements ProductInterface { /** * @var HookDispatcherInterface */ private $hookDispatcher; /** * Constructor. HookDispatcher is injected by Sf container. * * @param HookDispatcherInterface $hookDispatcher */ public function __construct(HookDispatcherInterface $hookDispatcher) { $this->hookDispatcher = $hookDispatcher; } /** * {@inheritdoc} */ public function activateProductIdList(array $productListId, $activate = true) { if (count($productListId) < 1) { throw new \Exception('AdminProductDataUpdater->activateProductIdList() should always receive at least one ID. Zero given.', 5003); } $failedIdList = []; foreach ($productListId as $productId) { $product = new Product($productId); if (!Validate::isLoadedObject($product) || $product->validateFields(false, true) !== true || $product->validateFieldsLang(false, true) !== true) { $failedIdList[] = $productId; continue; } $product->active = (bool) $activate; $product->update(); if (in_array($product->visibility, ['both', 'search']) && Configuration::get('PS_SEARCH_INDEXATION')) { Search::indexation(false, $product->id); } $this->hookDispatcher->dispatchWithParameters('actionProductActivation', ['id_product' => (int) $product->id, 'product' => $product, 'activated' => $activate]); } if (count($failedIdList) > 0) { throw new UpdateProductException('Cannot change activation state on many requested products', 5004); } return true; } /** * {@inheritdoc} */ public function deleteProductIdList(array $productIdList) { if (count($productIdList) < 1) { throw new \Exception('AdminProductDataUpdater->deleteProductIdList() should always receive at least one ID. Zero given.', 5005); } $failedIdList = $productIdList; // Since we have just one call to delete all, cannot have distinctive fails. // Hooks: will trigger actionProductDelete multiple times $result = (new Product())->deleteSelection($productIdList); if ($result === 0) { throw new UpdateProductException('Cannot delete many requested products.', 5006); } return true; } /** * {@inheritdoc} */ public function duplicateProductIdList(array $productIdList) { if (count($productIdList) < 1) { throw new \Exception('AdminProductDataUpdater->duplicateProductIdList() should always receive at least one ID. Zero given.', 5005); } $failedIdList = []; foreach ($productIdList as $productId) { try { $this->duplicateProduct($productId); } catch (\Exception $e) { $failedIdList[] = $productId; continue; } } if (count($failedIdList) > 0) { throw new UpdateProductException('Cannot duplicate many requested products', 5004); } return true; } /** * {@inheritdoc} */ public function deleteProduct($productId) { $product = new Product($productId); if (!Validate::isLoadedObject($product)) { throw new \Exception('AdminProductDataUpdater->deleteProduct() received an unknown ID.', 5005); } // dumb? no: delete() makes a lot of things, and can reject deletion in specific cases. // Hooks: will trigger actionProductDelete $result = $product->delete(); if ($result === false) { throw new UpdateProductException('Cannot delete the requested product.', 5007); } return true; } /** * {@inheritdoc} */ public function duplicateProduct($productId, $namePattern = 'copy of %s') { //TODO : use the $namePattern var to input translated version of 'copy of %s', if translation requested. $product = new Product($productId); if (!Validate::isLoadedObject($product)) { throw new \Exception('AdminProductDataUpdater->duplicateProduct() received an unknown ID.', 5005); } if (($error = $product->validateFields(false, true)) !== true || ($error = $product->validateFieldsLang(false, true)) !== true) { throw new UpdateProductException(sprintf('Cannot duplicate this product: %s', $error)); } $id_product_old = $product->id; if (empty($product->price) && Shop::getContext() == Shop::CONTEXT_GROUP) { $shops = ShopGroup::getShopsFromGroup(Shop::getContextShopGroupID()); foreach ($shops as $shop) { if ($product->isAssociatedToShop($shop['id_shop'])) { $product_price = new Product($id_product_old, false, null, $shop['id_shop']); $product->price = $product_price->price; } } } unset( $product->id, $product->id_product ); $product->indexed = false; $product->active = false; // change product name to prefix it foreach ($product->name as $langKey => $oldName) { if (!preg_match('/^' . str_replace('%s', '.*', preg_quote($namePattern, '/') . '$/'), $oldName)) { $newName = sprintf($namePattern, $oldName); if (mb_strlen($newName, 'UTF-8') <= 127) { $product->name[$langKey] = $newName; } } } if ($product->add() && Category::duplicateProductCategories($id_product_old, $product->id) && Product::duplicateSuppliers($id_product_old, $product->id) && ($combination_images = Product::duplicateAttributes($id_product_old, $product->id)) !== false && GroupReduction::duplicateReduction($id_product_old, $product->id) && Product::duplicateAccessories($id_product_old, $product->id) && Product::duplicateFeatures($id_product_old, $product->id) && Product::duplicateSpecificPrices($id_product_old, $product->id) && Pack::duplicate($id_product_old, $product->id) && Product::duplicateCustomizationFields($id_product_old, $product->id) && Product::duplicatePrices($id_product_old, $product->id) && Product::duplicateTags($id_product_old, $product->id) && Product::duplicateTaxes($id_product_old, $product->id) && Product::duplicateDownload($id_product_old, $product->id)) { if ($product->hasAttributes()) { Product::updateDefaultAttribute($product->id); } if (!Image::duplicateProductImages($id_product_old, $product->id, $combination_images)) { throw new UpdateProductException('An error occurred while copying images.', 5008); } else { $this->hookDispatcher->dispatchWithParameters('actionProductAdd', ['id_product_old' => $id_product_old, 'id_product' => (int) $product->id, 'product' => $product]); if (in_array($product->visibility, ['both', 'search']) && Configuration::get('PS_SEARCH_INDEXATION')) { Search::indexation(false, $product->id); } StockAvailable::setProductOutOfStock($product->id, StockAvailable::outOfStock($id_product_old)); return $product->id; } } else { if ($product->id !== null) { $product->delete(); } throw new \Exception('An error occurred while creating an object.', 5009); } } /** * {@inheritdoc} */ public function sortProductIdList(array $productList, $filterParams) { if (count($productList) < 2) { return false; } if (!isset($filterParams['filter_category'])) { throw new \Exception('Cannot sort when filterParams does not contains \'filter_category\'.', 5010); } foreach ($filterParams as $k => $v) { if ($v == '' || strpos($k, 'filter_') !== 0) { continue; } if ($k == 'filter_category') { continue; } throw new \Exception('Cannot sort when filterParams contains other filter than \'filter_category\'.', 5010); } $categoryId = $filterParams['filter_category']; $minPosition = min(array_values($productList)); $productsIds = implode(',', array_map('intval', array_keys($productList))); /* * First request to update position on category_product */ Db::getInstance()->query('SET @i := ' . (((int) $minPosition) - 1)); $updatePositions = 'UPDATE `' . _DB_PREFIX_ . 'category_product` cp ' . 'SET cp.`position` = (SELECT @i := @i + 1) ' . 'WHERE cp.`id_category` = ' . (int) $categoryId . ' AND cp.`id_product` IN (' . $productsIds . ') ' . 'ORDER BY FIELD(cp.`id_product`, ' . $productsIds . ')'; Db::getInstance()->query($updatePositions); /** * Second request to update date_upd because * ORDER BY is not working on multi-tables update */ $updateProducts = 'UPDATE `' . _DB_PREFIX_ . 'product` p ' . '' . Shop::addSqlAssociation('product', 'p') . ' ' . 'SET ' . ' p.`date_upd` = "' . date('Y-m-d H:i:s') . '", ' . ' product_shop.`date_upd` = "' . date('Y-m-d H:i:s') . '" ' . 'WHERE p.`id_product` IN (' . $productsIds . ') '; Db::getInstance()->query($updateProducts); return true; } }
Simpan