static function GetList($Params = array())
{
if (!CSticker::CanDoOperation('sticker_view'))
return false;
global $DB, $USER;
$bDBResult = isset($Params['bDBResult'])? $Params['bDBResult']: false;
$Params['arFilter']['PAGE_URL'] = str_replace(' ', '%20', $Params['arFilter']['PAGE_URL'] ?? '');
$arFilter = $Params['arFilter'];
$arOrder = isset($Params['arOrder']) ? $Params['arOrder'] : Array('ID' => 'asc');
// Cache
$cachePath = "stickers/";
$cacheTime = 36000000;
$bCache = true;
static $arFields = array(
"ID" => Array("FIELD_NAME" => "ST.ID", "FIELD_TYPE" => "int"),
"SITE_ID" => Array("FIELD_NAME" => "ST.SITE_ID", "FIELD_TYPE" => "string"),
"PAGE_URL" => Array("FIELD_NAME" => "ST.PAGE_URL", "FIELD_TYPE" => "string"),
"PAGE_TITLE" => Array("FIELD_NAME" => "ST.PAGE_TITLE", "FIELD_TYPE" => "string"),
"DATE_CREATE" => Array("FIELD_NAME" => "ST.DATE_CREATE", "FIELD_TYPE" => "date"),
"DATE_UPDATE" => Array("FIELD_NAME" => "ST.DATE_UPDATE", "FIELD_TYPE" => "date"),
"MODIFIED_BY" => Array("FIELD_NAME" => "ST.MODIFIED_BY", "FIELD_TYPE" => "int"),
"CREATED_BY" => Array("FIELD_NAME" => "ST.CREATED_BY", "FIELD_TYPE" => "int"),
"PERSONAL" => Array("FIELD_NAME" => "ST.PERSONAL", "FIELD_TYPE" => "string"),
"CONTENT" => Array("FIELD_NAME" => "ST.CONTENT ", "FIELD_TYPE" => "string"),
"POS_TOP" => Array("FIELD_NAME" => "ST.POS_TOP", "FIELD_TYPE" => "int"),
"POS_LEFT" => Array("FIELD_NAME" => "ST.POS_LEFT", "FIELD_TYPE" => "int"),
"WIDTH" => Array("FIELD_NAME" => "ST.WIDTH", "FIELD_TYPE" => "int"),
"HEIGHT" => Array("FIELD_NAME" => "ST.HEIGHT", "FIELD_TYPE" => "int"),
"COLOR" => Array("FIELD_NAME" => "ST.COLOR", "FIELD_TYPE" => "int"),
"COLLAPSED" => Array("FIELD_NAME" => "ST.COLLAPSED ", "FIELD_TYPE" => "string"),
"CLOSED" => Array("FIELD_NAME" => "ST.CLOSED ", "FIELD_TYPE" => "string"),
"DELETED" => Array("FIELD_NAME" => "ST.DELETED ", "FIELD_TYPE" => "string"),
"MARKER_TOP" => Array("FIELD_NAME" => "ST.MARKER_TOP", "FIELD_TYPE" => "int"),
"MARKER_LEFT" => Array("FIELD_NAME" => "ST.MARKER_LEFT", "FIELD_TYPE" => "int"),
"MARKER_WIDTH" => Array("FIELD_NAME" => "ST.MARKER_WIDTH", "FIELD_TYPE" => "int"),
"MARKER_HEIGHT" => Array("FIELD_NAME" => "ST.MARKER_HEIGHT", "FIELD_TYPE" => "int"),
"MARKER_ADJUST" => Array("FIELD_NAME" => "ST.MARKER_ADJUST", "FIELD_TYPE" => "string")
);
$err_mess = (CSticker::GetErrorMess())."
Function: GetList
Line: ";
$arSqlSearch = array();
$strSqlSearch = "";
if ($bCache)
{
$cache = new CPHPCache;
$cacheId = serialize(array($arFilter, $bDBResult));
if(($tzOffset = CTimeZone::GetOffset()) <> 0)
$cacheId .= "_".$tzOffset;
if ($cache->InitCache($cacheTime, $cacheId, $cachePath))
{
$cachedRes = $cache->GetVars();
if (!empty($cachedRes['stickers']))
return $cachedRes['stickers'];
}
}
if(is_array($arFilter))
{
$filter_keys = array_keys($arFilter);
for($i=0, $l = count($filter_keys); $i<$l; $i++)
{
$n = mb_strtoupper($filter_keys[$i]);
$val = $arFilter[$filter_keys[$i]];
if(is_string($val) && $val == '')
continue;
if ($n == 'ID')
$arSqlSearch[] = GetFilterQuery("ST.ID", $val, 'N');
if ($n == 'PAGE_URL')
$arSqlSearch[] = GetFilterQuery("ST.PAGE_URL", $val, 'N');
if ($n == 'SITE_ID')
$arSqlSearch[] = GetFilterQuery("ST.SITE_ID", $val, 'N');
elseif(isset($arFields[$n]))
$arSqlSearch[] = GetFilterQuery($arFields[$n]["FIELD_NAME"], $val);
}
}
$strOrderBy = '';
foreach($arOrder as $by=>$order)
if(isset($arFields[mb_strtoupper($by)]))
$strOrderBy .= $arFields[mb_strtoupper($by)]["FIELD_NAME"].' '.(mb_strtolower($order) == 'desc'?'desc'.($DB->type == "ORACLE"?" NULLS LAST":""):'asc'.($DB->type == "ORACLE"?" NULLS FIRST":"")).',';
if($strOrderBy <> '')
$strOrderBy = "ORDER BY ".rtrim($strOrderBy, ",");
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
if (is_array($arFilter['COLORS'] ?? null))
{
$strColors = "";
for($i=0; $i < count($arFilter['COLORS']); $i++)
$strColors .= ",".intval($arFilter['COLORS'][$i]);
$strSqlSearch .= "n AND COLOR in (".trim($strColors, ", ").")";
}
$strSql = "
SELECT
ST.*, ".$DB->DateToCharFunction("ST.DATE_UPDATE")." as DATE_UPDATE2,
".$DB->DateToCharFunction("ST.DATE_CREATE")." as DATE_CREATE2
FROM
b_sticker ST
WHERE
$strSqlSearch
$strOrderBy";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
if ($arFilter['USER_ID'] > 0 || !$bDBResult)
{
$arResult = Array();
while($arRes = $res->Fetch())
{
if ($arFilter['USER_ID'] > 0 && $arRes['CREATED_BY'] != $arFilter['USER_ID'] &&
($arRes['PERSONAL'] == 'Y'/* It's another user's personal sticker*/
|| ($arFilter['ONLY_OWNER'] ?? null) == 'Y'/* display only owner's stickers*/))
continue;
if (!$bDBResult)
{
$arRes['AUTHOR'] = CSticker::GetUserName($arRes['CREATED_BY']);
$arRes['INFO'] = CSticker::GetStickerInfo($arRes['CREATED_BY'], $arRes['DATE_CREATE2'], $arRes['MODIFIED_BY'], $arRes['DATE_UPDATE2']);
$arRes['HTML_CONTENT'] = CSticker::BBParseToHTML($arRes['CONTENT']);
$arRes['MARKER_ADJUST'] = unserialize($arRes['MARKER_ADJUST'], ['allowed_classes' => false]);
}
$arResult[] = $arRes;
}
if ($bDBResult)
$res->InitFromArray($arResult);
}
if ($bDBResult)
$arResult = $res;
if ($bCache)
{
$cache->StartDataCache($cacheTime, $cacheId, $cachePath);
$cache->EndDataCache(array("stickers" => $arResult));
}
return $arResult;
}