- Модуль: forum
- Путь к файлу: ~/bitrix/modules/forum/classes/general/user.php
- Класс: CAllForumUser
- Вызов: CAllForumUser::SetStat
static function SetStat($USER_ID = 0, $arParams = array())
{
$USER_ID = intval($USER_ID);
if ($USER_ID <= 0)
return 0;
$bNeedCreateUser = false;
$arUser = array();
$arUserFields = Array();
$arParams = (is_array($arParams) ? $arParams : array());
$arMessage = (is_array($arParams["MESSAGE"]) ? $arParams["MESSAGE"] : array());
$arMessage = ($arMessage["AUTHOR_ID"] != $USER_ID ? array() : $arMessage);
if (!empty($arMessage))
{
$arParams["ACTION"] = isset($arParams["ACTION"]) && ($arParams["ACTION"] == "DECREMENT" || $arParams["ACTION"] == "UPDATE") ? $arParams["ACTION"] : "INCREMENT";
if ($arParams["ACTION"] == "UPDATE"):
$arParams["ACTION"] = ($arMessage["APPROVED"] == "Y" ? "INCREMENT" : "DECREMENT");
$arMessage["APPROVED"] = "Y";
endif;
$arParams["POSTS"] = intval(isset($arParams["POSTS"]) && $arParams["POSTS"] > 0 ? $arParams["POSTS"] : 1);
$arUser = CForumUser::GetByUSER_ID($USER_ID);
}
if (empty($arMessage)):
// full recount;
elseif ($arMessage["APPROVED"] != "Y"):
return true;
elseif (empty($arUser)):
$bNeedCreateUser = true;
// full recount;
elseif ($arParams["ACTION"] == "DECREMENT" && $arMessage["ID"] >= $arUser["LAST_POST"]):
// full recount;
elseif ($arParams["ACTION"] == "DECREMENT"):
$arUserFields = array(
"=NUM_POSTS" => "NUM_POSTS-".$arParams["POSTS"],
"POINTS" => intval(CForumUser::GetUserPoints($USER_ID, array("DECREMENT" => $arParams["POSTS"]))));
elseif ($arParams["ACTION"] == "INCREMENT" && $arMessage["ID"] < $arUser["LAST_POST"]):
$arUserFields = array(
"=NUM_POSTS" => "NUM_POSTS+".$arParams["POSTS"],
"POINTS" => intval(CForumUser::GetUserPoints($USER_ID, array("INCREMENT" => $arParams["POSTS"]))));
elseif ($arParams["ACTION"] == "INCREMENT"):
$arUserFields["IP_ADDRESS"] = $arMessage["AUTHOR_IP"];
$arUserFields["REAL_IP_ADDRESS"] = $arMessage["AUTHOR_REAL_IP"];
$arUserFields["LAST_POST"] = intval($arMessage["ID"]);
$arUserFields["=NUM_POSTS"] = "NUM_POSTS+".$arParams["POSTS"];
$arUserFields["POINTS"] = intval(CForumUser::GetUserPoints($USER_ID, array("INCREMENT" => $arParams["POSTS"])));
endif;
if (empty($arUserFields))
{
$arUserFields = Array(
"LAST_POST" => false);
if ($bNeedCreateUser == false)
$arUser = CForumUser::GetByUSER_IDEx($USER_ID);
if (empty($arUser) || $bNeedCreateUser == true):
$bNeedCreateUser = true;
$arUser = CForumMessage::GetList(array(), array("AUTHOR_ID" => $USER_ID, "APPROVED" => "Y"), "cnt_and_last_mid");
$arUser = (is_array($arUser) ? $arUser : array());
endif;
$arMessage = CForumMessage::GetByID($arUser["LAST_MESSAGE_ID"], array("FILTER" => "N"));
if ($arMessage):
$arUserFields["IP_ADDRESS"] = $arMessage["AUTHOR_IP"];
$arUserFields["REAL_IP_ADDRESS"] = $arMessage["AUTHOR_REAL_IP"];
$arUserFields["LAST_POST"] = intval($arMessage["ID"]);
endif;
$arUserFields["NUM_POSTS"] = intval($arUser["CNT"]);
$arUserFields["POINTS"] = intval(CForumUser::GetUserPoints($USER_ID, array("NUM_POSTS" => $arUserFields["NUM_POSTS"])));
}
if ($bNeedCreateUser):
$arUserFields["USER_ID"] = $USER_ID;
$arUser = CForumUser::Add($arUserFields);
else:
CForumUser::Update($USER_ID, $arUserFields, false, true);
endif;
return $USER_ID;
}