/** * <p>Функция изменяет параметры информационного блока с кодом <i>ID</i>. Модифицировать поля, а также отменить изменение параметров можно добавив обработчик события <a href="http://dev.1c-bitrix.ru/api_help/iblock/events/onbeforeiblockupdate.php">OnBeforeIBlockUpdate</a>. После успешного добавления инфоблока вызываются обработчики события <a href="http://dev.1c-bitrix.ru/api_help/iblock/events/onafteriblockupdate.php">OnAfterIBlockUpdate</a>.</p> * * * * * @param int $ID ID изменяемого информационного блока. * * * * @param array $arFields Массив Array("поле"=>"значение", ...). Содержит значения <a * href="http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fiblock">всех полей</a> информационного * блока. <br> Дополнительно в поле SITE_ID должен находиться массив * идентификаторов сайтов, к которым привязан изменяемый * информационный блок. <br> Кроме того, с помощью поля "GROUP_ID", * значением которого должен быть массив соответствий кодов групп * правам доступа, можно установить права для разных групп на доступ * к информационному блоку(см. <a * href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/index.php">CIBlock</a>::<a * href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/setpermission.php">SetPermission()</a>). <br> Если * задано поле "FIELDS", то будут выполнены настройки полей инфоблока * (см. <a href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/SetFields.php">CIBlock::SetFields</a>). <br> * * * * @return bool * * * <h4>Example</h4> * <pre> * <?<br>$arPICTURE = $_FILES["PICTURE"];<br>$ib = new CIBlock;<br>$arFields = Array(<br> "ACTIVE" => $ACTIVE,<br> "NAME" => $NAME,<br> "CODE" => $CODE,<br> "LIST_PAGE_URL" => $LIST_PAGE_URL,<br> "DETAIL_PAGE_URL" => $DETAIL_PAGE_URL,<br> "IBLOCK_TYPE_ID" => $type,<br> "SITE_ID" => Array("en", "de"),<br> "SORT" => $SORT,<br> "PICTURE" => $arPICTURE,<br> "DESCRIPTION" => $DESCRIPTION,<br> "DESCRIPTION_TYPE" => $DESCRIPTION_TYPE,<br> "GROUP_ID" => Array("2"=>"D", "3"=>"R")<br> );<br>if ($ID > 0)<br> $res = $ib->Update($ID, $arFields);<br>else<br>{<br> $ID = $ib->Add($arFields);<br> $res = ($ID>0);<br>}<br>?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/add.php">CIBlock::Add</a> </li> <li> <a * href="http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fiblock">Поля информационного блока</a> * </li> <li> <a href="http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/SetFields.php">CIBlock::SetFields</a> </li> * <li> <a href="http://dev.1c-bitrix.ru/api_help/iblock/events/onbeforeiblockupdate.php">OnBeforeIBlockUpdate</a> </li> * <li> <a href="http://dev.1c-bitrix.ru/api_help/iblock/events/onafteriblockupdate.php">OnAfterIBlockUpdate</a> </li> * </ul><a name="examples"></a> * * * @link http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/update.php * @author Bitrix */ public 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"; } $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 (!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; }
function ImportIBlockFromXML($xmlFile, $iblockCode, $iblockType, $siteID, $permissions = array()) { if (!CModule::IncludeModule("iblock")) { return false; } $rsIBlock = CIBlock::GetList(array(), array("CODE" => $iblockCode, "TYPE" => $iblockType, "SITE_ID" => $siteID)); if ($arIBlock = $rsIBlock->Fetch()) { return false; } if (!is_array($siteID)) { $siteID = array($siteID); } require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/iblock/classes/" . strtolower($GLOBALS["DB"]->type) . "/cml2.php"; $iblockID = ImportXMLFile($xmlFile, $iblockType, $siteID, $section_action = "N", $element_action = "N", $use_crc = false, $preview = false, $sync = false, $return_last_error = false, $return_iblock_id = true); //Import was not able to return iblock_id by error if (!is_integer($iblockID) || $iblockID <= 0) { //try to find iblock $rsIBlock = CIBlock::GetList(array(), array("CODE" => $iblockCode, "TYPE" => $iblockType, "SITE_ID" => $siteID)); if ($arIBlock = $rsIBlock->Fetch()) { $iblockID = $arIBlock["ID"]; } else { $iblockID = false; } } //Set iblock permissions if ($iblockID > 0) { if (empty($permissions)) { $permissions = array(1 => "X", 2 => "R"); } CIBlock::SetPermission($iblockID, $permissions); } return $iblockID; }
function createSampleIblock($sSiteId) { include $this->sModuleInstallFullPath . "bitrixmigration.php"; $arResult = (include $this->sModuleInstallFullPath . "import.php"); //$sSiteId добавляется в массив в этом файле $bm = new Bit\Includer\BitrixMigration($this->sModuleInstallFullPath, 'bm_files/'); $bm->uploadArray($arResult); COption::SetOptionString("bit.includer", "iblock_type", "bit_includer"); COption::SetOptionString("bit.includer", "iblock_id", $iIblockId = $this->getIBlockIdByCode("bit_includer_content")); COption::SetOptionString("bit.includer", "demo_iblock_id", $iIblockId); define("FOR_ALL_USERS_GROUP_ID", 2); //Id групп для всех пользователей по-умолчанию CIBlock::SetPermission($iIblockId, array(FOR_ALL_USERS_GROUP_ID => "R")); }
function ImportIBlockFromXML($xmlFile, $iblockCode, $iblockType, $siteID, $permissions = Array(), $checkExists = true) { if (!CModule::IncludeModule("iblock")) return false; if($checkExists) { $rsIBlock = CIBlock::GetList(array(), array("CODE" => $iblockCode, "TYPE" => $iblockType)); if ($arIBlock = $rsIBlock->Fetch()) return false; } if (!is_array($siteID)) $siteID = Array($siteID); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/classes/".strtolower($GLOBALS["DB"]->type)."/cml2.php"); ImportXMLFile($xmlFile, $iblockType, $siteID, $section_action = "N", $element_action = "N"); $iblockID = false; $rsIBlock = CIBlock::GetList(array(), array("CODE" => $iblockCode, "TYPE" => $iblockType)); if ($arIBlock = $rsIBlock->Fetch()) { $iblockID = $arIBlock["ID"]; if (empty($permissions)) $permissions = Array(1 => "X", 2 => "R"); CIBlock::SetPermission($iblockID, $permissions); } return $iblockID; }
function Update($ID, $arFields) { global $DB; 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"]; } } } if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") { $arFields["ACTIVE"] = "N"; } 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 (!$this->CheckFields(&$arFields, $ID)) { $Result = false; $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR; } else { $arLID = array(); 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"]); $strUpdate = $DB->PrepareUpdate("b_iblock", $arFields, "iblock"); $arBinds = array(); if (is_set($arFields, "DESCRIPTION")) { $arBinds["DESCRIPTION"] = $arFields["DESCRIPTION"]; } $strSql = "UPDATE b_iblock SET " . $strUpdate . " WHERE ID=" . $ID; $DB->QueryBind($strSql, $arBinds); if (is_set($arFields, "GROUP_ID") && is_array($arFields["GROUP_ID"])) { CIBlock::SetPermission($ID, $arFields["GROUP_ID"]); } if (count($arLID) > 0) { $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, DETAIL_PAGE_URL, LID FROM b_iblock WHERE ID=" . $ID); $arAfter = $dbafter->Fetch(); if ($arAfter["ACTIVE"] != "Y") { CSearch::DeleteIndex("iblock", false, false, $ID); } else { if (is_set($arFields, "GROUP_ID")) { $arPerms = array(); $arGroupsPerm = $arFields["GROUP_ID"]; $arGroups = array_keys($arGroupsPerm); for ($i = 0; $i < count($arGroups); $i++) { if ($arGroupsPerm[$arGroups[$i]] >= "R") { if ($arGroups[$i] == 2) { $arPerms = array(2); break; } $arPerms[] = $arGroups[$i]; } } CSearch::ChangePermission("iblock", $arPerms, false, false, $ID); } } } $Result = true; } $arFields["ID"] = $ID; $arFields["RESULT"] =& $Result; $events = GetModuleEvents("iblock", "OnAfterIBlockUpdate"); while ($arEvent = $events->Fetch()) { ExecuteModuleEvent($arEvent, &$arFields); } return $Result; }
function DEMO_IBlock_ImportXML($file, $site_id, $xml_force = false, $workflow = false) { if (strlen($file) <= 0) { return false; } $xml_dir = $_SERVER['DOCUMENT_ROOT'] . "/bitrix/wizards/bitrix/demo/modules/iblock/xml/" . LANGUAGE_ID; if (file_exists($xml_dir) && is_dir($xml_dir)) { if (is_file($xml_dir . "/" . $file)) { if (preg_match("/^(\\d\\d\\d)_([a-z]+)_(.+)_([a-z]{2})\\.xml\$/", $file, $match)) { $documentRoot = rtrim(str_replace(array("\\\\", "//"), array("\\", "/"), $_SERVER["DOCUMENT_ROOT"]), "\\/"); $arFile = array("DIR" => substr($xml_dir, strlen($documentRoot)), "NAME" => $file, "TYPE" => $match[2], "XML_ID" => $match[3], "LANG" => $match[4]); if ($arFile["TYPE"] == "FUTURE") { $arFile["TYPE"] = "xmlcatalog"; } //Check if iblock exists $obIBlock = new CIBlock(); $rsIBlock = $obIBlock->GetList(array(), array("XML_ID" => $arFile["XML_ID"])); $arIBlock = $rsIBlock->Fetch(); if (!$arIBlock || $xml_force === true) { //Create iblock type DEMO_IBlock_CreateType(array($arFile["TYPE"])); ImportXMLFile($arFile["DIR"] . "/" . $arFile["NAME"], $arFile["TYPE"], array($site_id), "N", "N"); $rsIBlock = $obIBlock->GetList(array(), array("XML_ID" => $arFile["XML_ID"])); $arIBlock = $rsIBlock->Fetch(); if (is_array($arIBlock)) { $obIBlock = new CIBlock(); if ($workflow === "bizproc") { if (IsModuleInstalled('bizproc')) { $obIBlock->Update($arIBlock["ID"], array("WORKFLOW" => "N", "BIZPROC" => "Y")); } else { $obIBlock->Update($arIBlock["ID"], array("WORKFLOW" => "Y", "BIZPROC" => "N")); } } elseif ($workflow) { $obIBlock->Update($arIBlock["ID"], array("WORKFLOW" => "Y")); } } } if ($arIBlock["ID"]) { $obIBlock = new CIBlock(); $obIBlock->SetPermission($arIBlock["ID"], array(1 => "X", 2 => "R")); } return $arIBlock["ID"]; } } } return false; }
} else { $source_base = dirname(__FILE__); $documentRoot = rtrim(str_replace(array("\\\\", "//", "\\"), array("\\", "/", "/"), $_SERVER["DOCUMENT_ROOT"]), "\\/"); $source_base = substr($source_base, strLen($documentRoot)); $source_base = str_replace(array("\\", "//"), "/", "/" . $source_base . "/"); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/iblock/classes/" . $DBType . "/cml2.php"; $res = ImportXMLFile($source_base . "xml/" . LANGUAGE_ID . "/photogallery.xml", "gallery", $SITE_ID); $db_res = CIBlock::GetList(array(), array("CODE" => "photo", "XML_ID" => "photo-gallery")); if ($db_res && ($res = $db_res->Fetch())) { $iBlockId = intVal($res["ID"]); } } if ($iBlockId <= 0) { return false; } CIBlock::SetPermission($iBlockId, array("1" => "W", "2" => "R")); // 3. Add Forum $arParams = array("USE_COMMENTS" => "N", "COMMENTS_TYPE" => "none", "FORUM_ID" => "", "BLOG_URL" => "", "PATH_TO_SMILE" => ""); if (CModule::IncludeModule("forum")) { // 3.1 Add group $iGroupId = 0; $db_res = CForumGroup::GetListEx(array(), array("LID" => LANGUAGE_ID)); if ($db_res && ($res = $db_res->Fetch())) { do { if (GetMessage("P_FORUM_GROUP_COMMENTS") == $res["NAME"]) { $iGroupId = intVal($res["ID"]); break; } } while ($res = $db_res->Fetch()); } if ($iGroupId <= 0) {
} } $res = $ib->Update($iblock_id, $arFields); if ($ob->e_rights) { $arParams['ENTITY_TYPE'] = 'IBLOCK'; $arParams['ENTITY_ID'] = $arParams['IBLOCK_ID'] = $iblock_id; $arParams['ACTION'] = 'set_rights'; $arParams['DO_NOT_REDIRECT'] = true; include $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/components/bitrix/webdav.iblock.rights/action.php"; } else { if (is_array($_REQUEST["GROUP_ADD"]) && !empty($_REQUEST["GROUP_ADD"])) { foreach ($_REQUEST["GROUP_ADD"] as $key => $group_id) { $_REQUEST["GROUP"][$group_id] = $_REQUEST["GROUP_ADD_PERMISSION"][$key]; } } CIBlock::SetPermission($iblock_id, $_REQUEST["GROUP"]); WDClearComponentCache(array("webdav.element.edit", "webdav.element.hist", "webdav.element.upload", "webdav.element.view", "webdav.menu", "webdav.section.edit", "webdav.section.list")); } $popupWindow->Close($bReload = true, $_REQUEST["back_url"]); die; } } } /******************************************************************** /Actions ********************************************************************/ //HTML output $popupWindow->ShowTitlebar($arIBlock["NAME"]); if (isset($strWarning) && $strWarning != "") { $popupWindow->ShowValidationError($strWarning); }