• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/smile.php
  • Класс: CSmile
  • Вызов: CSmile::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', 'SET_ID',  'TYPE', 'NAME', 'SORT', 'TYPING', 'CLICKABLE', 'HIDDEN', 'IMAGE', 'IMAGE_DEFINITION', 'IMAGE_WIDTH', 'IMAGE_HEIGHT');

	// select block
	foreach ($arParams['SELECT'] as $fieldName)
	{
		if ($fieldName == 'NAME')
		{
			$arSelect['NAME'] = 'sl.'.$fieldName;
			$arJoin['LANG'] = "LEFT JOIN b_smile_lang sl ON sl.TYPE = '".self::TYPE_SMILE."' AND sl.SID = s.ID AND sl.LID = '".$DB->ForSql(htmlspecialcharsbx($lang))."'";
		}
		elseif ($fieldName == 'SET_NAME')
		{
			$arSelect['SET_ID'] = 's.SET_ID';
			$arSelect['SET_NAME'] = 'sl2.NAME as SET_NAME';
			$arJoin['LANG2'] = "LEFT JOIN b_smile_lang sl2 ON sl2.TYPE = '".CSmileSet::TYPE_SET."' AND sl2.SID = s.SET_ID AND sl2.LID = '".$DB->ForSql(htmlspecialcharsbx($lang))."'";
		}
		else
		{
			$arSelect[$fieldName] = 's.'.$fieldName;
		}
	}
	$arSelect['ID'] = 's.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[] = "s.ID IN (".implode(',', $ID).')';
		}
		else
		{
			$arFilter[] = "s.ID = ".intval($arParams['FILTER']['ID']);
		}
	}
	if (isset($arParams['FILTER']['SET_ID']))
	{
		if (is_array($arParams['FILTER']['SET_ID']))
		{
			$ID = Array();
			foreach ($arParams['FILTER']['SET_ID'] as $key => $value)
				$ID[$key] = intval($value);

			if (!empty($ID))
				$arFilter[] = "s.SET_ID IN ('".implode("','", $ID)."')";
		}
		else
		{
			$arFilter[] = "s.SET_ID = ".intval($arParams['FILTER']['SET_ID']);
		}
	}
	if (isset($arParams['FILTER']['TYPE']) && in_array($arParams['FILTER']['TYPE'], Array(self::TYPE_SMILE, self::TYPE_ICON)))
	{
		$arFilter[] = "s.TYPE = '".$arParams['FILTER']['TYPE']."'";
	}
	if (isset($arParams['FILTER']['PARENT_ID']))
	{
		$arFilter[] = "ss2.PARENT_ID = ".intval($arParams['FILTER']['PARENT_ID']);
		$arJoin['PARENT'] = "LEFT JOIN b_smile_set ss2 ON ss2.ID = s.SET_ID";
	}

	// 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', 'SET_ID', 'SORT', 'IMAGE_DEFINITION', 'HIDDEN')))
			{
				$arOrder[$by] = 's.'.$by.' '.$order;
			}
		}
	}
	else
	{
		$arOrder['ID'] = 's.ID DESC';
	}

	$strSelect = "SELECT ".implode(', ', $arSelect);
	$strSql = "
		FROM b_smile s
		".(!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(s.ID) as CNT FROM b_smile s ".(!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; } }