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;
}