static function GetList(&$by, &$order, $arFilter=Array(), $SHOW_USERS_AMOUNT="N")
{
global $DB;
$err_mess = (CGroup::err_mess())."
Function: GetList
Line: ";
$arSqlSearch = $arSqlSearch_h = array();
$strSqlSearch_h = "";
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;
}
$key = mb_strtoupper($key);
$match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter);
switch($key)
{
case "ID":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="N") ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("G.ID", $val, $match);
break;
case "TIMESTAMP_1":
$arSqlSearch[] = "G.TIMESTAMP_X >= FROM_UNIXTIME('".MkDateTime(FmtDate($val,"D.M.Y"),"d.m.Y")."')";
break;
case "TIMESTAMP_2":
$arSqlSearch[] = "G.TIMESTAMP_X <= FROM_UNIXTIME('".MkDateTime(FmtDate($val,"D.M.Y")." 23:59:59","d.m.Y")."')";
break;
case "ACTIVE":
$arSqlSearch[] = ($val=="Y") ? "G.ACTIVE='Y'" : "G.ACTIVE='N'";
break;
case "ADMIN":
if(COption::GetOptionString("main", "controller_member", "N") == "Y" && COption::GetOptionString("main", "~controller_limited_admin", "N") == "Y")
{
if($val=="Y")
$arSqlSearch[] = "G.ID=0";
break;
}
else
$arSqlSearch[] = ($val=="Y") ? "G.ID=1" : "G.ID>1";
break;
case "NAME":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="Y") ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("G.NAME", $val, $match);
break;
case "STRING_ID":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="N") ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("G.STRING_ID", $val, $match);
break;
case "DESCRIPTION":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="Y") ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("G.DESCRIPTION", $val, $match);
break;
case "USERS_1":
$SHOW_USERS_AMOUNT="Y";
$arSqlSearch_h[] = "USERS>=".intval($val);
break;
case "USERS_2":
$SHOW_USERS_AMOUNT="Y";
$arSqlSearch_h[] = "USERS<=".intval($val);
break;
case "ANONYMOUS":
if($val == 'Y' || $val == 'N')
$arSqlSearch[] = "G.ANONYMOUS='".$val."'";
break;
}
}
foreach($arSqlSearch_h as $condition)
$strSqlSearch_h .= " and (".$condition.") ";
}
if(mb_strtolower($by) == "id") $strSqlOrder = " ORDER BY G.ID ";
elseif(mb_strtolower($by) == "active") $strSqlOrder = " ORDER BY G.ACTIVE ";
elseif(mb_strtolower($by) == "timestamp_x") $strSqlOrder = " ORDER BY G.TIMESTAMP_X ";
elseif(mb_strtolower($by) == "c_sort") $strSqlOrder = " ORDER BY G.C_SORT ";
elseif(mb_strtolower($by) == "sort") $strSqlOrder = " ORDER BY G.C_SORT, G.NAME, G.ID ";
elseif(mb_strtolower($by) == "name") $strSqlOrder = " ORDER BY G.NAME ";
elseif(mb_strtolower($by) == "string_id") $strSqlOrder = " ORDER BY G.STRING_ID ";
elseif(mb_strtolower($by) == "description") $strSqlOrder = " ORDER BY G.DESCRIPTION ";
elseif(mb_strtolower($by) == "anonymous") $strSqlOrder = " ORDER BY G.ANONYMOUS ";
elseif(mb_strtolower($by) == "dropdown") $strSqlOrder = " ORDER BY C_SORT, NAME ";
elseif(mb_strtolower($by) == "users")
{
$strSqlOrder = " ORDER BY USERS ";
$SHOW_USERS_AMOUNT="Y";
}
else
{
$strSqlOrder = " ORDER BY G.C_SORT ";
$by = "c_sort";
}
if(mb_strtolower($order) == "desc")
{
$strSqlOrder .= " desc ";
$order = "desc";
}
else
{
$strSqlOrder .= " asc ";
$order = "asc";
}
$str_USERS = $str_TABLE = "";
if($SHOW_USERS_AMOUNT=="Y")
{
$str_USERS = "count(distinct U.USER_ID) USERS,";
$str_TABLE = "LEFT JOIN b_user_group U ON (U.GROUP_ID=G.ID AND ((U.DATE_ACTIVE_FROM IS NULL) OR (U.DATE_ACTIVE_FROM <= ".$DB->CurrentTimeFunction().")) AND ((U.DATE_ACTIVE_TO IS NULL) OR (U.DATE_ACTIVE_TO >= ".$DB->CurrentTimeFunction().")))";
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$strSql = "
SELECT
G.ID, G.ACTIVE, G.C_SORT, G.ANONYMOUS, G.NAME, G.DESCRIPTION, G.STRING_ID,
".$str_USERS."
G.ID REFERENCE_ID,
concat(G.NAME, ' [', G.ID, ']') REFERENCE,
".$DB->DateToCharFunction("G.TIMESTAMP_X")." TIMESTAMP_X
FROM
b_group G
".$str_TABLE."
WHERE
".$strSqlSearch."
GROUP BY
G.ID, G.ACTIVE, G.C_SORT, G.TIMESTAMP_X, G.ANONYMOUS, G.NAME, G.STRING_ID, G.DESCRIPTION
HAVING
1=1
".$strSqlSearch_h."
".$strSqlOrder;
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
$res->is_filtered = (IsFiltered($strSqlSearch) || $strSqlSearch_h <> '');
return $res;
}