Revision 8c804c12
b/snf-astakos-app/astakos/im/forms.py | ||
---|---|---|
538 | 538 |
name = forms.URLField() |
539 | 539 |
moderation_enabled = forms.BooleanField( |
540 | 540 |
help_text="Check if you want to approve members participation manually", |
541 |
required=False |
|
541 |
required=False, |
|
542 |
initial=True |
|
542 | 543 |
) |
543 | 544 |
max_participants = forms.IntegerField( |
544 | 545 |
widget=forms.HiddenInput(), label='', required=False |
... | ... | |
564 | 565 |
'issue_date', 'expiration_date', |
565 | 566 |
'moderation_enabled', 'max_participants'] |
566 | 567 |
|
567 |
def add_field((k, v)): |
|
568 |
def add_fields((k, v)):
|
|
568 | 569 |
self.fields[k] = forms.IntegerField( |
569 | 570 |
required=False, |
570 | 571 |
widget=forms.HiddenInput() |
571 | 572 |
) |
572 |
map(add_field, |
|
573 |
map(add_fields,
|
|
573 | 574 |
((k, v) for k,v in qd.iteritems() if k.endswith('_uplimit')) |
574 | 575 |
) |
576 |
|
|
577 |
def add_fields((k, v)): |
|
578 |
self.fields[k] = forms.BooleanField( |
|
579 |
required=False, |
|
580 |
widget=forms.HiddenInput() |
|
581 |
) |
|
582 |
map(add_fields, |
|
583 |
((k, v) for k,v in qd.iteritems() if k.startswith('is_selected_')) |
|
584 |
) |
|
575 | 585 |
|
576 | 586 |
def clean(self): |
587 |
super(AstakosGroupCreationForm, self).clean() |
|
577 | 588 |
self.cleaned_data['policies'] = [] |
578 | 589 |
append = self.cleaned_data['policies'].append |
579 |
tbd = [] |
|
590 |
tbd = [f for f in self.fields if f.startswith('is_selected_')]
|
|
580 | 591 |
for name, uplimit in self.cleaned_data.iteritems(): |
581 | 592 |
subs = name.split('_uplimit') |
582 | 593 |
if len(subs) == 2: |
583 | 594 |
tbd.append(name) |
584 | 595 |
prefix, suffix = subs |
585 | 596 |
s, r = prefix.split(RESOURCE_SEPARATOR) |
586 |
append(dict(service=s, resource=r, uplimit=uplimit)) |
|
587 |
for name in tbd: |
|
588 |
del self.cleaned_data[name] |
|
597 |
resource = Resource.objects.get(service__name=s, name=r) |
|
598 |
|
|
599 |
# keep only resource limits for selected resource groups |
|
600 |
if self.cleaned_data.get( |
|
601 |
'is_selected_%s' % resource.group, True |
|
602 |
): |
|
603 |
append(dict(service=s, resource=r, uplimit=uplimit)) |
|
604 |
(self.cleaned_data.pop(name, None) for name in tbd) |
|
589 | 605 |
return self.cleaned_data |
590 | 606 |
|
591 | 607 |
|
b/snf-astakos-app/astakos/im/templates/im/astakosgroup_form_demo.html | ||
---|---|---|
8 | 8 |
{% block page.body %} |
9 | 9 |
|
10 | 10 |
|
11 |
<form action="{% url group_summary %}" method="post" class="withlabels quotas-form">{% csrf_token %}
|
|
11 |
<form action="" method="post" class="withlabels quotas-form">{% csrf_token %} |
|
12 | 12 |
|
13 | 13 |
<fieldset> |
14 | 14 |
<legend> |
b/snf-astakos-app/astakos/im/templates/im/astakosgroup_form_summary.html | ||
---|---|---|
4 | 4 |
|
5 | 5 |
{% block page.body %} |
6 | 6 |
|
7 |
{{ data }} |
|
7 | 8 |
<div class="projects summary"> |
8 | 9 |
<h2>GROUP REQUEST SUMMARY</h2> |
9 | 10 |
<p>Lorem ipsum</p> |
10 |
<form class="quotas-form"> |
|
11 |
<form action="{% url group_add_complete %}" class="quotas-form">
|
|
11 | 12 |
<div class="full-dotted"> |
12 | 13 |
<h3>DETAILS:</h3> |
13 | 14 |
<dl class="alt-style"> |
b/snf-astakos-app/astakos/im/urls.py | ||
---|---|---|
63 | 63 |
'resource_list', {}, name='resource_list'), |
64 | 64 |
url(r'^billing/?$', 'billing', {}, name='billing'), |
65 | 65 |
url(r'^timeline/?$', 'timeline', {}, name='timeline'), |
66 |
url(r'^group/add/(?P<kind_name>\w+)?$', |
|
66 |
url(r'^group/add/complete/?$', 'group_add_complete', {}, |
|
67 |
name='group_add_complete'), |
|
68 |
url(r'^group/add/(?P<kind_name>\w+)?$', |
|
67 | 69 |
'group_add', {}, name='group_add'), |
68 | 70 |
url(r'^group/list/?$', |
69 | 71 |
'group_list', {}, name='group_list'), |
... | ... | |
85 | 87 |
'disapprove_member', {}, name='disapprove_member'), |
86 | 88 |
url(r'^group/create/?$', 'group_create_list', {}, |
87 | 89 |
name='group_create_list'), |
88 |
url(r'^group/add/summary/?$', 'group_summary', {}, |
|
89 |
name='group_summary'), |
|
90 | 90 |
) |
91 | 91 |
|
92 | 92 |
if EMAILCHANGE_ENABLED: |
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
664 | 664 |
extra_context)) |
665 | 665 |
|
666 | 666 |
|
667 |
@require_http_methods(["GET", "POST"]) |
|
667 | 668 |
@signed_terms_required |
668 | 669 |
@login_required |
669 | 670 |
def group_add(request, kind_name='default'): |
... | ... | |
725 | 726 |
if request.method == 'POST': |
726 | 727 |
form = form_class(request.POST, request.FILES) |
727 | 728 |
if form.is_valid(): |
728 |
d = form.cleaned_data.copy() |
|
729 |
d['owners'] = [request.user] |
|
730 |
result = callpoint.create_groups((d,)).next() |
|
731 |
if result.is_success: |
|
732 |
new_object = result.data[0] |
|
733 |
msg = _("The %(verbose_name)s was created successfully.") %\ |
|
734 |
{"verbose_name": model._meta.verbose_name} |
|
735 |
messages.success(request, msg, fail_silently=True) |
|
736 |
|
|
737 |
# # send notification |
|
738 |
# try: |
|
739 |
# send_group_creation_notification( |
|
740 |
# template_name='im/group_creation_notification.txt', |
|
741 |
# dictionary={ |
|
742 |
# 'group': new_object, |
|
743 |
# 'owner': request.user, |
|
744 |
# 'policies': list(form.cleaned_data['policies']), |
|
745 |
# } |
|
746 |
# ) |
|
747 |
# except SendNotificationError, e: |
|
748 |
# messages.error(request, e, fail_silently=True) |
|
749 |
return HttpResponseRedirect(post_save_redirect % new_object) |
|
750 |
else: |
|
751 |
msg = _("The %(verbose_name)s creation failed: %(reason)s.") %\ |
|
752 |
{"verbose_name": model._meta.verbose_name, |
|
753 |
"reason":result.reason} |
|
754 |
messages.error(request, msg, fail_silently=True) |
|
729 |
return render_response( |
|
730 |
template='im/astakosgroup_form_summary.html', |
|
731 |
context_instance=get_context(request), |
|
732 |
data=form.cleaned_data |
|
733 |
) |
|
755 | 734 |
else: |
756 | 735 |
now = datetime.now() |
757 | 736 |
data = { |
... | ... | |
773 | 752 |
}, context_processors) |
774 | 753 |
return HttpResponse(t.render(c)) |
775 | 754 |
|
755 |
|
|
756 |
# @require_http_methods(["POST"]) |
|
757 |
# @signed_terms_required |
|
758 |
# @login_required |
|
759 |
def group_add_complete(request): |
|
760 |
d = dict(request.POST) |
|
761 |
d['owners'] = [request.user] |
|
762 |
result = callpoint.create_groups((d,)).next() |
|
763 |
if result.is_success: |
|
764 |
new_object = result.data[0] |
|
765 |
model = AstakosGroup |
|
766 |
msg = _("The %(verbose_name)s was created successfully.") %\ |
|
767 |
{"verbose_name": model._meta.verbose_name} |
|
768 |
messages.success(request, msg, fail_silently=True) |
|
769 |
|
|
770 |
# # send notification |
|
771 |
# try: |
|
772 |
# send_group_creation_notification( |
|
773 |
# template_name='im/group_creation_notification.txt', |
|
774 |
# dictionary={ |
|
775 |
# 'group': new_object, |
|
776 |
# 'owner': request.user, |
|
777 |
# 'policies': list(form.cleaned_data['policies']), |
|
778 |
# } |
|
779 |
# ) |
|
780 |
# except SendNotificationError, e: |
|
781 |
# messages.error(request, e, fail_silently=True) |
|
782 |
post_save_redirect = '/im/group/%(id)s/' |
|
783 |
return HttpResponseRedirect(post_save_redirect % new_object) |
|
784 |
else: |
|
785 |
msg = _("The %(verbose_name)s creation failed: %(reason)s.") %\ |
|
786 |
{"verbose_name": model._meta.verbose_name, |
|
787 |
"reason":result.reason} |
|
788 |
messages.error(request, msg, fail_silently=True) |
|
789 |
|
|
790 |
return render_response( |
|
791 |
template='im/astakosgroup_form_summary.html', |
|
792 |
context_instance=get_context(request)) |
|
793 |
|
|
794 |
|
|
795 |
@require_http_methods(["GET"]) |
|
776 | 796 |
@signed_terms_required |
777 | 797 |
@login_required |
778 | 798 |
def group_list(request): |
... | ... | |
828 | 848 |
}) |
829 | 849 |
|
830 | 850 |
|
851 |
@require_http_methods(["GET", "POST"]) |
|
831 | 852 |
@signed_terms_required |
832 | 853 |
@login_required |
833 | 854 |
def group_detail(request, group_id): |
... | ... | |
904 | 925 |
return response |
905 | 926 |
|
906 | 927 |
|
928 |
@require_http_methods(["GET", "POST"]) |
|
907 | 929 |
@signed_terms_required |
908 | 930 |
@login_required |
909 | 931 |
def group_search(request, extra_context=None, **kwargs): |
... | ... | |
959 | 981 |
sorting=sorting)) |
960 | 982 |
|
961 | 983 |
|
984 |
@require_http_methods(["GET"]) |
|
962 | 985 |
@signed_terms_required |
963 | 986 |
@login_required |
964 | 987 |
def group_all(request, extra_context=None, **kwargs): |
... | ... | |
996 | 1019 |
sorting=sorting)) |
997 | 1020 |
|
998 | 1021 |
|
1022 |
@require_http_methods(["POST"]) |
|
999 | 1023 |
@signed_terms_required |
1000 | 1024 |
@login_required |
1001 | 1025 |
def group_join(request, group_id): |
... | ... | |
1015 | 1039 |
return group_search(request) |
1016 | 1040 |
|
1017 | 1041 |
|
1042 |
@require_http_methods(["POST"]) |
|
1018 | 1043 |
@signed_terms_required |
1019 | 1044 |
@login_required |
1020 | 1045 |
def group_leave(request, group_id): |
... | ... | |
1053 | 1078 |
return wrapper |
1054 | 1079 |
|
1055 | 1080 |
|
1081 |
@require_http_methods(["POST"]) |
|
1056 | 1082 |
@signed_terms_required |
1057 | 1083 |
@login_required |
1058 | 1084 |
@handle_membership |
... | ... | |
1084 | 1110 |
messages.error(request, msg) |
1085 | 1111 |
|
1086 | 1112 |
|
1113 |
@require_http_methods(["GET"]) |
|
1087 | 1114 |
@signed_terms_required |
1088 | 1115 |
@login_required |
1089 | 1116 |
def resource_list(request): |
... | ... | |
1139 | 1166 |
context_instance=get_context(request),) |
1140 | 1167 |
|
1141 | 1168 |
|
1169 |
@require_http_methods(["GET"]) |
|
1142 | 1170 |
@signed_terms_required |
1143 | 1171 |
@login_required |
1144 | 1172 |
def billing(request): |
... | ... | |
1200 | 1228 |
return data |
1201 | 1229 |
|
1202 | 1230 |
|
1231 |
@require_http_methods(["GET"]) |
|
1203 | 1232 |
@signed_terms_required |
1204 | 1233 |
@login_required |
1205 | 1234 |
def timeline(request): |
... | ... | |
1226 | 1255 |
form=form, |
1227 | 1256 |
timeline_header=timeline_header, |
1228 | 1257 |
timeline_body=timeline_body) |
1229 |
return data |
|
1230 |
|
|
1231 |
|
|
1232 |
def group_summary(request): |
|
1233 |
return render_response( |
|
1234 |
template='im/astakosgroup_form_summary.html', |
|
1235 |
context_instance=get_context(request) ) |
|
1258 |
return data |
Also available in: Unified diff