• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/mysql/log_comments.php
  • Класс: CSocNetLogComments
  • Вызов: CSocNetLogComments::Add
static function Add($arFields, $bSetSource = false, $bSendEvent = true, $bSetLogUpDate = true)
{
	global $DB, $APPLICATION, $CACHE_MANAGER, $USER_FIELD_MANAGER;

	if (is_array($bSetSource))
	{
		$params = $bSetSource;
		$bSetSource = (isset($params['SET_SOURCE']) ? $params['SET_SOURCE'] : false);
		$bSendEvent = (isset($params['SEND_EVENT']) ? $params['SEND_EVENT'] : true);
		$bSetLogUpDate = (isset($params['SET_LOG_UPDATE']) ? $params['SET_LOG_UPDATE'] : true);
		$subscribe = (isset($params['SUBSCRIBE']) ? $params['SUBSCRIBE'] : true);
	}
	else
	{
		$subscribe = true;
	}

	$arFields1 = Util::getEqualityFields($arFields);

	if (
		$bSetSource
		&& $arFields["EVENT_ID"] <> '')
	{
		$arCommentEvent = CSocNetLogTools::FindLogCommentEventByID($arFields["EVENT_ID"]);
		if (
			!is_array($arCommentEvent)
			|| !array_key_exists("ADD_CALLBACK", $arCommentEvent)
			|| !is_callable($arCommentEvent["ADD_CALLBACK"])
		)
		{
			$bSetSource = false;
		}
	}

	$db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetLogCommentAdd");
	while ($arEvent = $db_events->Fetch())
	{
		if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
		{
			return false;
		}
	}

	if ($bSetSource)
	{
		$arSource = CSocNetLogComments::SetSource($arFields);
		if (
			($arSource["NO_SOURCE"] ?? null) === "Y"
			|| intval($arSource["SOURCE_ID"]) > 0
		)
		{
			if (($arSource["NO_SOURCE"] ?? null) === "Y")
			{
				$bSetSource = false;
			}
			else
			{
				$arFields["SOURCE_ID"] = $arSource["SOURCE_ID"];
			}

			if (
				array_key_exists("RATING_ENTITY_ID", $arSource)
				&& array_key_exists("RATING_TYPE_ID", $arSource)
				&& intval($arSource["RATING_ENTITY_ID"]) > 0
				&& $arSource["RATING_TYPE_ID"] <> ''
			)
			{
				$arFields["RATING_TYPE_ID"] = $arSource["RATING_TYPE_ID"];
				$arFields["RATING_ENTITY_ID"] = $arSource["RATING_ENTITY_ID"];
			}

			if (isset($arSource["MESSAGE"]) && $arSource["MESSAGE"] <> '')
				$arFields["MESSAGE"] = $arSource["MESSAGE"];

			if (isset($arSource["TEXT_MESSAGE"]) && $arSource["TEXT_MESSAGE"] <> '')
				$arFields["TEXT_MESSAGE"] = $arSource["TEXT_MESSAGE"];

			if (isset($arSource["URL"]) && $arSource["URL"] <> '')
				$arFields["URL"] = $arSource["URL"];

			if (
				isset($arSource["UF"])
				&& isset($arSource["UF"]["FILE"])
			)
			{
				if (!is_array($arSource["UF"]["FILE"]))
					$arSource["UF"]["FILE"] = array($arSource["UF"]["FILE"]);

				$arFields["UF_SONET_COM_FILE"] = $arSource["UF"]["FILE"];
			}

			if (
				isset($arSource["UF"])
				&& isset($arSource["UF"]["DOC"])
			)
			{
				if (!is_array($arSource["UF"]["DOC"]))
					$arSource["UF"]["DOC"] = array($arSource["UF"]["DOC"]);

				$arFields["UF_SONET_COM_DOC"] = $arSource["UF"]["DOC"];
			}
		}
		else
		{
			$strMessage =
			(
				array_key_exists("ERROR", $arSource) && $arSource["ERROR"] <> ''
					? $arSource["ERROR"] :
					(
						array_key_exists("NOTES", $arSource)  && $arSource["NOTES"] <> ''
							? $arSource["NOTES"]
							: ""
					)
			);
		}
	}

	if (!CSocNetLogComments::CheckFields("ADD", $arFields))
	{
		if ($e = $APPLICATION->GetException())
		{
			$errorMessage = $e->GetString();
		}
		if ($errorMessage == '')
		{
			$errorMessage = GetMessage("SONET_GLC_ERROR_CHECKFIELDS_FAILED");
		}

		return array(
			"ID" => false,
			"MESSAGE" => $errorMessage
		);

		return false;
	}

	if (
		!$bSetSource
		|| (
			is_array($arSource)
			&& array_key_exists("SOURCE_ID", $arFields)
			&& intval($arFields["SOURCE_ID"]) > 0
		)
	)
	{
		$arInsert = $DB->PrepareInsert("b_sonet_log_comment", $arFields);
		BitrixSocialnetworkUtil::processEqualityFieldsToInsert($arFields1, $arInsert);

		$ID = false;
		if ($arInsert[0] <> '')
		{
			$strSql =
				"INSERT INTO b_sonet_log_comment(".$arInsert[0].") ".
				"VALUES(".$arInsert[1].")";
			$DB->Query($strSql, False, "File: ".__FILE__."
Line: ".__LINE__); $ID = intval($DB->LastID()); if ($ID > 0) { if ( !array_key_exists("RATING_TYPE_ID", $arFields) || empty($arFields["RATING_TYPE_ID"]) ) { CSocNetLogComments::Update($ID, array( "RATING_TYPE_ID" => "LOG_COMMENT", "RATING_ENTITY_ID" => $ID )); } if ($subscribe) { BitrixSocialnetworkComponentHelper::userLogSubscribe([ 'logId' => $arFields["LOG_ID"], 'userId' => $arFields["USER_ID"], 'typeList' => [ 'FOLLOW', 'COUNTER_COMMENT_PUSH' ], 'followDate' => 'CURRENT' ]); } // subscribe log entry owner $rsLog = CSocNetLog::GetList( array(), array("ID" => $arFields["LOG_ID"]), false, false, array("ID", "USER_ID") ); if ( ($arLog = $rsLog->Fetch()) && (intval($arLog["USER_ID"]) > 0) ) { $default_follow = CSocNetLogFollow::GetDefaultValue($arLog["USER_ID"]); if ($default_follow != "Y") { $rsLogFollow = CSocNetLogFollow::GetList( array( "USER_ID" => $arLog["USER_ID"], "CODE" => "L".$arFields["LOG_ID"] ), array("TYPE") ); $arLogFollow = $rsLogFollow->Fetch(); if (!$arLogFollow) { BitrixSocialnetworkComponentHelper::userLogSubscribe(array( 'logId' => $arFields["LOG_ID"], 'userId' => $arLog["USER_ID"], 'typeList' => array( 'FOLLOW', ) )); } } } LogFollow::checkDestinationsFollowStatus(array( 'logId' => $arFields["LOG_ID"] )); if ($bSendEvent) { CSocNetLogComments::SendEvent($ID, "SONET_NEW_EVENT"); } CSocNetLogComments::UpdateLogData($arFields["LOG_ID"], $bSetLogUpDate); $db_events = GetModuleEvents("socialnetwork", "OnAfterSocNetLogCommentAdd"); while ($arEvent = $db_events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } $USER_FIELD_MANAGER->Update("SONET_COMMENT", $ID, $arFields); LogIndex::setIndex(array( 'itemType' => LogIndexTable::ITEM_TYPE_COMMENT, 'itemId' => $ID, 'fields' => $arFields )); if (isset($arFields["TAG"])) { LogTagTable::set(array( 'itemType' => LogTagTable::ITEM_TYPE_COMMENT, 'itemId' => $ID, 'tags' => $arFields["TAG"] )); } if(defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->ClearByTag("SONET_LOG_".$arFields["LOG_ID"]); } $cache = new CPHPCache; $cache->CleanDir("/sonet/log/".intval(intval($arFields["LOG_ID"]) / 1000)."/".$arFields["LOG_ID"]."/comments/"); CSocNetLogComments::SendMentionNotification(array_merge($arFields, array("ID" => $ID))); } } CSocNetLogTools::SetCacheLastLogID("comment", $ID); return $ID; } elseif ($bSetSource && $strMessage <> '') return array( "ID" => false, "MESSAGE" => $strMessage ); else return false; }