static function Update($ID, $arFields, $bAutoSubscribe = true, $bClearCommonTag = true, $bSync = true)
{
global $DB, $APPLICATION, $CACHE_MANAGER, $USER_FIELD_MANAGER;
if (!CSocNetGroup::__ValidateID($ID))
{
return false;
}
$ID = (int)$ID;
$arGroupOld = CSocNetGroup::GetByID($ID);
if (!$arGroupOld)
{
$APPLICATION->ThrowException(GetMessage("SONET_NO_GROUP"), "ERROR_NO_GROUP");
return false;
}
$arFields1 = Util::getEqualityFields($arFields);
if (!CSocNetGroup::CheckFields("UPDATE", $arFields, $ID))
{
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)."'";
}
}
$db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetGroupUpdate");
while ($arEvent = $db_events->Fetch())
{
if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false)
{
return false;
}
}
EventServiceService::addEvent(EventServiceEventDictionary::EVENT_WORKGROUP_BEFORE_UPDATE, [
'GROUP_ID' => $ID,
]);
if (
array_key_exists("IMAGE_ID", $arFields)
&& is_array($arFields["IMAGE_ID"])
&& (
!array_key_exists("MODULE_ID", $arFields["IMAGE_ID"])
|| $arFields["IMAGE_ID"]["MODULE_ID"] == ''
)
)
{
$arFields["IMAGE_ID"]["MODULE_ID"] = "socialnetwork";
}
CFile::SaveForDB($arFields, "IMAGE_ID", "socialnetwork");
$strUpdate = $DB->PrepareUpdate("b_sonet_group", $arFields);
Util::processEqualityFieldsToUpdate($arFields1, $strUpdate);
if ($strUpdate <> '')
{
$strSql =
"UPDATE b_sonet_group SET ".
" ".$strUpdate." ".
"WHERE ID = ".$ID." ";
$DB->Query($strSql, False, "File: ".__FILE__."
Line: ".__LINE__);
if(!empty($arSiteID))
{
$strSql = "DELETE FROM b_sonet_group_site WHERE GROUP_ID=".$ID;
$DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
$strSql =
"INSERT INTO b_sonet_group_site(GROUP_ID, SITE_ID) ".
"SELECT ".$ID.", LID ".
"FROM b_lang ".
"WHERE LID IN (".$str_SiteID.") ";
$DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
$arLogID = array();
$dbResult = CSocNetLog::GetList(
array(),
array("LOG_RIGHTS" => "SG".$ID),
false,
false,
array("ID")
);
while ($arResult = $dbResult->Fetch())
{
$DB->Query("DELETE FROM b_sonet_log_site WHERE LOG_ID = ".$arResult["ID"]."", false, "FILE: ".__FILE__."
LINE: ".__LINE__);
$DB->Query("
INSERT INTO b_sonet_log_site(LOG_ID, SITE_ID)
SELECT ".$arResult["ID"].", LID
FROM b_lang
WHERE LID IN (".$str_SiteID.")
", false, "FILE: ".__FILE__."
LINE: ".__LINE__);
$arLogID[] = $arResult["ID"];
}
}
if (
!empty($arSiteID)
|| intval($arFields["SUBJECT_ID"] ?? 0) > 0
)
{
$subjectId = 0;
$groupSiteList = array();
if (intval($arFields["SUBJECT_ID"]) <= 0)
{
$res = WorkgroupTable::getList(array(
'filter' => array('=ID' => $ID),
'select' => array('SUBJECT_ID')
));
if ($workgroupFieldsList = $res->fetch())
{
$subjectId = intval($workgroupFieldsList["SUBJECT_ID"]);
}
}
else
{
$subjectId = intval($arFields["SUBJECT_ID"]);
}
if (empty($arSiteID))
{
$res = WorkgroupSiteTable::getList(array(
'filter' => array('=GROUP_ID' => $ID),
'select' => array('SITE_ID')
));
while ($workgroupSiteFieldsList = $res->fetch())
{
$groupSiteList[] = intval($workgroupSiteFieldsList["SITE_ID"]);
}
}
else
{
$groupSiteList = $arSiteID;
}
if (
$subjectId > 0
&& !empty($groupSiteList)
)
{
WorkgroupSubject::syncSiteId(array(
'subjectId' => $subjectId,
'siteId' => $groupSiteList
));
}
}
$sonetGroupCache = self::getStaticCache();
unset($sonetGroupCache[$ID]);
self::setStaticCache($sonetGroupCache);
if(defined("BX_COMP_MANAGED_CACHE"))
{
if ($bClearCommonTag)
{
$CACHE_MANAGER->ClearByTag("sonet_group");
}
$CACHE_MANAGER->ClearByTag("sonet_group_".$ID);
$CACHE_MANAGER->ClearByTag("sonet_user2group_G".$ID);
$CACHE_MANAGER->ClearByTag("sonet_user2group");
}
$USER_FIELD_MANAGER->Update("SONET_GROUP", $ID, $arFields);
$events = GetModuleEvents("socialnetwork", "OnSocNetGroupUpdate");
while ($arEvent = $events->Fetch())
{
ExecuteModuleEventEx($arEvent, array($ID, &$arFields));
}
EventServiceService::addEvent(EventServiceEventDictionary::EVENT_WORKGROUP_UPDATE, [
'GROUP_ID' => $ID,
]);
CSocNetGroup::SearchIndex($ID, false, $arGroupOld);
if (isset($arFields['KEYWORDS']))
{
$tagsList = explode(',', $arFields["KEYWORDS"]);
if (
!empty($tagsList)
&& is_array($tagsList)
)
{
$tagsList = array_map(function($a) { return trim($a, ' '); }, $tagsList);
$tagsList = array_filter($tagsList, function($a) { return ($a <> ''); });
}
WorkgroupTagTable::set([
'groupId' => $ID,
'tags' => $tagsList
]);
}
Workgroup::setIndex(array(
'fields' => array_merge($arFields, array('ID' => $ID))
));
$arGroupNew = CSocNetGroup::GetByID($ID);
if (
$arGroupNew['OPENED'] === 'Y'
&& $arGroupOld['OPENED'] === 'N'
)
{
CSocNetGroup::ConfirmAllRequests($ID, $bAutoSubscribe);
}
if (
!empty($arFields["NAME"])
|| !empty($arFields["IMAGE_ID"])
|| !empty($arFields["OWNER_ID"])
)
{
$chatData = IntegrationImChatWorkgroup::getChatData(array(
'group_id' => $ID
));
if (
!empty($chatData)
&& !empty($chatData[$ID])
&& intval($chatData[$ID]) > 0
)
{
$chatId = $chatData[$ID];
$chat = new CIMChat();
if(!empty($arFields["NAME"]))
{
$chat->rename(
$chatId,
IntegrationImChatWorkgroup::buildChatName(
$arFields["NAME"],
array(
'project' => ($arGroupNew["PROJECT"] == 'Y')
)
),
false,
false
);
}
if(!empty($arFields["IMAGE_ID"]))
{
$chat->setAvatarId($chatId, $arFields['IMAGE_ID']);
}
if(!empty($arFields["OWNER_ID"]))
{
$chat->setOwner($chatId, $arFields["OWNER_ID"], false);
}
}
}
}
else
{
if($USER_FIELD_MANAGER->Update("SONET_GROUP", $ID, $arFields))
{
if(defined("BX_COMP_MANAGED_CACHE"))
{
if ($bClearCommonTag)
{
$CACHE_MANAGER->ClearByTag("sonet_group");
}
$CACHE_MANAGER->ClearByTag("sonet_group_".$ID);
}
}
else
{
$ID = False;
}
}
if ($ID && $bSync)
{
$groupItem = Workgroup::getById($ID, false);
$groupItem->syncDeptConnection();
}
return $ID;
}