- Модуль: 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);
}
}
}