• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/component/logentry.php
  • Класс: BitrixSocialnetworkComponentLogEntry
  • Вызов: LogEntry::getLogCommentRecord
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;
}