- Модуль: 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;
}