• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/rest.php
  • Класс: CSocNetLogRestService
  • Вызов: CSocNetLogRestService::addBlogComment
static function addBlogComment($fields): int
{
	$authorId = (int)(
		isset($fields["USER_ID"])
		&& (int)$fields["USER_ID"] > 0
		&& self::isAdmin()
			? $fields["USER_ID"]
			: self::getCurrentUserId()
	);

	if (!Loader::includeModule('blog'))
	{
		throw new InvalidOperationException('No blog module installed');
	}

	$postId = (int) ($fields['POST_ID'] ?? null);
	if ($postId <= 0)
	{
		throw new ArgumentException('No post found');
	}

	$res = CBlogPost::getList(
		array(),
		array(
			"ID" => $postId
		),
		false,
		false,
		array("ID", "BLOG_ID", "AUTHOR_ID", "BLOG_OWNER_ID", "TITLE")
	);

	$post = $res->fetch();
	if (!$post)
	{
		throw new ObjectNotFoundException('No post found');
	}

	$blog = CBlog::getById($post["BLOG_ID"]);
	if (!$blog)
	{
		throw new ObjectNotFoundException('No blog found');
	}

	if (
		empty($fields["FILES"])
		&& !BitrixBlogItemComment::checkDuplicate(array(
			'MESSAGE' => $fields["TEXT"] ?? null,
			'BLOG_ID' => $post['BLOG_ID'],
			'POST_ID' => $post['ID'],
			'AUTHOR_ID' => $authorId,
	))
	)
	{
		throw new AccessDeniedException('Duplicate comment');
	}

	$userIP = CBlogUser::getUserIP();

	$commentFields = array(
		"POST_ID" => $post['ID'],
		"BLOG_ID" => $post['BLOG_ID'],
		"TITLE" => '',
		"POST_TEXT" => $fields["TEXT"],
		"DATE_CREATE" => convertTimeStamp(time() + CTimeZone::getOffset(), "FULL"),
		"AUTHOR_IP" => $userIP[0],
		"AUTHOR_IP1" => $userIP[1],
		"URL" => $blog["URL"],
		"PARENT_ID" => false,
		"SEARCH_GROUP_ID" => $blog['GROUP_ID'],
		"AUTHOR_ID" => $authorId
	);

	$perm = BitrixBlogItemPermissions::DENY;
	if ((int)$post['AUTHOR_ID'] === $authorId)
	{
		$perm = BitrixBlogItemPermissions::FULL;
	}
	else
	{
		$postPerm = CBlogPost::getSocNetPostPerms($post["ID"]);
		if ($postPerm > BitrixBlogItemPermissions::DENY)
		{
			$perm = CBlogComment::getSocNetUserPerms($post["ID"], $post["AUTHOR_ID"]);
		}
	}

	if ($perm === BitrixBlogItemPermissions::DENY)
	{
		throw new AccessDeniedException('No permissions');
	}

	if ($perm === BitrixBlogItemPermissions::PREMODERATE)
	{
		$commentFields["PUBLISH_STATUS"] = BLOG_PUBLISH_STATUS_READY;
	}

	$result = CBlogComment::add($commentFields);
	if (!$result)
	{
		throw new SystemException('Blog comment hasn't been added');
	}

	if (
		isset($fields["FILES"])
		&& Option::get('disk', 'successfully_converted', false)
		&& Loader::includeModule('disk')
		&& ($storage = BitrixDiskDriver::getInstance()->getStorageByUserId($authorId))
		&& ($folder = $storage->getFolderForUploadedFiles())
	)
	{
		// upload to storage
		$filesList = array();

		foreach ($fields["FILES"] as $tmp)
		{
			$fileFields = CRestUtil::saveFile($tmp);

			if (is_array($fileFields))
			{
				$file = $folder->uploadFile(
					$fileFields, // file array
					array(
						'NAME' => $fileFields["name"],
						'CREATED_BY' => $authorId
					),
					array(),
					true
				);

				if ($file)
				{
					$filesList[] = BitrixDiskUfFileUserType::NEW_FILE_PREFIX.$file->getId();
				}
			}
		}

		if (!empty($filesList)) // update post
		{
			CBlogComment::update(
				$result,
				array(
					"HAS_PROPS" => "Y",
					"UF_BLOG_COMMENT_FILE" => $filesList
				)
			);
		}
	}

	BitrixBlogItemComment::actionsAfter(array(
		'MESSAGE' => $commentFields["POST_TEXT"],
		'BLOG_ID' => $post["BLOG_ID"],
		'BLOG_OWNER_ID' => $post["BLOG_OWNER_ID"],
		'POST_ID' => $post["ID"],
		'POST_TITLE' => $post["TITLE"],
		'POST_AUTHOR_ID' => $post["AUTHOR_ID"],
		'COMMENT_ID' => $result,
		'AUTHOR_ID' => $authorId,
	));

	return $result;
}