1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
include.php
См. документацию.
1<?php
2
4
6
8
9if (file_exists(__DIR__."/deprecated.php"))
10{
11 include("deprecated.php");
12}
13
14$arNameStatuses = @unserialize(COption::GetOptionString("forum", "statuses_name"), ["allowed_classes" => false]);
16$arNameStatuses[LANGUAGE_ID] = isset($arNameStatuses[LANGUAGE_ID]) && is_array($arNameStatuses[LANGUAGE_ID]) ? $arNameStatuses[LANGUAGE_ID] : array();
17$name = array("guest" => "Guest", "user" => "User", "moderator" => "Moderator", "editor" => "Editor", "administrator" => "Administrator");
18foreach ($name as $k => $v):
19 $name[$k] = trim(!empty($arMess["F_".mb_strtoupper($k)]) ? $arMess["F_".mb_strtoupper($k)] : $name[$k]);
20 $arNameStatuses[LANGUAGE_ID][$k] = htmlspecialcharsbx(empty($arNameStatuses[LANGUAGE_ID][$k]) ? $name[$k] : $arNameStatuses[LANGUAGE_ID][$k]);
22
23$GLOBALS["FORUM_STATUS_NAME"] = $arNameStatuses[LANGUAGE_ID];
24$GLOBALS["SHOW_FORUM_DEBUG_INFO"] = false;
25$GLOBALS["FORUM_CACHE"] = array(
26 "FORUM" => array(),
27 "MESSAGE" => array(),
28 "USER" => array(),
29 "TOPIC" => array(),
30 "TOPIC_INFO" => array());
31/* cache structure:
32 [forum] [forum_id]
33 main - main info about forum
34 ex - extra (additional) info
35 ex_site - extra info with site path
36 permission - array permission for group on forum array(implode("-", group_id_array) => permission)
37 permissions - array permission with permissions for all groups on forum array(group_id => permission)
38 sites - site for forum array(site_id => path)
39 message - i do not know
40 topic - i do not know
41 topic_filter - i do not know
42 user - i do not know
43 path to clear cache
44*/
45if(!defined("CACHED_b_forum_group"))
46 define("CACHED_b_forum_group", 3600);
47if(!defined("CACHED_b_forum"))
48 define("CACHED_b_forum", 3600);
49if(!defined("CACHED_b_forum_perms"))
50 define("CACHED_b_forum_perms", 3600);
51if(!defined("CACHED_b_forum2site"))
52 define("CACHED_b_forum2site", 3600);
53if(!defined("CACHED_b_forum_filter"))
54 define("CACHED_b_forum_filter", 3600);
55if(!defined("CACHED_b_forum_user"))
56 define("CACHED_b_forum_user", 3600);
58 "forum",
59 array(
60 "bitrix\\forum\\internals\\basetable" => "lib/internals/basetable.php",
61 "bitrix\\forum\\comments\\comment" => "lib/comments/comment.php",
62 "bitrix\\forum\\comments\\entity" => "lib/comments/entity.php",
63 "bitrix\\forum\\comments\\eventmanager" => "lib/comments/eventmanager.php",
64 "bitrix\\forum\\comments\\feed" => "lib/comments/feed.php",
65 "bitrix\\forum\\comments\\taskentity" => "lib/comments/taskentity.php",
66 "bitrix\\forum\\comments\\user" => "lib/comments/user.php",
67 "bitrix\\forum\\forum" => "lib/forum.php",
68 "bitrix\\forum\\badwords\\dictionary" => "lib/badwords/dictionary.php",
69 "bitrix\\forum\\badwords\\filter" => "lib/badwords/filter.php",
70 "bitrix\\forum\\badwords\\letter" => "lib/badwords/letter.php",
71
72 "textParser" => "classes/general/functions.php",
73 "forumTextParser" => "classes/general/functions.php",
74
75 "CForumNew" => "classes/" . $dbType . "/forum_new.php",
76 "CForumGroup" => "classes/" . $dbType . "/forum_new.php",
77 "CForumSmile" => "classes/general/forum_new.php",
78 "_CForumDBResult"=>"classes/general/forum_new.php",
79
80 "CForumTopic" => "classes/mysql/topic.php",
81 "_CTopicDBResult" => "classes/general/topic.php",
82
83 "CForumMessage" => "classes/mysql/message.php",
84 "CForumFiles" => "classes/mysql/message.php",
85 "_CMessageDBResult" => "classes/general/message.php",
86
87 "CForumEventLog" => "classes/general/event_log.php",
88
89 "CFilterDictionary" => "classes/mysql/filter_dictionary.php",
90 "CFilterLetter" => "classes/mysql/filter_dictionary.php",
91 "CFilterUnquotableWords" => "classes/mysql/filter_dictionary.php",
92
93 "CForumPMFolder" => "classes/mysql/private_message.php",
94 "CForumPrivateMessage" => "classes/mysql/private_message.php",
95
96 "CForumPoints" => "classes/mysql/points.php",
97 "CForumPoints2Post" => "classes/mysql/points.php",
98 "CForumUserPoints" => "classes/mysql/points.php",
99
100 "CForumRank" => "classes/mysql/user.php",
101 "CForumStat" => "classes/mysql/user.php",
102 "CForumSubscribe" => "classes/mysql/user.php",
103 "CForumUser" => "classes/mysql/user.php",
104
105 "CForumParameters" => "tools/components_lib.php",
106 "CForumEMail" => "mail/mail.php",
107 "CForumFormat" => "tools/components_lib.php",
108 "CRatingsComponentsForum" => "classes/mysql/ratings_components.php",
109 "CEventForum" => "classes/general/event_log.php",
110
111 "CForumCacheManager" => "classes/general/functions.php",
112 "CForumAutosave" => "classes/general/functions.php",
113 "CForumDBTools" => "tools/dbtools.php",
114 "CForumNotifySchema" => "classes/general/forum_notify_schema.php",
115
116 "CForumRestService" => "classes/general/rest.php",
117 ));
118
121
122function ForumCurrUserPermissions($FID, $arAddParams = array())
123{
124 static $arCache = array();
125 $arAddParams = (is_array($arAddParams) ? $arAddParams : array());
126 $arAddParams["PERMISSION"] = $arAddParams["PERMISSION"] ?? '';
127 if (! isset($arCache[$FID.$arAddParams["PERMISSION"]]))
128 {
130 {
131 $result = "Y";
132 }
133 else
134 {
135 $strPerms = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : CForumNew::GetUserPermission($FID, $GLOBALS["USER"]->GetUserGroupArray()));
136 if ($strPerms <= "E")
137 {
138 $result = $strPerms;
139 }
140 elseif (CForumUser::IsLocked($GLOBALS["USER"]->GetID()))
141 {
142 $strPerms = CForumNew::GetPermissionUserDefault($FID);
143 $result = ($strPerms >= "E" ? $strPerms : "E");
144 }
145 else
146 {
147 $result = $strPerms;
148 }
149 }
150 $arCache[$FID.$arAddParams["PERMISSION"]] = $result;
151 }
152
153 return $arCache[$FID.$arAddParams["PERMISSION"]];
154}
155
156function ForumSubscribeNewMessagesEx($FID, $TID, $NEW_TOPIC_ONLY, &$strErrorMessage, &$strOKMessage, $strSite = false, $SOCNET_GROUP_ID = false)
157{
158 if ($strSite===false)
159 $strSite = SITE_ID;
160
161 return ForumSubscribeNewMessages($FID, $TID, $strErrorMessage, $strOKMessage, $NEW_TOPIC_ONLY, $strSite, $SOCNET_GROUP_ID);
162}
163
164function ForumUnsubscribeNewMessagesEx($FID, $TID, $NEW_TOPIC_ONLY, &$strErrorMessage, &$strOKMessage, $strSite = false, $SOCNET_GROUP_ID = false)
165{
166 if ($strSite===false)
167 $strSite = SITE_ID;
168
169 return ForumUnsubscribeNewMessages($FID, $TID, $strErrorMessage, $strOKMessage, $NEW_TOPIC_ONLY, $strSite, $SOCNET_GROUP_ID);
170}
171
172function ForumUnsubscribeNewMessages($FID, $TID, &$strErrorMessage, &$strOKMessage, $NEW_TOPIC_ONLY = "N", $strSite = false, $SOCNET_GROUP_ID = false)
173{
174 global $USER;
175
176 $strSite = ($strSite===false ? SITE_ID : $strSite);
177 $FID = intval($FID);
178 $TID = intval($TID);
179 $arError = array();
180 $arNote = array();
181
182 if (!$USER->IsAuthorized())
183 {
184 $arError[] = GetMessage("FORUM_SUB_ERR_AUTH");
185 }
186 else
187 {
189 "USER_ID" => $USER->GetID(),
190 "FORUM_ID" => $FID,
191 "SITE_ID" => $strSite,
192 "TOPIC_ID" => ($TID>0) ? $TID : false);
193 if($SOCNET_GROUP_ID>0)
194 $arFields['SOCNET_GROUP_ID'] = $SOCNET_GROUP_ID;
196 if ($db_res && ($res = $db_res->Fetch()))
197 {
198 if (!CForumSubscribe::CanUserDeleteSubscribe($res['ID'], $USER->GetUserGroupArray(), $USER->GetID()))
199 $arError[] = GetMessage("FORUM_SUB_ERR_PERMS");
200 else
202 }
203 else
204 $arError[] = GetMessage("FORUM_SUB_ERR_UNSUBSCR");
205 }
206
207 if (!empty($arError))
208 $strErrorMessage .= implode(".\n", $arError);
209 if (!empty($arNote))
210 $strOKMessage .= implode(".\n", $arNote);
211 if (empty($arError))
212 return True;
213 else
214 return False;
215}
216
217function ForumSubscribeNewMessages($FID, $TID, &$strErrorMessage, &$strOKMessage, $NEW_TOPIC_ONLY = "N", $strSite = false, $SOCNET_GROUP_ID = false)
218{
219 global $USER;
220
221 $strSite = ($strSite===false ? SITE_ID : $strSite);
222 $FID = intval($FID);
223 $TID = intval($TID);
224 $arError = array();
225 $arNote = array();
226
227 if (!$USER->IsAuthorized())
228 {
229 $arError[] = GetMessage("FORUM_SUB_ERR_AUTH");
230 }
231 elseif ($SOCNET_GROUP_ID==false && !CForumSubscribe::CanUserAddSubscribe($FID, $USER->GetUserGroupArray()))
232 {
233 $arError[] = GetMessage("FORUM_SUB_ERR_PERMS");
234 }
235 else
236 {
238 "USER_ID" => $USER->GetID(),
239 "FORUM_ID" => $FID,
240 "SITE_ID" => $strSite,
241 "TOPIC_ID" => ($TID>0) ? $TID : false);
242 if($SOCNET_GROUP_ID>0)
243 $arFields['SOCNET_GROUP_ID'] = $SOCNET_GROUP_ID;
245 if ($db_res && ($res = $db_res->Fetch()))
246 {
247 $sError = GetMessage("FORUM_SUB_ERR_ALREADY_TOPIC");
248 if ($TID <= 0)
249 {
250 if ($res["NEW_TOPIC_ONLY"] == "Y")
251 {
252 $sError = GetMessage("FORUM_SUB_ERR_ALREADY_NEW");
253 if ($NEW_TOPIC_ONLY != $res["NEW_TOPIC_ONLY"])
254 $sError = str_replace("#FORUM_NAME#", htmlspecialcharsbx($res["FORUM_NAME"]),
255 GetMessage("FORUM_SUB_ERR_ALREADY_ALL_HELP"));
256 }
257 else
258 {
259 $sError = GetMessage("FORUM_SUB_ERR_ALREADY_ALL");
260 if ($NEW_TOPIC_ONLY != $res["NEW_TOPIC_ONLY"])
261 $sError = str_replace("#FORUM_NAME#", htmlspecialcharsbx($res["FORUM_NAME"]),
262 GetMessage("FORUM_SUB_ERR_ALREADY_NEW_HELP"));
263 }
264 }
265 $arError[] = $sError;
266 }
267 else
268 {
269 $arFields["NEW_TOPIC_ONLY"] = (($arFields["TOPIC_ID"]!==false) ? "N" : $NEW_TOPIC_ONLY );
270
272 if (intval($subid)>0)
273 {
274 if ($TID>0)
275 $arNote[] = GetMessage("FORUM_SUB_OK_MESSAGE_TOPIC");
276 else
277 $arNote[] = GetMessage("FORUM_SUB_OK_MESSAGE");
278 }
279 else
280 {
281 $arError[] = GetMessage("FORUM_SUB_ERR_UNKNOWN");
282 }
283 }
284 }
285
286 if (!empty($arError))
287 $strErrorMessage .= implode(".\n",$arError);
288 if (!empty($arError))
289 $strOKMessage .= implode(".\n",$arNote);
290
291 if (empty($arError))
292 return True;
293 else
294 return False;
295}
296
298{
299 $ip = false;
300 if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
301 {
302 $ips = explode(", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
303 foreach ($ips as $ipst)
304 {
305 // Skip RFC 1918 IP's 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16
306 if (!preg_match("/^(10|172\.16|192\.168)\./", $ipst) && preg_match("/^[^.]+\.[^.]+\.[^.]+\.[^.]+/", $ipst))
307 {
308 $ip = $ipst;
309 break;
310 }
311 }
312 }
313 // Return with the found IP or the remote address
314 return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
315}
316
318 $MESSAGE_TYPE, $FID, $TID, $MID, $arFieldsG,
319 &$strErrorMessage, &$strOKMessage,
320 $iFileSize = false,
321 $captcha_word = "", $captcha_sid = 0, $captcha_code = "")
322{
323 try
324 {
325 global $USER;
326 $forum = \Bitrix\Forum\Forum::getById($FID);
327 $usr = \Bitrix\Forum\User::getById($USER->GetID());
328 //region 0. CAPTCHA
329 if (!$USER->IsAuthorized() && $forum["USE_CAPTCHA"]=="Y")
330 {
331 $cpt = new CCaptcha();
332 if ($captcha_code <> '')
333 {
334 if (!$cpt->CheckCodeCrypt($captcha_word, $captcha_code))
335 {
336 throw new \Bitrix\Main\AccessDeniedException(GetMessage("FORUM_POSTM_CAPTCHA"));
337 }
338 }
339 else if (!$cpt->CheckCode($captcha_word, $captcha_sid))
340 {
341 throw new \Bitrix\Main\AccessDeniedException(GetMessage("FORUM_POSTM_CAPTCHA"));
342 }
343 }
344 //endregion
345 //region 1. Set permission
346 if ($usr->getPermissionOnForum($FID) < \Bitrix\Forum\Permission::CAN_MODERATE)
347 {
348 if (!empty($arFieldsG["PERMISSION_EXTERNAL"]))
349 {
350 $usr->setPermissionOnForum($FID, $arFieldsG["PERMISSION_EXTERNAL"]);
351 }
352 elseif (!empty($arFieldsG["SONET_PERMS"]))
353 {
354 $externalPermission = "A";
355 if ($arFieldsG["SONET_PERMS"]["bCanFull"] === true)
356 $externalPermission = "Y";
357 elseif ($arFieldsG["SONET_PERMS"]["bCanNew"] === true)
358 $externalPermission = "M";
359 elseif ($arFieldsG["SONET_PERMS"]["bCanWrite"] === true)
360 $externalPermission = "I";
361 $usr->setPermissionOnForum($FID, $externalPermission);
362 }
363 }
364 //endregion
365 //region 2. Collect data
366 $arFieldsG["POST_MESSAGE"] = trim($arFieldsG["POST_MESSAGE"]);
367 $arFieldsG["USE_SMILES"] = ($arFieldsG["USE_SMILES"] == "Y" ? "Y" : "N");
368 if (array_key_exists("ATTACH_IMG", $arFieldsG))
369 {
370 if (!empty($arFieldsG["ATTACH_IMG"]))
371 {
372 $arFieldsG["FILES"] = [$arFieldsG["ATTACH_IMG"]];
373 }
374 unset($arFieldsG["ATTACH_IMG"]);
375 }
376 $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("FORUM_MESSAGE", $arFieldsG);
377 //endregion
378 //region 3. Check permission & action
379 if ($MESSAGE_TYPE == "EDIT")
380 {
381 if (!$usr->canModerate($forum) || $arFieldsG["EDIT_ADD_REASON"] === "Y")
382 {
383 $arFieldsG["EDITOR_ID"] = $usr->getId();
384 $arFieldsG["EDITOR_NAME"] = $usr->getName();
385 $arFieldsG["EDITOR_EMAIL"] = trim($arFieldsG["EDITOR_EMAIL"]);
386 $arFieldsG["EDIT_REASON"] = trim($arFieldsG["EDIT_REASON"]);
387 $arFieldsG["EDIT_DATE"] = new \Bitrix\Main\Type\DateTime();
388 }
389 else
390 {
391 $arFieldsG["EDITOR_ID"] = 0;
392 $arFieldsG["EDITOR_NAME"] = "";
393 $arFieldsG["EDITOR_EMAIL"] = "";
394 $arFieldsG["EDIT_REASON"] = "";
395 $arFieldsG["EDIT_DATE"] = "";
396 }
397
398 if (array_key_exists("TITLE", $arFieldsG))
399 {
400 $topic = \Bitrix\Forum\Topic::getById($TID);
401
402 if (!$usr->canEditTopic($topic))
403 {
404 throw new \Bitrix\Main\AccessDeniedException(GetMessage("ADDMESS_NO_PERMS2EDIT"));
405 }
406 $result = $topic->edit($arFieldsG);
407 }
408 else
409 {
410 $message = \Bitrix\Forum\Message::getById($MID);
411 if (!$usr->canEditMessage($message))
412 {
413 throw new \Bitrix\Main\AccessDeniedException(GetMessage("ADDMESS_NO_PERMS2EDIT"));
414 }
415 $result = $message->edit($arFieldsG);
416 }
417 }
418 else
419 {
420 $arFieldsG["AUTHOR_ID"] = $usr->getId();
421 $arFieldsG["AUTHOR_EMAIL"] = trim($arFieldsG["AUTHOR_EMAIL"] ?? '');
422 $arFieldsG["AUTHOR_NAME"] = trim($arFieldsG["AUTHOR_NAME"] ?? '');
423 if ($arFieldsG["AUTHOR_NAME"] == '' && $usr->getId() > 0)
424 {
425 $arFieldsG["AUTHOR_NAME"] = $usr->getName();
426 }
427 $arFieldsG["APPROVED"] = $forum["MODERATION"] != "Y" || $usr->canModerate($forum) ? "Y" : "N";
428 $arFieldsG["POST_DATE"] = new \Bitrix\Main\Type\DateTime();
429
430 if (\Bitrix\Main\ModuleManager::isModuleInstalled("statistic"))
431 {
432 $arFieldsG["GUEST_ID"] = $_SESSION["SESS_GUEST_ID"];
433 }
434 if ($realIp = \Bitrix\Main\Service\GeoIp\Manager::getRealIp())
435 {
436 $arFieldsG["AUTHOR_IP"] = $realIp;
437 $arFieldsG["AUTHOR_REAL_IP"] = $realIp;
438 if (\Bitrix\Main\Config\Option::get("forum", "FORUM_GETHOSTBYADDR", "N") == "Y")
439 {
440 $arFieldsG["AUTHOR_REAL_IP"] = @gethostbyaddr($realIp);
441 }
442 }
443
444 if ($MESSAGE_TYPE == "NEW") // New Topic
445 {
446 if (!$usr->canAddTopic($forum))
447 {
448 throw new \Bitrix\Main\AccessDeniedException(GetMessage("ADDMESS_NO_PERMS2NEW"));
449 }
450 $result = \Bitrix\Forum\Topic::create($forum, $arFieldsG);
451 }
452 else
453 {
454 $topic = \Bitrix\Forum\Topic::getById($TID);
455 if (!$usr->canAddMessage($topic))
456 {
457 throw new \Bitrix\Main\AccessDeniedException(GetMessage("ADDMESS_NO_PERMS2REPLY"));
458 }
459
460 $result = \Bitrix\Forum\Message::create($topic, $arFieldsG);
461 }
462 }
463 //endregion
464 //region 5.Send mail
465 if ($result->isSuccess())
466 {
467 $MID = $result->getId();
468 if ($MESSAGE_TYPE == "NEW" || $MESSAGE_TYPE == "REPLY")
469 {
470 CForumMessage::SendMailMessage($MID, array(), false, "NEW_FORUM_MESSAGE");
471 if ($arFieldsG["APPROVED"] != "Y")
472 {
473 $strOKMessage = GetMessage("ADDMESS_AFTER_MODERATE").". \n";
474 }
475 else
476 {
477 $strOKMessage = GetMessage("ADDMESS_SUCCESS_ADD").". \n";
478 }
479 }
480 else
481 {
482 CForumMessage::SendMailMessage($MID, array(), false, "EDIT_FORUM_MESSAGE");
483 $strOKMessage = GetMessage("ADDMESS_SUCCESS_EDIT").". \n";
484 }
485 return $MID;
486 }
487 else
488 {
489 $strErrorMessage = implode("\n", $result->getErrorMessages());
490 return false;
491 }
492
493 }
494 catch(Exception $e)
495 {
496 $strErrorMessage = $e->getMessage();
497 return false;
498 }
499}
500
501function ForumModerateMessage($message, $TYPE, &$strErrorMessage, &$strOKMessage, $arAddParams = array())
502{
503 global $USER;
504 $arError = array();
505 $arOK = array();
506 $arAddParams = (!is_array($arAddParams) ? array($arAddParams) : $arAddParams );
507 $arAddParams["PERMISSION"] = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : false);
509 if (empty($message))
510 {
511 $arError[] = GetMessage("DELMES_NO_MESS").". \n";
512 }
513 else
514 {
515 $db_res = CForumMessage::GetList(array(), array("@ID" => implode(",", $message)));
516 if ($db_res)
517 {
518 while ($arMessage = $db_res->Fetch())
519 {
520 if (!(ForumCurrUserPermissions($arMessage["FORUM_ID"], $arAddParams) >= "Q" ||
521 CForumMessage::CanUserUpdateMessage($arMessage["ID"], $USER->GetUserGroupArray(), $USER->GetID(), $arAddParams["PERMISSION"])))
522 $arError[] = GetMessage("MODMESS_NO_PERMS")." (MID=".$arMessage["ID"]."). \n";
523 else
524 {
525 $arFields = array("APPROVED" => ($TYPE == "SHOW" ? "Y" : "N"));
526 $ID = CForumMessage::Update($arMessage["ID"], $arFields);
527 if ($ID > 0)
528 {
529 $TID = $arMessage["TOPIC_ID"];
530 $arTopic = CForumTopic::GetByID($TID);
531 /***************** Events onMessageModerate ************************/
532 foreach (GetModuleEvents("forum", "onMessageModerate", true) as $arEvent)
533 ExecuteModuleEventEx($arEvent, array($ID, $TYPE, $arMessage, $arTopic));
534 /***************** /Events *****************************************/
535 $res = array(
536 "ID" => $arMessage["ID"],
537 "AUTHOR_NAME" => $arMessage["AUTHOR_NAME"],
538 "POST_MESSAGE" => $arMessage["POST_MESSAGE"],
539 "TITLE" => $arTopic["TITLE"],
540 "TOPIC_ID" => $TID,
541 "FORUM_ID" => $arMessage["FORUM_ID"]
542 );
543 $res = serialize($res);
544 if ($TYPE == "SHOW")
545 {
546 $arOK[] = GetMessage("MODMESS_SUCCESS_SHOW")." (MID=".$arMessage["ID"]."). \n";
547 CForumMessage::SendMailMessage($arMessage["ID"], array(), false, "NEW_FORUM_MESSAGE");
548 CForumEventLog::Log("message", "approve", $arMessage["ID"], $res);
549 }
550 else
551 {
552 $arOK[] = GetMessage("MODMESS_SUCCESS_HIDE")." (MID=".$arMessage["ID"]."). \n";
553 CForumMessage::SendMailMessage($arMessage["ID"], array(), false, "EDIT_FORUM_MESSAGE");
554 CForumEventLog::Log("message", "unapprove", $arMessage["ID"], $res);
555 }
556 }
557 else
558 {
559 $arError[] = GetMessage("MODMESS_ERROR_MODER")." (MID=".$arMessage["ID"]."). \n";
560 }
561 }
562 }
563 }
564 else
565 $arError[] = GetMessage("DELMES_NO_MESS").". \n";
566 }
567 $strErrorMessage .= implode("", $arError);
568 $strOKMessage .= implode("", $arOK);
569
570 if (count($arError) <= 0)
571 return true;
572 else
573 return false;
574}
575
576function ForumOpenCloseTopic($topicIds, $TYPE, &$strErrorMessage, &$strOKMessage, $arAddParams = array())
577{
578 $topicIds = is_array($topicIds) ? $topicIds : [$topicIds];
579 $arError = array();
580 $arOk = array();
581 $arAddParams = (is_array($arAddParams) ? $arAddParams : []);
582 $arAddParams["PERMISSION"] = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : false);
583
584
585 global $USER;
586 $usr = \Bitrix\Forum\User::getById($USER->GetID());
587 foreach ($topicIds as $topicId)
588 {
589 $topic = \Bitrix\Forum\Topic::getById($topicId);
590 $forum = \Bitrix\Forum\Forum::getById($topic->getForumId());
591 if (is_string($arAddParams["PERMISSION"]))
592 {
593 $usr->setPermissionOnForum($forum, $arAddParams["PERMISSION"]);
594 }
595 if (!$usr->canModerate($forum))
596 {
597 $arError[] = GetMessage("FMT_NO_PERMS_EDIT") . " (TID={$topic->getId()})";
598 }
599 else
600 {
601 $result = ($TYPE === "OPEN" ? $topic->open() : $topic->close());
602
603 if (!$result->isSuccess())
604 {
605 $arError[] = ($TYPE === "CLOSE" ? GetMessage("OCTOP_ERROR_CLOSE") : GetMessage("OCTOP_ERROR_OPEN")) . " (TID={$topic->getId()})";
606 }
607 else if (!empty($result->getData()))
608 {
609 $arOk[] = ($TYPE === "CLOSE" ? GetMessage("OCTOP_SUCCESS_CLOSE") : GetMessage("OCTOP_SUCCESS_OPEN")) . " (TID={$topic->getId()})";
610 }
611 }
612 }
613
614 $strOKMessage .= implode(".\n", $arOk);
615
616 if (count($arError) > 0)
617 {
618 $strErrorMessage .= implode(".\n", $arError).".\n";
619 return false;
620 }
621
622 return true;
623}
624
625function ForumTopOrdinaryTopic($topic, $TYPE, &$strErrorMessage, &$strOKMessage, $arAddParams = array())
626{
627 global $USER;
628 $arError = array();
629 $arOk = array();
630 $arFields = array("SORT" => ($TYPE == "TOP" ? 100 : 150));
631 $arAddParams = (!is_array($arAddParams) ? array($arAddParams) : $arAddParams );
632 $arAddParams["PERMISSION"] = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : false);
633
634 $topic = ForumDataToArray($topic);
635 $forumID = 0;
636 if (empty($topic))
637 {
638 $arError[] = GetMessage("TOTOP_NO_TOPIC");
639 }
640 else
641 {
642 if (!CForumUser::IsAdmin() && !$arAddParams["PERMISSION"])
643 $db_res = CForumTopic::GetListEx(array(), array("@ID" => implode(",", $topic), "PERMISSION_STRONG" => true));
644 else
645 $db_res = CForumTopic::GetListEx(array(), array("@ID" => implode(",", $topic)));
646 if ($db_res && $res = $db_res->Fetch())
647 {
648 do
649 {
650 if ($arAddParams["PERMISSION"] && !CForumTopic::CanUserUpdateTopic($res["ID"], $USER->GetUserGroupArray(), $USER->GetID(), $arAddParams["PERMISSION"]))
651 {
652 $arError[] = GetMessage("FMT_NO_PERMS_MODERATE")." (TID=".intval($res["ID"]).")";
653 continue;
654 }
655 $ID = CForumTopic::Update($res["ID"], $arFields, True);
656 if (intval($ID)<=0)
657 {
658 if ($TYPE=="TOP")
659 $arError[] = GetMessage("TOTOP_ERROR_TOP")." (TID=".intval($res["ID"]).")";
660 else
661 $arError[] = GetMessage("TOTOP_ERROR_TOP1")." (TID=".intval($res["ID"]).")";
662 }
663 else
664 {
665 $forumID = $res['FORUM_ID'];
666 $arTopic["SORT"] = $arFields["SORT"];
667 $log = serialize($res);
668 if ($TYPE=="TOP"):
669 $arOk[] = GetMessage("TOTOP_SUCCESS_TOP")." (TID=".intval($res["ID"]).")";
670 CForumEventLog::Log("topic", "stick", $ID, $log);
671 else:
672 $arOk[] = GetMessage("TOTOP_SUCCESS_TOP1")." (TID=".intval($res["ID"]).")";
673 CForumEventLog::Log("topic", "unstick", $ID, $log);
674 endif;
675 }
676 }while ($res = $db_res->Fetch());
677 if (intval($forumID) > 0)
678 CForumCacheManager::ClearTag("F", $forumID);
679 }
680 else
681 {
682 $arError[] = GetMessage("FMT_NO_PERMS_EDIT");
683 }
684 }
685 if (count($arError) > 0)
686 $strErrorMessage .= implode(".\n", $arError).".\n";
687 if (count($arOk) > 0)
688 $strOKMessage .= implode(".\n", $arOk).".\n";
689
690 if (empty($arError))
691 return true;
692 else
693 return false;
694}
695
696function ForumDeleteTopic($topic, &$strErrorMessage, &$strOKMessage, $arAddParams = array())
697{
698 global $USER;
699
700 $arError = array();
701 $arOk = array();
702 $arAddParams = (!is_array($arAddParams) ? array($arAddParams) : $arAddParams);
703 $arAddParams["PERMISSION"] = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : false);
704
705 $topic = ForumDataToArray($topic);
706 if (empty($topic))
707 {
708 $arError[] = GetMessage("DELTOP_NO_TOPIC");
709 }
710 else
711 {
712 if (!CForumUser::IsAdmin() && !$arAddParams["PERMISSION"])
713 $db_res = CForumTopic::GetListEx(array(), array("@ID" => implode(",", $topic), "PERMISSION_STRONG" => true));
714 else
715 $db_res = CForumTopic::GetListEx(array(), array("@ID" => implode(",", $topic)));
716 if ($db_res && $res = $db_res->Fetch())
717 {
718 do
719 {
720 if (CForumTopic::CanUserDeleteTopic($res["ID"], $USER->GetUserGroupArray(), $USER->GetID(), $arAddParams["PERMISSION"]))
721 {
722 if (CForumTopic::Delete($res["ID"]))
723 {
724 $arOk[] = GetMessage("DELTOP_OK")." (TID=".intval($res["ID"]).")";
725 CForumCacheManager::ClearTag("F", $res['FORUM_ID']);
727 CForumEventLog::Log("topic", "delete", $res["ID"], serialize($res));
728 }
729 else
730 {
731 $arError[] = GetMessage("DELTOP_NO")." (TID=".intval($res["ID"]).")";
732 }
733 }
734 else
735 {
736 $arError[] = GetMessage("DELTOP_NO_PERMS")." (TID=".intval($res["ID"]).")";
737 }
738
739 }while ($res = $db_res->Fetch());
740 }
741 else
742 {
743 $arError[] = GetMessage("FMT_NO_PERMS_EDIT");
744 }
745 }
746 if (count($arError) > 0)
747 $strErrorMessage .= implode(".\n", $arError).".\n";
748 if (count($arOk) > 0)
749 $strOKMessage .= implode(".\n", $arOk).".\n";
750
751 if (count($arError) > 0)
752 return false;
753 else
754 return true;
755}
756
757function ForumDeleteMessage($message, &$strErrorMessage, &$strOKMessage, $arAddParams = array())
758{
759 global $USER;
760 $arError = array();
761 $arOK = array();
762 $arAddParams = (!is_array($arAddParams) ? array($arAddParams) : $arAddParams );
763 $arAddParams["PERMISSION"] = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : false);
764
766 if (empty($message))
767 {
768 $arError[] = GetMessage("DELMES_NO_MESS");
769 }
770 else
771 {
772 foreach ($message as $MID)
773 {
774 if (!CForumMessage::CanUserDeleteMessage($MID, $USER->GetUserGroupArray(), $USER->GetID(), $arAddParams["PERMISSION"]))
775 $arError[] = GetMessage("DELMES_NO_PERMS")."(MID=".$MID.")";
776 else
777 {
778 $arMessage = CForumMessage::GetByID($MID, array("FILTER" => "N"));
779 if (CForumMessage::Delete($MID)):
780 $arOK[] = GetMessage("DELMES_OK")."(MID=".$MID.")";
781 $TID = $arMessage["TOPIC_ID"];
782 $arTopic = CForumTopic::GetByID($TID);
783 $arMessage["TITLE"] = $arTopic["TITLE"];
784 CForumEventLog::Log("message", "delete", $MID, serialize($arMessage));
785 else:
786 $arError[] = GetMessage("DELMES_NO")."(MID=".$MID.")";
787 endif;
788 }
789 }
790 }
791 if (!empty($arError))
792 $strErrorMessage .= implode(".\n", $arError).".\n";
793 if (!empty($arOK))
794 $strOKMessage .= implode(".\n", $arOK).".\n";
795 return (empty($arError) ? true : false);
796}
797
798function ForumSpamTopic($topic, &$strErrorMessage, &$strOKMessage, $arAddParams = array())
799{
800 global $USER;
801
802 $arError = array();
803 $arOk = array();
804 $arAddParams = (!is_array($arAddParams) ? array($arAddParams) : $arAddParams);
805 $arAddParams["PERMISSION"] = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : false);
806
807 $topic = ForumDataToArray($topic);
808 if (empty($topic))
809 {
810 $arError[] = GetMessage("SPAMTOP_NO_TOPIC");
811 }
812 else
813 {
814 if (!CForumUser::IsAdmin() && !$arAddParams["PERMISSION"])
815 $db_res = CForumTopic::GetListEx(array(), array("@ID" => implode(",", $topic), "PERMISSION_STRONG" => true));
816 else
817 $db_res = CForumTopic::GetListEx(array(), array("@ID" => implode(",", $topic)));
818 if ($db_res && $res = $db_res->Fetch())
819 {
820 do
821 {
822 if (CForumTopic::CanUserDeleteTopic($res["ID"], $USER->GetUserGroupArray(), $USER->GetID(), $arAddParams["PERMISSION"]))
823 {
824 $db_mes = CForumMessage::GetList(array("ID"=>"ASC"), array("TOPIC_ID" => $res["ID"]));
825 if ($db_mes && $mes = $db_mes->Fetch() && CModule::IncludeModule("mail"))
826 {
827 CMailMessage::MarkAsSpam($mes["XML_ID"], "Y");
828 }
829
830 if (CForumTopic::Delete($res["ID"]))
831 {
832 $arOk[] = GetMessage("SPAMTOP_OK")." (TID=".intval($res["ID"]).")";
833 CForumEventLog::Log("topic", "spam", $res["ID"], print_r($res, true).print_r($mes, true));
834 }
835 else
836 {
837 $arError[] = GetMessage("SPAMTOP_NO")." (TID=".intval($res["ID"]).")";
838 }
839 }
840 else
841 {
842 $arError[] = GetMessage("SPAMTOP_NO_PERMS")." (TID=".intval($res["ID"]).")";
843 }
844 }while ($res = $db_res->Fetch());
845 }
846 else
847 {
848 $arError[] = GetMessage("FMT_NO_PERMS_EDIT");
849 }
850 }
851 if (count($arError) > 0)
852 $strErrorMessage .= implode(".\n", $arError).".\n";
853 if (count($arOk) > 0)
854 $strOKMessage .= implode(".\n", $arOk).".\n";
855
856 if (count($arError) > 0)
857 return false;
858 else
859 return true;
860}
861
862function ForumSpamMessage($message, &$strErrorMessage, &$strOKMessage, $arAddParams = array())
863{
864 global $USER;
865 $arError = array();
866 $arOK = array();
867 $arAddParams = (!is_array($arAddParams) ? array($arAddParams) : $arAddParams );
868 $arAddParams["PERMISSION"] = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : false);
870 if (empty($message))
871 {
872 $arError[] = GetMessage("SPAM_NO_MESS");
873 }
874 else
875 {
876 foreach ($message as $MID)
877 {
878 if (!CForumMessage::CanUserDeleteMessage($MID, $USER->GetUserGroupArray(), $USER->GetID(), $arAddParams["PERMISSION"]))
879 $arError[] = GetMessage("SPAM_NO_PERMS")."(MID=".$MID.")";
880 else
881 {
882 $arMessage = CForumMessage::GetByID($MID, array("FILTER" => "N"));
883 if (CModule::IncludeModule("mail"))
884 {
885 CMailMessage::MarkAsSpam($arMessage["XML_ID"], "Y");
886 }
887 if (CForumMessage::Delete($MID)):
888 $arOK[] = GetMessage("SPAM_OK")."(MID=".$MID.")";
889 CForumEventLog::Log("message", "spam", $MID, print_r($arMessage, true));
890 else:
891 $arError[] = GetMessage("SPAM_NO")."(MID=".$MID.")";
892 endif;
893 }
894 }
895 }
896 if (!empty($arError))
897 $strErrorMessage .= implode(".\n", $arError).".\n";
898 if (!empty($arOK))
899 $strOKMessage .= implode(".\n", $arOK).".\n";
900 return (empty($arError) ? true : false);
901}
903{
904 $message_exist = false;
905 $result = array();
906 if (!is_array($message))
907 $message = explode(",", $message);
908
909 foreach ($message as $message_id)
910 {
911 if (intval(trim($message_id)) > 0)
912 {
913 $result[] = intval(trim($message_id));
914 $message_exist = true;
915 }
916 }
917
918 if ($message_exist)
919 return $result;
920 else
921 return false;
922}
923
925{
926 return ForumDeleteMessage($message, $strErrorMessage, $strOKMessage);
927}
928
930{
931 return ForumModerateMessage($message, $TYPE, $strErrorMessage, $strOKMessage);
932}
933
934
935function ForumShowTopicPages($nMessages, $strUrl, $pagen_var = "PAGEN_1", $PAGE_ELEMENTS = false)
936{
937 global $FORUM_MESSAGES_PER_PAGE;
938 $res_str = "";
939
940 if ((!$PAGE_ELEMENTS) && (intval($PAGE_ELEMENTS) <= 0))
941 $PAGE_ELEMENTS = $FORUM_MESSAGES_PER_PAGE;
942
943 if (mb_strpos($strUrl, "?") === false)
944 $strUrl = $strUrl."?";
945 else
946 $strUrl = $strUrl."&amp;";
947
948 if ($nMessages > $PAGE_ELEMENTS)
949 {
950 $res_str .= "<small>(".GetMessage("FSTP_PAGES").": ";
951
952 $nPages = intval(ceil($nMessages / $PAGE_ELEMENTS));
953 $typeDots = true;
954 for ($i = 1; $i <= $nPages; $i++)
955 {
956 if ($i<=3 || $i>=$nPages-2 || ($nPages == 7 && $i == 3))
957 {
958 $res_str .= "<a href=\"".$strUrl.$pagen_var."=".$i."\">".$i."</a> ";
959 }
960 elseif ($typeDots)
961 {
962 $res_str .= "... ";
963 $typeDots = false;
964 }
965 }
966 $res_str .= ")</small>";
967 }
968 return $res_str;
969}
970
971function ForumMoveMessage($FID, $TID, $Message, $NewTID, $arFields, &$strErrorMessage, &$strOKMessage, $iFileSize = false)
972{
973 global $USER, $DB;
974 $arError = array();
975 $arOK = array();
976 $NewFID = 0;
977 $arForum = array();
978 $arTopic = array();
979 $arNewForum = array();
980 $arNewTopic = array();
981 $arCurrUser = array();
982 $SendSubscribe = false;
983
984//************************* Input params **************************************************************************
985 $TID = intval($TID);
986 $FID = intval($FID);
987 $NewTID = intval($NewTID);
988 $Message = ForumDataToArray($Message);
989 if (empty($Message))
990 $arError[] = GetMessage("FMM_NO_MESSAGE");
991 if ($TID <= 0)
992 $arError[] = GetMessage("FMM_NO_TOPIC_SOURCE0");
993 else
994 {
995 $arTopic = CForumTopic::GetByID($TID);
996 if ($arTopic)
997 {
998 $FID = intval($arTopic["FORUM_ID"]);
999 $arForum = CForumNew::GetByID($FID);
1000 }
1001 else
1002 $arError[] = GetMessage("FMM_NO_TOPIC_SOURCE1");
1003 }
1004
1005 if (($NewTID <= 0) && (trim($arFields["TITLE"]) == ''))
1006 $arError[] = GetMessage("FMM_NO_TOPIC_RECIPIENT0");
1007 elseif($NewTID > 0)
1008 {
1009 if ($NewTID == $TID)
1010 $arError[] = GetMessage("FMM_NO_TOPIC_EQUAL");
1011 $arNewTopic = CForumTopic::GetByID($NewTID);
1012
1013 if (!$arNewTopic)
1014 $arError[] = GetMessage("FMM_NO_TOPIC_RECIPIENT1");
1015 elseif ($arNewTopic["STATE"] == "L")
1016 $arError[] = GetMessage("FMM_TOPIC_IS_LINK");
1017 else
1018 {
1019 $NewFID = $arNewTopic["FORUM_ID"];
1020 $arNewForum = CForumNew::GetByID($NewFID);
1021 }
1022 }
1023//*************************/Input params **************************************************************************
1024//*************************!Proverka prav pol'zovatelya na forume-istochnike i forume-poluchatele*********************
1025// Tak kak realizovan mehanizm peremeweniya tem s forumov, gde tekuwij pol'zovatel' yavlyaetsya moderatorom na forumy,
1026// gde on moderatorov ne yavlyaetsya, to v dannom sluchae budet ispol'zovan tot zhe samyj shablon dejstvij. Isklyucheniem
1027// yavlyaetsya to, chto esli pol'zovatel' na forume-poluchatele ne obladaet pravami moderirovaniya, tema budet neaktivna.
1028//*************************!Proverka prav pol'zovatelya*************************************************************
1029 $arCurrUser["Perms"]["FID"] = ForumCurrUserPermissions($FID);
1030 $arCurrUser["Perms"]["NewFID"] = ForumCurrUserPermissions($NewFID);
1031 if ($arCurrUser["Perms"]["FID"] < "Q")
1032 $arError[] = GetMessage("FMM_NO_MODERATE");
1033//************************* Actions *******************************************************************************
1034 $DB->StartTransaction();
1035 if (count($arError) <= 0)
1036 {
1037 // Create topic
1038 if ($NewTID <= 0)
1039 {
1040 $arFields["APPROVED"] = (isset($arNewForum["MODERATION"]) && $arNewForum["MODERATION"]=="Y") ? "N" : "Y";
1041 if ($arCurrUser["Perms"]["NewFID"] >= "Q")
1042 $arFields["APPROVED"] = "Y";
1043
1044 $arRes = array("NAME" => GetMessage("FR_GUEST"));
1045 $ShowName = GetMessage("FR_GUEST");
1046 $db_res = CForumMessage::GetList(array("ID" => "ASC"), array("@ID" => implode(",", $Message), "TOPIC_ID" => $TID));
1047 if ($db_res && $res = $db_res->Fetch())
1048 {
1049 $arRes["NAME"] = $res["AUTHOR_NAME"];
1050 $arRes["ID"] = $res["AUTHOR_ID"];
1051 }
1052 $arFieldsTopic = array(
1053 "TITLE" => $arFields["TITLE"],
1054 "TITLE_SEO" => $arFields["TITLE_SEO"],
1055 "DESCRIPTION" => $arFields["DESCRIPTION"],
1056 "ICON" => $arFields["ICON"],
1057 "TAGS" => $arFields["TAGS"],
1058 "FORUM_ID" => $FID,
1059 "USER_START_ID" => $arRes["ID"],
1060 "USER_START_NAME" => $arRes["NAME"],
1061 "LAST_POSTER_NAME" => $arRes["NAME"],
1062 "LAST_POSTER_ID" => $arRes["ID"],
1063 "APPROVED" => $arFields["APPROVED"],
1064 );
1065 $NewTID = CForumTopic::Add($arFieldsTopic);
1066 if (intval($NewTID)<=0)
1067 $arError[] = GetMessage("FMM_NO_TOPIC_NOT_CREATED");
1068 else
1069 {
1070 $arNewTopic = CForumTopic::GetByID($NewTID);
1071 if ($arNewTopic)
1072 {
1073 $NewFID = $FID;
1074 $arNewForum = $arForum;
1075 $SendSubscribe = true;
1076 }
1077 else
1078 $arError[] = GetMessage("FMM_NO_TOPIC_NOT_CREATED");
1079 }
1080 }
1081 }
1082
1083 if (count($arError) <= 0)
1084 {
1085 // Move message
1086 $db_res = CForumMessage::GetList(array(), array("@ID" => implode(",", $Message), "TOPIC_ID" => $TID));
1087 if ($db_res && $res = $db_res->Fetch())
1088 {
1089 do
1090 {
1091// echo "NewFID: ".$NewFID." -- FID:".$FID."<br/>";
1092 $arMessage = array();
1093 if ($NewFID != $FID)
1094 {
1095 $arMessage["APPROVED"] = ($arNewForum["MODERATION"] == "Y" ? "N" : "Y");
1096 if ($arCurrUser["Perms"]["NewFID"] >= "Q")
1097 $arMessage["APPROVED"] = "Y";
1098
1099 $arMessage["FORUM_ID"] = $NewFID;
1100 $arMessage["POST_MESSAGE_HTML"] = "";
1101 }
1102
1103 if ($NewTID != $TID)
1104 {
1105 $arMessage["NEW_TOPIC"] = "N";
1106 $arMessage["TOPIC_ID"] = $NewTID;
1107 }
1108
1109 if (count($arMessage) > 0)
1110 {
1111 $MID = CForumMessage::Update($res["ID"], $arMessage, true);
1112 $res_log = ($SendSubscribe == true ? GetMessage("F_MESSAGE_WAS_MOVED_TO_NEW") : GetMessage("F_MESSAGE_WAS_MOVED"));
1113 $res_log = str_replace(array("#ID#", "#TOPIC_TITLE#", "#TOPIC_ID#", "#NEW_TOPIC_TITLE#", "#NEW_TOPIC_ID#"),
1114 array($MID, $arTopic["TITLE"], $arTopic["ID"], $arNewTopic['TITLE'], $arNewTopic['ID']), $res_log);
1115 $res["TITLE"] = $arNewTopic['TITLE'];
1116 $res["TOPIC_ID"] = $arNewTopic['ID'];
1117 $res["beforeTITLE"] = $arTopic["TITLE"];
1118 $res["DESCRIPTION"] = $res_log;
1119 CForumEventLog::Log("message", "move", $MID, serialize($res));
1120 $db_res2 = CForumFiles::GetList(array(), array("FILE_MESSAGE_ID" => $res["ID"]));
1121 if ($db_res2 && $res2 = $db_res2->Fetch())
1122 {
1123 $arFiles = array();
1124 do
1125 {
1126 $arFiles[] = $res2["FILE_ID"];
1127 } while ($res2 = $db_res2->Fetch());
1128 CForumFiles::UpdateByID($arFiles, $arMessage);
1129 }
1130 if (intval($MID) <= 0)
1131 {
1132 $arError[] = str_replace("##", $res["ID"], GetMessage("FMM_NO_MESSAGE_MOVE"));
1133 break;
1134 }
1135 }
1136 }while ($res = $db_res->Fetch());
1137 }
1138 }
1139
1140 if (count($arError) <= 0)
1141 {
1142 $db_res = CForumMessage::GetList(array(), array("TOPIC_ID" => $TID), false, 1);
1143 if (!($db_res && $res = $db_res->Fetch())):
1144 CForumTopic::Delete($TID);
1145 else:
1147 endif;
1148
1149 $db_res = CForumMessage::GetList(array(), array("TOPIC_ID" => $NewTID), false, 1);
1150 if (!($db_res && $res = $db_res->Fetch())):
1151 CForumTopic::Delete($NewTID);
1152 else:
1153 CForumTopic::SetStat($NewTID);
1154 endif;
1155
1156 CForumNew::SetStat($FID);
1157 if ($NewFID != $FID)
1158 CForumNew::SetStat($NewFID);
1159 }
1160 if (count($arError) <= 0)
1161 $DB->Commit();
1162 else
1163 $DB->Rollback();
1164
1165 if (count($arError) > 0)
1166 $strErrorMessage .= implode(". \n", $arError).". \n";
1167 else
1168 {
1169 $strOKMessage .= GetMessage("FMM_YES_MESSAGE_MOVE");
1170 if ($SendSubscribe)
1171 {
1172 foreach ($Message as $MID)
1173 CForumMessage::SendMailMessage($MID, array(), false, "NEW_FORUM_MESSAGE");
1174 }
1175 return true;
1176 }
1177 return false;
1178}
1179
1185function ForumPrintIconsList($num_cols, $value = "")
1186{
1187 $arSmile = CForumSmile::getByType("I", LANGUAGE_ID);
1188 $arSmile[] = array('TYPING' => '', 'IMAGE' => '/bitrix/images/1.gif', 'NAME' => '', 'CLASS' => 'forum-icon-empty');
1189 $strPath2Icons = "/bitrix/images/forum/icon/";
1190 $num_cols = ($num_cols > 0 ? $num_cols : 7);
1191 $ind = $num_cols;
1192 $res_str = '<table border="0" class="forum-icons"><tr>';
1193
1194 foreach ($arSmile as $res)
1195 {
1196 $width = (isset($res["IMAGE_WIDTH"]) && $res["IMAGE_WIDTH"] > 0 ? 'width="{$res["IMAGE_WIDTH"]}"' : '');
1197 $height = (isset($res["IMAGE_HEIGHT"]) && $res["IMAGE_HEIGHT"] > 0 ? 'width="{$res["IMAGE_HEIGHT"]}"' : '');
1198 $checked = '';
1199 if (trim($res['TYPING']) == trim($value))
1200 {
1201 $checked = 'checked="checked"';
1202 }
1203
1204 $classImg = $res["CLASS"] ?? '';
1205 $res_str .= <<<HTML
1206 <td>
1207 <img src="{$strPath2Icons}{$res["IMAGE"]}" alt="{$res["NAME"]}" border="0" class="icons {$classImg}" $width $height />
1208 <input type="radio" name="ICON" value="{$res["TYPING"]}" $checked />
1209 </td>
1210HTML;
1211
1212 if (--$ind <= 0)
1213 {
1214 $ind = $num_cols;
1215 $res_str .= "</tr><tr>";
1216 }
1217 }
1218 $res_str .= '</tr></table>';
1219 return $res_str;
1220}
1221
1228function ForumPrintSmilesList($num_cols, $strLang = false)
1229{
1230 $num_cols = intval($num_cols);
1231 $num_cols = $num_cols > 0 ? $num_cols : 3;
1232 $strLang = ($strLang === false ? LANGUAGE_ID : $strLang);
1233 $strPath2Icons = "/bitrix/images/forum/smile/";
1234 $arSmile = CForumSmile::getByType("S", $strLang);
1235
1236 $res_str = "";
1237 $ind = 0;
1238 foreach ($arSmile as $res)
1239 {
1240 if ($ind == 0) $res_str .= "<tr align=\"center\">";
1241 $res_str .= "<td width=\"".intval(100/$num_cols)."%\">";
1242 $strTYPING = strtok($res['TYPING'], " ");
1243 $res_str .= "<img src=\"".$strPath2Icons.$res['IMAGE']."\" alt=\"".$res['NAME']."\" title=\"".$res['NAME']."\" border=\"0\"";
1244 if (!empty($res['IMAGE_WIDTH'])) $res_str .= " width=\"".intval($res['IMAGE_WIDTH'])."\"";
1245 if (!empty($res['IMAGE_HEIGHT'])) $res_str .= " height=\"".intval($res['IMAGE_HEIGHT'])."\"";
1246 $res_str .= " class=\"smiles-list\" alt=\"smile".$strTYPING."\" onclick=\"if(emoticon){emoticon('".$strTYPING."');}\" name=\"smile\" id='".$strTYPING."' ";
1247 $res_str .= "/>&nbsp;</td>\n";
1248 $ind++;
1249 if ($ind >= $num_cols)
1250 {
1251 $ind = 0;
1252 $res_str .= "</tr>";
1253 }
1254 }
1255 if ($ind < $num_cols)
1256 {
1257 for ($i=0; $i<$num_cols-$ind; $i++)
1258 {
1259 $res_str .= "<td> </td>";
1260 }
1261 }
1262
1263 return $res_str;
1264}
1265
1266function ForumMoveMessage2Support($MID, &$strErrorMessage, &$strOKMessage, $arAddParams = array())
1267{
1268 global $USER;
1269 $MID = intval($MID);
1270 $sError = array();
1271 $sNote = array();
1272 $arAddParams = (!is_array($arAddParams) ? array($arAddParams) : $arAddParams );
1273 $arAddParams["PERMISSION"] = (!empty($arAddParams["PERMISSION"]) ? $arAddParams["PERMISSION"] : false);
1274 if ($MID<=0)
1275 $arError[] = GetMessage("MOVEMES_NO_MESS_EX");
1276
1277 if (!CModule::IncludeModule("support"))
1278 $arError[] = GetMessage("MOVEMES_NO_SUPPORT");
1279
1280 if (empty($arError))
1281 {
1282 $arMessage = CForumMessage::GetByID($MID, array("FILTER" => "N"));
1283 if (!$arMessage)
1284 {
1285 $arError[] = GetMessage("MOVEMES_NO_MESS_EX");
1286 }
1287 elseif (intval($arMessage["AUTHOR_ID"])<=0)
1288 {
1289 $arError[] = GetMessage("MOVEMES_NO_ANONYM");
1290 }
1291 elseif (!CForumMessage::CanUserDeleteMessage($MID, $USER->GetUserGroupArray(), $USER->GetID(), $arAddParams["PERMISSION"]))
1292 {
1293 $arError[] = GetMessage("MOVEMES_NO_PERMS2MOVE");
1294 }
1295 else
1296 {
1297 $arTopic = CForumTopic::GetByID($arMessage["TOPIC_ID"]);
1298 $arFieldsSu = array(
1299 "CLOSE" => "N",
1300 "TITLE" => $arTopic["TITLE"],
1301 "MESSAGE" => $arMessage["POST_MESSAGE"],
1302 "OWNER_USER_ID" => $arMessage["AUTHOR_ID"],
1303 "OWNER_SID" => $arMessage["AUTHOR_NAME"],
1304 "SOURCE_SID" => "forum",
1305 );
1306
1307 $arIMAGE = CFile::MakeFileArray($arMessage["ATTACH_IMG"]);
1308 if(is_array($arIMAGE))
1309 {
1310 $arIMAGE["MODULE_ID"] = "support";
1311 $arFieldsSu["FILES"] = array($arIMAGE);
1312 }
1313
1314 $SuID = CTicket::SetTicket($arFieldsSu);
1315 $SuID = intval($SuID);
1316
1317 if ($SuID>0)
1318 {
1319 $sNote[] = GetMessage("MOVEMES_SUCCESS_SMOVE");
1320 }
1321 else
1322 {
1323 $arError[] = GetMessage("MOVEMES_ERROR_SMOVE");
1324 }
1325 }
1326 }
1327 if (!empty($arError))
1328 $strErrorMessage .= implode(".\n",$arError).".\n";
1329 if (!empty($arNote))
1330 $strOKMessage .= implode(".\n",$arNote).".\n";
1331
1332 if (empty($arError))
1333 return $SuID;
1334 else
1335 return False;
1336}
1337
1338function ForumVote4User($UID, $VOTES, $bDelVote, &$strErrorMessage, &$strOKMessage)
1339{
1340 global $USER;
1341 $arError = array();
1342 $arNote = array();
1343
1344 $UID = intval($UID);
1345 $VOTES = intval($VOTES);
1346 $bDelVote = ($bDelVote ? true : false);
1347 $CurrUserID = 0;
1348
1349 if ($UID <= 0)
1350 {
1351 $arError[] = GetMessage("F_NO_VPERS");
1352 }
1353 else
1354 {
1355 if (!$USER->IsAuthorized())
1356 {
1357 $arError[] = GetMessage("FORUM_GV_ERROR_AUTH");
1358 }
1359 else
1360 {
1361 $CurrUserID = intval($USER->GetParam("USER_ID"));
1362 if ($CurrUserID == $UID && !CForumUser::IsAdmin())
1363 {
1364 $arError[] = GetMessage("FORUM_GV_OTHER");
1365 }
1366 else
1367 {
1368 $arUserRank = CForumUser::GetUserRank($CurrUserID);
1369
1370 if (intval($arUserRank["VOTES"])<=0 && !$bDelVote && !CForumUser::IsAdmin())
1371 {
1372 $arError[] = GetMessage("FORUM_GV_ERROR_NO_VOTE");
1373 }
1374 else
1375 {
1376 if (!CForumUser::IsAdmin() || $VOTES<=0)
1377 $VOTES = intval($arUserRank["VOTES"]);
1378
1379 if ($VOTES == 0) $VOTES = 1; // no ranks configured
1380
1381 $arFields = array(
1382 "POINTS" => $VOTES
1383 );
1384
1385 $arUserPoints = CForumUserPoints::GetByID($CurrUserID, $UID);
1386 if ($arUserPoints)
1387 {
1388 if ($bDelVote || $VOTES<=0)
1389 {
1390 if (CForumUserPoints::Delete($CurrUserID, $UID))
1391 $arNote[] = GetMessage("FORUM_GV_SUCCESS_UNVOTE");
1392 else
1393 $arError[] = GetMessage("FORUM_GV_ERROR_VOTE");
1394 }
1395 else
1396 {
1397 if (intval($arUserPoints["POINTS"])<intval($arUserRank["VOTES"])
1399 {
1400 if (CForumUserPoints::Update(intval($USER->GetParam("USER_ID")), $UID, $arFields))
1401 $arNote[] = GetMessage("FORUM_GV_SUCCESS_VOTE_UPD");
1402 else
1403 $arError[] = GetMessage("FORUM_GV_ERROR_VOTE_UPD");
1404 }
1405 else
1406 {
1407 $arError[] = GetMessage("FORUM_GV_ALREADY_VOTE");
1408 }
1409 }
1410 }
1411 else
1412 {
1413 if (!$bDelVote && $VOTES>0)
1414 {
1415 $arFields["FROM_USER_ID"] = $USER->GetParam("USER_ID");
1416 $arFields["TO_USER_ID"] = $UID;
1417
1419 $arNote[] = GetMessage("FORUM_GV_SUCCESS_VOTE_ADD");
1420 else
1421 $arError[] = GetMessage("FORUM_GV_ERROR_VOTE_ADD");
1422 }
1423 else
1424 {
1425 $arError[] = GetMessage("FORUM_GV_ERROR_A");
1426 }
1427 }
1428 }
1429 }
1430 }
1431 }
1432
1433 if (!empty($arError))
1434 $strErrorMessage .= implode(".\n", $arError).".\n";
1435 if (!empty($arNote))
1436 $strOKMessage .= implode(".\n", $arNote).".\n";
1437
1438 if (empty($arError))
1439 return True;
1440 else
1441 return False;
1442}
1443
1445{
1446 $period = intval($arFields["PERIOD"]);
1447 if ($period <= 0)
1448 $period = 600;
1449
1450 $date = Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", SITE_ID)), time() - $period + CTimeZone::GetOffset());
1451 $arField = array(">=LAST_VISIT" => $date, "COUNT_GUEST"=>true);
1452 if (intval($arFields["FORUM_ID"]) > 0 )
1453 $arField["FORUM_ID"] = $arFields["FORUM_ID"];
1454 if (intval($arFields["TOPIC_ID"]) > 0 )
1455 $arField["TOPIC_ID"] = $arFields["TOPIC_ID"];
1456
1457 $db_res = CForumStat::GetListEx(array("USER_ID" => "DESC"), $arField);
1458 $OnLineUser = array();
1459 $arOnLineUser = array();
1460 $OnLineUserStr = "";
1461 $UserHideOnLine = 0;
1462 $UserOnLine = 0;
1463 $result = array();
1464 $result["NONE"] = "N";
1465 if ($db_res && ($res = $db_res->GetNext()))
1466 {
1467 $OnLineUser["USER"] = array();
1468 do
1469 {
1470 if (($res["USER_ID"] > 0) && ($res["HIDE_FROM_ONLINE"] != "Y"))
1471 {
1472 $OnLineUser["USER"][] = "<a href=\"view_profile.php?UID=".$res["USER_ID"]."\" title='".GetMessage("FORUM_USER_PROFILE")."'>".$res["SHOW_NAME"]."</a>";
1473 $arOnLineUser[] = array_merge($res, array("UID"=>$res["USER_ID"], "title" => GetMessage("FORUM_USER_PROFILE"), "text" => $res["SHOW_NAME"]));
1474 }
1475 elseif(($res["USER_ID"] > 0) && ($res["HIDE_FROM_ONLINE"] == "Y"))
1476 $UserHideOnLine++;
1477 else
1478 $OnLineUser["GUEST"] = intval($res["COUNT_USER"]);
1479 }while ($res = $db_res->GetNext());
1480
1481 $CountAllUsers = count($OnLineUser["USER"]) + $UserHideOnLine + ($OnLineUser["GUEST"] ?? 0);
1482 $result["GUEST"] = ($OnLineUser["GUEST"] ?? 0);
1483 $result["HIDE"] = $UserHideOnLine;
1484 $result["REGISTER"] = intval(count($OnLineUser["USER"])+$UserHideOnLine);
1485 $result["ALL"] = $CountAllUsers;
1486
1487 if ($CountAllUsers > 0)
1488 {
1489 if (intval($arFields["TOPIC_ID"]) <= 0)
1490 {
1491 $result["PERIOD"] = round($period/60);
1492 $result["HEAD"] = str_replace("##", "<b>".round($period/60)."</b>", GetMessage("FORUM_AT_LAST_PERIOD"))." ".
1493 GetMessage("FORUM_COUNT_ALL_USER").": <b>".$CountAllUsers."</b><br/>";
1494 }
1495 $OnLineUserStr = GetMessage("FORUM_COUNT_GUEST").": <b>".intval($OnLineUser["GUEST"] ?? 0)."</b>, ".
1496 GetMessage("FORUM_COUNT_USER").": <b>".intval(count($OnLineUser["USER"])+$UserHideOnLine)."</b>,
1497 ".GetMessage("FORUM_FROM_THIS")." ".GetMessage("FORUM_COUNT_USER_HIDEFROMONLINE").": <b>".$UserHideOnLine."</b>";
1498
1499 if (count($OnLineUser["USER"]) > 0)
1500 {
1501 $OnLineUserStr .= "<br/>".implode(", ", $OnLineUser["USER"])."<br/>";
1502 $result["USER"] = $arOnLineUser;
1503 }
1504 }
1505 else
1506 {
1507 $OnLineUserStr = GetMessage("FORUM_NONE");
1508 $result["NONE"] = "Y";
1509 }
1510 }
1511 else
1512 {
1513 $OnLineUserStr = GetMessage("FORUM_NONE");
1514 $result["NONE"] = "Y";
1515 }
1516 $result["BODY"] = $OnLineUserStr;
1517 return $result;
1518}
1519
1520function ForumGetUserForumStatus($userID = false, $perm = false, $arAdditionalParams = array())
1521{
1523 "guest" => array("guest", $GLOBALS["FORUM_STATUS_NAME"]["guest"]),
1524 "user" => array("user", $GLOBALS["FORUM_STATUS_NAME"]["user"]),
1525 "Q" => array("moderator", $GLOBALS["FORUM_STATUS_NAME"]["moderator"]),
1526 "U" => array("editor", $GLOBALS["FORUM_STATUS_NAME"]["editor"]),
1527 "Y" => array("administrator", $GLOBALS["FORUM_STATUS_NAME"]["administrator"])
1528 );
1529 $res = ($userID === false ? $arStatuses : $arStatuses["guest"]);
1530 if (!empty($userID))
1531 {
1532 $res = $arStatuses["user"];
1533 if ($arStatuses[$perm])
1535 else
1536 {
1537 $arRank = (is_set($arAdditionalParams, "Rank") ?
1538 $arAdditionalParams["Rank"] : CForumUser::GetUserRank($userID, LANGUAGE_ID));
1539 if (is_array($arRank) && $arRank["NAME"])
1540 $res = array($arRank["CODE"], $arRank["NAME"]);
1541 }
1542 }
1543 return $res;
1544}
1545
1546function ForumAddPageParams($page_url="", $params=array(), $addIfNull = false, $htmlSpecialChars = true)
1547{
1548 $strUrl = "";
1549 $strParams = "";
1550 $arParams = array();
1551 $param = "";
1552 // Attention: $page_url already is safe.
1553 if (is_array($params) && (count($params) > 0))
1554 {
1555 foreach ($params as $key => $val)
1556 {
1557 if ((is_array($val) && (count($val) > 0)) || (($val <> '') && ($val!="0")) || (intval($val) > 0) || $addIfNull)
1558 {
1559 if (is_array($val))
1560 $param = implode(",", $val);
1561 else
1562 $param = $val;
1563 if (($param <> '') || ($addIfNull))
1564 {
1565 if (mb_strpos($page_url, $key) !== false)
1566 {
1567 $page_url = preg_replace("/".$key."\=[^\&]*((\&amp\;)|(\&)*)/", "", $page_url);
1568 }
1569 $arParams[] = $key."=".$param;
1570 }
1571 }
1572 }
1573
1574 if (count($arParams) > 0)
1575 {
1576 if (mb_strpos($page_url, "?") === false)
1577 $strParams = "?";
1578 elseif ((mb_substr($page_url, -5, 5) != "&amp;") && (mb_substr($page_url, -1, 1) != "&") && (mb_substr($page_url, -1, 1) != "?"))
1579 {
1580 $strParams = "&";
1581 }
1582 $strParams .= implode("&", $arParams);
1583 if ($htmlSpecialChars)
1584 $page_url .= htmlspecialcharsbx($strParams);
1585 else
1586 $page_url .= $strParams;
1587 }
1588 }
1589 return $page_url;
1590}
1591
1593{
1594 global $USER;
1595 $result = false;
1596 $sError = "";
1597 $sNote = "";
1598 if (empty($action))
1599 {
1600 $sError = GetMessage("FORUM_NO_ACTION");
1601 }
1602 else
1603 {
1604 switch ($action)
1605 {
1606 case "REPLY":
1607 $result = ForumAddMessage("REPLY", $arFields["FID"], $arFields["TID"], 0, $arFields, $sError, $sNote, false, $arFields["captcha_word"], 0, $arFields["captcha_code"], $arFields["NAME_TEMPLATE"]);
1608 break;
1609 case "DEL":
1610 $result = ForumDeleteMessage($arFields["MID"], $sError, $sNote, $arFields);
1611 break;
1612 case "SHOW":
1613 case "HIDE":
1614 $result = ForumModerateMessage($arFields["MID"], $action, $sError, $sNote, $arFields);
1615 break;
1616 case "VOTE4USER":
1617 $result = ForumVote4User($arFields["UID"], $arFields["VOTES"], $arFields["VOTE"], $sError, $sNote, $arFields);
1618 break;
1619 case "FORUM_MESSAGE2SUPPORT":
1620 $result = ForumMoveMessage2Support($arFields["MID"], $sError, $sNote, $arFields);
1621 break;
1622 case "FORUM_SUBSCRIBE":
1623 case "TOPIC_SUBSCRIBE":
1624 case "FORUM_SUBSCRIBE_TOPICS":
1625 $result = ForumSubscribeNewMessagesEx($arFields["FID"], $arFields["TID"], $arFields["NEW_TOPIC_ONLY"], $sError, $sNote);
1626 break;
1627 case "SET_ORDINARY":
1628 case "SET_TOP":
1629 case "ORDINARY":
1630 case "TOP":
1631 if ($action == "SET_ORDINARY")
1632 $action = "ORDINARY";
1633 elseif ($action == "SET_TOP")
1634 $action = "TOP";
1635
1636 $result = ForumTopOrdinaryTopic($arFields["TID"], $action, $sError, $sNote, $arFields);
1637 break;
1638 case "DEL_TOPIC":
1639 $result = ForumDeleteTopic($arFields["TID"], $sError, $sNote, $arFields);
1640 break;
1641 case "OPEN":
1642 case "CLOSE":
1643 case "STATE_Y":
1644 case "STATE_N":
1645 if ($action == "STATE_Y")
1646 $action = "OPEN";
1647 elseif ($action == "STATE_N")
1648 $action = "CLOSE";
1649 $result = ForumOpenCloseTopic($arFields["TID"], $action, $sError, $sNote, $arFields);
1650 break;
1651 case "SHOW_TOPIC":
1652 case "HIDE_TOPIC":
1653 $topicIds = is_array($arFields["TID"]) ? $arFields["TID"] : [$arFields["TID"]];
1654 $result = new \Bitrix\Main\Result();
1655 $usr = \Bitrix\Forum\User::getById($USER->GetID());
1656 foreach ($topicIds as $topicId)
1657 {
1658 $topic = \Bitrix\Forum\Topic::getById($topicId);
1659 $forum = \Bitrix\Forum\Forum::getById($topic->getForumId());
1660 if (isset($arFields["PERMISSION"]) && is_string($arFields["PERMISSION"]))
1661 {
1662 $usr->setPermissionOnForum($forum, $arFields["PERMISSION"]);
1663 }
1664 if (!$usr->canModerate($forum))
1665 {
1666 $result->addError(new \Bitrix\Main\Error(GetMessage("MODMESS_NO_PERMS"). "(TID={$topic->getId()})"));
1667 }
1668 else
1669 {
1670 $res = ($action == "HIDE_TOPIC" ? $topic->disapprove() : $topic->approve());
1671 if (!$res->isSuccess())
1672 {
1673 $result->addErrors($res->getErrors());
1674 }
1675 }
1676 }
1677 if (!$result->isSuccess())
1678 {
1679 $sError = implode("", $result->getErrorMessages());
1680 }
1681 $result = $result->isSuccess();
1682 break;
1683 case "SPAM_TOPIC":
1684 $result = ForumSpamTopic($arFields["TID"], $sError, $sNote, $arFields);
1685 break;
1686 case "SPAM":
1687 $result = ForumSpamMessage($arFields["MID"], $sError, $sNote, $arFields);
1688 break;
1689 default:
1690 $sError = GetMessage("FORUM_NO_ACTION")." (".htmlspecialcharsbx($action).")";
1691 break;
1692 }
1693 }
1694 $strErrorMessage = $sError;
1695 $strOKMessage = $sNote;
1696 return $result;
1697}
1698
1700{
1701 if (!is_array($message))
1702 $message = explode(",", $message);
1703
1704 foreach ($message as $key => $val)
1705 {
1706 $message[$key] = intval(trim($val));
1707 }
1708
1709 if (array_sum($message) > 0)
1710 return $message;
1711 else
1712 return false;
1713}
1714
1715function ForumGetTopicSort(&$field_name, &$direction, $arForumInfo = array())
1716{
1717 $aSortOrder = array(
1718 "P" => "LAST_POST_DATE",
1719 "T" => "TITLE",
1720 "N" => "POSTS",
1721 "V" => "VIEWS",
1722 "D" => "START_DATE",
1723 "A" => "USER_START_NAME");
1724 if (empty($field_name) && !empty($arForumInfo))
1725 {
1726 $field_name = trim($arForumInfo["ORDER_BY"]);
1727 $direction = trim($arForumInfo["ORDER_DIRECTION"]);
1728 }
1729
1730 $field_name = mb_strtoupper($field_name);
1731 $direction = mb_strtoupper($direction);
1732
1733 $field_name = (!empty($aSortOrder[$field_name]) ? $aSortOrder[$field_name] : (in_array($field_name, $aSortOrder) ? $field_name : "LAST_POST_DATE"));
1734 $direction = ($direction == "ASC" ? "ASC" : "DESC");
1735 return array($field_name => $direction);
1736}
1737
1738function ForumShowError($arError, $bShowErrorCode = false)
1739{
1740 $bShowErrorCode = ($bShowErrorCode === true ? true : false);
1741 $sReturn = "";
1742 $tmp = false;
1743 $arRes = array();
1744 if (empty($arError))
1745 return $sReturn;
1746 elseif (!is_array($arError))
1747 return $arError;
1748
1749 if (!empty($arError["title"]) || !empty($arError["code"]))
1750 {
1751 $res = $arError;
1752 $sReturn .= (!empty($res["title"]) ? $res["title"] : $res["code"]).
1753 ($bShowErrorCode ? "[CODE: ".$res["code"]."]" : "");
1754 unset($arError["code"]); unset($arError["title"]);
1755 }
1756 foreach ($arError as $res):
1757 $sReturn .= (!empty($res["title"]) ? $res["title"] : $res["code"]).
1758 ($bShowErrorCode ? "[CODE: ".$res["code"]."]" : "")." ";
1759 endforeach;
1760 return $sReturn;
1761}
1762
1763function ForumClearComponentCache($components)
1764{
1765 if (empty($components))
1766 return false;
1767 $aComponents = (is_array($components) ? $components : explode(",", $components));
1768
1769 foreach($aComponents as $component_name)
1770 {
1771 $componentRelativePath = CComponentEngine::MakeComponentPath($component_name);
1772 if ($componentRelativePath <> '')
1773 {
1775 if (is_array($arComponentDescription) && array_key_exists("CACHE_PATH", $arComponentDescription))
1776 {
1777 if($arComponentDescription["CACHE_PATH"] == "Y")
1778 $arComponentDescription["CACHE_PATH"] = "/".SITE_ID.$componentRelativePath;
1779 if($arComponentDescription["CACHE_PATH"] <> '')
1780 BXClearCache(true, $arComponentDescription["CACHE_PATH"]);
1781 }
1782 }
1783 }
1784}
1785
1786function InitSortingEx($Path=false, $sByVar="by", $sOrderVar="order")
1787{
1788 static $ii = -1;
1789 $ii++;
1790 global $APPLICATION, ${$sByVar}, ${$sOrderVar};
1791 $sByVarE = $sByVar . $ii;
1792 $sOrderVarE = $sOrderVar . $ii;
1793 global ${$sByVarE}, ${$sOrderVarE};
1794
1795 if($Path===false)
1796 $Path = $APPLICATION->GetCurPage();
1797
1798 $md5Path = md5($Path);
1799 if (!empty(${$sByVarE}))
1800 $_SESSION["SESS_SORT_BY_EX"][$md5Path][$sByVarE] = ${$sByVarE};
1801 else
1802 ${$sByVarE} = $_SESSION["SESS_SORT_BY_EX"][$md5Path][$sByVarE];
1803
1804 if(!empty(${$sOrderVarE}))
1805 $_SESSION["SESS_SORT_ORDER_EX"][$md5Path][$sOrderVarE] = ${$sOrderVarE};
1806 else
1807 ${$sOrderVarE} = $_SESSION["SESS_SORT_ORDER_EX"][$md5Path][$sOrderVarE];
1808
1809 mb_strtolower(${$sByVarE});
1810 mb_strtolower(${$sOrderVarE});
1811 ${$sByVar} = ${$sByVarE};
1812 ${$sOrderVar} = ${$sOrderVarE};
1813 return $ii;
1814}
1815function ForumGetEntity($entityId, $value = true)
1816{
1817 static $arForumGetEntity = array();
1818 if (array_key_exists($entityId, $arForumGetEntity))
1819 return $arForumGetEntity[$entityId];
1820 $arForumGetEntity[$entityId] = $value;
1821 return false;
1822}
$arParams
Определения access_dialog.php:21
$db_res
Определения options_user_settings.php:8
global $APPLICATION
Определения include.php:80
static create($parentObject, array $fields)
Определения message.php:697
static create($parentObject, array $fields)
Определения topic.php:462
static getConnection($name="")
Определения application.php:638
static registerAutoLoadClasses($moduleName, array $classes)
Определения loader.php:273
static Delete($ID)
Определения message.php:528
static SendMailMessage($MID, $arFields=array(), $strLang=false, $mailTemplate=false)
Определения message.php:802
static GetByID($ID, $arAddParams=array())
Определения message.php:591
static Update($ID, $arFields, $skip_counts=false, $strUploadDir=false)
Определения message.php:246
static CanUserDeleteMessage($MID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
Определения message.php:69
static CanUserUpdateMessage($MID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
Определения message.php:36
static GetUserPermission($ID, $arUserGroups)
Определения forum_new.php:564
static GetByID($ID)
Определения forum_new.php:1399
static GetPermissionUserDefault($ID)
Определения forum_new.php:444
static SetStat($ID=0, $arParams=array())
Определения forum_new.php:1638
static CanUserAddSubscribe($FID, $arUserGroups)
Определения user.php:1202
static Delete($ID)
Определения user.php:1294
static Add($arFields)
Определения user.php:1255
static CanUserDeleteSubscribe($ID, $arUserGroups, $CurrentUserID=0)
Определения user.php:1219
static GetListEx($arOrder=array("ID"=>"ASC"), $arFilter=array())
Определения user.php:1432
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 Add($arFields)
Определения topic.php:213
static GetByID($ID, $arAddParams=array())
Определения topic.php:431
static SetStat($ID=0, $params=[])
Определения topic.php:720
static CanUserDeleteTopic($TID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
Определения topic.php:92
static GetUserRank($USER_ID, $strLang=false)
Определения user.php:595
static IsAdmin($userId=false, $arGroups=false)
Определения user.php:11
static IsLocked($userID)
Определения user.php:82
static Update($FROM_USER_ID, $TO_USER_ID, $arFields)
Определения points.php:567
static GetByID($FROM_USER_ID, $TO_USER_ID)
Определения points.php:697
static Delete($FROM_USER_ID, $TO_USER_ID)
Определения points.php:609
static MarkAsSpam($ID, $bIsSPAM=true, $arRow=false)
Определения mail.php:2253
static SetTicket($arFields, $ticketID="", $checkRights="Y", $sendEmailToAuthor="Y", $sendEmailToTechsupport="Y")
Определения support.php:1518
static GetComponentDescr($componentName)
Определения component_util.php:402
static ClearTag($type, $ID=0)
Определения functions.php:803
static Log($object, $action, $id, $description="", $title="")
Определения event_log.php:14
static GetList($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $iNum=0, $arAddParams=array())
Определения message.php:884
static GetList($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
Определения message.php:193
static GetListEx($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $arAddParams=array())
Определения user.php:724
static GetListEx($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=[])
Определения topic.php:246
static Add($arFields)
Определения points.php:58
$aComponents
Определения clear_component_cache.php:19
$arComponentDescription
Определения component_props2.php:73
if(!is_array($prop["VALUES"])) $tmp
Определения component_props.php:203
$arFields
Определения dblapprove.php:5
</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
$perm
Определения options.php:169
ForumDeleteMessage($message, &$strErrorMessage, &$strOKMessage, $arAddParams=array())
Определения include.php:757
ForumAddPageParams($page_url="", $params=array(), $addIfNull=false, $htmlSpecialChars=true)
Определения include.php:1546
ForumGetEntity($entityId, $value=true)
Определения include.php:1815
ForumMoveMessage2Support($MID, &$strErrorMessage, &$strOKMessage, $arAddParams=array())
Определения include.php:1266
ForumClearComponentCache($components)
Определения include.php:1763
ShowActiveUser($arFields=array())
Определения include.php:1444
ForumSubscribeNewMessages($FID, $TID, &$strErrorMessage, &$strOKMessage, $NEW_TOPIC_ONLY="N", $strSite=false, $SOCNET_GROUP_ID=false)
Определения include.php:217
ForumMoveMessage($FID, $TID, $Message, $NewTID, $arFields, &$strErrorMessage, &$strOKMessage, $iFileSize=false)
Определения include.php:971
ForumUnsubscribeNewMessagesEx($FID, $TID, $NEW_TOPIC_ONLY, &$strErrorMessage, &$strOKMessage, $strSite=false, $SOCNET_GROUP_ID=false)
Определения include.php:164
ForumModerateMessageArray($message, $TYPE, &$strErrorMessage, &$strOKMessage)
Определения include.php:929
ForumUnsubscribeNewMessages($FID, $TID, &$strErrorMessage, &$strOKMessage, $NEW_TOPIC_ONLY="N", $strSite=false, $SOCNET_GROUP_ID=false)
Определения include.php:172
ForumMessageExistInArray($message=array())
Определения include.php:902
ForumSpamMessage($message, &$strErrorMessage, &$strOKMessage, $arAddParams=array())
Определения include.php:862
ForumDataToArray(&$message)
Определения include.php:1699
ForumPrintSmilesList($num_cols, $strLang=false)
Определения include.php:1228
ForumOpenCloseTopic($topicIds, $TYPE, &$strErrorMessage, &$strOKMessage, $arAddParams=array())
Определения include.php:576
ForumShowError($arError, $bShowErrorCode=false)
Определения include.php:1738
ForumActions($action, $arFields, &$strErrorMessage, &$strOKMessage)
Определения include.php:1592
ForumDeleteMessageArray($message, &$strErrorMessage, &$strOKMessage)
Определения include.php:924
ForumModerateMessage($message, $TYPE, &$strErrorMessage, &$strOKMessage, $arAddParams=array())
Определения include.php:501
ForumSpamTopic($topic, &$strErrorMessage, &$strOKMessage, $arAddParams=array())
Определения include.php:798
ForumGetTopicSort(&$field_name, &$direction, $arForumInfo=array())
Определения include.php:1715
ForumShowTopicPages($nMessages, $strUrl, $pagen_var="PAGEN_1", $PAGE_ELEMENTS=false)
Определения include.php:935
ForumSubscribeNewMessagesEx($FID, $TID, $NEW_TOPIC_ONLY, &$strErrorMessage, &$strOKMessage, $strSite=false, $SOCNET_GROUP_ID=false)
Определения include.php:156
ForumGetUserForumStatus($userID=false, $perm=false, $arAdditionalParams=array())
Определения include.php:1520
InitSortingEx($Path=false, $sByVar="by", $sOrderVar="order")
Определения include.php:1786
if(file_exists(__DIR__."/deprecated.php")) $arNameStatuses
Определения include.php:14
ForumDeleteTopic($topic, &$strErrorMessage, &$strOKMessage, $arAddParams=array())
Определения include.php:696
ForumTopOrdinaryTopic($topic, $TYPE, &$strErrorMessage, &$strOKMessage, $arAddParams=array())
Определения include.php:625
ForumPrintIconsList($num_cols, $value="")
Определения include.php:1185
ForumCurrUserPermissions($FID, $arAddParams=array())
Определения include.php:122
ForumGetRealIP()
Определения include.php:297
ForumVote4User($UID, $VOTES, $bDelVote, &$strErrorMessage, &$strOKMessage)
Определения include.php:1338
ForumAddMessage( $MESSAGE_TYPE, $FID, $TID, $MID, $arFieldsG, &$strErrorMessage, &$strOKMessage, $iFileSize=false, $captcha_word="", $captcha_sid=0, $captcha_code="")
Определения include.php:317
$result
Определения get_property_values.php:14
if($ajaxMode) $ID
Определения get_user.php:27
$dbType
Определения autoload.php:6
$_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
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
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
BXClearCache($full=false, $initdir='')
Определения tools.php:5150
$name
Определения menu_edit.php:35
$entityId
Определения payment.php:4
$message
Определения payment.php:8
$arFiles
Определения options.php:60
$direction
Определения prolog_auth_admin.php:25
global_menu_<?echo $menu["menu_id"]?> adm main menu item icon adm main menu item text text adm main menu hover adm submenu menucontainer menu_id menu_id items_id items_id desktop menu_id block none adm global submenu<?=($subMenuDisplay=="block" ? " adm-global-submenu-active" :"")?> global_submenu_<?echo $menu["menu_id"]?> text MAIN_PR_ADMIN_FAV items adm submenu items wrap adm submenu items stretch wrap BX adminMenu itemsStretchScroll()"> <table class if (!empty( $menu["items"])) elseif ( $menu[ 'menu_id']=='desktop') if ( $menu[ 'menu_id']=='desktop') endforeach
Определения prolog_main_admin.php:255
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$TYPE
Определения rss.php:27
$i
Определения factura.php:643
</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
$width
Определения html.php:68
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$arStatuses
Определения options.php:1642
$val
Определения options.php:1793
$strErrorMessage
Определения action.php:25
$arRes
Определения options.php:104
const SITE_ID
Определения sonet_set_content_view.php:12
$k
Определения template_pdf.php:567
$action
Определения file_dialog.php:21
$GLOBALS['_____370096793']
Определения update_client.php:1