示例#1
0
 function GetList($Params = array())
 {
     if (!CSticker::CanDoOperation('sticker_view')) {
         return false;
     }
     global $DB, $USER;
     $bDBResult = isset($Params['bDBResult']) ? $Params['bDBResult'] : false;
     $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() . "<br>Function: GetList<br>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 = strtoupper($filter_keys[$i]);
             $val = $arFilter[$filter_keys[$i]];
             if (is_string($val) && strlen($val) <= 0) {
                 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[strtoupper($by)])) {
             $strOrderBy .= $arFields[strtoupper($by)]["FIELD_NAME"] . ' ' . (strtolower($order) == 'desc' ? 'desc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS LAST" : "") : 'asc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS FIRST" : "")) . ',';
         }
     }
     if (strlen($strOrderBy) > 0) {
         $strOrderBy = "ORDER BY " . rtrim($strOrderBy, ",");
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     if (is_array($arFilter['COLORS'])) {
         $strColors = "";
         for ($i = 0; $i < count($arFilter['COLORS']); $i++) {
             $strColors .= "," . IntVal($arFilter['COLORS'][$i]);
         }
         $strSqlSearch .= "\n AND COLOR in (" . trim($strColors, ", ") . ")";
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tST.*, " . $DB->DateToCharFunction("ST.DATE_UPDATE") . " as DATE_UPDATE2,\n\t\t\t\t" . $DB->DateToCharFunction("ST.DATE_CREATE") . "  as DATE_CREATE2\n\t\t\tFROM\n\t\t\t\tb_sticker ST\n\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t{$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' || $arFilter['ONLY_OWNER'] == 'Y')) {
                 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']);
             }
             $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;
 }