function GetList(&$by, &$order, $arFilter = array()) { $err_mess = CEventMessage::err_mess() . "<br>Function: GetList<br>Line: "; global $DB, $USER; $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); for ($i = 0; $i < count($filter_keys); $i++) { $key = $filter_keys[$i]; $val = $arFilter[$filter_keys[$i]]; if (strlen($val) <= 0 || "{$val}" == "NOT_REF") { continue; } if (is_array($val) && count($val) <= 0) { continue; } $match_value_set = in_array($key . "_EXACT_MATCH", $filter_keys) ? true : false; $key = strtoupper($key); switch ($key) { case "ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("M.ID", $val, $match); break; case "TYPE": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.EVENT_NAME, T.NAME", $val, $match); break; case "EVENT_NAME": case "TYPE_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("M.EVENT_NAME", $val, $match); break; case "TIMESTAMP_1": $arSqlSearch[] = "M.TIMESTAMP_X >= " . $DB->CharToDateFunction($val, "SHORT"); break; case "TIMESTAMP_2": $arSqlSearch[] = "M.TIMESTAMP_X < dateadd(day, 1, " . $DB->CharToDateFunction($val, "SHORT") . ")"; break; case "LID": case "LANG": case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("MS.SITE_ID", $val, $match); $join_site = "\n\t\t\t\t\t\t\tLEFT JOIN b_event_message_site MS ON (M.ID = MS.EVENT_MESSAGE_ID)\n\t\t\t\t\t\t\t"; break; case "ACTIVE": $arSqlSearch[] = $val == "Y" ? "M.ACTIVE = 'Y'" : "M.ACTIVE = 'N'"; break; case "FROM": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.EMAIL_FROM", $val, $match); break; case "TO": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.EMAIL_TO", $val, $match); break; case "BCC": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.BCC", $val, $match); break; case "SUBJECT": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.SUBJECT", $val, $match); break; case "BODY_TYPE": $arSqlSearch[] = $val == "text" ? "M.BODY_TYPE = 'text'" : "M.BODY_TYPE = 'html'"; break; case "BODY": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.MESSAGE", $val, $match); break; } } } if ($by == "id") { $strSqlOrder = " ORDER BY M.ID "; } elseif ($by == "active") { $strSqlOrder = " ORDER BY M.ACTIVE "; } elseif ($by == "event_name") { $strSqlOrder = " ORDER BY M.EVENT_NAME "; } elseif ($by == "to") { $strSqlOrder = " ORDER BY M.TO "; } elseif ($by == "bcc") { $strSqlOrder = " ORDER BY M.BCC "; } elseif ($by == "body_type") { $strSqlOrder = " ORDER BY M.BODY_TYPE "; } elseif ($by == "lid" || $by == "site_id") { $strSqlOrder = " ORDER BY M.LID "; } elseif ($by == "subject") { $strSqlOrder = " ORDER BY M.SUBJECT "; } else { $strSqlOrder = " ORDER BY M.ID "; $by = "id"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\tM.ID,\n\t\t\t\tM.EVENT_NAME,\n\t\t\t\tM.ACTIVE,\n\t\t\t\tM.LID,\n\t\t\t\tM.LID as SITE_ID,\n\t\t\t\tM.EMAIL_FROM,\n\t\t\t\tM.EMAIL_TO,\n\t\t\t\tM.SUBJECT,\n\t\t\t\tM.MESSAGE,\n\t\t\t\tM.BODY_TYPE,\n\t\t\t\tM.BCC,\n\t\t\t\t" . $DB->DateToCharFunction("M.TIMESTAMP_X") . " as TIMESTAMP_X,\n\t\t\t\tCASE\n\t\t\t\t\twhen T.ID is null then M.EVENT_NAME\n\t\t\t\t\telse '[ ' + T.EVENT_NAME + ' ] ' + isnull(T.NAME,'')\n\t\t\t\tEND as EVENT_TYPE\n\t\t\tFROM\n\t\t\t\tb_event_message M\n\t\t\tLEFT JOIN b_event_type T ON (T.EVENT_NAME = M.EVENT_NAME and T.LID = '" . LANGUAGE_ID . "')\n\t\t\t{$join_site}\n\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\t{$strSqlOrder}\n\t\t\t"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $res->is_filtered = IsFiltered($strSqlSearch); return $res; }