• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/group.php
  • Класс: CAllSocNetGroup
  • Вызов: CAllSocNetGroup::Delete
static function Delete($ID)
{
	global $DB, $APPLICATION, $CACHE_MANAGER, $USER_FIELD_MANAGER;

	if (!CSocNetGroup::__ValidateID($ID))
	{
		return false;
	}

	$ID = intval($ID);

	$db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetGroupDelete");
	while ($arEvent = $db_events->Fetch())
	{
		if (ExecuteModuleEventEx($arEvent, array($ID))===false)
		{
			return false;
		}
	}

	$arGroup = CSocNetGroup::GetByID($ID);
	if (!$arGroup)
	{
		$APPLICATION->ThrowException(GetMessage("SONET_NO_GROUP"), "ERROR_NO_GROUP");
		return false;
	}

	$DB->StartTransaction();

	$events = GetModuleEvents("socialnetwork", "OnSocNetGroupDelete");
	while ($arEvent = $events->Fetch())
	{
		ExecuteModuleEventEx($arEvent, array($ID));
	}

	EventServiceService::addEvent(EventServiceEventDictionary::EVENT_WORKGROUP_DELETE, [
		'GROUP_ID' => $ID,
	]);

	$res = UserToGroupTable::getList([
		'filter' => [
			'=GROUP_ID' => $ID
		],
		'select' => [ 'USER_ID' ]
	]);
	while($relationFields = $res->fetch())
	{
		CSocNetSearch::onUserRelationsChange($relationFields['USER_ID']);
	}
	$bSuccess = $DB->Query("DELETE FROM b_sonet_user2group WHERE GROUP_ID = ".$ID, true);

	if ($bSuccess)
	{
		BitrixSocialnetworkIntegrationImChatWorkgroup::unlinkChat(array(
			'group_id' => $ID
		));

		$bSuccessTmp = true;
		$dbResult = CSocNetFeatures::GetList(
			array(),
			array("ENTITY_ID" => $ID, "ENTITY_TYPE" => SONET_ENTITY_GROUP)
		);
		while ($arResult = $dbResult->Fetch())
		{
			$bSuccessTmp = $DB->Query("DELETE FROM b_sonet_features2perms WHERE FEATURE_ID = ".$arResult["ID"]."", true);
			if (!$bSuccessTmp)
			{
				break;
			}
		}
		if (!$bSuccessTmp)
		{
			$bSuccess = false;
		}
	}
	if ($bSuccess)
	{
		$bSuccess = $DB->Query("DELETE FROM b_sonet_features WHERE ENTITY_ID = ".$ID." AND ENTITY_TYPE = '".$DB->ForSql(SONET_ENTITY_GROUP, 1)."'", true);
	}
	if ($bSuccess)
	{
		$dbResult = CSocNetLog::GetList(
			array(),
			array("ENTITY_ID" => $ID, "ENTITY_TYPE" => SONET_ENTITY_GROUP),
			false,
			false,
			array("ID")
		);
		while ($arResult = $dbResult->Fetch())
		{
			$bSuccessTmp = $DB->Query("DELETE FROM b_sonet_log_site WHERE LOG_ID = ".$arResult["ID"]."", true);
			if (!$bSuccessTmp)
			{
				break;
			}

			$bSuccessTmp = $DB->Query("DELETE FROM b_sonet_log_right WHERE LOG_ID = ".$arResult["ID"]."", true);
			if (!$bSuccessTmp)
			{
				break;
			}
		}
		if (!$bSuccessTmp)
		{
			$bSuccess = false;
		}
	}
	if ($bSuccess)
	{
		$bSuccess = $DB->Query("DELETE FROM b_sonet_log WHERE ENTITY_TYPE = '".SONET_ENTITY_GROUP."' AND ENTITY_ID = ".$ID."", true);
	}
	if ($bSuccess)
	{
		$bSuccess = CSocNetLog::DeleteSystemEventsByGroupID($ID);
	}
	if ($bSuccess)
	{
		$bSuccess = $DB->Query("DELETE FROM b_sonet_log_events WHERE ENTITY_TYPE = 'G' AND ENTITY_ID = ".$ID."", true);
	}
	if ($bSuccess)
	{
		$bSuccess = $DB->Query("DELETE FROM b_sonet_group_site WHERE GROUP_ID = ".$ID."", true);
	}
	if ($bSuccess)
	{
		$bSuccess = $DB->Query("DELETE FROM b_sonet_log_right WHERE GROUP_CODE LIKE 'OSG".$ID."_%'", true);
	}
	if ($bSuccess)
	{
		$bSuccess = $DB->Query("DELETE FROM b_sonet_log_right WHERE GROUP_CODE LIKE 'SG".$ID."_%'", true);
	}
	if ($bSuccess)
	{
		$bSuccess = $DB->Query("DELETE FROM b_sonet_log_right WHERE GROUP_CODE = 'SG".$ID."'", true);
	}
	if ($bSuccess)
	{
		$bSuccess = CSocNetSubscription::DeleteEx(false, "SG".$ID);
	}
	if ($bSuccess)
	{
		$bSuccess = BitrixSocialnetworkWorkgroupTagTable::deleteByGroupId(['groupId' => $ID]);
	}

	if ($bSuccess)
	{
		CFile::Delete($arGroup["IMAGE_ID"]);
		$bSuccess = $DB->Query("DELETE FROM b_sonet_group WHERE ID = ".$ID."", true);
	}

	$sonetGroupCache = self::getStaticCache();

	if ($bSuccess)
	{
		CUserOptions::DeleteOption("socialnetwork", "~menu_".SONET_ENTITY_GROUP."_".$ID, false, 0);

		unset($sonetGroupCache[$ID]);
		self::setStaticCache($sonetGroupCache);
	}

	if ($bSuccess)
	{
		$DB->Commit();
	}
	else
	{
		$DB->Rollback();
	}

	if ($bSuccess)
	{
		unset($sonetGroupCache[$ID]);
		self::setStaticCache($sonetGroupCache);

		if(defined("BX_COMP_MANAGED_CACHE"))
		{
			$CACHE_MANAGER->ClearByTag("sonet_user2group_G".$ID);
			$CACHE_MANAGER->ClearByTag("sonet_user2group");
			$CACHE_MANAGER->ClearByTag("sonet_group_".$ID);
			$CACHE_MANAGER->ClearByTag("sonet_group");
		}
	}

	if (
		$bSuccess
		&& CModule::IncludeModule("search")
	)
	{
		CSearch::DeleteIndex("socialnetwork", "G".$ID);
	}

	if ($bSuccess)
	{
		$DB->Query("DELETE FROM b_sonet_event_user_view WHERE ENTITY_TYPE = '".SONET_ENTITY_GROUP."' AND ENTITY_ID = ".$ID, true);
	}

	if ($bSuccess)
	{
		$USER_FIELD_MANAGER->Delete("SONET_GROUP", $ID);
	}

	if (Loader::includeModule('tasks'))
	{
		$tagService = new Tag(0);
		$tagService->deleteGroupTags($ID);
	}

	return $bSuccess;
}