• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/mysql/group.php
  • Класс: CSocNetGroup
  • Вызов: CSocNetGroup::Update
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; }