- Модуль: 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;
}
}