- Модуль: 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;
}