• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/classes/general/mail.php
  • Класс: CMailLog
  • Вызов: CMailLog::GetList
static function GetList($arOrder=Array(), $arFilter=Array())
{
	global $DB;
	$strSql =
			"SELECT ML.*, MB.NAME as MAILBOX_NAME, ".
			"	MF.NAME as FILTER_NAME, ".
			"	MM.SUBJECT as MESSAGE_SUBJECT, ".
			"	".$DB->DateToCharFunction("ML.DATE_INSERT")."	as DATE_INSERT ".
			"	".
			"FROM b_mail_log ML ".
			"	INNER JOIN b_mail_mailbox MB ON MB.ID=ML.MAILBOX_ID ".
			"	LEFT JOIN b_mail_filter MF ON MF.ID=ML.FILTER_ID ".
			"	LEFT JOIN b_mail_message MM ON MM.ID=ML.MESSAGE_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 "ID":
		case "MAILBOX_ID":
		case "FILTER_ID":
		case "MESSAGE_ID":
		case "LOG_TYPE":
		case "STATUS_GOOD":
			$arSqlSearch[] = GetFilterQuery("ML.".$key, $val, "N");
			break;
		case "MESSAGE":
			$arSqlSearch[] = GetFilterQuery("ML.".$key, $val);
			break;
		case "FILTER_NAME":
			$arSqlSearch[] = GetFilterQuery("MF.NAME", $val);
			break;
		case "MAILBOX_NAME":
			$arSqlSearch[] = GetFilterQuery("MB.NAME", $val);
			break;
		case "MESSAGE_SUBJECT":
			$arSqlSearch[] = GetFilterQuery("MM.SUBJECT", $val);
			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 "ID":
			case "MAILBOX_ID":
			case "FILTER_ID":
			case "MESSAGE_ID":
			case "DATE_INSERT":
			case "LOG_TYPE":
			case "STATUS_GOOD":
			case "MESSAGE":
				$arSqlOrder[] = " ML.".$by." ".$order." ";
			case "MESSAGE_SUBJECT":
				$arSqlOrder[] = " MM.SUBJECT ".$order." ";
			case "FILTER_NAME":
				$arSqlOrder[] = " MF.NAME ".$order." ";
			case "MAILBOX_NAME":
				$arSqlOrder[] = " MB.NAME ".$order." ";
			default:
				$arSqlOrder[] = " ML.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 = new _CMailLogDBRes($res); $res->is_filtered = $is_filtered; return $res; }