- Модуль: support
- Путь к файлу: ~/bitrix/modules/support/classes/mysql/support.php
- Класс: CTicket
- Вызов: CTicket::GetMessageDynamicList
static function GetMessageDynamicList($by = 's_date_create', $order = 'desc', $arFilter = [])
{
$err_mess = (CTicket::err_mess())."
Function: GetMessageDynamicList
Line: ";
global $DB;
$arSqlSearch = Array();
if (is_array($arFilter))
{
$filterKeys = array_keys($arFilter);
$filterKeysCount = count($filterKeys);
for ($i=0; $i<$filterKeysCount; $i++)
{
$key = $filterKeys[$i];
$val = $arFilter[$filterKeys[$i]];
if ((is_array($val) && count($val)<=0) || (!is_array($val) && ((string) $val == '' || $val==='NOT_REF')))
continue;
$matchValueSet = (in_array($key."_EXACT_MATCH", $filterKeys)) ? true : false;
$key = strtoupper($key);
switch($key)
{
case "SITE":
case "SITE_ID":
if (is_array($val)) $val = implode(" | ", $val);
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $matchValueSet) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("T.SITE_ID",$val,$match);
break;
case "DATE_CREATE_1":
if (CheckDateTime($val))
$arSqlSearch[] = "M.DATE_CREATE>=".$DB->CharToDateFunction($val, "SHORT");
break;
case "DATE_CREATE_2":
if (CheckDateTime($val))
$arSqlSearch[] = "M.DATE_CREATE<".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY";
break;
case "OWNER":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $matchValueSet) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("M.OWNER_USER_ID, U.LOGIN, U.LAST_NAME, U.NAME", $val, $match);
break;
case "OWNER_ID":
if (intval($val)>0) $arSqlSearch[] = "M.OWNER_USER_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(M.OWNER_USER_ID is null or M.OWNER_USER_ID=0)";
break;
case "IS_HIDDEN":
case "IS_LOG":
case "IS_OVERDUE":
$arSqlSearch[] = ($val=="Y") ? "M.".$key."='Y'" : "M.".$key."='N'";
break;
case "SLA_ID":
case "SLA":
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $matchValueSet) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("T.SLA_ID", $val, $match);
break;
case "CATEGORY_ID":
case "CATEGORY":
if (intval($val)>0) $arSqlSearch[] = "T.CATEGORY_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.CATEGORY_ID is null or T.CATEGORY_ID=0)";
break;
case "CRITICALITY_ID":
case "CRITICALITY":
if (intval($val)>0) $arSqlSearch[] = "T.CRITICALITY_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.CRITICALITY_ID is null or T.CRITICALITY_ID=0)";
break;
case "STATUS_ID":
case "STATUS":
if (intval($val)>0) $arSqlSearch[] = "T.STATUS_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.STATUS_ID is null or T.STATUS_ID=0)";
break;
case "MARK_ID":
case "MARK":
if (intval($val)>0) $arSqlSearch[] = "T.MARK_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.MARK_ID is null or T.MARK_ID=0)";
break;
case "SOURCE_ID":
case "SOURCE":
if (intval($val)>0) $arSqlSearch[] = "T.SOURCE_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.SOURCE_ID is null or T.SOURCE_ID=0)";
break;
case "DIFFICULTY_ID":
case "DIFFICULTY":
if (intval($val)>0) $arSqlSearch[] = "T.DIFFICULTY_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.DIFFICULTY_ID is null or T.DIFFICULTY_ID=0)";
break;
}
}
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
if ($by == "s_date_create") $strSqlOrder = "ORDER BY M.DATE_CREATE";
else
{
$strSqlOrder = "ORDER BY M.DATE_CREATE";
}
if ($order!="asc")
{
$strSqlOrder .= " desc ";
}
$strSql = "
SELECT
count(M.ID) COUNTER,
sum(if(M.EXPIRE_AGENT_DONE='Y', 1, 0)) COUNTER_OVERDUE,
DAYOFMONTH(M.DAY_CREATE) CREATE_DAY,
MONTH(M.DAY_CREATE) CREATE_MONTH,
YEAR(M.DAY_CREATE) CREATE_YEAR
FROM
b_ticket_message M
INNER JOIN b_ticket T ON (T.ID = M.TICKET_ID)
LEFT JOIN b_user U ON (M.OWNER_USER_ID = U.ID)
WHERE
$strSqlSearch
GROUP BY
TO_DAYS(M.DAY_CREATE)
$strSqlOrder
";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
return $res;
}