2##############################################
3# Bitrix Site Manager Forum #
4# Copyright (c) 2002-2009 Bitrix #
6# mailto:admin@bitrixsoft.com #
7##############################################
17 public static function CanUserViewForum($FID, $arUserGroups, $ExternalPermission =
false)
20 $arUserGroups = (!is_array($arUserGroups) ?
array($arUserGroups) : $arUserGroups);
28 if (!is_array($arForum) || $arForum[
"ACTIVE"] !=
"Y"):
31 return ($strPerms <
"E" ?
false :
true);
36 $arUserGroups = (!is_array($arUserGroups) ?
array($arUserGroups) : $arUserGroups);
40 public static function CanUserUpdateForum($FID, $arUserGroups, $iUserID = 0, $ExternalPermission =
false)
50 return ($strPerms <
"Y" ?
false :
true);
53 public static function CanUserDeleteForum($FID, $arUserGroups, $iUserID = 0, $ExternalPermission =
false)
56 $arUserGroups = (!is_array($arUserGroups) ?
array($arUserGroups) : $arUserGroups);
64 return ($strPerms <
"Y" ?
false :
true);
67 public static function CanUserModerateForum($FID, $arUserGroups, $iUserID = 0, $ExternalPermission =
false)
70 $arUserGroups = (!is_array($arUserGroups) ?
array($arUserGroups) : $arUserGroups);
79 if ($strPerms >=
"Y"):
83 if (!is_array($arForum) || $arForum[
"ACTIVE"] !=
"Y"):
86 return ($strPerms <
"Q" ?
false :
true);
89 public static function CanUserEditForum($FID, $arUserGroups, $iUserID = 0, $ExternalPermission =
false)
92 $arUserGroups = (!is_array($arUserGroups) ?
array($arUserGroups) : $arUserGroups);
100 if ($strPerms >=
"Y"):
104 if (!is_array($arForum) || $arForum[
"ACTIVE"] !=
"Y"):
107 return ($strPerms <
"U" ?
false :
true);
131 $sPath =
$res[
"DIR"];
133 $arFields[
"LID"] => $sPath.(COption::GetOptionString(
"forum",
"REL_FPATH",
"")).
134 "forum/read.php?FID=#FORUM_ID#&TID=#TOPIC_ID#&MID=#MESSAGE_ID##message#MESSAGE_ID#");
146 if (isset($oldForumSites[
$siteId]))
148 if (!empty($oldForumSites[
$siteId]))
155 "id" =>
"SITE_PATH[".$siteId.
"]",
156 "text" =>
GetMessage(
"F_ERROR_EMPTY_SITE_PATH",
157 [
"#SITE_ID#" =>
$siteId,
"#SITE_NAME#" =>
$res[
"NAME"]])
167 $GLOBALS[
"APPLICATION"]->ThrowException($e);
201 if (
is_set(
$arFields,
"LAST_POSTER_NAME") && COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y")
204 $arr[
"LAST_POSTER_NAME"] = (empty(
$arr[
"LAST_POSTER_NAME"]) ?
"*" :
$arr[
"LAST_POSTER_NAME"]);
214 $arForum_prev =
array();
215 $arProcAuth =
array();
223 foreach (
GetModuleEvents(
"forum",
"onBeforeForumUpdate",
true) as $arEvent)
233 if(CACHED_b_forum !==
false)
234 $GLOBALS[
"CACHE_MANAGER"]->CleanDir(
"b_forum");
236 $GLOBALS[
"CACHE_MANAGER"]->CleanDir(
"b_forum2site");
239 if (!empty($strUpdate))
241 $strSql =
"UPDATE b_forum SET ".$strUpdate.
" WHERE ID=".
$ID;
247 $DB->Query(
"DELETE FROM b_forum2site WHERE FORUM_ID = ".
$ID);
250 $value =
$DB->ForSql($value, 250);
251 $strSql =
"INSERT INTO b_forum2site (FORUM_ID, SITE_ID, PATH2FORUM_MESSAGE) VALUES(".$ID.
", '".
$DB->ForSql(
$key, 2).
"', '".$value.
"') ";
252 if (
$DB->type ==
"MYSQL")
253 $strSql .=
"ON DUPLICATE KEY UPDATE PATH2FORUM_MESSAGE='".$value.
"'";
261 foreach (
GetModuleEvents(
"forum",
"onAfterForumUpdate",
true) as $arEvent)
267 if (
$arFields[
"ACTIVE"] ==
"N" && $arForum_prev[
"ACTIVE"] ==
"Y")
272 $res[
"AUTHOR_ID"] = intval(
$res[
"AUTHOR_ID"]);
273 if (!in_array(
$res[
"AUTHOR_ID"], $arProcAuth))
276 $arProcAuth[] =
$res[
"AUTHOR_ID"];
282 if (CModule::IncludeModule(
"search") && $bReindex ==
true)
284 if (
$arFields[
"ACTIVE"] ==
"N" && $arForum_prev[
"ACTIVE"] ==
"Y" ||
285 $arFields[
"INDEXATION"] ==
"N" && $arForum_prev[
"INDEXATION"] ==
"Y")
295 if ($group[1] >=
"E")
297 $arGPerm[] = $group[0];
314 foreach (
GetModuleEvents(
"forum",
"OnBeforeForumDelete",
true) as $arEvent)
331 if(CACHED_b_forum !==
false)
332 $GLOBALS[
"CACHE_MANAGER"]->CleanDir(
"b_forum");
333 if(CACHED_b_forum_perms !==
false)
334 $GLOBALS[
"CACHE_MANAGER"]->CleanDir(
"b_forum_perms");
335 if(CACHED_b_forum2site !==
false)
336 $GLOBALS[
"CACHE_MANAGER"]->CleanDir(
"b_forum2site");
340 if (CModule::IncludeModule(
"search"))
344 CForumFiles::Delete(
array(
"FORUM_ID" =>
$ID),
array(
"DELETE_FORUM_FILE" =>
"Y"));
345 $DB->StartTransaction();
347 $arProcAuth =
array();
351 $res[
"AUTHOR_ID"] = intval(
$res[
"AUTHOR_ID"]);
352 if (!in_array(
$res[
"AUTHOR_ID"], $arProcAuth))
354 $arProcAuth[] = intval(
$res[
"AUTHOR_ID"]);
361 CModule::IncludeModule(
"vote");
367 if (!
$DB->Query(
"DELETE FROM b_forum_subscribe WHERE FORUM_ID=".$ID,
true))
372 if (!
$DB->Query(
"DELETE FROM b_forum_message WHERE FORUM_ID=".$ID,
true))
377 if (!
$DB->Query(
"DELETE FROM b_forum_topic WHERE FORUM_ID=".$ID,
true))
382 if (!
$DB->Query(
"DELETE FROM b_forum_perms WHERE FORUM_ID=".$ID,
true))
387 if (!
$DB->Query(
"DELETE FROM b_forum2site WHERE FORUM_ID=".$ID,
true))
392 if (!
$DB->Query(
"DELETE FROM b_forum WHERE ID=".$ID,
true))
399 foreach($arProcAuth as
$i => $procAuth)
404 foreach (
GetModuleEvents(
"forum",
"OnAfterForumDelete",
true) as $arEvent)
415 $cache_id =
"b_forum2site_".$ID;
422 if (!array_key_exists(
"SITES",
$GLOBALS[
"FORUM_CACHE"][
"FORUM"][
$ID]))
424 if (CACHED_b_forum2site !==
false &&
$CACHE_MANAGER->Read(CACHED_b_forum2site, $cache_id,
"b_forum2site"))
430 $strSql =
"SELECT FS.FORUM_ID, FS.SITE_ID, FS.PATH2FORUM_MESSAGE FROM b_forum2site FS WHERE FS.FORUM_ID = ".$ID;
436 if (CACHED_b_forum2site !==
false)
440 return $GLOBALS[
"FORUM_CACHE"][
"FORUM"][
$ID][
"SITES"];
447 if (COption::GetOptionString(
"main",
"new_user_registration",
"") ==
"Y")
449 $def_group = COption::GetOptionString(
"main",
"new_user_registration_def_group",
"");
468 $res = $forum->getPermissions();
485 $arSqlSearch =
array();
487 $arSqlOrder =
array();
494 $key = mb_strtoupper($key_res[
"FIELD"]);
495 $strNegative = $key_res[
"NEGATIVE"];
496 $strOperation = $key_res[
"OPERATION"];
504 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(FP.".
$key.
" IS NULL OR FP.".
$key.
"<=0)";
506 $arSqlSearch[] = ($strNegative==
"Y"?
" FP.".$key.
" IS NULL OR NOT ":
"").
"FP.".
$key.
" ".$strOperation.
" ".intval(
$val).
" ";
510 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(FP.".
$key.
" IS NULL OR ".(
$DB->type ==
"MSSQL" ?
"LEN" :
"LENGTH").
"(FP.".
$key.
")<=0)";
512 $arSqlSearch[] = ($strNegative==
"Y"?
" FP.".$key.
" IS NULL OR NOT ":
"").
"FP.".
$key.
" ".$strOperation.
" '".
$DB->ForSql(
$val).
"' ";
516 if (
count($arSqlSearch) > 0)
517 $strSqlSearch =
" AND (".implode(
" AND ", $arSqlSearch).
") ";
519 foreach ($arOrder as $by=>
$order)
521 $by = mb_strtoupper($by);
525 if ($by ==
"FORUM_ID") $arSqlOrder[] =
" FP.FORUM_ID ".$order.
" ";
526 elseif ($by ==
"GROUP_ID") $arSqlOrder[] =
" FP.GROUP_ID ".$order.
" ";
527 elseif ($by ==
"PERMISSION") $arSqlOrder[] =
" FP.PERMISSION ".$order.
" ";
530 $arSqlOrder[] =
" FP.ID ".$order.
" ";
535 if (
count($arSqlOrder) > 0)
536 $strSqlOrder =
" ORDER BY ".implode(
", ", $arSqlOrder);
539 "SELECT FP.ID, FP.FORUM_ID, FP.GROUP_ID, FP.PERMISSION
540 FROM b_forum_perms FP
553 unset(
$GLOBALS[
"FORUM_CACHE"][
"FORUM"][
$ID][
"PERMISSION"]);
554 unset(
$GLOBALS[
"FORUM_CACHE"][
"FORUM"][
$ID][
"PERMISSIONS"]);
555 if (CACHED_b_forum_perms !==
false)
557 $GLOBALS[
"CACHE_MANAGER"]->CleanDir(
"b_forum_perms");
559 $forum->setPermission($arGROUP_ID);
569 if (is_array($arUserGroups))
571 $result = $forum->getPermissionForUserGroups($arUserGroups);
573 else if ((
$user =
Forum\User::getById($arUserGroups)) !==
null)
585 if (mb_substr(
$key, 0, 1) ==
"!")
591 if (mb_substr(
$key, 0, 2) ==
">=")
594 $strOperation =
">=";
604 $strOperation =
"<=";
614 $strOperation =
"IN";
619 $strOperation =
"LIKE";
626 return array(
"FIELD"=>
$key,
"NEGATIVE"=>$strNegative,
"OPERATION"=>$strOperation);
632 if ($operation ==
"IN")
634 if (is_string($vals))
635 $vals = explode(
",", $vals);
636 else if (!is_array($vals))
637 $vals =
array($vals);
646 $vals = array_unique($vals);
647 $val = implode(
",", $vals);
654 $item = (float)$item;
657 $vals = array_unique($vals);
658 $val = implode(
",", $vals);
665 $item =
$GLOBALS[
"DB"]->CharToDateFunction($item,
"FULL");
668 $vals = array_unique($vals);
669 $val = implode(
",", $vals);
676 $item =
$GLOBALS[
"DB"]->CharToDateFunction($item,
"SHORT");
679 $vals = array_unique($vals);
680 $val = implode(
",", $vals);
687 $item =
"'".$GLOBALS[
"DB"]->ForSql($item).
"'";
690 $vals = array_unique($vals);
691 $val = implode(
",", $vals);
694 else if (
$type ===
"int")
696 $val = intval($vals);
701 $val = doubleval(str_replace(
",",
".", $vals));
706 $val =
$GLOBALS[
"DB"]->CharToDateFunction($vals,
"FULL");
710 $val =
$GLOBALS[
"DB"]->CharToDateFunction($vals,
"SHORT");
712 else if (
$type ==
"string" ||
$type ==
"char")
723 $arAddParams = (is_array($arAddParams) ? $arAddParams :
array());
724 $arAddParams[
"sPrefix"] =
$DB->ForSql(empty($arAddParams[
"sPrefix"]) ?
"F." : $arAddParams[
"sPrefix"]);
725 $arAddParams[
"sTablePrefix"] =
$DB->ForSql(empty($arAddParams[
"sTablePrefix"]) ?
"F." : $arAddParams[
"sTablePrefix"]);
726 $arAddParams[
"sReturnResult"] = ($arAddParams[
"sReturnResult"] ==
"string" ?
"string" :
"array");
729 $arAddParams[
"sPrefix"].
"ID" => $arAddParams[
"sTablePrefix"].
"ID",
730 $arAddParams[
"sPrefix"].
"NAME" => $arAddParams[
"sTablePrefix"].
"NAME",
731 $arAddParams[
"sPrefix"].
"DESCRIPTION" => $arAddParams[
"sTablePrefix"].
"DESCRIPTION",
732 $arAddParams[
"sPrefix"].
"SORT" => $arAddParams[
"sTablePrefix"].
"SORT",
733 $arAddParams[
"sPrefix"].
"ACTIVE" => $arAddParams[
"sTablePrefix"].
"ACTIVE",
734 $arAddParams[
"sPrefix"].
"MODERATION" => $arAddParams[
"sTablePrefix"].
"MODERATION",
735 $arAddParams[
"sPrefix"].
"DEDUPLICATION" => $arAddParams[
"sTablePrefix"].
"DEDUPLICATION",
736 $arAddParams[
"sPrefix"].
"INDEXATION" => $arAddParams[
"sTablePrefix"].
"INDEXATION",
737 $arAddParams[
"sPrefix"].
"ALLOW_MOVE_TOPIC" => $arAddParams[
"sTablePrefix"].
"ALLOW_MOVE_TOPIC",
738 $arAddParams[
"sPrefix"].
"TOPICS" => $arAddParams[
"sTablePrefix"].
"TOPICS",
739 $arAddParams[
"sPrefix"].
"POSTS" => $arAddParams[
"sTablePrefix"].
"POSTS",
740 $arAddParams[
"sPrefix"].
"LAST_POSTER_ID" => $arAddParams[
"sTablePrefix"].
"LAST_POSTER_ID",
741 $arAddParams[
"sPrefix"].
"LAST_POSTER_NAME" => $arAddParams[
"sTablePrefix"].
"LAST_POSTER_NAME",
742 ($arAddParams[
"sPrefix"] == $arAddParams[
"sTablePrefix"] ?
"" : $arAddParams[
"sPrefix"]).
743 "LAST_POST_DATE" =>
$DB->DateToCharFunction($arAddParams[
"sTablePrefix"].
"LAST_POST_DATE",
"FULL"),
744 $arAddParams[
"sPrefix"].
"LAST_MESSAGE_ID" => $arAddParams[
"sTablePrefix"].
"LAST_MESSAGE_ID",
745 ($arAddParams[
"sPrefix"] == $arAddParams[
"sTablePrefix"] ?
"" : $arAddParams[
"sPrefix"]).
746 "MID" => $arAddParams[
"sTablePrefix"].
"LAST_MESSAGE_ID ",
747 $arAddParams[
"sPrefix"].
"LAST_MESSAGE_ID" => $arAddParams[
"sTablePrefix"].
"LAST_MESSAGE_ID",
749 $arAddParams[
"sPrefix"].
"POSTS_UNAPPROVED" => $arAddParams[
"sTablePrefix"].
"POSTS_UNAPPROVED",
750 $arAddParams[
"sPrefix"].
"ABS_LAST_POSTER_ID" => $arAddParams[
"sTablePrefix"].
"ABS_LAST_POSTER_ID",
751 $arAddParams[
"sPrefix"].
"ABS_LAST_POSTER_NAME" => $arAddParams[
"sTablePrefix"].
"ABS_LAST_POSTER_NAME",
752 ($arAddParams[
"sPrefix"] == $arAddParams[
"sTablePrefix"] ?
"" : $arAddParams[
"sPrefix"]).
753 "ABS_LAST_POST_DATE" =>
$DB->DateToCharFunction($arAddParams[
"sTablePrefix"].
"ABS_LAST_POST_DATE",
"FULL"),
754 $arAddParams[
"sPrefix"].
"ABS_LAST_MESSAGE_ID" => $arAddParams[
"sTablePrefix"].
"ABS_LAST_MESSAGE_ID",
756 $arAddParams[
"sPrefix"].
"ORDER_BY" => $arAddParams[
"sTablePrefix"].
"ORDER_BY",
757 $arAddParams[
"sPrefix"].
"ORDER_DIRECTION" => $arAddParams[
"sTablePrefix"].
"ORDER_DIRECTION",
758 $arAddParams[
"sPrefix"].
"ALLOW_HTML" => $arAddParams[
"sTablePrefix"].
"ALLOW_HTML",
759 $arAddParams[
"sPrefix"].
"ALLOW_ANCHOR" => $arAddParams[
"sTablePrefix"].
"ALLOW_ANCHOR",
760 $arAddParams[
"sPrefix"].
"ALLOW_BIU" => $arAddParams[
"sTablePrefix"].
"ALLOW_BIU",
761 $arAddParams[
"sPrefix"].
"ALLOW_IMG" => $arAddParams[
"sTablePrefix"].
"ALLOW_IMG",
762 $arAddParams[
"sPrefix"].
"ALLOW_VIDEO" => $arAddParams[
"sTablePrefix"].
"ALLOW_VIDEO",
763 $arAddParams[
"sPrefix"].
"ALLOW_LIST" => $arAddParams[
"sTablePrefix"].
"ALLOW_LIST",
764 $arAddParams[
"sPrefix"].
"ALLOW_TABLE" => $arAddParams[
"sTablePrefix"].
"ALLOW_TABLE",
765 $arAddParams[
"sPrefix"].
"ALLOW_ALIGN" => $arAddParams[
"sTablePrefix"].
"ALLOW_ALIGN",
766 $arAddParams[
"sPrefix"].
"ALLOW_QUOTE" => $arAddParams[
"sTablePrefix"].
"ALLOW_QUOTE",
767 $arAddParams[
"sPrefix"].
"ALLOW_CODE" => $arAddParams[
"sTablePrefix"].
"ALLOW_CODE",
768 $arAddParams[
"sPrefix"].
"ALLOW_FONT" => $arAddParams[
"sTablePrefix"].
"ALLOW_FONT",
769 $arAddParams[
"sPrefix"].
"ALLOW_SMILES" => $arAddParams[
"sTablePrefix"].
"ALLOW_SMILES",
770 $arAddParams[
"sPrefix"].
"ALLOW_UPLOAD" => $arAddParams[
"sTablePrefix"].
"ALLOW_UPLOAD",
771 $arAddParams[
"sPrefix"].
"ALLOW_TOPIC_TITLED" => $arAddParams[
"sTablePrefix"].
"ALLOW_TOPIC_TITLED",
772 $arAddParams[
"sPrefix"].
"ALLOW_SIGNATURE" => $arAddParams[
"sTablePrefix"].
"ALLOW_SIGNATURE",
773 $arAddParams[
"sPrefix"].
"EVENT1" => $arAddParams[
"sTablePrefix"].
"EVENT1",
774 $arAddParams[
"sPrefix"].
"EVENT2" => $arAddParams[
"sTablePrefix"].
"EVENT2",
775 $arAddParams[
"sPrefix"].
"EVENT3" => $arAddParams[
"sTablePrefix"].
"EVENT3",
776 $arAddParams[
"sPrefix"].
"ALLOW_NL2BR" => $arAddParams[
"sTablePrefix"].
"ALLOW_NL2BR",
777 $arAddParams[
"sPrefix"].
"ALLOW_UPLOAD_EXT" => $arAddParams[
"sTablePrefix"].
"ALLOW_UPLOAD_EXT",
778 $arAddParams[
"sPrefix"].
"FORUM_GROUP_ID" => $arAddParams[
"sTablePrefix"].
"FORUM_GROUP_ID",
779 $arAddParams[
"sPrefix"].
"ASK_GUEST_EMAIL" => $arAddParams[
"sTablePrefix"].
"ASK_GUEST_EMAIL",
780 $arAddParams[
"sPrefix"].
"USE_CAPTCHA" => $arAddParams[
"sTablePrefix"].
"USE_CAPTCHA",
781 $arAddParams[
"sPrefix"].
"HTML" => $arAddParams[
"sTablePrefix"].
"HTML");
783 if ($arAddParams[
"sReturnResult"] ==
"string")
799 $arSqlSearch = Array();
800 $arSqlSearchFrom = Array();
802 $strSqlSearchFrom =
"";
804 $arSqlOrder = Array();
811 $key = mb_strtoupper($key_res[
"FIELD"]);
812 $strNegative = $key_res[
"NEGATIVE"];
813 $strOperation = $key_res[
"OPERATION"];
822 $arSqlSearch[] =
"F.ID = F2S.FORUM_ID AND ".($strNegative==
"Y"?
" NOT ":
"").
"(F2S.SITE_ID ".$strOperation.
" '".
$DB->ForSql(
$val).
"' )";
823 $arSqlSearchFrom[] =
"b_forum2site F2S";
827 case "DEDUPLICATION":
831 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(F.".
$key.
" IS NULL OR ".(
$DB->type ==
"MSSQL" ?
"LEN" :
"LENGTH").
"(F.".
$key.
")<=0)";
833 $arSqlSearch[] = ($strNegative==
"Y"?
" F.".$key.
" IS NULL OR NOT ":
"").
"(F.".
$key.
" ".$strOperation.
" '".
$DB->ForSql(
$val).
"' )";
836 case "FORUM_GROUP_ID":
839 case "POSTS_UNAPPROVED":
840 if ($strOperation ==
"IN")
846 $val_int[] = intval($v);
847 $val = implode(
", ", $val_int);
855 if (($strOperation ==
"IN" &&
$val ==
'') || intval(
$val) <= 0)
856 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(F.".
$key.
" IS NULL OR F.".
$key.
"<=0)";
857 elseif ($strOperation ==
"IN")
858 $arSqlSearch[] = ($strNegative==
"Y"?
" NOT ":
"").
"(F.".
$key.
" IN (".
$DB->ForSql(
$val).
"))";
860 $arSqlSearch[] = ($strNegative==
"Y"?
" F.".$key.
" IS NULL OR NOT ":
"").
"(F.".
$key.
" ".$strOperation.
" ".intval(
$val).
" )";
863 $arSqlSearch[] =
" (".GetFilterQuery(
"F.NAME,F.DESCRIPTION",
$DB->ForSql(
$val),
"Y").
") ";
868 $val[1] = mb_strtoupper(mb_substr(
$val[1], 0, 1));
869 if (mb_strpos(
"AEIMQUY",
$val[1]) !==
false)
871 $arSqlSearch[] =
"F.ID = FP.FORUM_ID AND FP.GROUP_ID IN (".intval(
$val[0]).
") AND FP.PERMISSION > '".
$DB->ForSql(
$val[1]).
"' ";
872 $arSqlSearchFrom[] =
"b_forum_perms FP";
879 if (
count($arSqlSearch) > 0)
880 $strSqlSearch =
" AND (".implode(
") AND (", $arSqlSearch).
") ";
881 if (
count($arSqlSearchFrom) > 0)
882 $strSqlSearchFrom =
", ".implode(
", ", $arSqlSearchFrom);
884 foreach ($arOrder as $by=>
$order)
886 $by = mb_strtoupper($by);
889 if ($by ==
"ID") $arSqlOrder[] =
" F.ID ".$order.
" ";
890 elseif ($by ==
"NAME") $arSqlOrder[] =
" F.NAME ".$order.
" ";
891 elseif ($by ==
"ACTIVE") $arSqlOrder[] =
" F.ACTIVE ".$order.
" ";
892 elseif ($by ==
"MODERATION") $arSqlOrder[] =
" F.MODERATION ".$order.
" ";
893 elseif ($by ==
"FORUM_GROUP_ID") $arSqlOrder[] =
" F.FORUM_GROUP_ID ".$order.
" ";
894 elseif ($by ==
"TOPICS") $arSqlOrder[] =
" F.TOPICS ".$order.
" ";
895 elseif ($by ==
"POSTS") $arSqlOrder[] =
" F.POSTS ".$order.
" ";
896 elseif ($by ==
"POSTS_UNAPPROVED") $arSqlOrder[] =
" F.POSTS_UNAPPROVED ".$order.
" ";
897 elseif ($by ==
"LAST_POST_DATE") $arSqlOrder[] =
" F.LAST_POST_DATE ".$order.
" ";
900 $arSqlOrder[] =
" F.SORT ".$order.
" ";
905 if (
count($arSqlOrder) > 0)
906 $strSqlOrder =
" ORDER BY ".implode(
", ", $arSqlOrder);
909 "SELECT F_FORUM.*, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION, F.DEDUPLICATION, F.ALLOW_MOVE_TOPIC, '' as LID,
910 F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
911 ".$DB->DateToCharFunction(
"F.LAST_POST_DATE",
"FULL").
" as LAST_POST_DATE,
912 F.LAST_MESSAGE_ID, F.LAST_MESSAGE_ID as MID,
913 F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
914 ".
$DB->DateToCharFunction(
"F.ABS_LAST_POST_DATE",
"FULL").
" as ABS_LAST_POST_DATE,
915 F.ABS_LAST_MESSAGE_ID, F.SORT, F.ORDER_BY,
916 F.ORDER_DIRECTION, F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU,
917 F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_TABLE, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE,
918 F.ALLOW_ALIGN, F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2,
919 F.EVENT3, F.ALLOW_NL2BR, '' as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT, F.ALLOW_TOPIC_TITLED,
921 F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.XML_ID
924 SELECT F.ID ".$strSqlSelect.
"
926 ".$strSqlSearchFrom.
"
927 WHERE (1=1 ".$strSqlSearch.
")
930 INNER JOIN b_forum F ON (F_FORUM.ID = F.ID)
936 public static function GetListEx($arOrder = Array(
"SORT"=>
"ASC"),
$arFilter = Array(), $bCount =
false, $iNum = 0, $arAddParams =
array())
939 $arSqlSearch =
array();
940 $orSqlSearch =
array();
941 $arSqlSelect =
array();
942 $arSqlFrom =
array();
943 $arSqlGroup =
array();
944 $arSqlOrder =
array();
947 $strSqlSearchOR =
"";
956 $key = mb_strtoupper($key_res[
"FIELD"]);
957 $strNegative = $key_res[
"NEGATIVE"];
958 $strOperation = $key_res[
"OPERATION"];
967 $arSqlSelect[
"PATH2FORUM_MESSAGE"] =
"F2S.PATH2FORUM_MESSAGE";
968 $arSqlGroup[
"PATH2FORUM_MESSAGE"] =
"F2S.PATH2FORUM_MESSAGE";
969 $arSqlFrom[
"F2S"] =
"
970 INNER JOIN b_forum2site F2S ON (F2S.FORUM_ID=F.ID)";
971 $arSqlSearch[] = ($strNegative==
"Y"?
" NOT ":
"").
"(F2S.SITE_ID ".$strOperation.
" '".
$DB->ForSql(
$val).
"')";
974 case "DEDUPLICATION":
977 case "ALLOW_MOVE_TOPIC":
978 case "ALLOW_SIGNATURE":
980 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(F.".
$key.
" IS NULL OR ".(
$DB->type ==
"MSSQL" ?
"LEN" :
"LENGTH").
"(F.".
$key.
") <= 0)";
982 $arSqlSearch[] = ($strNegative==
"Y"?
" F.".$key.
" IS NULL OR NOT ":
"").
"(F.".
$key.
" ".$strOperation.
" '".
$DB->ForSql(
$val).
"')";
985 case "FORUM_GROUP_ID":
989 if (array_sum(
$val) <= 0)
990 $arSqlSearch[] = ($strNegative ==
"Y" ?
"NOT" :
"") .
"(F.".
$key.
" IS NULL OR F.".
$key.
"<=0)";
992 $arSqlSearch[] = ($strNegative==
"Y"?
" NOT ":
"").
"(F.".
$key.
" IN (".
$DB->ForSql(implode(
",",
$val)).
"))";
994 $arSqlSearch[] = ($strNegative==
"Y"?
" F.".$key.
" IS NULL OR NOT ":
"").
"(F.".
$key.
" ".$strOperation.
" ".reset(
$val).
" )";
997 $arSqlSearch[] =
" (".GetFilterQuery(
"F.NAME,F.DESCRIPTION",
$DB->ForSql(
$val),
"Y").
") ";
1000 $v = (is_array(
$val) && isset(
$val[0]) && !empty(
$val[0]) ? array_map(
"intval", is_array(
$val[0]) ?
$val[0] : explode(
",",
$val[0])) :
array());
1003 $val[0] =
$DB->ForSql(implode(
", ", $v));
1004 $arSqlFrom[
"FP"] =
"
1005 INNER JOIN b_forum_perms FP ON (F.ID = FP.FORUM_ID)";
1006 if (mb_strtoupper(
$val[1]) ==
"ALLOW_MOVE_TOPIC")
1007 $arSqlSearch[] =
"FP.GROUP_ID IN (".$val[0].
") AND ((FP.PERMISSION > 'M') OR (F.ALLOW_MOVE_TOPIC = 'Y'))";
1009 $arSqlSearch[] =
"FP.GROUP_ID IN (".$val[0].
") AND FP.PERMISSION > '".
$DB->ForSql(
$val[1]).
"' ";
1015 $arSqlFrom[
"FMM"] =
"
1016 LEFT JOIN b_forum_message FMM ON (FMM.FORUM_ID=F.ID AND (FMM.APPROVED ".$strOperation.
" '".
$DB->ForSql(
$val).
"'))";
1017 $arSqlSelect[
"FMM"] =
"count(FMM.ID) MCNT";
1025 $perms =
"NOT_CHECK";
1026 $arUserGroups =
$GLOBALS[
"USER"]->GetGroups();
1031 $perms =
"ONLY_APPROVED";
1034 $arSqlSelect[
"TCRENEW"] =
"MAX(BFF.TCRENEW) AS TCRENEW";
1035 $arSqlFrom[
"RENEW"] =
"
1037 SELECT BF.ID AS RENEW_FORUM_ID, COUNT(FT_RENEW.ID) TCRENEW
1040 ($perms ==
"NORMAL" ?
"
1043 SELECT FPP.FORUM_ID, MAX(FPP.PERMISSION) AS PERMISSION
1044 FROM b_forum_perms FPP
1045 WHERE FPP.GROUP_ID IN (".$arUserGroups.
")
1046 GROUP BY FPP.FORUM_ID
1047 ) FP ON (FP.FORUM_ID = BF.ID)" :
1051 LEFT JOIN b_forum_user_forum FUF ON (FUF.USER_ID=".
$val.
" AND FUF.FORUM_ID = BF.ID)
1052 LEFT JOIN b_forum_user_forum FUF_ALL ON (FUF_ALL.USER_ID=".
$val.
" AND FUF_ALL.FORUM_ID = 0)
1053 LEFT JOIN b_forum_topic FT_RENEW ON (BF.ID = FT_RENEW.FORUM_ID AND FT_RENEW.STATE != 'L' AND (FUF_ALL.LAST_VISIT IS NULL OR FT_RENEW.ABS_LAST_POST_DATE > FUF_ALL.LAST_VISIT))
1054 LEFT JOIN b_forum_user_topic FUT_RENEW ON (FUT_RENEW.FORUM_ID = BF.ID AND FUT_RENEW.TOPIC_ID = FT_RENEW.ID AND FUT_RENEW.USER_ID=".
$val.
")
1057 FUT_RENEW.LAST_VISIT IS NULL
1060 (FUF_ALL.LAST_VISIT IS NULL AND FUF.LAST_VISIT IS NULL)
1063 FUF.LAST_VISIT IS NOT NULL
1066 ( $perms ==
"NORMAL" ?
"
1067 (FP.PERMISSION >= 'Q' AND FUF.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE)
1069 (FT_RENEW.APPROVED = 'Y' AND FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1071 ( $perms ==
"NOT_CHECK" ?
"
1072 (FUF.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1075 (FT_RENEW.APPROVED = 'Y' AND FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1083 FUF.LAST_VISIT IS NULL AND FUF_ALL.LAST_VISIT IS NOT NULL
1087 ( $perms ==
"NORMAL" ?
"
1088 (FP.PERMISSION >= 'Q' AND FUF_ALL.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE)
1090 (FT_RENEW.APPROVED = 'Y' AND FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1092 ( $perms ==
"NOT_CHECK" ?
"
1093 (FUF_ALL.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1096 (FT_RENEW.APPROVED = 'Y' AND FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1107 FUT_RENEW.LAST_VISIT IS NOT NULL
1110 ( $perms ==
"NORMAL" ?
"
1111 (FP.PERMISSION >= 'Q' AND FUT_RENEW.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE)
1113 (FT_RENEW.APPROVED = 'Y' AND FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1115 ( $perms ==
"NOT_CHECK" ?
"
1116 (FUT_RENEW.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1119 (FT_RENEW.APPROVED = 'Y' AND FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1126 ( $perms ==
"NORMAL" ?
", FP.PERMISSION" :
"").
"
1127 ) BFF ON (BFF.RENEW_FORUM_ID = F.ID)
1133 if (
count($arSqlSearch) > 0)
1134 $strSqlSearch =
" AND (".implode(
") AND (", $arSqlSearch).
") ";
1135 if (
count($orSqlSearch) > 0)
1136 $strSqlSearchOR =
" OR (".implode(
") AND (", $orSqlSearch).
") ";
1137 if (
count($arSqlSelect) > 0)
1138 $strSqlSelect =
", ".implode(
", ", $arSqlSelect);
1139 if (
count($arSqlFrom) > 0)
1140 $strSqlFrom =
" ".implode(
" ", $arSqlFrom);
1141 if (
count($arSqlGroup) > 0)
1142 $strSqlGroup =
",".implode(
",", $arSqlGroup);
1143 foreach ($arOrder as $by=>
$order)
1145 $by = mb_strtoupper($by);
1147 if (
$order!=
"ASC")
$order =
"DESC".($DB->type==
"ORACLE"?
" NULLS LAST":
"");
1148 else $order =
"ASC".($DB->type==
"ORACLE"?
" NULLS FIRST":
"");
1150 if ($by ==
"ID") $arSqlOrder[
"F_FORUM.ID"] =
" F_FORUM.ID ".$order.
" ";
1151 elseif ($by ==
"NAME") $arSqlOrder[
"F.NAME"] =
" F.NAME ".$order.
" ";
1152 elseif ($by ==
"ACTIVE") $arSqlOrder[
"F.ACTIVE"] =
" F.ACTIVE ".$order.
" ";
1153 elseif ($by ==
"MODERATION") $arSqlOrder[
"F.MODERATION"] =
" F.MODERATION ".$order.
" ";
1154 elseif ($by ==
"FORUM_GROUP_ID") $arSqlOrder[
"F.FORUM_GROUP_ID"] =
" F.FORUM_GROUP_ID ".$order.
" ";
1155 elseif ($by ==
"FORUM_GROUP_SORT") $arSqlOrder[
"FG.SORT"] =
" FG.SORT ".$order.
" ";
1156 elseif ($by ==
"FORUM_GROUP_LEFT_MARGIN") $arSqlOrder[
"FG.LEFT_MARGIN"] =
" FG.LEFT_MARGIN ".$order.
" ";
1157 elseif ($by ==
"TOPICS") $arSqlOrder[
"F.TOPICS"] =
" F.TOPICS ".$order.
" ";
1158 elseif ($by ==
"POSTS") $arSqlOrder[
"F.POSTS"] =
" F.POSTS ".$order.
" ";
1159 elseif ($by ==
"POSTS_UNAPPROVED") $arSqlOrder[
"F.POSTS_UNAPPROVED"] =
" F.POSTS_UNAPPROVED ".$order.
" ";
1160 elseif ($by ==
"LAST_POST_DATE") $arSqlOrder[
"F.LAST_POST_DATE"] =
" F.LAST_POST_DATE ".$order.
" ";
1161 elseif ($by ==
"ABS_LAST_POST_DATE") $arSqlOrder[
"F.ABS_LAST_POST_DATE"] =
" F.ABS_LAST_POST_DATE ".$order.
" ";
1164 $arSqlOrder[
"F.SORT"] =
" F.SORT ".$order.
" ";
1168 if (
count($arSqlOrder) > 0)
1169 $strSqlOrder =
" ORDER BY ".implode(
", ", $arSqlOrder);
1171 if ($bCount || (isset($arAddParams[
'bDescPageNumbering']) && empty($arAddParams[
'nTopCount'])))
1173 $arCountSqlFrom = $arSqlFrom;
1174 if (isset($arSqlFrom[
'RENEW']) && (mb_strpos($strSqlSearch,
"RENEW.") ===
false))
1175 unset($arCountSqlFrom[
'RENEW']);
1176 $strSqlCountFrom = implode(
" ", $arCountSqlFrom);
1179 "SELECT COUNT(FORUMCOUNT.ID) as CNT FROM (".
1182 $strSqlCountFrom .
" ".
1183 " WHERE (1=1 ".$strSqlSearch.
") ".
1192 $iCnt = intval(
$ar_res[
"CNT"]);
1198 if (!$iNum && isset($arAddParams[
'bDescPageNumbering']) && empty($arAddParams[
"nTopCount"]) && isset($arAddParams[
'nav_result']))
1200 if (!$arAddParams[
'nav_result'])
1203 "SELECT F_FORUM.* ".
1205 "(SELECT F.ID, FG.SORT ".$strSqlSelect.
" ".
1208 "LEFT JOIN b_forum_group FG ON F.FORUM_GROUP_ID = FG.ID ".
1209 "WHERE (1=1 ".$strSqlSearch.
") ".
1210 $strSqlSearchOR.
" ".
1211 "GROUP BY F.ID, FG.SORT".$strSqlGroup.
") F_FORUM ".
1212 "INNER JOIN b_forum F ON (F_FORUM.ID = F.ID) ".
1213 str_replace(
"FG.SORT",
"F_FORUM.SORT", $strSqlOrder);
1215 $db_res->NavQuery($strSubSql, $iCnt, $arAddParams);
1220 $db_res = $arAddParams[
'nav_result'];
1223 $arForumID =
array();
1228 $sForumID = implode(
', ', $arForumID);
1229 $strSqlSearch =
"(".($sForumID !=
"" ?
"F.ID IN (".$sForumID.
") " :
"1=1 ").$strSqlSearch.
")";
1233 $strSqlSearch =
"(1=1 ".$strSqlSearch.
")";
1236 $arSQL =
array(
"select" =>
"",
"join" =>
"");
1237 if (!empty($arAddParams[
"sNameTemplate"]))
1239 $arSQL = array_merge_recursive(
1241 $arAddParams,
array(
1242 "sUserTablePrefix" =>
"U_LAST.",
1243 "sForumUserTablePrefix" =>
"FU_LAST.",
1244 "sFieldName" =>
"LAST_POSTER_NAME_FRMT",
1245 "sUserIDFieldName" =>
"F.LAST_POSTER_ID"))),
1247 $arAddParams,
array(
1248 "sUserTablePrefix" =>
"U_ABS_LAST.",
1249 "sForumUserTablePrefix" =>
"FU_ABS_LAST.",
1250 "sFieldName" =>
"ABS_LAST_POSTER_NAME_FRMT",
1251 "sUserIDFieldName" =>
"F.ABS_LAST_POSTER_ID"))));
1252 $arSQL[
"select"] =
",\n\t".implode(
",\n\t", $arSQL[
"select"]);
1253 $arSQL[
"join"] =
"\n".implode(
"\n", $arSQL[
"join"]);
1257 "SELECT F_FORUM.*, F.FORUM_GROUP_ID, F.NAME, F.DESCRIPTION, F.SORT, F.ACTIVE,
1258 F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, F.ALLOW_IMG, F.ALLOW_VIDEO,
1259 F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, F.ALLOW_FONT, F.ALLOW_SMILES,
1260 F.ALLOW_ALIGN, F.ALLOW_UPLOAD, F.ALLOW_UPLOAD_EXT, F.ALLOW_MOVE_TOPIC,
1261 F.ALLOW_NL2BR, F.ALLOW_TABLE, F.ALLOW_TOPIC_TITLED, F.ALLOW_SIGNATURE,
1262 ".(mb_strpos($strSqlSelect,
"PATH2FORUM_MESSAGE") ===
false ?
"'' as PATH2FORUM_MESSAGE," :
"").
"
1263 F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.MODERATION, F.INDEXATION, F.DEDUPLICATION,
1264 F.ORDER_BY, F.ORDER_DIRECTION,
1265 '' as LID, '' as DIR,
1267 F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
1268 ".
$DB->DateToCharFunction(
"F.LAST_POST_DATE",
"FULL").
" as LAST_POST_DATE,
1269 F.LAST_MESSAGE_ID, FM.TOPIC_ID as TID, F.LAST_MESSAGE_ID as MID,
1270 F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
1271 ".
$DB->DateToCharFunction(
"F.ABS_LAST_POST_DATE",
"FULL").
" as ABS_LAST_POST_DATE,
1272 F.ABS_LAST_MESSAGE_ID, FM_ABS.TOPIC_ID as ABS_TID,
1273 F.EVENT1, F.EVENT2, F.EVENT3,
1274 FT.TITLE, FT.SOCNET_GROUP_ID, FT.OWNER_ID,
1276 FT.HTML AS TOPIC_HTML, FM.PARAM1, FM.PARAM2,
1277 FT_ABS.TITLE as ABS_TITLE, FT_ABS.SOCNET_GROUP_ID as ABS_SOCNET_GROUP_ID, FT_ABS.OWNER_ID as ABS_OWNER_ID,
1279 FT_ABS.HTML AS ABS_TOPIC_HTML, FM_ABS.PARAM1 as ABS_PARAM1, FM_ABS.PARAM2 as ABS_PARAM2,
1280 F.HTML".$arSQL[
"select"].
"
1283 SELECT F.ID ".$strSqlSelect.
"
1286 WHERE ".$strSqlSearch.
"
1288 GROUP BY F.ID".$strSqlGroup.
"
1290 INNER JOIN b_forum F ON (F_FORUM.ID = F.ID)".
1292 LEFT JOIN b_forum_group FG ON F.FORUM_GROUP_ID = FG.ID
1293 LEFT JOIN b_forum_message FM ON F.LAST_MESSAGE_ID = FM.ID
1294 LEFT JOIN b_forum_topic FT ON FM.TOPIC_ID = FT.ID
1295 LEFT JOIN b_forum_message FM_ABS ON F.ABS_LAST_MESSAGE_ID = FM_ABS.ID
1296 LEFT JOIN b_forum_topic FT_ABS ON FM_ABS.TOPIC_ID = FT_ABS.ID
1299 $iNum = intval($iNum ?: ($arAddParams[
"nTopCount"] ?? 0));
1302 $strSql .=
" LIMIT 0,".$iNum;
1307 if (
is_set($arAddParams,
'NoFilter') && $arAddParams[
'NoFilter'] ==
true)
1317 if (array_key_exists(
"USER_ID",
$data) &&
$data[
"USER_ID"] > 0)
1321 else if (
$USER->IsAuthorized())
1326 $forums = array_key_exists(
"FORUM_ID",
$data) ?
$data[
"FORUM_ID"] : [];
1327 $forums = is_array($forums) ? $forums : [$forums];
1328 array_map(
"intval", $forums);
1330 if (
$userId ===
false ||
sizeof($forums) <= 0)
1336 if (
sizeof($forums) > 0)
1338 $sWhere =
'(BF.ID IN ('.implode(
", ", $forums).
'))';
1342 SELECT BF.ID AS FORUM_ID, COUNT(FT_RENEW.ID) AS TCRENEW
1344 LEFT JOIN b_forum_user_forum FUF ON (FUF.USER_ID = {$userId} AND FUF.FORUM_ID = BF.ID)
1345 LEFT JOIN b_forum_user_forum FUF_ALL ON (FUF_ALL.USER_ID = {$userId} AND FUF_ALL.FORUM_ID = 0)
1346 LEFT JOIN b_forum_topic FT_RENEW ON
1348 BF.ID = FT_RENEW.FORUM_ID AND FT_RENEW.STATE !=
'L' AND
1349 (FUF_ALL.LAST_VISIT IS NULL OR FT_RENEW.ABS_LAST_POST_DATE > FUF_ALL.LAST_VISIT)
1351 LEFT JOIN b_forum_user_topic FUT_RENEW ON (
1352 FUT_RENEW.FORUM_ID = BF.ID AND FUT_RENEW.TOPIC_ID = FT_RENEW.ID AND FUT_RENEW.USER_ID = {$userId})
1357 FUT_RENEW.LAST_VISIT IS NULL
1360 (FUF_ALL.LAST_VISIT IS NULL AND FUF.LAST_VISIT IS NULL)
1363 FUF.LAST_VISIT IS NOT NULL
1365 (FUF.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
1369 FUF.LAST_VISIT IS NULL
1371 FUF_ALL.LAST_VISIT IS NOT NULL
1375 FUF_ALL.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE
1377 FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE
1384 FUT_RENEW.LAST_VISIT IS NOT NULL
1387 FUT_RENEW.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE
1389 FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE
1403 $cache_id =
"b_forum_".$ID;
1410 if (!array_key_exists(
"MAIN",
$GLOBALS[
"FORUM_CACHE"][
"FORUM"][
$ID]))
1412 if (CACHED_b_forum !==
false &&
$CACHE_MANAGER->Read(CACHED_b_forum, $cache_id,
"b_forum"))
1418 $strSql =
"SELECT F.ID, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION,
1419 F.ALLOW_MOVE_TOPIC, F.DEDUPLICATION,
1420 '' as LID, F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
1421 ".$DB->DateToCharFunction(
"F.LAST_POST_DATE",
"FULL").
" as LAST_POST_DATE,
1422 F.LAST_MESSAGE_ID, F.LAST_MESSAGE_ID as MID,
1423 F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
1424 ".
$DB->DateToCharFunction(
"F.ABS_LAST_POST_DATE",
"FULL").
" as ABS_LAST_POST_DATE,
1425 F.ABS_LAST_MESSAGE_ID, F.SORT, F.ORDER_BY,
1426 F.ORDER_DIRECTION, F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, F.ALLOW_TOPIC_TITLED,
1427 F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, F.ALLOW_TABLE,
1428 F.ALLOW_ALIGN, F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2,
1429 F.EVENT3, F.ALLOW_NL2BR, '' as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT, F.ALLOW_SIGNATURE,
1430 F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.XML_ID
1436 if (CACHED_b_forum !==
false)
1440 return $GLOBALS[
"FORUM_CACHE"][
"FORUM"][
$ID][
"MAIN"];
1455 if (!isset(
$GLOBALS[
"FORUM_CACHE"][
"FORUM"][
$ID]))
1462 $cache_id =
"b_forum_".$ID.mb_strtolower(
$key);
1463 if (CACHED_b_forum !==
false &&
$CACHE_MANAGER->Read(CACHED_b_forum, $cache_id,
"b_forum"))
1469 $arSQL =
array(
"select" =>
"",
"join" =>
"");
1470 if (!empty($arAddParams[
"sNameTemplate"]))
1472 $arSQL = array_merge_recursive(
1474 $arAddParams,
array(
1475 "sUserTablePrefix" =>
"U_LAST.",
1476 "sForumUserTablePrefix" =>
"FU_LAST.",
1477 "sFieldName" =>
"LAST_POSTER_NAME_FRMT",
1478 "sUserIDFieldName" =>
"F.LAST_POSTER_ID"))),
1480 $arAddParams,
array(
1481 "sUserTablePrefix" =>
"U_ABS_LAST.",
1482 "sForumUserTablePrefix" =>
"FU_ABS_LAST.",
1483 "sFieldName" =>
"ABS_LAST_POSTER_NAME_FRMT",
1484 "sUserIDFieldName" =>
"F.ABS_LAST_POSTER_ID"))));
1485 $arSQL[
"select"] =
",\n\t".implode(
",\n\t", $arSQL[
"select"]);
1486 $arSQL[
"join"] =
"\n".implode(
"\n", $arSQL[
"join"]);
1488 $strSql =
"SELECT F.ID, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION, F.DEDUPLICATION,
1489 F.ALLOW_MOVE_TOPIC, '' as LID, F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
1490 ".$DB->DateToCharFunction(
"F.LAST_POST_DATE",
"FULL").
" as LAST_POST_DATE,
1491 F.LAST_MESSAGE_ID, FM.TOPIC_ID as TID, F.LAST_MESSAGE_ID as MID,
1492 F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
1493 ".
$DB->DateToCharFunction(
"F.ABS_LAST_POST_DATE",
"FULL").
" as ABS_LAST_POST_DATE,
1494 F.ABS_LAST_MESSAGE_ID, FT.TITLE, F.SORT, '' as DIR, F.ORDER_BY, F.ORDER_DIRECTION,
1495 F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, F.ALLOW_TABLE, F.ALLOW_ALIGN, F.ALLOW_SIGNATURE,
1496 F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, F.ALLOW_TOPIC_TITLED,
1497 F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2,
1498 F.EVENT3, F.ALLOW_NL2BR, ".(!
$SITE_ID ?
"''" :
"FS.PATH2FORUM_MESSAGE").
" as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT,
1499 F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.HTML, FT.HTML AS TOPIC_HTML, F.XML_ID".$arSQL[
"select"].
"
1501 LEFT JOIN b_forum_group FG ON (F.FORUM_GROUP_ID = FG.ID) ".
1503 LEFT JOIN b_forum2site FS ON (F.ID = FS.FORUM_ID AND FS.SITE_ID = '".
$DB->ForSql(
$SITE_ID).
"') ").
1505 LEFT JOIN b_forum_message FM ON (F.LAST_MESSAGE_ID = FM.ID)
1506 LEFT JOIN b_forum_topic FT ON (FM.TOPIC_ID = FT.ID)
1507 WHERE (F.ID=".
$ID.
")";
1511 if (CACHED_b_forum !==
false)
1525 $arForumCookie =
array();
1526 $iCurFirstReadForum = 0;
1528 $read_forum_cookie = COption::GetOptionString(
"main",
"cookie_name",
"BITRIX_SM").
"_FORUM_0";
1529 if (isset($_COOKIE[$read_forum_cookie]) && $_COOKIE[$read_forum_cookie] <>
'')
1531 $arForumCookie = explode(
"/", $_COOKIE[$read_forum_cookie]);
1533 while (
$i <
count($arForumCookie))
1535 if (intval($arForumCookie[
$i]) ==
$ID)
1537 $iCurFirstReadForum = intval($arForumCookie[
$i+1]);
1544 $read_forum_cookie1 = COption::GetOptionString(
"main",
"cookie_name",
"BITRIX_SM").
"_FORUM_".
$ID;
1545 if (isset($_COOKIE[$read_forum_cookie1]) && intval($_COOKIE[$read_forum_cookie1]) > 0)
1547 if ($iCurFirstReadForum < intval($_COOKIE[$read_forum_cookie1]))
1549 $iCurFirstReadForum = intval($_COOKIE[$read_forum_cookie1]);
1553 if ($_SESSION[
"first_read_forum_".
$ID] ==
'' || intval($_SESSION[
"first_read_forum_".
$ID])<0)
1555 $_SESSION[
"first_read_forum_".$ID] = $iCurFirstReadForum;
1558 if (is_null($_SESSION[
"read_forum_".
$ID]) || $_SESSION[
"read_forum_".
$ID] ==
'')
1560 $_SESSION[
"read_forum_".$ID] =
"0";
1565 if ($strPerms >
"Q"):
1568 $iLastPostID = intval(
$res[
"ID"]);
1571 if ($iLastPostID <= 0):
1573 $iLastPostID = intval(
$res[
"LAST_MESSAGE_ID"]);
1576 if ($iLastPostID > 0)
1579 $arCookieVal =
array();
1580 while (
$i <
count($arForumCookie))
1582 if (intval($arForumCookie[
$i]) !=
$ID)
1584 $arCookieVal[] = intval($arForumCookie[
$i]).
"/".intval($arForumCookie[
$i + 1]);
1588 $arCookieVal[] =
$ID.
"/".$iLastPostID;
1591 $GLOBALS[
"APPLICATION"]->set_cookie(
"FORUM_0", implode(
"/", $arCookieVal),
false,
"/",
false,
false,
"Y",
false);
1599 $_SESSION[
"read_forum_".$ID] =
"0";
1601 $iCurFirstReadForum = 0;
1602 if ($strPerms >
"Q"):
1605 $iCurFirstReadForum = intval(
$res[
"ID"]);
1609 $iCurFirstReadForum = intval(
$res[
"LAST_MESSAGE_ID"]);
1610 $_SESSION[
"first_read_forum_".$ID] = $iCurFirstReadForum;
1612 $arForumCookie =
array();
1613 $read_forum_cookie = COption::GetOptionString(
"main",
"cookie_name",
"BITRIX_SM").
"_FORUM_0";
1614 if (isset($_COOKIE[$read_forum_cookie]) && $_COOKIE[$read_forum_cookie] <>
'')
1616 $arForumCookie = explode(
"/", $_COOKIE[$read_forum_cookie]);
1620 $arCookieVal =
array();
1621 while (
$i <
count($arForumCookie))
1623 if (intval($arForumCookie[
$i])!=
$ID)
1625 $arCookieVal[] = intval($arForumCookie[
$i]).
"/".intval($arForumCookie[
$i+1]);
1629 $arCookieVal[] =
$ID.
"/".$iCurFirstReadForum;
1631 $_COOKIE[$read_forum_cookie] = implode(
"/", $arCookieVal);
1633 $GLOBALS[
"APPLICATION"]->set_cookie(
"FORUM_0", implode(
"/", $arCookieVal),
false,
"/",
false,
false,
"Y",
false);
1640 $enableCalculateStatistics = COption::GetOptionString(
'forum',
'enable_calculate_statistics',
'Y');
1641 if ($enableCalculateStatistics ===
'N')
1662 if (empty($arMessage))
1668 if ($arMessage[
"ID"] > $arForum[
"ABS_LAST_MESSAGE_ID"]):
1669 $arFields[
"ABS_LAST_POSTER_ID"] = ((intval($arMessage[
"AUTHOR_ID"])>0) ? $arMessage[
"AUTHOR_ID"] :
false);
1670 $arFields[
"ABS_LAST_POSTER_NAME"] = $arMessage[
"AUTHOR_NAME"];
1671 $arFields[
"ABS_LAST_POST_DATE"] = $arMessage[
"POST_DATE"];
1672 $arFields[
"ABS_LAST_MESSAGE_ID"] = $arMessage[
"ID"];
1673 if ($arMessage[
"APPROVED"] ==
"Y"):
1681 if ($arMessage[
"APPROVED"] ==
"Y"):
1683 if ($arMessage[
"NEW_TOPIC"] ==
"Y"):
1687 $arFields[
"=POSTS_UNAPPROVED"] =
"POSTS_UNAPPROVED+1";
1690 elseif ($arMessage[
"ID"] > $arForum[
"ABS_LAST_MESSAGE_ID"])
1695 ($arMessage[
"ID"] == $arForum[
"ABS_LAST_MESSAGE_ID"] || $arMessage[
"ID"] == $arForum[
"LAST_MESSAGE_ID"]) &&
1702 if ($arMessage[
"APPROVED"] ==
"Y"):
1704 if ($arMessage[
"NEW_TOPIC"] ==
"Y"):
1708 $arFields[
"=POSTS_UNAPPROVED"] =
"POSTS_UNAPPROVED-1";
1713 if ($arMessage[
"APPROVED"] ==
"Y"):
1714 if ($arMessage[
"ID"] > $arForum[
"LAST_MESSAGE_ID"]):
1715 $arFields[
"LAST_POSTER_ID"] = ((intval($arMessage[
"AUTHOR_ID"])>0) ? $arMessage[
"AUTHOR_ID"] :
false);
1716 $arFields[
"LAST_POSTER_NAME"] = $arMessage[
"AUTHOR_NAME"];
1717 $arFields[
"LAST_POST_DATE"] = $arMessage[
"POST_DATE"];
1718 $arFields[
"LAST_MESSAGE_ID"] = $arMessage[
"ID"];
1721 $arFields[
"=POSTS_UNAPPROVED"] =
"POSTS_UNAPPROVED-1";
1722 if ($arMessage[
"NEW_TOPIC"] ==
"Y"):
1725 elseif ($arMessage[
"ID"] != $arForum[
"LAST_MESSAGE_ID"]):
1727 $arFields[
"=POSTS_UNAPPROVED"] =
"POSTS_UNAPPROVED+1";
1728 if ($arMessage[
"NEW_TOPIC"] ==
"Y"):
1738 $res[
"CNT"] = intval(
$res[
"CNT"]) - intval(
$res[
"CNT_NOT_APPROVED"]);
1743 "POSTS" =>
$res[
"CNT"],
1744 "LAST_POSTER_ID" =>
false,
1745 "LAST_POSTER_NAME" =>
false,
1746 "LAST_POST_DATE" =>
false,
1747 "LAST_MESSAGE_ID" => intval(
$res[
"LAST_MESSAGE_ID"]),
1748 "POSTS_UNAPPROVED" => intval(
$res[
"CNT_NOT_APPROVED"]),
1749 "ABS_LAST_POSTER_ID" =>
false,
1750 "ABS_LAST_POSTER_NAME" =>
false,
1751 "ABS_LAST_POST_DATE" =>
false,
1752 "ABS_LAST_MESSAGE_ID" => intval(
$res[
"ABS_LAST_MESSAGE_ID"]));
1753 if (
$arFields[
"ABS_LAST_MESSAGE_ID"] > 0):
1755 $arFields[
"ABS_LAST_POSTER_ID"] = (intval(
$res[
"AUTHOR_ID"]) > 0 ?
$res[
"AUTHOR_ID"] :
false);
1758 if (intval(
$arFields[
"LAST_MESSAGE_ID"]) > 0):
1762 $arFields[
"LAST_POSTER_ID"] = (intval(
$res[
"AUTHOR_ID"]) > 0 ?
$res[
"AUTHOR_ID"] :
false);
1776 if (mb_substr(
$key, 0, 1) ==
"="):
1784 $strUpdate = (empty($strUpdate) ?
"" : $strUpdate.
",");
1785 $strUpdate .= implode(
", ",
$res);
1789 if (empty($strUpdate))
1791 $strSql =
"UPDATE b_forum SET ".$strUpdate.
" WHERE ID=".
$ID;
1792 return $DB->Query($strSql);
1803 if (!is_array($arVals))
1809 '#MESSAGE_ID#' => $arVals[
'MESSAGE_ID'] ??
null,
1810 '#MID#' => $arVals[
'MESSAGE_ID'] ??
null,
1811 '#TOPIC_ID#' => $arVals[
'TOPIC_ID'] ??
null,
1812 '#TID#' => $arVals[
'TOPIC_ID'] ??
null,
1813 '#TITLE_SEO#' => $arVals[
'TITLE_SEO'] ??
null,
1814 '#FORUM_ID#' => $arVals[
'FORUM_ID'] ??
null,
1815 '#FID#' => $arVals[
'FORUM_ID'] ??
null,
1816 '#PARAM1#' => $arVals[
'PARAM1'] ??
null,
1817 '#PARAM2#' => $arVals[
'PARAM2'] ??
null,
1818 '#SOCNET_GROUP_ID#' => $arVals[
'SOCNET_GROUP_ID'] ??
null,
1819 '#OWNER_ID#' => $arVals[
'OWNER_ID'] ??
null
1821 if ($strPath === NULL)
1825 $strPath = trim($strPath);
1830 $strPath = preg_replace(
'/([^:])(\/{2,})/',
'$1/', $strPath);
1831 $strPath = str_replace(
1843 return $DB->Query(
"DELETE FROM b_forum_perms WHERE GROUP_ID=".intval($GROUP_ID),
true);
1850 return ($r->Fetch()?
false:
true);
1863 public static function ShowPanel($FID, $TID=0, $bGetIcons=
false)
1869 if (!CModule::IncludeModule(
"forum"))
1871 $arButtons =
array();
1873 $module_permission =
$APPLICATION->GetGroupRight(
"forum");
1874 if ($module_permission >
"D")
1876 $arButtons[] =
array(
1878 "IMAGE" =>
"/bitrix/images/forum/toolbar_button1.gif",
1879 "ACTION" =>
"jsUtils.Redirect(arguments, '/bitrix/admin/forum_admin.php')");
1881 if ($module_permission >=
"W" && intval($FID) > 0 &&
1884 $arButtons[] =
array(
1886 "IMAGE" =>
"/bitrix/images/forum/toolbar_button2.gif",
1887 "ACTION" =>
"jsUtils.Redirect(arguments, '/bitrix/admin/forum_edit.php?ID=".intval($FID).
"')");
1890 if (!empty($arButtons))
1893 "SRC" =>
"/bitrix/images/forum/toolbar_button1.gif",
1897 "MENU" => $arButtons,
1898 "MODE" =>
'configure');
1907 $strSql =
"UPDATE b_forum_message SET POST_MESSAGE_HTML='', POST_MESSAGE_FILTER='', HTML = '' WHERE FORUM_ID=".$ID;
1908 $DB->Query($strSql);
1950 while ($arLang = $db_lang->Fetch())
1955 if ((
$res[
$i][
"LID"]==$arLang[
"LID"]) && (trim(
$res[
$i][
"NAME"]) !==
""))
1961 "id"=>
'FORUM_GROUP[LANG]['.$arLang[
"LID"].
'][NAME]',
1963 array(
"#LID#" => $arLang[
"LID"],
"#LID_NAME#" => $arLang[
"NAME"])));
1975 "id" =>
'FORUM_GROUP[PARENT_ID]',
1976 "text" =>
GetMessage(
"FG_ERROR_SELF_PARENT_ID"));
1984 "id" =>
'FORUM_GROUP[PARENT_ID]',
1985 "text" =>
GetMessage(
"FG_ERROR_EMPTY_PARENT_ID"));
1990 if ($res1[
"LEFT_MARGIN"] <
$res[
"LEFT_MARGIN"] &&
$res[
"RIGHT_MARGIN"] < $res1[
"RIGHT_MARGIN"])
1992 "id" =>
'FORUM_GROUP[PARENT_ID]',
1993 "text" =>
GetMessage(
"FG_ERROR_PARENT_ID_IS_CHILD"));
2000 $GLOBALS[
"APPLICATION"]->ThrowException($e);
2018 "id" =>
'FORUM_GROUP_GROUPS',
2023 "id" =>
'FORUM_GROUP_FORUMS',
2028 $GLOBALS[
"APPLICATION"]->ThrowException($e);
2031 if(CACHED_b_forum_group !==
false)
2032 $GLOBALS[
"CACHE_MANAGER"]->CleanDir(
"b_forum_group");
2033 $DB->Query(
"DELETE FROM b_forum_group_lang WHERE FORUM_GROUP_ID = ".
$ID,
true);
2034 $DB->Query(
"DELETE FROM b_forum_group WHERE ID = ".
$ID,
true);
2043 $arSqlSearch = Array();
2045 $arSqlOrder = Array();
2052 $key = mb_strtoupper($key_res[
"FIELD"]);
2053 $strNegative = $key_res[
"NEGATIVE"];
2054 $strOperation = $key_res[
"OPERATION"];
2062 case "RIGHT_MARGIN":
2064 if (intval(
$val)<=0)
2065 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(FR.".
$key.
" IS NULL OR FR.".
$key.
"<=0)";
2067 $arSqlSearch[] = ($strNegative==
"Y"?
" FR.".$key.
" IS NULL OR NOT ":
"").
"(FR.".
$key.
" ".$strOperation.
" ".intval(
$val).
" )";
2071 if (!empty($arSqlSearch))
2072 $strSqlSearch =
"WHERE (".implode(
") AND (", $arSqlSearch).
") ";
2074 foreach ($arOrder as $by=>
$order)
2076 $by = mb_strtoupper($by);
2080 if ($by ==
"ID") $arSqlOrder[] =
" FR.ID ".$order.
" ";
2081 elseif ($by ==
"LEFT_MARGIN") $arSqlOrder[] =
" FR.LEFT_MARGIN ".$order.
" ";
2084 $arSqlOrder[] =
" FR.SORT ".$order.
" ";
2089 if (!empty($arSqlOrder))
2090 $strSqlOrder =
" ORDER BY ".implode(
", ", $arSqlOrder);
2093 "SELECT FR.ID, FR.SORT, FR.PARENT_ID, FR.LEFT_MARGIN, FR.RIGHT_MARGIN, FR.DEPTH_LEVEL ".
2094 "FROM b_forum_group FR ".
2105 $arSqlSearch = Array();
2107 $arSqlOrder = Array();
2114 $key = mb_strtoupper($key_res[
"FIELD"]);
2115 $strNegative = $key_res[
"NEGATIVE"];
2116 $strOperation = $key_res[
"OPERATION"];
2124 case "RIGHT_MARGIN":
2126 if (intval(
$val)<=0)
2127 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(FR.".
$key.
" IS NULL OR FR.".
$key.
"<=0)";
2129 $arSqlSearch[] = ($strNegative==
"Y"?
" FR.".$key.
" IS NULL OR NOT ":
"").
"(FR.".
$key.
" ".$strOperation.
" ".intval(
$val).
" )";
2133 $arSqlSearch[] = ($strNegative==
"Y"?
"NOT":
"").
"(FRL.LID IS NULL OR ".(
$DB->type ==
"MSSQL" ?
"LEN" :
"LENGTH").
"(FRL.LID)<=0)";
2135 $arSqlSearch[] = ($strNegative==
"Y"?
" FRL.LID IS NULL OR NOT ":
"").
"(FRL.LID ".$strOperation.
" '".
$DB->ForSql(
$val).
"' )";
2139 if (!empty($arSqlSearch))
2140 $strSqlSearch =
" WHERE (".implode(
") AND (", $arSqlSearch).
") ";
2142 foreach ($arOrder as $by=>
$order)
2144 $by = mb_strtoupper($by);
2148 if ($by ==
"ID") $arSqlOrder[] =
" FR.ID ".$order.
" ";
2149 elseif ($by ==
"LID") $arSqlOrder[] =
" FRL.LID ".$order.
" ";
2150 elseif ($by ==
"NAME") $arSqlOrder[] =
" FRL.NAME ".$order.
" ";
2151 elseif ($by ==
"LEFT_MARGIN") $arSqlOrder[] =
" FR.LEFT_MARGIN ".$order.
" ";
2154 $arSqlOrder[] =
" FR.SORT ".$order.
" ";
2160 if (!empty($arSqlOrder))
2161 $strSqlOrder =
"ORDER BY ".implode(
", ", $arSqlOrder);
2164 "SELECT FR.ID, FR.SORT, FR.PARENT_ID, FR.LEFT_MARGIN, FR.RIGHT_MARGIN, FR.DEPTH_LEVEL, FRL.LID, FRL.NAME, FRL.DESCRIPTION ".
2165 "FROM b_forum_group FR ".
2166 " LEFT JOIN b_forum_group_lang FRL ON FR.ID = FRL.FORUM_GROUP_ID ".
2179 "SELECT FR.ID, FR.SORT, FR.PARENT_ID, FR.LEFT_MARGIN, FR.RIGHT_MARGIN, FR.DEPTH_LEVEL FROM b_forum_group FR WHERE FR.ID = ".$ID.
"";
2193 $LANGUAGE_ID = (!empty($LANGUAGE_ID) ? $LANGUAGE_ID : LANGUAGE_ID);
2195 $cache_id =
"b_forum_group".$key;
2202 if (!array_key_exists(
$key,
$GLOBALS[
"FORUM_CACHE"][
"GROUP"]))
2204 if (CACHED_b_forum_group !==
false &&
$CACHE_MANAGER->Read(CACHED_b_forum_group, $cache_id,
"b_forum_group"))
2210 $strSql =
"SELECT FR.ID, FRL.LID, FRL.NAME, FR.SORT, FRL.DESCRIPTION,
2211 FR.PARENT_ID, FR.LEFT_MARGIN, FR.RIGHT_MARGIN, FR.DEPTH_LEVEL ".
2212 "FROM b_forum_group FR ".
2213 " LEFT JOIN b_forum_group_lang FRL ON (FR.ID = FRL.FORUM_GROUP_ID AND FRL.LID = '".$DB->ForSql($LANGUAGE_ID).
"') ".
2214 "WHERE FR.ID = ".$ID.
"";
2217 if (CACHED_b_forum_group !==
false)
2227 $FORUM_GROUP_ID = intval($FORUM_GROUP_ID);
2230 "SELECT FRL.ID, FRL.FORUM_GROUP_ID, FRL.LID, FRL.NAME, FRL.DESCRIPTION ".
2231 "FROM b_forum_group_lang FRL ".
2232 "WHERE FRL.FORUM_GROUP_ID = ".$FORUM_GROUP_ID.
" ".
2233 " AND FRL.LID = '".$DB->ForSql($strLang).
"' ";
2246 $LANGUAGE_ID = (!empty($LANGUAGE_ID) ? $LANGUAGE_ID : LANGUAGE_ID);
2247 $cache_id =
"b_forum_group".$LANGUAGE_ID;
2249 if (!isset(
$GLOBALS[
"FORUM_CACHE"][
"GROUPS"])):
2253 if (!array_key_exists($LANGUAGE_ID,
$GLOBALS[
"FORUM_CACHE"][
"GROUPS"]))
2255 if (CACHED_b_forum_group !==
false &&
$CACHE_MANAGER->Read(CACHED_b_forum_group, $cache_id,
"b_forum_group"))
2266 if (CACHED_b_forum_group !==
false)
2270 return $GLOBALS[
"FORUM_CACHE"][
"GROUPS"][$LANGUAGE_ID];
2278 $DB->Query(
"UPDATE b_forum_group SET RIGHT_MARGIN=".intval($cnt).
", LEFT_MARGIN=".intval($cnt).
" WHERE ID=".intval(
$ID));
2280 $strSql =
"SELECT FG.ID, FG.PARENT_ID FROM b_forum_group FG WHERE ".($ID>0?
"FG.PARENT_ID=".$ID:
"FG.PARENT_ID IS NULL").
" ORDER BY FG.SORT ASC";
2284 $cnt = CAllForumGroup::ReSort(
$res[
"ID"], $cnt, $depth+1);
2287 $DB->Query(
"UPDATE b_forum_group SET RIGHT_MARGIN=".intval($cnt).
", DEPTH_LEVEL=".intval($depth).
" WHERE ID=".intval(
$ID));
2323 return $DB->Query(
"");
2329 return $DB->Query(
"");
2355 if (COption::GetOptionInt(
"forum",
"smile_native_gallery_id", 0) <= 0)
2357 $type = (
$type ==
"I" ? CSmile::TYPE_ICON : CSmile::TYPE_SMILE);
2359 if (!array_key_exists(
$key, self::$smiles))
2361 $smiles = CSmile::getByGalleryId(
$type, COption::GetOptionInt(
"forum",
"smile_native_gallery_id", 0),
$lang);
2365 if ($smile[
'HIDDEN'] ==
'Y')
2369 'ID' => $smile[
'ID'],
2371 'TYPING' => $smile[
'TYPING'],
2372 'IMAGE' => $smile[
"IMAGE"],
2373 'DESCRIPTION' =>
'',
2375 'SORT' => $smile[
'SORT'],
2376 'IMAGE_WIDTH' => $smile[
'IMAGE_WIDTH'],
2377 'IMAGE_HEIGHT' => $smile[
'IMAGE_HEIGHT'],
2378 'SET_ID' => $smile[
'SET_ID'],
2379 'NAME' => $smile[
'NAME'],
2380 'WIDTH' => $smile[
'IMAGE_WIDTH'],
2381 'HEIGHT' => $smile[
'IMAGE_HEIGHT'],
2386 return self::$smiles[
$key];
2391 $type = (
$type ==
"I" ? CSmile::TYPE_ICON : CSmile::TYPE_SMILE);
2393 if (!array_key_exists(
$key, self::$smiles))
2395 $smiles = CSmile::getByGalleryId(
$type, COption::GetOptionInt(
"forum",
"smile_gallery_id", 0),
$lang);
2399 if ($smile[
'HIDDEN'] ==
'Y')
2403 'SET_ID' => $smile[
'SET_ID'],
2404 'NAME' => $smile[
'NAME'],
2405 'IMAGE' => ($smile[
'TYPE'] == CSmile::TYPE_SMILE ? CSmile::PATH_TO_SMILE : CSmile::PATH_TO_ICON).$smile[
"SET_ID"].
"/".$smile[
"IMAGE"],
2406 'TYPING' => $smile[
'TYPING'],
2407 'WIDTH' => $smile[
'IMAGE_WIDTH'],
2408 'HEIGHT' => $smile[
'IMAGE_HEIGHT'],
2413 return self::$smiles[
$key];
2418 $type = (
$type == CSmile::TYPE_ICON ? CSmile::TYPE_ICON : CSmile::TYPE_SMILE);
2420 if (!array_key_exists(
$key, self::$sets))
2423 $smilesSet = CSmileSet::getListCache();
2427 if (!array_key_exists($smile[
"SET_ID"],
$result))
2429 $result[$smile[
"SET_ID"]] = $smilesSet[$smile[
"SET_ID"]];
2434 return self::$sets[
$key];
2443 $this->sNameTemplate = (!empty(
$params[
"sNameTemplate"]) ?
$params[
"sNameTemplate"] :
'');
2444 parent::__construct(
$res);
2449 if(
$res = parent::Fetch())
2451 if (COption::GetOptionString(
"forum",
"FILTER",
"Y") ==
"Y")
2453 if (trim(
$res[
"HTML"]) <>
'')
2455 $arr = unserialize(
$res[
"HTML"], [
"allowed_classes" =>
false]);
2457 $res[
"LAST_POSTER_NAME"] =
$arr[
"LAST_POSTER_NAME"];
2460 if (trim(
$res[
"TOPIC_HTML"] ??
'') <>
'')
2462 $arr = unserialize(
$res[
"TOPIC_HTML"], [
"allowed_classes" =>
false]);
2466 if (trim(
$res[
"ABS_TOPIC_HTML"] ??
'') <>
'')
2468 $arr = unserialize(
$res[
"ABS_TOPIC_HTML"], [
"allowed_classes" =>
false]);
2474 $res[
"ABS_LAST_POSTER_NAME"] =
$arr[
"ABS_LAST_POSTER_NAME"];
2479 if (!empty($this->sNameTemplate))
2482 foreach (
array(
"LAST_POSTER_ID" =>
"LAST_POSTER_NAME",
"ABS_LAST_POSTER_ID" =>
"ABS_LAST_POSTER_NAME") as $id =>
$name)
2485 if (!empty(
$res[$id]))
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
__construct($res, $params=array())
static GetByIDEx($ID, $LANGUAGE_ID)
static Resort($ID=0, $cnt=0, $depth=0)
static GetByLang($LANGUAGE_ID)
static GetLangByID($FORUM_GROUP_ID, $strLang)
static CheckFields($ACTION, &$arFields, $ID=false)
static CanUserUpdateGroup($ID, $arUserGroups)
static CanUserDeleteGroup($ID, $arUserGroups)
static GetListEx($arOrder=array("SORT"=>"ASC"), $arFilter=array())
static CanUserAddGroup($arUserGroups)
static GetList($arOrder=array("SORT"=>"ASC"), $arFilter=array())
static GetByID($ID, $arAddParams=array())
static GetList($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $arAddParams=array())
static GetFilterOperation($key)
static GetByIDEx($ID, $SITE_ID=false, $arAddParams=array())
static CanUserUpdateForum($FID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
static CanUserEditForum($FID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
static ShowPanel($FID, $TID=0, $bGetIcons=false)
static GetUserPermission($ID, $arUserGroups)
static CanUserModerateForum($FID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
static prepareField($operation, $type, $vals)
static InitReadLabels($ID, $arUserGroups)
static GetAccessPermissions($ID, $TYPE="ONE")
static CanUserAddForum($arUserGroups, $iUserID=0)
static PreparePath2Message($strPath, $arVals=array())
static GetPermissionUserDefault($ID)
static Update($ID, $arFields, $bReindex=true)
static CanUserViewForum($FID, $arUserGroups, $ExternalPermission=false)
static CheckFields($ACTION, &$arFields)
static GetListEx($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
static GetSelectFields($arAddParams=array())
static GetAccessPermsList($arOrder=array("ID"=>"ASC"), $arFilter=array())
static CanUserDeleteForum($FID, $arUserGroups, $iUserID=0, $ExternalPermission=false)
static GetForumRenew($data)
static OnReindex($NS=array(), $oCallback=NULL, $callback_method="")
static SetLabelsBeRead($ID, $arUserGroups)
static SetStat($ID=0, $arParams=array())
static OnBeforeLangDelete($lang)
static SetAccessPermissions($ID, $arGROUP_ID)
static OnGroupDelete($GROUP_ID)
static IsAdmin($userId=false, $arGroups=false)
static SetStat($userId=0, $params=[])
static GetFormattedNameByUserID($userID, $template="", $arUser=array())
static GetList($by="sort", $order="asc", $arFilter=[])
static ChangePermission($MODULE_ID, $arGroups, $ITEM_ID=false, $PARAM1=false, $PARAM2=false, $SITE_ID=false, $PARAMS=false)
static DeleteIndex($MODULE_ID, $ITEM_ID=false, $PARAM1=false, $PARAM2=false, $SITE_ID=false)
static GetList($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
static reindex(&$NS, $oCallback=NULL, $callback_method="")
static Concat($glue="", $pieces=array())
static getSmiles($type, $lang)
static GetByIDEx($ID, $strLang)
static GetLangByID($SMILE_ID, $strLang)
static GetByType($type, $lang)
static getSetsByType($type, $lang)
static GetList($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
static GetFormattedNameFieldsForSelect($arParams=array(), $bReturnAll=true)
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)
if(!defined('SITE_ID')) $lang
if(!defined('NOT_CHECK_PERMISSIONS')) $NS
ExecuteModuleEventEx($arEvent, $arParams=[])
IsModuleInstalled($module_id)
DelDuplicateSort(&$arSort)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
$GLOBALS['____1690880296']
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']
if(!Loader::includeModule('sale')) $pattern