- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock_rights.php
- Класс: CIBlockRightsStorage
- Вызов: CIBlockRightsStorage::DeleteChildrenSet
function DeleteChildrenSet($ID, $TYPE)
{
global $DB;
$strRightSubQuery = "
SELECT ID FROM b_iblock_right
WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
".($TYPE == CIBlockRights::GROUP_CODE?
"AND GROUP_CODE = '".$DB->ForSQL($ID, 32)."'":
"AND ID = ".intval($ID)
)."
";
if($this->ELEMENT_ID > 0)
{
}
elseif(is_array($this->_get_section()))
{
if($DB->type === "MYSQL")
{
$DB->Query("
DELETE b_iblock_section_right.*
FROM b_iblock_section_right
INNER JOIN b_iblock_section BS ON BS.ID = b_iblock_section_right.SECTION_ID
WHERE b_iblock_section_right.IBLOCK_ID = ".$this->IBLOCK_ID."
AND BS.IBLOCK_ID = ".$this->IBLOCK_ID."
AND LEFT_MARGIN > ".$this->arSection["LEFT_MARGIN"]."
AND RIGHT_MARGIN < ".$this->arSection["RIGHT_MARGIN"]."
AND RIGHT_ID IN ($strRightSubQuery)
");
$DB->Query("
DELETE b_iblock_element_right.*
FROM b_iblock_element_right
INNER JOIN b_iblock_section_element BSE ON BSE.IBLOCK_ELEMENT_ID = b_iblock_element_right.ELEMENT_ID
INNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID AND BSE.ADDITIONAL_PROPERTY_ID IS NULL
WHERE b_iblock_element_right.IBLOCK_ID = ".$this->IBLOCK_ID."
AND BS.IBLOCK_ID = ".$this->IBLOCK_ID."
AND BS.LEFT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
AND BS.RIGHT_MARGIN >= ".$this->arSection["LEFT_MARGIN"]."
AND (SECTION_ID IN (
SELECT ID FROM b_iblock_section
WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
AND LEFT_MARGIN >= ".$this->arSection["LEFT_MARGIN"]."
AND RIGHT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
) OR SECTION_ID = 0)
AND RIGHT_ID IN ($strRightSubQuery)
");
}
else
{
$DB->Query("
DELETE FROM b_iblock_section_right
WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
AND SECTION_ID IN (
SELECT ID FROM b_iblock_section
WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
AND LEFT_MARGIN > ".$this->arSection["LEFT_MARGIN"]."
AND RIGHT_MARGIN < ".$this->arSection["RIGHT_MARGIN"]."
)
AND RIGHT_ID IN ($strRightSubQuery)
");
$DB->Query("
DELETE FROM b_iblock_element_right
WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
AND ELEMENT_ID IN (
SELECT BSE.IBLOCK_ELEMENT_ID
FROM b_iblock_section_element BSE
INNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID AND BSE.ADDITIONAL_PROPERTY_ID IS NULL
WHERE BS.IBLOCK_ID = ".$this->IBLOCK_ID."
AND BS.LEFT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
AND BS.RIGHT_MARGIN >= ".$this->arSection["LEFT_MARGIN"]."
)
AND (SECTION_ID IN (
SELECT ID FROM b_iblock_section
WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
AND LEFT_MARGIN >= ".$this->arSection["LEFT_MARGIN"]."
AND RIGHT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
) OR SECTION_ID = 0)
AND RIGHT_ID IN ($strRightSubQuery)
");
}
}
else
{
$DB->Query("
DELETE FROM b_iblock_section_right
WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
AND RIGHT_ID IN ($strRightSubQuery)
");
$DB->Query("
DELETE FROM b_iblock_element_right
WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
AND RIGHT_ID IN ($strRightSubQuery)
");
}
}