- Модуль: 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;
}