Redirects to error pages for most pages work. Still todo: adding/editing sandwiches...
[~kgodey/maayanwich.git] / views.py
index 430446c..e3912c2 100644 (file)
--- a/views.py
+++ b/views.py
@@ -1,4 +1,4 @@
-from django.http import HttpResponse, Http404
+from django.http import HttpResponse, Http404, HttpResponseRedirect
 from django.contrib.auth.models import User
 from forms import SandwichForm, IngredientForm, NewUserForm
 from django.shortcuts import render_to_response
 from django.contrib.auth.models import User
 from forms import SandwichForm, IngredientForm, NewUserForm
 from django.shortcuts import render_to_response
@@ -6,94 +6,113 @@ from django.core.files.uploadedfile import SimpleUploadedFile
 from models import Sandwich, Ingredient
 from django.contrib.auth import authenticate, login, logout
 from django.contrib.auth.forms import AuthenticationForm
 from models import Sandwich, Ingredient
 from django.contrib.auth import authenticate, login, logout
 from django.contrib.auth.forms import AuthenticationForm
+from django.contrib.comments.models import Comment
 from django.template import RequestContext
 from django.template import RequestContext
+from django.core import serializers
+from slugify import SlugifyUniquely
+from recipes.settings import MEDIA_URL
 import datetime
 import datetime
+import django.utils.simplejson as json
+from django.core.urlresolvers import reverse
+from django.contrib.auth.decorators import login_required
 
 def sidebar_context(request):
 
 def sidebar_context(request):
-       if Sandwich.objects.count() > 5:
-               sandwiches = Sandwich.objects.order_by('-date_made')[:5]
+       x = Sandwich.objects.order_by('-date_made')
+       if x.count() > 5:
+               sandwiches = x[:5]
        else:
        else:
-               sandwiches = Sandwich.objects.order_by('-date_made')
-       return {'sandwiches': sandwiches}
+               sandwiches = x
+       monthly = Sandwich.objects.dates('date_made', 'month')
+       return {'sandwiches': sandwiches, 'monthly': monthly, 'user': request.user, 'media_url': MEDIA_URL }
 
 
 
 
+@login_required
 def add_sandwich(request):
 def add_sandwich(request):
-       if Sandwich.objects.count() > 5:
-               sandwiches = Sandwich.objects.order_by('-date_made')[:5]
+       if request.method == 'POST': # If the form has been submitted...
+               form = SandwichForm(request.POST, request.FILES) # A form bound to the POST data
+               if form.is_valid(): # All validation rules pass
+                       newsandwich = form.save(commit=False)
+                       newsandwich.user = request.user
+                       newsandwich.save()
+                       x = request.POST['ing']
+                       x = x.strip()
+                       y = x.split(',')
+                       for n in y:
+                               if n.isdigit():
+                                       newsandwich.ingredients.add(Ingredient.objects.get(id=n))
+                               elif n[:4] == 'new:' and len(n) > 4:
+                                       n = n.lstrip('new:')
+                                       newingredient = Ingredient(name=n, slug=SlugifyUniquely(n, Ingredient))
+                                       newingredient.save()
+                                       newsandwich.ingredients.add(newingredient)
+                       newsandwich.save()
+                       return HttpResponseRedirect(newsandwich.get_absolute_url())
        else:
        else:
-               sandwiches = Sandwich.objects.order_by('-date_made')
-       if request.user.is_authenticated():
-               if request.method == 'POST': # If the form has been submitted...
-                       form = SandwichForm(request.POST, request.FILES) # A form bound to the POST data
-                       if form.is_valid(): # All validation rules pass
-                               newsandwich = form.save(commit=False)
-                               newsandwich.user = request.user
-                               newsandwich.save()
-                               thankshtml = "<p class=\"formthanks\">Thanks! Your sandwich has been added!</p>"
-                               return HttpResponse(thankshtml) # Redirect after POST
+               form = SandwichForm(initial={'user': request.user}) # An unbound form
+       return render_to_response('sandwich.html', {'sform': form,}, context_instance=RequestContext(request))
+
+
+@login_required
+def edit_sandwich(request, slug):
+       sedit = Sandwich.objects.get(slug=slug)
+       ingred = sedit.ingredients.all()
+       if not sedit.user == request.user:
+               return HttpResponseRedirect(reverse('all_sandwiches'))
+       else:   
+               if request.method == 'POST':
+                       sform = SandwichForm(request.POST, request.FILES, instance=sedit)
+                       if sform.is_valid(): # All validation rules pass
+                               sedit.adjective = request.POST['adjective']
+                               sedit.date_made = request.POST['date_made']
+                               sedit.notes = request.POST['notes']
+                               for ig in sedit.ingredients.all():
+                                       sedit.ingredients.remove(ig)
+                               if request.POST['picture']:
+                                       sedit.picture = request.POST['picture']
+                               x = request.POST['ing']
+                               x = x.strip()
+                               y = x.split(',')
+                               for n in y:
+                                       if n.isdigit():
+                                               sedit.ingredients.add(Ingredient.objects.get(id=n))
+                                       elif n[:4] == 'new:' and len(n) > 4:
+                                               n = n.lstrip('new:')
+                                               newingredient = Ingredient(name=n, slug=SlugifyUniquely(n, Ingredient))
+                                               newingredient.save()
+                                               sedit.ingredients.add(newingredient)
+                               sedit.save()
+                               return HttpResponseRedirect(sedit.get_absolute_url())
                else:
                else:
