static function GetList($by = 's_id', $order = 'desc', $arFilter = [])
{
$err_mess = "File: ".__FILE__."
Line: ";
$DB = CDatabase::GetModuleConnection('statistic');
$arSqlSearch = Array();
if (is_array($arFilter))
{
foreach ($arFilter as $key => $val)
{
if(is_array($val))
{
if(count($val) <= 0)
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 = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("S.ID",$val,$match);
break;
case "DATE_START_1":
if (CheckDateTime($val))
$arSqlSearch[] = "S.DATE_START >= ".$DB->CharToDateFunction($val, "SHORT");
break;
case "DATE_START_2":
if (CheckDateTime($val))
$arSqlSearch[] = "S.DATE_START < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
break;
case "DATE_END_1":
if (CheckDateTime($val))
$arSqlSearch[] = "S.DATE_END >= ".$DB->CharToDateFunction($val, "SHORT");
break;
case "DATE_END_2":
if (CheckDateTime($val))
$arSqlSearch[] = "S.DATE_END < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
break;
case "ACTIVE":
case "SAVE_STATISTIC":
$arSqlSearch[] = ($val=="Y") ? "S.".$key."='Y'" : "S.".$key."='N'";
break;
case "IP_1":
case "IP_2":
case "IP_3":
case "IP_4":
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("S.".$key,$val,$match);
break;
case "URL_FROM":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("S.URL_FROM",$val,$match,array("/","\",".","?","#",":"));
break;
case "USER_AGENT":
case "MESSAGE":
case "COMMENTS":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("S.".$key, $val, $match);
break;
case "URL_TO":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("S.URL_TO",$val,$match,array("/","\",".","?","#",":"));
break;
case "URL_REDIRECT":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("S.URL_REDIRECT",$val,$match,array("/","\",".","?","#",":"));
break;
case "SITE_ID":
if (is_array($val)) $val = implode(" | ", $val);
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("S.SITE_ID", $val, $match);
break;
}
}
}
if ($order!="asc")
$order = "desc";
if ($by == "s_id")
$strSqlOrder = "ORDER BY S.ID $order";
elseif ($by == "s_date_start")
$strSqlOrder = "ORDER BY S.DATE_START $order";
elseif ($by == "s_site_id")
$strSqlOrder = "ORDER BY S.SITE_ID $order";
elseif ($by == "s_date_end")
$strSqlOrder = "ORDER BY S.DATE_END $order";
elseif ($by == "s_active")
$strSqlOrder = "ORDER BY S.ACTIVE $order";
elseif ($by == "s_save_statistic")
$strSqlOrder = "ORDER BY S.SAVE_STATISTIC $order";
elseif ($by == "s_ip")
$strSqlOrder = "ORDER BY S.IP_1 $order, S.IP_2 $order, S.IP_3 $order, S.IP_4 $order";
elseif ($by == "s_mask")
$strSqlOrder = "ORDER BY S.MASK_1 $order, S.MASK_2 $order, S.MASK_3 $order, S.MASK_4 $order";
elseif ($by == "s_url_to")
$strSqlOrder = "ORDER BY S.URL_TO $order";
elseif ($by == "s_url_from")
$strSqlOrder = "ORDER BY S.URL_FROM $order";
else
{
$strSqlOrder = "ORDER BY S.ID $order";
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$strSql = "
SELECT
S.ID, S.ACTIVE, S.SAVE_STATISTIC,
S.IP_1, S.IP_2, S.IP_3, S.IP_4,
S.MASK_1, S.MASK_2, S.MASK_3, S.MASK_4,
S.USER_AGENT, S.USER_AGENT_IS_NULL,
S.URL_TO, S.URL_FROM, S.MESSAGE, S.MESSAGE_LID,
S.URL_REDIRECT, S.COMMENTS, S.TEST, S.SITE_ID,
".$DB->DateToCharFunction("S.TIMESTAMP_X")." TIMESTAMP_X,
".$DB->DateToCharFunction("S.DATE_END")." DATE_END,
".$DB->DateToCharFunction("S.DATE_START")." DATE_START,
if ((
(S.DATE_START<=now() or S.DATE_START is null) and
(S.DATE_END>=now() or S.DATE_END is null) and
S.ACTIVE='Y'),
'green',
'red') as LAMP
FROM
b_stop_list S
WHERE
$strSqlSearch
$strSqlOrder
LIMIT ".intval(COption::GetOptionString('statistic','RECORDS_LIMIT'))."
";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
return $res;
}