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