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

/bitrix/components/bitrix/forum.topic.read/action.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 364 lines | 343 code | 9 blank | 12 comment | 91 complexity | bed94350674dfe08123ddfdad6171570 MD5 | raw file
  1. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
  2. /**
  3. * @global CMain $APPLICATION
  4. * @global CUser $GLOBALS["USER"]
  5. * @param array $arParams
  6. * @param array $arResult
  7. * @param string $componentName
  8. * @param string $action
  9. * @param string $s_action
  10. * @param CBitrixComponent $this
  11. */
  12. if (!CModule::IncludeModule("forum"))
  13. return 0;
  14. $this->IncludeComponentLang("action.php");
  15. if ((strlen($action) > 0 || strlen($s_action) > 0) && ($_REQUEST["MESSAGE_MODE"] != "VIEW") && check_bitrix_sessid())
  16. {
  17. //*************************!Subscribe***************************************************
  18. if ($s_action == 'SUBSCRIBE' || $s_action == 'UNSUBSCRIBE')
  19. {
  20. if ($_REQUEST["TOPIC_UNSUBSCRIBE"] == "Y")
  21. ForumUnsubscribeNewMessagesEx($arParams["FID"], $arParams["TID"], "N", $strErrorMessage, $strOKMessage);
  22. if ($_REQUEST["FORUM_UNSUBSCRIBE"] == "Y")
  23. ForumUnsubscribeNewMessagesEx($arParams["FID"], 0, "N", $strErrorMessage, $strOKMessage);
  24. if ($_REQUEST["TOPIC_SUBSCRIBE"] == "Y")
  25. ForumSubscribeNewMessagesEx($arParams["FID"], $arParams["TID"], "N", $strErrorMessage, $strOKMessage);
  26. if ($_REQUEST["FORUM_SUBSCRIBE"] == "Y")
  27. ForumSubscribeNewMessagesEx($arParams["FID"], 0, "N", $strErrorMessage, $strOKMessage);
  28. if (empty($strErrorMessage) && ($_SERVER['REQUEST_METHOD']=='GET'))
  29. LocalRedirect($APPLICATION->GetCurPageParam("", array("TOPIC_UNSUBSCRIBE", "FORUM_UNSUBSCRIBE", "TOPIC_SUBSCRIBE", "FORUM_SUBSCRIBE", "sessid")));
  30. }
  31. $result = false;
  32. //*************************!Subscribe***************************************************
  33. if (strlen($action) > 0 && $action != "SUBSCRIBE" && $action != "UNSUBSCRIBE" )
  34. {
  35. $arFields = array();
  36. $url = false;
  37. $code = false;
  38. $message = array();
  39. if ($_SERVER['REQUEST_METHOD'] == "POST"):
  40. $message = (!empty($_POST["MID_ARRAY"]) ? $_POST["MID_ARRAY"] : $_POST["MID"]);
  41. if ((empty($message) || $message == "s") && !empty($_POST["message_id"])):
  42. $message = $_POST["message_id"];
  43. endif;
  44. else:
  45. $message = (!empty($_REQUEST["MID_ARRAY"]) ? $_REQUEST["MID_ARRAY"] : $_REQUEST["MID"]);
  46. if ((empty($message) || $message == "s") && !empty($_REQUEST["message_id"])):
  47. $message = $_REQUEST["message_id"];
  48. endif;
  49. endif;
  50. switch ($action)
  51. {
  52. case "EDIT_TOPIC":
  53. $MID = 0;
  54. $db_res = CForumMessage::GetList(array("ID"=>"ASC"), array("TOPIC_ID"=>$arParams["TID"]), false, 1);
  55. if (($db_res) && ($res = $db_res->Fetch()))
  56. $MID = intVal($res["ID"]);
  57. if ($MID > 0)
  58. {
  59. $url = ForumAddPageParams(
  60. CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_NEW"], array("FID" => $arParams["FID"])),
  61. array("TID" => $arParams["TID"], "TITLE_SEO" => $arResult["TOPIC"]["TITLE_SEO"], "MID" => $MID, "MESSAGE_TYPE" => "EDIT"), false, false);
  62. LocalRedirect($url);
  63. }
  64. break;
  65. case "REPLY":
  66. $arFields = array(
  67. "FID" => $arParams["FID"],
  68. "TID" => $arParams["TID"],
  69. "POST_MESSAGE" => $_POST["POST_MESSAGE"],
  70. "AUTHOR_NAME" => $_POST["AUTHOR_NAME"],
  71. "AUTHOR_EMAIL" => $_POST["AUTHOR_EMAIL"],
  72. "USE_SMILES" => $_POST["USE_SMILES"],
  73. "captcha_word" => $_POST["captcha_word"],
  74. "captcha_code" => $_POST["captcha_code"],
  75. "NAME_TEMPLATE" => $arParams["NAME_TEMPLATE"]
  76. );
  77. if (!empty($_FILES["ATTACH_IMG"]))
  78. {
  79. $arFields["ATTACH_IMG"] = $_FILES["ATTACH_IMG"];
  80. }
  81. else
  82. {
  83. $arFiles = array();
  84. if (!empty($_REQUEST["FILES"]))
  85. {
  86. foreach ($_REQUEST["FILES"] as $key):
  87. $arFiles[$key] = array("FILE_ID" => $key);
  88. if (!in_array($key, $_REQUEST["FILES_TO_UPLOAD"]))
  89. $arFiles[$key]["del"] = "Y";
  90. endforeach;
  91. }
  92. if (!empty($_FILES))
  93. {
  94. $res = array();
  95. foreach ($_FILES as $key => $val):
  96. if (substr($key, 0, strlen("FILE_NEW")) == "FILE_NEW" && !empty($val["name"])):
  97. $arFiles[] = $_FILES[$key];
  98. endif;
  99. endforeach;
  100. }
  101. if (!empty($arFiles))
  102. $arFields["FILES"] = $arFiles;
  103. }
  104. $url = CComponentEngine::MakePathFromTemplate(
  105. $arParams["~URL_TEMPLATES_MESSAGE"],
  106. array(
  107. "FID" => $arParams["FID"],
  108. "TID" => $arParams["TID"],
  109. "TITLE_SEO" => $arResult["TOPIC"]["TITLE_SEO"],
  110. "MID"=>"#result#"));
  111. break;
  112. case "VOTE4USER":
  113. $arFields = array(
  114. "UID" => $_GET["UID"],
  115. "VOTES" => $_GET["VOTES"],
  116. "VOTE" => (($_GET["VOTES_TYPE"]=="U") ? True : False));
  117. $url = CComponentEngine::MakePathFromTemplate(
  118. $arParams["~URL_TEMPLATES_MESSAGE"],
  119. array("FID" => $arParams["FID"],
  120. "TID" => $arParams["TID"],
  121. "TITLE_SEO" => $arResult["TOPIC"]["TITLE_SEO"],
  122. "MID" => (intVal($_REQUEST["MID"]) > 0 ? $_REQUEST["MID"] : "s")
  123. ));
  124. break;
  125. case "HIDE":
  126. case "SHOW":
  127. case "FORUM_MESSAGE2SUPPORT":
  128. $arFields = array("MID" => $message);
  129. $mid = (is_array($message) ? $message[0] : $message);
  130. $url = CComponentEngine::MakePathFromTemplate(
  131. $arParams["~URL_TEMPLATES_MESSAGE"],
  132. array(
  133. "FID" => $arParams["FID"],
  134. "TID" => $arParams["TID"],
  135. "TITLE_SEO" => $arResult["TOPIC"]["TITLE_SEO"],
  136. "MID" => (!empty($mid) ? $mid : "s")
  137. ));
  138. if ($action == "FORUM_MESSAGE2SUPPORT")
  139. {
  140. $url = "/bitrix/admin/ticket_edit.php?ID=#result#&amp;lang=".LANGUAGE_ID;
  141. }
  142. break;
  143. case "DEL":
  144. $arFields = array("MID" => $message);
  145. $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_MESSAGE"],
  146. array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "TITLE_SEO" => $arResult["TOPIC"]["TITLE_SEO"], "MID" => "#MID#"));
  147. break;
  148. case "SET_ORDINARY":
  149. case "SET_TOP":
  150. case "STATE_Y":
  151. case "STATE_N":
  152. if ($action == "STATE_Y")
  153. $action = "OPEN";
  154. elseif ($action == "STATE_N")
  155. $action = "CLOSE";
  156. elseif ($action == "SET_ORDINARY")
  157. $action = "ORDINARY";
  158. else
  159. $action = "TOP";
  160. $arFields = array("TID" => $arParams["TID"]);
  161. $url = CComponentEngine::MakePathFromTemplate(
  162. $arParams["~URL_TEMPLATES_MESSAGE"],
  163. array("FID" => $arParams["FID"],
  164. "TID" => $arParams["TID"],
  165. "TITLE_SEO" => $arResult["TOPIC"]["TITLE_SEO"],
  166. "MID" => ($arParams["MID"] > 0 ? $arParams["MID"] : "s")));
  167. break;
  168. case "HIDE_TOPIC":
  169. case "SHOW_TOPIC":
  170. $arFields = array("TID" => $arParams["TID"]);
  171. $url = CComponentEngine::MakePathFromTemplate(
  172. $arParams["~URL_TEMPLATES_MESSAGE"],
  173. array("FID" => $arParams["FID"],
  174. "TID" => $arParams["TID"],
  175. "TITLE_SEO" => $arResult["TOPIC"]["TITLE_SEO"],
  176. "MID" => ($arParams["MID"] > 0 ? $arParams["MID"] : "s")));
  177. break;
  178. case "DEL_TOPIC":
  179. $arFields = array("TID" => $arParams["TID"]);
  180. $url = CComponentEngine::MakePathFromTemplate(
  181. $arParams["~URL_TEMPLATES_LIST"],
  182. array("FID" => $arParams["FID"]));
  183. break;
  184. case "FORUM_UNSUBSCRIBE":
  185. case "TOPIC_UNSUBSCRIBE":
  186. case "FORUM_SUBSCRIBE":
  187. case "TOPIC_SUBSCRIBE":
  188. case "FORUM_SUBSCRIBE_TOPICS":
  189. $arFields = array(
  190. "FID" => $arParams["FID"],
  191. "TID" => (($action=="FORUM_SUBSCRIBE")?0:$arParams["TID"]),
  192. "TITLE_SEO" => $arResult["TOPIC"]["TITLE_SEO"],
  193. "NEW_TOPIC_ONLY" => (($action=="FORUM_SUBSCRIBE_TOPICS")?"Y":"N"));
  194. $url = ForumAddPageParams(
  195. CComponentEngine::MakePathFromTemplate(
  196. $arParams["~URL_TEMPLATES_SUBSCR_LIST"],
  197. array()
  198. ),
  199. array("FID" => $arParams["FID"], "TID" => $arParams["TID"]));
  200. break;
  201. case "MOVE":
  202. $tmp_message = ForumDataToArray($message);
  203. $url = CComponentEngine::MakePathFromTemplate(
  204. $arParams["~URL_TEMPLATES_MESSAGE_MOVE"],
  205. array("FID" => $arParams["FID"], "TID" => $arParams["TID"], "MID" => implode(",", $tmp_message)));
  206. break;
  207. case "MOVE_TOPIC":
  208. $url = CComponentEngine::MakePathFromTemplate(
  209. $arParams["~URL_TEMPLATES_TOPIC_MOVE"],
  210. array("FID" => $arParams["FID"], "TID" => $arParams["TID"]));
  211. break;
  212. }
  213. if ($action != "MOVE" && $action != "MOVE_TOPIC")
  214. {
  215. $result = ForumActions($action, $arFields, $strErrorMessage, $strOKMessage);
  216. if (($action == "REPLY" || $action == "EDIT_TOPIC") && ($arParams["AUTOSAVE"]))
  217. $arParams["AUTOSAVE"]->Reset();
  218. if ($action == "DEL")
  219. {
  220. $arFields = CForumTopic::GetByID($arParams["TID"]);
  221. if (empty($arFields))
  222. {
  223. $url = CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_LIST"],
  224. array("FID" => $arParams["FID"]));
  225. $action = "del_topic";
  226. }
  227. else
  228. {
  229. $mid = intVal($message);
  230. if (is_array($message))
  231. {
  232. sort($message);
  233. $mid = array_pop($message);
  234. }
  235. $arFilter = array("TOPIC_ID"=>$arParams["TID"], ">ID" => $mid);
  236. if ($arResult["PERMISSION"] < "Q")
  237. $arFilter["APPROVED"] = "Y";
  238. $db_res = CForumMessage::GetList(array("ID" => "ASC"), $arFilter, false, 1);
  239. if ($db_res && $res = $db_res->Fetch()):
  240. $mid = $res["ID"];
  241. else:
  242. unset($arFilter[">ID"]);
  243. $arFilter["<ID"] = $mid;
  244. $db_res = CForumMessage::GetList(array("ID" => "DESC"), $arFilter, false, 1);
  245. if ($db_res && $res = $db_res->Fetch())
  246. $mid = $res["ID"];
  247. endif;
  248. $mid = (intVal($mid) > 0 ? $mid : "s");
  249. $url = str_replace("#MID#", $mid, $url);
  250. }
  251. }
  252. elseif ($action == "VOTE4USER")
  253. {
  254. $result = true;
  255. }
  256. elseif ($action == "REPLY")
  257. {
  258. $arParams["MID"] = intVal($result);
  259. }
  260. $url = str_replace("#result#", $result, $url);
  261. }
  262. else
  263. $result = true;
  264. $action = strToLower($action);
  265. }
  266. if (!$result)
  267. {
  268. $bVarsFromForm = true;
  269. }
  270. else
  271. {
  272. $arNote = array(
  273. "code" => $action,
  274. "title" => $strOKMessage,
  275. "link" => $url);
  276. }
  277. $arResult['RESULT'] = $result;
  278. if (isset($_REQUEST['AJAX_CALL']) && in_array($action, array('show', 'hide', 'del')))
  279. {
  280. $GLOBALS['APPLICATION']->RestartBuffer();
  281. $arRes = array('status' => (!$result === false), 'message' => ($result ? $strOKMessage : $strErrorMessage));
  282. echo CUtil::PhpToJSObject($arRes);
  283. die();
  284. }
  285. }
  286. elseif ((strlen($action) > 0) && ($_REQUEST["MESSAGE_MODE"] != "VIEW") && !check_bitrix_sessid())
  287. {
  288. $bVarsFromForm = true;
  289. $strErrorMessage = GetMessage("F_ERR_SESS_FINISH");
  290. }
  291. elseif($_POST["MESSAGE_MODE"] == "VIEW")
  292. {
  293. $View = true;
  294. $bVarsFromForm = true;
  295. $arAllow = array(
  296. "HTML" => $arResult["FORUM"]["ALLOW_HTML"],
  297. "ANCHOR" => $arResult["FORUM"]["ALLOW_ANCHOR"],
  298. "BIU" => $arResult["FORUM"]["ALLOW_BIU"],
  299. "IMG" => $arResult["FORUM"]["ALLOW_IMG"],
  300. "VIDEO" => $arResult["FORUM"]["ALLOW_VIDEO"],
  301. "LIST" => $arResult["FORUM"]["ALLOW_LIST"],
  302. "QUOTE" => $arResult["FORUM"]["ALLOW_QUOTE"],
  303. "CODE" => $arResult["FORUM"]["ALLOW_CODE"],
  304. "FONT" => $arResult["FORUM"]["ALLOW_FONT"],
  305. "SMILES" => $arResult["FORUM"]["ALLOW_SMILES"],
  306. "UPLOAD" => $arResult["FORUM"]["ALLOW_UPLOAD"],
  307. "NL2BR" => $arResult["FORUM"]["ALLOW_NL2BR"]);
  308. $arAllow["SMILES"] = ($_POST["USE_SMILES"]!="Y" ? "N" : $arResult["FORUM"]["ALLOW_SMILES"]);
  309. $arFields = array(
  310. "FORUM_ID" => intVal($arParams["FID"]),
  311. "TOPIC_ID" => intVal($arParams["TID"]),
  312. "MESSAGE_ID" => intVal($arParams["MID"]),
  313. "USER_ID" => intVal($GLOBALS["USER"]->GetID()));
  314. $arFiles = array();
  315. $arFilesExists = array();
  316. $res = array();
  317. foreach ($_FILES as $key => $val):
  318. if (substr($key, 0, strlen("FILE_NEW")) == "FILE_NEW" && !empty($val["name"])):
  319. $arFiles[] = $_FILES[$key];
  320. endif;
  321. endforeach;
  322. foreach ($_REQUEST["FILES"] as $key => $val)
  323. {
  324. if (!in_array($val, $_REQUEST["FILES_TO_UPLOAD"]))
  325. {
  326. $arFiles[$val] = array("FILE_ID" => $val, "del" => "Y");
  327. unset($_REQUEST["FILES"][$key]);
  328. unset($_REQUEST["FILES_TO_UPLOAD"][$key]);
  329. }
  330. else
  331. {
  332. $arFilesExists[$val] = array("FILE_ID" => $val);
  333. }
  334. }
  335. if (!empty($arFiles))
  336. {
  337. $res = CForumFiles::Save($arFiles, $arFields);
  338. $res1 = $GLOBALS['APPLICATION']->GetException();
  339. if ($res1):
  340. $strErrorMessage .= $res1->GetString();
  341. endif;
  342. }
  343. $res = is_array($res) ? $res : array();
  344. foreach ($res as $key => $val)
  345. $arFilesExists[$key] = $val;
  346. $arFilesExists = array_keys($arFilesExists);
  347. sort($arFilesExists);
  348. $arResult["MESSAGE_VIEW"]["FILES"] = $_REQUEST["FILES"] = $arFilesExists;
  349. $arResult["POST_MESSAGE_VIEW"] = $parser->convert($_POST["POST_MESSAGE"], $arAllow, "html", $arResult["MESSAGE_VIEW"]["FILES"]);
  350. $arResult["MESSAGE_VIEW"]["FILES_PARSED"] = $parser->arFilesIDParsed;
  351. $arResult["MESSAGE_VIEW"]["AUTHOR_NAME"] = ($USER->IsAuthorized() || empty($_POST["AUTHOR_NAME"]) ? $arResult["USER"]["SHOW_NAME"] : trim($_POST["AUTHOR_NAME"]));
  352. $arResult["MESSAGE_VIEW"]["TEXT"] = $arResult["POST_MESSAGE_VIEW"];
  353. $arResult["VIEW"] = "Y";
  354. }
  355. ?>