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