• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock.php
  • Класс: CAllIBlock
  • Вызов: CAllIBlock::SetPermission
static function SetPermission($IBLOCK_ID, $arGROUP_ID)
{
	/** @global CDatabase $DB */
	global $DB;
	$IBLOCK_ID = (int)$IBLOCK_ID;
	static $letters = array(
		'E' => true,
		'R' => true,
		'S' => true,
		'T' => true,
		'U' => true,
		'W' => true,
		'X' => true
	);

	$arToDelete = array();
	$arToInsert = array();

	if(is_array($arGROUP_ID))
	{
		foreach($arGROUP_ID as $group_id => $perm)
		{
			$group_id = (int)$group_id;
			if ($group_id > 0 && isset($letters[$perm]))
			{
				$arToInsert[$group_id] = $perm;
			}
		}
	}

	$rs = $DB->Query("
		SELECT GROUP_ID, PERMISSION
		FROM b_iblock_group
		WHERE IBLOCK_ID = ".$IBLOCK_ID."
	", false, "File: ".__FILE__."
Line: ".__LINE__); while($ar = $rs->Fetch()) { $group_id = (int)$ar["GROUP_ID"]; if(isset($arToInsert[$group_id]) && $arToInsert[$group_id] === $ar["PERMISSION"]) { unset($arToInsert[$group_id]); //This already in DB } else { $arToDelete[] = $group_id; } } if(!empty($arToDelete)) { $DB->Query(" DELETE FROM b_iblock_group WHERE IBLOCK_ID = ".$IBLOCK_ID." AND GROUP_ID in (".implode(", ", $arToDelete).") ", false, "File: ".__FILE__."
Line: ".__LINE__); //And this should be deleted } if(!empty($arToInsert)) { foreach($arToInsert as $group_id => $perm) { $DB->Query(" INSERT INTO b_iblock_group(IBLOCK_ID, GROUP_ID, PERMISSION) SELECT ".$IBLOCK_ID.", ID, '".$perm."' FROM b_group WHERE ID = ".$group_id." "); } } if(!empty($arToDelete) || !empty($arToInsert)) { if(CModule::IncludeModule("search")) { $arGroups = CIBlock::GetGroupPermissions($IBLOCK_ID); if(isset($arGroups[2])) CSearch::ChangePermission("iblock", array(2), false, false, $IBLOCK_ID); else CSearch::ChangePermission("iblock", $arGroups, false, false, $IBLOCK_ID); } } }