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;
}