• Модуль: 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; }