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