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