• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/topic.php
  • Класс: CAllForumTopic
  • Вызов: CAllForumTopic::CanUserUpdateTopic
static function CanUserUpdateTopic($TID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
{
	$TID = intval($TID);
	$iUserID = intval($iUserID);
	$arTopic = CForumTopic::GetByID($TID);
	if ($arTopic)
	{
		if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
			return true;
		endif;
		if (!CForumUser::IsLocked($iUserID)):
			$strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($arTopic["FORUM_ID"], $arUserGroups) : $ExternalPermission);
		else:
			$strPerms = CForumNew::GetPermissionUserDefault($arTopic["FORUM_ID"]);
		endif;
		if ($strPerms >= "Y")
			return true;
		elseif ($strPerms < "M" || ($strPerms < "Q" && ($arTopic["APPROVED"] != "Y" || $arTopic["STATE"] != "Y")))
			return false;
		$arForum = CForumNew::GetByID($arTopic["FORUM_ID"]);
		if ($arForum["ACTIVE"] != "Y")
			return false;
		elseif ($strPerms >= "U")
			return true;
		$db_res = CForumMessage::GetList(array("ID"=>"ASC"), array("TOPIC_ID"=>$TID, "FORUM_ID"=>$arTopic["FORUM_ID"]), False, 2);
		$iCnt = 0; $iOwner = 0;
		if (!($db_res && $res = $db_res->Fetch()))
			return false;
		else
		{
			$iCnt++; $iOwner = intval($res["AUTHOR_ID"]);
			if ($res = $db_res->Fetch())
				return false;
		}
		if ($iOwner <= 0 || $iUserID <= 0 || $iOwner != $iUserID)
			return false;
		return true;
	}
	return false;
}