static function GetList($arOrder = Array("SORT"=>"ASC"), $arFilter = Array(), $arAddParams = array())
{
global $DB;
$arSqlSearch = Array();
$arSqlSearchFrom = Array();
$strSqlSelect = "";
$strSqlSearchFrom = "";
$strSqlSearch = "";
$arSqlOrder = Array();
$strSqlOrder = "";
$arFilter = (is_array($arFilter) ? $arFilter : array());
foreach ($arFilter as $key => $val)
{
$key_res = CForumNew::GetFilterOperation($key);
$key = mb_strtoupper($key_res["FIELD"]);
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
switch ($key)
{
case "LID":
case "SITE_ID":
$val = trim($val);
if ($val <> '')
{
$arSqlSearch[] = "F.ID = F2S.FORUM_ID AND ".($strNegative=="Y"?" NOT ":"")."(F2S.SITE_ID ".$strOperation." '".$DB->ForSql($val)."' )";
$arSqlSearchFrom[] = "b_forum2site F2S";
}
break;
case "INDEXATION":
case "DEDUPLICATION":
case "ACTIVE":
case "XML_ID":
if ($val == '')
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(F.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(F.".$key.")<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" F.".$key." IS NULL OR NOT ":"")."(F.".$key." ".$strOperation." '".$DB->ForSql($val)."' )";
break;
case "ID":
case "FORUM_GROUP_ID":
case "TOPICS":
case "POSTS":
case "POSTS_UNAPPROVED":
if ($strOperation == "IN")
{
if (is_array($val))
{
$val_int = array();
foreach ($val as $v)
$val_int[] = intval($v);
$val = implode(", ", $val_int);
}
else
{
$val = intval($val);
}
$val = trim($val);
}
if (($strOperation == "IN" && $val == '') || intval($val) <= 0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(F.".$key." IS NULL OR F.".$key."<=0)";
elseif ($strOperation == "IN")
$arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(F.".$key." IN (".$DB->ForSql($val)."))";
else
$arSqlSearch[] = ($strNegative=="Y"?" F.".$key." IS NULL OR NOT ":"")."(F.".$key." ".$strOperation." ".intval($val)." )";
break;
case "TEXT":
$arSqlSearch[] = " (".GetFilterQuery("F.NAME,F.DESCRIPTION", $DB->ForSql($val), "Y").") ";
break;
case "PERMS":
if (is_array($val) && count($val)>1)
{
$val[1] = mb_strtoupper(mb_substr($val[1], 0, 1));
if (mb_strpos("AEIMQUY", $val[1]) !== false)
{
$arSqlSearch[] = "F.ID = FP.FORUM_ID AND FP.GROUP_ID IN (".intval($val[0]).") AND FP.PERMISSION > '".$DB->ForSql($val[1])."' ";
$arSqlSearchFrom[] = "b_forum_perms FP";
}
}
break;
}
}
if (count($arSqlSearch) > 0)
$strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).") ";
if (count($arSqlSearchFrom) > 0)
$strSqlSearchFrom = ", ".implode(", ", $arSqlSearchFrom);
foreach ($arOrder as $by=>$order)
{
$by = mb_strtoupper($by);
$order = mb_strtoupper($order);
if ($order!="ASC") $order = "DESC";
if ($by == "ID") $arSqlOrder[] = " F.ID ".$order." ";
elseif ($by == "NAME") $arSqlOrder[] = " F.NAME ".$order." ";
elseif ($by == "ACTIVE") $arSqlOrder[] = " F.ACTIVE ".$order." ";
elseif ($by == "MODERATION") $arSqlOrder[] = " F.MODERATION ".$order." ";
elseif ($by == "FORUM_GROUP_ID") $arSqlOrder[] = " F.FORUM_GROUP_ID ".$order." ";
elseif ($by == "TOPICS") $arSqlOrder[] = " F.TOPICS ".$order." ";
elseif ($by == "POSTS") $arSqlOrder[] = " F.POSTS ".$order." ";
elseif ($by == "POSTS_UNAPPROVED") $arSqlOrder[] = " F.POSTS_UNAPPROVED ".$order." ";
elseif ($by == "LAST_POST_DATE") $arSqlOrder[] = " F.LAST_POST_DATE ".$order." ";
else
{
$arSqlOrder[] = " F.SORT ".$order." ";
$by = "SORT";
}
}
DelDuplicateSort($arSqlOrder);
if (count($arSqlOrder) > 0)
$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
$strSql =
"SELECT F_FORUM.*, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION, F.DEDUPLICATION, F.ALLOW_MOVE_TOPIC, '' as LID,
F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.LAST_POST_DATE", "FULL")." as LAST_POST_DATE,
F.LAST_MESSAGE_ID, F.LAST_MESSAGE_ID as MID,
F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE,
F.ABS_LAST_MESSAGE_ID, F.SORT, F.ORDER_BY,
F.ORDER_DIRECTION, F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU,
F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_TABLE, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE,
F.ALLOW_ALIGN, F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2,
F.EVENT3, F.ALLOW_NL2BR, '' as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT, F.ALLOW_TOPIC_TITLED,
F.ALLOW_SIGNATURE,
F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.XML_ID
FROM
(
SELECT F.ID ".$strSqlSelect."
FROM b_forum F
".$strSqlSearchFrom."
WHERE (1=1 ".$strSqlSearch.")
GROUP BY F.ID
) F_FORUM
INNER JOIN b_forum F ON (F_FORUM.ID = F.ID)
".$strSqlOrder;
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
return $db_res;
}