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