1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
topic.php
См. документацию.
1<?php
3/**********************************************************************/
4/************** FORUM TOPIC *******************************************/
5/**********************************************************************/
7{
8 public static function CanUserViewTopic($TID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
9 {
10 $TID = intval($TID);
11 $arTopic = CForumTopic::GetByID($TID);
12 if ($arTopic)
13 {
14 if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
15 return true;
16 endif;
17 $strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($arTopic["FORUM_ID"], $arUserGroups) : $ExternalPermission);
18 if ($strPerms >= "Y")
19 return true;
20 if ($strPerms < "E" || ($strPerms < "Q" && $arTopic["APPROVED"] != "Y"))
21 return false;
22 $arForum = CForumNew::GetByID($arTopic["FORUM_ID"]);
23 return ($arForum["ACTIVE"] == "Y" ? true : false);
24 }
25 return false;
26 }
27
28 public static function CanUserAddTopic($FID, $arUserGroups, $iUserID = 0, $arForum = false, $ExternalPermission = false)
29 {
30 if (!$arForum || (!is_array($arForum)) || (intval($arForum["ID"]) != intval($FID)))
31 $arForum = CForumNew::GetByID($FID);
32 if (is_array($arForum) && $arForum["ID"] = $FID)
33 {
34 if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
35 return true;
36 endif;
37 if (!CForumUser::IsLocked($iUserID)):
38 $strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($arForum["ID"], $arUserGroups) : $ExternalPermission);
39 else:
40 $strPerms = CForumNew::GetPermissionUserDefault($arForum["ID"]);
41 endif;
42 if ($strPerms >= "Y")
43 return true;
44 if ($strPerms < "M")
45 return false;
46 return ($arForum["ACTIVE"] == "Y" ? true : false);
47 }
48 return false;
49 }
50
51 public static function CanUserUpdateTopic($TID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
52 {
53 $TID = intval($TID);
54 $iUserID = intval($iUserID);
55 $arTopic = CForumTopic::GetByID($TID);
56 if ($arTopic)
57 {
58 if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
59 return true;
60 endif;
61 if (!CForumUser::IsLocked($iUserID)):
62 $strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($arTopic["FORUM_ID"], $arUserGroups) : $ExternalPermission);
63 else:
64 $strPerms = CForumNew::GetPermissionUserDefault($arTopic["FORUM_ID"]);
65 endif;
66 if ($strPerms >= "Y")
67 return true;
68 elseif ($strPerms < "M" || ($strPerms < "Q" && ($arTopic["APPROVED"] != "Y" || $arTopic["STATE"] != "Y")))
69 return false;
70 $arForum = CForumNew::GetByID($arTopic["FORUM_ID"]);
71 if ($arForum["ACTIVE"] != "Y")
72 return false;
73 elseif ($strPerms >= "U")
74 return true;
75 $db_res = CForumMessage::GetList(array("ID"=>"ASC"), array("TOPIC_ID"=>$TID, "FORUM_ID"=>$arTopic["FORUM_ID"]), False, 2);
76 $iCnt = 0; $iOwner = 0;
77 if (!($db_res && $res = $db_res->Fetch()))
78 return false;
79 else
80 {
81 $iCnt++; $iOwner = intval($res["AUTHOR_ID"]);
82 if ($res = $db_res->Fetch())
83 return false;
84 }
85 if ($iOwner <= 0 || $iUserID <= 0 || $iOwner != $iUserID)
86 return false;
87 return true;
88 }
89 return false;
90 }
91
92 public static function CanUserDeleteTopic($TID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
93 {
94 $TID = intval($TID);
95 $arTopic = CForumTopic::GetByID($TID);
96 if ($arTopic)
97 {
98 if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
99 return true;
100 endif;
101 if (!CForumUser::IsLocked($iUserID)):
102 $strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($arTopic["FORUM_ID"], $arUserGroups) : $ExternalPermission);
103 else:
104 $strPerms = CForumNew::GetPermissionUserDefault($arTopic["FORUM_ID"]);
105 endif;
106 if ($strPerms >= "Y")
107 return true;
108 elseif ($strPerms < "U")
109 return false;
110 $arForum = CForumNew::GetByID($arTopic["FORUM_ID"]);
111 return ($arForum["ACTIVE"] == "Y" ? true : false);
112 }
113 return false;
114 }
115
116 public static function CanUserDeleteTopicMessage($TID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
117 {
118 $TID = intval($TID);
119 $arTopic = CForumTopic::GetByID($TID);
120 if ($arTopic)
121 {
122 if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
123 return true;
124 endif;
125 if (!CForumUser::IsLocked($iUserID)):
126 $strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($arTopic["FORUM_ID"], $arUserGroups) : $ExternalPermission);
127 else:
128 $strPerms = CForumNew::GetPermissionUserDefault($arTopic["FORUM_ID"]);
129 endif;
130 if ($strPerms >= "Y")
131 return true;
132 elseif ($strPerms < "U")
133 return false;
134 $arForum = CForumNew::GetByID($arTopic["FORUM_ID"]);
135 return ($arForum["ACTIVE"] == "Y" ? true : false);
136 }
137 return false;
138 }
139
140 public static function CheckFields($ACTION, &$arFields)
141 {
142 // Fatal Errors
143 if (is_set($arFields, "TITLE") || $ACTION=="ADD")
144 {
145 $arFields["TITLE"] = trim($arFields["TITLE"]);
146 if ($arFields["TITLE"] == '')
147 return false;
148 }
149 if (is_set($arFields, "TITLE_SEO") || $ACTION=="ADD")
150 {
151 $arFields["TITLE_SEO"] = trim($arFields["TITLE_SEO"], " -");
152 if ($arFields["TITLE_SEO"] == '' && $arFields["TITLE"] <> '')
153 $arFields["TITLE_SEO"] = CUtil::translit($arFields["TITLE"], LANGUAGE_ID, array("max_len"=>255, "safe_chars"=>".", "replace_space" => '-'));
154 if ($arFields["TITLE_SEO"] == '')
155 $arFields["TITLE_SEO"] = false;
156 }
157 if (is_set($arFields, "USER_START_NAME") || $ACTION=="ADD")
158 {
159 $arFields["USER_START_NAME"] = trim($arFields["USER_START_NAME"]);
160 if ($arFields["USER_START_NAME"] == '')
161 return false;
162 }
163
164 if (is_set($arFields, "FORUM_ID") || $ACTION=="ADD")
165 {
166 $arFields["FORUM_ID"] = intval($arFields["FORUM_ID"]);
167 if ($arFields["FORUM_ID"] <= 0)
168 return false;
169 }
170 if (is_set($arFields, "LAST_POSTER_NAME") || $ACTION=="ADD")
171 {
172 $arFields["LAST_POSTER_NAME"] = trim($arFields["LAST_POSTER_NAME"]);
173 if ($arFields["LAST_POSTER_NAME"] == '' && $arFields["APPROVED"] !== "N" && $arFields["STATE"] !== "L")
174 return false;
175 }
176 if (is_set($arFields, "ABS_LAST_POSTER_NAME") || $ACTION=="ADD")
177 {
178 $arFields["ABS_LAST_POSTER_NAME"] = trim($arFields["ABS_LAST_POSTER_NAME"]);
179 if ($arFields["ABS_LAST_POSTER_NAME"] == '' && $ACTION == "ADD" && !empty($arFields["LAST_POSTER_NAME"]))
180 $arFields["ABS_LAST_POSTER_NAME"] = $arFields["LAST_POSTER_NAME"];
181 elseif ($arFields["ABS_LAST_POSTER_NAME"] == '' && $arFields["APPROVED"] !== "N" && $arFields["STATE"] !== "L")
182 return false;
183 }
184
185 // Check Data
186 if (is_set($arFields, "USER_START_ID") || $ACTION=="ADD")
187 $arFields["USER_START_ID"] = (intval($arFields["USER_START_ID"]) > 0 ? intval($arFields["USER_START_ID"]) : false);
188 if (is_set($arFields, "LAST_POSTER_ID") || $ACTION=="ADD")
189 $arFields["LAST_POSTER_ID"] = (intval($arFields["LAST_POSTER_ID"]) > 0 ? intval($arFields["LAST_POSTER_ID"]) : false);
190 if (is_set($arFields, "LAST_MESSAGE_ID") || $ACTION=="ADD")
191 $arFields["LAST_MESSAGE_ID"] = (intval($arFields["LAST_MESSAGE_ID"]) > 0 ? intval($arFields["LAST_MESSAGE_ID"]) : false);
192 if (is_set($arFields, "ICON") || $ACTION=="ADD")
193 $arFields["ICON"] = trim($arFields["ICON"]);
194 if (is_set($arFields, "STATE") || $ACTION=="ADD")
195 $arFields["STATE"] = (in_array($arFields["STATE"], array("Y", "N", "L")) ? $arFields["STATE"] : "Y");
196 if (is_set($arFields, "APPROVED") || $ACTION=="ADD")
197 $arFields["APPROVED"] = ($arFields["APPROVED"] == "N" ? "N" : "Y");
198 if (is_set($arFields, "SORT") || $ACTION=="ADD")
199 $arFields["SORT"] = (intval($arFields["SORT"]) > 0 ? intval($arFields["SORT"]) : 150);
200 if (is_set($arFields, "VIEWS") || $ACTION=="ADD")
201 $arFields["VIEWS"] = (intval($arFields["VIEWS"]) > 0 ? intval($arFields["VIEWS"]) : 0);
202 if (is_set($arFields, "POSTS") || $ACTION=="ADD")
203 $arFields["POSTS"] = (intval($arFields["POSTS"]) > 0 ? intval($arFields["POSTS"]) : 0);
204 if (is_set($arFields, "TOPIC_ID"))
205 $arFields["TOPIC_ID"]=intval($arFields["TOPIC_ID"]);
206 if (is_set($arFields, "SOCNET_GROUP_ID") || $ACTION=="ADD")
207 $arFields["SOCNET_GROUP_ID"] = (intval($arFields["SOCNET_GROUP_ID"]) > 0 ? intval($arFields["SOCNET_GROUP_ID"]) : false);
208 if (is_set($arFields, "OWNER_ID") || $ACTION=="ADD")
209 $arFields["OWNER_ID"] = (intval($arFields["OWNER_ID"]) > 0 ? intval($arFields["OWNER_ID"]) : false);
210 return True;
211 }
212
213 public static function Add($arFields)
214 {
215 $entity = \Bitrix\Forum\TopicTable::getEntity();
216 $data = [];
217 foreach ($arFields as $k => $v)
218 {
219 if ($entity->hasField($k))
220 {
221 $data[$k] = $v;
222 }
223 }
224 $result = \Bitrix\Forum\TopicTable::add($data);
225 if ($result->isSuccess())
226 {
227 $id = $result->getPrimary();
228 return $id["ID"];
229 }
230 return false;
231 }
232
233 public static function Update($ID, $arFields, $skip_counts = False)
234 {
235 $topic = \Bitrix\Forum\Topic::getById($ID);
236 $entity = \Bitrix\Forum\TopicTable::getEntity();
237 $data = [];
238 foreach ($arFields as $k => $v)
239 {
240 $k = (mb_strpos($k, "=") === 0? mb_substr($k, 1) : $k);
241 if ($entity->hasField($k))
242 {
243 $field = $entity->getField($k);
244 $data[$k] = $v;
245 if ($field instanceof \Bitrix\Main\ORM\Fields\DateField)
246 {
247 $data[$k] = new \Bitrix\Main\Type\DateTime(\Bitrix\Main\Type\DateTime::isCorrect($v) ? $v : null);
248 }
249 else if (isset($v) && preg_match("/{$k}\s*(\+|\-)\s*(\d+)/", $v, $matches))
250 {
251 $data[$k] = new \Bitrix\Main\DB\SqlExpression("?# $matches[1] $matches[2]", $k);
252 }
253 }
254 }
255 $fieldForEdit = array_intersect_key($data, array_flip(["TITLE",
256 "TITLE_SEO",
257 "TAGS",
258 "DESCRIPTION",
259 "ICON",
260 "USER_START_NAME"])
261 );
262 if (!empty($fieldForEdit))
263 {
264 $topic->edit($data);
265 $data = array_diff_key($data, $data);
266 }
267 if (array_key_exists("FORUM_ID", $data))
268 {
269 $topic->moveToForum($data["FORUM_ID"]);
270 unset($GLOBALS["FORUM_CACHE"]["FORUM"]);
271 unset($data["FORUM_ID"]);
272 }
273 if (!empty($data))
274 {
275 \Bitrix\Forum\Topic::update($topic->getId(), $data);
276 }
277
278 unset($GLOBALS["FORUM_CACHE"]["TOPIC"][$ID]);
279 unset($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID]);
280
281 return $ID;
282 }
283
284 public static function MoveTopic2Forum($TID, $FID, $leaveLink = "N")
285 {
286 global $DB;
287 $FID = intval($FID);
288 $arForum = CForumNew::GetByID($FID);
289 $arTopics = (is_array($TID) ? $TID : (intval($TID) > 0 ? array($TID) : array()));
290 $leaveLink = (mb_strtoupper($leaveLink) == "Y" ? "Y" : "N");
291 $arMsg = array();
292 $arForums = array();
293
294 if (empty($arForum))
295 {
296 $arMsg[] = array(
297 "id" => "FORUM_NOT_EXIST",
298 "text" => GetMessage("F_ERR_FORUM_NOT_EXIST", array("#FORUM_ID#" => $FID)));
299 }
300 if (empty($arTopics))
301 {
302 $arMsg[] = array(
303 "id" => "TOPIC_EMPTY",
304 "text" => GetMessage("F_ERR_EMPTY_TO_MOVE"));
305 }
306
307 if (!empty($arMsg))
308 {
309 $e = new CAdminException($arMsg);
310 $GLOBALS["APPLICATION"]->ThrowException($e);
311 return false;
312 }
313
314 $arTopicsCopy = $arTopics;
315 $arTopics = array();
316 foreach ($arTopicsCopy as $res)
317 {
318 $arTopics[intval($res)] = array("ID" => intval($res));
319 }
320
321 $db_res = CForumTopic::GetList(array(), array("@ID" => implode(", ", array_keys($arTopics))));
322 if ($db_res && ($res = $db_res->Fetch()))
323 {
324 do
325 {
326 if (intval($res["FORUM_ID"]) == $FID)
327 {
328 $arMsg[] = array(
329 "id" => "FORUM_ID_IDENTICAL",
330 "text" => GetMessage("F_ERR_THIS_TOPIC_IS_NOT_MOVE",
331 array("#TITLE#" => $res["TITLE"], "#ID#" => $res["ID"])));
332 continue;
333 }
334
335// $DB->StartTransaction();
336
337 if ($leaveLink != "N")
338 {
340 array(
341 "TITLE" => $res["TITLE"],
342 "DESCRIPTION" => $res["DESCRIPTION"],
343 "STATE" => "L",
344 "USER_START_NAME" => $res["USER_START_NAME"],
345 "START_DATE" => $res["START_DATE"],
346 "ICON" => $res["ICON"],
347 "POSTS" => "0",
348 "VIEWS" => "0",
349 "FORUM_ID" => $res["FORUM_ID"],
350 "TOPIC_ID" => $res["ID"],
351 "APPROVED" => $res["APPROVED"],
352 "SORT" => $res["SORT"],
353 "LAST_POSTER_NAME" => $res["LAST_POSTER_NAME"],
354 "LAST_POST_DATE" => $res["LAST_POST_DATE"],
355 "HTML" => $res["HTML"],
356 "USER_START_ID" => $res["USER_START_ID"],
357 "SOCNET_GROUP_ID" => $res["SOCNET_GROUP_ID"],
358 "OWNER_ID" => $res["OWNER_ID"]));
359 }
360
361 CForumTopic::Update($res["ID"], array("FORUM_ID" => $FID), true);
362 // move message
363 $strSql = "UPDATE b_forum_message SET FORUM_ID=".$FID.", POST_MESSAGE_HTML='' WHERE TOPIC_ID=".$res["ID"];
364 $DB->Query($strSql);
365 // move subscribe
366 $strSql = "UPDATE b_forum_subscribe SET FORUM_ID=".intval($FID)." WHERE TOPIC_ID=".$res["ID"];
367 $DB->Query($strSql);
368
369 $arForums[$res["FORUM_ID"]] = $res["FORUM_ID"];
370 unset($GLOBALS["FORUM_CACHE"]["TOPIC"][$res["ID"]]);
371 unset($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$res["ID"]]);
372 $arTopics[intval($res["ID"])] = $res;
373// $DB->Commit();
374
376
377 $res_log["DESCRIPTION"] = str_replace(array("#TOPIC_TITLE#", "#TOPIC_ID#", "#FORUM_TITLE#", "#FORUM_ID#"),
378 array($res["TITLE"], $res["ID"], $arForum["NAME"], $arForum["ID"]),
379 ($leaveLink != "N" ? GetMessage("F_LOGS_MOVE_TOPIC_WITH_LINK") : GetMessage("F_LOGS_MOVE_TOPIC")));
380 $res_log["FORUM_ID"] = $arForum["ID"];
381 $res_log["TOPIC_ID"] = $res["ID"];
382 $res_log["TITLE"] = $res["TITLE"];
383 $res_log["FORUM_TITLE"] = $arForum["NAME"];
384 CForumEventLog::Log("topic", "move", $res["ID"], serialize($res_log));
385 } while ($res = $db_res->Fetch());
386 }
387/***************** Cleaning cache **********************************/
388 unset($GLOBALS["FORUM_CACHE"]["FORUM"][$FID]);
389 if(CACHED_b_forum !== false)
390 $GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum");
391/***************** Cleaning cache/**********************************/
392 CForumNew::SetStat($FID);
393 foreach ($arForums as $key)
395 if (!empty($arMsg))
396 {
397 $e = new CAdminException($arMsg);
398 $GLOBALS["APPLICATION"]->ThrowException($e);
399 }
400 else
401 {
402
404 if ($leaveLink != "Y")
405 {
406 foreach($arTopics as $key => $res)
407 CForumCacheManager::ClearTag("F", $res["FORUM_ID"]);
408 }
409 }
410 return true;
411 }
412
413 public static function Delete($ID)
414 {
415 $arTopic = [];
416 if ($topic = \Bitrix\Forum\Topic::getById($ID))
417 {
418 $arTopic = $topic->getData();
419 $topic->remove();
420 }
421 unset($GLOBALS["FORUM_CACHE"]["TOPIC"][$ID]);
422 unset($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID]);
423
424/***************** Event onAfterTopicDelete ************************/
425 foreach(GetModuleEvents("forum", "onAfterTopicDelete", true) as $arEvent)
426 ExecuteModuleEventEx($arEvent, array(&$ID, $arTopic));
427/***************** /Event ******************************************/
428 return true;
429 }
430
431 public static function GetByID($ID, $arAddParams = array())
432 {
433 global $DB;
434
435 if (mb_strlen($ID) < 1) return False;
436
437 $NoFilter = (isset($arAddParams["NoFilter"]) && $arAddParams["NoFilter"] == true) || COption::GetOptionString("forum", "FILTER", "Y") != "Y" ? true : false;
438
439 if ($NoFilter && isset($GLOBALS["FORUM_CACHE"]["TOPIC"][$ID]) && is_array($GLOBALS["FORUM_CACHE"]["TOPIC"][$ID]) && is_set($GLOBALS["FORUM_CACHE"]["TOPIC"][$ID], "ID"))
440 {
441 return $GLOBALS["FORUM_CACHE"]["TOPIC"][$ID];
442 }
443 elseif (!$NoFilter && isset($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID]) && is_array($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID]) && is_set($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID], "ID"))
444 {
445 return $GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID];
446 }
447 else
448 {
449 $strSql =
450 "SELECT FT.*,
451 FT.TITLE_SEO as TITLE_SEO_REAL,
452 ".CForumNew::Concat("-", array("FT.ID", "FT.TITLE_SEO"))." as TITLE_SEO,
453 ".$DB->DateToCharFunction("FT.START_DATE", "FULL")." as START_DATE,
454 ".$DB->DateToCharFunction("FT.LAST_POST_DATE", "FULL")." as LAST_POST_DATE
455 FROM b_forum_topic FT ";
456
457 if (intval($ID) > 0 || $ID === 0)
458 $strSql .= "WHERE FT.ID = ".intval($ID);
459 else
460 $strSql .= "WHERE FT.XML_ID = '".$DB->ForSql($ID)."'";
461
462 $db_res = $DB->Query($strSql);
463 if ($db_res && $res = $db_res->Fetch())
464 {
465 $GLOBALS["FORUM_CACHE"]["TOPIC"][$ID] = $res;
466 if (COption::GetOptionString("forum", "FILTER", "Y") == "Y")
467 {
468 $db_res_filter = new CDBResult;
469 $db_res_filter->InitFromArray(array($res));
470 $db_res_filter = new _CTopicDBResult($db_res_filter);
471 if ($res_filter = $db_res_filter->Fetch())
472 $GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID] = $res_filter;
473 }
474 if (!$NoFilter)
475 $res = $res_filter;
476 return $res;
477 }
478 }
479 return False;
480 }
481
482 public static function GetByIDEx($ID, $arAddParams = array())
483 {
484 global $DB;
485 $ID = intval($ID);
486 if ($ID <= 0):
487 return false;
488 endif;
489
490 $arAddParams = (is_array($arAddParams) ? $arAddParams : array($arAddParams));
491 $arAddParams["GET_FORUM_INFO"] = (isset($arAddParams["GET_FORUM_INFO"]) && $arAddParams["GET_FORUM_INFO"] == "Y" ? "Y" : "N");
492 $arSQL = array("select" => array(), "join" => array());
493 if (!empty($arAddParams["sNameTemplate"]))
494 {
495 $arSQL = array_merge_recursive(
497 $arAddParams, array(
498 "sUserTablePrefix" => "U_START.",
499 "sForumUserTablePrefix" => "FU_START.",
500 "sFieldName" => "USER_START_NAME_FRMT",
501 "sUserIDFieldName" => "FT.USER_START_ID"))),
503 $arAddParams, array(
504 "sUserTablePrefix" => "U_LAST.",
505 "sForumUserTablePrefix" => "FU_LAST.",
506 "sFieldName" => "LAST_POSTER_NAME_FRMT",
507 "sUserIDFieldName" => "FT.LAST_POSTER_ID"))),
509 $arAddParams, array(
510 "sUserTablePrefix" => "U_ABS_LAST.",
511 "sForumUserTablePrefix" => "FU_ABS_LAST.",
512 "sFieldName" => "ABS_LAST_POSTER_NAME_FRMT",
513 "sUserIDFieldName" => "FT.ABS_LAST_POSTER_ID"))));
514 }
515 if (isset($arAddParams["GET_FORUM_INFO"]) && $arAddParams["GET_FORUM_INFO"] == "Y")
516 {
517 $arSQL["select"][] = CForumNew::GetSelectFields(array("sPrefix" => "F_", "sReturnResult" => "string"));
518 $arSQL["join"][] = "INNER JOIN b_forum F ON (FT.FORUM_ID = F.ID)";
519 }
520 $arSQL["select"] = (!empty($arSQL["select"]) ? ",\n\t".implode(",\n\t", $arSQL["select"]) : "");
521 $arSQL["join"] = (!empty($arSQL["join"]) ? "\n\t".implode("\n", $arSQL["join"]) : "");
522
523 $strSql =
524 "SELECT FT.*,\n".
525 " FT.TITLE_SEO as TITLE_SEO_REAL, ".CForumNew::Concat("-", array("FT.ID", "FT.TITLE_SEO"))." as TITLE_SEO, \n".
526 " ".$DB->DateToCharFunction("FT.START_DATE", "FULL")." as START_DATE, \n".
527 " ".$DB->DateToCharFunction("FT.LAST_POST_DATE", "FULL")." as LAST_POST_DATE, \n".
528 " '' as IMAGE, '' as IMAGE_DESCR".$arSQL["select"]."\n".
529 "FROM b_forum_topic FT \n".
530 " ".$arSQL["join"]."\n".
531 "WHERE FT.ID = ".$ID;
532 $db_res = new _CTopicDBResult($DB->Query($strSql));
533
534 if ($res = $db_res->Fetch())
535 {
536 if (is_array($res))
537 {
538 // Cache topic data for hits
539 if ($arAddParams["GET_FORUM_INFO"] == "Y")
540 {
541 $res["TOPIC_INFO"] = array();
542 $res["FORUM_INFO"] = array();
543 foreach ($res as $key => $val)
544 {
545 if (mb_substr($key, 0, 2) == "F_")
546 $res["FORUM_INFO"][mb_substr($key, 2)] = $val;
547 else
548 $res["TOPIC_INFO"][$key] = $val;
549 }
550 if (!empty($res["TOPIC_INFO"]))
551 {
552 $GLOBALS["FORUM_CACHE"]["TOPIC"][intval($res["TOPIC_INFO"]["ID"])] = $res["TOPIC_INFO"];
553 if (COption::GetOptionString("forum", "FILTER", "Y") == "Y")
554 {
555 $db_res_filter = new CDBResult;
556 $db_res_filter->InitFromArray(array($res["TOPIC_INFO"]));
557 $db_res_filter = new _CTopicDBResult($db_res_filter);
558 if ($res_filter = $db_res_filter->Fetch())
559 $GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][intval($res["TOPIC_INFO"]["ID"])] = $res_filter;
560 }
561 }
562 if (!empty($res["FORUM_INFO"]))
563 {
564 $GLOBALS["FORUM_CACHE"]["FORUM"][intval($res["FORUM_INFO"]["ID"])] = $res["FORUM_INFO"];
565 }
566 }
567 }
568 return $res;
569 }
570 return false;
571 }
572
573 public static function GetNeighboringTopics($TID, $arUserGroups) // out-of-date function
574 {
575 $TID = intval($TID);
576 $arTopic = CForumTopic::GetByID($TID);
577 if (!$arTopic) return False;
578
579 //-- PREV_TOPIC
581 "FORUM_ID" => $arTopic["FORUM_ID"],
582 "<LAST_POST_DATE" => $arTopic["LAST_POST_DATE"]
583 );
584 if (CForumNew::GetUserPermission($arTopic["FORUM_ID"], $arUserGroups)<"Q")
585 $arFilter["APPROVED"] = "Y";
586
587 $db_res = CForumTopic::GetList(array("LAST_POST_DATE"=>"DESC"), $arFilter, false, 1);
588 $PREV_TOPIC = 0;
589 if ($ar_res = $db_res->Fetch()) $PREV_TOPIC = $ar_res["ID"];
590
591 //-- NEXT_TOPIC
593 "FORUM_ID" => $arTopic["FORUM_ID"],
594 ">LAST_POST_DATE" => $arTopic["LAST_POST_DATE"]
595 );
596 if (CForumNew::GetUserPermission($arTopic["FORUM_ID"], $arUserGroups)<"Q")
597 $arFilter["APPROVED"] = "Y";
598
599 $db_res = CForumTopic::GetList(array("LAST_POST_DATE"=>"ASC"), $arFilter, false, 1);
600 $NEXT_TOPIC = 0;
601 if ($ar_res = $db_res->Fetch()) $NEXT_TOPIC = $ar_res["ID"];
602
603 return array($PREV_TOPIC, $NEXT_TOPIC);
604 }
605
606 public static function GetSelectFields($arAddParams = array(), $fields = array())
607 {
608 global $DB;
609 $arAddParams = (is_array($arAddParams) ? $arAddParams : array());
610 $arAddParams["sPrefix"] = $DB->ForSql(empty($arAddParams["sPrefix"]) ? "FT." : $arAddParams["sPrefix"]);
611 $arAddParams["sTablePrefix"] = $DB->ForSql(empty($arAddParams["sTablePrefix"]) ? "FT." : $arAddParams["sTablePrefix"]);
612 $arAddParams["sReturnResult"] = ($arAddParams["sReturnResult"] == "string" ? "string" : "array");
613 $fields = (is_array($fields) ? $fields : array());
614 $fields = array_merge(array(
615 "ID" => "ID",
616 "TITLE" => "TITLE",
617 "TITLE_SEO_REAL" => $arAddParams["sTablePrefix"]."TITLE_SEO",
618 "TITLE_SEO" => CForumNew::Concat("-", array($arAddParams["sTablePrefix"]."ID", $arAddParams["sTablePrefix"]."TITLE_SEO")),
619 "TAGS" => "TAGS",
620 "DESCRIPTION" => "DESCRIPTION",
621 "VIEWS" => "VIEWS",
622 "LAST_POSTER_ID" => "LAST_POSTER_ID",
623 "START_DATE" => $DB->DateToCharFunction($arAddParams["sTablePrefix"]."START_DATE", "FULL"),
624 "USER_START_NAME" => "USER_START_NAME",
625 "USER_START_ID" => "USER_START_ID",
626 "POSTS" => "POSTS",
627 "LAST_POSTER_NAME" => "LAST_POSTER_NAME",
628 "LAST_POST_DATE" => $DB->DateToCharFunction($arAddParams["sTablePrefix"]."LAST_POST_DATE", "FULL"),
629 "LAST_MESSAGE_ID" => "LAST_MESSAGE_ID",
630 "APPROVED" => "APPROVED",
631 "STATE" => "STATE",
632 "FORUM_ID" => "FORUM_ID",
633 "TOPIC_ID" => "TOPIC_ID",
634 "ICON" => "ICON",
635 "SORT" => "SORT",
636 "SOCNET_GROUP_ID" => "SOCNET_GROUP_ID",
637 "OWNER_ID" => "OWNER_ID",
638 "XML_ID" => "XML_ID"), $fields);
639 $res = array();
640 foreach($fields as $key => $val)
641 {
642 if ($key == $val)
643 {
644 $res[$arAddParams["sPrefix"].$key] = $arAddParams["sTablePrefix"].$val;
645 }
646 else
647 {
648 $res[($arAddParams["sPrefix"] == $arAddParams["sTablePrefix"] ? "" : $arAddParams["sPrefix"]).$key] = $val;
649 }
650 }
651 if ($arAddParams["sReturnResult"] == "string")
652 {
653 $arRes = array();
654 foreach ($res as $key => $val)
655 {
656 $arRes[] = $val.($key != $val ? " AS ".$key : "");
657 }
658 $res = implode(", ", $arRes);
659 }
660 return $res;
661 }
662
663 public static function SetReadLabels($ID, $arUserGroups) // out-of-date function
664 {
665 $ID = intval($ID);
666 $arTopic = CForumTopic::GetByID($ID);
667 if ($arTopic)
668 {
669 $FID = intval($arTopic["FORUM_ID"]);
670 if (is_null($_SESSION["read_forum_".$FID]) || $_SESSION["read_forum_".$FID] == '')
671 {
672 $_SESSION["read_forum_".$FID] = "0";
673 }
674
675 $_SESSION["first_read_forum_".$FID] = intval($_SESSION["first_read_forum_".$FID]);
676
678 "FORUM_ID" => $FID,
679 "TOPIC_ID" => $ID
680 );
681 if (intval($_SESSION["first_read_forum_".$FID])>0)
682 $arFilter[">ID"] = intval($_SESSION["first_read_forum_".$FID]);
683 if ($_SESSION["read_forum_".$FID]!="0")
684 $arFilter["!@ID"] = $_SESSION["read_forum_".$FID];
685 if (CForumNew::GetUserPermission($FID, $arUserGroups)<"Q")
686 $arFilter["APPROVED"] = "Y";
688 if ($db_res)
689 {
690 while ($ar_res = $db_res->Fetch())
691 {
692 $_SESSION["read_forum_".$FID] .= ",".intval($ar_res["ID"]);
693 }
694 }
695 CForumTopic::Update($ID, array("=VIEWS"=>"VIEWS+1"));
696 }
697 }
698
699 public static function SetReadLabelsNew($ID, $updateForum = false, $LastVisit = false, $arAddParams = array())
700 {
701 global $USER;
702 $forumUser = \Bitrix\Forum\User::getById($USER->getId());
703 if ($updateForum === true)
704 {
705 $forumUser->readTopicsOnForum($ID);
706 }
707 else
708 {
709 $forumUser->readTopic($ID);
710 }
711 return false;
712 }
713
714 public static function CleanUp($period = 168)
715 {
716 return "CForumTopic::CleanUp();";
717 }
718
719 //---------------> Topic utils
720 public static function SetStat($ID = 0, $params = [])
721 {
722 if (empty($ID))
723 {
724 return;
725 }
726
727 $ID = intval($ID);
728 $params = is_array($params) ? $params : [];
729
730 if (!empty($params["MESSAGE"]["TOPIC_ID"]) && $params["MESSAGE"]["TOPIC_ID"] == $ID)
731 {
732 $message = $params["MESSAGE"];
733
734 $arFields = [
735 "ABS_LAST_POSTER_ID" => $message["AUTHOR_ID"],
736 "ABS_LAST_POSTER_NAME" => $message["AUTHOR_NAME"],
737 "ABS_LAST_POST_DATE" => $message["POST_DATE"],
738 "ABS_LAST_MESSAGE_ID" => $message["ID"]
739 ];
740
741 if ($message["APPROVED"] == "Y")
742 {
743 $arFields["APPROVED"] = "Y";
744 $arFields["LAST_POSTER_ID"] = $arFields["ABS_LAST_POSTER_ID"];
745 $arFields["LAST_POSTER_NAME"] = $arFields["ABS_LAST_POSTER_NAME"];
746 $arFields["LAST_POST_DATE"] = $arFields["ABS_LAST_POST_DATE"];
747 $arFields["LAST_MESSAGE_ID"] = $arFields["ABS_LAST_MESSAGE_ID"];
748 if ($message["NEW_TOPIC"] != "Y")
749 {
750 $arFields["=POSTS"] = "POSTS+1";
751 }
752 }
753 else
754 {
755 $arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED+1";
756 }
757 }
758 else if (isset($params['DELETED_MESSAGE'])
759 && ($arTopic = CForumTopic::GetByID($ID))
760 && (
761 $params['DELETED_MESSAGE']['ID'] < $arTopic['LAST_MESSAGE_ID']
762 || IsModuleInstalled('bitrix24')
763 )
764 )
765 {
766 $deleteMessage = $params['DELETED_MESSAGE'];
767 if ($deleteMessage['APPROVED'] === 'Y')
768 {
769 $arFields['=POSTS'] = 'POSTS-1';
770 }
771 else
772 {
773 $arFields['=POSTS_UNAPPROVED'] = 'POSTS_UNAPPROVED-1';
774 }
775 }
776 else
777 {
778 $res = CForumMessage::GetList(array(), array("TOPIC_ID" => $ID), "cnt_not_approved");
779 $res["CNT"] = (intval($res["CNT"]) - intval($res["CNT_NOT_APPROVED"]));
780 $res["CNT"] = ($res["CNT"] > 0 ? $res["CNT"] : 0);
781 if (intval($res["ABS_FIRST_MESSAGE_ID"]) > 0 && intval($res["ABS_FIRST_MESSAGE_ID"]) != intval($res["FIRST_MESSAGE_ID"]))
782 {
783 $GLOBALS["DB"]->Query("UPDATE b_forum_message SET NEW_TOPIC = (CASE WHEN ID=".intval($res["ABS_FIRST_MESSAGE_ID"])." THEN 'Y' ELSE 'N' END) WHERE TOPIC_ID=".$ID);
784
785 CForumMessage::Reindex($res["ABS_FIRST_MESSAGE_ID"]);
786 CForumMessage::Reindex($res["FIRST_MESSAGE_ID"]);
787 }
788
790 "APPROVED" => ($res["CNT"] > 0 ? "Y" : "N"),
791 "POSTS" => ($res["CNT"] > 0 ? ($res["CNT"] - 1) : 0),
792 "LAST_POSTER_ID" => false,
793 "LAST_POSTER_NAME" => false,
794 "LAST_POST_DATE" => false,
795 "LAST_MESSAGE_ID" => intval($res["LAST_MESSAGE_ID"]),
796 "POSTS_UNAPPROVED" => intval($res["CNT_NOT_APPROVED"]),
797 "ABS_LAST_POSTER_ID" => false,
798 "ABS_LAST_POSTER_NAME" => false,
799 "ABS_LAST_POST_DATE" => false,
800 "ABS_LAST_MESSAGE_ID" => intval($res["ABS_LAST_MESSAGE_ID"]));
801
802 if ($arFields["ABS_LAST_MESSAGE_ID"] > 0):
803 $res = CForumMessage::GetByID($arFields["ABS_LAST_MESSAGE_ID"], array("FILTER" => "N"));
804 $arFields["ABS_LAST_POSTER_ID"] = (intval($res["AUTHOR_ID"]) > 0 ? $res["AUTHOR_ID"] : false);
805 $arFields["ABS_LAST_POSTER_NAME"] = $res["AUTHOR_NAME"];
806 $arFields["ABS_LAST_POST_DATE"] = $res["POST_DATE"];
807 if (intval($arFields["LAST_MESSAGE_ID"]) > 0):
808 if ($arFields["LAST_MESSAGE_ID"] < $arFields["ABS_LAST_MESSAGE_ID"]):
809 $res = CForumMessage::GetByID($arFields["LAST_MESSAGE_ID"], array("FILTER" => "N"));
810 endif;
811 $arFields["LAST_POSTER_ID"] = (intval($res["AUTHOR_ID"]) > 0 ? $res["AUTHOR_ID"] : false);
812 $arFields["LAST_POSTER_NAME"] = $res["AUTHOR_NAME"];
813 $arFields["LAST_POST_DATE"] = $res["POST_DATE"];
814 endif;
815 endif;
816
817 foreach (array(
818 "LAST_POST_DATE" => "START_DATE",
819 "ABS_LAST_POST_DATE" => "START_DATE",
820 "LAST_POSTER_NAME" => "USER_START_NAME",
821 "ABS_LAST_POSTER_NAME" => "USER_START_NAME") as $key => $val)
822 {
823 if ($arFields[$key] == false)
824 {
825 $arFields["=".$key] = $val;
826 unset($arFields[$key]);
827 }
828 }
829 }
831 }
832
833 public static function OnBeforeIBlockElementDelete($ELEMENT_ID)
834 {
835 $ELEMENT_ID = intval($ELEMENT_ID);
836 if ($ELEMENT_ID > 0 && CModule::IncludeModule("iblock"))
837 {
838 $rsElement = CIBlockElement::GetList(
839 array("ID" => "ASC"),
840 array(
841 "ID" => $ELEMENT_ID,
842 "SHOW_HISTORY" => "Y",
843 "CHECK_PERMISSIONS" => "N",
844 ),
845 false,
846 false,
847 array("ID", "WF_PARENT_ELEMENT_ID", "IBLOCK_ID")
848 );
849 $arElement = $rsElement->Fetch();
850 if(is_array($arElement) && $arElement["WF_PARENT_ELEMENT_ID"] == 0)
851 {
852 $rsProperty = CIBlockElement::GetProperty($arElement["IBLOCK_ID"], $arElement["ID"], array(), array("CODE" => "FORUM_TOPIC_ID"));
853 if ($rsProperty && $arProperty = $rsProperty->Fetch())
854 {
855 if(is_array($arProperty) && $arProperty["VALUE"] > 0)
856 {
857 CForumTopic::Delete($arProperty["VALUE"]);
858 }
859 }
860 }
861 }
862 return true;
863 }
864
865 public static function GetMessageCount($forumID, $topicID, $approved = null)
866 {
867 global $CACHE_MANAGER;
868 static $arCacheCount = array();
869 static $obCache = null;
870 static $cacheLabel = 'forum_msg_count';
871 static $notCached = 0;
872 static $TTL = 3600000;
873
874 if ($approved === true) $approved = "Y";
875 if ($approved === false) $approved = "N";
876 if ($approved === null) $approved = "A";
877
878 if ($approved !== "Y" && $approved !== "N" && $approved !== "A")
879 return false;
880
881 if (isset($arCacheCount[$forumID][$topicID][$approved]))
882 {
883 return $arCacheCount[$forumID][$topicID][$approved];
884 }
885
886 if ($obCache === null)
887 $obCache = new CPHPCache;
888
889 $cacheID = md5($cacheLabel.$forumID);
890 $cachePath = str_replace(array(":", "//"), "/", "/".SITE_ID."/".$cacheLabel."/");
891 if ($obCache->InitCache($TTL, $cacheID, $cachePath))
892 {
893 $resCache = $obCache->GetVars();
894 if (is_array($resCache['messages']))
895 $arCacheCount[$forumID] = $resCache['messages'];
896 }
897
898 if (isset($arCacheCount[$forumID][$topicID][$approved]))
899 {
900 return $arCacheCount[$forumID][$topicID][$approved];
901 }
902 else
903 {
904 $bCount = true;
905 if ($approved === "N" || $approved === "Y")
906 $bCount = "cnt_not_approved";
907
908 if (intval($topicID) > 0 || $topicID === 0)
909 $arFilter = array("TOPIC_ID" => $topicID);
910 else
911 {
912 $arRes = CForumTopic::GetByID($topicID);
913 if ($arRes)
914 $arFilter = array("TOPIC_ID" => $arRes['ID']);
915 else
916 return false;
917 }
918 $count = CForumMessage::GetList(null, $arFilter, $bCount);
919
920 $result = 0;
921 if ($approved === "N")
922 {
923 $result = intval($count['CNT_NOT_APPROVED']);
924 }
925 elseif ($approved === "Y")
926 {
927 $result = $count['CNT'] - $count['CNT_NOT_APPROVED'];
928 }
929 else
930 {
931 $result = intval($count);
932 }
933 $notCached++;
934 }
935
936 $arCacheCount[$forumID][$topicID][$approved] = $result;
937
938 if ($notCached > 2)
939 {
940 $obCache->StartDataCache($TTL, $cacheID, $cachePath);
941 CForumCacheManager::SetTag($cachePath, $cacheLabel.$forumID);
942 $obCache->EndDataCache(array("messages" => $arCacheCount[$forumID]));
943 $notCached = 0;
944 }
945 return $result;
946 }
947}
948
949class _CTopicDBResult extends CDBResult
950{
951 private $sNameTemplate = '';
952 private $noFilter = false;
953 private static $icons;
954
955 public function __construct($res, $params = array())
956 {
957 $this->sNameTemplate = (!empty($params["sNameTemplate"]) ? $params["sNameTemplate"] : '');
958 $this->noFilter = (array_key_exists('NoFilter', $params) && $params['NoFilter'] === true);
959 parent::__construct($res);
960 }
961 protected static function getIcon($iconTyping)
962 {
963 if (!is_array(self::$icons))
964 {
965 $result = array();
966 $smiles = CForumSmile::GetByType(CSmile::TYPE_ICON, LANGUAGE_ID);
967 foreach ($smiles as $smile)
968 $result[$smile["TYPING"]] = $smile["IMAGE"];
969 self::$icons = $result;
970 }
971 return (array_key_exists($iconTyping, self::$icons) ? self::$icons[$iconTyping] : '');
972 }
973 function Fetch()
974 {
975 global $DB;
976 if($res = parent::Fetch())
977 {
978 if (array_key_exists("ICON", $res) && !empty($res["ICON"]))
979 {
980 $res["IMAGE"] = self::getIcon($res["ICON"]);
981 }
982
983 if ($this->noFilter !== true)
984 {
985 if (COption::GetOptionString("forum", "FILTER", "Y") == "Y")
986 {
987 if (!empty($res["HTML"]))
988 {
989 $arr = unserialize($res["HTML"], ["allowed_classes" => false]);
990 if (is_array($arr) && is_set($arr, "TITLE"))
991 {
992 foreach ($arr as $key => $val)
993 {
994 if ($val <> '')
995 $res[$key] = $val;
996 }
997 }
998 }
999 if (!empty($res["F_HTML"]))
1000 {
1001 $arr = unserialize($res["F_HTML"], ["allowed_classes" => false]);
1002 if (is_array($arr))
1003 {
1004 foreach ($arr as $key => $val)
1005 {
1006 $res["F_".$key] = $val;
1007 }
1008 }
1009 if (!empty($res["TITLE"]))
1010 $res["F_TITLE"] = $res["TITLE"];
1011 }
1012 }
1013
1014 /* For CForumUser::UserAddInfo only */
1015 if (is_set($res, "FIRST_POST") || is_set($res, "LAST_POST"))
1016 {
1017 $arSqlSearch = array();
1018 if (is_set($res, "FIRST_POST"))
1019 $arSqlSearch["FIRST_POST"] = "FM.ID=".intval($res["FIRST_POST"]);
1020 if (is_set($res, "LAST_POST"))
1021 $arSqlSearch["LAST_POST"] = "FM.ID=".intval($res["LAST_POST"]);
1022 if (!empty($arSqlSearch)):
1023 $strSql = "SELECT FM.ID, ".$DB->DateToCharFunction("FM.POST_DATE", "FULL")." AS POST_DATE ".
1024 "FROM b_forum_message FM WHERE ".implode(" OR ", $arSqlSearch);
1025 $db_res = $DB->Query($strSql);
1026 if($db_res && $val = $db_res->Fetch()):
1027 do
1028 {
1029 if (is_set($res, "FIRST_POST") && $res["FIRST_POST"] == $val["ID"])
1030 $res["FIRST_POST_DATE"] = $val["POST_DATE"];
1031 if (is_set($res, "LAST_POST") && $res["LAST_POST"] == $val["ID"])
1032 $res["LAST_POST_DATE"] = $val["POST_DATE"];
1033 }while ($val = $db_res->Fetch());
1034 endif;
1035 endif;
1036 }
1037
1038 if (!empty($this->sNameTemplate))
1039 {
1040 $arTmp = array();
1041 foreach (array(
1042 "USER_START_ID" => "USER_START_NAME",
1043 "LAST_POSTER_ID" => "LAST_POSTER_NAME",
1044 "ABS_LAST_POSTER_ID" => "ABS_LAST_POSTER_NAME") as $id => $name)
1045 {
1046 $tmp = "";
1047 if (!empty($res[$id]))
1048 {
1049 if (in_array($res[$id], $arTmp))
1050 {
1051 $tmp = $arTmp[$res[$id]];
1052 }
1053 else
1054 {
1055 $arTmp[$res[$id]] = $tmp = (!empty($res[$name."_FRMT"]) ? $res[$name."_FRMT"] :
1056 CForumUser::GetFormattedNameByUserID($res[$id], $this->sNameTemplate));
1057 }
1058 }
1059
1060 $res[$name] = (!empty($tmp) ? $tmp : $res[$name]);
1061 }
1062 }
1063 }
1064 }
1065 return $res;
1066 }
1067}
$count
Определения admin_tab.php:4
$db_res
Определения options_user_settings.php:8
$ar_res
Определения options_user_settings_set.php:16
while($arRes=$dbSites->GetNext()) $arForums
Определения options.php:34
Определения topic.php:950
static getIcon($iconTyping)
Определения topic.php:961
__construct($res, $params=array())
Определения topic.php:955
Fetch()
Определения topic.php:973
static update(int $id, array &$data)
Определения topic.php:700
$result
Определения dbresult.php:16
$DB
Определения dbresult.php:40
static Reindex($ID, &$arMessage=[])
Определения message.php:429
static GetByID($ID, $arAddParams=array())
Определения message.php:591
static GetUserPermission($ID, $arUserGroups)
Определения forum_new.php:564
static GetByID($ID)
Определения forum_new.php:1399
static GetPermissionUserDefault($ID)
Определения forum_new.php:444
static GetSelectFields($arAddParams=array())
Определения forum_new.php:720
static SetStat($ID=0, $arParams=array())
Определения forum_new.php:1638
Определения topic.php:7
static Update($ID, $arFields, $skip_counts=False)
Определения topic.php:233
static Delete($ID)
Определения topic.php:413
static CanUserUpdateTopic($TID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
Определения topic.php:51
static GetMessageCount($forumID, $topicID, $approved=null)
Определения topic.php:865
static CanUserAddTopic($FID, $arUserGroups, $iUserID=0, $arForum=false, $ExternalPermission=false)
Определения topic.php:28
static CanUserDeleteTopicMessage($TID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
Определения topic.php:116
static Add($arFields)
Определения topic.php:213
static GetByID($ID, $arAddParams=array())
Определения topic.php:431
static SetStat($ID=0, $params=[])
Определения topic.php:720
static GetByIDEx($ID, $arAddParams=array())
Определения topic.php:482
static CheckFields($ACTION, &$arFields)
Определения topic.php:140
static SetReadLabelsNew($ID, $updateForum=false, $LastVisit=false, $arAddParams=array())
Определения topic.php:699
static SetReadLabels($ID, $arUserGroups)
Определения topic.php:663
static CleanUp($period=168)
Определения topic.php:714
static OnBeforeIBlockElementDelete($ELEMENT_ID)
Определения topic.php:833
static GetSelectFields($arAddParams=array(), $fields=array())
Определения topic.php:606
static GetNeighboringTopics($TID, $arUserGroups)
Определения topic.php:573
static CanUserViewTopic($TID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
Определения topic.php:8
static CanUserDeleteTopic($TID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
Определения topic.php:92
static MoveTopic2Forum($TID, $FID, $leaveLink="N")
Определения topic.php:284
static IsAdmin($userId=false, $arGroups=false)
Определения user.php:11
static IsLocked($userID)
Определения user.php:82
static GetFormattedNameByUserID($userID, $template="", $arUser=array())
Определения user.php:737
static ClearTag($type, $ID=0)
Определения functions.php:803
static SetTag($path, $tags)
Определения functions.php:784
static Log($object, $action, $id, $description="", $title="")
Определения event_log.php:14
static GetList($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
Определения message.php:193
static Concat($glue="", $pieces=array())
Определения forum_new.php:247
static GetByType($type, $lang)
Определения forum_new.php:2353
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
global $CACHE_MANAGER
Определения clear_component_cache.php:7
if(!is_array($prop["VALUES"])) $tmp
Определения component_props.php:203
$arFields
Определения dblapprove.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
$arr
Определения file_new.php:624
</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
$result
Определения get_property_values.php:14
if($ajaxMode) $ID
Определения get_user.php:27
$entity
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$ACTION
Определения csv_new_setup.php:27
endif
Определения csv_new_setup.php:990
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
IsModuleInstalled($module_id)
Определения tools.php:5301
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$name
Определения menu_edit.php:35
$message
Определения payment.php:8
if(intval($iTestTransaction) > 0) $arTmp
Определения payment.php:22
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$val
Определения options.php:1793
$matches
Определения index.php:22
$arRes
Определения options.php:104
const SITE_ID
Определения sonet_set_content_view.php:12
$k
Определения template_pdf.php:567
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106
$fields
Определения yandex_run.php:501