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

	$ID = intval($ID);
	if ($ID <= 0)
	{
		$APPLICATION->ThrowException(GetMessage("SONET_LC_WRONG_PARAMETER_ID"), "ERROR_NO_ID");
		return false;
	}

	if (
		(
			$bSetSource
			&& !isset($arFields["SOURCE_ID"])
		)
		|| !isset($arFields["LOG_ID"])
	)
	{
		$rsRes = CSocNetLogComments::getList(
			array(),
			array("ID" => $ID),
			false,
			false,
			array("LOG_ID", "SOURCE_ID")
		);
		if ($arRes = $rsRes->fetch())
		{
			$arFields["SOURCE_ID"] = $arRes["SOURCE_ID"];
			$arFields["LOG_ID"] = $arRes["LOG_ID"];
		}

		if (!isset($arFields["SOURCE_ID"]))
		{
			$bSetSource = false;
		}
	}

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

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

	$arSource = false;
	if ($bSetSource)
	{
		$arSource = CSocNetLogComments::SetSource($arFields, "UPDATE");

		if (
			isset($arSource["NO_SOURCE"])
			&& $arSource["NO_SOURCE"] == "Y"
		)
		{
			$bSetSource = false;
		}
		elseif (
			is_array($arSource)
			&& (
				isset($arSource["ERROR"])
				&& !empty($arSource["ERROR"])
			)
		)
		{
			return array(
				"ID" => false,
				"MESSAGE" => $arSource["ERROR"]
			);
		}
		else
		{
			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["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"];
			}
		}
	}

	if (!CSocNetLogComments::CheckFields("UPDATE", $arFields, $ID))
	{
		return false;
	}

	if (
		!$bSetSource
		|| (
			is_array($arSource)
			&& (
				!isset($arSource["ERROR"])
				|| empty($arSource["ERROR"])
			)
		)
	)
	{
		$strUpdate = $DB->PrepareUpdate("b_sonet_log_comment", $arFields);
		BitrixSocialnetworkUtil::processEqualityFieldsToUpdate($arFields1, $strUpdate);

		if ($strUpdate <> '')
		{
			$strSql =
				"UPDATE b_sonet_log_comment SET ".
				"	".$strUpdate." ".
				"WHERE ID = ".$ID." ";
			$DB->Query($strSql, False, "File: ".__FILE__."
Line: ".__LINE__); $USER_FIELD_MANAGER->Update("SONET_COMMENT", $ID, $arFields); $cache = new CPHPCache; $cache->CleanDir("/sonet/log/".intval(intval($arFields["LOG_ID"]) / 1000)."/".$arFields["LOG_ID"]."/comments/"); } elseif (!$USER_FIELD_MANAGER->Update("SONET_COMMENT", $ID, $arFields)) { $ID = False; } if (intval($ID) > 0) { $events = GetModuleEvents("socialnetwork", "OnAfterSocNetLogCommentUpdate"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } if (!empty($arFields['MESSAGE'])) { 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"] )); } } } else { $ID = False; } return $ID; }