• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/eventmessage.php
  • Класс: CAllEventMessage
  • Вызов: CAllEventMessage::GetList
static function GetList($by = 'id', $order = 'desc', $arFilter=Array())
{
	$arSearch = Array();
	$arSqlSearch = Array();
	$bIsLang = false;
	if (is_array($arFilter))
	{
		foreach ($arFilter as $key => $val)
		{
			if(is_array($val))
			{
				if(empty($val))
					continue;
			}
			else
			{
				if((string)$val == '' || $val === "NOT_REF")
					continue;
			}
			$match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter);
			$key = strtoupper($key);
			switch($key)
			{
				case "ID":
					$match = (isset($arFilter[$key."_EXACT_MATCH"]) && $arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
					if($match == 'Y') $val = '%'.$val.'%';
					$arSearch['%='.$key] = $val;
					break;
				case "TYPE":
					$match = (isset($arFilter[$key."_EXACT_MATCH"]) && $arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
					if($match == 'Y') $val = '%'.$val.'%';
					$arSearch[] = array('LOGIC' => 'OR', 'EVENT_NAME' => $val, 'EVENT_MESSAGE_TYPE.NAME' => $val);
					break;
				case "EVENT_NAME":
				case "TYPE_ID":
					$match = (isset($arFilter[$key."_EXACT_MATCH"]) && $arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
					if($match == 'Y') $val = '%'.$val.'%';
					$arSearch['%=EVENT_NAME'] = $val;
					break;
				case "TIMESTAMP_1":
					$arSqlSearch[] = "M.TIMESTAMP_X>=TO_DATE('".FmtDate($val, "D.M.Y")." 00:00:00','dd.mm.yyyy hh24:mi:ss')";
					$arSearch['>=TIMESTAMP_X'] = $val." 00:00:00";
					break;
				case "TIMESTAMP_2":
					$arSqlSearch[] = "M.TIMESTAMP_X<=TO_DATE('".FmtDate($val, "D.M.Y")." 23:59:59','dd.mm.yyyy hh24:mi:ss')";
					$arSearch['<=TIMESTAMP_X'] = $val." 23:59:59";
					break;
				case "LID":
				case "LANG":
				case "SITE_ID":
					$bIsLang = true;
					$arSearch["=SITE_ID"] = $val;
					break;
				case "LANGUAGE_ID":
					$arSearch["=LANGUAGE_ID"] = $val;
					break;
				case "ACTIVE":
					$arSearch['='.$key] = $val;
					break;
				case "FROM":
					$match = (isset($arFilter[$key."_EXACT_MATCH"]) && $arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
					if($match == 'Y') $val = '%'.$val.'%';
					$arSearch['%=EMAIL_FROM'] = $val;
					break;
				case "TO":
					$match = (isset($arFilter[$key."_EXACT_MATCH"]) && $arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
					if($match == 'Y') $val = '%'.$val.'%';
					$arSearch['%=EMAIL_TO'] = $val;
					break;
				case "BCC":
					$match = (isset($arFilter[$key."_EXACT_MATCH"]) && $arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
					if($match == 'Y') $val = '%'.$val.'%';
					$arSearch['%='.$key] = $val;
					break;
				case "SUBJECT":
					$match = (isset($arFilter[$key."_EXACT_MATCH"]) && $arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
					if($match == 'Y') $val = '%'.$val.'%';
					$arSearch['%='.$key] = $val;
					break;
				case "BODY_TYPE":
					$arSearch[$key] = ($val=="text") ? 'text' : 'html';
					break;
				case "BODY":
					$match = (isset($arFilter[$key."_EXACT_MATCH"]) && $arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
					if($match == 'Y') $val = '%'.$val.'%';
					$arSearch['%=MESSAGE'] = $val;
					break;
			}
		}
	}

	if ($by == "id") $strSqlOrder = "ID";
	elseif ($by == "active") $strSqlOrder = "ACTIVE";
	elseif ($by == "event_name") $strSqlOrder = "EVENT_NAME";
	elseif ($by == "from") $strSqlOrder = "EMAIL_FROM";
	elseif ($by == "to") $strSqlOrder = "EMAIL_TO";
	elseif ($by == "bcc") $strSqlOrder = "BCC";
	elseif ($by == "body_type") $strSqlOrder = "BODY_TYPE";
	elseif ($by == "subject") $strSqlOrder = "SUBJECT";
	elseif ($by == "language_id") $strSqlOrder = "LANGUAGE_ID";
	else
	{
		$strSqlOrder = "ID";
	}

	if ($order != "asc")
	{
		$strSqlOrderBy = "DESC";
	}
	else
	{
		$strSqlOrderBy = "ASC";
	}

	$arSelect = array(
		'*',
		'EVENT_MESSAGE_TYPE_ID' => 'EVENT_MESSAGE_TYPE.ID',
		'EVENT_MESSAGE_TYPE_NAME' => 'EVENT_MESSAGE_TYPE.NAME',
		'EVENT_MESSAGE_TYPE_EVENT_NAME' => 'EVENT_MESSAGE_TYPE.EVENT_NAME',
	);

	if($bIsLang)
	{
		$arSelect['SITE_ID'] = 'EVENT_MESSAGE_SITE.SITE_ID';
	}
	else
	{
		$arSelect['SITE_ID'] = 'LID';
	}

	$resultDb = MailInternalEventMessageTable::getList(array(
		'select' => $arSelect,
		'filter' => $arSearch,
		'order' => array($strSqlOrder => $strSqlOrderBy),
		'runtime' => array(
			'EVENT_MESSAGE_TYPE' => array(
				'data_type' => 'BitrixMainMailInternalEventType',
				'reference' => array('=this.EVENT_NAME' => 'ref.EVENT_NAME', '=ref.LID' => new BitrixMainDBSqlExpression('?', LANGUAGE_ID)),
			),
		)
	));
	$resultDb->addFetchDataModifier(array('CEventMessage', 'GetListDataModifier'));
	$res = new CDBResult($resultDb);

	$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
	$res->is_filtered = (IsFiltered($strSqlSearch));

	return $res;
}