• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/classes/general/mail.php
  • Класс: CMailBox
  • Вызов: CMailBox::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; }