• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockelement.php
  • Класс: CAllIBlockElement
  • Вызов: CAllIBlockElement::SetElementSection
static function SetElementSection($ID, $arSections, $bNew = false, $bRightsIBlock = 0, $sectionId = null)
{
	global $DB;
	$ID = intval($ID);

	$min_old_id = null;
	$min_new_id = null;

	$arToDelete = array();
	$arToInsert = array();
	if(is_array($arSections))
	{
		foreach($arSections as $section_id)
		{
			$section_id = intval($section_id);
			if($section_id > 0)
			{
				if(!isset($min_new_id) || $section_id < $min_new_id)
					$min_new_id = $section_id;

				$arToInsert[$section_id] = $section_id;
			}
		}
	}
	else
	{
		$section_id = intval($arSections);
		if($section_id > 0)
		{
			$arToInsert[$section_id] = $section_id;
			$min_new_id = $section_id;
		}
	}

	$originalInsert = $arToInsert;
	$additionalInsert = array();

	$arOldParents = array();
	$arNewParents = $arToInsert;
	$bParentsChanged = false;

	//Read database
	if(!$bNew)
	{
		$rs = $DB->Query("
			SELECT * FROM b_iblock_section_element
			WHERE IBLOCK_ELEMENT_ID = ".$ID."
			AND ADDITIONAL_PROPERTY_ID IS NULL
		", false, "File: ".__FILE__."
Line: ".__LINE__); while($ar = $rs->Fetch()) { $section_id = intval($ar["IBLOCK_SECTION_ID"]); $arOldParents[] = $section_id; if(!isset($min_old_id) || $section_id < $min_old_id) $min_old_id = $section_id; if(isset($arToInsert[$section_id])) { unset($arToInsert[$section_id]); //This already in DB } else { if (isset($originalInsert[$section_id])) $additionalInsert[$section_id] = $section_id; $arToDelete[] = $section_id; } } if(!empty($arToDelete)) { $bParentsChanged = true; $DB->Query($s=" DELETE FROM b_iblock_section_element WHERE IBLOCK_ELEMENT_ID = ".$ID." AND ADDITIONAL_PROPERTY_ID IS NULL AND IBLOCK_SECTION_ID in (".implode(", ", $arToDelete).") ", false, "File: ".__FILE__."
Line: ".__LINE__); //And this should be deleted } if (!empty($additionalInsert)) { foreach ($additionalInsert as $index) $arToInsert[$index] = $index; } } if(!empty($arToInsert)) { $bParentsChanged = true; $DB->Query(" INSERT INTO b_iblock_section_element(IBLOCK_SECTION_ID, IBLOCK_ELEMENT_ID) SELECT S.ID, E.ID FROM b_iblock_section S, b_iblock_element E WHERE S.IBLOCK_ID = E.IBLOCK_ID AND S.ID IN (".implode(", ", $arToInsert).") AND E.ID = ".$ID." "); } if($bParentsChanged && $bRightsIBlock) { $obElementRights = new CIBlockElementRights($bRightsIBlock, $ID); if(empty($arOldParents)) $arOldParents[] = 0; if(empty($arNewParents)) $arNewParents[] = 0; $obElementRights->ChangeParents($arOldParents, $arNewParents); } if($sectionId !== null || ($min_old_id !== $min_new_id)) { CIBlockElement::RecalcSections($ID, $sectionId); } return !empty($arToDelete) || !empty($arToInsert); }