• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/integration/blog/mention.php
  • Класс: BitrixSocialnetworkIntegrationBlogMention
  • Вызов: Mention::parseProjectList
static function parseProjectList(array $params = []): array
{
	global $USER;

	$result = [];

	$commentText = (string)($params['commentText'] ?? '');

	$postId = (int)($params['postId'] ?? 0);

	if (
		$postId <= 0
		|| !Loader::includeModule('blog')
	)
	{
		return $result;
	}

	$mentionedProjectIdList = BitrixSocialnetworkHelperMention::getProjectIds($commentText);
	if (empty($mentionedProjectIdList))
	{
		return $result;
	}

	$projectIdToShareList = [];

	$currentUserId = $USER->getId();
	$currentAdmin = CSocNetUser::isCurrentUserModuleAdmin(SITE_ID, false);
	$postPermsData = self::getSocNetPerms([
		'postId' => $postId,
	]);

	foreach ($mentionedProjectIdList as $projectId)
	{
		$projectId = (int)$projectId;
		if (
			$projectId <= 0
			|| (
				isset($postPermsData['SG'])
				&& isset($postPermsData['SG'][$projectId])
			)
		)
		{
			continue;
		}

		$canPublish = (
			$currentAdmin
			|| CSocNetFeaturesPerms::canPerformOperation($currentUserId, SONET_ENTITY_GROUP, $projectId, 'blog', 'write_post')
			|| CSocNetFeaturesPerms::canPerformOperation($currentUserId, SONET_ENTITY_GROUP, $projectId, 'blog', 'moderate_post')
			|| CSocNetFeaturesPerms::canPerformOperation($currentUserId, SONET_ENTITY_GROUP, $projectId, 'blog', 'full_post')
		);

		if (!$canPublish)
		{
			continue;
		}

		$projectIdToShareList[] = $projectId;
	}

	$projectIdToShareList = array_unique($projectIdToShareList);
	if (empty($projectIdToShareList))
	{
		return $result;
	}

	$res = WorkgroupTable::getList([
		'filter' => [
			'@ID' => $projectIdToShareList,
		],
		'select' => [ 'ID' ],
	]);
	while ($workgroupFields = $res->fetch())
	{
		$result[] = 'SG' . $workgroupFields['ID'];
	}

	return $result;
}