2##############################################
3# Bitrix Site Manager Forum #
4# Copyright (c) 2002-2007 Bitrix #
6# mailto:admin@bitrixsoft.com #
7##############################################
13 public static function CanUserAddMessage($TID, $arUserGroups, $iUserID = 0, $ExternalPermission =
false)
29 if ($arForum[
"ACTIVE"] !=
"Y")
31 return ($strPerms <
"U" && ($arTopic[
"STATE"] !=
"Y") ?
false :
true);
36 public static function CanUserUpdateMessage($MID, $arUserGroups, $iUserID = 0, $ExternalPermission =
false)
40 $arTopic = $arMessage[
"TOPIC_INFO"];
41 $arForum = $arMessage[
"FORUM_INFO"];
51 if ($strPerms <
"I" || $arForum[
"ACTIVE"] !=
"Y")
55 if ($arTopic[
"STATE"] !=
"Y")
57 $iUserID = intval($iUserID);
58 if ($iUserID <= 0 || intval($arMessage[
"AUTHOR_ID"]) != $iUserID)
60 if (COption::GetOptionString(
"forum",
"USER_EDIT_OWN_POST",
"Y") ==
"Y")
63 if (intval($iCnt) <= 0)
69 public static function CanUserDeleteMessage($MID, $arUserGroups, $iUserID = 0, $ExternalPermission =
false)
73 $arForum = $arMessage[
"FORUM_INFO"] ??
null;
76 $FID = intval($arMessage[
"FORUM_ID"]);
84 elseif ($arForum[
"ACTIVE"] !=
"Y")
86 return ($strPerms >=
"U" ?
true :
false);
103 $bDeduplication =
true;
107 "id"=>
'empty_forum_id',
108 "text" =>
GetMessage(
"F_ERR_EMPTY_FORUM_ID"));
112 $forumID = ((
$ACTION ==
'ADD') ? intval(
$arFields[
"FORUM_ID"]) : intval($arMessage[
"FORUM_ID"]));
114 if (!is_array($arForum))
117 "id"=>
'invalid_forum_id',
118 "text" =>
GetMessage(
"F_ERR_INVALID_FORUM_ID"));
127 $bDeduplication =
false;
131 $bDeduplication = ($arForum[
'DEDUPLICATION'] ===
'Y');
139 "id"=>
'empty_topic_id',
140 "text" =>
GetMessage(
"F_ERR_EMPTY_TOPIC_ID"));
145 "id"=>
'empty_author_name',
146 "text" =>
GetMessage(
"F_ERR_EMPTY_AUTHOR_NAME"));
153 "id"=>
'empty_post_message',
154 "text" =>
GetMessage(
"F_ERR_EMPTY_POST_MESSAGE"));
163 "AUTHOR_NAME" => $arMessage[
"AUTHOR_NAME"],
"POST_MESSAGE_CHECK" =>
$arFields[
"POST_MESSAGE_CHECK"]),
true);
167 "id"=>
'message_already_exists',
168 "text" =>
GetMessage(
"F_ERR_MESSAGE_ALREADY_EXISTS"));
195 $arParams =
array(
"FORUM_ID" => $arMessage[
"FORUM_ID"],
"MESSAGE_ID" => 0,
"USER_ID" =>
$arFields[
"AUTHOR_ID"]);
201 "id" =>
'attach_error',
202 "text" =>
$res->GetString());
216 "id" =>
'topic_is_not_exists',
217 "text" =>
GetMessage(
"F_ERR_TOPIC_IS_NOT_EXISTS"));
222 "id" =>
'topic_is_link',
251 $strUploadDir = ($strUploadDir ===
false ?
"forum" : $strUploadDir);
267 "AUTHOR_NAME" => $arMessage_prev[
"AUTHOR_NAME"],
268 "AUTHOR_EMAIL" => $arMessage_prev[
"AUTHOR_EMAIL"],
269 "EDITOR_NAME" => $arMessage_prev[
"EDITOR_NAME"],
270 "EDITOR_EMAIL" => $arMessage_prev[
"EDITOR_EMAIL"],
271 "EDIT_REASON" => $arMessage_prev[
"EDIT_REASON"]);
272 $bUpdateHTML =
false;
285 $strSql =
", POST_DATE=".$DB->GetNowFunction();
291 $strSql .=
", EDIT_DATE=".$DB->GetNowFunction();
297 $strSql .=
", EDIT_DATE=".$DB->GetNowFunction();
302 foreach (
GetModuleEvents(
"forum",
"onBeforeMessageUpdate",
true) as $arEvent)
315 $res =
array(
"FORUM_ID" => $arMessage_prev[
"FORUM_ID"],
316 "TOPIC_ID" => $arMessage_prev[
"TOPIC_ID"],
318 "USER_ID" =>
$arFields[
"EDITOR_ID"],
"upload_dir" => $strUploadDir);
343 $strUpdate =
$DB->PrepareUpdate(
"b_forum_message",
$arFields, $strUploadDir);
344 $strSql =
"UPDATE b_forum_message SET ".$strUpdate.$strSql.
" WHERE ID = ".
$ID;
346 $DB->QueryBind($strSql,
348 "POST_MESSAGE_HTML" =>
$arFields[
"POST_MESSAGE_HTML"] ??
null,
349 "POST_MESSAGE_FILTER" =>
$arFields[
"POST_MESSAGE_FILTER"] ??
null,
350 "EDIT_REASON" =>
$arFields[
"EDIT_REASON"] ??
null,
358 "MESSAGE_ID" =>
$ID);
364 foreach (
GetModuleEvents(
"forum",
"onAfterMessageUpdate",
true) as $arEvent)
368 unset(
$GLOBALS[
"FORUM_CACHE"][
"MESSAGE_FILTER"][
$ID]);
376 if ($arMessage[
"AUTHOR_ID"] != $arMessage_prev[
"AUTHOR_ID"]):
382 if ($arMessage[
"TOPIC_ID"] != $arMessage_prev[
"TOPIC_ID"]):
388 if ($arMessage[
"FORUM_ID"] != $arMessage_prev[
"FORUM_ID"]):
393 if ($arMessage[
"APPROVED"] != $arMessage_prev[
"APPROVED"]):
394 if ($arMessage[
"AUTHOR_ID"] == $arMessage_prev[
"AUTHOR_ID"]):
397 if ($arMessage[
"TOPIC_ID"] == $arMessage_prev[
"TOPIC_ID"]):
400 if ($arMessage[
"FORUM_ID"] == $arMessage_prev[
"FORUM_ID"]):
403 $bUpdatedStatistic =
true;
407 if (CModule::IncludeModule(
"search") && $arForum[
"INDEXATION"] ==
"Y")
410 if (isset($arMessage_prev[
"FORUM_INFO"]) && $arMessage_prev[
"FORUM_INFO"][
"INDEXATION"] ==
"Y" &&
411 $arMessage[
"FORUM_INFO"][
"INDEXATION"] !=
"Y")
415 elseif ($arMessage[
"FORUM_INFO"][
"INDEXATION"] ==
"Y" &&
416 $arMessage_prev[
"APPROVED"] !=
"N" && $arMessage[
"APPROVED"] ==
"N")
420 elseif ($arMessage[
"APPROVED"] ==
"Y")
431 if (!(
$ID > 0) || !CModule::IncludeModule(
"search"))
432 return array(
"FORUM_ID",
"TOPIC_ID",
"TITLE_SEO",
"MESSAGE_ID",
"SOCNET_GROUP_ID",
"OWNER_ID",
"PARAM1",
"PARAM2");
433 if (!is_array($arMessage) || !array_key_exists(
"FORUM_INFO", $arMessage) || !array_key_exists(
"TOPIC_INFO", $arMessage))
436 $arMessage[
"POST_MESSAGE"] = (COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y" ?
437 $arMessage[
"POST_MESSAGE_FILTER"] : $arMessage[
"POST_MESSAGE"]);
440 "PERMISSION" =>
array(),
442 "DEFAULT_URL" =>
"/");
455 $arSearchInd =
array(
457 "LAST_MODIFIED" => $arMessage[
"POST_DATE"],
458 "PARAM1" => $arMessage[
"FORUM_ID"],
459 "PARAM2" => $arMessage[
"TOPIC_ID"],
460 "PERMISSIONS" =>
$arParams[
"PERMISSION"],
461 "TITLE" => $arMessage[
"TOPIC_INFO"][
"TITLE"].($arMessage[
"NEW_TOPIC"] ==
"Y" && !empty($arMessage[
"TOPIC_INFO"][
"DESCRIPTION"]) ?
462 ", ".$arMessage[
"TOPIC_INFO"][
"DESCRIPTION"] :
""),
463 "TAGS" => (($arMessage[
"NEW_TOPIC"] ==
"Y") ? $arMessage[
"TOPIC_INFO"][
"TAGS"] :
""),
465 "ENTITY_TYPE_ID" => $arMessage[
"NEW_TOPIC"] ==
"Y"?
"FORUM_TOPIC":
"FORUM_POST",
466 "ENTITY_ID" => $arMessage[
"NEW_TOPIC"] ==
"Y"? $arMessage[
"TOPIC_ID"]: $arMessage[
"ID"],
467 "USER_ID" => $arMessage[
"AUTHOR_ID"],
469 "INDEX_TITLE" => $arMessage[
"NEW_TOPIC"] ==
"Y",
474 if (!empty($arMentionedUserID))
476 $arSearchInd[
"PARAMS"] =
array(
477 "mentioned_user_id" => $arMentionedUserID
481 $urlPatterns =
array(
482 "FORUM_ID" => $arMessage[
"FORUM_ID"],
483 "TOPIC_ID" => $arMessage[
"TOPIC_ID"],
484 "TITLE_SEO" => $arMessage[
"TOPIC_INFO"][
"TITLE_SEO"],
485 "MESSAGE_ID" => $arMessage[
"ID"],
486 "SOCNET_GROUP_ID" => $arMessage[
"TOPIC_INFO"][
"SOCNET_GROUP_ID"],
487 "OWNER_ID" => $arMessage[
"TOPIC_INFO"][
"OWNER_ID"],
488 "PARAM1" => $arMessage[
"PARAM1"],
489 "PARAM2" => $arMessage[
"PARAM2"]);
493 if (empty($arSearchInd[
"URL"]) && !empty($arSearchInd[
"LID"][
$key]))
494 $arSearchInd[
"URL"] = $arSearchInd[
"LID"][
$key];
497 if (empty($arSearchInd[
"URL"]))
501 $db_lang = CLang::GetByID(
$key);
502 if ($db_lang && $ar_lang = $db_lang->Fetch())
504 $arParams[
"DEFAULT_URL"] = $ar_lang[
"DIR"];
508 $arParams[
"DEFAULT_URL"] .= COption::GetOptionString(
"forum",
"REL_FPATH",
"").
509 "forum/read.php?FID=#FID#&TID=#TID#&MID=#MID##message#MID#";
515 foreach(
GetModuleEvents(
"forum",
"onMessageIsIndexed",
true) as $arEvent)
532 $arMessage =
array();
535 if (empty($arMessage))
538 foreach (
GetModuleEvents(
"forum",
"onBeforeMessageDelete",
true) as $arEvent)
544 $AUTHOR_ID = intval($arMessage[
"AUTHOR_ID"]);
545 $TOPIC_ID = intval($arMessage[
"TOPIC_ID"]);
546 $FORUM_ID = intval($arMessage[
"FORUM_ID"]);
548 $DB->StartTransaction();
550 if ($arMessage[
"PARAM1"] ==
"VT" && intval($arMessage[
"PARAM2"]) > 0 &&
IsModuleInstalled(
"vote")):
551 CModule::IncludeModule(
"vote");
555 CForumFiles::Delete(
array(
"MESSAGE_ID" =>
$ID),
array(
"DELETE_MESSAGE_FILE" =>
"Y"));
557 $DB->Query(
"DELETE FROM b_forum_message WHERE ID=".
$ID);
565 if ($arMessage[
"NEW_TOPIC"] ==
"Y")
566 $DB->Update(
'b_forum_message',
array(
'NEW_TOPIC' =>
'"Y"'),
"WHERE ID=".
$res[
"ID"]);
578 foreach (
GetModuleEvents(
"forum",
"onAfterMessageDelete",
true) as $arEvent)
581 if (CModule::IncludeModule(
"search"))
599 $arAddParams = (is_array($arAddParams) ? $arAddParams : []);
600 $arAddParams[
"FILTER"] = $arAddParams[
"FILTER"] ??
'N';
601 $arAddParams[
"FILTER"] = ($arAddParams[
"FILTER"] ==
"Y" && COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y" ?
"Y" :
"N");
602 $arAddParams[
"getFiles"] = $arAddParams[
"getFiles"] ??
'N';
604 if (!array_key_exists(
$ID,
$GLOBALS[
"FORUM_CACHE"][
"MESSAGE"]))
606 $strSql =
"SELECT FM.*, ".$DB->DateToCharFunction(
"FM.POST_DATE",
"FULL").
" as POST_DATE,
607 ".
$DB->DateToCharFunction(
"FM.EDIT_DATE",
"FULL").
" as EDIT_DATE
608 FROM b_forum_message FM
614 if ($arAddParams[
"FILTER"] !=
"Y"):
617 $db_res_filter =
new CDBResult;
618 $db_res_filter->InitFromArray(
array(
$res));
620 if ($res_filter = $db_res_filter->Fetch())
621 $GLOBALS[
"FORUM_CACHE"][
"MESSAGE_FILTER"][
$ID] = $res_filter;
625 if (isset(
$GLOBALS[
"FORUM_CACHE"][
"MESSAGE"][
$ID]))
628 if ($arAddParams[
"FILTER"] ==
"Y" && !empty(
$GLOBALS[
"FORUM_CACHE"][
"MESSAGE_FILTER"][
$ID]))
632 if ($arAddParams[
"getFiles"] ==
"Y")
633 $res[
"FILES"] = CForumFiles::getByMessageID(
$ID);
649 $arAddParams = (is_array($arAddParams) ? $arAddParams :
array($arAddParams));
650 $arAddParams[
"GET_TOPIC_INFO"] = (isset($arAddParams[
"GET_TOPIC_INFO"]) && $arAddParams[
"GET_TOPIC_INFO"] ==
"Y" ?
"Y" :
"N");
651 $arAddParams[
"FILTER_TOPIC_INFO"] = (isset($arAddParams[
"FILTER_TOPIC_INFO"]) && $arAddParams[
"FILTER_TOPIC_INFO"] ==
"N" ?
"N" :
"Y");
652 $arAddParams[
"GET_FORUM_INFO"] = (isset($arAddParams[
"GET_FORUM_INFO"]) && $arAddParams[
"GET_FORUM_INFO"] ==
"Y" ?
"Y" :
"N");
653 $arAddParams[
"FILTER_FORUM_INFO"] = (isset($arAddParams[
"FILTER_FORUM_INFO"]) && $arAddParams[
"FILTER_FORUM_INFO"] ==
"N" ?
"N" :
"Y");
654 $arAddParams[
"FILTER_MESSAGE_INFO"] = (isset($arAddParams[
"FILTER_MESSAGE_INFO"]) && $arAddParams[
"FILTER_MESSAGE_INFO"] ==
"N" ?
"N" :
"Y");
655 if (COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y"):
656 $arAddParams[
"FILTER"] = (
is_set($arAddParams,
"FILTER") ? $arAddParams[
"FILTER"] :
"P");
657 $arAddParams[
"FILTER"] = ($arAddParams[
"FILTER"] ==
"Y" || $arAddParams[
"FILTER"] ==
"P" ? $arAddParams[
"FILTER"] :
"N");
659 $arAddParams[
"FILTER"] =
"N";
661 if ($arAddParams[
"FILTER"] ==
"N"):
662 $arAddParams[
"FILTER_TOPIC_INFO"] =
"N";
663 $arAddParams[
"FILTER_FORUM_INFO"] =
"N";
664 $arAddParams[
"FILTER_MESSAGE_INFO"] =
"N";
665 elseif ($arAddParams[
"FILTER"] ==
"P"):
666 $arAddParams[
"FILTER_MESSAGE_INFO"] =
"N";
669 $arSqlSelect =
array();
670 $arSqlFrom =
array();
671 if ($arAddParams[
"GET_TOPIC_INFO"] ==
"Y")
674 if ($arAddParams[
"FILTER_TOPIC_INFO"] !=
"N")
675 $arSqlSelect[] =
"FT.HTML as FT_HTML";
676 $arSqlSelect[] =
"FT.XML_ID as FT_XML_ID";
677 $arSqlFrom[] =
"INNER JOIN b_forum_topic FT ON (FM.TOPIC_ID = FT.ID)";
679 if ($arAddParams[
"GET_FORUM_INFO"] ==
"Y")
682 if ($arAddParams[
"FILTER_FORUM_INFO"] !=
"N")
683 $arSqlSelect[] =
"F.HTML as F_HTML";
684 $arSqlFrom[] =
"INNER JOIN b_forum F ON (FM.FORUM_ID = F.ID)";
688 "SELECT FM.*, ".$DB->DateToCharFunction(
"FM.POST_DATE",
"FULL").
" as POST_DATE,
689 ".
$DB->DateToCharFunction(
"FM.EDIT_DATE",
"FULL").
" as EDIT_DATE,
690 FU.SHOW_NAME, FU.DESCRIPTION, FU.NUM_POSTS, FU.POINTS as NUM_POINTS, FU.SIGNATURE, FU.AVATAR, FU.RANK_ID,
691 ".
$DB->DateToCharFunction(
"FU.DATE_REG",
"SHORT").
" as DATE_REG,
692 U.EMAIL, U.PERSONAL_ICQ, U.LOGIN, U.NAME, U.SECOND_NAME, U.LAST_NAME, U.PERSONAL_PHOTO".
693 (!empty($arSqlSelect) ?
", ".implode(
", ", $arSqlSelect) :
"").
"
694 FROM b_forum_message FM
695 LEFT JOIN b_forum_user FU ON (FM.AUTHOR_ID = FU.USER_ID)
696 LEFT JOIN b_user U ON (FM.AUTHOR_ID = U.ID)
697 ".implode(
" ", $arSqlFrom).
"
698 WHERE FM.ID = ".
$ID.
"";
702 if ($arAddParams[
"FILTER_MESSAGE_INFO"] ==
"N"):
706 if ($arAddParams[
"GET_TOPIC_INFO"] ==
"Y" && COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y"):
709 if (strpos(
$key,
"FT_") === 0)
710 $arTopic[mb_substr(
$key, 3)] =
$val;
712 if (!empty($arTopic[
'ID'])):
713 $GLOBALS[
"FORUM_CACHE"][
"TOPIC"][intval($arTopic[
'ID'])] = $arTopic;
714 $db_res_filter =
new CDBResult;
715 $db_res_filter->InitFromArray(
array($arTopic));
717 if ($res_filter = $db_res_filter->Fetch())
718 $GLOBALS[
"FORUM_CACHE"][
"TOPIC_FILTER"][$arTopic[
'ID']] = $res_filter;
726 if ($arAddParams[
"GET_TOPIC_INFO"] ==
"Y" || $arAddParams[
"GET_FORUM_INFO"] ==
"Y"):
731 if (mb_substr(
$key, 0, 3) ==
"FT_")
738 if (COption::GetOptionString(
"forum",
"FILTER",
"Y") !=
"Y" && !empty(
$res[
"TOPIC_INFO"])):
739 $GLOBALS[
"FORUM_CACHE"][
"TOPIC"][intval(
$res[
"TOPIC_INFO"][
"ID"])] =
$res[
"TOPIC_INFO"];
741 if (!empty(
$res[
"FORUM_INFO"])):
742 $GLOBALS[
"FORUM_CACHE"][
"FORUM"][intval(
$res[
"FORUM_INFO"][
"ID"])] =
$res[
"FORUM_INFO"];
745 if (isset($arAddParams[
"getFiles"]) && $arAddParams[
"getFiles"] ==
"Y" && !empty(
$res))
746 $res[
"FILES"] = CForumFiles::getByMessageID(
$ID);
753 public static function GetMessagePage(
$ID, $messagePerPage, $arUserGroups, $TID = 0, $addParams = [])
757 $messagePerPage = intval($messagePerPage);
759 if ($messagePerPage <= 0 ||
$ID <= 0)
762 $addParams = (is_array($addParams) ? $addParams : []);
765 if (!empty($addParams[
"PERMISSION_EXTERNAL"]))
767 $permission = $addParams[
"PERMISSION_EXTERNAL"];
773 else if ($TID > 0 && ($topic = \
Bitrix\Forum\Topic::getById($TID)))
778 $filter = (isset($addParams[
"FILTER"]) && is_array($addParams[
"FILTER"]) ? $addParams[
"FILTER"] : []);
779 if ($permission <
"Q")
788 $order = (isset($addParams[
"ORDER_DIRECTION"]) && $addParams[
"ORDER_DIRECTION"] ==
"DESC" ?
"DESC" :
"ASC");
807 $mailTemplate = ($mailTemplate ===
false ?
"NEW_FORUM_MESSAGE" : $mailTemplate);
811 CTimeZone::Disable();
816 if ($db_files &&
$res = $db_files->Fetch())
821 }
while (
$res = $db_files->Fetch());
824 if (empty($arMessage))
827 $arTopic = $arMessage[
"TOPIC_INFO"];
828 $arForum = $arMessage[
"FORUM_INFO"];
829 $TID = intval($arMessage[
"TOPIC_ID"]);
830 $FID = intval($arMessage[
"FORUM_ID"]);
842 if (!
is_set(
$arFields,
"FROM_EMAIL"))
$arFields[
"FROM_EMAIL"] = COption::GetOptionString(
"forum",
"FORUM_FROM_EMAIL",
"nomail@nomail.nomail");
845 if($arTopic[
"SOCNET_GROUP_ID"]>0)
847 if(CModule::IncludeModule(
"mail") && CModule::IncludeModule(
"socialnetwork"))
854 if($arMessage[
"XML_ID"]==
'')
857 $arMessage[
"XML_ID"] =
"M".$MID.
".".md5(uniqid()).
"@".(
$_SERVER[
"SERVER_NAME"]!=
''?
$_SERVER[
"SERVER_NAME"]:
$_SERVER[
"SERVER_ADDR"]);
858 $DB->Query(
"UPDATE b_forum_message SET XML_ID='".
$DB->ForSQL($arMessage[
"XML_ID"]).
"' WHERE ID=".$MID);
862 if($arTopic[
"XML_ID"]==
'')
864 $arTopic[
"XML_ID"] =
"T".$TID.
".".md5(uniqid()).
"@".(
$_SERVER[
"SERVER_NAME"]!=
''?
$_SERVER[
"SERVER_NAME"]:
$_SERVER[
"SERVER_ADDR"]);
865 $DB->Query(
"UPDATE b_forum_topic SET XML_ID='".
$DB->ForSQL($arTopic[
"XML_ID"]).
"' WHERE ID=".$TID);
869 if($arMailParams[
'USE_EMAIL'] ==
'Y' && $arMessage[
"AUTHOR_EMAIL"]!=
'')
870 $arFields[
"FROM_EMAIL"] =
'"'.$arMessage[
'AUTHOR_NAME'].
'" <'.$arMessage[
'AUTHOR_EMAIL'].
'>';
871 elseif($arMailParams[
'USE_EMAIL'] ==
'Y' && $arMessage[
"EMAIL"]!=
'')
872 $arFields[
"FROM_EMAIL"] =
'"'.$arMessage[
'AUTHOR_NAME'].
'" <'.$arMessage[
'EMAIL'].
'>';
874 $arFields[
"FROM_EMAIL"] =
'"'.$arMessage[
'AUTHOR_NAME'].
'" <'.$arMailParams[
'EMAIL'].
'>';
876 if($arMessage[
"NEW_TOPIC"]==
"Y")
882 $arFields[
"TOPIC_TITLE"] =
"Re".($arMessage[
"TOPIC_INFO"][
"POSTS"]>1?
"[".$arMessage[
"TOPIC_INFO"][
"POSTS"].
"]":
"").
": ".
$arFields[
"TOPIC_TITLE"];
888 $arFields[
"FORUM_EMAIL"] = $arMailParams[
"EMAIL"];
890 $arSocNetGroup = CSocNetGroup::GetById($arTopic[
"SOCNET_GROUP_ID"]);
891 $arFields[
"FORUM_NAME"] = $arSocNetGroup[
"NAME"];
893 if($arMailParams[
"SUBJECT_SUF"] !=
'')
894 $arFields[
"TOPIC_TITLE"] .=
' '.$arMailParams[
"SUBJECT_SUF"];
895 if($arMailParams[
"USE_SUBJECT"] ==
"Y")
898 $arFields[
"PATH2FORUM"] = CComponentEngine::MakePathFromTemplate($arMailParams[
"URL_TEMPLATES_MESSAGE"],
array(
"FID" => $arMessage[
"FORUM_ID"],
"TID" => $arMessage[
"TOPIC_ID"],
"TITLE_SEO" => $arMessage[
"TOPIC_INFO"][
"TITLE_SEO"],
"MID" => $arMessage[
"ID"]));
911 array(
"FORUM_ID" => $arMessage[
"FORUM_ID"],
"TOPIC_ID" => $arMessage[
"TOPIC_ID"],
"TITLE_SEO" => $arMessage[
"TOPIC_INFO"][
"TITLE_SEO"],
"MESSAGE_ID" => $arMessage[
"ID"],
912 "SOCNET_GROUP_ID" => $arTopic[
"SOCNET_GROUP_ID"],
"OWNER_ID" => $arTopic[
"OWNER_ID"],
913 "PARAM1" => $arMessage[
"PARAM1"],
"PARAM2" => $arMessage[
"PARAM2"])));
914 if (empty($arForumSites[
$site_id])):
915 $db_lang = CSite::GetByID(
$site_id);
917 if ($ar_lang = $db_lang->Fetch())
918 $arForumSites[
$site_id] = $ar_lang[
"DIR"];
919 $arForumSites[
$site_id] = COption::GetOptionString(
"forum",
"REL_FPATH",
"").
920 "forum/read.php?FID=#FID#&TID=#TID#&MID=#MID##message#MID#";
923 foreach(
GetModuleEvents(
"forum",
"onBeforeMailMessageSend",
true) as $arEvent)
940 "TOPIC_ID_OR_NULL" => $TID,
942 ">=PERMISSION" => (($arTopic[
"APPROVED"] !=
"Y" || $arMessage[
"APPROVED"] !=
"Y") ?
"Q" :
"E")
944 if ($arMessage[
"NEW_TOPIC"] !=
"Y")
946 if ($mailTemplate ==
"NEW_FORUM_MESSAGE")
949 if($arTopic[
"SOCNET_GROUP_ID"]>0)
951 $mailTemplate =
"FORUM_NEW_MESSAGE_MAIL";
952 $arFilter[
"SOCNET_GROUP_ID"] = $arTopic[
"SOCNET_GROUP_ID"];
959 $currentUserID =
false;
963 if (
$res[
"SUBSC_GET_MY_MESSAGE"] ==
"N" &&
$res[
"USER_ID"] ==
$USER->GetId())
967 if ($currentUserID ==
$res[
"USER_ID"])
971 if (empty(
$res[
"EMAIL"]))
974 if($mailTemplate ==
"FORUM_NEW_MESSAGE_MAIL" &&
$res[
"USER_ID"] == $arMessage[
"AUTHOR_ID"])
977 $currentUserID =
$res[
"USER_ID"];
980 if (!
is_set($arFields_tmp,
"PATH2FORUM"))
982 $arFields_tmp[
"PATH2FORUM"] = $arForumSites[
$res[
"SITE_ID"]];
985 if (!
is_set($arFields_tmp,
"MESSAGE_TEXT"))
987 if (!isset(${
"parser_".$res[
"SITE_ID"]}))
989 if (empty($arSiteFields[
$res[
"SITE_ID"]]))
991 $arSiteFields[
$res[
"SITE_ID"]] =
$event->GetSiteFieldsArray(
$res[
"SITE_ID"]);
992 $db_site = CSite::GetByID(
$res[
"SITE_ID"]);
993 if ($db_site && $arSite = $db_site->Fetch())
995 $arSiteFields[
$res[
"SITE_ID"]] = array_merge($arSiteFields[
$res[
"SITE_ID"]], $arSite,
997 $arSiteFields[
$res[
"SITE_ID"]][
"ATTACHED_FILES"] = $arSiteFields[
$res[
"SITE_ID"]][
"LANG_MESS"][
"F_ATTACHED_FILES"];
1000 if (!empty($arSiteFields[
$res[
"SITE_ID"]][
"SERVER_NAME"]))
1001 ${
"parser_".$res[
"SITE_ID"]}->serverName = $arSiteFields[
$res[
"SITE_ID"]][
"SERVER_NAME"];
1002 ${
"parser_".$res[
"SITE_ID"]}->arFiles =
$arFiles;
1004 $POST_MESSAGE_HTML = $arMessage[
"POST_MESSAGE"];
1005 if (COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y")
1006 $POST_MESSAGE_HTML = (empty($arMessage[
"POST_MESSAGE_FILTER"]) ?
CFilterUnquotableWords::Filter($POST_MESSAGE_HTML) : $arMessage[
"POST_MESSAGE_FILTER"]);
1007 $arFields_tmp[
"MESSAGE_TEXT"] = ${
"parser_".$res[
"SITE_ID"]}->convert4mail($POST_MESSAGE_HTML);
1008 $arFields_tmp[
"PARSED_FILES"] = ${
"parser_".$res[
"SITE_ID"]}->arFilesIDParsed;
1009 $tmp = array_diff(array_keys(
$arFiles), ${
"parser_".$res[
"SITE_ID"]}->arFilesIDParsed);
1012 $str =
"[FILE ID=".implode(
"]\n[FILE ID=",
$tmp).
"]";
1013 ${
"parser_".$res[
"SITE_ID"]}->ParserFile(
$str, ${
"parser_".$res[
"SITE_ID"]},
"mail");
1014 $arFields_tmp[
"MESSAGE_TEXT"] .=
"\n\n".$arSiteFields[
$res[
"SITE_ID"]][
"ATTACHED_FILES"].
"\n".
$str;
1018 $arFields_tmp[
"RECIPIENT"] =
$res[
"EMAIL"];
1019 $event->Send($mailTemplate,
$res[
"SITE_ID"], $arFields_tmp,
"N");
1020 $arID[] =
$res[
"ID"];
1021 if (
count($arID) > 255)
1027 if (
count($arID) > 0)
1036 $FID = intval($FID);
1037 $TID = intval($TID);
1038 if ($FID<=0)
return false;
1046 $FID = intval($FID);
1047 $TID = intval($TID);
1048 if ($FID<=0)
return false;
1049 if ($PERMISSION ==
'')
return false;
1054 $read_forum_cookie = COption::GetOptionString(
"main",
"cookie_name",
"BITRIX_SM").
"_FORUM_0";
1055 if ($_SESSION[
"first_read_forum_".$FID] ==
'' || intval($_SESSION[
"first_read_forum_".$FID])<0)
1057 if (isset($_COOKIE[$read_forum_cookie]) && $_COOKIE[$read_forum_cookie] <>
'')
1059 $arForumCookie = explode(
"/", $_COOKIE[$read_forum_cookie]);
1061 while (
$i <
count($arForumCookie))
1063 if (intval($arForumCookie[
$i])==$FID)
1065 $iCurFirstReadForum = intval($arForumCookie[
$i+1]);
1072 $read_forum_cookie1 = COption::GetOptionString(
"main",
"cookie_name",
"BITRIX_SM").
"_FORUM_".$FID;
1073 if (isset($_COOKIE[$read_forum_cookie1]) && intval($_COOKIE[$read_forum_cookie1])>0)
1075 if ($iCurFirstReadForum<intval($_COOKIE[$read_forum_cookie1]))
1077 $iCurFirstReadForum = intval($_COOKIE[$read_forum_cookie1]);
1081 $_SESSION[
"first_read_forum_".$FID] = intval($iCurFirstReadForum);
1083 if (is_null($_SESSION[
"read_forum_".$FID]) || $_SESSION[
"read_forum_".$FID] ==
'')
1085 $_SESSION[
"read_forum_".$FID] =
"0";
1089 if (intval($_SESSION[
"first_read_forum_" . $FID])>0)
1090 $arFilter[
">ID"] = intval($_SESSION[
"first_read_forum_" . $FID]);
1091 if ($_SESSION[
"read_forum_" . $FID]!=
"0")
1093 $arFMIDsTmp = explode(
",", $_SESSION[
"read_forum_" . $FID]);
1094 if (
count($arFMIDsTmp)>950)
1096 for ($i1 = 0; $i1<
count($arFMIDsTmp); $i1++)
1098 if (intval($_SESSION[
"first_read_forum_" . $FID]) < intval($arFMIDsTmp[$i1]))
1100 $_SESSION[
"first_read_forum_" . $FID] = intval($arFMIDsTmp[$i1]);
1103 $_SESSION[
"read_forum_" . $FID] =
"0";
1104 $arFilter[
">ID"] = intval($_SESSION[
"first_read_forum_" . $FID]);
1108 $arFilter[
"!@ID"] = $_SESSION[
"read_forum_" . $FID];
1111 if ($PERMISSION<=
"Q")
$arFilter[
"APPROVED"] =
"Y";
1112 if ($TID>0)
$arFilter[
"TOPIC_ID"] = $TID;
1119 $MESSAGE_ID =
$res[
"ID"];
1120 $TOPIC_ID =
$res[
"TOPIC_ID"];
1123 return array($TOPIC_ID, $MESSAGE_ID);
1128 if ($arEvent[
"EVENT_ID"] ==
"forum")
1130 $arTmp = explode(
"&", $arEvent[
"PARAMS"]);
1131 foreach (
$arTmp as $strTmp)
1133 list(
$key, $value) = explode(
"=", $strTmp, 2);
1142 $arEvent[
"TITLE_TEMPLATE"] =
"#USER_NAME# ".GetMessage(
"F_SONET_MESSAGE_TITLE");
1144 $arEvent[
"TITLE_TEMPLATE"] =
"#USER_NAME# ".GetMessage(
"F_SONET_TOPIC_TITLE");
1165 if (!empty(
$res[
"UF_FORUM_MESSAGE_DOC"]) && is_array(
$res[
"UF_FORUM_MESSAGE_DOC"]))
1166 $arDocs = array_merge($arDocs,
$res[
"UF_FORUM_MESSAGE_DOC"]);
1169 if (!empty($arDocs) && CModule::IncludeModule(
"webdav"))
1171 CWebDavIblock::appendRightsOnElements($arDocs,
$rights);
1178 $arMentionedUserID =
array();
1180 if ($strMessage <>
'')
1182 preg_match_all(
"/\[user\s*=\s*([^\]]*)\](.+?)\[\/user\]/isu", $strMessage, $arMention);
1183 if (!empty($arMention))
1185 $arMentionedUserID = array_merge($arMentionedUserID, $arMention[1]);
1189 return $arMentionedUserID;
1198 $this->sNameTemplate = (!empty(
$params[
"sNameTemplate"]) ?
$params[
"sNameTemplate"] :
'');
1199 $this->checkUserFields =
false;
1200 $this->arUserFields =
false;
1201 if (array_key_exists(
"SELECT",
$params))
1204 $this->arUserFields =
$USER_FIELD_MANAGER->GetUserFields(
"FORUM_MESSAGE", 0, LANGUAGE_ID);
1205 $this->checkUserFields = (!empty($this->arUserFields));
1207 parent::__construct(
$res);
1213 if(
$res = parent::Fetch())
1215 if (COption::GetOptionString(
"forum",
"MESSAGE_HTML",
"N") ==
"Y" ||
1216 COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y")
1218 $res[
"POST_MESSAGE_HTML"] = trim(
$res[
"POST_MESSAGE_HTML"]);
1219 $res[
"POST_MESSAGE_FILTER"] = trim(
$res[
"POST_MESSAGE_FILTER"]);
1220 if (empty(
$res[
"POST_MESSAGE_HTML"]) && COption::GetOptionString(
"forum",
"MESSAGE_HTML",
"N") ==
"Y" ||
1221 empty(
$res[
"POST_MESSAGE_FILTER"]) && COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y")
1224 if ((COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y") && empty(
$res[
"POST_MESSAGE_FILTER"]))
1229 if (COption::GetOptionString(
"forum",
"MESSAGE_HTML",
"N") ==
"Y" && empty(
$res[
"POST_MESSAGE_HTML"]))
1233 if (intval(
$res[
"ATTACH_IMG"]) > 0)
1237 if ($db_files && $res_file = $db_files->Fetch())
1241 $res_file[
"SRC"] = CFile::GetFileSRC(
$res);
1242 $arFiles[$res_file[
"ID"]] = $res_file;
1243 }
while ($res_file = $db_files->Fetch());
1248 $allow[
'SMILES'] = (
$res[
"USE_SMILES"] ==
"Y" ? $allow[
'SMILES'] :
"N");
1250 $arFields[
"POST_MESSAGE_HTML"] = $parser->convert($POST_MESSAGE_HTML, $allow,
"html",
$arFiles);
1252 $strUpdate =
$DB->PrepareUpdate(
"b_forum_message",
$arFields);
1253 $strSql =
"UPDATE b_forum_message SET ".$strUpdate.
" WHERE ID = ".intval(
$res[
"ID"]);
1261 if (COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y")
1265 $arr = @unserialize(
is_set(
$res,
"HTML") ?
$res[
"HTML"] :
$res[
"FM_HTML"], [
"allowed_classes" =>
false]);
1266 if (empty(
$arr) || !is_array(
$arr))
1269 "AUTHOR_NAME" =>
$res[
"AUTHOR_NAME"],
1270 "AUTHOR_EMAIL" =>
$res[
"AUTHOR_EMAIL"],
1271 "EDITOR_NAME" =>
$res[
"EDITOR_NAME"],
1272 "EDITOR_EMAIL" =>
$res[
"EDITOR_EMAIL"],
1273 "EDIT_REASON" =>
$res[
"EDIT_REASON"]);
1284 $strUpdate =
$DB->PrepareUpdate(
"b_forum_message",
$arFields);
1285 $strSql =
"UPDATE b_forum_message SET ".$strUpdate.
" WHERE ID = ".intval(
$res[
"ID"]);
1295 if (!empty(
$res[
"FT_HTML"]))
1297 $arr = @unserialize(
$res[
"FT_HTML"], [
"allowed_classes" =>
false]);
1298 if (is_array(
$arr) && !empty(
$arr[
"TITLE"]))
1304 $res[
"~FT_".$key] =
$res[
"FT_".$key];
1311 if (!empty(
$res[
"F_HTML"]))
1313 $arr = @unserialize(
$res[
"F_HTML"], [
"allowed_classes" =>
false]);
1320 $res[
"~F_".$key] =
$res[
"F_".$key];
1325 if (!empty(
$res[
"FT_TITLE"]))
1326 $res[
"F_TITLE"] =
$res[
"FT_TITLE"];
1329 if (!empty($this->sNameTemplate))
1333 "AUTHOR_ID" =>
"AUTHOR_NAME",
1334 "EDITOR_ID" =>
"EDITOR_NAME",
1335 "USER_START_ID" =>
"USER_START_NAME") as $id =>
$name)
1337 if (array_key_exists($id,
$res))
1340 if (!empty(
$res[$id]))
1358 if ($this->checkUserFields)
1360 $arUF = array_intersect_key(
$res, $this->arUserFields);
1362 $this->checkUserFields =
false;
1365 foreach($arUF as
$k => $v)
1367 $res[
$k] = $this->arUserFields[
$k];
1371 if (method_exists(
$GLOBALS[
'USER_FIELD_MANAGER'],
'getCustomData'))
1373 $res[
$k][
"CUSTOM_DATA"] =
$GLOBALS[
'USER_FIELD_MANAGER']->getCustomData(
1394 if (!isset(
$GLOBALS[
"FORUM_CACHE"][
"MESSAGE_FILES"]) || !is_array(
$GLOBALS[
"FORUM_CACHE"][
"MESSAGE_FILES"]))
1397 if (!array_key_exists(
$ID,
$GLOBALS[
"FORUM_CACHE"][
"MESSAGE_FILES"]))
1401 if ($db_files && ($res_file = $db_files->Fetch()))
1404 $GLOBALS[
"FORUM_CACHE"][
"MESSAGE_FILES"][
$ID][$res_file[
"FILE_ID"]] = $res_file;
1405 }
while ($res_file = $db_files->Fetch());
1432 "id" =>
'bad_forum',
1433 "text" =>
GetMessage(
"F_ERR_EMPTY_FORUM_ID"));
1437 if (empty($arForum))
1439 "id" =>
'bad_forum',
1440 "text" =>
GetMessage(
"F_ERR_FORUM_IS_LOST"));
1441 elseif (!in_array($arForum[
"ALLOW_UPLOAD"],
array(
"Y",
"F",
"A")))
1443 "id" =>
'bad_forum_permission',
1444 "text" =>
GetMessage(
"F_ERR_UPOAD_IS_DENIED"));
1447 $arFilesExists =
array();
1448 $iFileSize = intval(COption::GetOptionString(
"forum",
"file_max_size", 5242880));
1451 if (
$val[
"name"] ==
'' && intval(
$val[
"FILE_ID"]) <= 0):
1455 if ($arForum[
"ALLOW_UPLOAD"] ==
"Y"):
1456 $res = CFile::CheckImageFile(
$val, $iFileSize, 0, 0);
1457 elseif ($arForum[
"ALLOW_UPLOAD"] ==
"F"):
1458 $res = CFile::CheckFile(
$val, $iFileSize,
false, $arForum[
"ALLOW_UPLOAD_EXT"]);
1460 $res = CFile::CheckFile(
$val, $iFileSize,
false,
false);
1465 "id"=>
'attach_error',
1470 if (intval(
$val[
"FILE_ID"]) > 0):
1472 $arFilesExists[
$val[
"FILE_ID"]] =
$val;
1476 if (
$ACTION !=
"NOT_CHECK_DB" && !empty($arFilesExists))
1483 $arFilter[
"@FILE_ID"] = array_keys($arFilesExists);
1490 unset($arFilesExists[
$res[
"FILE_ID"]]);
1494 if (!empty($arFilesExists))
1497 "id" =>
'attach_error',
1498 "text" => str_replace(
"#FILE_ID#", implode(
", ", array_keys($arFilesExists)),
GetMessage(
"F_ERR_UPOAD_FILES_IS_LOST")));
1505 $GLOBALS[
"APPLICATION"]->ThrowException($e);
1514 if (!is_array($arFileID))
1515 $arFileID =
array($arFileID);
1521 foreach($arFileID as $fileID)
1524 $arInsert =
$GLOBALS[
"DB"]->PrepareInsert(
"b_forum_file",
$arParams, $strUploadDir);
1525 $strSql =
"INSERT INTO b_forum_file(".$arInsert[0].
") VALUES(".$arInsert[1].
")";
1547 if ($file[
"FILE_ID"] > 0)
1549 $files[$file[
"FILE_ID"]] = $file;
1568 if (intval(
$val) > 0 && in_array(
$key,
array(
"FORUM_ID",
"TOPIC_ID",
"MESSAGE_ID")))
1575 $strSql =
"UPDATE b_forum_file SET ".$strUpdate.
" WHERE FILE_ID IN(".implode(
",",
$ID).
")";
1591 foreach ([
'FILE_ID',
'MESSAGE_ID',
'TOPIC_ID',
'FORUM_ID'] as
$key)
1598 if (!empty(
$fields[
'FILE_ID']))
1600 $arSQL[] =
'FILE_ID=' .
$fields[
'FILE_ID'];
1602 if (!empty(
$fields[
'MESSAGE_ID']) && (!empty($arSQL) ||
$params[
'DELETE_MESSAGE_FILE'] ==
'Y'))
1604 $arSQL[] =
'MESSAGE_ID=' .
$fields[
'MESSAGE_ID'];
1606 if (!empty(
$fields[
'TOPIC_ID']) && (!empty($arSQL) ||
$params[
'DELETE_TOPIC_FILE'] ==
'Y'))
1608 $arSQL[] =
'TOPIC_ID=' .
$fields[
'TOPIC_ID'];
1610 if (!empty(
$fields[
'FORUM_ID']) && (!empty($arSQL) ||
$params[
'DELETE_FORUM_FILE'] ==
'Y'))
1612 $arSQL[] =
'FORUM_ID=' .
$fields[
'FORUM_ID'];
1616 $db_res =
$DB->Query(
'SELECT * from b_forum_file where '.implode(
' AND ', $arSQL));
1621 CFile::Delete(
$res[
'FILE_ID']);
1630 if($arFile[
"MODULE_ID"] ==
"forum")
1632 $GLOBALS[
"DB"]->Query(
"DELETE from b_forum_file where FILE_ID=".$arFile[
"ID"]);
__construct($res, $params=array())
static checkFiles(Forum $forum, &$files, $params=["TOPIC_ID"=> 0, "MESSAGE_ID"=> 0, "USER_ID"=> 0])
static saveFiles(&$files, $params, $uploadDir="forum/upload")
static Save(&$arFields, $arParams, $bCheckFields=true)
static Add($arFileID, &$arParams, $bCheckFields=false)
static getByMessageID($ID)
static CheckFields(&$arFields, &$arParams, $ACTION="ADD", $extParams=array())
static UpdateByID($ID, $arFields)
static OnFileDelete($arFile)
static Delete($fields=[], $params=[])
static CanUserAddMessage($TID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
static GetFirstUnreadEx($FID, $TID, $arUserGroups)
static Reindex($ID, &$arMessage=[])
static SendMailMessage($MID, $arFields=array(), $strLang=false, $mailTemplate=false)
static setWebdavRights($arFilter, $rights)
static GetByID($ID, $arAddParams=array())
static GetByIDEx($ID, $arAddParams=array())
static OnSocNetLogFormatEvent($arEvent, $arParams)
static Update($ID, $arFields, $skip_counts=false, $strUploadDir=false)
static CanUserDeleteMessage($MID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
static GetMentionedUserID($strMessage)
static GetFirstUnread($FID, $TID, $PERMISSION)
static GetMessagePage($ID, $messagePerPage, $arUserGroups, $TID=0, $addParams=[])
static CanUserUpdateMessage($MID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
static CheckFields($ACTION, &$arFields, $ID=0, $arParams=array())
static GetUserPermission($ID, $arUserGroups)
static GetAccessPermissions($ID, $TYPE="ONE")
static PreparePath2Message($strPath, $arVals=array())
static GetPermissionUserDefault($ID)
static GetSelectFields($arAddParams=array())
static SetStat($ID=0, $arParams=array())
static UpdateLastSend($MID, $sIDs)
static GetListEx($arOrder=array("ID"=>"ASC"), $arFilter=array())
static GetByID($ID, $arAddParams=array())
static SetStat($ID=0, $params=[])
static GetSelectFields($arAddParams=array(), $fields=array())
static SetStat($userId=0, $params=[])
static GetFormattedNameByUserID($userID, $template="", $arUser=array())
static DeleteIndex($MODULE_ID, $ITEM_ID=false, $PARAM1=false, $PARAM2=false, $SITE_ID=false)
static Index($MODULE_ID, $ITEM_ID, $arFields, $bOverWrite=false, $SEARCH_SESS_ID='')
static GetForumFilters($FID, $SOCNET_GROUP_ID=false)
static GetList($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $iNum=0, $arAddParams=array())
static QueryFirstUnread($arFilter)
static GetList($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
static clearAllTags($text)
static GetFeatures($arForum)
if(!is_array($prop["VALUES"])) $tmp
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
IsModuleInstalled($module_id)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if(intval($iTestTransaction) > 0) $arTmp
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
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
$GLOBALS['_____370096793']