1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
topic.php
См. документацию.
1<?php
2require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/forum/classes/general/topic.php");
3
5{
6 public static function GetList($arOrder = Array("SORT"=>"ASC"), $arFilter = Array(), $bCount = false, $iNum = 0, $arAddParams = array())
7 {
8 global $DB;
9 $arOrder = (is_array($arOrder) ? $arOrder : array());
10 $arFilter = (is_array($arFilter) ? $arFilter : array());
11 $arAddParams = (is_array($arAddParams) ? $arAddParams : array($arAddParams));
12 $selectTopCount = isset($arAddParams['nTopCount']) ? (int) $arAddParams['nTopCount'] : 0;
13 $descPageNumbering = isset($arAddParams['bDescPageNumbering']) && $selectTopCount <= 0;
14 $arSqlSearch = array();
15 $arSqlSelect = array();
16 $arSqlGroup = array();
17 $arSqlOrder = array();
18 $strSqlSearch = "";
19 $strSqlSelect = "";
20 $strSqlGroup = "";
21 $strSqlOrder = "";
22 $UseGroup = false;
23
24 foreach ($arFilter as $key => $val)
25 {
27 $key = mb_strtoupper($key_res["FIELD"]);
28 $strNegative = $key_res["NEGATIVE"];
29 $strOperation = $key_res["OPERATION"];
30
31 switch ($key)
32 {
33 case "STATE":
34 case "APPROVED":
35 case "XML_ID":
36 $val = CForumNew::prepareField($strOperation, "string", $val);
37 if ($val == '')
38 $arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FT.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(FT.".$key.")<=0)";
39 else if ($strOperation == "IN")
40 $arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(FT.".$key." IN (".$val.") )";
41 else
42 $arSqlSearch[] = ($strNegative=="Y"?" FT.".$key." IS NULL OR NOT ":"")."(FT.".$key." ".$strOperation." '".$val."' )";
43 break;
44 case "ID":
45 case "USER_START_ID":
46 case "SOCNET_GROUP_ID":
47 case "OWNER_ID":
48 case "FORUM_ID":
49 case "SORT":
50 case "POSTS":
51 case "TOPICS":
52 if (($strOperation!="IN") && (intval($val) > 0))
53 $arSqlSearch[] = ($strNegative=="Y"?" FT.".$key." IS NULL OR NOT ":"")."(FT.".$key." ".$strOperation." ".intval($val)." )";
54 elseif (($strOperation =="IN") && ((is_array($val) && (array_sum($val) > 0)) || ($val <> '') ))
55 {
56 if (!is_array($val))
57 $val = explode(',', $val);
58 $val_int = array();
59 foreach ($val as $v)
60 $val_int[] = intval($v);
61 $val = implode(", ", $val_int);
62
63 $arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(FT.".$key." IN (".$DB->ForSql($val).") )";
64 }
65 else
66 $arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FT.".$key." IS NULL OR FT.".$key."<=0)";
67 break;
68 case "RENEW_TOPIC":
69// vhodnye parametry tipa array("TID"=>time);
70// pri TID = 0 peredaetsya FORUM_LAST_VISIT
71 $arSqlTemp = array();
72 $strSqlTemp = $val[0];
73 unset($val[0]);
74 if (is_array($val) && !empty($val))
75 {
76 foreach ($val as $k => $v)
77 $arSqlTemp[] = "(FT.ID=".intval($k).") AND (FT.LAST_POST_DATE > ".$DB->CharToDateFunction($DB->ForSql($v), "FULL").")";
78
79 $val_int = array();
80 foreach (array_keys($val) as $k)
81 $val_int[] = intval($k);
82 $keys = implode(", ", $val_int);
83
84 $arSqlSearch[] =
85 "(FT.ID IN (".$DB->ForSql($keys).") AND ((".implode(") OR (", $arSqlTemp).")))
86 OR
87 (FT.ID NOT IN (".$DB->ForSql($keys).") AND (FT.LAST_POST_DATE > ".$DB->CharToDateFunction($DB->ForSql($strSqlTemp), "FULL")."))";
88 }
89 break;
90 case "START_DATE":
91 case "LAST_POST_DATE":
92 if($val == '')
93 $arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FT.".$key." IS NULL)";
94 else
95 $arSqlSearch[] = ($strNegative=="Y"?" FT.".$key." IS NULL OR NOT ":"")."(FT.".$key." ".$strOperation." ".$DB->CharToDateFunction($DB->ForSql($val), "FULL").")";
96 break;
97 }
98 }
99 if (count($arSqlSearch)>0)
100 $strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).")";
101 if (count($arSqlSelect) > 0)
102 $strSqlSelect = ", ".implode(", ", $arSqlSelect);
103 if ($UseGroup)
104 {
105 foreach ($arSqlSelect as $key => $val)
106 {
107 if (mb_substr($key, 0, 1) != "!")
108 $arSqlGroup[$key] = $val;
109 }
110 if (!empty($arSqlGroup)):
111 $strSqlGroup = ", ".implode(", ", $arSqlGroup);
112 endif;
113 }
114 foreach ($arOrder as $by => $order)
115 {
116 $by = mb_strtoupper($by);
117 $order = mb_strtoupper($order);
118 if ($order!="ASC") $order = "DESC";
119 if (in_array($by, array("ID", "FORUM_ID", "TOPIC_ID", "TITLE", "TAGS", "DESCRIPTION", "ICON",
120 "STATE", "APPROVED", "SORT", "VIEWS", "USER_START_ID", "USER_START_NAME", "START_DATE",
121 "POSTS", "LAST_POSTER_ID", "LAST_POSTER_NAME", "LAST_POST_DATE", "LAST_MESSAGE_ID",
122 "POSTS_UNAPPROVED", "ABS_LAST_POSTER_ID", "ABS_LAST_POSTER_NAME", "ABS_LAST_POST_DATE", "ABS_LAST_MESSAGE_ID",
123 "SOCNET_GROUP_ID", "OWNER_ID", "HTML"))):
124 $arSqlOrder[] = "FT.".$by." ".$order;
125 else:
126 $arSqlOrder[] = "FT.SORT ".$order;
127 $by = "SORT";
128 endif;
129 }
130 $arSqlOrder = array_unique($arSqlOrder);
131 DelDuplicateSort($arSqlOrder);
132 if (count($arSqlOrder) > 0)
133 $strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
134
135 if ($bCount || $descPageNumbering)
136 {
137 $strSql =
138 "SELECT COUNT(FT.ID) as CNT
139 FROM b_forum_topic FT
140 WHERE 1 = 1
141 ".$strSqlSearch;
142 $db_res = $DB->Query($strSql);
143 $iCnt = 0;
144 if ($ar_res = $db_res->Fetch()):
145 $iCnt = intval($ar_res["CNT"]);
146 endif;
147 if ($bCount):
148 return $iCnt;
149 endif;
150 }
151
152 $arSQL = array("select" => "", "join" => "");
153 if (!empty($arAddParams["sNameTemplate"]))
154 {
155 $arSQL = array_merge_recursive(
157 $arAddParams, array(
158 "sUserTablePrefix" => "U_START.",
159 "sForumUserTablePrefix" => "FU_START.",
160 "sFieldName" => "USER_START_NAME_FRMT",
161 "sUserIDFieldName" => "FT.USER_START_ID"))),
163 $arAddParams, array(
164 "sUserTablePrefix" => "U_LAST.",
165 "sForumUserTablePrefix" => "FU_LAST.",
166 "sFieldName" => "LAST_POSTER_NAME_FRMT",
167 "sUserIDFieldName" => "FT.LAST_POSTER_ID"))),
169 $arAddParams, array(
170 "sUserTablePrefix" => "U_ABS_LAST.",
171 "sForumUserTablePrefix" => "FU_ABS_LAST.",
172 "sFieldName" => "ABS_LAST_POSTER_NAME_FRMT",
173 "sUserIDFieldName" => "FT.ABS_LAST_POSTER_ID"))));
174 $arSQL["select"] = ",\n\t".implode(",\n\t", $arSQL["select"]);
175 $arSQL["join"] = "\n".implode("\n", $arSQL["join"]);
176 }
177
178 if ($UseGroup)
179 {
180 $strSql =
181 " SELECT F_T.*, FT.FORUM_ID, FT.TOPIC_ID, FT.TITLE, FT.TAGS, FT.DESCRIPTION, FT.ICON, \n".
182 " FT.STATE, FT.APPROVED, FT.SORT, FT.VIEWS, FT.USER_START_ID, FT.USER_START_NAME, \n".
183 " ".CForumNew::Concat("-", array("FT.ID", "FT.TITLE_SEO"))." as TITLE_SEO, \n".
184 " ".$DB->DateToCharFunction("FT.START_DATE", "FULL")." as START_DATE, \n".
185 " FT.POSTS, FT.LAST_POSTER_ID, FT.LAST_POSTER_NAME, \n".
186 " ".$DB->DateToCharFunction("FT.LAST_POST_DATE", "FULL")." as LAST_POST_DATE, \n".
187 " FT.LAST_POST_DATE AS LAST_POST_DATE_ORIGINAL, FT.LAST_MESSAGE_ID, \n".
188 " FT.POSTS_UNAPPROVED, FT.ABS_LAST_POSTER_ID, FT.ABS_LAST_POSTER_NAME, \n".
189 " ".$DB->DateToCharFunction("FT.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE, \n".
190 " FT.ABS_LAST_POST_DATE AS ABS_LAST_POST_DATE_ORIGINAL, FT.ABS_LAST_MESSAGE_ID, \n".
191 " FT.SOCNET_GROUP_ID, FT.OWNER_ID, FT.HTML, FT.XML_ID".$arSQL["select"]." \n".
192 " FROM ( \n".
193 " SELECT FT.ID".$strSqlSelect." \n".
194 " FROM b_forum_topic FT \n".
195 " WHERE 1 = 1 ".$strSqlSearch." \n".
196 " GROUP BY FT.ID ".$strSqlGroup." \n".
197 " ) F_T \n".
198 " INNER JOIN b_forum_topic FT ON (F_T.ID = FT.ID) ".$arSQL["join"]." \n".
199 $strSqlOrder;
200 }
201 else
202 {
203 $strSql =
204 " SELECT FT.ID, FT.FORUM_ID, FT.TOPIC_ID, FT.TITLE, FT.TAGS, FT.DESCRIPTION, FT.ICON, \n".
205 " FT.STATE, FT.APPROVED, FT.SORT, FT.VIEWS, FT.USER_START_ID, FT.USER_START_NAME, \n".
206 " ".CForumNew::Concat("-", array("FT.ID", "FT.TITLE_SEO"))." as TITLE_SEO, \n".
207 " ".$DB->DateToCharFunction("FT.START_DATE", "FULL")." as START_DATE, \n".
208 " FT.POSTS, FT.LAST_POSTER_ID, FT.LAST_POSTER_NAME, \n".
209 " ".$DB->DateToCharFunction("FT.LAST_POST_DATE", "FULL")." as LAST_POST_DATE, \n".
210 " FT.LAST_POST_DATE AS LAST_POST_DATE_ORIGINAL, FT.LAST_MESSAGE_ID, \n".
211 " FT.POSTS_UNAPPROVED, FT.ABS_LAST_POSTER_ID, FT.ABS_LAST_POSTER_NAME, \n".
212 " ".$DB->DateToCharFunction("FT.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE, \n".
213 " FT.ABS_LAST_POST_DATE AS ABS_LAST_POST_DATE_ORIGINAL, FT.ABS_LAST_MESSAGE_ID, \n".
214 " FT.SOCNET_GROUP_ID, FT.OWNER_ID, FT.HTML, FT.XML_ID".$strSqlSelect.$arSQL["select"]." \n".
215 " FROM b_forum_topic FT ".$arSQL["join"]. " \n".
216 " WHERE 1 = 1 ".$strSqlSearch." \n".
217 $strSqlOrder;
218 }
219
220 $limit = $iNum > 0 ? (int)$iNum : $selectTopCount;
221 if ($limit > 0)
222 {
224 if ($connection->getType() === 'pgsql')
225 {
226 $strSql .= "\nLIMIT ".$limit;
227 }
228 else
229 {
230 $strSql .= "\nLIMIT 0,".$limit;
231 }
232 }
233
234 if (!$iNum && $descPageNumbering)
235 {
236 $db_res = new CDBResult();
237 $db_res->NavQuery($strSql, $iCnt, $arAddParams);
238 }
239 else
240 {
241 $db_res = $DB->Query($strSql);
242 }
243 return new _CTopicDBResult($db_res, $arAddParams);
244 }
245
246 public static function GetListEx($arOrder = Array("SORT"=>"ASC"), $arFilter = Array(), $bCount = false, $iNum = 0, $arAddParams = [])
247 {
248 global $DB, $USER;
249 $arOrder = (is_array($arOrder) ? $arOrder : array());
250 $arFilter = (is_array($arFilter) ? $arFilter : array());
251 $arSqlSearch = array();
252 $arSqlFrom = array();
253 $arSqlSelect = array();
254 $arSqlGroup = array();
255 $arSqlOrder = array();
256 $strSqlSearch = "";
257 $strSqlFrom = "";
258 $strSqlSelect = "";
259 $strSqlGroup = "";
260 $strSqlOrder = "";
261 $UseGroup = false;
262 $arAddParams = (is_array($arAddParams) ? $arAddParams : array($arAddParams));
263 $selectTopCount = isset($arAddParams['nTopCount']) ? (int) $arAddParams['nTopCount'] : 0;
264 $descPageNumbering = isset($arAddParams['bDescPageNumbering']) && $selectTopCount <= 0;
265
266 foreach ($arFilter as $key => $val)
267 {
269 $key = mb_strtoupper($key_res["FIELD"]);
270 $strNegative = $key_res["NEGATIVE"];
271 $strOperation = $key_res["OPERATION"];
272 switch ($key)
273 {
274 case "STATE":
275 case "XML_ID":
276 case "APPROVED":
277 $val = CForumNew::prepareField($strOperation, "string", $val);
278 if ($val == '')
279 $arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FT.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(FT.".$key.")<=0)";
280 else if ($strOperation == "IN")
281 $arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(FT.".$key." IN (".$val.") )";
282 else
283 $arSqlSearch[] = ($strNegative=="Y"?" FT.".$key." IS NULL OR NOT ":"")."(FT.".$key." ".$strOperation." '".$val."' )";
284 break;
285 case "ID":
286 case "FORUM_ID":
287 case "SOCNET_GROUP_ID":
288 case "OWNER_ID":
289 case "USER_START_ID":
290 case "SORT":
291 case "POSTS":
292 case "TOPICS":
293 if (($strOperation!="IN")&&(intval($val)>0))
294 $arSqlSearch[] = ($strNegative=="Y"?" FT.".$key." IS NULL OR NOT ":"")."(FT.".$key." ".$strOperation." ".intval($val)." )";
295 elseif (($strOperation =="IN") && ((is_array($val) && (array_sum($val) > 0)) || (is_string($val) && $val <> '') ))
296 {
297 if (!is_array($val))
298 $val = explode(',', $val);
299 $val_int = array();
300 foreach ($val as $v)
301 $val_int[] = intval($v);
302 $val = implode(", ", $val_int);
303 $arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(FT.".$key." IN (".$DB->ForSql($val).") )";
304 }
305 else
306 $arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FT.".$key." IS NULL OR FT.".$key."<=0)";
307 break;
308 case "TITLE_ALL":
309 $arSqlSearch[] = GetFilterQuery("FT.TITLE, FT.DESCRIPTION", $val);
310 break;
311 case "TITLE":
312 case "DESCRIPTION":
313 $arSqlSearch[] = GetFilterQuery("FT.".$key, $val);
314 $arSqlSearch[] = GetFilterQuery("FT.".$key, $val);
315 break;
316 case "START_DATE":
317 case "LAST_POST_DATE":
318 case "ABS_LAST_POST_DATE":
319 if($val == '')
320 $arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FT.".$key." IS NULL)";
321 else
322 $arSqlSearch[] = ($strNegative=="Y"?" FT.".$key." IS NULL OR NOT ":"")."(FT.".$key." ".$strOperation." ".$DB->CharToDateFunction($DB->ForSql($val), "FULL").")";
323 break;
324 case "USER_ID":
325 $arSqlSelect["LAST_VISIT"] = $DB->DateToCharFunction("FUT.LAST_VISIT", "FULL");
326 $arSqlFrom["FUT"] = "LEFT JOIN b_forum_user_topic FUT ON (".(
327 $val == '' ?
328 ($strNegative=="Y"?"NOT":"")."(FUT.USER_ID IS NULL)"
329 :
330 "FUT.USER_ID=".intval($val)
331 )." AND FUT.FORUM_ID = FT.FORUM_ID AND FUT.TOPIC_ID = FT.ID)";
332 break;
333 case "RENEW_TOPIC":
334 if (($val <> '') && array_key_exists("FUT", $arSqlFrom))
335 {
336 $arSqlSearch[] =
337 "((FT.LAST_POST_DATE ".$strOperation." ".$DB->CharToDateFunction($DB->ForSql($val), "FULL").") AND
338 (
339 (LAST_VISIT IS NULL) OR
340 (LAST_VISIT < ".$DB->CharToDateFunction($DB->ForSql($val), "FULL").")
341 )
342 )
343 OR
344 ((FT.LAST_POST_DATE > FUT.LAST_VISIT) AND
345 (
346 (LAST_VISIT IS NOT NULL) AND
347 (LAST_VISIT > ".$DB->CharToDateFunction($DB->ForSql($val), "FULL").")
348 )
349 )";
350 }
351 break;
352 case "PERMISSION":
353 if (!is_array($val))
354 $val = explode(',', $val);
355 if (empty($val)):
356 $val = $GLOBALS["USER"]->GetGroups();
357 elseif (is_array($val)):
358 $val_int = array();
359 foreach ($val as $v)
360 $val_int[] = intval($v);
361 $val = implode(", ", $val_int);
362 endif;
363 $arSqlFrom["FPP"] =
364 " INNER JOIN ( \n".
365 " SELECT FPP.FORUM_ID, MAX(FPP.PERMISSION) AS PERMISSION \n".
366 " FROM b_forum_perms FPP \n".
367 " WHERE FPP.GROUP_ID IN (".$DB->ForSql($val).") AND FPP.PERMISSION > 'A' \n".
368 " GROUP BY FPP.FORUM_ID) FPP ON (FPP.FORUM_ID = FT.FORUM_ID) ";
369 $arSqlSelect["PERMISSION"] = "FPP.PERMISSION";
370 break;
371 case "RENEW":
372 $val = (is_array($val) ? $val : array("USER_ID" => $val));
373 $val["USER_ID"] = intval($val["USER_ID"]);
374 if ($val["USER_ID"] <= 0):
375 break;
376 endif;
377 $perms = "NOT_CHECK";
378 $arUserGroups = $GLOBALS["USER"]->GetGroups();
379 if (is_set($arFilter, "PERMISSION")):
380 $perms = "NORMAL";
381 elseif (is_set($arFilter, "APPROVED") && $arFilter["APPROVED"] == "Y"):
382 $perms = "ONLY_APPROVED";
383 endif;
384
385 $arSqlFrom["FUT"] = "LEFT JOIN b_forum_user_topic FUT ON (FUT.USER_ID=".intval($val["USER_ID"])." AND FUT.FORUM_ID = FT.FORUM_ID AND FUT.TOPIC_ID = FT.ID)";
386 $arSqlFrom["FUF"] = "LEFT JOIN b_forum_user_forum FUF ON (FUF.USER_ID=".$val["USER_ID"]." AND FUF.FORUM_ID = FT.FORUM_ID)";
387 $arSqlFrom["FUF_ALL"] = "LEFT JOIN b_forum_user_forum FUF_ALL ON (FUF_ALL.USER_ID=".$val["USER_ID"]." AND FUF_ALL.FORUM_ID = 0)";
388
389 $arSqlSearch[] = "FT.STATE != 'L'";
390 $arSqlSearch[] = "
391 (
392 FUT.LAST_VISIT IS NULL
393 AND
394 (
395 (FUF_ALL.LAST_VISIT IS NULL AND FUF.LAST_VISIT IS NULL)
396 OR
397 (
398 FUF.LAST_VISIT IS NOT NULL
399 AND
400 (
401 ".
402 ( $perms == "NORMAL" ? "
403 (FPP.PERMISSION >= 'Q' AND FUF.LAST_VISIT < FT.ABS_LAST_POST_DATE)
404 OR
405 (FT.APPROVED = 'Y' AND FUF.LAST_VISIT < FT.LAST_POST_DATE)
406 " :
407 ( $perms == "NOT_CHECK" ? "
408 (FUF.LAST_VISIT < FT.ABS_LAST_POST_DATE OR FUF.LAST_VISIT < FT.LAST_POST_DATE)
409 " :
410 "
411 (FT.APPROVED = 'Y' AND FUF.LAST_VISIT < FT.LAST_POST_DATE)
412 "
413 )
414 )
415 ."
416 )
417 )
418 OR
419 (
420 FUF.LAST_VISIT IS NULL AND FUF_ALL.LAST_VISIT IS NOT NULL
421 AND
422 (
423 ".
424 ( $perms == "NORMAL" ? "
425 (FPP.PERMISSION >= 'Q' AND FUF_ALL.LAST_VISIT < FT.ABS_LAST_POST_DATE)
426 OR
427 (FT.APPROVED = 'Y' AND FUF_ALL.LAST_VISIT < FT.LAST_POST_DATE)
428 " :
429 ( $perms == "NOT_CHECK" ? "
430 (FUF_ALL.LAST_VISIT < FT.ABS_LAST_POST_DATE OR FUF_ALL.LAST_VISIT < FT.LAST_POST_DATE)
431 " :
432 "
433 (FT.APPROVED = 'Y' AND FUF_ALL.LAST_VISIT < FT.LAST_POST_DATE)
434 "
435 )
436 )
437 ."
438 )
439 )
440 )
441 )
442 OR
443 (
444 FUT.LAST_VISIT IS NOT NULL
445 AND
446 (
447 ".
448 ( $perms == "NORMAL" ? "
449 (FPP.PERMISSION >= 'Q' AND FUT.LAST_VISIT < FT.ABS_LAST_POST_DATE)
450 OR
451 (FT.APPROVED = 'Y' AND FUT.LAST_VISIT < FT.LAST_POST_DATE)
452 " :
453 ( $perms == "NOT_CHECK" ? "
454 (FUT.LAST_VISIT < FT.ABS_LAST_POST_DATE OR FUT.LAST_VISIT < FT.LAST_POST_DATE)
455 " :
456 "
457 (FT.APPROVED = 'Y' AND FUT.LAST_VISIT < FT.LAST_POST_DATE)
458 "
459 )
460 )
461 ." )
462 )";
463 break;
464 case "PERMISSION_STRONG":
465 $arSqlFrom["FP"] = "LEFT JOIN b_forum_perms FP ON (FP.FORUM_ID=FT.FORUM_ID)";
466 $arSqlSearch[] = "FP.GROUP_ID IN (".$DB->ForSql($USER->GetGroups()).") AND (FP.PERMISSION IN ('Q','U','Y'))";
467 $UseGroup = true;
468 break;
469 }
470 }
471 if (count($arSqlSearch)>0)
472 $strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).")";
473 if (count($arSqlSelect) > 0)
474 {
475 $res = array();
476 foreach ($arSqlSelect as $key => $val)
477 {
478 if (mb_substr($key, 0, 1) == "!")
479 $key = mb_substr($key, 1);
480 if ($key != $val)
481 $res[] = $val." AS ".$key;
482 else
483 $res[] = $val;
484 }
485 $strSqlSelect = ", ".implode(", ", $res);
486 }
487 if (count($arSqlFrom) > 0)
488 $strSqlFrom = implode("\n", $arSqlFrom);
489 if ($UseGroup)
490 {
491 foreach ($arSqlSelect as $key => $val)
492 {
493 if (mb_substr($key, 0, 1) != "!")
494 $arSqlGroup[$key] = $val;
495 }
496 if (!empty($arSqlGroup)):
497 $strSqlGroup = ", ".implode(", ", $arSqlGroup);
498 endif;
499 }
500
501 foreach ($arOrder as $by => $order)
502 {
503 $by = mb_strtoupper($by);
504 $order = mb_strtoupper($order);
505 if ($order!="ASC") $order = "DESC";
506 if (in_array($by, array("ID", "FORUM_ID", "TOPIC_ID", "TITLE", "TAGS", "DESCRIPTION", "ICON",
507 "STATE", "APPROVED", "SORT", "VIEWS", "USER_START_ID", "USER_START_NAME", "START_DATE",
508 "POSTS", "LAST_POSTER_ID", "LAST_POSTER_NAME", "LAST_POST_DATE", "LAST_MESSAGE_ID",
509 "POSTS_UNAPPROVED", "ABS_LAST_POSTER_ID", "ABS_LAST_POSTER_NAME", "ABS_LAST_POST_DATE", "ABS_LAST_MESSAGE_ID",
510 "SOCNET_GROUP_ID", "OWNER_ID", "HTML", "XML_ID"))):
511 $arSqlOrder[] = "FT.".$by." ".$order;
512 elseif ($by == "FORUM_NAME"):
513 $arSqlOrder[] = "F.NAME ".$order;
514 else:
515 $arSqlOrder[] = "FT.SORT ".$order;
516 $by = "SORT";
517 endif;
518 }
519 $arSqlOrder = array_unique($arSqlOrder);
520 DelDuplicateSort($arSqlOrder);
521 if (count($arSqlOrder) > 0):
522 $strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
523 endif;
524
525 if ($bCount || $descPageNumbering)
526 {
527 $strSql = "SELECT COUNT(FT.ID) as CNT FROM b_forum_topic FT ";
528
529 $arCountSqlFrom = $arSqlFrom;
530 if (isset($arSqlFrom['FUT']) && (mb_strpos($strSqlSearch, "FUT.") === false))
531 unset($arCountSqlFrom['FUT']);
532 $strSqlCountFrom = implode("\n", $arCountSqlFrom);
533
534 $strSql .= $strSqlCountFrom . " WHERE 1 = 1 ".$strSqlSearch;
535
536 $db_res = $DB->Query($strSql);
537 $iCnt = 0;
538 if ($ar_res = $db_res->Fetch())
539 {
540 $iCnt = intval($ar_res["CNT"]);
541 }
542 if ($bCount)
543 return $iCnt;
544 }
545 $arSQL = array("select" => "", "join" => "");
546 if (!empty($arAddParams["sNameTemplate"]))
547 {
548 $arSQL = array_merge_recursive(
550 $arAddParams, array(
551 "sUserTablePrefix" => "U_START.",
552 "sForumUserTablePrefix" => "FU_START.",
553 "sFieldName" => "USER_START_NAME_FRMT",
554 "sUserIDFieldName" => "FT.USER_START_ID"))),
556 $arAddParams, array(
557 "sUserTablePrefix" => "U_LAST.",
558 "sForumUserTablePrefix" => "FU_LAST.",
559 "sFieldName" => "LAST_POSTER_NAME_FRMT",
560 "sUserIDFieldName" => "FT.LAST_POSTER_ID"))),
562 $arAddParams, array(
563 "sUserTablePrefix" => "U_ABS_LAST.",
564 "sForumUserTablePrefix" => "FU_ABS_LAST.",
565 "sFieldName" => "ABS_LAST_POSTER_NAME_FRMT",
566 "sUserIDFieldName" => "FT.ABS_LAST_POSTER_ID"))));
567 $arSQL["select"] = ",\n\t".implode(",\n\t", $arSQL["select"]);
568 $arSQL["join"] = "\n".implode("\n", $arSQL["join"]);
569 }
570
571 if ($UseGroup)
572 {
573 $strSql =
574 " SELECT F_T.*, FT.FORUM_ID, FT.TOPIC_ID, FT.TITLE, FT.TAGS, FT.DESCRIPTION, FT.ICON, \n".
575 " FT.STATE, FT.APPROVED, FT.SORT, FT.VIEWS, FT.USER_START_ID, FT.USER_START_NAME, \n".
576 " ".CForumNew::Concat("-", array("FT.ID", "FT.TITLE_SEO"))." as TITLE_SEO, \n".
577 " ".$DB->DateToCharFunction("FT.START_DATE", "FULL")." as START_DATE, \n".
578 " FT.POSTS, FT.LAST_POSTER_ID, FT.LAST_POSTER_NAME, \n".
579 " ".$DB->DateToCharFunction("FT.LAST_POST_DATE", "FULL")." as LAST_POST_DATE, \n".
580 " FT.LAST_POST_DATE AS LAST_POST_DATE_ORIGINAL, FT.LAST_MESSAGE_ID, \n".
581 " FT.POSTS_UNAPPROVED, FT.ABS_LAST_POSTER_ID, FT.ABS_LAST_POSTER_NAME, \n".
582 " ".$DB->DateToCharFunction("FT.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE, \n".
583 " FT.ABS_LAST_POST_DATE AS ABS_LAST_POST_DATE_ORIGINAL, FT.ABS_LAST_MESSAGE_ID, \n".
584 " FT.SOCNET_GROUP_ID, FT.OWNER_ID, FT.HTML, FT.XML_ID, \n".
585 " F.NAME as FORUM_NAME, \n".
586 " '' as IMAGE, '' as IMAGE_DESCR ".$arSQL["select"]." \n".
587 " FROM \n".
588 " ( \n".
589 " SELECT FT.ID".$strSqlSelect." \n".
590 " FROM b_forum_topic FT \n".
591 " LEFT JOIN b_forum F ON (FT.FORUM_ID = F.ID) \n".
592 " ".$strSqlFrom." \n".
593 " WHERE 1 = 1 ".$strSqlSearch." \n".
594 " GROUP BY FT.ID".$strSqlGroup." \n".
595 " ) F_T \n".
596 " INNER JOIN b_forum_topic FT ON (F_T.ID = FT.ID) \n".
597 " LEFT JOIN b_forum F ON (FT.FORUM_ID = F.ID) ".$arSQL["join"]." \n".
598 $strSqlOrder;
599 }
600 else
601 {
602 $strSql =
603 " SELECT FT.ID, FT.FORUM_ID, FT.TOPIC_ID, FT.TITLE, FT.TAGS, FT.DESCRIPTION, FT.ICON, \n".
604 " FT.STATE, FT.APPROVED, FT.SORT, FT.VIEWS, FT.USER_START_ID, FT.USER_START_NAME, \n".
605 " ".CForumNew::Concat("-", array("FT.ID", "FT.TITLE_SEO"))." as TITLE_SEO, \n".
606 " ".$DB->DateToCharFunction("FT.START_DATE", "FULL")." as START_DATE, \n".
607 " FT.POSTS, FT.LAST_POSTER_ID, FT.LAST_POSTER_NAME, \n".
608 " ".$DB->DateToCharFunction("FT.LAST_POST_DATE", "FULL")." as LAST_POST_DATE, \n".
609 " FT.LAST_POST_DATE AS LAST_POST_DATE_ORIGINAL, FT.LAST_MESSAGE_ID, \n".
610 " FT.POSTS_UNAPPROVED, FT.ABS_LAST_POSTER_ID, FT.ABS_LAST_POSTER_NAME, \n".
611 " ".$DB->DateToCharFunction("FT.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE, \n".
612 " FT.ABS_LAST_POST_DATE AS ABS_LAST_POST_DATE_ORIGINAL, FT.ABS_LAST_MESSAGE_ID, \n".
613 " FT.SOCNET_GROUP_ID, FT.OWNER_ID, FT.HTML, FT.XML_ID, \n".
614 " F.NAME as FORUM_NAME, \n".
615 " '' as IMAGE, '' as IMAGE_DESCR".$strSqlSelect.$arSQL["select"]." \n".
616 " FROM b_forum_topic FT \n".
617 " LEFT JOIN b_forum F ON (FT.FORUM_ID = F.ID) \n".
618 " ".$strSqlFrom.$arSQL["join"]." \n".
619 " WHERE 1 = 1 ".$strSqlSearch." \n".
620 $strSqlOrder;
621 }
622
623 $iNum = intval($iNum);
624 $limit = $iNum ?? $selectTopCount;
625 if ($limit > 0)
626 {
628 if ($connection->getType() === 'pgsql')
629 {
630 $strSql .= "\nLIMIT ".$limit;
631 }
632 else
633 {
634 $strSql .= "\nLIMIT 0,".$limit;
635 }
636 }
637 if (!$iNum && $descPageNumbering)
638 {
639 $db_res = new CDBResult();
640 $db_res->NavQuery($strSql, $iCnt, $arAddParams);
641 }
642 else
643 {
644 $db_res = $DB->Query($strSql);
645 }
646 return new _CTopicDBResult($db_res, $arAddParams);
647 }
648}
$connection
Определения actionsdefinitions.php:38
$db_res
Определения options_user_settings.php:8
$ar_res
Определения options_user_settings_set.php:16
Определения topic.php:950
static getConnection($name="")
Определения application.php:638
static GetFilterOperation($key)
Определения forum_new.php:582
static prepareField($operation, $type, $vals)
Определения forum_new.php:629
Определения topic.php:7
Определения topic.php:5
static GetListEx($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=[])
Определения topic.php:246
static GetList($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
Определения topic.php:6
static GetFormattedNameFieldsForSelect($arParams=array(), $bReturnAll=true)
Определения user.php:655
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
GetFilterQuery($field, $val, $procent="Y", $ex_sep=array(), $clob="N", $div_fields="Y", $clob_upper="N")
Определения filter_tools.php:383
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
endif
Определения csv_new_setup.php:990
DelDuplicateSort(&$arSort)
Определения tools.php:2055
is_set($a, $k=false)
Определения tools.php:2133
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$val
Определения options.php:1793
$k
Определения template_pdf.php:567
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106