- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/rest.php
- Класс: CSocNetLogRestService
- Вызов: CSocNetLogRestService::getBlogPost
static function getBlogPost($fields, $n, $server): array
{
global $USER_FIELD_MANAGER;
$result = array();
if (!CModule::IncludeModule("blog"))
{
return $result;
}
$tzOffset = CTimeZone::getOffset();
$arOrder = [ 'LOG_UPDATE' => 'DESC' ];
$res = CUser::getById(self::getCurrentUserId());
if ($userFields = $res->Fetch())
{
$currentUserIntranet = (
!empty($userFields["UF_DEPARTMENT"])
&& is_array($userFields["UF_DEPARTMENT"])
&& (int)$userFields["UF_DEPARTMENT"][0] > 0
);
$extranetSiteId = self::getExtranetSiteId();
if (
empty($extranetSiteId)
|| $currentUserIntranet
)
{
$userSiteFields = CSocNetLogComponent::getSiteByDepartmentId($userFields["UF_DEPARTMENT"]);
if (!empty($userSiteFields))
{
$siteId = $userSiteFields['LID'];
}
}
elseif (
!empty($extranetSiteId)
&& !$currentUserIntranet
)
{
$siteId = $extranetSiteId;
}
else
{
$siteId = CSite::getDefSite();
}
}
$filter = [
"EVENT_ID" => self::getBlogPostEventId(),
"SITE_ID" => [ $siteId, false ],
"<=LOG_DATE" => "NOW"
];
if (
isset($fields['POST_ID'])
&& (int)$fields['POST_ID'] > 0
)
{
$filter['SOURCE_ID'] = $fields['POST_ID'];
}
elseif (
isset($fields['LOG_RIGHTS'])
&& is_array($fields['LOG_RIGHTS'])
)
{
$filter["LOG_RIGHTS"] = $fields['LOG_RIGHTS'];
}
$arListParams = array(
"CHECK_RIGHTS" => "Y",
"USE_FOLLOW" => "N",
"USE_SUBSCRIBE" => "N"
);
$dbLog = CSocNetLog::GetList(
$arOrder,
$filter,
false,
self::getNavData($n),
array("ID", "SOURCE_ID"),
$arListParams
);
$arPostId = $arPostIdToGet = array();
while ($arLog = $dbLog->Fetch())
{
$arPostId[] = $arLog["SOURCE_ID"];
}
$cacheTtl = 2592000;
foreach ($arPostId as $key => $postId)
{
$cacheId = 'blog_post_socnet_rest_'.$postId.'_ru'.($tzOffset <> 0 ? '_'.$tzOffset : '');
$cacheDir = ComponentHelper::getBlogPostCacheDir(array(
'TYPE' => 'post',
'POST_ID' => $postId
));
$obCache = new CPHPCache;
if ($obCache->InitCache($cacheTtl, $cacheId, $cacheDir))
{
$result[$key] = $obCache->GetVars();
}
else
{
$arPostIdToGet[$key] = $postId;
}
$obCache->EndDataCache();
}
if (!empty($arPostIdToGet))
{
foreach ($arPostIdToGet as $key => $postId)
{
$cacheId = 'blog_post_socnet_rest_'.$postId.'_ru'.($tzOffset <> 0 ? '_'.$tzOffset : '');
$cacheDir = ComponentHelper::getBlogPostCacheDir(array(
'TYPE' => 'post_general',
'POST_ID' => $postId
));
$obCache = new CPHPCache;
$obCache->InitCache($cacheTtl, $cacheId, $cacheDir);
$obCache->StartDataCache();
$dbPost = CBlogPost::GetList(
array(),
array("ID" => $postId),
false,
false,
array(
"ID",
"BLOG_ID",
"PUBLISH_STATUS",
"TITLE",
"AUTHOR_ID",
"ENABLE_COMMENTS",
"NUM_COMMENTS",
"CODE",
"MICRO",
"DETAIL_TEXT",
"DATE_PUBLISH",
"CATEGORY_ID",
"HAS_SOCNET_ALL",
"HAS_TAGS",
"HAS_IMAGES",
"HAS_PROPS",
"HAS_COMMENT_IMAGES"
)
);
if ($arPost = $dbPost->Fetch())
{
if (!empty($arPost['DETAIL_TEXT']))
{
$arPost['DETAIL_TEXT'] = Emoji::decode($arPost['DETAIL_TEXT']);
}
if ($arPost["PUBLISH_STATUS"] !== BLOG_PUBLISH_STATUS_PUBLISH)
{
unset($arPost);
}
else
{
if (!empty($arPost['DATE_PUBLISH']))
{
$arPost['DATE_PUBLISH'] = CRestUtil::convertDateTime($arPost['DATE_PUBLISH']);
}
if ($arPost["HAS_PROPS"] !== 'N')
{
$arPostFields = $USER_FIELD_MANAGER->GetUserFields("BLOG_POST", $arPost["ID"], LANGUAGE_ID);
$arPost = array_merge($arPost, $arPostFields);
}
if (
!empty($arPost['UF_BLOG_POST_FILE'])
&& !empty($arPost['UF_BLOG_POST_FILE']['VALUE'])
)
{
$arPost['FILES'] = $arPost['UF_BLOG_POST_FILE']['VALUE'];
}
$result[$key] = $arPost;
}
}
$obCache->EndDataCache($arPost);
}
}
ksort($result);
return self::setNavData($result, $dbLog);
}