• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/message.php
  • Класс: CAllForumMessage
  • Вызов: CAllForumMessage::GetByIDEx
static function GetByIDEx($ID, $arAddParams = array())
{
	global $DB;
	$ID = intval($ID);
	$res = false;
	if ($ID <= 0)
		return false;

	$arAddParams = (is_array($arAddParams) ? $arAddParams : array($arAddParams));
	$arAddParams["GET_TOPIC_INFO"] = (isset($arAddParams["GET_TOPIC_INFO"]) && $arAddParams["GET_TOPIC_INFO"] == "Y" ? "Y" : "N");
	$arAddParams["FILTER_TOPIC_INFO"] = (isset($arAddParams["FILTER_TOPIC_INFO"]) && $arAddParams["FILTER_TOPIC_INFO"] == "N" ? "N" : "Y");
	$arAddParams["GET_FORUM_INFO"] = (isset($arAddParams["GET_FORUM_INFO"]) && $arAddParams["GET_FORUM_INFO"] == "Y" ? "Y" : "N");
	$arAddParams["FILTER_FORUM_INFO"] = (isset($arAddParams["FILTER_FORUM_INFO"]) && $arAddParams["FILTER_FORUM_INFO"] == "N" ? "N" : "Y");
	$arAddParams["FILTER_MESSAGE_INFO"] = (isset($arAddParams["FILTER_MESSAGE_INFO"]) && $arAddParams["FILTER_MESSAGE_INFO"] == "N" ? "N" : "Y");
	if (COption::GetOptionString("forum", "FILTER", "Y") == "Y"):
		$arAddParams["FILTER"] = (is_set($arAddParams, "FILTER") ? $arAddParams["FILTER"] : "P");
		$arAddParams["FILTER"] = ($arAddParams["FILTER"] == "Y" || $arAddParams["FILTER"] == "P" ? $arAddParams["FILTER"] : "N");
	else:
		$arAddParams["FILTER"] = "N";
	endif;
	if ($arAddParams["FILTER"] == "N"):
		$arAddParams["FILTER_TOPIC_INFO"] = "N";
		$arAddParams["FILTER_FORUM_INFO"] = "N";
		$arAddParams["FILTER_MESSAGE_INFO"] = "N";
	elseif ($arAddParams["FILTER"] == "P"):
		$arAddParams["FILTER_MESSAGE_INFO"] = "N";
	endif;

	$arSqlSelect = array();
	$arSqlFrom = array();
	if ($arAddParams["GET_TOPIC_INFO"] == "Y")
	{
		$arSqlSelect[] = CForumTopic::GetSelectFields(array("sPrefix" => "FT_", "sReturnResult" => "string"));
		if ($arAddParams["FILTER_TOPIC_INFO"] != "N")
			$arSqlSelect[] = "FT.HTML as FT_HTML";
		$arSqlSelect[] = "FT.XML_ID as FT_XML_ID";
		$arSqlFrom[] =  "INNER JOIN b_forum_topic FT ON (FM.TOPIC_ID = FT.ID)";
	}
	if ($arAddParams["GET_FORUM_INFO"] == "Y")
	{
		$arSqlSelect[] = CForumNew::GetSelectFields(array("sPrefix" => "F_", "sReturnResult" => "string"));
		if ($arAddParams["FILTER_FORUM_INFO"] != "N")
			$arSqlSelect[] = "F.HTML as F_HTML";
		$arSqlFrom[] =  "INNER JOIN b_forum F ON (FM.FORUM_ID = F.ID)";
	}

	$strSql =
		"SELECT FM.*, ".$DB->DateToCharFunction("FM.POST_DATE", "FULL")." as POST_DATE,
			".$DB->DateToCharFunction("FM.EDIT_DATE", "FULL")." as EDIT_DATE,
			FU.SHOW_NAME, FU.DESCRIPTION, FU.NUM_POSTS, FU.POINTS as NUM_POINTS, FU.SIGNATURE, FU.AVATAR, FU.RANK_ID,
			".$DB->DateToCharFunction("FU.DATE_REG", "SHORT")." as DATE_REG,
			U.EMAIL, U.PERSONAL_ICQ, U.LOGIN, U.NAME, U.SECOND_NAME, U.LAST_NAME, U.PERSONAL_PHOTO".
			(!empty($arSqlSelect) ? ", ".implode(", ", $arSqlSelect) : "")."
		FROM b_forum_message FM
			LEFT JOIN b_forum_user FU ON (FM.AUTHOR_ID = FU.USER_ID)
			LEFT JOIN b_user U ON (FM.AUTHOR_ID = U.ID)
			".implode(" ", $arSqlFrom)."
		WHERE FM.ID = ".$ID."";
	$db_res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); if ($db_res && $res = $db_res->Fetch()): if ($arAddParams["FILTER_MESSAGE_INFO"] == "N"): unset($res["HTML"]); endif; if ($arAddParams["GET_TOPIC_INFO"] == "Y" && COption::GetOptionString("forum", "FILTER", "Y") == "Y"): $arTopic = array(); foreach ($res as $key => $val): if (mb_substr($key, 0, 3) == "FT_") $arTopic[mb_substr($key, 3)] = $val; endforeach; if (!empty($arTopic)): $GLOBALS["FORUM_CACHE"]["TOPIC"][intval($res["TOPIC_INFO"]["ID"])] = $arTopic; $db_res_filter = new CDBResult; $db_res_filter->InitFromArray(array($arTopic)); $db_res_filter = new _CTopicDBResult($db_res_filter); if ($res_filter = $db_res_filter->Fetch()) $GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][intval($res["TOPIC_INFO"]["ID"])] = $res_filter; endif; endif; $db_res = new CDBResult; $db_res->InitFromArray(array($res)); $db_res = new _CMessageDBResult($db_res, $arAddParams); $res = $db_res->Fetch(); if ($arAddParams["GET_TOPIC_INFO"] == "Y" || $arAddParams["GET_FORUM_INFO"] == "Y"): $res["TOPIC_INFO"] = array(); $res["FORUM_INFO"] = array(); $res["MESSAGE_INFO"] = array(); foreach ($res as $key => $val): if (mb_substr($key, 0, 3) == "FT_") $res["TOPIC_INFO"][mb_substr($key, 3)] = $val; elseif (mb_substr($key, 0, 2) == "F_") $res["FORUM_INFO"][mb_substr($key, 2)] = $val; else $res["MESSAGE_INFO"][$key] = $val; endforeach; if (COption::GetOptionString("forum", "FILTER", "Y") != "Y" && !empty($res["TOPIC_INFO"])): $GLOBALS["FORUM_CACHE"]["TOPIC"][intval($res["TOPIC_INFO"]["ID"])] = $res["TOPIC_INFO"]; endif; if (!empty($res["FORUM_INFO"])): $GLOBALS["FORUM_CACHE"]["FORUM"][intval($res["FORUM_INFO"]["ID"])] = $res["FORUM_INFO"]; endif; endif; if (isset($arAddParams["getFiles"]) && $arAddParams["getFiles"] == "Y" && !empty($res)) $res["FILES"] = CForumFiles::getByMessageID($ID); return $res; endif; return false; }