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

	$arAddParams = (is_array($arAddParams) ? $arAddParams : array($arAddParams));
	$arAddParams["GET_FORUM_INFO"] = ($arAddParams["GET_FORUM_INFO"] == "Y" ? "Y" : "N");
	$arSQL = array("select" => array(), "join" => array());
	if (!empty($arAddParams["sNameTemplate"]))
	{
		$arSQL = array_merge_recursive(
			CForumUser::GetFormattedNameFieldsForSelect(array_merge(
				$arAddParams, array(
				"sUserTablePrefix" => "U_START.",
				"sForumUserTablePrefix" => "FU_START.",
				"sFieldName" => "USER_START_NAME_FRMT",
				"sUserIDFieldName" => "FT.USER_START_ID"))),
			CForumUser::GetFormattedNameFieldsForSelect(array_merge(
				$arAddParams, array(
				"sUserTablePrefix" => "U_LAST.",
				"sForumUserTablePrefix" => "FU_LAST.",
				"sFieldName" => "LAST_POSTER_NAME_FRMT",
				"sUserIDFieldName" => "FT.LAST_POSTER_ID"))),
			CForumUser::GetFormattedNameFieldsForSelect(array_merge(
				$arAddParams, array(
				"sUserTablePrefix" => "U_ABS_LAST.",
				"sForumUserTablePrefix" => "FU_ABS_LAST.",
				"sFieldName" => "ABS_LAST_POSTER_NAME_FRMT",
				"sUserIDFieldName" => "FT.ABS_LAST_POSTER_ID"))));
	}
	if ($arAddParams["GET_FORUM_INFO"] == "Y")
	{
		$arSQL["select"][] = CForumNew::GetSelectFields(array("sPrefix" => "F_", "sReturnResult" => "string"));
		$arSQL["join"][] =  "INNER JOIN b_forum F ON (FT.FORUM_ID = F.ID)";
	}
	$arSQL["select"] = (!empty($arSQL["select"]) ? ",nt".implode(",nt", $arSQL["select"]) : "");
	$arSQL["join"] = (!empty($arSQL["join"]) ? "nt".implode("n", $arSQL["join"]) : "");

	$strSql =
		"SELECT FT.*,n".
		"	FT.TITLE_SEO as TITLE_SEO_REAL, ".CForumNew::Concat("-", array("FT.ID", "FT.TITLE_SEO"))." as TITLE_SEO, n".
		"	".$DB->DateToCharFunction("FT.START_DATE", "FULL")." as START_DATE, n".
		"	".$DB->DateToCharFunction("FT.LAST_POST_DATE", "FULL")." as LAST_POST_DATE, n".
		"	'' as IMAGE, '' as IMAGE_DESCR".$arSQL["select"]."n".
		"FROM b_forum_topic FT n".
		"	".$arSQL["join"]."n".
		"WHERE FT.ID = ".$ID;
	$db_res = new _CTopicDBResult($DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__)); if ($res = $db_res->Fetch()) { if (is_array($res)) { // Cache topic data for hits if ($arAddParams["GET_FORUM_INFO"] == "Y") { $res["TOPIC_INFO"] = array(); $res["FORUM_INFO"] = array(); foreach ($res as $key => $val) { if (mb_substr($key, 0, 2) == "F_") $res["FORUM_INFO"][mb_substr($key, 2)] = $val; else $res["TOPIC_INFO"][$key] = $val; } if (!empty($res["TOPIC_INFO"])) { $GLOBALS["FORUM_CACHE"]["TOPIC"][intval($res["TOPIC_INFO"]["ID"])] = $res["TOPIC_INFO"]; if (COption::GetOptionString("forum", "FILTER", "Y") == "Y") { $db_res_filter = new CDBResult; $db_res_filter->InitFromArray(array($res["TOPIC_INFO"])); $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; } } if (!empty($res["FORUM_INFO"])) { $GLOBALS["FORUM_CACHE"]["FORUM"][intval($res["FORUM_INFO"]["ID"])] = $res["FORUM_INFO"]; } } } return $res; } return false; }