public function Update($ID, $arFields) { global $DB; $ID = (int) $ID; if ($ID <= 0) { 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); $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 && CModule::IncludeModule('sale')) { CSaleBasket::ProductSubscribe($ID, "catalog"); } return true; }
public 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"])) { $strQuery = 'select ID, QUANTITY from b_catalog_product where ID = ' . $ID; $rsProducts = $DB->Query($strQuery, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); //$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; }
/** * <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' => 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; }