• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/controller/livefeed/blogpost.php
  • Класс: BitrixSocialnetworkControllerLivefeedBlogPost
  • Вызов: BlogPost::getDataAction
public function getDataAction(array $params = []): ?array
{
	$postId = (int)($params['postId'] ?? 0);
	$public = ($params['public'] ?? 'N');
	$groupReadOnly = ($params['groupReadOnly'] ?? 'N');
	$pathToPost = ($params['pathToPost'] ?? '');
	$voteId = (int)($params['voteId'] ?? 0);
	$checkModeration = ($params['checkModeration'] ?? 'N');

	$currentUserId = (int)$this->getCurrentUser()->getId();
	$currentModuleAdmin = CSocNetUser::isCurrentUserModuleAdmin(SITE_ID, false);

	$logPinnedUserId = 0;

	if ($postId <= 0)
	{
		$this->addError(new Error(Loc::getMessage('SONET_CONTROLLER_LIVEFEED_BLOGPOST_EMPTY'), 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_EMPTY'));
		return null;
	}

	if (
		!Loader::includeModule('blog')
		|| !Loader::includeModule('socialnetwork')
		|| !($postItem = BitrixBlogItemPost::getById($postId))
	)
	{
		$this->addError(new Error(Loc::getMessage('SONET_CONTROLLER_LIVEFEED_BLOGPOST_NOT_FOUND'), 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_NOT_FOUND'));
		return null;
	}

	$postFields = $postItem->getFields();

	$logId = 0;
	$logFavoritesUserId = 0;
	$allowModerate = false;

	if (
		$postFields['PUBLISH_STATUS'] === BLOG_PUBLISH_STATUS_READY
		&& $checkModeration === 'Y'
	)
	{
		$postSocnetPermsList = CBlogPost::getSocNetPerms($postId);
		if (
			!empty($postSocnetPermsList['SG'])
			&& is_array($postSocnetPermsList['SG'])
		)
		{
			$groupIdList = array_keys($postSocnetPermsList['SG']);
			foreach($groupIdList as $groupId)
			{
				if (
					CSocNetFeaturesPerms::canPerformOperation($currentUserId, SONET_ENTITY_GROUP, $groupId, 'blog', 'full_post', $currentModuleAdmin)
					|| CSocNetFeaturesPerms::canPerformOperation($currentUserId, SONET_ENTITY_GROUP, $groupId, 'blog', 'write_post')
					|| CSocNetFeaturesPerms::canPerformOperation($currentUserId, SONET_ENTITY_GROUP, $groupId, 'blog', 'moderate_post')
				)
				{
					$allowModerate = true;
					break;
				}
			}
		}
		elseif(
			(int)$postFields['AUTHOR_ID'] === $currentUserId
			|| $currentModuleAdmin
		)
		{
			$allowModerate = true;
		}
	}

	$blogPostLivefeedProvider = new BitrixSocialnetworkLivefeedBlogPost;

	$filter = array(
		"EVENT_ID" => $blogPostLivefeedProvider->getEventId(),
		"SOURCE_ID" => $postId,
	);

	if (
		Loader::includeModule('extranet')
		&& CExtranet::isExtranetSite(SITE_ID)
	)
	{
		$filter["SITE_ID"] = SITE_ID;
	}
	elseif ($public !== 'Y')
	{
		$filter["SITE_ID"] = [ SITE_ID, false ];
	}

	$res = CSocNetLog::getList(
		[],
		$filter,
		false,
		false,
		[ 'ID', 'FAVORITES_USER_ID', 'PINNED_USER_ID' ],
		[ 'USE_PINNED' => 'Y' ]
	);

	if ($logEntry = $res->fetch())
	{
		$logId = (int)$logEntry['ID'];
		$logFavoritesUserId = (int)$logEntry['FAVORITES_USER_ID'];
		$logPinnedUserId = (int)$logEntry['PINNED_USER_ID'];
	}

	if ((int)$postFields["AUTHOR_ID"] === $currentUserId)
	{
		$perms = Permissions::FULL;
	}
	elseif (
		$currentModuleAdmin
		|| CMain::getGroupRight('blog') >= 'W'
	)
	{
		$perms = Permissions::FULL;
	}
	elseif (!$logId)
	{
		$perms = Permissions::DENY;
	}
	else
	{
		$permsResult = $postItem->getSonetPerms([
			'PUBLIC' => ($public === 'Y'),
			'CHECK_FULL_PERMS' => true,
			'LOG_ID' => $logId
		]);
		$perms = $permsResult['PERM'];
		$groupReadOnly = (
			$permsResult['PERM'] <= BitrixBlogItemPermissions::READ
			&& $permsResult['READ_BY_OSG']
				? 'Y'
				: 'N'
		);
	}

	$shareForbidden = ComponentHelper::getBlogPostLimitedViewStatus(array(
		'logId' => $logId,
		'postId' => $postId,
		'authorId' => $postFields['AUTHOR_ID']
	));

	$postUrl = CComponentEngine::makePathFromTemplate(
		$pathToPost,
		[
			'post_id' => $postFields['ID'],
			'user_id' => $postFields['AUTHOR_ID']
		]
	);

	$voteExportUrl = '';

	if ($voteId > 0)
	{
		$voteExportUrl = CHTTP::urlAddParams(
			CHTTP::urlDeleteParams(
				$postUrl,
				[ 'exportVoting ' ]
			),
			[ 'exportVoting' => $voteId ]
		);
	}

	return [
		'perms' => $perms,
		'isGroupReadOnly' => $groupReadOnly,
		'isShareForbidden' => ($shareForbidden ? 'Y' : 'N'),
		'logId' => $logId,
		'logFavoritesUserId' => $logFavoritesUserId,
		'logPinnedUserId' => $logPinnedUserId,
		'authorId' => (int)$postFields['AUTHOR_ID'],
		'urlToPost' => $postUrl,
		'urlToVoteExport' => $voteExportUrl,
		'allowModerate' => ($allowModerate ? 'Y' : 'N'),
		'backgroundCode' => $postFields['BACKGROUND_CODE']
	];
}