Revision 7f3c4920

b/snf-astakos-app/astakos/im/functions.py
470 470
        raise IOError(m)
471 471

  
472 472

  
473
def get_membership_for_update_by_id(project_id, memb_id):
474
    try:
475
        objs = ProjectMembership.objects
476
        return objs.get_for_update(project__id=project_id,
477
                                   id=memb_id)
478
    except ProjectMembership.DoesNotExist:
479
        m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST)
480
        raise IOError(m)
481

  
482

  
473 483
def checkAllowed(entity, request_user, admin_only=False):
474 484
    if isinstance(entity, Project):
475 485
        application = entity.application
......
509 519
        raise PermissionDenied(m)
510 520

  
511 521

  
512
def accept_membership(project_id, user_id, request_user=None):
522
def accept_membership(project_id, memb_id, request_user=None):
513 523
    project = get_project_for_update(project_id)
514 524
    accept_membership_checks(project, request_user)
515 525

  
516
    membership = get_membership_for_update(project_id, user_id)
526
    membership = get_membership_for_update_by_id(project_id, memb_id)
517 527
    if not membership.can_accept():
518 528
        m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST)
519 529
        raise PermissionDenied(m)
520 530

  
531
    user = membership.person
521 532
    membership.accept()
522
    qh_sync_user(user_id)
533
    qh_sync_user(user.id)
523 534
    logger.info("User %s has been accepted in %s." %
524
                (membership.person.log_display, project))
535
                (user.log_display, project))
525 536

  
526
    membership_change_notify(project, membership.person, 'accepted')
537
    membership_change_notify(project, user, 'accepted')
527 538
    return membership
528 539

  
529 540

  
......
532 543
    checkAlive(project)
533 544

  
534 545

  
535
def reject_membership(project_id, user_id, request_user=None):
546
def reject_membership(project_id, memb_id, request_user=None):
536 547
    project = get_project_for_update(project_id)
537 548
    reject_membership_checks(project, request_user)
538
    membership = get_membership_for_update(project_id, user_id)
549
    membership = get_membership_for_update_by_id(project_id, memb_id)
539 550
    if not membership.can_reject():
540 551
        m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST)
541 552
        raise PermissionDenied(m)
542 553

  
554
    user = membership.person
543 555
    membership.reject()
544 556
    logger.info("Request of user %s for %s has been rejected." %
545
                (membership.person.log_display, project))
557
                (user.log_display, project))
546 558

  
547
    membership_change_notify(project, membership.person, 'rejected')
559
    membership_change_notify(project, user, 'rejected')
548 560
    return membership
549 561

  
550 562

  
......
575 587
        raise PermissionDenied(m)
576 588

  
577 589

  
578
def remove_membership(project_id, user_id, request_user=None):
590
def remove_membership(project_id, memb_id, request_user=None):
579 591
    project = get_project_for_update(project_id)
580 592
    remove_membership_checks(project, request_user)
581
    membership = get_membership_for_update(project_id, user_id)
593
    membership = get_membership_for_update_by_id(project_id, memb_id)
582 594
    if not membership.can_remove():
583 595
        m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP)
584 596
        raise PermissionDenied(m)
585 597

  
598
    user = membership.person
586 599
    membership.remove()
587
    qh_sync_user(user_id)
600
    qh_sync_user(user.id)
588 601
    logger.info("User %s has been removed from %s." %
589
                (membership.person.log_display, project))
602
                (user.log_display, project))
590 603

  
591
    membership_change_notify(project, membership.person, 'removed')
604
    membership_change_notify(project, user, 'removed')
592 605
    return membership
593 606

  
594 607

  
b/snf-astakos-app/astakos/im/tables.py
344 344

  
345 345
    for i, url in enumerate(urls):
346 346
        context.append(dict(url=reverse(url, args=(table.project.pk,
347
                                                   membership.person.pk)),
347
                                                   membership.pk)),
348 348
                            action=actions[i], prompt=prompts[i],
349 349
                            confirm=confirms[i]))
350 350
    return context
b/snf-astakos-app/astakos/im/urls.py
67 67
    url(r'^projects/(?P<chain_id>\d+)/join/?$', 'project_join', {}, name='project_join'),
68 68
    url(r'^projects/(?P<chain_id>\d+)/leave/?$', 'project_leave', {}, name='project_leave'),
69 69
    url(r'^projects/(?P<chain_id>\d+)/cancel/?$', 'project_cancel', {}, name='project_cancel'),
70
    url(r'^projects/(?P<chain_id>\d+)/(?P<user_id>\d+)/accept/?$', 'project_accept_member', {}, name='project_accept_member'),
