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