function Update($ID, $arFields) { global $DB; global $CACHE_MANAGER; global $stackCacheManager; global $CATALOG_BASE_GROUP; $ID = intval($ID); if (0 >= $ID) { return false; } if (!CCatalogGroup::CheckFields("UPDATE", $arFields, $ID)) { return false; } $db_events = GetModuleEvents("catalog", "OnBeforeGroupUpdate"); while ($arEvent = $db_events->Fetch()) { if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) { return false; } } if (isset($arFields["BASE"]) && $arFields["BASE"] == "Y") { $strSql = "UPDATE b_catalog_group SET BASE = 'N' WHERE ID != " . $ID . " AND BASE = 'Y'"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if (isset($CATALOG_BASE_GROUP)) { unset($CATALOG_BASE_GROUP); } } $strUpdate = $DB->PrepareUpdate("b_catalog_group", $arFields); $strSql = "UPDATE b_catalog_group SET " . $strUpdate . " WHERE ID = " . $ID; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if (isset($arFields["USER_GROUP"]) && is_array($arFields["USER_GROUP"]) && !empty($arFields["USER_GROUP"])) { $DB->Query("DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = " . $ID . " AND BUY <> 'Y'"); foreach ($arFields["USER_GROUP"] as &$intValue) { $strSql = "INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(" . $ID . ", " . $intValue . ", 'N')"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } if (isset($intValue)) { unset($intValue); } } if (isset($arFields["USER_GROUP_BUY"]) && is_array($arFields["USER_GROUP_BUY"]) && !empty($arFields["USER_GROUP_BUY"])) { $DB->Query("DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = " . $ID . " AND BUY = 'Y'"); foreach ($arFields["USER_GROUP_BUY"] as &$intValue) { $strSql = "INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(" . $ID . ", " . $intValue . ", 'Y')"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } if (isset($intValue)) { unset($intValue); } } if (isset($arFields["USER_LANG"]) && is_array($arFields["USER_LANG"]) && !empty($arFields["USER_LANG"])) { $DB->Query("DELETE FROM b_catalog_group_lang WHERE CATALOG_GROUP_ID = " . $ID); foreach ($arFields["USER_LANG"] as $key => $value) { $strSql = "INSERT INTO b_catalog_group_lang(CATALOG_GROUP_ID, LID, NAME) " . "VALUES(" . $ID . ", '" . $DB->ForSql($key) . "', '" . $DB->ForSql($value) . "')"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } } if (!defined("CATALOG_SKIP_CACHE") || !CATALOG_SKIP_CACHE) { $CACHE_MANAGER->CleanDir("catalog_group"); $CACHE_MANAGER->Clean("catalog_group_perms"); } $stackCacheManager->Clear("catalog_GetQueryBuildArrays"); $stackCacheManager->Clear("catalog_discount"); $events = GetModuleEvents("catalog", "OnGroupUpdate"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } return true; }
function Update($ID, $arFields) { global $DB, $CACHE_MANAGER, $stackCacheManager; $ID = (int) $ID; if ($ID <= 0) { return false; } foreach (GetModuleEvents("catalog", "OnBeforeGroupUpdate", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) { return false; } } if (!CCatalogGroup::CheckFields("UPDATE", $arFields, $ID)) { return false; } $strUpdate = $DB->PrepareUpdate("b_catalog_group", $arFields); if (!empty($strUpdate)) { if (isset($arFields["BASE"]) && $arFields["BASE"] == "Y") { $strBaseUpdate = "BASE = 'N', TIMESTAMP_X = " . $DB->GetNowFunction(); if (array_key_exists('MODIFIED_BY', $arFields)) { $strBaseUpdate .= ", MODIFIED_BY = " . $arFields["MODIFIED_BY"]; } $strSql = "UPDATE b_catalog_group SET " . $strBaseUpdate . " WHERE ID != " . $ID . " AND BASE = 'Y'"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); self::$arBaseGroupCache = array(); if (defined('CATALOG_GLOBAL_VARS') && 'Y' == CATALOG_GLOBAL_VARS) { global $CATALOG_BASE_GROUP; $CATALOG_BASE_GROUP = self::$arBaseGroupCache; } } $strSql = "UPDATE b_catalog_group SET " . $strUpdate . " WHERE ID = " . $ID; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } if (isset($arFields["USER_GROUP"]) && is_array($arFields["USER_GROUP"]) && !empty($arFields["USER_GROUP"])) { $DB->Query("DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = " . $ID . " AND BUY <> 'Y'"); foreach ($arFields["USER_GROUP"] as &$intValue) { $strSql = "INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(" . $ID . ", " . $intValue . ", 'N')"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } if (isset($intValue)) { unset($intValue); } } if (isset($arFields["USER_GROUP_BUY"]) && is_array($arFields["USER_GROUP_BUY"]) && !empty($arFields["USER_GROUP_BUY"])) { $DB->Query("DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = " . $ID . " AND BUY = 'Y'"); foreach ($arFields["USER_GROUP_BUY"] as &$intValue) { $strSql = "INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(" . $ID . ", " . $intValue . ", 'Y')"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } if (isset($intValue)) { unset($intValue); } } if (isset($arFields["USER_LANG"]) && is_array($arFields["USER_LANG"]) && !empty($arFields["USER_LANG"])) { $DB->Query("DELETE FROM b_catalog_group_lang WHERE CATALOG_GROUP_ID = " . $ID); foreach ($arFields["USER_LANG"] as $key => $value) { $strSql = "INSERT INTO b_catalog_group_lang(CATALOG_GROUP_ID, LANG, NAME) VALUES(" . $ID . ", '" . $DB->ForSql($key) . "', '" . $DB->ForSql($value) . "')"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } } if (!defined("CATALOG_SKIP_CACHE") || !CATALOG_SKIP_CACHE) { $CACHE_MANAGER->CleanDir("catalog_group"); $CACHE_MANAGER->Clean("catalog_group_perms"); } $stackCacheManager->Clear("catalog_GetQueryBuildArrays"); $stackCacheManager->Clear("catalog_discount"); foreach (GetModuleEvents("catalog", "OnGroupUpdate", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } return true; }
/** * <p>Функция изменяет параметры типа цены с кодом ID на значения из массива arFields. При этом сохраняются как языкозависимые параметры типа, так и параметры, которые не зависят от языка. Так же есть возможность указать группы пользователей, члены которых могут просматривать и покупать товары по ценам этого типа. </p> * * * * * @param int $ID Код изменяемого типа цены. * * * * @param array $arFields Ассоциативный массив параметров типа цены, ключами которого * являются названия параметров, а значениями - новые значения. * Допустимые параметры: <ul> <li>BASE - флаг (Y/N) является ли тип * базовым;</li> <li>NAME - внутреннее название типа цены;</li> <li>SORT - индекс * сортировки;</li> <li>XML_ID - внешний код;</li> <li>MODIFIED_BY - ID последнего * изменившего тип цен;</li> <li>USER_GROUP - массив кодов групп * пользователей, члены которых могут видеть цены этого типа;</li> * <li>USER_GROUP_BUY - массив кодов групп пользователей, члены которых могут * покупать товары по ценам этого типа;</li> <li>USER_LANG - ассоциативный * массив языкозависимых параметров типа цены, ключами которого * являются коды языков, а значениями - названия этого типа цены на * соответствующем языке.</li> </ul> * * * * @return bool <p>Возвращает <i>true</i> в случае успешного изменения параметров типа * цени и <i>false</i> - в случае ошибки.</p><a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $arFields = array( * "NAME" => "retail", * "SORT" => 100, * "USER_GROUP" => array(2, 4), // видят цены члены групп 2 и 4 * "USER_GROUP_BUY" => array(2), // покупают по этой цене * // только члены группы 2 * "USER_LANG" => array( * "ru" => "Розничная", * "en" => "Retail" * ) * ); * * if (!CCatalogGroup::Update($ID, $arFields)) * echo "Ошибка добавления типа цены"; * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccataloggroup/ccataloggroup__update.a6d06df4.php * @author Bitrix */ public static function Update($ID, $arFields) { global $DB; global $CACHE_MANAGER; global $stackCacheManager; global $CATALOG_BASE_GROUP; global $USER; $ID = intval($ID); if (0 >= $ID) return false; $arFields1 = array(); if (array_key_exists('CREATED_BY',$arFields)) unset($arFields['CREATED_BY']); if (array_key_exists('DATE_CREATE',$arFields)) unset($arFields['DATE_CREATE']); if (array_key_exists('TIMESTAMP_X', $arFields)) unset($arFields['TIMESTAMP_X']); $intUserID = 0; if (CCatalog::IsUserExists()) { $intUserID = intval($USER->GetID()); if (!array_key_exists('MODIFIED_BY', $arFields) || intval($arFields["MODIFIED_BY"]) <= 0) $arFields["MODIFIED_BY"] = $intUserID; } $arFields1['TIMESTAMP_X'] = $DB->GetNowFunction(); if (!CCatalogGroup::CheckFields("UPDATE", $arFields, $ID)) return false; foreach(GetModuleEvents("catalog", "OnBeforeGroupUpdate", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields))===false) return false; } if (isset($arFields["BASE"]) && $arFields["BASE"] == "Y") { $strUpdate = "BASE = 'N', TIMESTAMP_X = ".$DB->GetNowFunction(); if (array_key_exists('MODIFIED_BY', $arFields)) { $strUpdate .= ", MODIFIED_BY = ".$arFields["MODIFIED_BY"]; } $strSql = "UPDATE b_catalog_group SET ".$strUpdate." WHERE ID != ".$ID." AND BASE = 'Y'"; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); if (isset($CATALOG_BASE_GROUP)) unset($CATALOG_BASE_GROUP); } $strUpdate = $DB->PrepareUpdate("b_catalog_group", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($strUpdate)>0) $strUpdate .= ", "; $strUpdate .= $key."=".$value." "; } $strSql = "UPDATE b_catalog_group SET ".$strUpdate." WHERE ID = ".$ID; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); if (isset($arFields["USER_GROUP"]) && is_array($arFields["USER_GROUP"]) && !empty($arFields["USER_GROUP"])) { $DB->Query("DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = ".$ID." AND BUY <> 'Y'"); foreach ($arFields["USER_GROUP"] as &$intValue) { $strSql = "INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(".$ID.", ".$intValue.", 'N')"; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); } if (isset($intValue)) unset($intValue); } if (isset($arFields["USER_GROUP_BUY"]) && is_array($arFields["USER_GROUP_BUY"]) && !empty($arFields["USER_GROUP_BUY"])) { $DB->Query("DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = ".$ID." AND BUY = 'Y'"); foreach ($arFields["USER_GROUP_BUY"] as &$intValue) { $strSql = "INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(".$ID.", ".$intValue.", 'Y')"; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); } if (isset($intValue)) unset($intValue); } if (isset($arFields["USER_LANG"]) && is_array($arFields["USER_LANG"]) && !empty($arFields["USER_LANG"])) { $DB->Query("DELETE FROM b_catalog_group_lang WHERE CATALOG_GROUP_ID = ".$ID); foreach ($arFields["USER_LANG"] as $key => $value) { $strSql = "INSERT INTO b_catalog_group_lang(CATALOG_GROUP_ID, LID, NAME) VALUES(".$ID.", '".$DB->ForSql($key)."', '".$DB->ForSql($value)."')"; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); } } if (!defined("CATALOG_SKIP_CACHE") || !CATALOG_SKIP_CACHE) { $CACHE_MANAGER->CleanDir("catalog_group"); $CACHE_MANAGER->Clean("catalog_group_perms"); } $stackCacheManager->Clear("catalog_GetQueryBuildArrays"); $stackCacheManager->Clear("catalog_discount"); foreach(GetModuleEvents("catalog", "OnGroupUpdate", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } return true; }