• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/smile.php
  • Класс: CSmileSet
  • Вызов: CSmileSet::getList
static function getList($arParams = Array(), $lang = LANGUAGE_ID)
{
	global $DB;

	$arResult = $arSelect = $arOrder = $arFilter = $arJoin = Array();
	if (!isset($arParams['SELECT']) || !is_array($arParams['SELECT']))
		$arParams['SELECT'] = Array('ID', 'STRING_ID', 'SORT', 'NAME', 'TYPE', 'PARENT_ID');

	if (isset($arParams['ORDER']['SMILE_COUNT']))
		$arParams['SELECT'][] = 'SMILE_COUNT';

	// select block

	$type = $arParams['FILTER']['TYPE'] ?? '';
	if (!in_array($type, Array(CSmileSet::TYPE_SET, CSmileSet::TYPE_GALLERY)))
	{
		$arParams['FILTER']['TYPE'] = CSmileSet::TYPE_SET;
	}

	foreach ($arParams['SELECT'] as $fieldName)
	{
		if ($fieldName == 'NAME')
		{
			$arSelect['NAME'] = 'sl.'.$fieldName;
			$arJoin['LANG'] = "LEFT JOIN b_smile_lang sl ON sl.TYPE = ss.TYPE AND sl.SID = ss.ID AND sl.LID = '".$DB->ForSql(htmlspecialcharsbx($lang))."'";
		}
		elseif ($fieldName == 'SMILE_COUNT')
		{
			if ($arParams['FILTER']['TYPE'] == CSmileSet::TYPE_SET)
			{
				$arSelect['SMILE_COUNT'] = '(SELECT COUNT(s.ID) FROM b_smile s WHERE s.SET_ID = ss.ID) as SMILE_COUNT';
			}
			else
			{
				$arSelect['SMILE_COUNT'] = '(SELECT COUNT(s.ID) FROM b_smile_set ss1 LEFT JOIN b_smile s ON ss1.ID = s.SET_ID WHERE ss1.PARENT_ID = ss.ID) as SMILE_COUNT';
			}
		}
		else
		{
			$arSelect[$fieldName] = 'ss.'.$fieldName;
		}
	}
	$arSelect['ID'] = 'ss.ID';

	// filter block
	if (isset($arParams['FILTER']['ID']))
	{
		if (is_array($arParams['FILTER']['ID']))
		{
			$ID = Array();
			foreach ($arParams['FILTER']['ID'] as $key => $value)
				$ID[$key] = intval($value);

			if (!empty($ID))
				$arFilter[] = "ss.ID IN (".implode(',', $ID).')';
		}
		else
		{
			$arFilter[] = "ss.ID = ".intval($arParams['FILTER']['ID']);
		}
	}
	if (isset($arParams['FILTER']['PARENT_ID']))
	{
		$arFilter[] = "ss.PARENT_ID = ".intval($arParams['FILTER']['PARENT_ID']);
	}
	if (isset($arParams['FILTER']['STRING_ID']))
	{
		if (is_array($arParams['FILTER']['STRING_ID']))
		{
			$ID = Array();
			foreach ($arParams['FILTER']['STRING_ID'] as $key => $value)
				$ID[$key] = intval($value);

			if (!empty($ID))
				$arFilter[] = "ss.STRING_ID IN ('".implode("','", $ID)."')";
		}
		else
		{
			$arFilter[] = "ss.STRING_ID = ".intval($arParams['FILTER']['STRING_ID']);
		}
	}

	$arFilter[] = "ss.TYPE = '".$arParams['FILTER']['TYPE']."'";

	// order block
	if (isset($arParams['ORDER']) && is_array($arParams['ORDER']))
	{
		foreach ($arParams['ORDER'] as $by => $order)
		{
			$order = mb_strtoupper($order) == 'ASC'? 'ASC': 'DESC';
			$by = mb_strtoupper($by);
			if (in_array($by, Array('ID', 'SORT')))
			{
				$arOrder[$by] = 'ss.'.$by.' '.$order;
			}
			else if ($by == 'SMILE_COUNT')
				$arOrder[$by] = $by.' '.$order;
		}
	}
	else
	{
		$arOrder['ID'] = 'ss.ID DESC';
	}

	$strSelect = "SELECT ".implode(', ', $arSelect);
	$strSql = "
		FROM b_smile_set ss
		".(!empty($arJoin)? implode(' ', $arJoin): "")."
		".(!empty($arFilter)? "WHERE ".implode(' AND ', $arFilter): "")."
		".(!empty($arOrder)? "ORDER BY ".implode(', ', $arOrder): "")."
	";

	if (isset($arParams['RETURN_SQL']) && $arParams['RETURN_SQL'] == 'Y')
	{
		return $strSelect.$strSql;
	}

	if(array_key_exists("NAV_PARAMS", $arParams) && is_array($arParams["NAV_PARAMS"]))
	{
		$nTopCount = intval($arParams['NAV_PARAMS']['nTopCount'] ?? 0);
		if($nTopCount > 0)
		{
			$strSql = $DB->TopSql($strSelect.$strSql, $nTopCount);
			$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } else { $res_cnt = $DB->Query(" SELECT COUNT(ss.ID) as CNT FROM b_smile_set ss ".(!empty($arFilter)? "WHERE ".implode(' AND ', $arFilter): "") ); $arCount = $res_cnt->Fetch(); $res = new CDBResult(); $res->NavQuery($strSelect.$strSql, $arCount["CNT"], $arParams["NAV_PARAMS"]); } } else { $res = $DB->Query($strSelect.$strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } if (isset($arParams['RETURN_RES']) && $arParams['RETURN_RES'] == 'Y') { return $res; } else { while ($row = $res->GetNext(true, false)) $arResult[$row['ID']] = $row; return $arResult; } }