- Модуль: mail
- Путь к файлу: ~/bitrix/modules/mail/classes/general/mail.php
- Класс: CAllMailBox
- Вызов: CAllMailBox::GetList
static function GetList($arOrder=[], $arFilter=[])
{
global $DB;
$strSql =
"SELECT MB.*, C.CHARSET as LANG_CHARSET, ".
" ".$DB->DateToCharFunction("MB.TIMESTAMP_X")." as TIMESTAMP_X ".
"FROM b_mail_mailbox MB, b_lang L, b_culture C ".
"WHERE MB.LID=L.LID AND C.ID=L.CULTURE_ID";
if(!is_array($arFilter))
{
$arFilter = [];
}
$arSqlSearch = [];
$filter_keys = array_keys($arFilter);
for($i = 0, $n = count($filter_keys); $i < $n; $i++)
{
$val = $arFilter[$filter_keys[$i]];
if (is_null($val) || $val === '')
{
continue;
}
$key = mb_strtoupper($filter_keys[$i]);
$strNegative = false;
if (mb_substr($key, 0, 1) == '!')
{
$key = mb_substr($key, 1);
$strNegative = 'Y';
}
$strExact = false;
if (mb_substr($key, 0, 1) == '=')
{
$key = mb_substr($key, 1);
$strExact = 'Y';
}
switch ($key)
{
case 'ID':
case 'PORT':
case 'DELETE_MESSAGES':
case 'ACTIVE':
case 'USE_MD5':
case 'RELAY':
case 'AUTH_RELAY':
$arSqlSearch[] = GetFilterQuery('MB.'.$key, ($strNegative == 'Y' ? '~' : '').$val, 'N');
break;
case 'LID':
case 'LOGIN':
case 'SERVER':
case 'NAME':
case 'DESCRIPTION':
case 'DOMAINS':
case 'SERVER_TYPE':
$arSqlSearch[] = GetFilterQuery('MB.'.$key, ($strNegative == 'Y' ? '~' : '').$val, $strExact == 'Y' ? 'N' : 'Y');
break;
case 'SERVICE_ID':
case 'USER_ID':
$arSqlSearch[] = 'MB.' . $key . ($strNegative == 'Y' ? ' != ' : ' = ') . intval($val);
break;
}
}
$is_filtered = false;
$strSqlSearch = "";
for($i = 0, $n = count($arSqlSearch); $i < $n; $i++)
{
if($arSqlSearch[$i] <> '')
{
$is_filtered = true;
$strSqlSearch .= " AND (".$arSqlSearch[$i].") ";
}
}
$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 "LID":
case "ACTIVE":
case "NAME":
case "SERVER":
case "PORT":
case "LOGIN":
case "USE_MD5":
case "DELETE_MESSAGES":
case "RELAY":
case "AUTH_RELAY":
case "SERVER_TYPE":
case "PERIOD_CHECK":
$arSqlOrder[] = " MB.".$by." ".$order." ";
break;
default:
$arSqlOrder[] = " MB.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 .= $strSqlSearch.$strSqlOrder;
$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$res = new _CMailBoxDBRes($res);
$res->is_filtered = $is_filtered;
return $res;
}