X-Git-Url: http://git.ithinksw.org/~kgodey/maayanwich.git/blobdiff_plain/f3cb6c9aac4ebeec54e8a82959cf8d56b30b15b5..695fbac5cde9f2b38d3b67247480d7f470754331:/views.py diff --git a/views.py b/views.py index 51be20d..bc4798b 100644 --- a/views.py +++ b/views.py @@ -1,15 +1,20 @@ -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.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 django.contrib.auth.forms import AuthenticationForm, UserCreationForm +from django.contrib.comments.models import Comment from django.template import RequestContext from django.core import serializers +from slugify import SlugifyUniquely +from recipes.settings import MEDIA_URL 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): x = Sandwich.objects.order_by('-date_made') @@ -18,56 +23,94 @@ def sidebar_context(request): else: sandwiches = x monthly = Sandwich.objects.dates('date_made', 'month') - return {'sandwiches': sandwiches, 'monthly': monthly, 'user': request.user} + return {'sandwiches': sandwiches, 'monthly': monthly, 'user': request.user, 'media_url': MEDIA_URL } +@login_required def add_sandwich(request): - 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() + 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: + 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 render_to_response('nopermission.html', context_instance=RequestContext(request)) + 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(): - newsandwich.ingredients.add(Ingredient.objects.get(id=n)) - newsandwich.save() - thankshtml = "
Thanks! Your sandwich has been added!
" - return HttpResponse(thankshtml) # Redirect after POST + 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: - form = SandwichForm(initial={'user': request.user}) # An unbound form - return render_to_response('sandwich.html', {'sform': form,}, context_instance=RequestContext(request)) - else: - thankshtml = "You are not logged in.
" - 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 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 = "Thanks! Your ingredient has been saved!
" - return HttpResponse(thankshtml) # Redirect after POST - else: - form = IngredientForm() # An unbound form - return render_to_response('ingredient.html', {'iform': form,}, 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: - thankshtml = "You are not logged in.
" - return HttpResponse(thankshtml) # Redirect after POST + return HttpResponseRedirect(reverse('all_sandwiches')) + def all_sandwich(request): try: - allsandwiches = Sandwich.objects.all() + allsandwiches = Sandwich.objects.order_by('-date_made') except Sandwich.DoesNotExist: raise Http404 return render_to_response('allsandwiches.html', {'allsandwiches': allsandwiches,}, context_instance=RequestContext(request)) + +def index_sandwich(request): + try: + allsandwiches = Sandwich.objects.order_by('adjective') + except Sandwich.DoesNotExist: + raise Http404 + return render_to_response('indexsandwiches.html', {'allsandwiches': allsandwiches,}, context_instance=RequestContext(request)) def sandwich_month(request, year, month): @@ -77,6 +120,7 @@ def sandwich_month(request, year, month): raise Http404 return render_to_response('allsandwiches.html', {'allsandwiches': ms,}, context_instance=RequestContext(request)) + def current_home(request): temp = Sandwich.objects.order_by('-date_made')[0] curr_month = temp.date_made.month @@ -91,80 +135,99 @@ def current_home(request): 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 return render_to_response('onesandwich.html', {'s': s,}, context_instance=RequestContext(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) - thankshtml = "You have been logged out.
" - return HttpResponse(thankshtml) + return HttpResponseRedirect(x) else: - thankshtml = "You are not logged in.
" - return HttpResponse(thankshtml) + return render_to_response('notloggedin.html', context_instance=RequestContext(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: - 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 = "You have been logged in
" - return HttpResponse(thankshtml) - else: - thankshtml = "Disabled account. Sorry.
" - return HttpResponse(thankshtml) - else: - thankshtml = "Invalid login!
" - return HttpResponse(thankshtml) - except KeyError: aform = AuthenticationForm() - return render_to_response('login.html', {'aform': aform,}, context_instance=RequestContext(request)) + + return render_to_response('login.html', {'aform': aform,}, context_instance=RequestContext(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(): - thankshtml = "You are already logged in!
" - return HttpResponse(thankshtml) - 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 - username = form.cleaned_data['username'] - first_name = form.cleaned_data['first_name'] - last_name = form.cleaned_data['last_name'] - password = form.cleaned_data['password'] - cpassword = form.cleaned_data['confirm_password'] - email = form.cleaned_data['email'] - if password == cpassword: - user = User.objects.create_user(username, email, password) - user.save() - user.first_name = first_name - user.last_name = last_name - user.save() - thankshtml = "Thanks! You are now a new user!
" - return HttpResponse(thankshtml) # Redirect after POST + 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 = UserCreationForm(data=request.POST) + if aform.is_valid(): + aform.save() + x = authenticate(username=aform.cleaned_data['username'], password=aform.cleaned_data['password1']) + login(request, x) + return render_to_response('usercreated.html', context_instance=RequestContext(request)) + else: + aform = UserCreationForm() + + return render_to_response('newuser.html', {'aform': aform,}, 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 + if form.is_valid(): + username = request.POST['username'] + first_name = request.POST['first_name'] + last_name = request.POST['last_name'] + password = request.POST['password'] + cpassword = request.POST['confirmpassword'] + email = request.POST['email'] + guser.username = username + guser.first_name = first_name + guser.last_name = last_name + if password != '': + guser.set_password(password) + guser.email = email + guser.save() + return render_to_response('userchanged.html', context_instance=RequestContext(request)) else: - thankshtml = "Your passwords don't match!
" - return HttpResponse(thankshtml) # Redirect after POST + return render_to_response('edituser.html', {'cform': form,}, context_instance=RequestContext(request)) + 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: - form = NewUserForm() # An unbound form - return render_to_response('newuser.html', {'cform': form,}, context_instance=RequestContext(request)) + return render_to_response('nopermission.html', context_instance=RequestContext(request)) + + +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): @@ -173,8 +236,13 @@ def ajaxfun(request): 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: