Revision 1a14083b snf-astakos-app/astakos/im/functions.py

b/snf-astakos-app/astakos/im/functions.py
459 459
    project = get_project_by_id(project_id)
460 460
    accept_membership_checks(project, request_user)
461 461

  
462
    membership, created = ProjectMembership.objects.get_or_create(
463
        project=project,
464
        person=user)
465

  
466
    if not membership.can_accept():
467
        m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST)
468
        raise PermissionDenied(m)
462
    try:
463
        membership = get_membership(project_id, user.id)
464
        if not membership.can_enroll():
465
            m = _(astakos_messages.MEMBERSHIP_ACCEPTED)
466
            raise PermissionDenied(m)
467
        membership.join()
468
    except IOError:
469
        membership = new_membership(project, user)
469 470

  
470 471
    membership.accept()
471 472
    qh_sync_user(user)
......
539 540
        return False
540 541

  
541 542
    m = user.get_membership(project)
542
    return not(m)
543
    if not m:
544
        return True
545
    return m.can_join()
546

  
547

  
548
def new_membership(project, user):
549
    m = ProjectMembership.objects.create(project=project, person=user)
550
    m._log_create(None, ProjectMembership.REQUESTED)
551
    return m
543 552

  
544 553

  
545 554
def join_project(project_id, request_user):
......
547 556
    project = get_project_by_id(project_id)
548 557
    join_project_checks(project)
549 558

  
550
    membership, created = ProjectMembership.objects.get_or_create(
551
        project=project,
552
        person=request_user)
553

  
554
    if not created:
555
        msg = _(astakos_messages.MEMBERSHIP_REQUEST_EXISTS)
556
        raise PermissionDenied(msg)
559
    try:
560
        membership = get_membership(project.id, request_user.id)
561
        if not membership.can_join():
562
            msg = _(astakos_messages.MEMBERSHIP_REQUEST_EXISTS)
563
            raise PermissionDenied(msg)
564
        membership.join()
565
    except IOError:
566
        membership = new_membership(project, request_user)
557 567

  
558 568
    auto_accepted = False
559 569
    join_policy = project.application.member_join_policy

Also available in: Unified diff