- Модуль: forum
- Путь к файлу: ~/bitrix/modules/forum/classes/general/user.php
- Класс: CAllForumSubscribe
- Вызов: CAllForumSubscribe::GetList
static function GetList($arOrder = array("ID"=>"ASC"), $arFilter = array(), $arAddParams = array())
{
global $DB;
$arSqlSearch = Array();
$arFilter = (is_array($arFilter) ? $arFilter : array());
$arAddParams = (is_array($arAddParams) ? $arAddParams : array());
foreach ($arFilter as $key => $val)
{
$key_res = CForumNew::GetFilterOperation($key);
$key = mb_strtoupper($key_res["FIELD"]);
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
switch ($key)
{
case "ID":
case "USER_ID":
case "FORUM_ID":
case "TOPIC_ID":
case "LAST_SEND":
if (intval($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FP.".$key." IS NULL OR FP.".$key."<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FP.".$key." IS NULL OR NOT ":"")."(FP.".$key." ".$strOperation." ".intval($val)." )";
break;
case "TOPIC_ID_OR_NULL":
$arSqlSearch[] = "(FP.TOPIC_ID = ".intval($val)." OR FP.TOPIC_ID = 0 OR FP.TOPIC_ID IS NULL)";
break;
case "NEW_TOPIC_ONLY":
if ($val == '')
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FP.NEW_TOPIC_ONLY IS NULL)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FP.NEW_TOPIC_ONLY IS NULL OR NOT ":"")."(FP.NEW_TOPIC_ONLY ".$strOperation." '".$DB->ForSql($val)."' )";
break;
case "SOCNET_GROUP_ID":
if($val>0)
$arSqlSearch[] = "FP.SOCNET_GROUP_ID=".intval($val);
else
$arSqlSearch[] = "FP.SOCNET_GROUP_ID IS NULL";
break;
case "LAST_SEND_OR_NULL":
$arSqlSearch[] = "(FP.LAST_SEND IS NULL OR FP.LAST_SEND = 0 OR FP.LAST_SEND < ".intval($val).")";
break;
}
}
$strSqlSearch = (empty($arSqlSearch) ? "" : " AND (".implode(") AND (", $arSqlSearch).") ");
$iCnt = 0;
if (is_set($arAddParams, "bDescPageNumbering") || is_set($arAddParams, "nCount"))
{
$strSql = "SELECT COUNT(FP.ID) AS CNT FROM b_forum_subscribe FP WHERE 1 = 1 ".$strSqlSearch;
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
if ($ar_res = $db_res->Fetch())
$iCnt = intval($ar_res["CNT"]);
if (is_set($arAddParams, "nCount"))
return $iCnt;
}
$strSql =
"SELECT FP.ID, FP.USER_ID, FP.FORUM_ID, FP.TOPIC_ID, FP.LAST_SEND, FP.NEW_TOPIC_ONLY, FP.SITE_ID, ".
" ".$DB->DateToCharFunction("FP.START_DATE", "FULL")." as START_DATE ".
"FROM b_forum_subscribe FP ".
"WHERE 1 = 1 ".
" ".$strSqlSearch." ";
$arSqlOrder = Array();
foreach ($arOrder as $by=>$order)
{
$by = mb_strtoupper($by);
$order = mb_strtoupper($order);
if ($order!="ASC") $order = "DESC";
if ($by == "FORUM_ID") $arSqlOrder[] = " FP.FORUM_ID ".$order." ";
elseif ($by == "USER_ID") $arSqlOrder[] = " FP.USER_ID ".$order." ";
elseif ($by == "TOPIC_ID") $arSqlOrder[] = " FP.TOPIC_ID ".$order." ";
elseif ($by == "NEW_TOPIC_ONLY") $arSqlOrder[] = " FP.NEW_TOPIC_ONLY ".$order." ";
elseif ($by == "START_DATE") $arSqlOrder[] = " FP.START_DATE ".$order." ";
else
{
$arSqlOrder[] = " FP.ID ".$order." ";
$by = "ID";
}
}
DelDuplicateSort($arSqlOrder);
$strSqlOrder = (empty($arSqlOrder) ? "" : " ORDER BY ".implode(", ", $arSqlOrder));
$strSql .= $strSqlOrder.($arAddParams["nTopCount"] > 0 ? "nLIMIT 0,".intval($arAddParams["nTopCount"]) : "");
if ($arAddParams["nTopCount"] <= 0 && is_set($arAddParams, "bDescPageNumbering"))
{
$db_res = new CDBResult();
$db_res->NavQuery($strSql, $iCnt, $arAddParams);
}
else
{
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
}
return $db_res;
}