%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/components/bitrix/forum.topic.list/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/components/bitrix/forum.topic.list/component.php |
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); /** * @global CMain $APPLICATION * @global CUser $USER * @global CUser $DB * @param array $arParams * @param array $arResult * @param string $componentName * @param CBitrixComponent $this */ if (!CModule::IncludeModule("forum")): ShowError(GetMessage("F_NO_MODULE")); return 0; endif; /******************************************************************** Input params ********************************************************************/ /***************** BASE ********************************************/ $arParams["FID"] = intVal(empty($arParams["FID"]) ? $arParams["DEFAULT_FID"] : $arParams["FID"]); $GLOBALS["FID"] = $arParams["FID"]; $arParams["USE_DESC_PAGE"] = ($arParams["USE_DESC_PAGE"] == "N" ? "N" : "Y"); /***************** URL *********************************************/ $URL_NAME_DEFAULT = array( "index" => "", "forums" => "PAGE_NAME=forums&GID=#GID#", "list" => "PAGE_NAME=list&FID=#FID#", "read" => "PAGE_NAME=read&FID=#FID#&TID=#TID#", "message" => "PAGE_NAME=message&FID=#FID#&TID=#TID#&MID=#MID#", "message_appr" => "PAGE_NAME=message_appr&FID=#FID#&TID=#TID#", "profile_view" => "PAGE_NAME=profile_view&UID=#UID#", "topic_new" => "PAGE_NAME=topic_new&FID=#FID#", "subscr_list" => "PAGE_NAME=subscr_list&FID=#FID#", "topic_move" => "PAGE_NAME=topic_move&FID=#FID#&TID=#TID#", "rss" => "PAGE_NAME=rss&TYPE=#TYPE#&MODE=#MODE#&IID=#IID#"); if (empty($arParams["URL_TEMPLATES_MESSAGE"]) && !empty($arParams["URL_TEMPLATES_READ"])) { $arParams["URL_TEMPLATES_MESSAGE"] = $arParams["URL_TEMPLATES_READ"]; } foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE) { if (strLen(trim($arParams["URL_TEMPLATES_".strToUpper($URL)])) <= 0) $arParams["URL_TEMPLATES_".strToUpper($URL)] = $APPLICATION->GetCurPage()."?".$URL_VALUE; $arParams["~URL_TEMPLATES_".strToUpper($URL)] = $arParams["URL_TEMPLATES_".strToUpper($URL)]; $arParams["URL_TEMPLATES_".strToUpper($URL)] = htmlspecialcharsbx($arParams["URL_TEMPLATES_".strToUpper($URL)]); } /***************** ADDITIONAL **************************************/ $arParams["PAGEN"] = (intVal($arParams["PAGEN"]) <= 0 ? 1 : intVal($arParams["PAGEN"])); $arParams["TOPICS_PER_PAGE"] = intVal($arParams["TOPICS_PER_PAGE"] > 0 ? $arParams["TOPICS_PER_PAGE"] : COption::GetOptionString("forum", "TOPICS_PER_PAGE", "10")); $arParams["MESSAGES_PER_PAGE"] = intVal($arParams["MESSAGES_PER_PAGE"] > 0 ? $arParams["MESSAGES_PER_PAGE"] : COption::GetOptionString("forum", "MESSAGES_PER_PAGE", "10")); $arParams["DATE_FORMAT"] = trim(empty($arParams["DATE_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")) : $arParams["DATE_FORMAT"]); $arParams["DATE_TIME_FORMAT"] = trim(empty($arParams["DATE_TIME_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("FULL")) : $arParams["DATE_TIME_FORMAT"]); $arParams["NAME_TEMPLATE"] = (!empty($arParams["NAME_TEMPLATE"]) ? $arParams["NAME_TEMPLATE"] : false); $arParams["SHOW_FORUM_ANOTHER_SITE"] = ($arParams["SHOW_FORUM_ANOTHER_SITE"] == "Y" ? "Y" : "N"); $arParams["PAGE_NAVIGATION_TEMPLATE"] = trim($arParams["PAGE_NAVIGATION_TEMPLATE"]); $arParams["PAGE_NAVIGATION_WINDOW"] = intVal(intVal($arParams["PAGE_NAVIGATION_WINDOW"]) > 0 ? $arParams["PAGE_NAVIGATION_WINDOW"] : 11); /***************** STANDART ****************************************/ if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y")) $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]); else $arParams["CACHE_TIME"] = 0; $arParams["SET_TITLE"] = ($arParams["SET_TITLE"] == "N" ? "N" : "Y"); $arParams["SET_NAVIGATION"] = ($arParams["SET_NAVIGATION"] == "N" ? "N" : "Y"); // $arParams["DISPLAY_PANEL"] = ($arParams["DISPLAY_PANEL"] == "Y" ? "Y" : "N"); /******************************************************************** /Input params ********************************************************************/ $arResult["FORUM"]= CForumNew::GetByID($arParams["FID"]); if (empty($arResult["FORUM"])): CHTTP::SetStatus("404 Not Found"); ShowError(GetMessage("F_ERROR_FORUM_NOT_EXISTS")); return false; elseif (!CForumNew::CanUserViewForum($arParams["FID"], $USER->GetUserGroupArray())): $APPLICATION->AuthForm(GetMessage("F_NO_FPERMS")); return false; elseif ((!array_key_exists(SITE_ID, CForumNew::GetSites($arParams["FID"]))) && ($arParams["SHOW_FORUM_ANOTHER_SITE"] == "N" || !CForumUser::IsAdmin()) ): CHTTP::SetStatus("404 Not Found"); ShowError(GetMessage("F_ERROR_FORUM_NOT_EXISTS")); return false; endif; /******************************************************************** Default values ********************************************************************/ $arParams["PERMISSION"] = $arResult["PERMISSION"] = ForumCurrUserPermissions($arParams["FID"]); $arResult["Topics"] = array(); $arResult["TOPICS"] = array(); $arResult["URL"] = array( "INDEX" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_INDEX"], array()), "~INDEX" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_INDEX"], array()), "TOPIC_LIST" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_LIST"], array("FID" => $arParams["FID"])), "~TOPIC_LIST" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_LIST"], array("FID" => $arParams["FID"])), "TOPIC_NEW" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_NEW"], array("FID" => $arParams["FID"])), "~TOPIC_NEW" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_TOPIC_NEW"], array("FID" => $arParams["FID"])), "RSS" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_RSS"], array("TYPE" => "default", "MODE" => "forum", "IID" => $arParams["FID"])), "~RSS" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_RSS"], array("TYPE" => "default", "MODE" => "forum", "IID" => $arParams["FID"])), "RSS_DEFAULT" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_RSS"], array("TYPE" => "rss2", "MODE" => "forum", "IID" => $arParams["FID"])), "~RSS_DEFAULT" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_RSS"], array("TYPE" => "rss2", "MODE" => "forum", "IID" => $arParams["FID"]))); $arResult["CanUserAddTopic"] = CForumTopic::CanUserAddTopic($arParams["FID"], $USER->GetUserGroupArray(), $USER->GetID(), $arResult["FORUM"]); $arResult["ERROR_MESSAGE"] = ""; $arResult["OK_MESSAGE"] = ""; $parser = new forumTextParser(false, false, false, "light"); $parser->MaxStringLen = $arParams["WORD_LENGTH"]; if ($_SERVER['REQUEST_METHOD'] == "POST"): $arResult["TID"] = (empty($_POST["TID_ARRAY"]) ? $_POST["TID"] : $_POST["TID_ARRAY"]); endif; if (empty($arResult["TID"])) $arResult["TID"] = (empty($_REQUEST["TID_ARRAY"]) ? $_REQUEST["TID"] : $_REQUEST["TID_ARRAY"]); $ACTION = $_REQUEST["ACTION"]; $arResult["NOTIFICATIONS"] = array( "not_approve" => GetMessage("F_TOPIC_NOT_APPROVED"), "tid_not_approved" => GetMessage("F_TOPIC_NOT_APPROVED"), "tid_is_lost" => GetMessage("F_TOPIC_IS_LOST"), "del_topic" => GetMessage("F_TOPIC_IS_DEL"), "delele" => GetMessage("F_TOPICS_IS_DEL"), "stick" => GetMessage("F_TOPICS_IS_PINNED"), "unstick" => GetMessage("F_TOPICS_IS_UNPINNED"), "open" => GetMessage("F_TOPICS_IS_OPENED"), "close" => GetMessage("F_TOPICS_IS_CLOSED")); if (!empty($_REQUEST["result"]) && array_key_exists($_REQUEST["result"], $arResult["NOTIFICATIONS"])): $arResult["OK_MESSAGE"] = $arResult["NOTIFICATIONS"][$_REQUEST["result"]]; endif; if (!empty($_REQUEST["error"]) && array_key_exists($_REQUEST["error"], $arResult["NOTIFICATIONS"])): $arResult["OK_MESSAGE"] = $arResult["NOTIFICATIONS"][$_REQUEST["error"]]; endif; $arResult["GROUP_NAVIGATION"] = array(); $arResult["GROUPS"] = CForumGroup::GetByLang(LANGUAGE_ID); $strErrorMessage = ""; $strOkMessage = ""; $arResult["USER"] = array( "INFO" => array(), "RIGHTS" => array( "CAN_ADD_TOPIC" => $arResult["CanUserAddTopic"] ? "Y" : "N"), "PERMISSION" => $arResult["PERMISSION"], "SUBSCRIBE" => array()); /******************************************************************** /Default values ********************************************************************/ CPageOption::SetOptionString("main", "nav_page_in_session", "N"); /******************************************************************** Actions ********************************************************************/ if (check_bitrix_sessid() && (strLen($ACTION) > 0)) { $aMsg = array(); switch ($ACTION) { case "FORUM_SUBSCRIBE": case "FORUM_SUBSCRIBE_TOPICS": if (ForumSubscribeNewMessagesEx($arParams["FID"], 0, (($ACTION=="FORUM_SUBSCRIBE_TOPICS")?"Y":"N"), $strErrorMessage, $strOkMessage)): LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_SUBSCR_LIST"], array("FID" => $arParams["FID"]))); return true; endif; break; case "SET_BE_READ": ForumSetReadForum($arParams["FID"]); LocalRedirect($APPLICATION->GetCurPageParam('', array('sessid', 'ACTION'))); break; case "SET_ORDINARY": case "SET_TOP": $ACTION = ($ACTION == "SET_ORDINARY" ? "ORDINARY" : "TOP"); if (ForumTopOrdinaryTopic($arResult["TID"], $ACTION, $strErrorMessage, $strOkMessage)): LocalRedirect(ForumAddPageParams($arResult["URL"]["~TOPIC_LIST"], array("result" => ($ACTION == "ORDINARY" ? "unstick" : "stick")))); return true; endif; break; case "MOVE_TOPIC": $topic_id = (is_array($arResult["TID"]) ? implode(",", $arResult["TID"]) : $arResult["TID"]); if (!empty($topic_id)): LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_MOVE"], array("FID" => $arParams["FID"], "TID" => $topic_id))); return true; endif; break; case "DEL_TOPIC": if (ForumDeleteTopic($arResult["TID"], $strErrorMessage, $strOkMessage)): if (isset($_REQUEST['NAV_PAGE']) && strpos($_REQUEST['NAV_PAGE'], ':') !== false) { list($NavNum, $NavPageNomer) = explode(":", $_REQUEST['NAV_PAGE']); LocalRedirect(ForumAddPageParams($arResult["URL"]["~TOPIC_LIST"], array("result" => "delele", "PAGEN_".intval($NavNum) => intval($NavPageNomer)))); return true; } LocalRedirect(ForumAddPageParams($arResult["URL"]["~TOPIC_LIST"], array("result" => "delele"))); return true; endif; break; case "STATE_Y": case "STATE_N": $ACTION = ($ACTION == "STATE_Y" ? "OPEN" : "CLOSE"); $state = ($ACTION == "STATE_Y" ? "Y" : "N"); if (ForumOpenCloseTopic($arResult["TID"], $ACTION, $strErrorMessage, $strOkMessage)): LocalRedirect(ForumAddPageParams($arResult["URL"]["~TOPIC_LIST"], array("result" => ($ACTION == "OPEN" ? "open" : "close")))); return true; endif; break; } } elseif (!check_bitrix_sessid() && (strLen($ACTION) > 0)) { $strErrorMessage .= GetMessage("F_ERR_SESS_FINISH").".\n"; } //******************************************************************* $arResult["ERROR_MESSAGE"] .= trim($strErrorMessage); if (!empty($strErrorMessage)) $arResult["OK_MESSAGE"] = trim($strOkMessage); else $arResult["OK_MESSAGE"] .= trim($strOkMessage); /******************************************************************** /Actions ********************************************************************/ /******************************************************************** Data ********************************************************************/ $arResult["SortingEx"] = array("TITLE", "POSTS", "VIEWS", "USER_START_NAME", "LAST_POST_DATE"); global $by, $order; InitSorting($APPLICATION->GetCurPage()."?PAGE_NAME=list&FID=".$arParams["FID"]); if (!in_array($by, $arResult["SortingEx"])): ForumGetTopicSort($by, $order, $arResult["FORUM"]); endif; $by = ($by == "ABS_LAST_POST_DATE" ? "LAST_POST_DATE" : $by); if ($by == "LAST_POST_DATE" && $arResult["PERMISSION"] >= "Q"): $by = "ABS_LAST_POST_DATE"; endif; $arResult["SortingEx"] = array_flip($arResult["SortingEx"]); foreach ($arResult["SortingEx"] as $key => $val): $arResult["SortingEx"][$key] = SortingEx($key); endforeach; $arFilter = array("FORUM_ID" => $arParams["FID"]); if ($USER->IsAuthorized()) $arFilter["USER_ID"] = $USER->GetID(); if ($arResult["PERMISSION"] < "Q") $arFilter["APPROVED"] = "Y"; /******************************************************************* CACHE *******************************************************************/ $cache = new CPHPCache(); global $NavNum; $PAGEN_NAME="PAGEN_".($NavNum+1); global ${$PAGEN_NAME}; $PAGEN = ${$PAGEN_NAME}; global $CACHE_MANAGER; $cache_path = $CACHE_MANAGER->GetCompCachePath(CComponentEngine::MakeComponentPath($this->__name)); $arCacheID = array( ($arResult["PERMISSION"] < "Q"), $arParams['FID'], CTimeZone::GetOffset(), $by => $order ); $cache_id = "forum_topics_".md5(serialize($arCacheID)); if (($PAGEN == null) && ($arParams["CACHE_TIME"] > 0) && defined("BX_COMP_MANAGED_CACHE")) // cache only the first page { if ($cache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path)) { $res = $cache->GetVars(); $arResult["Topics"] = $res["Topics"]; $arResult["NAV_STRING"] = $res['NAV_STRING']; $arResult["NAV_PAGE"] = $res['NAV_PAGE']; // get last_visit dates $arTopics = array(); foreach ($arResult['Topics'] as $arTopic) $arTopics[] = $arTopic['ID']; $arVisit = CForumUser::GetUserTopicVisits($arParams["FID"], $arTopics); if (!empty($arVisit)) { foreach ($arResult['Topics'] as $topicIndex => $arTopic) { if (isset($arVisit[$arTopic['ID']])) { $arResult['Topics'][$topicIndex]['LAST_VISIT'] = $arVisit[$arTopic['ID']]; } } } } } /******************************************************************* / CACHE *******************************************************************/ if (empty($arResult["Topics"])) // cache miss or PAGE > 1 { /*******************************************************************/ $db_res = CForumTopic::GetListEx(array("SORT"=>"ASC", $by=>$order), $arFilter, false, false, array( "bDescPageNumbering" => ($arParams["USE_DESC_PAGE"] == "Y"), "nPageSize" => $arParams["TOPICS_PER_PAGE"], "bShowAll" => false, "sNameTemplate" => $arParams["NAME_TEMPLATE"] ) ); $db_res->NavStart($arParams["TOPICS_PER_PAGE"], false); $db_res->nPageWindow = $arParams["PAGE_NAVIGATION_WINDOW"]; $arResult["NAV_RESULT"] = $db_res; $arResult["NAV_STRING"] = $db_res->GetPageNavStringEx($navComponentObject, GetMessage("F_TOPIC_LIST"), $arParams["PAGE_NAVIGATION_TEMPLATE"]); $arResult["NAV_PAGE"] = $db_res->NavNum.':'.$db_res->NavPageNomer; $topicLinks = array(); /*******************************************************************/ while ($res = $db_res->GetNext()) { $res["URL"] = array( "TOPIC" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_READ"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => "s")), "~TOPIC" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_READ"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => "s")), "LAST_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => intVal($res["LAST_MESSAGE_ID"]))), "~LAST_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => intVal($res["LAST_MESSAGE_ID"]))), "MESSAGE_UNREAD" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => "unread_mid")), "~MESSAGE_UNREAD" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => "unread_mid")), "USER_START" => CComponentEngine::MakePathFromTemplate( $arParams["URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["USER_START_ID"])), "~USER_START" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["USER_START_ID"])), "LAST_POSTER" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["LAST_POSTER_ID"])), "~LAST_POSTER" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["LAST_POSTER_ID"])), "MODERATE_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE_APPR"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"])), "~MODERATE_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE_APPR"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"]))); $res["TopicStatus"] = "OLD"; if ($res["APPROVED"] != "Y") { $res["TopicStatus"] = "NA"; } elseif ($res["STATE"] == "L") { $res["TopicStatus"] = "MOVED"; $topicLinks[count($arResult["Topics"])] = $res["TOPIC_ID"]; } /*******************************************************************/ if($arResult["PERMISSION"] >= "Q") { $res["LAST_POSTER_ID"] = $res["ABS_LAST_POSTER_ID"]; $res["LAST_POST_DATE"] = $res["ABS_LAST_POST_DATE"]; $res["LAST_POSTER_NAME"] = $res["ABS_LAST_POSTER_NAME"]; $res["LAST_MESSAGE_ID"] = $res["ABS_LAST_MESSAGE_ID"]; $res["mCnt"] = intVal($res["POSTS_UNAPPROVED"]); $res["numMessages"] = $res["POSTS"] + $res["mCnt"]; $res["mCntURL"] = $res["URL"]["MODERATE_MESSAGE"]; } else { $res["numMessages"] = $res["POSTS"]; } /*******************************************************************/ $res["numMessages"] = $res["numMessages"] + 1; /*******************************************************************/ $res["pages"] = ForumShowTopicPages($res["numMessages"], $res["URL"]["TOPIC"], "PAGEN_".$arParams["PAGEN"], intVal($arParams["MESSAGES_PER_PAGE"])); $res["PAGES_COUNT"] = intVal(ceil($res["numMessages"]/$arParams["MESSAGES_PER_PAGE"])); /*******************************************************************/ $res["TITLE"] = $parser->wrap_long_words($res["TITLE"]); $res["DESCRIPTION"] = $parser->wrap_long_words($res["DESCRIPTION"]); $res["USER_START_NAME"] = $parser->wrap_long_words($res["USER_START_NAME"]); $res["LAST_POSTER_NAME"] = $parser->wrap_long_words($res["LAST_POSTER_NAME"]); $res["LAST_POST_DATE"] = CForumFormat::DateFormat($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($res["LAST_POST_DATE"], CSite::GetDateFormat())); $res["START_DATE"] = CForumFormat::DateFormat($arParams["DATE_FORMAT"], MakeTimeStamp($res["START_DATE"], CSite::GetDateFormat())); /************** For custom template ********************************/ $res["read"] = $res["URL"]["TOPIC"]; $res["read_last_unread"] = $res["URL"]["MESSAGE_UNREAD"]; $res["read_last_message"] = $res["URL"]["LAST_MESSAGE"]; $res["USER_START_HREF"] = $res["URL"]["USER_START"]; $res["LAST_POSTER_HREF"] = $res["URL"]["LAST_POSTER_HREF"]; $res["author_profile"] = $res["URL"]["LAST_POSTER_HREF"]; /************** For custom template/********************************/ $arResult["Topics"][] = $res; } if (count($topicLinks) > 0) { $db_res1 = CForumTopic::GetListEx(array("SORT"=>"ASC"), array("@ID" => $topicLinks)); $topicLinks1 = array(); while ($res = $db_res1->GetNext()) { $key = array_search($res["ID"], $topicLinks); if (array_key_exists($key, $arResult["Topics"])) { $arResult["Topics"][$key]["URL"] = array_merge($arResult["Topics"][$key]["URL"], array( "TOPIC" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_READ"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => "s")), "~TOPIC" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_READ"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => "s")), "LAST_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => intVal($res["LAST_MESSAGE_ID"]))), "~LAST_MESSAGE" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => intVal($res["LAST_MESSAGE_ID"]))), "MESSAGE_UNREAD" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => "unread_mid")), "~MESSAGE_UNREAD" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"], array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => "unread_mid")) )); } } } /******************************************************************* CACHE *******************************************************************/ if (($PAGEN == null) && ($arParams["CACHE_TIME"] > 0) && defined("BX_COMP_MANAGED_CACHE")) { $cache->StartDataCache($arParams["CACHE_TIME"], $cache_id, $cache_path); CForumCacheManager::SetTag($cache_path, "forum_msg_count".$arParams['FID']); CForumCacheManager::SetTag($cache_path, "forum_".$arParams['FID']); $cache->EndDataCache(array( "Topics" => $arResult["Topics"], "NAV_STRING" => $arResult['NAV_STRING'], "NAV_PAGE" => $arResult['NAV_PAGE'], )); } /******************************************************************* / CACHE *******************************************************************/ } $topicCount = sizeof($arResult['Topics']); for ($topicID = 0; $topicID < $topicCount; $topicID++) { $tres = &$arResult['Topics'][$topicID]; if ( ($tres["TopicStatus"] == "OLD") && NewMessageTopic( $tres["FORUM_ID"], $tres["ID"], ($arResult["PERMISSION"] < "Q" ? $tres["LAST_POST_DATE"] : $tres["ABS_LAST_POST_DATE"]), $tres["LAST_VISIT"] ) ) { $tres["TopicStatus"] = "NEW"; } } $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"]); endif; /************** 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()); } endif; /******************************************************************** /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"; $arResult["sessid"] = bitrix_sessid_get(); /************** For custom template/********************************/ $this->IncludeComponentTemplate(); if ($arParams["SET_TITLE"] == "Y") $APPLICATION->SetTitle($arResult["FORUM"]["NAME"]); if ($arParams["SET_NAVIGATION"] != "N"): foreach ($arResult["GROUP_NAVIGATION"] as $key => $res): $APPLICATION->AddChainItem($res["NAME"], $res["URL"]["~GROUP"]); endforeach; $APPLICATION->AddChainItem($arResult["FORUM"]["NAME"]); endif; ?>