static function GroupERights($iblockID) { if (CIBlock::GetArrayByID($iblockID, "RIGHTS_MODE") === "E") { return; } $arGroups = self::GetGroups($iblockID); foreach ($arGroups as $groupID => $group) { foreach (self::$ops as $op => $opTrans) { $arGroups[$groupID]["Operations"][$op] = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $groupID, 'files', $op); } } $arTasks = CWebDavIblock::GetTasks(); // set e rights $arFields = array('RIGHTS_MODE' => 'E', 'GROUP_ID' => array()); $ib = new CIBlock(); $res = $ib->Update($iblockID, $arFields); $ibr = new CIBlockRights($iblockID); $rights = array(); $rights['n0'] = array('GROUP_CODE' => 'G1', 'DO_CLEAN' => 'Y', 'TASK_ID' => $arTasks['X']); // admins $rights['n1'] = array('GROUP_CODE' => 'G2', 'DO_CLEAN' => 'Y', 'TASK_ID' => $arTasks['D']); // nobody $ibr->SetRights($rights); foreach ($arGroups as $groupID => $group) { $sectionID = $group['SECTION']; $ibrs = new CIBlockSectionRights($iblockID, $sectionID); $rights = array(); $i = 0; foreach ($group["Operations"] as $op => $subj) { // 'Operations' => // array // 'view' => string 'A' (length=1) // 'write_limited' => string 'Z' (length=1) // 'bizproc' => null // 'write' => string 'Z' (length=1) // // A>Только владелец группы // E>Владелец группы и модераторы группы // K>Все члены группы // L>Авторизованные пользователи // N>Все посетители if ($subj) { if ($subj == "N") { $sSubj = "G2"; } elseif ($subj == "L") { $sSubj = "AU"; } else { $sSubj = "SG{$groupID}_{$subj}"; } $rights[$sSubj] = $arTasks[self::$ops[$op]]; if (self::$ops[$op] == 'E') { $rights["CR"] = $arTasks['W']; } } } $rights["SG{$groupID}_A"] = $arTasks["X"]; // admin of group $arRights = array(); $i = 0; foreach ($rights as $subj => $task) { $arRights['n' . $i++] = array('GROUP_CODE' => $subj, 'TASK_ID' => $task, 'DO_CLEAN' => 'NOT'); } $ibrs->SetRights($arRights); } }
/** * <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; }