• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/helper/workgroup.php
  • Класс: BitrixSocialnetworkHelperWorkgroup
  • Вызов: Workgroup::disconnectDepartment
static function disconnectDepartment(array $fields = []): bool
{
	global $APPLICATION;

	$departmentId = (int)($fields['departmentId'] ?? 0);
	$groupId = (int)($fields['groupId'] ?? 0);

	if ($groupId <= 0)
	{
		throw new ArgumentException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_WRONG_GROUP_ID'));
	}

	if ($departmentId <= 0)
	{
		throw new ArgumentException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_WRONG_DEPARTMENT_ID'));
	}

	if (!ModuleManager::isModuleInstalled('intranet'))
	{
		throw new NotImplementedException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED'));
	}

	$workgroup = ItemWorkgroup::getById($groupId);
	if (!$workgroup)
	{
		throw new ObjectNotFoundException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_WRONG_GROUP_ID'));
	}

	if (!isset($workgroup->getFields()['UF_SG_DEPT']))
	{
		throw new Exception(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED'));
	}

	$workgroupFields = $workgroup->getFields();
	$currentDepartmentsList = $workgroupFields['UF_SG_DEPT']['VALUE'];

	if (
		!is_array($currentDepartmentsList)
		|| empty($currentDepartmentsList)
	)
	{
		throw new Exception(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED'));
	}

	$currentDepartmentsList = array_map('intval', array_unique($currentDepartmentsList));

	if (!CSocNetGroup::update(
		$groupId,
		[
			'NAME' => $workgroupFields['NAME'],
			'UF_SG_DEPT' => array_diff($currentDepartmentsList, [ $departmentId ]),
		]
	))
	{
		if ($ex = $APPLICATION->getException())
		{
			$errorMessage = $ex->getString();
		}
		else
		{
			$errorMessage = Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED');
		}

		throw new Exception($errorMessage, 100);
	}

	return true;
}