6 public static function GetListEx($arOrder = Array(
"ID"=>
"ASC"),
$arFilter = Array(), $bCount =
false, $iNum = 0, $arAddParams =
array())
9 $arSqlSearch =
array();
10 $arSqlOrder =
array();
15 if (is_array($bCount) && empty($arAddParams)){
16 $arAddParams = $bCount;
20 $arAddParams = (is_array($arAddParams) ? $arAddParams :
array($arAddParams));
21 if (
is_set($arAddParams,
"nameTemplate"))
22 $arAddParams[
"sNameTemplate"] = $arAddParams[
"nameTemplate"];
23 $arAddParams[
"bCount"] = (!!$bCount || (isset($arAddParams[
"bCount"]) && !!$arAddParams[
"bCount"]));
24 $arAddParams[
"nTopCount"] = ($iNum > 0 ? $iNum : (isset($arAddParams[
"nTopCount"]) && $arAddParams[
"nTopCount"] > 0 ? $arAddParams[
"nTopCount"] : 0));
29 $key = mb_strtoupper($key_res[
"FIELD"]);
30 $strNegative = $key_res[
"NEGATIVE"];
31 $strOperation = $key_res[
"OPERATION"];
41 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(PM.".
$key.
" IS NULL OR PM.".
$key.
"<=0)";
42 elseif (mb_strtoupper($strOperation) ==
"IN")
43 $arSqlSearch[] = ($strNegative==
"Y"?
" PM.".$key.
" IS NULL OR NOT ":
"").
"(PM.".
$key.
" ".$strOperation.
" (".intval(
$val).
") )";
45 $arSqlSearch[] = ($strNegative==
"Y"?
" PM.".$key.
" IS NULL OR NOT ":
"").
"(PM.".
$key.
" ".$strOperation.
" ".intval(
$val).
" )";
48 if (COption::GetOptionString(
"forum",
"UsePMVersion",
"2") == 2)
51 if (is_array(
$val) && intval(
$val[
"USER_ID"]) > 0)
52 $user_id = intval(
$val[
"USER_ID"]);
54 $user_id = intval(
$val);
56 "(PM.USER_ID=".$user_id.
" AND ((PM.FOLDER_ID=2) OR (PM.FOLDER_ID=3)))";
61 "((PM.AUTHOR_ID=".intval(
$val).
") AND (PM.IS_READ='N')) OR (PM.USER_ID=".intval(
$val).
" AND (PM.FOLDER_ID=2))";
69 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(PM.".
$key.
" IS NULL OR LENGTH(PM.".
$key.
")<=0)";
70 elseif (mb_strtoupper($strOperation) ==
"IN")
71 $arSqlSearch[] = ($strNegative==
"Y"?
" PM.".$key.
" IS NULL OR NOT ":
"").
"(PM.".
$key.
" ".$strOperation.
" ('".
$DB->ForSql(
$val).
"') )";
73 $arSqlSearch[] = ($strNegative==
"Y"?
" PM.".$key.
" IS NULL OR NOT ":
"").
"(PM.".
$key.
" ".$strOperation.
" '".
$DB->ForSql(
$val).
"' )";
77 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(PM.".
$key.
" IS NULL OR LENGTH(PM.".
$key.
")<=0)";
79 $arSqlSearch[] = ($strNegative==
"Y"?
" PM.".$key.
" IS NULL OR NOT ":
"").
"(PM.".
$key.
" ".$strOperation.
" ".
$DB->CharToDateFunction(
$DB->ForSql(
$val),
"FULL").
" )";
83 if (!empty($arSqlSearch))
84 $strSqlSearch =
" AND (".implode(
") AND (", $arSqlSearch).
") ";
87 if ($arAddParams[
"bCount"] ||
is_set($arAddParams,
"bDescPageNumbering"))
89 $strSql =
"SELECT COUNT(PM.ID) AS CNT FROM b_forum_private_message PM WHERE (1=1) ".$strSqlSearch;
92 if ($arAddParams[
"bCount"])
96 foreach ($arOrder as $by=>
$order)
98 $by = mb_strtoupper($by);
102 if ($by ==
"AUTHOR_NAME") $arSqlOrder[] =
" AUTHOR_NAME ".$order.
" ";
103 elseif ($by ==
"RECIPIENT_NAME") $arSqlOrder[] =
" RECIPIENT_NAME ".$order.
" ";
104 elseif ($by ==
"AUTHOR_ID") $arSqlOrder[] =
" PM.AUTHOR_ID ".$order.
" ";
105 elseif ($by ==
"RECIPIENT_ID") $arSqlOrder[] =
" PM.RECIPIENT_ID ".$order.
" ";
106 elseif ($by ==
"POST_DATE") $arSqlOrder[] =
" PM.POST_DATE ".$order.
" ";
107 elseif ($by ==
"POST_SUBJ") $arSqlOrder[] =
" PM.POST_SUBJ ".$order.
" ";
108 elseif ($by ==
"POST_MESSAGE") $arSqlOrder[] =
" PM.POST_MESSAGE ".$order.
" ";
109 elseif ($by ==
"IS_READ") $arSqlOrder[] =
" PM.IS_READ ".$order.
" ";
110 elseif ($by ==
"USE_SMILES") $arSqlOrder[] =
" PM.USE_SMILES ".$order.
" ";
113 $arSqlOrder[] =
" PM.POST_DATE ".$order.
" ";
118 if(!empty($arSqlOrder))
119 $strSqlOrder =
" ORDER BY ".implode(
", ", $arSqlOrder);
123 PM.ID, PM.POST_SUBJ, PM.POST_MESSAGE, PM.FOLDER_ID, PM.IS_READ, PM.USE_SMILES, PM.REQUEST_IS_READ,
124 ".$DB->DateToCharFunction(
"PM.POST_DATE",
"FULL").
" as POST_DATE,
127 PM.AUTHOR_ID, U.EMAIL AS AUTHOR_EMAIL, U.LOGIN AS AUTHOR_LOGIN,
133 PM.RECIPIENT_ID, UU.EMAIL AS RECIPIENT_EMAIL, UU.LOGIN AS RECIPIENT_LOGIN,
138 END AS RECIPIENT_NAME
139 FROM b_forum_private_message PM
140 LEFT JOIN b_forum_user FU ON (PM.AUTHOR_ID = FU.USER_ID)
141 LEFT JOIN b_forum_user FUU ON (PM.RECIPIENT_ID = FUU.USER_ID)
142 LEFT JOIN b_user U ON (PM.AUTHOR_ID = U.ID)
143 LEFT JOIN b_user UU ON (PM.RECIPIENT_ID = UU.ID)
144 WHERE 1=1 ".$strSqlSearch.
"
147 if (
is_set($arAddParams,
"bDescPageNumbering")) {
149 $db_res->NavQuery($strSql, $iCnt, $arAddParams);
151 if ($arAddParams[
"nTopCount"] > 0)
152 $strSql .=
" LIMIT 0,".$arAddParams[
"nTopCount"];