-                       form = SandwichForm(initial={'user': request.user}) # An unbound form
-               return render_to_response('sandwich.html', {'sform': form, 'user': request.user,}, context_instance=RequestContext(request))
-       else:
-               thankshtml = "<p class=\"formthanks\">You are not logged in.</p>"
-               return HttpResponse(thankshtml) # Redirect after POST
+                       sform = SandwichForm(instance=sedit)
+               return render_to_response('editsandwich.html', {'sform': sform, 's':sedit, 'prepop': ingred, }, context_instance=RequestContext(request))
 
 
-def add_ingredient(request):
-       if request.user.is_authenticated():
-               if Sandwich.objects.count() > 5:
-                       sandwiches = Sandwich.objects.order_by('-date_made')[:5]
-               else:
-                       sandwiches = Sandwich.objects.order_by('-date_made')
-               if request.method == 'POST': # If the form has been submitted...
-                       form = IngredientForm(request.POST) # A form bound to the POST data
-                       if form.is_valid(): # All validation rules pass
-                               newsandwich = form.save()
-                               newsandwich.save()
-                               thankshtml = "<p class=\"formthanks\">Thanks! Your ingredient has been saved!</p>"
-                               return HttpResponse(thankshtml) # Redirect after POST
-               else:
-                       form = IngredientForm() # An unbound form
 
 
-               return render_to_response('ingredient.html', {'iform': form, 'user': request.user,}, context_instance=RequestContext(request))
+@login_required
+def del_sandwich(request, slug):
+       if Sandwich.objects.get(slug=slug):
+               del_sandwich = Sandwich.objects.get(slug=slug)
+               if request.user == del_sandwich.user:
+                       del_sandwich.delete()
+               return HttpResponseRedirect(reverse('all_sandwiches'))
        else:
        else:
-               thankshtml = "<p class=\"formthanks\">You are not logged in.</p>"
-               return HttpResponse(thankshtml) # Redirect after POST
-
-def all_sandwich(request):
-       try:
-               allsandwiches = Sandwich.objects.all()
-               if Sandwich.objects.count() > 5:
-                       sandwiches = Sandwich.objects.order_by('-date_made')[:5]
-               else:
-                       sandwiches = Sandwich.objects.order_by('-date_made')
-       except Sandwich.DoesNotExist:
-               raise Http404
-       return render_to_response('allsandwiches.html', {'allsandwiches': allsandwiches, 'user': request.user,}, context_instance=RequestContext(request))
+               return HttpResponseRedirect(reverse('all_sandwiches'))
 
 
 
 
-def baseview(request):
+def all_sandwich(request):
        try:
        try:
-               if Sandwich.objects.count() > 5:
-                       sandwiches = Sandwich.objects.order_by('-date_made')[:5]
-                       allsandwiches = Sandwich.objects.all()
-               else:
-                       sandwiches = Sandwich.objects.order_by('-date_made')
-                       allsandwiches = Sandwich.objects.all()
+               allsandwiches = Sandwich.objects.order_by('-date_made')
        except Sandwich.DoesNotExist:
                raise Http404
        except Sandwich.DoesNotExist:
                raise Http404
-       return render_to_response('base.html', {'all': allsandwiches,}, context_instance=RequestContext(request))
+       return render_to_response('allsandwiches.html', {'allsandwiches': allsandwiches,}, context_instance=RequestContext(request))
 
 
 def sandwich_month(request, year, month):
        try:
                ms = Sandwich.objects.filter(date_made__month=month, date_made__year=year)
 
 
 def sandwich_month(request, year, month):
        try:
                ms = Sandwich.objects.filter(date_made__month=month, date_made__year=year)
