• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_forum_comments.php
  • Класс: CSocNetForumComments
  • Вызов: CSocNetForumComments::onAfterCommentAdd
static function onAfterCommentAdd($entityType, $entityId, $arData)
{
	global $DB, $USER_FIELD_MANAGER;

	$log_event_id = CSocNetForumComments::findLogEventIDByForumEntityID($entityType);
	if (
		!$log_event_id
		|| $log_event_id == 'tasks' // BitrixTasksIntegrationForumTaskComment::onAfterAdd()
	)
	{
		return false;
	}

	$arLogCommentEvent = CSocNetLogTools::FindLogCommentEventByLogEventID($log_event_id);
	if (!$arLogCommentEvent)
	{
		return false;
	}

	$entityId = intval($entityId);
	if ($entityId <= 0)
	{
		return false;
	}

	$messageId = $arData['MESSAGE_ID'];
	if ($messageId <= 0)
	{
		return false;
	}

	$arMessage = CForumMessage::GetByID($messageId);
	if (!$arMessage)
	{
		return false;
	}

	$sText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]);

	$logFilter = array(
		"EVENT_ID" => $log_event_id,
		"SOURCE_ID" => $entityId
	);

	foreach (GetModuleEvents("socialnetwork", "onAfterCommentAddBefore", true) as $arModuleEvent)
	{
		$res = ExecuteModuleEventEx($arModuleEvent, array(
			$entityType,
			$entityId,
			$arData
		));

		if (isset($res) && is_array($res) && isset($res['LOG_ENTRY_ID']) && $res['LOG_ENTRY_ID'] > 1)
		{
			$logFilter = array(
				'ID' => $res['LOG_ENTRY_ID']
			);
		}
	}

	$dbRes = CSocNetLog::GetList(
		array("ID" => "DESC"),
		$logFilter,
		false,
		false,
		array("ID", "ENTITY_TYPE", "ENTITY_ID", "SOURCE_ID", "USER_ID")
	);

	if ($arRes = $dbRes->Fetch())
	{
		$log_id = $arRes["ID"];
		$entity_type = $arRes["ENTITY_TYPE"];
		$entity_id = $arRes["ENTITY_ID"];
		$strURL = '';

		if (
			isset($arLogCommentEvent["METHOD_GET_URL"])
			&& is_callable($arLogCommentEvent["METHOD_GET_URL"])
		)
		{
			$strURL = call_user_func_array($arLogCommentEvent["METHOD_GET_URL"], array(array(
				"ENTRY_ID" => $arRes["SOURCE_ID"],
				"ENTRY_USER_ID" => $arRes["USER_ID"],
				"COMMENT_ID" => $messageId
			)));
		}

		$parser = new CTextParser();
		$parser->allow = array("HTML" => 'N',"ANCHOR" => 'Y',"BIU" => 'Y',"IMG" => "Y","VIDEO" => "Y","LIST" => 'N',"QUOTE" => 'Y',"CODE" => 'Y',"FONT" => 'Y',"SMILES" => "N","UPLOAD" => 'N',"NL2BR" => 'N',"TABLE" => "Y");

		$arFieldsForSocnet = array(
			"ENTITY_TYPE" => $entity_type,
			"ENTITY_ID" => $entity_id,
			"EVENT_ID" => $arLogCommentEvent["EVENT_ID"],
			"=LOG_DATE" => $DB->CurrentTimeFunction(),
			"USER_ID" => $arMessage["AUTHOR_ID"],
			"MESSAGE" => $sText,
			"TEXT_MESSAGE" => $parser->convert4mail($sText),
			"URL" => $strURL,
			"MODULE_ID" => (array_key_exists("MODULE_ID", $arLogCommentEvent) && $arLogCommentEvent["MODULE_ID"] <> '' ? $arLogCommentEvent["MODULE_ID"] : ""),
			"SOURCE_ID" => $messageId,
			"LOG_ID" => $log_id
		);

		if (
			!array_key_exists("RATING_TYPE_ID", $arLogCommentEvent)
			|| $arLogCommentEvent["RATING_TYPE_ID"] == "FORUM_POST"
		)
		{
			$arFieldsForSocnet["RATING_TYPE_ID"] = "FORUM_POST";
			$arFieldsForSocnet["RATING_ENTITY_ID"] = $messageId;
		}

		$ufFileID = array();
		$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $messageId));
		while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch())
		{
			$ufFileID[] = $arAddedMessageFiles["FILE_ID"];
		}

		if (count($ufFileID) > 0)
		{
			$arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID;
		}

		$ufDocID = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $messageId, LANGUAGE_ID);
		if ($ufDocID)
		{
			$arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;
		}

		$ufUrlPreview = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MES_URL_PRV", $messageId, LANGUAGE_ID);
		if ($ufUrlPreview)
		{
			$arFieldsForSocnet["UF_SONET_COM_URL_PRV"] = $ufUrlPreview;
		}

		$comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false);
		CSocNetLog::CounterIncrement(
			$comment_id,
			false,
			false,
			"LC",
			CSocNetLogRights::CheckForUserAll($log_id)
		);
	}

	foreach (GetModuleEvents("socialnetwork", "onAfterCommentAddAfter", true) as $arModuleEvent)
		ExecuteModuleEventEx($arModuleEvent, array(
			$entityType,
			$entityId,
			$arData,
			$log_id
		));

	foreach (GetModuleEvents("socialnetwork", "OnForumCommentIMNotify", true) as $arModuleEvent) // send notification
	{
		ExecuteModuleEventEx($arModuleEvent, array(
			$entityType,
			$entityId,
			array(
				"LOG_ID" => $log_id,
				"USER_ID" => $arMessage["AUTHOR_ID"],
				"MESSAGE_ID" => $messageId,
				"MESSAGE" => $sText,
				"URL" => $strURL
			)
		));
	}

	return false;
}