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

	$log_event_id = CSocNetForumComments::findLogEventIDByForumEntityID($entityType);
	if (!$log_event_id)
	{
		return false;
	}

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

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

	if (empty($arData["MESSAGE_ID"]))
	{
		return false;
	}

	$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");

	switch ($arData["ACTION"])
	{
		case "DEL":
		case "HIDE":
			$dbLogComment = CSocNetLogComments::GetList(
				array("ID" => "DESC"),
				array(
					"EVENT_ID"	=> array($arLogCommentEvent["EVENT_ID"]),
					"SOURCE_ID" => intval($arData["MESSAGE_ID"])
				),
				false,
				false,
				array("ID")
			);
			while ($arLogComment = $dbLogComment->Fetch())
				CSocNetLogComments::Delete($arLogComment["ID"]);
			break;
		case "SHOW":
			$dbLogComment = CSocNetLogComments::GetList(
				array("ID" => "DESC"),
				array(
					"EVENT_ID"	=> array($arLogCommentEvent["EVENT_ID"]),
					"SOURCE_ID" => intval($arData["MESSAGE_ID"])
				),
				false,
				false,
				array("ID")
			);
			$arLogComment = $dbLogComment->Fetch();
			if (!$arLogComment)
			{
				$arMessage = CForumMessage::GetByID(intval($arData["MESSAGE_ID"]));
				if ($arMessage)
				{
					$dbLog = CSocNetLog::GetList(
						array("ID" => "DESC"),
						array(
							"EVENT_ID" => $log_event_id,
							"SOURCE_ID" => $entityId
						),
						false,
						false,
						array("ID", "ENTITY_TYPE", "ENTITY_ID")
					);

					if ($arLog = $dbLog->Fetch())
					{
						$log_id = $arLog["ID"];
						$entity_type = $arLog["ENTITY_TYPE"];
						$entity_id = $arLog["ENTITY_ID"];

						$sText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]);
						$strURL = $APPLICATION->GetCurPageParam("", array("IFRAME", "MID", "SEF_APPLICATION_CUR_PAGE_URL", BX_AJAX_PARAM_ID, "result"));
						$strURL = ForumAddPageParams(
							$strURL,
							array(
								"MID" => intval($arData["MESSAGE_ID"]),
								"result" => "reply"
							),
							false,
							false
						);

						$arFieldsForSocnet = array(
							"ENTITY_TYPE" => $entity_type,
							"ENTITY_ID" => $entity_id,
							"EVENT_ID" => $arLogCommentEvent["EVENT_ID"],
							"MESSAGE" => $sText,
							"TEXT_MESSAGE" => $parser->convert4mail($sText),
							"URL" => str_replace("?IFRAME=Y", "", str_replace("&IFRAME=Y", "", str_replace("IFRAME=Y&", "", $strURL))),
							"MODULE_ID" => (array_key_exists("MODULE_ID", $arLogCommentEvent) && $arLogCommentEvent["MODULE_ID"] <> '' ? $arLogCommentEvent["MODULE_ID"] : ""),
							"SOURCE_ID" => intval($arData["MESSAGE_ID"]),
							"LOG_ID" => $log_id,
							"RATING_TYPE_ID" => "FORUM_POST",
							"RATING_ENTITY_ID" => intval($arData["MESSAGE_ID"])
						);

						$arFieldsForSocnet["USER_ID"] = $arMessage["AUTHOR_ID"];
						$arFieldsForSocnet["=LOG_DATE"] = $DB->CurrentTimeFunction();

						$ufFileID = array();
						$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => intval($arData["MESSAGE_ID"])));
						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", intval($arData["MESSAGE_ID"]), LANGUAGE_ID);
						if ($ufDocID)
							$arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;

						$ufUrlPreview = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MES_URL_PRV", intval($arData["MESSAGE_ID"]), 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)
						);
					}
				}
			}
			break;
		case "EDIT":
			$arMessage = CForumMessage::GetByID(intval($arData["MESSAGE_ID"]));
			if ($arMessage)
			{
				$dbLogComment = CSocNetLogComments::GetList(
					array("ID" => "DESC"),
					array(
						"EVENT_ID"	=> array($arLogCommentEvent["EVENT_ID"]),
						"SOURCE_ID" => intval($arData["MESSAGE_ID"])
					),
					false,
					false,
					array("ID")
				);
				$arLogComment = $dbLogComment->Fetch();
				if ($arLogComment)
				{
					$sText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]);
					$arFieldsForSocnet = array(
						"MESSAGE" => $sText,
						"TEXT_MESSAGE" => $parser->convert4mail($sText),
					);

					$ufFileID = array();
					$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => intval($arData["MESSAGE_ID"])));
					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", intval($arData["MESSAGE_ID"]), LANGUAGE_ID);
					if ($ufDocID)
						$arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;

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

					CSocNetLogComments::Update($arLogComment["ID"], $arFieldsForSocnet);
				}
			}
			break;
		default:
	}

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