source: asadb/forms/views.py @ 1b7966c

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

Require authentication to edit FYSM submissions

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