- Модуль: forum
- Путь к файлу: ~/bitrix/modules/forum/classes/general/topic.php
- Класс: CAllForumTopic
- Вызов: CAllForumTopic::SetStat
static function SetStat($ID = 0, $arParams = array())
{
global $DB;
$ID = intval($ID);
if ($ID <= 0):
return false;
endif;
$arParams = (is_array($arParams) ? $arParams : array());
$arMessage = (is_array($arParams["MESSAGE"]) ? $arParams["MESSAGE"] : array());
if ($arMessage["TOPIC_ID"] != $ID)
$arMessage = array();
$arFields = array();
if (!empty($arMessage))
{
$arFields = array(
"ABS_LAST_POSTER_ID" => ((intval($arMessage["AUTHOR_ID"])>0) ? $arMessage["AUTHOR_ID"] : false),
"ABS_LAST_POSTER_NAME" => $arMessage["AUTHOR_NAME"],
"ABS_LAST_POST_DATE" => $arMessage["POST_DATE"],
"ABS_LAST_MESSAGE_ID" => $arMessage["ID"]);
if ($arMessage["APPROVED"] == "Y"):
$arFields["APPROVED"] = "Y";
$arFields["LAST_POSTER_ID"] = $arFields["ABS_LAST_POSTER_ID"];
$arFields["LAST_POSTER_NAME"] = $arFields["ABS_LAST_POSTER_NAME"];
$arFields["LAST_POST_DATE"] = $arFields["ABS_LAST_POST_DATE"];
$arFields["LAST_MESSAGE_ID"] = $arFields["ABS_LAST_MESSAGE_ID"];
if ($arMessage["NEW_TOPIC"] != "Y"):
$arFields["=POSTS"] = "POSTS+1";
endif;
else:
$arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED+1";
endif;
}
else
{
$res = CForumMessage::GetList(array(), array("TOPIC_ID" => $ID), "cnt_not_approved");
$res["CNT"] = (intval($res["CNT"]) - intval($res["CNT_NOT_APPROVED"]));
$res["CNT"] = ($res["CNT"] > 0 ? $res["CNT"] : 0);
if (intval($res["ABS_FIRST_MESSAGE_ID"]) > 0 && intval($res["ABS_FIRST_MESSAGE_ID"]) != intval($res["FIRST_MESSAGE_ID"]))
{
$GLOBALS["DB"]->Query("UPDATE b_forum_message SET NEW_TOPIC = (CASE WHEN ID=".intval($res["ABS_FIRST_MESSAGE_ID"])." THEN 'Y' ELSE 'N' END) WHERE TOPIC_ID=".$ID, false, "File: ".__FILE__."
Line: ".__LINE__);
CForumMessage::Reindex($res["ABS_FIRST_MESSAGE_ID"]);
CForumMessage::Reindex($res["FIRST_MESSAGE_ID"]);
}
$arFields = array(
"APPROVED" => ($res["CNT"] > 0 ? "Y" : "N"),
"POSTS" => ($res["CNT"] > 0 ? ($res["CNT"] - 1) : 0),
"LAST_POSTER_ID" => false,
"LAST_POSTER_NAME" => false,
"LAST_POST_DATE" => false,
"LAST_MESSAGE_ID" => intval($res["LAST_MESSAGE_ID"]),
"POSTS_UNAPPROVED" => intval($res["CNT_NOT_APPROVED"]),
"ABS_LAST_POSTER_ID" => false,
"ABS_LAST_POSTER_NAME" => false,
"ABS_LAST_POST_DATE" => false,
"ABS_LAST_MESSAGE_ID" => intval($res["ABS_LAST_MESSAGE_ID"]));
if ($arFields["ABS_LAST_MESSAGE_ID"] > 0):
$res = CForumMessage::GetByID($arFields["ABS_LAST_MESSAGE_ID"], array("FILTER" => "N"));
$arFields["ABS_LAST_POSTER_ID"] = (intval($res["AUTHOR_ID"]) > 0 ? $res["AUTHOR_ID"] : false);
$arFields["ABS_LAST_POSTER_NAME"] = $res["AUTHOR_NAME"];
$arFields["ABS_LAST_POST_DATE"] = $res["POST_DATE"];
if (intval($arFields["LAST_MESSAGE_ID"]) > 0):
if ($arFields["LAST_MESSAGE_ID"] < $arFields["ABS_LAST_MESSAGE_ID"]):
$res = CForumMessage::GetByID($arFields["LAST_MESSAGE_ID"], array("FILTER" => "N"));
endif;
$arFields["LAST_POSTER_ID"] = (intval($res["AUTHOR_ID"]) > 0 ? $res["AUTHOR_ID"] : false);
$arFields["LAST_POSTER_NAME"] = $res["AUTHOR_NAME"];
$arFields["LAST_POST_DATE"] = $res["POST_DATE"];
endif;
endif;
foreach (array(
"LAST_POST_DATE" => "START_DATE",
"ABS_LAST_POST_DATE" => "START_DATE",
"LAST_POSTER_NAME" => "USER_START_NAME",
"ABS_LAST_POSTER_NAME" => "USER_START_NAME") as $key => $val)
{
if ($arFields[$key] == false)
{
$arFields["=".$key] = $val;
unset($arFields[$key]);
}
}
}
return CForumTopic::Update($ID, $arFields);
}