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