static function getLogCommentRecord(array $comment, array $params, array &$assets): array
{
global $APPLICATION, $arExtranetUserID;
$extranetUserIdList = $arExtranetUserID;
static $userCache = array();
// for the same post log_update - time only, if not - date and time
$timestamp = makeTimeStamp(array_key_exists('LOG_DATE_FORMAT', $comment)
? $comment['LOG_DATE_FORMAT']
: $comment['LOG_DATE']
);
$timeFormated = formatDateFromDB($comment['LOG_DATE'],
(
mb_stripos($params['DATE_TIME_FORMAT'], 'a')
|| (
$params['DATE_TIME_FORMAT'] === 'FULL'
&& isAmPmMode()
) !== false
? (mb_strpos(FORMAT_DATETIME, 'TT') !== false ? 'G:MI TT' : 'G:MI T')
: 'HH:MI'
)
);
$dateTimeFormated = formatDate(
(!empty($params['DATE_TIME_FORMAT'])
? ($params['DATE_TIME_FORMAT'] === 'FULL'
? CDatabase::dateFormatToPHP(str_replace(':SS', '', FORMAT_DATETIME))
: $params['DATE_TIME_FORMAT']
)
: CDatabase::dateFormatToPHP(FORMAT_DATETIME)
),
$timestamp
);
if (
strcasecmp(LANGUAGE_ID, 'EN') !== 0
&& strcasecmp(LANGUAGE_ID, 'DE') !== 0
)
{
$dateTimeFormated = toLower($dateTimeFormated);
}
// strip current year
if (
!empty($params['DATE_TIME_FORMAT'])
&& (
$params['DATE_TIME_FORMAT'] === 'j F Y G:i'
|| $params['DATE_TIME_FORMAT'] === 'j F Y g:i a'
)
)
{
$dateTimeFormated = ltrim($dateTimeFormated, '0');
$currentYear = date('Y');
$dateTimeFormated = str_replace(array('-'.$currentYear, '/'.$currentYear, ' '.$currentYear, '.'.$currentYear), '', $dateTimeFormated);
}
$path2Entity = (
$comment['ENTITY_TYPE'] === SONET_ENTITY_GROUP
? CComponentEngine::MakePathFromTemplate($params['PATH_TO_GROUP'], [ 'group_id' => $comment['ENTITY_ID'] ])
: CComponentEngine::MakePathFromTemplate($params['PATH_TO_USER'], [ 'user_id' => $comment['ENTITY_ID'] ])
);
if ((int)$comment['USER_ID'] > 0)
{
$suffix = (
is_array($extranetUserIdList)
&& in_array($comment['USER_ID'], $extranetUserIdList)
? Loc::getMessage('SONET_LOG_EXTRANET_SUFFIX')
: ""
);
$userFields = [
'NAME' => $comment['~CREATED_BY_NAME'],
'LAST_NAME' => $comment['~CREATED_BY_LAST_NAME'],
'SECOND_NAME' => $comment['~CREATED_BY_SECOND_NAME'],
'LOGIN' => $comment['~CREATED_BY_LOGIN']
];
$useLogin = ($params["SHOW_LOGIN"] !== "N");
$createdByFields = [
'FORMATTED' => CUser::formatName($params['NAME_TEMPLATE'], $userFields, $useLogin).$suffix,
'URL' => CComponentEngine::makePathFromTemplate($params['PATH_TO_USER'], [
'user_id' => $comment['USER_ID'],
'id' => $comment['USER_ID']
])
];
$createdByFields['TOOLTIP_FIELDS'] = [
'ID' => $comment['USER_ID'],
'NAME' => $comment['~CREATED_BY_NAME'],
'LAST_NAME' => $comment['~CREATED_BY_LAST_NAME'],
'SECOND_NAME' => $comment['~CREATED_BY_SECOND_NAME'],
'LOGIN' => $comment['~CREATED_BY_LOGIN'],
'PERSONAL_GENDER' => $comment['~CREATED_BY_PERSONAL_GENDER'],
'USE_THUMBNAIL_LIST' => 'N',
'PATH_TO_SONET_MESSAGES_CHAT' => $params['PATH_TO_MESSAGES_CHAT'] ?? null,
'PATH_TO_SONET_USER_PROFILE' => $params['PATH_TO_USER'] ?? null,
'PATH_TO_VIDEO_CALL' => $params['PATH_TO_VIDEO_CALL'] ?? null,
'DATE_TIME_FORMAT' => $params['DATE_TIME_FORMAT'],
'SHOW_YEAR' => $params['SHOW_YEAR'],
'CACHE_TYPE' => $params['CACHE_TYPE'] ?? null,
'CACHE_TIME' => $params['CACHE_TIME'] ?? null,
'NAME_TEMPLATE' => $params['NAME_TEMPLATE'].$suffix,
'SHOW_LOGIN' => $params['SHOW_LOGIN'],
'PATH_TO_CONPANY_DEPARTMENT' => $params['PATH_TO_CONPANY_DEPARTMENT'] ?? null,
'INLINE' => 'Y',
'EXTERNAL_AUTH_ID' => $comment['~CREATED_BY_EXTERNAL_AUTH_ID']
];
if (
isset($params['ENTRY_HAS_CRM_USER'])
&& $params['ENTRY_HAS_CRM_USER']
&& ModuleManager::isModuleInstalled('crm')
)
{
if (isset($userCache[$comment['USER_ID']]))
{
$userFields = $userCache[$comment['USER_ID']];
}
else
{
$res = UserTable::getList([
'filter' => [
'ID' => (int)$comment['USER_ID']
],
'select' => [ 'ID', 'UF_USER_CRM_ENTITY' ]
]);
if ($userFields = $res->fetch())
{
$userCache[$userFields['ID']] = $userFields;
}
}
if (!empty($userFields))
{
$createdByFields['TOOLTIP_FIELDS'] = array_merge($createdByFields['TOOLTIP_FIELDS'], $userFields);
}
}
}
else
{
$createdByFields = [
'FORMATTED' => Loc::getMessage("SONET_C73_CREATED_BY_ANONYMOUS")
];
}
$userFields = [
'NAME' => $comment['~USER_NAME'],
'LAST_NAME' => $comment['~USER_LAST_NAME'],
'SECOND_NAME' => $comment['~USER_SECOND_NAME'],
'LOGIN' => $comment['~USER_LOGIN']
];
$temporaryParams = $params;
$temporaryParams['AVATAR_SIZE'] = ($params['AVATAR_SIZE_COMMON'] ?? $params['AVATAR_SIZE']);
$commentEventFields = [
'EVENT' => $comment,
'LOG_DATE' => $comment['LOG_DATE'],
'LOG_DATE_TS' => makeTimeStamp($comment['LOG_DATE']),
'LOG_DATE_DAY' => convertTimeStamp(makeTimeStamp($comment['LOG_DATE']), 'SHORT'),
'LOG_TIME_FORMAT' => $timeFormated,
'LOG_DATETIME_FORMAT' => $dateTimeFormated,
'TITLE_TEMPLATE' => '',
'TITLE' => '',
'TITLE_FORMAT' => '', // need to use url here
'ENTITY_NAME' => (
$comment["ENTITY_TYPE"] === SONET_ENTITY_GROUP
? $comment["GROUP_NAME"]
: CUser::formatName($params['NAME_TEMPLATE'], $userFields, $useLogin)
),
'ENTITY_PATH' => $path2Entity,
'CREATED_BY' => $createdByFields,
'AVATAR_SRC' => CSocNetLogTools::formatEvent_CreateAvatar($comment, $temporaryParams)
];
$commentEventData = CSocNetLogTools::findLogCommentEventByID($comment['EVENT_ID']);
$formattedFields = [];
if (
is_array($commentEventData)
&& array_key_exists('CLASS_FORMAT', $commentEventData)
&& array_key_exists('METHOD_FORMAT', $commentEventData)
)
{
$logFields = (
($params['USER_COMMENTS'] ?? '') === "Y"
? []
: [
'TITLE' => $comment['~LOG_TITLE'] ?? '',
'URL' => $comment['~LOG_URL'] ?? '',
'PARAMS' => $comment['~LOG_PARAMS'] ?? null
]
);
$formattedFields = call_user_func([ $commentEventData['CLASS_FORMAT'], $commentEventData['METHOD_FORMAT'] ], $comment, $params, false, $logFields);
if (
($params['USE_COMMENTS'] ?? null) !== 'Y'
&& array_key_exists('CREATED_BY', $formattedFields)
&& isset($formattedFields['CREATED_BY']['TOOLTIP_FIELDS']))
{
$commentEventFields['CREATED_BY']['TOOLTIP_FIELDS'] = $formattedFields['CREATED_BY']['TOOLTIP_FIELDS'];
}
}
$commentAuxProvider = BitrixSocialnetworkCommentAuxBase::findProvider(
[
'POST_TEXT' => $comment['MESSAGE'],
'SHARE_DEST' => $comment['SHARE_DEST'],
'SOURCE_ID' => (int)$comment['SOURCE_ID'],
'EVENT_ID' => $comment['EVENT_ID'],
'RATING_TYPE_ID' => $comment['RATING_TYPE_ID'],
],
[
'eventId' => $comment['EVENT_ID']
]
);
if ($commentAuxProvider)
{
$commentAuxProvider->setOptions([
'suffix' => (!empty($params['COMMENT_ENTITY_SUFFIX']) ? $params['COMMENT_ENTITY_SUFFIX'] : ''),
'logId' => $comment['LOG_ID'],
'cache' => true,
'parseBBCode' => true,
'uf' => $comment['UF'],
]);
$formattedFields["EVENT_FORMATTED"]["FULL_MESSAGE_CUT"] = nl2br($commentAuxProvider->getText());
}
else
{
$message = (string)(
is_array($formattedFields)
&& array_key_exists('EVENT_FORMATTED', $formattedFields)
&& array_key_exists('MESSAGE', $formattedFields['EVENT_FORMATTED'])
? $formattedFields['EVENT_FORMATTED']['MESSAGE']
: $commentEventFields['EVENT']['MESSAGE']
);
if ($message !== '')
{
$formattedFields['EVENT_FORMATTED']['FULL_MESSAGE_CUT'] = CSocNetTextParser::closetags(htmlspecialcharsback($message));
}
}
$formattedFields['EVENT_FORMATTED']['DATETIME'] = (
$commentEventFields['LOG_DATE_DAY'] == convertTimeStamp()
? $timeFormated
: $dateTimeFormated
);
$commentEventFields['EVENT_FORMATTED'] = $formattedFields['EVENT_FORMATTED'];
$commentEventFields['EVENT_FORMATTED']['URLPREVIEW'] = false;
if (
isset($comment['UF']['UF_SONET_COM_URL_PRV'])
&& !empty($comment['UF']['UF_SONET_COM_URL_PRV']['VALUE'])
)
{
$css = $APPLICATION->sPath2css;
$js = $APPLICATION->arHeadScripts;
$urlPreviewText = ComponentHelper::getUrlPreviewContent($comment['UF']['UF_SONET_COM_URL_PRV'], array(
'MOBILE' => 'N',
'NAME_TEMPLATE' => $params['NAME_TEMPLATE'],
'PATH_TO_USER' => $params['~PATH_TO_USER']
));
if (!empty($urlPreviewText))
{
$commentEventFields['EVENT_FORMATTED']['URLPREVIEW'] = true;
$commentEventFields['EVENT_FORMATTED']['FULL_MESSAGE_CUT'] .= $urlPreviewText;
}
$assets['CSS'] = array_merge($assets['CSS'], array_diff($APPLICATION->sPath2css, $css));
$assets['JS'] = array_merge($assets['JS'], array_diff($APPLICATION->arHeadScripts, $js));
$commentEventFields['UF_HIDDEN']['UF_SONET_COM_URL_PRV'] = $comment['UF']['UF_SONET_COM_URL_PRV'];
unset($comment['UF']['UF_SONET_COM_URL_PRV']);
}
$commentEventFields['UF'] = $comment['UF'];
if (
isset($commentEventFields['EVENT_FORMATTED'])
&& is_array($commentEventFields['EVENT_FORMATTED'])
)
{
$fields2Cache = [
'DATETIME',
'MESSAGE',
'FULL_MESSAGE_CUT',
'ERROR_MSG',
'URLPREVIEW',
];
foreach ($commentEventFields['EVENT_FORMATTED'] as $field => $value)
{
if (!in_array($field, $fields2Cache, true))
{
unset($commentEventFields['EVENT_FORMATTED'][$field]);
}
}
}
if (
isset($commentEventFields['EVENT'])
&& is_array($commentEventFields['EVENT'])
)
{
if (!empty($commentEventFields["EVENT"]["URL"]))
{
$commentEventFields['EVENT']['URL'] = str_replace(
'#GROUPS_PATH#',
Option::get('socialnetwork', 'workgroups_page', '/workgroups/', SITE_ID),
$commentEventFields['EVENT']['URL']
);
}
$fields2Cache = [
'ID',
'SOURCE_ID',
'EVENT_ID',
'USER_ID',
'LOG_DATE',
'RATING_TYPE_ID',
'RATING_ENTITY_ID',
'URL',
'SHARE_DEST'
];
if (
(
isset($params['MAIL'])
&& $params['MAIL'] === 'Y'
)
|| (
isset($params['COMMENT_ID'])
&& (int)$params['COMMENT_ID'] > 0
)
)
{
$fields2Cache[] = 'MESSAGE';
}
foreach ($commentEventFields['EVENT'] as $field => $value)
{
if (!in_array($field, $fields2Cache, true))
{
unset($commentEventFields['EVENT'][$field]);
}
}
}
if (
isset($commentEventFields['CREATED_BY'])
&& is_array($commentEventFields['CREATED_BY'])
)
{
$fields2Cache = [
'TOOLTIP_FIELDS',
'FORMATTED',
'URL'
];
foreach ($commentEventFields['CREATED_BY'] as $field => $value)
{
if (!in_array($field, $fields2Cache, true))
{
unset($commentEventFields['CREATED_BY'][$field]);
}
}
if (
isset($commentEventFields['CREATED_BY']['TOOLTIP_FIELDS'])
&& is_array($commentEventFields['CREATED_BY']['TOOLTIP_FIELDS'])
)
{
$fields2Cache = [
'ID',
'PATH_TO_SONET_USER_PROFILE',
'NAME',
'LAST_NAME',
'SECOND_NAME',
'PERSONAL_GENDER',
'LOGIN',
'EMAIL',
'EXTERNAL_AUTH_ID',
'UF_USER_CRM_ENTITY',
'UF_DEPARTMENT'
];
foreach ($commentEventFields['CREATED_BY']['TOOLTIP_FIELDS'] as $field => $value)
{
if (!in_array($field, $fields2Cache, true))
{
unset($commentEventFields['CREATED_BY']['TOOLTIP_FIELDS'][$field]);
}
}
}
}
foreach ($commentEventFields['EVENT'] as $key => $value)
{
if (mb_strpos($key, '~') === 0)
{
unset($commentEventFields['EVENT'][$key]);
}
}
return $commentEventFields;
}