Beispiel #1
0
 public function Update($ID, $arFields)
 {
     global $DB;
     $ID = (int) $ID;
     if ($ID <= 0) {
         return false;
     }
     foreach (GetModuleEvents("catalog", "OnBeforeProductUpdate", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     if (array_key_exists('ID', $arFields)) {
         unset($arFields['ID']);
     }
     if (!CCatalogProduct::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     $strUpdate = $DB->PrepareUpdate("b_catalog_product", $arFields);
     $boolSubscribe = false;
     if (!empty($strUpdate)) {
         if (isset($arFields["QUANTITY"]) && $arFields["QUANTITY"] > 0) {
             if (!isset($arFields["OLD_QUANTITY"])) {
                 $strQuery = 'select ID, QUANTITY from b_catalog_product where ID = ' . $ID;
                 $rsProducts = $DB->Query($strQuery, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                 if ($arProduct = $rsProducts->Fetch()) {
                     $arFields["OLD_QUANTITY"] = doubleval($arProduct['QUANTITY']);
                 }
             }
             if (isset($arFields["OLD_QUANTITY"])) {
                 $boolSubscribe = $arFields["OLD_QUANTITY"] <= 0;
             }
         }
         $strSql = "update b_catalog_product set " . $strUpdate . " where ID = " . $ID;
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if (CBXFeatures::IsFeatureEnabled('CatCompleteSet') && (isset($arFields['QUANTITY']) || isset($arFields['QUANTITY_TRACE']) || isset($arFields['CAN_BUY_ZERO']) || isset($arFields['WEIGHT']))) {
             CCatalogProductSet::recalculateSetsByProduct($ID);
         }
         if (isset(self::$arProductCache[$ID])) {
             unset(self::$arProductCache[$ID]);
             if (defined('CATALOG_GLOBAL_VARS') && 'Y' == CATALOG_GLOBAL_VARS) {
                 /** @var array $CATALOG_PRODUCT_CACHE */
                 global $CATALOG_PRODUCT_CACHE;
                 $CATALOG_PRODUCT_CACHE = self::$arProductCache;
             }
         }
     }
     foreach (GetModuleEvents("catalog", "OnProductUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     //call subscribe
     if ($boolSubscribe) {
         if (self::$saleIncluded === null) {
             self::$saleIncluded = Loader::includeModule('sale');
         }
         if (self::$saleIncluded) {
             CSaleBasket::ProductSubscribe($ID, 'catalog');
         }
     }
     return true;
 }
Beispiel #2
0
	/**
	 * <p>Функция обновляет параметры товара, относящиеся к товару как к таковому.</p>
	 *
	 *
	 *
	 *
	 * @param int $ID  Код товара.
	 *
	 *
	 *
	 * @param array $arFields  Ассоциативный массив, ключами которого являются названия
	 * параметров товара, а значениями - новые значения
	 * параметров.<br>Допустимые ключи: <ul> <li> <b>QUANTITY</b> - Количество товара
	 * на складе;</li> <li> <b>QUANTITY_TRACE</b> - Флаг (Y/N/D)<b>*</b> "уменьшать ли
	 * количество при заказе";</li> <li> <b>WEIGHT</b> - вес единицы товара;</li> <li>
	 * <b>PRICE_TYPE</b> - тип цены (S - одноразовый платеж, R - регулярные платежи, T
	 * - пробная подписка);</li> <li> <b>RECUR_SCHEME_TYPE</b> - тип периода подписки ("H" -
	 * час, "D" - сутки, "W" - неделя, "M" - месяц, "Q" - квартал, "S" - полугодие, "Y" -
	 * год);</li> <li> <b>RECUR_SCHEME_LENGTH</b> - длина периода подписки;</li> <li>
	 * <b>TRIAL_PRICE_ID</b> - код товара, для которого данный товар является
	 * пробным;</li> <li> <b>WITHOUT_ORDER</b> - флаг "Продление подписки без
	 * оформления заказа";</li> <li> <b>PURCHASING_PRICE</b> - закупочная цена;</li> <li>
	 * <b>PURCHASING_CURRENCY</b> - валюта закупочной цены;</li> <li> <b>CAN_BUY_ZERO</b> - флаг
	 * (Y/N/D)<b>*</b> "разрешить покупку при отсутствии товара";</li> <li>
	 * <b>NEGATIVE_AMOUNT_TRACE</b> - флаг (Y/N/D)<b>*</b> "разрешить отрицательное
	 * количество товара".</li> </ul>
	 *
	 *
	 *
	 * @return bool <p>Возвращает <i>true</i> в случае успешного обновления параметров и
	 * <i>false</i> в противном случае.</p>
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * Обновление зарезервированного количества товара
	 * Cmodule::IncludeModule('catalog');
	 * $PRODUCT_ID = 51; // id товара
	 * $arFields = array('QUANTITY_RESERVED' =&gt; 11);// зарезервированное количество
	 * CCatalogProduct::Update($PRODUCT_ID, $arFields);
	 * </pre>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__update.bc9a623b.php
	 * @author Bitrix
	 */
	static public function Update($ID, $arFields)
	{
		global $DB;

		$ID = intval($ID);
		if (0 >= $ID)
			return false;

		if (array_key_exists('ID', $arFields))
			unset($arFields["ID"]);

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

		if (!CCatalogProduct::CheckFields("UPDATE", $arFields, $ID))
			return false;

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

		$strUpdate = trim($strUpdate);
		$boolSubscribe = false;
		if (!empty($strUpdate))
		{
			if (isset($arFields["QUANTITY"]) && $arFields["QUANTITY"] > 0)
			{
				if (!isset($arFields["OLD_QUANTITY"]))
				{
					$strQuery = 'select ID, QUANTITY from b_catalog_product where ID = '.$ID;
					$rsProducts = $DB->Query($strQuery, false, "File: ".__FILE__."<br>Line: ".__LINE__);
					if ($arProduct = $rsProducts->Fetch())
					{
						$arFields["OLD_QUANTITY"] = doubleval($arProduct['QUANTITY']);
					}
				}
				if (isset($arFields["OLD_QUANTITY"]))
				{
					$boolSubscribe = !(0 < $arFields["OLD_QUANTITY"]);
				}
			}

			$strSql = "UPDATE b_catalog_product SET ".$strUpdate." WHERE ID = ".$ID;
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

			if (array_key_exists($ID, self::$arProductCache))
			{
				unset(self::$arProductCache[$ID]);
				if (defined('CATALOG_GLOBAL_VARS') && 'Y' == CATALOG_GLOBAL_VARS)
				{
					global $CATALOG_PRODUCT_CACHE;
					$CATALOG_PRODUCT_CACHE = self::$arProductCache;
				}
			}
		}

		foreach (GetModuleEvents("catalog", "OnProductUpdate", true) as $arEvent)
		{
			ExecuteModuleEventEx($arEvent, array($ID, $arFields));
		}

		//call subscribe
		if ($boolSubscribe && CModule::IncludeModule('sale'))
		{
			CSaleBasket::ProductSubscribe($ID, "catalog");
		}

		return true;
	}
Beispiel #3
0
 function Update($ID, $arFields)
 {
     global $DB;
     global $CATALOG_PRODUCT_CACHE;
     $ID = intval($ID);
     if (array_key_exists('ID', $arFields)) {
         unset($arFields["ID"]);
     }
     if ($ID <= 0) {
         return false;
     }
     $db_events = GetModuleEvents("catalog", "OnBeforeProductUpdate");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     if (!CCatalogProduct::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     $strUpdate = $DB->PrepareUpdate("b_catalog_product", $arFields);
     $strUpdate = trim($strUpdate);
     $boolSubscribe = false;
     if (!empty($strUpdate)) {
         if (isset($arFields["QUANTITY"]) && $arFields["QUANTITY"] > 0) {
             if (!isset($arFields["OLD_QUANTITY"])) {
                 $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $ID), false, false, array('ID', 'QUANTITY'));
                 if ($arProduct = $rsProducts->Fetch()) {
                     $arFields["OLD_QUANTITY"] = doubleval($arProduct['QUANTITY']);
                 }
             }
             if (isset($arFields["OLD_QUANTITY"])) {
                 $boolSubscribe = !(0 < $arFields["OLD_QUANTITY"]);
             }
         }
         $strSql = "UPDATE b_catalog_product SET " . $strUpdate . " WHERE ID = " . $ID . " ";
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if (is_array($CATALOG_PRODUCT_CACHE) && array_key_exists($ID, $CATALOG_PRODUCT_CACHE)) {
             unset($CATALOG_PRODUCT_CACHE[$ID]);
         }
     }
     $events = GetModuleEvents("catalog", "OnProductUpdate");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     //call subscribe
     if ($boolSubscribe && CModule::IncludeModule('sale')) {
         CSaleBasket::ProductSubscribe($ID, "catalog");
     }
     return true;
 }