- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/classes/mysql/log.php
- Класс: CSocNetLog
- Вызов: CSocNetLog::Update
static function Update($ID, $arFields)
{
global $DB, $CACHE_MANAGER, $APPLICATION, $USER_FIELD_MANAGER;
$ID = (int)$ID;
if ($ID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_L_WRONG_PARAMETER_ID"), "ERROR_NO_ID");
return false;
}
$str_SiteID = '';
$arFields1 = Util::getEqualityFields($arFields);
if (!self::CheckFields("UPDATE", $arFields, $ID))
{
return false;
}
$res = GetModuleEvents('socialnetwork', 'OnBeforeSocNetLogUpdate');
while ($eventFields = $res->fetch())
{
if (ExecuteModuleEventEx($eventFields, [ &$arFields ]) === false)
{
return false;
}
}
$arSiteID = [];
if (is_set($arFields, "SITE_ID"))
{
if (is_array($arFields["SITE_ID"]))
{
$arSiteID = $arFields["SITE_ID"];
}
else
{
$arSiteID[] = $arFields["SITE_ID"];
}
$arFields["SITE_ID"] = false;
$str_SiteID = "''";
foreach ($arSiteID as $v)
{
$arFields["SITE_ID"] = $v;
$str_SiteID .= ", '".$DB->ForSql($v)."'";
}
}
$strUpdate = $DB->PrepareUpdate("b_sonet_log", $arFields);
Util::processEqualityFieldsToUpdate($arFields1, $strUpdate);
if ($strUpdate !== '')
{
$strSql =
"UPDATE b_sonet_log SET ".
" ".$strUpdate." ".
"WHERE ID = ".$ID." ";
$DB->Query($strSql, False, "File: ".__FILE__."
Line: ".__LINE__);
if (!empty($arSiteID))
{
$strSql = "DELETE FROM b_sonet_log_site WHERE LOG_ID=".$ID;
$DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
$strSql =
"INSERT INTO b_sonet_log_site(LOG_ID, SITE_ID) " .
"SELECT " . $ID . ", LID " .
"FROM b_lang " .
"WHERE LID IN (" . $str_SiteID . ") " .
"ON DUPLICATE KEY UPDATE LOG_ID = " . $ID;
$DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
}
if (isset($arFields["TAG"]))
{
LogTagTable::set([
'itemType' => LogTagTable::ITEM_TYPE_LOG,
'itemId' => $ID,
'tags' => $arFields["TAG"],
]);
}
$USER_FIELD_MANAGER->Update("SONET_LOG", $ID, $arFields);
if (defined("BX_COMP_MANAGED_CACHE"))
{
$CACHE_MANAGER->ClearByTag("SONET_LOG_".$ID);
}
$cache = new CPHPCache;
$cache->CleanDir("/sonet/log/" . (int)($ID / 1000) . "/" . $ID . "/comments/");
}
elseif (!$USER_FIELD_MANAGER->Update("SONET_LOG", $ID, $arFields))
{
$ID = false;
}
if ((int)$ID > 0)
{
$events = GetModuleEvents("socialnetwork", "OnAfterSocNetLogUpdate");
while ($arEvent = $events->Fetch())
{
ExecuteModuleEventEx($arEvent, array($ID, $arFields));
}
if (
!empty($arFields['TITLE'])
|| !empty($arFields['MESSAGE'])
)
{
LogIndex::setIndex(array(
'itemType' => LogIndexTable::ITEM_TYPE_LOG,
'itemId' => $ID,
'fields' => $arFields
));
}
if (
!empty($arFields['LOG_UPDATE'])
|| !empty($arFields1['LOG_UPDATE'])
)
{
$res = LogTable::getList(array(
'filter' => array(
'ID' => $ID
),
'select' => array('LOG_UPDATE')
));
if (
($logFields = $res->fetch())
&& !empty($logFields['LOG_UPDATE'])
)
{
LogRightTable::setLogUpdate(array(
'logId' => $ID,
'value' => $logFields['LOG_UPDATE']
));
LogIndexTable::setLogUpdate(array(
'logId' => $ID,
'value' => $logFields['LOG_UPDATE']
));
}
}
}
return $ID;
}