- Модуль: forum
- Путь к файлу: ~/bitrix/modules/forum/classes/general/private_message.php
- Класс: CAllForumPrivateMessage
- Вызов: CAllForumPrivateMessage::GetList
static function GetList($arOrder = Array("ID" => "DESC"), $arFilter, $bCnt=false)
{
global $DB;
$arSql = array();
$orSql = array();
$arFilter = (is_array($arFilter) ? $arFilter : array());
foreach ($arFilter as $key => $val)
{
switch($key)
{
case "OWNER_ID":
$orSql = array("M.AUTHOR_ID=".intval($val), "M.FOLDER_ID=1", "M.IS_READ='N'");
break;
case "ID":
case "FOLDER_ID":
case "AUTHOR_ID":
case "RECIPIENT_ID":
case "USER_ID":
$arSql[] = "M.".$key."=".intval($val);
break;
case "POST_SUBJ":
case "POST_MESSAGE":
$arSql[] = "M.".$key."='".$DB->ForSQL($val)."'";
break;
case "USE_SMILES":
case "IS_READ":
$t_val = mb_strtoupper($val);
if($t_val=="Y" || $t_val=="N")
$arSql[] = "M.".mb_strtoupper($key)."='".$t_val."'";
break;
}
}
$arOFields = array(
"ID" => "M.ID",
"AUTHOR_ID" => "M.AUTHOR_ID",
"POST_DATE" => "M.POST_DATE",
"POST_SUBJ" => "M.POST_SUBJ",
"POST_MESSAGE" => "M.POST_MESSAGE",
"USER_ID" => "M.USER_ID",
"FOLDER_ID" => "M.FOLDER_ID",
"IS_READ" => "M.IS_READ",
"USE_SMILES" => "M.USE_SMILES",
"AUTHOR_NAME"=>"AUTHOR_NAME"
);
$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 M.ID, M.AUTHOR_ID, FU.LOGIN AS AUTHOR_NAME, M.RECIPIENT_ID, ".
" ".$DB->DateToCharFunction("M.POST_DATE", "FULL")." as POST_DATE, ".
" M.POST_SUBJ, M.POST_MESSAGE, M.FOLDER_ID, M.IS_READ, M.USER_ID, M.USE_SMILES, M.REQUEST_IS_READ ".
"FROM b_forum_private_message M ".
"LEFT JOIN b_user FU ON(M.AUTHOR_ID = FU.ID)";
$strSql .= (count($arSql)>0) ? " WHERE (".implode(" AND ", $arSql).")" : "";
$strSql .= (count($orSql)>0) ? " OR (".implode(" AND ", $orSql).")" : "";
$strSql .= (count($arSqlOrder)>0) ? " ORDER BY ".implode(", ", $arSqlOrder) : "";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
}
else
{
$strSqlTmp =
"SELECT COUNT(M.ID) AS CNT, COUNT(M1.ID) AS CNT_NEW ".
"FROM b_forum_private_message M ".
//"LEFT JOIN b_user FU ON(M.AUTHOR_ID = FU.ID)".
"LEFT JOIN b_forum_private_message M1 ON (M.ID = M1.ID AND M1.IS_READ!='Y')";
$strSql = $strSqlTmp . ((count($arSql)>0) ? " WHERE (".implode(" AND ", $arSql).")" : "");
//$strSql .= (count($orSql)>0) ? " OR (".implode(" AND ", $orSql).")" : "";
$strSql .= (count($arSqlOrder)>0) ? " ORDER BY ".implode(", ", $arSqlOrder) : "";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$arResult = array();
if ($dbRes && ($res = $dbRes->GetNext()))
{
$arResult["CNT"] = intval($res["CNT"]);
$arResult["CNT_NEW"] = intval($res["CNT_NEW"]);
}
if (!empty($orSql))
{
$strSql = $strSqlTmp;
$arSql = $orSql;
$strSql .= ((count($arSql)>0) ? " WHERE (".implode(" AND ", $arSql).")" : "");
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$arResult = array();
if ($dbRes && ($res = $dbRes->GetNext()))
{
$arResult["CNT"] += intval($res["CNT"]);
$arResult["CNT_NEW"] += intval($res["CNT"]);
}
}
$dbRes = new CDBResult;
$dbRes->InitFromArray(array($arResult));
}
return $dbRes;
}