public function Post($messageId)
{
global $DB;
if (!CModule::IncludeModule("socialnetwork") || !CModule::IncludeModule("blog"))
return false;
$CIMMessage = new CIMMessage($this->user_id);
$message = $CIMMessage->GetMessage($messageId, true);
if (!$message)
return false;
$pathToPost = COption::GetOptionString("socialnetwork", "userblogpost_page", "/company/personal/user/#user_id#/blog/#post_id#/", SITE_ID);
$pathToSmile = COption::GetOptionString("socialnetwork", "smile_page", false, SITE_ID);
$blogGroupID = COption::GetOptionString("socialnetwork", "userbloggroup_id", false, SITE_ID);
$blog = CBlog::GetByOwnerID($this->user_id);
if (!$blog)
$blog = $this->SonetPostCreateBlog($this->user_id, $blogGroupID, SITE_ID);
$title = trim(preg_replace(
array("/n+/is".BX_UTF_PCRE_MODIFIER, '/s+/is'.BX_UTF_PCRE_MODIFIER),
" ",
CTextParser::clearAllTags($message['MESSAGE'])
));
$title = $title? $title: CTextParser::clearAllTags(GetMessage('IM_SHARE_CHAT_POST_2', Array('#LINK#' => '')));
$messagePost = self::PrepareText($message)."n".GetMessage('IM_SHARE_POST_WELCOME');
$sonetRights = Array();
$messageParams = Array();
if ($message['CHAT_ID'] == CIMChat::GetGeneralChatId())
{
if (!BitrixSocialnetworkComponentHelper::getAllowToAllDestination($this->user_id))
{
$sonetRights[] = "U".$this->user_id;
$messageParams = Array('LINK_ACTIVE' => Array((string)$this->user_id));
}
}
else
{
if ($message['MESSAGE_TYPE'] !== IM_MESSAGE_PRIVATE)
{
$chat = BitrixImModelChatTable::getById($message['CHAT_ID'])->fetch();
if (
$chat['ENTITY_TYPE'] === 'SONET_GROUP'
&& BitrixMainLoader::includeModule('socialnetwork')
)
{
if (
CSocNetFeaturesPerms::canPerformOperation($this->user_id, SONET_ENTITY_GROUP, $chat['ENTITY_ID'], 'blog', 'write_post')
|| CSocNetFeaturesPerms::canPerformOperation($this->user_id, SONET_ENTITY_GROUP, $chat['ENTITY_ID'], 'blog', 'moderate_post')
|| CSocNetFeaturesPerms::canPerformOperation($this->user_id, SONET_ENTITY_GROUP, $chat['ENTITY_ID'], 'blog', 'full_post')
)
{
$sonetRights = array('SG' . $chat['ENTITY_ID']);
}
else
{
return false;
}
}
}
}
if (empty($sonetRights))
{
$relations = CIMChat::GetRelationById($message['CHAT_ID'], false, true, false);
$sonetRights = [];
foreach ($relations as $relation)
{
if (BitrixImUser::getInstance($relation['USER_ID'])->isActive())
{
$sonetRights[] = "U".$relation['USER_ID'];
}
}
}
$postFields = array(
'TITLE' => $title,
'DETAIL_TEXT' => $messagePost,
'DETAIL_TEXT_TYPE' => 'text',
'=DATE_PUBLISH' => $DB->CurrentTimeFunction(),
'PUBLISH_STATUS' => BLOG_PUBLISH_STATUS_PUBLISH,
'CATEGORY_ID' => '',
'PATH' => CComponentEngine::MakePathFromTemplate($pathToPost, array("post_id" => "#post_id#", "user_id" => $this->user_id)),
'URL' => $blog['URL'],
'PERMS_POST' => array(),
'PERMS_COMMENT' => array(),
'MICRO' => "Y",
'SOCNET_RIGHTS' => $sonetRights,
'=DATE_CREATE' => $DB->CurrentTimeFunction(),
'AUTHOR_ID' => $this->user_id,
'BLOG_ID' => $blog['ID'],
"HAS_IMAGES" => "N",
"HAS_TAGS" => "N",
"HAS_PROPS" => "Y",
"HAS_SOCNET_ALL" => "N",
"SEARCH_GROUP_ID" => $blogGroupID,
"UF_BLOG_POST_FILE" => $message['FILES']? array_map(function($value){ return 'n'.$value;}, array_keys($message['FILES'])): Array()
);
$newId = CBlogPost::add($postFields);
if (!$newId)
return false;
$postFields["ID"] = $newId;
$arParamsNotify = Array(
"bSoNet" => true,
"UserID" => $this->user_id,
"allowVideo" => COption::GetOptionString("blog","allow_video", "Y"),
"PATH_TO_SMILE" => $pathToSmile,
"PATH_TO_POST" => $pathToPost,
"user_id" => $this->user_id,
"NAME_TEMPLATE" => CSite::GetNameFormat(false),
"SITE_ID" => SITE_ID
);
CBlogPost::Notify($postFields, $blog, $arParamsNotify);
BXClearCache(true, "/".SITE_ID."/blog/last_messages_list/");
$link = str_replace(array("#post_id#", "#user_id#"), Array($postFields["ID"], $this->user_id), $pathToPost);
$processed = CSocNetLogTools::ProcessPath(array("BLOG" => $link), $this->user_id, SITE_ID);
$this->SendMessage('', GetMessage('IM_SHARE_CHAT_POST_2', Array('#LINK#' => $processed["URLS"]["BLOG"])), $message, $messageParams);
return true;
}