function Update($ID, $arFields) { /** @global CCacheManager $CACHE_MANAGER */ global $CACHE_MANAGER; /** @global CDatabase $DB */ global $DB; $ID = intval($ID); $SAVED_PICTURE = null; if(is_set($arFields, "EXTERNAL_ID")) $arFields["XML_ID"] = $arFields["EXTERNAL_ID"]; if(is_set($arFields, "PICTURE")) { if(strlen($arFields["PICTURE"]["name"])<=0 && strlen($arFields["PICTURE"]["del"])<=0) { unset($arFields["PICTURE"]); } else { $pic_res = $DB->Query("SELECT PICTURE FROM b_iblock WHERE ID=".$ID); if($pic_res = $pic_res->Fetch()) $arFields["PICTURE"]["old_file"]=$pic_res["PICTURE"]; $arFields["PICTURE"]["MODULE_ID"] = "iblock"; } } if(is_set($arFields, "ACTIVE") && $arFields["ACTIVE"]!="Y") $arFields["ACTIVE"]="N"; if(is_set($arFields, "WORKFLOW") && $arFields["WORKFLOW"]!="N") $arFields["WORKFLOW"]="Y"; if(is_set($arFields, "BIZPROC") && $arFields["BIZPROC"]!="Y") $arFields["BIZPROC"]="N"; if(is_set($arFields, "SECTION_CHOOSER") && $arFields["SECTION_CHOOSER"]!="D" && $arFields["SECTION_CHOOSER"]!="P") $arFields["SECTION_CHOOSER"]="L"; if(is_set($arFields, "INDEX_SECTION") && $arFields["INDEX_SECTION"]!="Y") $arFields["INDEX_SECTION"]="N"; if(is_set($arFields, "INDEX_ELEMENT") && $arFields["INDEX_ELEMENT"]!="Y") $arFields["INDEX_ELEMENT"]="N"; if(is_set($arFields, "DESCRIPTION_TYPE") && $arFields["DESCRIPTION_TYPE"]!="html") $arFields["DESCRIPTION_TYPE"] = "text"; if(is_set($arFields, "SITE_ID")) $arFields["LID"] = $arFields["SITE_ID"]; if(is_set($arFields, "SECTION_PROPERTY")) $arFields["SECTION_PROPERTY"] = "Y"; if(is_set($arFields, "PROPERTY_INDEX") && $arFields["PROPERTY_INDEX"]!="I" && $arFields["PROPERTY_INDEX"]!="Y") $arFields["SECTION_PROPERTY"] = "N"; $RIGHTS_MODE = CIBlock::GetArrayByID($ID, "RIGHTS_MODE"); if(!$this->CheckFields($arFields, $ID)) { $Result = false; $arFields["RESULT_MESSAGE"] = &$this->LAST_ERROR; } else { $arLID = array(); $str_LID = ""; if(is_set($arFields, "LID")) { if(is_array($arFields["LID"])) $arLID = $arFields["LID"]; else $arLID[] = $arFields["LID"]; $arFields["LID"] = false; $str_LID = "''"; foreach($arLID as $v) { $arFields["LID"] = $v; $str_LID .= ", '".$DB->ForSql($v)."'"; } } unset($arFields["ID"]); unset($arFields["VERSION"]); if(array_key_exists("PICTURE", $arFields)) { $SAVED_PICTURE = $arFields["PICTURE"]; CFile::SaveForDB($arFields, "PICTURE", "iblock"); } $strUpdate = $DB->PrepareUpdate("b_iblock", $arFields, "iblock"); if(array_key_exists("PICTURE", $arFields)) $arFields["PICTURE"] = $SAVED_PICTURE; $arBinds=Array(); if(is_set($arFields, "DESCRIPTION")) $arBinds["DESCRIPTION"] = $arFields["DESCRIPTION"]; if(strlen($strUpdate) > 0) { $strSql = "UPDATE b_iblock SET ".$strUpdate." WHERE ID=".$ID; $DB->QueryBind($strSql, $arBinds); } $this->SetMessages($ID, $arFields); if(isset($arFields["FIELDS"]) && is_array($arFields["FIELDS"])) $this->SetFields($ID, $arFields["FIELDS"]); if(array_key_exists("RIGHTS_MODE", $arFields)) { if($arFields["RIGHTS_MODE"] === "E" && $RIGHTS_MODE !== "E") { CIBlock::SetPermission($ID, array()); } elseif($arFields["RIGHTS_MODE"] !== "E" && $RIGHTS_MODE === "E") { $obIBlockRights = new CIBlockRights($ID); $obIBlockRights->DeleteAllRights(); } if($arFields["RIGHTS_MODE"] === "E") $RIGHTS_MODE = "E"; } if($RIGHTS_MODE === "E") { if( !array_key_exists("RIGHTS", $arFields) && array_key_exists("GROUP_ID", $arFields) && is_array($arFields["GROUP_ID"]) ) { $obIBlockRights = new CIBlockRights($ID); $obIBlockRights->SetRights($obIBlockRights->ConvertGroups($arFields["GROUP_ID"])); } elseif( array_key_exists("RIGHTS", $arFields) && is_array($arFields["RIGHTS"]) ) { $obIBlockRights = new CIBlockRights($ID); $obIBlockRights->SetRights($arFields["RIGHTS"]); } } else { if(array_key_exists("GROUP_ID", $arFields) && is_array($arFields["GROUP_ID"])) CIBlock::SetPermission($ID, $arFields["GROUP_ID"]); } if (array_key_exists("IPROPERTY_TEMPLATES", $arFields)) { $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\IblockTemplates($ID); $ipropTemplates->set($arFields["IPROPERTY_TEMPLATES"]); } if(!empty($arLID)) { $strSql = "DELETE FROM b_iblock_site WHERE IBLOCK_ID=".$ID; $DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); $strSql = "INSERT INTO b_iblock_site(IBLOCK_ID, SITE_ID) ". "SELECT ".$ID.", LID ". "FROM b_lang ". "WHERE LID IN (".$str_LID.") "; $DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); } if(CModule::IncludeModule("search")) { $dbAfter = $DB->Query("SELECT ACTIVE FROM b_iblock WHERE ID=".$ID); $arAfter = $dbAfter->Fetch(); if($arAfter["ACTIVE"] != "Y") CSearch::DeleteIndex("iblock", false, false, $ID); } $_SESSION["SESS_RECOUNT_DB"] = "Y"; $Result = true; } $this->CleanCache($ID); $arFields["ID"] = $ID; $arFields["RESULT"] = &$Result; foreach (GetModuleEvents("iblock", "OnAfterIBlockUpdate", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arFields)); if(defined("BX_COMP_MANAGED_CACHE")) $CACHE_MANAGER->ClearByTag("iblock_id_".$ID); return $Result; }