- Модуль: forum
- Путь к файлу: ~/bitrix/modules/forum/classes/general/forum_new.php
- Класс: CAllForumNew
- Вызов: CAllForumNew::GetAccessPermsList
static function GetAccessPermsList($arOrder = array("ID"=>"ASC"), $arFilter = array())
{
global $DB;
$arSqlSearch = array();
$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 "ID":
case "FORUM_ID":
case "GROUP_ID":
if (intval($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FP.".$key." IS NULL OR FP.".$key."<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FP.".$key." IS NULL OR NOT ":"")."FP.".$key." ".$strOperation." ".intval($val)." ";
break;
case "PERMISSION":
if ($val == '')
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FP.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(FP.".$key.")<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FP.".$key." IS NULL OR NOT ":"")."FP.".$key." ".$strOperation." '".$DB->ForSql($val)."' ";
break;
}
}
if (count($arSqlSearch) > 0)
$strSqlSearch = " AND (".implode(" AND ", $arSqlSearch).") ";
foreach ($arOrder as $by=>$order)
{
$by = mb_strtoupper($by);
$order = mb_strtoupper($order);
if ($order!="ASC") $order = "DESC";
if ($by == "FORUM_ID") $arSqlOrder[] = " FP.FORUM_ID ".$order." ";
elseif ($by == "GROUP_ID") $arSqlOrder[] = " FP.GROUP_ID ".$order." ";
elseif ($by == "PERMISSION") $arSqlOrder[] = " FP.PERMISSION ".$order." ";
else
{
$arSqlOrder[] = " FP.ID ".$order." ";
$by = "ID";
}
}
DelDuplicateSort($arSqlOrder);
if (count($arSqlOrder) > 0)
$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
$strSql =
"SELECT FP.ID, FP.FORUM_ID, FP.GROUP_ID, FP.PERMISSION
FROM b_forum_perms FP
WHERE 1 = 1
".$strSqlSearch."
".$strSqlOrder;
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
return $db_res;
}