Revision 01ac12d5 snf-astakos-app/astakos/im/views.py
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
38 | 38 |
from urllib import quote |
39 | 39 |
from functools import wraps |
40 | 40 |
|
41 |
from django.core.mail import send_mail |
|
42 |
from django.http import HttpResponse, HttpResponseBadRequest |
|
43 |
from django.shortcuts import redirect |
|
44 |
from django.template.loader import render_to_string |
|
45 |
from django.utils.translation import ugettext as _ |
|
46 |
from django.core.urlresolvers import reverse |
|
47 |
from django.contrib.auth.decorators import login_required |
|
48 | 41 |
from django.contrib import messages |
49 |
from django.db import transaction |
|
50 |
from django.utils.http import urlencode |
|
51 |
from django.http import HttpResponseRedirect, HttpResponseBadRequest |
|
52 |
from django.db.utils import IntegrityError |
|
42 |
from django.contrib.auth.decorators import login_required |
|
53 | 43 |
from django.contrib.auth.views import password_change |
54 | 44 |
from django.core.exceptions import ValidationError |
45 |
from django.core.mail import send_mail |
|
46 |
from django.core.urlresolvers import reverse |
|
47 |
from django.db import transaction |
|
55 | 48 |
from django.db.models import Q |
56 |
from django.forms.models import inlineformset_factory |
|
57 |
from django.forms.models import inlineformset_factory |
|
49 |
from django.db.utils import IntegrityError |
|
50 |
from django.forms.fields import URLField |
|
51 |
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, \ |
|
52 |
HttpResponseRedirect, HttpResponseBadRequest |
|
53 |
from django.shortcuts import redirect |
|
54 |
from django.template.loader import render_to_string |
|
55 |
from django.utils.http import urlencode |
|
56 |
from django.utils.translation import ugettext as _ |
|
58 | 57 |
from django.views.generic.create_update import * |
59 | 58 |
from django.views.generic.list_detail import * |
60 | 59 |
|
... | ... | |
588 | 587 |
extra_context)) |
589 | 588 |
|
590 | 589 |
@signed_terms_required |
590 |
@login_required |
|
591 | 591 |
def group_add(request): |
592 | 592 |
return create_object(request, |
593 |
form_class=get_astakos_group_creation_form(request), |
|
594 |
login_required = True, |
|
595 |
post_save_redirect = '/im/group/%(id)s/') |
|
593 |
form_class=get_astakos_group_creation_form(request), |
|
594 |
post_save_redirect = '/im/group/%(id)s/') |
|
596 | 595 |
|
597 | 596 |
@signed_terms_required |
598 | 597 |
@login_required |
599 | 598 |
def group_list(request): |
600 |
relation = get_query(request).get('relation', 'member') |
|
601 |
if relation == 'member': |
|
602 |
list = AstakosGroup.objects.filter(membership__person=request.user) |
|
603 |
else: |
|
604 |
list = AstakosGroup.objects.filter(owner__id=request.user.id) |
|
599 |
list = AstakosGroup.objects.filter(membership__person=request.user) |
|
605 | 600 |
return object_list(request, queryset=list) |
606 | 601 |
|
607 | 602 |
@signed_terms_required |
... | ... | |
611 | 606 |
group = AstakosGroup.objects.select_related().get(id=group_id) |
612 | 607 |
except AstakosGroup.DoesNotExist: |
613 | 608 |
return HttpResponseBadRequest(_('Invalid group.')) |
614 |
members = map(lambda m:{m.person.realname:m.is_approved}, group.membership_set.all()) |
|
615 | 609 |
return object_detail(request, |
616 |
AstakosGroup.objects.all(), |
|
617 |
object_id=group_id, |
|
618 |
extra_context = {'quota':group.get_policies(), |
|
619 |
'members':members, |
|
620 |
'form':get_astakos_group_policy_creation_form(group), |
|
621 |
'more_policies':group.has_undefined_policies()}) |
|
610 |
AstakosGroup.objects.all(), |
|
611 |
object_id=group_id, |
|
612 |
extra_context = {'form':get_astakos_group_policy_creation_form(group), |
|
613 |
'quota':group.policies, |
|
614 |
'more_policies':group.has_undefined_policies}) |
|
622 | 615 |
|
623 | 616 |
@signed_terms_required |
624 | 617 |
@login_required |
... | ... | |
627 | 620 |
return object_list(request, queryset=list) |
628 | 621 |
|
629 | 622 |
@signed_terms_required |
623 |
@login_required |
|
630 | 624 |
def group_policies_add(request, group_id): |
631 | 625 |
try: |
632 | 626 |
group = AstakosGroup.objects.select_related().get(id=group_id) |
633 | 627 |
except AstakosGroup.DoesNotExist: |
634 | 628 |
return HttpResponseBadRequest(_('Invalid group.')) |
635 | 629 |
return create_object(request, |
636 |
form_class=get_astakos_group_policy_creation_form(group), |
|
637 |
login_required=True, |
|
638 |
template_name = 'im/astakosgroup_detail.html', |
|
639 |
post_save_redirect = reverse('group_detail', kwargs=dict(group_id=group_id)), |
|
640 |
extra_context = {'group':group, |
|
641 |
'quota':group.get_policies(), |
|
642 |
'more_policies':group.has_undefined_policies()}) |
|
630 |
form_class=get_astakos_group_policy_creation_form(group), |
|
631 |
template_name = 'im/astakosgroup_detail.html', |
|
632 |
post_save_redirect = reverse('group_detail', kwargs=dict(group_id=group_id)), |
|
633 |
extra_context = {'group':group, |
|
634 |
'quota':group.policies, |
|
635 |
'more_policies':group.has_undefined_policies}) |
|
643 | 636 |
@signed_terms_required |
644 | 637 |
@login_required |
645 | 638 |
def group_approval_request(request, group_id): |
646 | 639 |
return HttpResponse() |
640 |
|
|
641 |
@signed_terms_required |
|
642 |
@login_required |
|
643 |
def group_search(request, queryset=EmptyQuerySet(), extra_context={}, **kwargs): |
|
644 |
join_forms = {} |
|
645 |
if request.method == 'GET': |
|
646 |
form = AstakosGroupSearchForm() |
|
647 |
else: |
|
648 |
form = AstakosGroupSearchForm(get_query(request)) |
|
649 |
if form.is_valid(): |
|
650 |
q = form.cleaned_data['q'].strip() |
|
651 |
q = URLField().to_python(q) |
|
652 |
queryset = AstakosGroup.objects.select_related().filter(name=q) |
|
653 |
f = MembershipCreationForm |
|
654 |
for g in queryset: |
|
655 |
join_forms[g.name] = f(dict(group=g, |
|
656 |
person=request.user, |
|
657 |
date_requested=datetime.now().strftime("%d/%m/%Y"))) |
|
658 |
return object_list(request, |
|
659 |
queryset, |
|
660 |
template_name='im/astakosgroup_list.html', |
|
661 |
extra_context=dict(form=form, is_search=True, join_forms=join_forms)) |
|
662 |
|
|
663 |
@signed_terms_required |
|
664 |
@login_required |
|
665 |
def group_join(request, group_id): |
|
666 |
return create_object(request, |
|
667 |
model=Membership, |
|
668 |
template_name='im/astakosgroup_list.html', |
|
669 |
post_save_redirect = reverse('group_detail', kwargs=dict(group_id=group_id))) |
|
670 |
|
|
671 |
@signed_terms_required |
|
672 |
@login_required |
|
673 |
def group_leave(request, group_id): |
|
674 |
try: |
|
675 |
m = Membership.objects.select_related().get(group__id=group_id, person=request.user) |
|
676 |
except Membership.DoesNotExist: |
|
677 |
return HttpResponseBadRequest(_('Invalid membership.')) |
|
678 |
if request.user in m.group.owner.all(): |
|
679 |
return HttpResponseForbidden(_('Owner can not leave the group.')) |
|
680 |
return delete_object(request, |
|
681 |
model=Membership, |
|
682 |
object_id = m.id, |
|
683 |
template_name='im/astakosgroup_list.html', |
|
684 |
post_delete_redirect = reverse('group_detail', kwargs=dict(group_id=group_id))) |
|
685 |
|
|
686 |
def handle_membership(): |
|
687 |
def decorator(func): |
|
688 |
@wraps(func) |
|
689 |
def wrapper(request, membership_id): |
|
690 |
try: |
|
691 |
m = Membership.objects.select_related().get(id=membership_id) |
|
692 |
except Membership.DoesNotExist: |
|
693 |
return HttpResponseBadRequest(_('Invalid membership.')) |
|
694 |
else: |
|
695 |
if request.user not in m.group.owner.all(): |
|
696 |
return HttpResponseForbidden(_('User is not a group owner.')) |
|
697 |
func(request, m) |
|
698 |
return render_response(template='im/astakosgroup_detail.html', |
|
699 |
context_instance=get_context(request), |
|
700 |
object=m.group, |
|
701 |
quota=m.group.policies, |
|
702 |
more_policies=m.group.has_undefined_policies) |
|
703 |
return wrapper |
|
704 |
return decorator |
|
705 |
|
|
706 |
@signed_terms_required |
|
707 |
@login_required |
|
708 |
@handle_membership() |
|
709 |
def approve_member(request, membership): |
|
710 |
try: |
|
711 |
membership.approve() |
|
712 |
realname = membership.person.realname |
|
713 |
msg = _('%s has been successfully joined the group.' % realname) |
|
714 |
messages.success(request, msg) |
|
715 |
except BaseException, e: |
|
716 |
logger.exception(e) |
|
717 |
msg = _('Something went wrong during %s\'s approval.' % realname) |
|
718 |
messages.error(request, msg) |
|
647 | 719 |
|
720 |
@signed_terms_required |
|
721 |
@login_required |
|
722 |
@handle_membership() |
|
723 |
def disapprove_member(request, membership): |
|
724 |
try: |
|
725 |
membership.disapprove() |
|
726 |
realname = membership.person.realname |
|
727 |
msg = _('%s has been successfully removed from the group.' % realname) |
|
728 |
messages.success(request, msg) |
|
729 |
except BaseException, e: |
|
730 |
logger.exception(e) |
|
731 |
msg = _('Something went wrong during %s\'s disapproval.' % realname) |
|
732 |
messages.error(request, msg) |
Also available in: Unified diff