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