- Модуль: mail
- Путь к файлу: ~/bitrix/modules/mail/classes/general/mail.php
- Класс: CMailFilter
- Вызов: CMailFilter::GetList
static function GetList($arOrder=Array(), $arFilter=Array(), $bCnt=false)
{
global $DB;
$strSql =
"SELECT ".
($bCnt
?
" COUNT('x') as CNT "
:
" MF.*, MB.NAME as MAILBOX_NAME, MB.ID as MAILBOX_ID, MB.SERVER_TYPE as MAILBOX_TYPE, MB.DOMAINS as DOMAINS, ".
" ".$DB->DateToCharFunction("MF.TIMESTAMP_X")." as TIMESTAMP_X "
).
" ".
"FROM b_mail_mailbox MB ".($arFilter["EMPTY"]=="Y"?"LEFT":"INNER")." JOIN b_mail_filter MF ON MB.ID=MF.MAILBOX_ID ";
if(!is_array($arFilter))
$arFilter = Array();
$arSqlSearch = Array();
$filter_keys = array_keys($arFilter);
for($i = 0, $n = count($filter_keys); $i < $n; $i++)
{
$val = $arFilter[$filter_keys[$i]];
if ($val == '') continue;
$key = mb_strtoupper($filter_keys[$i]);
switch($key)
{
case "NAME":
case "PHP_CONDITION":
case "ACTION_PHP":
$arSqlSearch[] = GetFilterQuery("MF.".$key, $val);
break;
case "SERVER_TYPE":
$arSqlSearch[] = GetFilterQuery("MB.".$key, $val, "N");
break;
case "ID":
case "ACTION_TYPE":
case "MAILBOX_ID":
case "PARENT_FILTER_ID":
case "SORT":
case "WHEN_MAIL_RECEIVED":
case "WHEN_MANUALLY_RUN":
case "ACTION_STOP_EXEC":
case "ACTION_DELETE_MESSAGE":
case "ACTION_READ":
case "ACTIVE":
$arSqlSearch[] = GetFilterQuery("MF.".$key, $val, "N");
break;
}
}
$is_filtered = false;
$strSqlSearch = "";
for($i = 0, $n = count($arSqlSearch); $i < $n; $i++)
{
if($arSqlSearch[$i] <> '')
{
$strSqlSearch .= " AND (".$arSqlSearch[$i].") ";
$is_filtered = true;
}
}
$arSqlOrder = Array();
foreach($arOrder as $by=>$order)
{
$order = mb_strtolower($order);
if ($order!="asc")
$order = "desc".($DB->type == "ORACLE"?" NULLS LAST":"");
else
$order = "asc".($DB->type == "ORACLE"?" NULLS FIRST":"");
switch(mb_strtoupper($by))
{
case "TIMESTAMP_X":
case "MAILBOX_ID":
case "ACTIVE":
case "NAME":
case "SORT":
case "PARENT_FILTER_ID":
case "WHEN_MAIL_RECEIVED":
case "WHEN_MANUALLY_RUN":
case "ACTION_STOP_EXEC":
case "ACTION_DELETE_MESSAGE":
case "ACTION_READ":
$arSqlOrder[] = " MF.".$by." ".$order." ";
break;
case "MAILBOX_NAME":
$arSqlOrder[] = " MB.NAME ".$order." ";
$arSqlOrder[] = " MF.ID ".$order." ";
break;
default:
$arSqlOrder[] = " MF.ID ".$order." ";
}
}
$strSqlOrder = "";
$arSqlOrder = array_unique($arSqlOrder);
DelDuplicateSort($arSqlOrder);
for ($i = 0, $n = count($arSqlOrder); $i < $n; $i++)
{
if($i==0)
$strSqlOrder = " ORDER BY ";
else
$strSqlOrder .= ",";
$strSqlOrder .= $arSqlOrder[$i];
}
$strSql .= " WHERE 1=1 ".$strSqlSearch.$strSqlOrder;
$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$res->is_filtered = $is_filtered;
return $res;
}