• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblocksection.php
  • Класс: CAllIBlockSection
  • Вызов: CAllIBlockSection::TreeReSort
static function TreeReSort($IBLOCK_ID, $ID=0, $cnt=0, $depth=0, $ACTIVE="Y")
{
	global $DB;
	$IBLOCK_ID = (int)$IBLOCK_ID;

	if($ID==0)
	{
		CIBlock::_transaction_lock($IBLOCK_ID);
	}

	if($ID > 0)
	{
		$DB->Query("
			UPDATE
				b_iblock_section
			SET
				TIMESTAMP_X=".($DB->type=="ORACLE"?"NULL":"TIMESTAMP_X")."
				,RIGHT_MARGIN=".(int)$cnt."
				,LEFT_MARGIN=".(int)$cnt."
			WHERE
				ID=".(int)$ID
		);
	}

	$strSql = "
		SELECT BS.ID, BS.ACTIVE
		FROM b_iblock_section BS
		WHERE BS.IBLOCK_ID = ".$IBLOCK_ID."
		AND ".($ID>0? "BS.IBLOCK_SECTION_ID=".(int)$ID: "BS.IBLOCK_SECTION_ID IS NULL")."
		ORDER BY BS.SORT, BS.NAME
	";

	$cnt++;
	$res = $DB->Query($strSql);
	while($arr = $res->Fetch())
		$cnt = CIBlockSection::TreeReSort($IBLOCK_ID, $arr["ID"], $cnt, $depth+1, ($ACTIVE=="Y" && $arr["ACTIVE"]=="Y" ? "Y" : "N"));

	if($ID==0)
	{
		return true;
	}

	$DB->Query("
		UPDATE
			b_iblock_section
		SET
			TIMESTAMP_X=".($DB->type=="ORACLE"?"NULL":"TIMESTAMP_X")."
			,RIGHT_MARGIN=".(int)$cnt."
			,DEPTH_LEVEL=".(int)$depth."
			,GLOBAL_ACTIVE='".$ACTIVE."'
		WHERE
			ID=".(int)$ID
	);

	return $cnt+1;
}