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