• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/comp_findtools.php
  • Класс: CIBlockFindTools
  • Вызов: CIBlockFindTools::checkElement
static function checkElement($iblock_id, &$arVariables, $strict_check = false)
{
	global $DB;

	$select = "BE.ID";

	$strFrom = "
		b_iblock_element BE
	";

	$strWhere = "
		".($arVariables["ELEMENT_ID"] != ""? "AND BE.ID = ".intval($arVariables["ELEMENT_ID"]): "")."
		".($arVariables["ELEMENT_CODE"] != ""? "AND BE.CODE = '".$DB->ForSql($arVariables["ELEMENT_CODE"])."'": "")."
	";

	if ($arVariables["SECTION_CODE_PATH"] != "")
	{
		$select .= ", BS.ID as SECTION_ID, BS.CODE";
		//The path may be incomplete so we join part of the section tree BS and BSP
		$strFrom .= "
			INNER JOIN b_iblock_section_element BSE ON BSE.IBLOCK_ELEMENT_ID = BE.ID AND BSE.ADDITIONAL_PROPERTY_ID IS NULL
			INNER JOIN b_iblock_section BS ON BS.ID = BSE.IBLOCK_SECTION_ID
			INNER JOIN b_iblock_section BSP ON BS.IBLOCK_ID = BSP.IBLOCK_ID AND BS.LEFT_MARGIN >= BSP.LEFT_MARGIN AND BS.RIGHT_MARGIN <= BSP.RIGHT_MARGIN
		";
		$joinField = "BSP.ID";

		$sectionPath = explode("/", $arVariables["SECTION_CODE_PATH"]);
		foreach (array_reverse($sectionPath) as $i => $SECTION_CODE)
		{
			$strFrom .= "
				INNER JOIN b_iblock_section BS".$i." ON BS".$i.".ID = ".$joinField."
			";
			$joinField = "BS".$i.".IBLOCK_SECTION_ID";
			$strWhere .= "
				AND BS".$i.".CODE = '".$DB->ForSql($SECTION_CODE)."'
			";
		}

		if ($strict_check)
		{
			$strWhere .= "
				AND BS".$i.".IBLOCK_SECTION_ID is null
			";
		}
	}

	$strSql = "
		select ".$select."
		from ".$strFrom."
		WHERE BE.IBLOCK_ID = ".$iblock_id."
		".$strWhere."
	";
	$rs = $DB->Query($strSql);
	if ($r = $rs->Fetch())
	{
		if (isset($sectionPath) && is_array($sectionPath))
		{
			$arVariables["SECTION_CODE"] = $sectionPath[count($sectionPath) - 1];
			if (isset($r['SECTION_ID']) && isset($r['SECTION_CODE']))
			{
				if ($arVariables["SECTION_CODE"] === $r['SECTION_CODE'])
				{
					$arVariables["SECTION_ID"] = $r['SECTION_ID'];
					$arVariables["ELEMENT_ID"] = $r['ID'];
				}
			}
		}
		return true;
	}
	else
	{
		return false;
	}
}