• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_share.php
  • Класс: CIMShare
  • Вызов: CIMShare::Post
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;
}