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