71
    url(r'^projects/(?P<chain_id>\d+)/(?P<user_id>\d+)/reject/?$', 'project_reject_member', {}, name='project_reject_member'),
72
    url(r'^projects/(?P<chain_id>\d+)/(?P<user_id>\d+)/remove/?$', 'project_remove_member', {}, name='project_remove_member'),
70
    url(r'^projects/(?P<chain_id>\d+)/(?P<memb_id>\d+)/accept/?$', 'project_accept_member', {}, name='project_accept_member'),
71
    url(r'^projects/(?P<chain_id>\d+)/(?P<memb_id>\d+)/reject/?$', 'project_reject_member', {}, name='project_reject_member'),
72
    url(r'^projects/(?P<chain_id>\d+)/(?P<memb_id>\d+)/remove/?$', 'project_remove_member', {}, name='project_remove_member'),
73 73
    url(r'^projects/app/(?P<application_id>\d+)/?$', 'project_app', {}, name='project_app'),
74 74
    url(r'^projects/app/(?P<application_id>\d+)/modify$', 'project_modify', {}, name='project_modify'),
75 75
    url(r'^projects/app/(?P<application_id>\d+)/approve$', 'project_app_approve', {}, name='project_app_approve'),
b/snf-astakos-app/astakos/im/views.py
1500 1500

  
1501 1501
@require_http_methods(["POST"])
1502 1502
@valid_astakos_user_required
1503
def project_accept_member(request, chain_id, user_id):
1503
def project_accept_member(request, chain_id, memb_id):
1504 1504

  
1505 1505
    with ExceptionHandler(request):
1506
        _project_accept_member(request, chain_id, user_id)
1506
        _project_accept_member(request, chain_id, memb_id)
1507 1507

  
1508 1508
    return redirect(reverse('project_detail', args=(chain_id,)))
1509 1509

  
1510 1510

  
1511 1511
@commit_on_success_strict()
1512
def _project_accept_member(request, chain_id, user_id):
1512
def _project_accept_member(request, chain_id, memb_id):
1513 1513
    try:
1514 1514
        chain_id = int(chain_id)
1515
        user_id = int(user_id)
1516
        m = accept_membership(chain_id, user_id, request.user)
1515
        memb_id = int(memb_id)
1516
        m = accept_membership(chain_id, memb_id, request.user)
1517 1517
    except (IOError, PermissionDenied), e:
1518 1518
        messages.error(request, e)
1519 1519
    else:
......
1524 1524

  
1525 1525
@require_http_methods(["POST"])
1526 1526
@valid_astakos_user_required
1527
def project_remove_member(request, chain_id, user_id):
1527
def project_remove_member(request, chain_id, memb_id):
1528 1528

  
1529 1529
    with ExceptionHandler(request):
1530
        _project_remove_member(request, chain_id, user_id)
1530
        _project_remove_member(request, chain_id, memb_id)
1531 1531

  
1532 1532
    return redirect(reverse('project_detail', args=(chain_id,)))
1533 1533

  
1534 1534

  
1535 1535
@commit_on_success_strict()
1536
def _project_remove_member(request, chain_id, user_id):
1536
def _project_remove_member(request, chain_id, memb_id):
1537 1537
    try:
1538 1538
        chain_id = int(chain_id)
1539
        user_id = int(user_id)
1540
        m = remove_membership(chain_id, user_id, request.user)
1539
        memb_id = int(memb_id)
1540
        m = remove_membership(chain_id, memb_id, request.user)
1541 1541
    except (IOError, PermissionDenied), e:
1542 1542
        messages.error(request, e)
1543 1543
    else:
......
1548 1548

  
1549 1549
@require_http_methods(["POST"])
1550 1550
@valid_astakos_user_required
1551
def project_reject_member(request, chain_id, user_id):
1551
def project_reject_member(request, chain_id, memb_id):
1552 1552

  
1553 1553
    with ExceptionHandler(request):
1554
        _project_reject_member(request, chain_id, user_id)
1554
        _project_reject_member(request, chain_id, memb_id)
1555 1555

  
1556 1556
    return redirect(reverse('project_detail', args=(chain_id,)))
1557 1557

  
1558 1558

  
1559 1559
@commit_on_success_strict()
1560
def _project_reject_member(request, chain_id, user_id):
1560
def _project_reject_member(request, chain_id, memb_id):
1561 1561
    try:
1562 1562
        chain_id = int(chain_id)
1563
        user_id = int(user_id)
1564
        m = reject_membership(chain_id, user_id, request.user)
1563
        memb_id = int(memb_id)
1564
        m = reject_membership(chain_id, memb_id, request.user)
1565 1565
    except (IOError, PermissionDenied), e:
1566 1566
        messages.error(request, e)
1567 1567
    else:

Also available in: Unified diff