- Модуль: forum
- Путь к файлу: ~/bitrix/modules/forum/classes/general/private_message.php
- Класс: CALLForumPMFolder
- Вызов: CALLForumPMFolder::GetList
static function GetList($arOrder = array("SORT" => "DESC", "TITLE"=>"DESC"), $arFilter, $bCnt=false)
{
global $DB;
$arSqlSearch = array();
$sAddJoin = '';
$filter_keys = (is_array($arFilter) ? array_keys($arFilter) : array());
for($i = 0; $i < count($filter_keys); $i++)
{
$val = $arFilter[$filter_keys[$i]];
$key = mb_strtoupper($filter_keys[$i]);
switch($key)
{
case "USER_ID":
$sAddJoin = "F.USER_ID=FPM.USER_ID AND ";
$arSqlSearch[] = "F.USER_ID=".intval($val);
break;
case "ID":
case "SORT":
$arSqlSearch[] = "F.".$key."=".intval($val);
break;
case "TITLE":
$arSqlSearch[] = "F.".$key."='".$DB->ForSQL($val)."'";
break;
}
}
$arOFields = array(
"ID" => "F.ID",
"USER_ID" => "F.USER_ID",
"SORT" => "F.SORT",
"TITLE" => "F.TITLE");
$arSqlOrder = array();
foreach($arOrder as $by => $order)
{
$by = mb_strtoupper($by);
$order = mb_strtoupper($order);
if(array_key_exists($by, $arOFields))
{
if ($order != "ASC")
$order = "DESC".($DB->type=="ORACLE" ? " NULLS LAST" : "");
else
$order = "ASC".($DB->type=="ORACLE" ? " NULLS FIRST" : "");
$arSqlOrder[] = $arOFields[$by]." ".$order;
}
}
if (!$bCnt)
$strSql =
"SELECT F.ID, F.USER_ID, F.SORT, F.TITLE, COUNT(FPM.ID) AS CNT, COUNT(FPM1.ID) AS CNT_NEW ".
"FROM b_forum_pm_folder F
LEFT JOIN b_forum_private_message FPM ON(".$sAddJoin."F.ID = FPM.FOLDER_ID)
LEFT JOIN b_forum_private_message FPM1 ON(FPM.ID = FPM1.ID AND FPM1.IS_READ != 'Y')";
else
$strSql =
"SELECT COUNT(F.ID) AS CNT ".
"FROM b_forum_pm_folder F ";
$strSql .= (count($arSqlSearch)>0) ? " WHERE ".implode(" AND ", $arSqlSearch) : "";
if(!$bCnt)
$strSql .= " GROUP BY F.ID, F.USER_ID, F.SORT, F.TITLE";
$strSql .= (count($arSqlOrder)>0) ? " ORDER BY ".implode(", ", $arSqlOrder) : "";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
return $dbRes;
}