$arResult["MESSAGE_FIRST"] = array(); $arResult["MESSAGE_LIST"] = array(); $arResult["MESSAGE_VIEW"] = array(); $arResult["VIEW"] = "N"; $bVarsFromForm = false; /************** Current User ***************************************/ $arResult["USER"] = array("INFO" => array(), "PERMISSION" => $arParams["PERMISSION"], "RIGHTS" => array("ADD_TOPIC" => CForumTopic::CanUserAddTopic($arParams["FID"], $USER->GetUserGroupArray(), $USER->GetID(), $arResult["FORUM"], $arParams["PERMISSION"]) ? "Y" : "N", "MODERATE" => CForumNew::CanUserModerateForum($arParams["FID"], $USER->GetUserGroupArray(), $USER->GetID(), $arParams["PERMISSION"]) == true ? "Y" : "N", "EDIT" => CForumNew::CanUserEditForum($arParams["FID"], $USER->GetUserGroupArray(), $USER->GetID(), $arParams["PERMISSION"]) ? "Y" : "N", "ADD_MESSAGE" => CForumMessage::CanUserAddMessage($arParams["TID"], $USER->GetUserGroupArray(), $USER->GetID(), $arParams["PERMISSION"]) ? "Y" : "N"), "SUBSCRIBE" => array(), "SHOW_NAME" => $GLOBALS["FORUM_STATUS_NAME"]["guest"]); // to avoid forum module permissions extension for admin if ($arParams["PERMISSION"] <= "E") { $arResult["USER"]["RIGHTS"] = array("ADD_TOPIC" => "N", "MODERATE" => "N", "EDIT" => "N", "ADD_MESSAGE" => "N"); } if ($USER->IsAuthorized()) { $arResult["USER"]["INFO"] = CForumUser::GetByUSER_ID($USER->GetParam("USER_ID")); $arResult["USER"]["SHOW_NAME"] = $_SESSION["FORUM"]["SHOW_NAME"]; $arResult["USER"]["RANK"] = CForumUser::GetUserRank($USER->GetParam("USER_ID")); $db_res = CForumSubscribe::GetList(array(), array("USER_ID" => $USER->GetID(), "FORUM_ID" => $arParams["FID"], "TOPIC_ID" => $arParams["TID"], "SITE_ID" => SITE_ID)); if ($db_res && ($res = $db_res->Fetch())) { $arResult["USER"]["SUBSCRIBE"][$res["ID"]] = $res; } } /*******************************************************************/ $arResult["PANELS"] = array("MODERATE" => $arResult["USER"]["RIGHTS"]["MODERATE"], "DELETE" => $arResult["USER"]["RIGHTS"]["EDIT"], "SUPPORT" => IsModuleInstalled("support") && $APPLICATION->GetGroupRight("forum") >= "W" ? "Y" : "N", "EDIT" => $arResult["USER"]["RIGHTS"]["EDIT"], "STATISTIC" => IsModuleInstalled("statistic") && $APPLICATION->GetGroupRight("statistic") > "D" ? "Y" : "N", "MAIN" => $APPLICATION->GetGroupRight("main") > "D" ? "Y" : "N", "MAIL" => $APPLICATION->GetGroupRight("mail") > "R" ? "Y" : "N"); /*******************************************************************/ $_SERVER["REQUEST_URI"] = $arResult["CURRENT_PAGE"]; unset($_GET["MID"]); unset($GLOBALS["HTTP_GET_VARS"]["MID"]); unset($_GET["ACTION"]); unset($GLOBALS["HTTP_GET_VARS"]["ACTION"]); $parser = new forumTextParser(LANGUAGE_ID, $arParams["PATH_TO_SMILE"]); $parser->MaxStringLen = $arParams["WORD_LENGTH"]; $parser->image_params["width"] = $parser->image_params["height"] = $arParams["IMAGE_SIZE"];
$arParams["USE_CAPTCHA"] = $arResult["FORUM"]["USE_CAPTCHA"] == "Y" ? "Y" : $arParams["USE_CAPTCHA"]; /******************************************************************** /Input params ********************************************************************/ /******************************************************************** Data ********************************************************************/ /************** 3. Get inormation about USER ***********************/ if ($arParams["SHOW_SUBSCRIBE"] == "Y" && $USER->IsAuthorized() && $arResult["USER"]["PERMISSION"] > "E") { // USER subscribes $db_res = CForumSubscribe::GetList( array(), array( "USER_ID" => $USER->GetID(), "FORUM_ID" => $arParams["FORUM_ID"] ) ); if ($db_res && $res = $db_res->Fetch()) { do { $arResult["USER"]["SUBSCRIBE"][] = $res; if (intval($res["TOPIC_ID"]) <= 0) $arResult["USER"]["FORUM_SUBSCRIBE"] = "Y"; elseif(intval($res["TOPIC_ID"]) == intval($arResult["FORUM_TOPIC_ID"])) $arResult["USER"]["TOPIC_SUBSCRIBE"] = "Y"; } while ($res = $db_res->Fetch()); } }
$arResult["TOPICS"] = $arResult["Topics"]; /************** Navigation *****************************************/ if (intVal($arResult["FORUM"]["FORUM_GROUP_ID"]) > 0) { $PARENT_ID = intVal($arResult["FORUM"]["FORUM_GROUP_ID"]); while ($PARENT_ID > 0) { $res = $arResult["GROUPS"][$PARENT_ID]; $res["URL"] = array("GROUP" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_FORUMS"], array("GID" => $PARENT_ID)), "~GROUP" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_FORUMS"], array("GID" => $PARENT_ID))); $arResult["GROUP_NAVIGATION"][] = $res; $PARENT_ID = intVal($arResult["GROUPS"][$PARENT_ID]["PARENT_ID"]); } $arResult["GROUP_NAVIGATION"] = array_reverse($arResult["GROUP_NAVIGATION"]); } /************** User info ******************************************/ if ($USER->IsAuthorized()) { $arFields = array("USER_ID" => $USER->GetID(), "FORUM_ID" => $arParams["FID"], "TOPIC_ID" => 0, "SITE_ID" => SITE_ID); $db_res = CForumSubscribe::GetList(array(), $arFields); if ($db_res && ($res = $db_res->Fetch())) { do { $arResult["USER"]["SUBSCRIBE"][$res["ID"]] = $res; } while ($res = $db_res->Fetch()); } } /******************************************************************** /Data ********************************************************************/ /************** For custom template ********************************/ $arResult["CURRENT_PAGE"] = $arResult["URL"]["TOPIC_LIST"]; $arResult["index"] = $arResult["URL"]["INDEX"]; $arResult["topic_new"] = $arResult["URL"]["TOPIC_NEW"]; $arResult["UserPermission"] = $arResult["PERMISSION"]; $arParams["IsAdmin"] = CForumUser::IsAdmin() ? "Y" : "N";
public static function CheckFields($ACTION, &$arFields) { if ((is_set($arFields, "USER_ID") || $ACTION == "ADD") && intVal($arFields["USER_ID"]) <= 0) { return false; } if ((is_set($arFields, "FORUM_ID") || $ACTION == "ADD") && intVal($arFields["FORUM_ID"]) <= 0) { return false; } if ((is_set($arFields, "SITE_ID") || $ACTION == "ADD") && strLen($arFields["SITE_ID"]) <= 0) { return false; } if ((is_set($arFields, "TOPIC_ID") || $ACTION == "ADD") && intVal($arFields["TOPIC_ID"]) <= 0) { $arFields["TOPIC_ID"] = false; } if ((is_set($arFields, "NEW_TOPIC_ONLY") || $ACTION == "ADD") && $arFields["NEW_TOPIC_ONLY"] != "Y") { $arFields["NEW_TOPIC_ONLY"] = "N"; } if ($arFields["TOPIC_ID"] !== false) { $arFields["NEW_TOPIC_ONLY"] = "N"; } if ($ACTION == "ADD") { $arFilter = array("USER_ID" => intVal($arFields["USER_ID"]), "FORUM_ID" => intVal($arFields["FORUM_ID"]), "TOPIC_ID" => intVal($arFields["TOPIC_ID"])); if ($arFields["SOCNET_GROUP_ID"]) { $arFilter["SOCNET_GROUP_ID"] = $arFields["SOCNET_GROUP_ID"]; } $db_res = CForumSubscribe::GetList(array(), $arFilter); if ($res = $db_res->Fetch()) { return false; } } return True; }
function Update($ID, $arFields, $skip_counts = False) { global $DB; $ID = intVal($ID); $arFields1 = array(); $arFieldsForFilter = array(); $bNeedFilter = false; if ($ID <= 0 || !CForumTopic::CheckFields("UPDATE", $arFields)) { return false; } /***************** Event onBeforeTopicUpdate **************************/ $events = GetModuleEvents("forum", "onBeforeTopicUpdate"); while ($arEvent = $events->Fetch()) { if (ExecuteModuleEventEx($arEvent, array(&$ID, &$arFields)) === false) { return false; } } /***************** /Event ******************************************/ if (empty($arFields)) { return false; } foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!$skip_counts && is_set($arFields, "FORUM_ID") || COption::GetOptionString("forum", "FILTER", "Y") == "Y" || (is_set($arFields, "TITLE") || is_set($arFields, "TAGS")) && IsModuleInstalled("search")) { $arTopic_prev = CForumTopic::GetByID($ID, array("NoFilter" => true)); } // Fields "HTML". if (COption::GetOptionString("forum", "FILTER", "Y") == "Y") { $arFieldsForFilter = array("TITLE" => is_set($arFields, "TITLE") ? $arFields["TITLE"] : $arTopic_prev["TITLE"], "TAGS" => is_set($arFields, "TAGS") ? $arFields["TAGS"] : $arTopic_prev["TAGS"], "DESCRIPTION" => is_set($arFields, "DESCRIPTION") ? $arFields["DESCRIPTION"] : $arTopic_prev["DESCRIPTION"], "LAST_POSTER_NAME" => is_set($arFields, "LAST_POSTER_NAME") ? $arFields["LAST_POSTER_NAME"] : $arTopic_prev["LAST_POSTER_NAME"], "ABS_LAST_POSTER_NAME" => is_set($arFields, "ABS_LAST_POSTER_NAME") ? $arFields["ABS_LAST_POSTER_NAME"] : $arTopic_prev["ABS_LAST_POSTER_NAME"], "USER_START_NAME" => is_set($arFields, "USER_START_NAME") ? $arFields["USER_START_NAME"] : $arTopic_prev["USER_START_NAME"]); $bNeedFilter = false; foreach ($arFieldsForFilter as $key => $val) { if (is_set($arFields, $key)) { $bNeedFilter = true; break; } } if ($bNeedFilter) { foreach ($arFieldsForFilter as $key => $val) { $res = CFilterUnquotableWords::Filter($val); if (empty($res) && !empty($val)) { $res = "*"; } $arFieldsForFilter[$key] = $res; } $arFields["HTML"] = serialize($arFieldsForFilter); } } $strUpdate = $DB->PrepareUpdate("b_forum_topic", $arFields); foreach ($arFields1 as $key => $value) { if (strLen($strUpdate) > 0) { $strUpdate .= ", "; } $strUpdate .= $key . "=" . $value . " "; } if (!empty($strUpdate)) { $strSql = "UPDATE b_forum_topic SET " . $strUpdate . " WHERE ID = " . $ID; $DB->QueryBind($strSql, array("HTML" => $arFields["HTML"]), false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); } $res = array_merge($arFields1, $arFields); if (count($res) == 1 && !empty($res["VIEWS"])) { if (intVal($res["VIEWS"]) <= 0) { $GLOBALS["FORUM_CACHE"]["TOPIC"][$ID]["VIEWS"]++; $GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID]["VIEWS"]++; } else { $GLOBALS["FORUM_CACHE"]["TOPIC"][$ID]["VIEWS"] = intVal($res["VIEWS"]); $GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID]["VIEWS"] = intVal($res["VIEWS"]); } } else { unset($GLOBALS["FORUM_CACHE"]["FORUM"][$arTopic_prev["FORUM_ID"]]); unset($GLOBALS["FORUM_CACHE"]["TOPIC"][$ID]); unset($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID]); if (intVal($arFields1["FORUM_ID"]) > 0) { unset($GLOBALS["FORUM_CACHE"]["FORUM"][intVal($arFields1["FORUM_ID"])]); } if (intVal($arFields["FORUM_ID"]) > 0) { unset($GLOBALS["FORUM_CACHE"]["FORUM"][intVal($arFields["FORUM_ID"])]); } } if (count($res) == 1 && !empty($res["VIEWS"])) { return $ID; } if (is_set($arFields, "FORUM_ID") && intVal($arFields["FORUM_ID"]) != intVal($arTopic_prev["FORUM_ID"])) { $arFiles = array(); $db_res = CForumFiles::GetList(array(), array("TOPIC_ID" => $ID)); if ($db_res && ($res = $db_res->Fetch())) { do { $arFiles[] = $res["ID"]; } while ($res = $db_res->Fetch()); } CForumFiles::UpdateByID($arFiles, array("FORUM_ID" => $arFields["FORUM_ID"])); } /***************** Event onAfterTopicUpdate ************************/ $events = GetModuleEvents("forum", "onAfterTopicUpdate"); if ($events->nSelectedCount > 0) { $arTopicFields = CForumTopic::GetByID($ID, array("NoFilter" => true)); } while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arTopicFields)); } /***************** /Event ******************************************/ // recalc statistic if topic removed from another forum if (!$skip_counts && is_set($arFields, "FORUM_ID") && intVal($arFields["FORUM_ID"]) != intVal($arTopic_prev["FORUM_ID"])) { $DB->StartTransaction(); $db_res = CForumMessage::GetList(array(), array("TOPIC_ID" => $ID)); while ($ar_res = $db_res->Fetch()) { CForumMessage::Update($ar_res["ID"], array("FORUM_ID" => $arFields["FORUM_ID"]), true); } $db_res = CForumSubscribe::GetList(array(), array("TOPIC_ID" => $ID)); while ($ar_res = $db_res->Fetch()) { CForumSubscribe::Update($ar_res["ID"], array("FORUM_ID" => $arFields["FORUM_ID"])); } $DB->Commit(); CForumNew::SetStat($arFields["FORUM_ID"]); CForumNew::SetStat($arTopic_prev["FORUM_ID"]); } if (IsModuleInstalled("search")) { $bNeedDeleteIndex = false; if (is_set($arFields, "FORUM_ID") && intVal($arFields["FORUM_ID"]) != intVal($arTopic_prev["FORUM_ID"])) { $res = CForumNew::GetByID($arFields["FORUM_ID"]); $bNeedDeleteIndex = $res["INDEXATION"] != "Y" ? true : false; } if ($bNeedDeleteIndex) { CModule::IncludeModule("search"); CSearch::DeleteIndex("forum", false, $arTopic_prev["FORUM_ID"], $ID); } elseif (is_set($arFields, "TITLE") || is_set($arFields, "TAGS") || is_set($arFields, "DESCRIPTION")) { $arReindex = array(); $arFields["FORUM_ID"] = is_set($arFields, "FORUM_ID") ? $arFields["FORUM_ID"] : $arTopic_prev["FORUM_ID"]; if (is_set($arFields, "TITLE") && trim($arTopic_prev["TITLE"]) != trim($arFields["TITLE"])) { $arReindex["TITLE"] = $bNeedFilter ? $arFieldsForFilter["TITLE"] : $arFields["TITLE"]; } if (is_set($arFields, "DESCRIPTION") && trim($arTopic_prev["DESCRIPTION"]) != trim($arFields["DESCRIPTION"])) { $title = is_set($arReindex, "TITLE") ? $arReindex["TITLE"] : ($bNeedFilter ? $arFieldsForFilter["TITLE"] : $arTopic_prev["TITLE"]); $description = $bNeedFilter ? $arFieldsForFilter["DESCRIPTION"] : $arFields["DESCRIPTION"]; $arReindex["TITLE_FOR_FIRST_POST"] = $title . (!empty($description) ? ", " . $description : ""); } if (is_set($arFields, "TAGS") && trim($arTopic_prev["TAGS"]) != trim($arFields["TAGS"])) { $arReindex["TAGS"] = $bNeedFilter ? $arFieldsForFilter["TAGS"] : $arFields["TAGS"]; } if (!empty($arReindex)) { CModule::IncludeModule("search"); if (is_set($arReindex, "TITLE")) { $db_res = CForumMessage::GetList(array("ID" => "ASC"), array("FORUM_ID" => $arFields["FORUM_ID"], "TOPIC_ID" => $ID, "NEW_TOPIC" => "Y")); if ($db_res) { while ($arMessage = $db_res->Fetch()) { CForumMessage::Reindex($arMessage['ID'], array_merge($arMessage, $arReindex)); } } } if (is_set($arReindex, "TITLE_FOR_FIRST_POST") || is_set($arReindex, "TAGS")) { unset($arReindex["TITLE"]); if (is_set($arReindex, "TITLE_FOR_FIRST_POST")) { $arReindex["TITLE"] = $arReindex["TITLE_FOR_FIRST_POST"]; unset($arReindex["TITLE_FOR_FIRST_POST"]); } $db_res = CForumMessage::GetList(array("ID" => "ASC"), array("TOPIC_ID" => $ID, "NEW_TOPIC" => "Y")); if ($db_res && ($arMessage = $db_res->Fetch())) { CForumMessage::Reindex($arMessage['ID'], array_merge($arMessage, $arReindex)); } } } } } return $ID; }
$APPLICATION->AddChainItem("Профиль", "profile.php"); $APPLICATION->SetTitle("Список подписки на сообщения форума"); $APPLICATION->SetTemplateCSS("forum/forum_tmpl_2/forum.css"); $APPLICATION->IncludeFile("forum/forum_tmpl_2/menu.php"); if (!$bUserFound) { $strErrorMessage .= "Пользователь с кодом {$UID} не найден. \n"; } ?> <?php echo ShowMessage(array("MESSAGE" => $strErrorMessage, "TYPE" => "ERROR")); echo ShowMessage(array("MESSAGE" => $strOKMessage, "TYPE" => "OK")); ?> <?php $db_res = CForumSubscribe::GetList(array("FORUM_ID" => "ASC", "TOPIC_ID" => "ASC", "START_DATE" => "ASC"), array("USER_ID" => $UID)); ?> <form action="<?php echo $APPLICATION->GetCurPage(); ?> " method="post"> <font class="text"> <?php $FID = IntVal($_REQUEST["FID"]); $TID = IntVal($_REQUEST["TID"]); if ($TID > 0) { ?> <a href="read.php?FID=<?php echo $FID; ?>
********************************************************************/ /******************************************************************** Data ********************************************************************/ /************** Forum subscribe ************************************/ if (!$bDialog && $arParams["USE_COMMENTS"] == "Y" && CModule::IncludeModule("forum")) { $arParams["USE_COMMENTS"] = $arParams["FORUM_CAN_VIEW"] = CForumNew::CanUserViewForum($arParams["FORUM_ID"], $GLOBALS['USER']->GetUserGroupArray()) ? "Y" : "N"; if ($arParams["FORUM_CAN_VIEW"] == "Y" && $GLOBALS['USER']->IsAuthorized()) { $bShowSubscribe = true; $arUserSubscribe = array(); $cache_id = "/" . $arParams['IBLOCK_ID'] . "/forum_user_subscribe_" . intVal($currentUserID) . "_" . $arParams["FORUM_ID"]; if ($arParams["CACHE_TIME"] > 0 && $cache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path_main)) { $res = $cache->GetVars(); $arUserSubscribe = $res["arUserSubscribe"]; } else { $db_res = CForumSubscribe::GetList(array(), array("USER_ID" => $currentUserID, "FORUM_ID" => $arParams["FORUM_ID"])); $arUserSubscribe = array(); if ($db_res && ($res = $db_res->Fetch())) { do { $arUserSubscribe[] = $res; } while ($res = $db_res->Fetch()); } $arUserSubscribe = array("USER_ID" => intVal($currentUserID), "DATA" => $arUserSubscribe); if ($arParams["CACHE_TIME"] > 0) { $cache->StartDataCache($arParams["CACHE_TIME"], $cache_id, $cache_path_main); $cache->EndDataCache(array("arUserSubscribe" => $arUserSubscribe)); } } $arResult["USER"]["SUBSCRIBE"] = $arUserSubscribe["DATA"]; if (is_array($arResult["USER"]["SUBSCRIBE"])) { $arTmp = array("FORUM" => "N", "TOPIC" => "N", "TOPICS" => array());
$arResult["ERROR_MESSAGE"] = implode("\n", $arError); $arResult["OK_MESSAGE"] = implode("\n", $arNote); $arResult["sessid"] = bitrix_sessid_get(); $arResult["SHOW_SUBSCRIBE_LIST"] = "N"; $arResult["SUBSCRIBE_LIST"] = array(); /******************************************************************** /Default values ********************************************************************/ /******************************************************************** Data ********************************************************************/ $db_res = CForumSubscribe::GetList( array("FORUM_ID" => "ASC", "TOPIC_ID" => "ASC", "START_DATE" => "ASC"), array("USER_ID" => $arParams["UID"]), array( "bDescPageNumbering" => false, "nPageSize" => $arParams["TOPICS_PER_PAGE"] ) ); $db_res->NavStart($arParams["TOPICS_PER_PAGE"]); $db_res->nPageWindow = $arParams["PAGE_NAVIGATION_WINDOW"]; $db_res->bShowAll = false; $arResult["NAV_RESULT"] = $db_res; $arResult["NAV_STRING"] = $db_res->GetPageNavStringEx($navComponentObject, GetMessage("F_SUBSCRIBE"), $arParams["PAGE_NAVIGATION_TEMPLATE"]); if ($db_res && $res = $db_res->GetNext()) { $arResult["SHOW_SUBSCRIBE_LIST"] = "Y"; do { $arResult["~FORUMS"][] = $res["FORUM_ID"]; $arResult["~TOPICS"][] = $res["TOPIC_ID"];