• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/component/logentry.php
  • Класс: BitrixSocialnetworkComponentLogEntry
  • Вызов: LogEntry::getCommentsFullList
static function getCommentsFullList(array $eventData, array &$params, array $options = [], array &$arResult = [])
{
	global $CACHE_MANAGER;

	$nTopCount = (isset($options['nTopCount']) && (int)$options['nTopCount'] > 0 ? (int)$options['nTopCount'] : 20);
	$timeZoneOffzet = (isset($options['timeZoneOffzet']) && (int)$options['timeZoneOffzet'] > 0 ? (int)$options['timeZoneOffzet'] : 0);
	$commentEvent = (isset($options['commentEvent']) && is_array($options['commentEvent']) ? $options['commentEvent'] : []);
	$commentProvider = ($options['commentProvider'] ?? false);

	$cacheTime = 31536000;
	$cache = false;

	$useCache = ($params['COMMENT_ID'] <= 0);

	if ($useCache)
	{
		$cache = new CPHPCache;
	}

	$cacheIdPartsList = [];
	$keysList = [
		'AVATAR_SIZE_COMMENT',
		'NAME_TEMPLATE',
		'NAME_TEMPLATE_WO_NOBR',
		'SHOW_LOGIN',
		'DATE_TIME_FORMAT',
		'PATH_TO_USER',
		'PATH_TO_GROUP',
		'PATH_TO_CONPANY_DEPARTMENT',
		'FILTER',
	];

	foreach ($keysList as $paramKey)
	{
		$cacheIdPartsList[$paramKey] = (
			array_key_exists($paramKey, $params)
				? $params[$paramKey]
				: false
		);
	}

	$navParams = CDBResult::getNavParams($params['COMMENTS_IN_EVENT'] ?? null);
	$navPage = (int)($navParams['PAGEN'] ?? 1);

	$cacheId = implode('_', [
		'log_comments',
		$params['LOG_ID'],
		md5(serialize($cacheIdPartsList)),
		SITE_TEMPLATE_ID,
		SITE_ID,
		LANGUAGE_ID,
		FORMAT_DATETIME,
		$timeZoneOffzet,
		$nTopCount,
		$navPage,
	]);

	$cachePath = '/sonet/log/' . (int)((int)$params['LOG_ID'] / 1000) . '/' . $params['LOG_ID'] . '/comments/';

	$result = [];

	if (
		$useCache
		&& $cache->initCache($cacheTime, $cacheId, $cachePath)
	)
	{
		$cacheVariables = $cache->getVars();
		$result = $cacheVariables['COMMENTS_FULL_LIST'];

		$navResultData = $cacheVariables['NAV_RESULT_DATA'];
		$navResult = new CDBResult;
		$navResult->bShowAll = $navResultData['bShowAll'];
		$navResult->bDescPageNumbering = $navResultData['bDescPageNumbering'];
		$navResult->NavNum = $navResultData['NavNum'];
		$navResult->NavRecordCount = $navResultData['NavRecordCount'];
		$navResult->NavPageNomer = $navResultData['NavPageNomer'];
		$navResult->NavPageSize = $navResultData['NavPageSize'];

		if (!empty($cacheVariables['Assets']))
		{
			if (!empty($cacheVariables['Assets']['CSS']))
			{
				foreach ($cacheVariables['Assets']['CSS'] as $cssFile)
				{
					Asset::getInstance()->addCss($cssFile);
				}
			}

			if (!empty($cacheVariables['Assets']['JS']))
			{
				foreach ($cacheVariables["Assets"]['JS'] as $jsFile)
				{
					Asset::getInstance()->addJs($jsFile);
				}
			}
		}
	}
	else
	{
		if ($useCache)
		{
			$cache->startDataCache($cacheTime, $cacheId, $cachePath);
		}

		if (defined('BX_COMP_MANAGED_CACHE'))
		{
			$CACHE_MANAGER->startTagCache($cachePath);
		}

		$filter = [
			'LOG_ID' => $params['LOG_ID']
		];

		$logCommentId = 0;

		if ($params['COMMENT_ID'] > 0)
		{
			$logCommentId = $params['COMMENT_ID'];
		}
		elseif (
			!empty($params['FILTER'])
			&& !empty($params['FILTER'][' 0
		)
		{
			$logCommentId = (int)$params['FILTER'][' 0
		)
		{
			$res = CSocNetLogComments::getList(
				[],
				[
					'RATING_TYPE_ID' => $commentEvent['RATING_TYPE_ID'],
					'RATING_ENTITY_ID' => $logCommentId,
				],
				false,
				false,
				[ 'ID' ]
			);

			if ($logCommentFields = $res->fetch())
			{
				$logCommentId = (int)$logCommentFields['ID'];
			}
		}

		if ($logCommentId > 0)
		{
			if ($params['COMMENT_ID'] > 0)
			{
				$filter['>=ID'] = $logCommentId;
			}
			elseif (
				!empty($params['FILTER'])
				&& !empty($params['FILTER'][' 0
			)
			{
				$filter[' 'N',
			'CHECK_RIGHTS' => 'N'
		];

		$usetFieldsMetaData = self::getUserFieldsFMetaData();

		if ($params['COMMENT_ID'] > 0)
		{
			$navParams = false;
		}
		elseif ($navPage > 1)
		{
			$navParams = [
				'iNumPage' => $navPage,
				'nPageSize' => $params['COMMENTS_IN_EVENT'],
			];
		}
		else
		{
			$navParams = [
				'nTopCount' => $nTopCount,
			];
		}

		$assets = [
			'CSS' => [],
			'JS' => []
		];

		$res = CSocNetLogComments::getList(
			[ 'LOG_DATE' => 'DESC', 'ID' => 'DESC' ], // revert then
			$filter,
			false,
			$navParams,
			$select,
			$listParams
		);

		$navResultData = null;
		if ($res->NavNum !== null)
		{
			$navResultData = [
				'bShowAll' => $res->bShowAll,
				'bDescPageNumbering' => $res->bDescPageNumbering,
				'NavNum' => $res->NavNum,
				'NavRecordCount' => $res->NavRecordCount,
				'NavPageNomer' => $res->NavPageNomer,
				'NavPageSize' => $res->NavPageSize,
			];
		}

		if (
			!empty($eventData['EVENT_FORMATTED'])
			&& !empty($eventData['EVENT_FORMATTED']['DESTINATION'])
			&& is_array($eventData['EVENT_FORMATTED']['DESTINATION'])
		)
		{
			foreach ($eventData['EVENT_FORMATTED']['DESTINATION'] as $destination)
			{
				if (!empty($destination['CRM_USER_ID']))
				{
					$params['ENTRY_HAS_CRM_USER'] = true;
					break;
				}
			}
		}

		$commentsList = $commentSourceIdList = [];
		while ($commentFields = $res->getNext())
		{
			if (!empty($commentFields['SHARE_DEST']))
			{
				$commentFields['SHARE_DEST'] = htmlspecialcharsback($commentFields['SHARE_DEST']);
			}

			if (defined('BX_COMP_MANAGED_CACHE'))
			{
				$CACHE_MANAGER->registerTag('USER_NAME_'.(int)$commentFields['USER_ID']);
			}

			$commentFields['UF'] = $usetFieldsMetaData;
			foreach ($usetFieldsMetaData as $fieldName => $userFieldData)
			{
				if (array_key_exists($fieldName, $commentFields))
				{
					$commentFields['UF'][$fieldName]['VALUE'] = $commentFields[$fieldName];
					$commentFields['UF'][$fieldName]['ENTITY_VALUE_ID'] = $commentFields['ID'];
					if (method_exists($GLOBALS['USER_FIELD_MANAGER'], 'getCustomData'))
					{
						$commentFields['UF'][$fieldName]['CUSTOM_DATA'] = $GLOBALS['USER_FIELD_MANAGER']->getCustomData(
							$commentFields['UF'][$fieldName],
							(int)$commentFields['ID']
						);
					}

				}
			}
			$commentsList[] = $commentFields;
			if ((int)$commentFields['SOURCE_ID'] > 0)
			{
				$commentSourceIdList[] = (int)$commentFields['SOURCE_ID'];
			}
		}

		if (
			!empty($commentSourceIdList)
			&& !empty($commentProvider)
		)
		{
			$sourceAdditonalData = $commentProvider->getAdditionalData([
				'id' => $commentSourceIdList
			]);

			if (!empty($sourceAdditonalData))
			{
				foreach ($commentsList as $key => $comment)
				{
					if (
						!empty($comment['SOURCE_ID'])
						&& isset($sourceAdditonalData[$comment['SOURCE_ID']])
					)
					{
						$commentsList[$key]['ADDITIONAL_DATA'] = $sourceAdditonalData[$comment['SOURCE_ID']];
					}
				}
			}
		}

		foreach ($commentsList as $commentFields)
		{
			$result[] = self::getLogCommentRecord($commentFields, $params, $assets);
		}

		if (
			$params['COMMENT_ID'] <= 0
			&& $navResultData === null
		)
		{
			$navResult = CSocNetLogComments::getList(
				[ ],
				$filter,
				false,
				[
					'nPageSize' => $params['COMMENTS_IN_EVENT'],
					'bShowAll' => false,
				],
				[ 'ID' ],
				$listParams
			);

			$navResultData = [
				'bShowAll' => $navResult->bShowAll,
				'bDescPageNumbering' => $navResult->bDescPageNumbering,
				'NavNum' => $navResult->NavNum,
				'NavRecordCount' => $navResult->NavRecordCount,
				'NavPageNomer' => $navResult->NavPageNomer,
				'NavPageSize' => $navResult->NavPageSize,
			];
		}

		if ($useCache)
		{
			$cacheData = [
				'COMMENTS_FULL_LIST' => $result,
				'NAV_RESULT_DATA' => $navResultData,
				'Assets' => $assets
			];
			$cache->endDataCache($cacheData);
			if (defined('BX_COMP_MANAGED_CACHE'))
			{
				$CACHE_MANAGER->endTagCache();
			}
		}
	}

	$arResult['NAV_RESULT'] = $navResult ?? null;

	return $result;
}