Added a custom context processor (to pass in the context required for the sidebar...
[~kgodey/maayanwich.git] / views.py
1 from django.http import HttpResponse, Http404
2 from django.contrib.auth.models import User
3 from forms import SandwichForm, IngredientForm, NewUserForm
4 from django.shortcuts import render_to_response
5 from django.core.files.uploadedfile import SimpleUploadedFile
6 from models import Sandwich, Ingredient
7 from django.contrib.auth import authenticate, login, logout
8 from django.contrib.auth.forms import AuthenticationForm
9 from django.template import RequestContext
10 import datetime
11
12 def sidebar_context(request):
13         if Sandwich.objects.count() > 5:
14                 sandwiches = Sandwich.objects.order_by('-date_made')[:5]
15         else:
16                 sandwiches = Sandwich.objects.order_by('-date_made')
17         return {'sandwiches': sandwiches}
18
19
20 def add_sandwich(request):
21         if Sandwich.objects.count() > 5:
22                 sandwiches = Sandwich.objects.order_by('-date_made')[:5]
23         else:
24                 sandwiches = Sandwich.objects.order_by('-date_made')
25         if request.user.is_authenticated():
26                 if request.method == 'POST': # If the form has been submitted...
27                         form = SandwichForm(request.POST, request.FILES) # A form bound to the POST data
28                         if form.is_valid(): # All validation rules pass
29                                 newsandwich = form.save(commit=False)
30                                 newsandwich.user = request.user
31                                 newsandwich.save()
32                                 thankshtml = "<p class=\"formthanks\">Thanks! Your sandwich has been added!</p>"
33                                 return HttpResponse(thankshtml) # Redirect after POST
34                 else:
35                         form = SandwichForm(initial={'user': request.user}) # An unbound form
36                 return render_to_response('sandwich.html', {'sform': form, 'user': request.user,}, context_instance=RequestContext(request))
37         else:
38                 thankshtml = "<p class=\"formthanks\">You are not logged in.</p>"
39                 return HttpResponse(thankshtml) # Redirect after POST
40
41 def add_ingredient(request):
42         if request.user.is_authenticated():
43                 if Sandwich.objects.count() > 5:
44                         sandwiches = Sandwich.objects.order_by('-date_made')[:5]
45                 else:
46                         sandwiches = Sandwich.objects.order_by('-date_made')
47                 if request.method == 'POST': # If the form has been submitted...
48                         form = IngredientForm(request.POST) # A form bound to the POST data
49                         if form.is_valid(): # All validation rules pass
50                                 newsandwich = form.save()
51                                 newsandwich.save()
52                                 thankshtml = "<p class=\"formthanks\">Thanks! Your ingredient has been saved!</p>"
53                                 return HttpResponse(thankshtml) # Redirect after POST
54                 else:
55                         form = IngredientForm() # An unbound form
56
57                 return render_to_response('ingredient.html', {'iform': form, 'user': request.user,}, context_instance=RequestContext(request))
58         else:
59                 thankshtml = "<p class=\"formthanks\">You are not logged in.</p>"
60                 return HttpResponse(thankshtml) # Redirect after POST
61
62 def all_sandwich(request):
63         try:
64                 allsandwiches = Sandwich.objects.all()
65                 if Sandwich.objects.count() > 5:
66                         sandwiches = Sandwich.objects.order_by('-date_made')[:5]
67                 else:
68                         sandwiches = Sandwich.objects.order_by('-date_made')
69         except Sandwich.DoesNotExist:
70                 raise Http404
71         return render_to_response('allsandwiches.html', {'allsandwiches': allsandwiches, 'user': request.user,}, context_instance=RequestContext(request))
72
73
74 def baseview(request):
75         try:
76                 if Sandwich.objects.count() > 5:
77                         sandwiches = Sandwich.objects.order_by('-date_made')[:5]
78                         allsandwiches = Sandwich.objects.all()
79                 else:
80                         sandwiches = Sandwich.objects.order_by('-date_made')
81                         allsandwiches = Sandwich.objects.all()
82         except Sandwich.DoesNotExist:
83                 raise Http404
84         return render_to_response('base.html', {'all': allsandwiches,}, context_instance=RequestContext(request))
85
86
87 def sandwich_month(request, year, month):
88         try:
89                 ms = Sandwich.objects.filter(date_made__month=month, date_made__year=year)
90                 if Sandwich.objects.count() > 5:
91                         sandwiches = Sandwich.objects.order_by('-date_made')[:5]
92                 else:
93                         sandwiches = Sandwich.objects.order_by('-date_made')
94         except Sandwich.DoesNotExist:
95                 raise Http404
96         return render_to_response('allsandwiches.html', {'allsandwiches': ms, 'user': request.user,}, context_instance=RequestContext(request))
97         
98 def current_home(request):
99         temp = Sandwich.objects.order_by('-date_made')[0]
100         curr_month = temp.date_made.month
101         curr_year = temp.date_made.year
102         try:
103                 ms = Sandwich.objects.filter(date_made__month=curr_month, date_made__year=curr_year)
104                 if Sandwich.objects.count() > 5:
105                         sandwiches = Sandwich.objects.order_by('-date_made')[:5]
106                 else:
107                         sandwiches = Sandwich.objects.order_by('-date_made')
108         except Sandwich.DoesNotExist:
109                 raise Http404
110         return render_to_response('allsandwiches.html', {'allsandwiches': ms, 'user': request.user,}, context_instance=RequestContext(request))
111
112
113 def specific_sandwich(request, slug):
114         try:
115                 s = Sandwich.objects.get(slug=slug)
116                 if Sandwich.objects.count() > 5:
117                         sandwiches = Sandwich.objects.order_by('-date_made')[:5]
118                 else:
119                         sandwiches = Sandwich.objects.order_by('-date_made')
120         except Sandwich.DoesNotExist:
121                 raise Http404
122         return render_to_response('onesandwich.html', {'s': s, 'user': request.user,}, context_instance=RequestContext(request))
123
124 def logout_view(request):
125         if request.user.is_authenticated():
126                 logout(request)
127                 thankshtml = "<p class=\"formthanks\">You have been logged out.</p>"
128                 return HttpResponse(thankshtml)
129         else:
130                 thankshtml = "<p class=\"formthanks\">You are not logged in.</p>"
131                 return HttpResponse(thankshtml)
132
133
134 def login_view(request):
135         if Sandwich.objects.count() > 5:
136                 sandwiches = Sandwich.objects.order_by('-date_made')[:5]
137         else:
138                 sandwiches = Sandwich.objects.order_by('-date_made')
139         try:
140                 username = request.POST['username']
141                 password = request.POST['password']
142                 user = authenticate(username=username, password=password)
143                 if user is not None:
144                         if user.is_active:
145                                 login(request, user)
146                                 thankshtml = "<p class=\"formthanks\">You have been logged in</p>"
147                                 return HttpResponse(thankshtml)
148                         else:
149                                 thankshtml = "<p class=\"formthanks\">Disabled account. Sorry.</p>"
150                                 return HttpResponse(thankshtml)
151                 else:
152                         thankshtml = "<p class=\"formthanks\">Invalid login!</p>"
153                         return HttpResponse(thankshtml)
154         except KeyError:
155                 aform = AuthenticationForm()
156                 return render_to_response('login.html', {'aform': aform, 'user': request.user,}, context_instance=RequestContext(request))
157
158
159 def create_user(request):
160         if Sandwich.objects.count() > 5:
161                 sandwiches = Sandwich.objects.order_by('-date_made')[:5]
162         else:
163                 sandwiches = Sandwich.objects.order_by('-date_made')
164         if request.user.is_authenticated():
165                 thankshtml = "<p class=\"formthanks\">You are already logged in!</p>"
166                 return HttpResponse(thankshtml)
167         elif request.method == 'POST': # If the form has been submitted...
168                 form = NewUserForm(request.POST) # A form bound to the POST data
169                 if form.is_valid(): # All validation rules pass
170                         username = form.cleaned_data['username']
171                         first_name = form.cleaned_data['first_name']
172                         last_name = form.cleaned_data['last_name']
173                         password = form.cleaned_data['password']
174                         cpassword = form.cleaned_data['confirm_password']
175                         email = form.cleaned_data['email']
176                         if password == cpassword:
177                                 user = User.objects.create_user(username, email, password)
178                                 user.save()
179                                 user.first_name = first_name
180                                 user.last_name = last_name
181                                 user.save()
182                                 thankshtml = "<p class=\"formthanks\">Thanks! You are now a new user!</p>"
183                                 return HttpResponse(thankshtml) # Redirect after POST
184                         else:
185                                 thankshtml = "<p class=\"formthanks\">Your passwords don't match!</p>"
186                                 return HttpResponse(thankshtml) # Redirect after POST   
187         else:
188                 form = NewUserForm() # An unbound form
189                 return render_to_response('newuser.html', {'cform': form, 'user': request.user,}, context_instance=RequestContext(request))