static function GetList($aSort=Array(), $arFilter=Array(), $arNavStartParams=false)
{
global $DB;
$arSqlSearch = Array();
$from1 = "";
if(is_array($arFilter))
{
foreach($arFilter as $key => $val)
{
if(!is_array($val))
{
if( ((string)$val == '') || ($val === "NOT_REF") )
continue;
}
switch(strtoupper($key))
{
case "ID":
$arSqlSearch[] = GetFilterQuery("S.ID", $val, "N");
break;
case "EMAIL":
$arSqlSearch[] = GetFilterQuery("S.EMAIL", $val, "Y", array("@", ".", "_"));
break;
case "UPDATE_1":
$arSqlSearch[] = "S.DATE_UPDATE>=".$DB->CharToDateFunction($val);
break;
case "UPDATE_2":
$arSqlSearch[] = "S.DATE_UPDATE<=".$DB->CharToDateFunction($val." 23:59:59");
break;
case "INSERT_1":
$arSqlSearch[] = "S.DATE_INSERT>=".$DB->CharToDateFunction($val);
break;
case "INSERT_2":
$arSqlSearch[] = "S.DATE_INSERT<=".$DB->CharToDateFunction($val." 23:59:59");
break;
case "USER":
$arSqlSearch[] = GetFilterQuery("U.ID, U.LOGIN, U.NAME, U.LAST_NAME", $val);
break;
case "USER_ID":
$arSqlSearch[] = GetFilterQuery("S.USER_ID", $val, "N");
break;
case "ANONYMOUS":
$arSqlSearch[] = ($val == "Y")? "(S.USER_ID = 0 or S.USER_ID is null)" : "(S.USER_ID > 0 and S.USER_ID is not null)";
break;
case "CONFIRMED":
$arSqlSearch[] = ($val == "Y")? "S.CONFIRMED='Y'" : "S.CONFIRMED='N'";
break;
case "ACTIVE":
$arSqlSearch[] = ($val == "Y")? "S.ACTIVE='Y'" : "S.ACTIVE='N'";
break;
case "FORMAT":
$arSqlSearch[] = ($val == "text")? "S.FORMAT='text'" : "S.FORMAT='html'";
break;
case "RUBRIC":
case "RUBRIC_MULTI":
case "DISTRIBUTION":
if(is_array($val))
{
$val = implode(" | ", $val);
}
if($val <> '')
{
$from1 = " INNER JOIN b_subscription_rubric SR ON (SR.SUBSCRIPTION_ID=S.ID) ";
$arSqlSearch[] = GetFilterQuery("SR.LIST_RUBRIC_ID", $val, "N");
}
else
{
$arSqlSearch[] = " 1=0 ";
}
break;
}
}
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$arOrder = array();
foreach($aSort as $by => $ord)
{
$by = mb_strtoupper($by);
$ord = (mb_strtoupper($ord) <> "ASC"? "DESC": "ASC");
switch($by)
{
case "ID": $arOrder[$by] = "S.ID ".$ord; break;
case "DATE_INSERT": $arOrder[$by] = "S.DATE_INSERT ".$ord; break;
case "DATE_UPDATE": $arOrder[$by] = "S.DATE_UPDATE ".$ord; break;
case "DATE_CONFIRM": $arOrder[$by] = "S.DATE_CONFIRM ".$ord; break;
case "ACT": $arOrder[$by] = "S.ACTIVE ".$ord; break;
case "CONF": $arOrder[$by] = "S.CONFIRMED ".$ord; break;
case "EMAIL": $arOrder[$by] = "S.EMAIL ".$ord; break;
case "FMT": $arOrder[$by] = "S.FORMAT ".$ord; break;
case "USER": $arOrder[$by] = "S.USER_ID ".$ord; break;
case "CONFIRM_CODE": $arOrder[$by] = "S.CONFIRM_CODE ".$ord; break;
}
}
if(count($arOrder) <= 0)
$arOrder["ID"] = "S.ID DESC";
if(is_array($arNavStartParams))
{
$strSql = "
SELECT count(".($from1 <> ""? "DISTINCT S.ID": "'x'").") as C
FROM
b_subscription S
LEFT JOIN b_user U ON (S.USER_ID=U.ID)
$from1
WHERE
".$strSqlSearch;
$res_cnt = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$res_cnt = $res_cnt->Fetch();
$cnt = $res_cnt["C"];
$strSql = "
SELECT
S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED,
".$DB->DateToCharFunction("S.DATE_UPDATE")." DATE_UPDATE,
".$DB->DateToCharFunction("S.DATE_INSERT")." DATE_INSERT,
".$DB->DateToCharFunction("S.DATE_CONFIRM")." DATE_CONFIRM,
U.LOGIN USER_LOGIN,
U.NAME USER_NAME,
U.LAST_NAME USER_LAST_NAME
FROM
b_subscription S
LEFT JOIN b_user U ON (S.USER_ID=U.ID)
$from1
WHERE
$strSqlSearch
".($from1 <> ""?
"GROUP BY S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED, S.DATE_CONFIRM, S.DATE_UPDATE, S.DATE_INSERT, U.LOGIN, U.NAME, U.LAST_NAME":
""
)."
ORDER BY ".implode(", ", $arOrder);
$res = new CDBResult();
$res->NavQuery($strSql, $cnt, $arNavStartParams);
$res->is_filtered = (IsFiltered($strSqlSearch));
return $res;
}
else
{
$strSql = "
SELECT
S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED,
".$DB->DateToCharFunction("S.DATE_UPDATE")." DATE_UPDATE,
".$DB->DateToCharFunction("S.DATE_INSERT")." DATE_INSERT,
".$DB->DateToCharFunction("S.DATE_CONFIRM")." DATE_CONFIRM,
U.LOGIN USER_LOGIN,
U.NAME USER_NAME,
U.LAST_NAME USER_LAST_NAME
FROM
b_subscription S
LEFT JOIN b_user U ON (S.USER_ID=U.ID)
$from1
WHERE
$strSqlSearch
".($from1 <> ""?
"GROUP BY S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED, S.DATE_CONFIRM, S.DATE_UPDATE, S.DATE_INSERT, U.LOGIN, U.NAME, U.LAST_NAME":
""
)."
ORDER BY ".implode(", ", $arOrder);
$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$res->is_filtered = (IsFiltered($strSqlSearch));
return $res;
}
}