-               if Sandwich.objects.count() > 5:
-                       sandwiches = Sandwich.objects.order_by('-date_made')[:5]
-               else:
-                       sandwiches = Sandwich.objects.order_by('-date_made')
        except Sandwich.DoesNotExist:
                raise Http404
        except Sandwich.DoesNotExist:
                raise Http404
-       return render_to_response('allsandwiches.html', {'allsandwiches': ms, 'user': request.user,}, context_instance=RequestContext(request))
+       return render_to_response('allsandwiches.html', {'allsandwiches': ms,}, context_instance=RequestContext(request))
+       
        
 def current_home(request):
        temp = Sandwich.objects.order_by('-date_made')[0]
        
 def current_home(request):
        temp = Sandwich.objects.order_by('-date_made')[0]
@@ -101,69 +120,51 @@ def current_home(request):
        curr_year = temp.date_made.year
        try:
                ms = Sandwich.objects.filter(date_made__month=curr_month, date_made__year=curr_year)
        curr_year = temp.date_made.year
        try:
                ms = Sandwich.objects.filter(date_made__month=curr_month, date_made__year=curr_year)
-               if Sandwich.objects.count() > 5:
-                       sandwiches = Sandwich.objects.order_by('-date_made')[:5]
-               else:
-                       sandwiches = Sandwich.objects.order_by('-date_made')
        except Sandwich.DoesNotExist:
                raise Http404
        except Sandwich.DoesNotExist:
                raise Http404
-       return render_to_response('allsandwiches.html', {'allsandwiches': ms, 'user': request.user,}, context_instance=RequestContext(request))
+       return render_to_response('allsandwiches.html', {'allsandwiches': ms,}, context_instance=RequestContext(request))
 
 
 def specific_sandwich(request, slug):
        try:
                s = Sandwich.objects.get(slug=slug)
 
 
 def specific_sandwich(request, slug):
        try:
                s = Sandwich.objects.get(slug=slug)
-               if Sandwich.objects.count() > 5:
-                       sandwiches = Sandwich.objects.order_by('-date_made')[:5]
-               else:
-                       sandwiches = Sandwich.objects.order_by('-date_made')
        except Sandwich.DoesNotExist:
                raise Http404
        except Sandwich.DoesNotExist:
                raise Http404
-       return render_to_response('onesandwich.html', {'s': s, 'user': request.user,}, context_instance=RequestContext(request))
+       return render_to_response('onesandwich.html', {'s': s,}, context_instance=RequestContext(request))
 
 def logout_view(request):
 
 def logout_view(request):
+       x = reverse('index')
+       if 'HTTP_REFERER' in request.META:
+               x = request.META['HTTP_REFERER']
        if request.user.is_authenticated():
                logout(request)
        if request.user.is_authenticated():
                logout(request)
-               thankshtml = "<p class=\"formthanks\">You have been logged out.</p>"
-               return HttpResponse(thankshtml)
+               return HttpResponseRedirect(x)
        else:
        else:
-               thankshtml = "<p class=\"formthanks\">You are not logged in.</p>"
-               return HttpResponse(thankshtml)
+               return render_to_response('notloggedin.html', context_instance=RequestContext(request))
 
 
 def login_view(request):
 
 
 def login_view(request):
-       if Sandwich.objects.count() > 5:
-               sandwiches = Sandwich.objects.order_by('-date_made')[:5]
+       if request.user.is_authenticated():
+               return render_to_response('loggedin.html', context_instance=RequestContext(request))
+       
+       redirect_to = reverse('index')
+       if 'next' in request.GET:
+               redirect_to = request.GET['next']
+       
+       if request.method == 'POST':
+               aform = AuthenticationForm(data=request.POST)
+               if aform.is_valid():
+                       login(request, aform.get_user())
+                       return HttpResponseRedirect(redirect_to)
        else:
        else:
-               sandwiches = Sandwich.objects.order_by('-date_made')
-       try:
-               username = request.POST['username']
-               password = request.POST['password']
-               user = authenticate(username=username, password=password)
-               if user is not None:
-                       if user.is_active:
-                               login(request, user)
-                               thankshtml = "<p class=\"formthanks\">You have been logged in</p>"
-                               return HttpResponse(thankshtml)
-                       else:
-                               thankshtml = "<p class=\"formthanks\">Disabled account. Sorry.</p>"
-                               return HttpResponse(thankshtml)
-               else:
-                       thankshtml = "<p class=\"formthanks\">Invalid login!</p>"
-                       return HttpResponse(thankshtml)
-       except KeyError:
                aform = AuthenticationForm()
                aform = AuthenticationForm()
