PageRenderTime 44ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/components/bitrix/forum.comment.last/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 277 lines | 228 code | 21 blank | 28 comment | 47 complexity | 35e9de0361ede7a700c55fb24674402b MD5 | raw file
  1. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
  2. if (!CModule::IncludeModule("forum")):
  3. ShowError(GetMessage("F_NO_MODULE"));
  4. return 0;
  5. endif;
  6. CPageOption::SetOptionString("main", "nav_page_in_session", "N");
  7. $orderIndex = InitSortingEx();
  8. global $by, $order;
  9. /********************************************************************
  10. Input params
  11. ********************************************************************/
  12. /***************** BASE ********************************************/
  13. $arParams["FID"] = (is_array($arParams["FID"]) && !empty($arParams["FID"]) ? $arParams["FID"] : array());
  14. /***************** URL *********************************************/
  15. $URL_NAME_DEFAULT = array(
  16. "index" => "",
  17. "list" => "PAGE_NAME=list&FID=#FID#",
  18. "read" => "PAGE_NAME=read&FID=#FID#&TID=#TID#",
  19. "message" => "PAGE_NAME=message&FID=#FID#&TID=#TID#&MID=#MID#",
  20. "profile_view" => "PAGE_NAME=profile_view&UID=#UID#");
  21. if (empty($arParams["URL_TEMPLATES_MESSAGE"]) && !empty($arParams["URL_TEMPLATES_READ"]))
  22. $arParams["URL_TEMPLATES_MESSAGE"] = $arParams["URL_TEMPLATES_READ"];
  23. foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE)
  24. {
  25. if (trim($arParams["URL_TEMPLATES_".mb_strtoupper($URL)]) == '')
  26. $arParams["URL_TEMPLATES_".mb_strtoupper($URL)] = $APPLICATION->GetCurPage()."?".$URL_VALUE;
  27. $arParams["~URL_TEMPLATES_".mb_strtoupper($URL)] = $arParams["URL_TEMPLATES_".mb_strtoupper($URL)];
  28. $arParams["URL_TEMPLATES_".mb_strtoupper($URL)] = htmlspecialcharsbx($arParams["~URL_TEMPLATES_".mb_strtoupper($URL)]);
  29. }
  30. /***************** ADDITIONAL **************************************/
  31. $arParams["COMMENTS_PER_PAGE"] = intval($arParams["COMMENTS_PER_PAGE"] > 0 ? $arParams["COMMENTS_PER_PAGE"] :
  32. COption::GetOptionString("forum", "COMMENTS_PER_PAGE", "10"));
  33. $arParams["SHOW_FORUM_ANOTHER_SITE"] = ($arParams["SHOW_FORUM_ANOTHER_SITE"] == "Y" ? "Y" : "N");
  34. $arParams["DATE_FORMAT"] = trim(empty($arParams["DATE_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")) : $arParams["DATE_FORMAT"]);
  35. $arParams["DATE_TIME_FORMAT"] = trim(empty($arParams["DATE_TIME_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("FULL")) :
  36. $arParams["DATE_TIME_FORMAT"]);
  37. $arParams["SET_NAVIGATION"] = ($arParams["SET_NAVIGATION"] == "Y" ? "Y" : "N");
  38. // $arParams["DISPLAY_PANEL"] = ($arParams["DISPLAY_PANEL"] == "Y" ? "Y" : "N");
  39. /***************** ANOTHER *****************************************/
  40. $arParams["PAGER_DESC_NUMBERING"] = ($arParams["PAGER_DESC_NUMBERING"] == "N" ? "N" : "Y");
  41. $arParams["PAGER_TITLE"] = (empty($arParams["PAGER_TITLE"]) ? GetMessage("FCL_TITLE_NAV") : $arParams["PAGER_TITLE"]);
  42. $arParams["PAGER_TEMPLATE"] = (empty($arParams["PAGER_TEMPLATE"]) ? false : $arParams["PAGER_TEMPLATE"]);
  43. $arParams["PAGER_SHOW_ALWAYS"] = ($arParams["PAGER_SHOW_ALWAYS"] == "Y" ? true : false);
  44. /***************** STANDART ****************************************/
  45. if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
  46. $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
  47. else
  48. $arParams["CACHE_TIME"] = 0;
  49. $arParams["SET_TITLE"] = ($arParams["SET_TITLE"] == "N" ? "N" : "Y");
  50. /********************************************************************
  51. /Input params
  52. ********************************************************************/
  53. $arNavParams = array("nPageSize"=>$arParams["COMMENTS_PER_PAGE"], "bDescPageNumbering"=>($arParams["PAGER_DESC_NUMBERING"] == "Y"));
  54. if ($arParams['SET_NAVIGATION'] == 'N')
  55. $arNavParams['nTopCount'] = $arParams["COMMENTS_PER_PAGE"];
  56. $arNavigation = CDBResult::GetNavParams($arNavParams);
  57. $arSort = array('ID' => 'DESC');
  58. $arFilter = array();
  59. if (!CForumUser::IsAdmin())
  60. $arFilter = array("LID" => SITE_ID, "PERMS" => array($USER->GetGroups(), 'A'), "ACTIVE" => "Y");
  61. elseif ($arParams["SHOW_FORUM_ANOTHER_SITE"] == "N")
  62. $arFilter["LID"] = SITE_ID;
  63. if (!empty($arParams["FID"]))
  64. $arFilter["@ID"] = $arParams["FID"];
  65. // PARSER
  66. $parser = new forumTextParser(LANGUAGE_ID);
  67. $parser->imageWidth = $arParams["IMAGE_SIZE"];
  68. $parser->imageHtmlWidth = $arParams["IMAGE_HTML_SIZE"];
  69. $parser->userPath = $arParams["URL_TEMPLATES_PROFILE_VIEW"];
  70. $parser->userNameTemplate = $arParams["NAME_TEMPLATE"];
  71. $arResult["PARSER"] = $parser;
  72. $arAllow = array(
  73. "HTML" => $arParams["ALLOW_HTML"],
  74. "ANCHOR" => $arParams["ALLOW_ANCHOR"],
  75. "BIU" => $arParams["ALLOW_BIU"],
  76. "IMG" => $arParams["ALLOW_IMG"],
  77. "VIDEO" => $arParams["ALLOW_VIDEO"],
  78. "LIST" => $arParams["ALLOW_LIST"],
  79. "QUOTE" => $arParams["ALLOW_QUOTE"],
  80. "CODE" => $arParams["ALLOW_CODE"],
  81. "FONT" => $arParams["ALLOW_FONT"],
  82. "SMILES" => $arParams["ALLOW_SMILES"],
  83. "NL2BR" => $arParams["ALLOW_NL2BR"],
  84. "TABLE" => $arParams["ALLOW_TABLE"],
  85. "UPLOAD" => $arParams["ALLOW_UPLOAD"],
  86. "ALIGN" => $arParams["ALLOW_ALIGN"],
  87. "USER" => "N"
  88. );
  89. if($this->StartResultCache(false, array($arNavigation, $GLOBALS["USER"]->GetGroups(), $arSort, $arFilter, $orderIndex)))
  90. {
  91. /********************************************************************
  92. Default values
  93. ********************************************************************/
  94. $arResult["TOPIC"] = array();
  95. $arResult["FORUM"] = array();
  96. $arResult["FORUMS"] = array();
  97. $arResult["TOPICS"] = array();
  98. $arForums = array();
  99. $arTopics = array();
  100. /********************************************************************
  101. /Default values
  102. ********************************************************************/
  103. /********************************************************************
  104. Data
  105. ********************************************************************/
  106. $db_res = CForumNew::GetListEx(array(), $arFilter);
  107. if ($db_res && ($res = $db_res->GetNext()))
  108. {
  109. do
  110. {
  111. $res["URL"] = array(
  112. "LIST" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_LIST"], array("FID" => $res["ID"])),
  113. "~LIST" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_LIST"], array("FID" => $res["ID"])));
  114. $res["list"] = $res["URL"]["list"]; // for custom
  115. $arForums[$res["ID"]] = $res;
  116. }while ($res = $db_res->GetNext());
  117. }
  118. if (!empty($arForums))
  119. {
  120. $arTopicsId = Array();
  121. $arMessages = Array();
  122. $db_res_message = CForumMessage::GetListEx(
  123. $arSort,
  124. array("@FORUM_ID" => array_keys($arForums), 'APPROVED' => 'Y', 'NEW_TOPIC' => 'N'),
  125. false, false, $arNavParams
  126. );
  127. if ($db_res)
  128. {
  129. $db_res_message->NavStart($arParams["COMMENTS_PER_PAGE"], false);
  130. $arResult["NAV_STRING"] = $db_res_message->GetPageNavStringEx($navComponentObject, $arParams["PAGER_TITLE"], $arParams["PAGER_TEMPLATE"], $arParams["PAGER_SHOW_ALWAYS"]);
  131. //$arResult["NAV_CACHED_DATA"] = $navComponentObject->GetTemplateCachedData();
  132. $arResult["NAV_RESULT"] = $db_res_message;
  133. while ($res = $db_res_message->GetNext())
  134. {
  135. $res["ALLOW"] = array_merge($arAllow, array("SMILES" => ($res["USE_SMILES"] == "Y" ? $arParams["ALLOW_SMILES"] : "N")));
  136. $res["~POST_MESSAGE_TEXT"] = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $res["~POST_MESSAGE_FILTER"] : $res["~POST_MESSAGE"]);
  137. $parser->arFiles = $arResult["FILES"];
  138. $res["POST_MESSAGE_TEXT"] = $parser->convert($res["~POST_MESSAGE_TEXT"], $res["ALLOW"]);
  139. $res["POST_MESSAGE_TEXT"] = htmlspecialcharsback($res["POST_MESSAGE_TEXT"]);
  140. $res["POST_MESSAGE_TEXT"] = preg_replace("/\[user\s*=\s*([^\]]*)\](.+?)\[\/user\]/is".BX_UTF_PCRE_MODIFIER, "<b>\\2</b>", $res["POST_MESSAGE_TEXT"]);
  141. if ($arParams['TOPIC_POST_MESSAGE_LENGTH'] > 0)
  142. {
  143. $symbols_len = mb_strlen(strip_tags($res["POST_MESSAGE_TEXT"]));
  144. if ($symbols_len > $arParams['TOPIC_POST_MESSAGE_LENGTH'])
  145. {
  146. $strip_text = $parser->strip_words($res["POST_MESSAGE_TEXT"], $arParams['TOPIC_POST_MESSAGE_LENGTH']);
  147. if ($symbols_len > $arParams['TOPIC_POST_MESSAGE_LENGTH'])
  148. $strip_text = $strip_text."...";
  149. $res["POST_MESSAGE_TEXT"] = $parser->closetags($strip_text);
  150. }
  151. }
  152. if (!empty($arParams["NAME_TEMPLATE"]) && $res["SHOW_NAME"] != "Y")
  153. {
  154. $name = CUser::FormatName(
  155. $arParams["NAME_TEMPLATE"],
  156. array(
  157. "NAME" => $res["NAME"],
  158. "LAST_NAME" => $res["LAST_NAME"],
  159. "SECOND_NAME" => $res["SECOND_NAME"],
  160. "LOGIN" => $res["LOGIN"]
  161. ),
  162. true,
  163. false
  164. );
  165. if (!!$name)
  166. {
  167. $res["~AUTHOR_NAME"] = $name;
  168. $res["AUTHOR_NAME"] = htmlspecialcharsbx($name);
  169. }
  170. }
  171. $res["AUTHOR_ID"] = intval($res["AUTHOR_ID"]);
  172. $res["AUTHOR_URL"] = "";
  173. if (!empty($arParams["URL_TEMPLATES_PROFILE_VIEW"]))
  174. {
  175. $res["AUTHOR_URL"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"], array("user_id" => $res["AUTHOR_ID"]));
  176. }
  177. $res["POST_TIMESTAMP"] = MakeTimeStamp($res["POST_DATE"], CSite::GetDateFormat());
  178. $res["POST_TIME"] = FormatDate($FormatDate, $res["POST_TIMESTAMP"]);
  179. $res["POST_DATE"] = CForumFormat::DateFormat($arParams["DATE_TIME_FORMAT"], $res["POST_TIMESTAMP"]);
  180. $arMessages[] = Array(
  181. 'TOPIC_ID' => $res["TOPIC_ID"],
  182. 'FORUM_ID' => $res["FORUM_ID"],
  183. '~POST_MESSAGE_TEXT' => $res["~POST_MESSAGE_TEXT"],
  184. 'POST_MESSAGE_TEXT' => $res["POST_MESSAGE_TEXT"],
  185. 'NEW_TOPIC' => $res["NEW_TOPIC"],
  186. 'POST_DATE' => $res["POST_DATE"],
  187. 'POST_TIME' => $res["POST_TIME"],
  188. 'POST_TIMESTAMP' => $res["POST_TIMESTAMP"],
  189. 'AUTHOR_NAME' => $res["AUTHOR_NAME"],
  190. 'AUTHOR_ID' => $res["AUTHOR_ID"],
  191. 'AUTHOR_URL' => str_replace('#UID#', $res["AUTHOR_ID"], $res["AUTHOR_URL"]),
  192. 'AUTHOR_AVATAR_ID' => $res["PERSONAL_PHOTO"] > 0 ? $res["PERSONAL_PHOTO"] : $res["AVATAR"],
  193. );
  194. $arTopicsId[] = $res['TOPIC_ID'];
  195. }
  196. foreach (array("TITLE", "USER_START_NAME", "POSTS", "VIEWS", "LAST_POST_DATE") as $res):
  197. $arResult["SortingEx"][$res] = SortingEx($res, false, "by".$orderIndex, "order".$orderIndex);
  198. endforeach;
  199. $db_res = CForumTopic::GetListEx(Array('ID' => 'ASC'),
  200. array("@ID" => $arTopicsId, "APPROVED" => "Y"),
  201. false, false);
  202. if ($db_res)
  203. {
  204. while ($res = $db_res->GetNext())
  205. {
  206. if (trim($res["LAST_POST_DATE"]) <> '')
  207. {
  208. $res["LAST_POST_DATE"] = CForumFormat::DateFormat($arParams["DATE_TIME_FORMAT"],
  209. MakeTimeStamp($res["LAST_POST_DATE"], CSite::GetDateFormat()));
  210. }
  211. $res["URL"] = array(
  212. "AUTHOR" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"],
  213. array("UID" => $res["USER_START_ID"])),
  214. "~AUTHOR" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_PROFILE_VIEW"],
  215. array("UID" => $res["USER_START_ID"])),
  216. "READ" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"],
  217. array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => intval($res["LAST_MESSAGE_ID"]))).
  218. "#message".intval($res["LAST_MESSAGE_ID"]),
  219. "~READ" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"],
  220. array("FID" => $res["FORUM_ID"], "TID" => $res["ID"], "TITLE_SEO" => $res["TITLE_SEO"], "MID" => intval($res["LAST_MESSAGE_ID"]))).
  221. "#message".intval($res["LAST_MESSAGE_ID"]));
  222. $res["user_start_id_profile"] = $res["URL"]["AUTHOR"]; // For custom
  223. $res["read"] = $res["URL"]["READ"]; // For custom
  224. $arTopics[$res["ID"]] = $res;
  225. }
  226. }
  227. }
  228. }
  229. $arResult['MESSAGES'] = CForumCacheManager::Compress($arMessages);
  230. $arResult['TOPICS'] = CForumCacheManager::Compress($arTopics);
  231. $arResult['FORUMS'] = CForumCacheManager::Compress($arForums);
  232. $this->EndResultCache();
  233. $arResult['MESSAGES'] = $arMessages;
  234. $arResult['TOPICS'] = $arTopics;
  235. $arResult['FORUMS'] = $arForums;
  236. }
  237. else
  238. {
  239. $arResult['MESSAGES'] = CForumCacheManager::Expand($arResult['MESSAGES']);
  240. $arResult['TOPICS'] = CForumCacheManager::Expand($arResult['TOPICS']);
  241. $arResult['FORUMS'] = CForumCacheManager::Expand($arResult['FORUMS']);
  242. }
  243. $arResult["MESSAGE"] = $arResult["MESSAGES"]; // For custom
  244. $arResult["TOPIC"] = $arResult["TOPICS"]; // For custom
  245. $arResult["FORUM"] = $arResult["FORUMS"]; // For custom
  246. $this->IncludeComponentTemplate();
  247. /********************************************************************
  248. Data
  249. ********************************************************************/
  250. if ($arParams["SET_NAVIGATION"] != "N")
  251. $APPLICATION->AddChainItem(GetMessage("FCL_INDEX"), CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_INDEX"], array()));
  252. if ($arParams["SET_TITLE"] != "N")
  253. $APPLICATION->SetTitle(GetMessage("FCL_TITLE"));
  254. // if($arParams["DISPLAY_PANEL"] == "Y" && $USER->IsAuthorized())
  255. // CForumNew::ShowPanel(0, 0, false);
  256. ?>