• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/helper/workgroup.php
  • Класс: BitrixSocialnetworkHelperWorkgroup
  • Вызов: Workgroup::join
static function join(array $fields = []): bool
{
	$groupId = (int)($fields['groupId'] ?? 0);
	$userId = (int)($fields['userId'] ?? User::getCurrentUserId());

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

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

	if (!HelperWorkgroupAccess::canJoin([
		'userId' => $userId,
		'groupId' => $groupId,
	]))
	{
		throw new AccessDeniedException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_NO_PERMS'));
	}

	$relation = UserToGroupTable::getList([
		'filter' => [
			'USER_ID' => $userId,
			'GROUP_ID' => $groupId,
		],
		'select' => [ 'ID', 'ROLE', 'INITIATED_BY_TYPE' ],
	])->fetchObject();

	if (
		$relation
		&& $relation->getRole() === UserToGroupTable::ROLE_REQUEST
		&& $relation->getInitiatedByType() === UserToGroupTable::INITIATED_BY_GROUP
	)
	{
		if (!CSocNetUserToGroup::userConfirmRequestToBeMember($userId, $relation->getId(), false))
		{
			throw new RuntimeException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED'));
		}

		$confirmationNeeded = false;
	}
	else
	{
		$requestConfirmUrl = CComponentEngine::MakePathFromTemplate(Path::get('group_requests_path_template'), [ 'group_id' => $groupId ]);
		if (!CSocNetUserToGroup::sendRequestToBeMember($userId, $groupId, '', $requestConfirmUrl, false))
		{
			throw new RuntimeException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED'));
		}

		$confirmationNeeded = !(WorkgroupTable::getList([
			'filter' => [
				'ID' => $groupId
			],
			'select' => [ 'OPENED' ]
		])->fetchObject()->getOpened());
	}

	return $confirmationNeeded;
}