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;
}