source: asadb/forms/views.py @ 90afb00

fysm-4-1iframespace-accessstablestagetest-hooks
Last change on this file since 90afb00 was 90afb00, checked in by Alex Dehnert <adehnert@…>, 15 years ago

Add support for submitting FYSM entries

  • Property mode set to 100644
File size: 4.9 KB
RevLine 
[aba463b]1import forms.models
[90afb00]2import groups.models
3import settings
4
[aba463b]5from django.views.generic import list_detail
6from django.shortcuts import render_to_response, get_object_or_404
[90afb00]7from django.template import RequestContext
8from django.http import Http404, HttpResponseRedirect
9from django.core.urlresolvers import reverse
10from django.forms import Form
11from django.forms import ModelForm
12from django.forms import ModelChoiceField
13from django.core.mail import send_mail, mail_admins
14from django.template import Context, Template
15from django.template.loader import get_template
[aba463b]16
17import datetime
18
[90afb00]19#################
20# GENERIC VIEWS #
21#################
22
23class SelectGroupForm(Form):
24    group = ModelChoiceField(queryset=groups.models.Group.objects.all())
25
26def select_group(request, url_name_after, pagename='homepage', ):
27    if request.method == 'POST': # If the form has been submitted...
28        form = SelectGroupForm(request.POST) # A form bound to the POST data
29        if form.is_valid(): # All validation rules pass
30            group = form.cleaned_data['group'].id
31            return HttpResponseRedirect(reverse(url_name_after, args=[group],)) # Redirect after POST
32    else:
33        form = SelectGroupForm() # An unbound form
34
35    context = {
36        'form':form,
37        'pagename':'request_reimbursement',
38    }
39    return render_to_response('forms/select.html', context, context_instance=RequestContext(request), )
40
41#############################
42# FIRST-YEAR SUMMER MAILING #
43#############################
44
[97399af]45def fysm_by_years(request, year, category, ):
[aba463b]46    if year is None: year = datetime.date.today().year
47    queryset = forms.models.FYSM.objects.filter(year=year).order_by('group__name')
[dafa3c8]48    category_obj = None
49    if category != None:
50        category_obj = get_object_or_404(forms.models.FYSMTag, slug=category)
51        queryset = queryset.filter(tags=category_obj)
[189506e]52    categories = forms.models.FYSMTag.objects.all()
[aba463b]53    return list_detail.object_list(
54        request,
55        queryset=queryset,
[90afb00]56        template_name="fysm/fysm_listing.html",
[aba463b]57        template_object_name="fysm",
58        extra_context={
59            "year": year,
60            "pagename": "fysm",
[dafa3c8]61            "category": category_obj,
[189506e]62            "categories": categories,
[aba463b]63        }
64    )
[90afb00]65
66class FYSMRequestForm(ModelForm):
67    class Meta:
68        model = forms.models.FYSM
69        fields = (
70            'display_name',
71            'website',
72            'join_url',
73            'contact_email',
74            'description',
75            'logo',
76            'tags',
77        )
78
79def fysm_manage(request, group, ):
80    year = datetime.date.today().year
81    group_obj = get_object_or_404(groups.models.Group, pk=group)
82
83    initial = {}
84    try:
85        fysm_obj = forms.models.FYSM.objects.get(group=group_obj, year=year, )
86        print "Successfully found", fysm_obj.__dict__
87    except forms.models.FYSM.DoesNotExist:
88        fysm_obj = forms.models.FYSM()
89        fysm_obj.group = group_obj
90        fysm_obj.year = year
91        initial['display_name'] = group_obj.name
92        initial['year'] = year
93        initial['website'] = group_obj.website_url
94        initial['join_url'] = group_obj.website_url
95        initial['contact_email'] = group_obj.officer_email
96
97    if request.method == 'POST': # If the form has been submitted...
98        form = FYSMRequestForm(request.POST, request.FILES, instance=fysm_obj, ) # A form bound to the POST data
99
100        if form.is_valid(): # All validation rules pass
101            request_obj = form.save()
102
103            # Send email
104            tmpl = get_template('fysm/update_email.txt')
105            ctx = Context({
106                'group': group_obj,
107                'fysm': fysm_obj,
108                'submitter': request.user,
109                'request': request,
110                'sender': "ASA FYSM team",
111            })
112            body = tmpl.render(ctx)
113            recipients = ['asa-fysm@mit.edu', group_obj.officer_email, ]
114            send_mail(
115                'FYSM entry for "%s" updated by "%s"' % (
116                    group_obj.name,
117                    request.user,
118                ),
119                body,
120                'asa-fysm@mit.edu',
121                recipients,
122            )
123            return HttpResponseRedirect(reverse('fysm-thanks', args=[fysm_obj.pk],)) # Redirect after POST
124
125    else:
126        form = FYSMRequestForm(instance=fysm_obj, initial=initial, ) # An unbound form
127
128    context = {
129        'group':group_obj,
130        'fysm':fysm_obj,
131        'form':form,
132        'pagename':'fysm',
133    }
134    return render_to_response('fysm/submit.html', context, context_instance=RequestContext(request), )
135
136
137def fysm_thanks(request, fysm, ):
138    year = datetime.date.today().year
139    fysm_obj = get_object_or_404(forms.models.FYSM, pk=fysm)
140
141    context = {
142        'group':fysm_obj.group,
143        'fysm':fysm_obj,
144        'pagename':'fysm',
145    }
146    return render_to_response('fysm/thanks.html', context, context_instance=RequestContext(request), )
Note: See TracBrowser for help on using the repository browser.