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