-               return render_to_response('login.html', {'aform': aform, 'user': request.user,}, context_instance=RequestContext(request))
+       
+       return render_to_response('login.html', {'aform': aform,}, context_instance=RequestContext(request))
 
 
 def create_user(request):
 
 
 def create_user(request):
-       if Sandwich.objects.count() > 5:
-               sandwiches = Sandwich.objects.order_by('-date_made')[:5]
-       else:
-               sandwiches = Sandwich.objects.order_by('-date_made')
        if request.user.is_authenticated():
        if request.user.is_authenticated():
-               thankshtml = "<p class=\"formthanks\">You are already logged in!</p>"
-               return HttpResponse(thankshtml)
+               return render_to_response('loggedin.html', context_instance=RequestContext(request))
        elif request.method == 'POST': # If the form has been submitted...
                form = NewUserForm(request.POST) # A form bound to the POST data
                if form.is_valid(): # All validation rules pass
        elif request.method == 'POST': # If the form has been submitted...
                form = NewUserForm(request.POST) # A form bound to the POST data
                if form.is_valid(): # All validation rules pass
@@ -179,11 +180,66 @@ def create_user(request):
                                user.first_name = first_name
                                user.last_name = last_name
                                user.save()
                                user.first_name = first_name
                                user.last_name = last_name
                                user.save()
-                               thankshtml = "<p class=\"formthanks\">Thanks! You are now a new user!</p>"
-                               return HttpResponse(thankshtml) # Redirect after POST
+                               return HttpResponseRedirect('index')
                        else:
                        else:
-                               thankshtml = "<p class=\"formthanks\">Your passwords don't match!</p>"
-                               return HttpResponse(thankshtml) # Redirect after POST   
+                               return HttpResponseRedirect('signup')   
        else:
                form = NewUserForm() # An unbound form
        else:
                form = NewUserForm() # An unbound form
-               return render_to_response('newuser.html', {'cform': form, 'user': request.user,}, context_instance=RequestContext(request))
\ No newline at end of file
+               return render_to_response('newuser.html', {'cform': form,}, context_instance=RequestContext(request))
+               
+
+def edit_user(request, gusername):
+       guser = User.objects.get(username = gusername)
+       if not request.user.is_authenticated():
+               return HttpResponseRedirect(reverse('login'))
+       elif request.user == guser:
+               if request.method == 'POST': # If the form has been submitted...
+                       form = NewUserForm(request.POST) # A form bound to the POST data
+                       username = request.POST['username']
+                       first_name = request.POST['first_name']
+                       last_name = request.POST['last_name']
+                       password = request.POST['password']
+                       cpassword = request.POST['confirm_password']
+                       email = request.POST['email']
+                       guser.username = username
+                       guser.first_name = first_name
+                       guser.last_name = last_name
+                       if not password.strip() == '':
+                               if password == cpassword:
+                                       guser.set_password(password)
+                       guser.email = email
+                       guser.save()
+                       return HttpResponseRedirect(reverse('edit_user', kwargs={'gusername':guser.username}))  
+               else:
+                       form = NewUserForm(initial={'username': guser.username, 'first_name': guser.first_name, 'last_name': guser.last_name, 'email': guser.email, }) # An unbound form
+                       return render_to_response('edituser.html', {'cform': form,}, context_instance=RequestContext(request))
+       else:
+               return HttpResponseRedirect(reverse('index'))
+               
+
+def comment_posted(request):
+       if request.GET['c']:
+               comment_id  = request.GET['c']
+               com = Comment.objects.get( pk = comment_id )
+               post = com.content_object
+               if post:
+                       return HttpResponseRedirect( post.get_absolute_url() + '#comments' )
+
+
+def ajaxfun(request):
+       if request.method == 'GET':
+               if 'q' in request.GET:
+                       query = request.GET['q']
+                       ingredients = Ingredient.objects.filter(name__icontains=query).order_by('name')
+                       responselist = []
+                       is_in = False
+                       for i in ingredients:
+                               responselist.append({'id': str(i.pk), 'name': i.name})
+                               if i.name == query:
+                                       is_in = True
+                       if is_in == False:
+                               responselist.append({'id': 'new:' + query, 'name': query})
+                       response = json.dumps(responselist)
+                       return HttpResponse(response)
+               else:
+                       return HttpResponse('{}')
\ No newline at end of file