diff -r e86755df35da -r 87e77aa18610 project/scipycon/talk/views.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project/scipycon/talk/views.py Tue Jul 13 17:59:47 2010 +0530 @@ -0,0 +1,193 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +# python imports +from urlparse import urlparse + +# django +from django.conf import settings +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.core.urlresolvers import reverse +from django.views.generic.list_detail import object_list +from django.views.generic.list_detail import object_detail + +from django.contrib.auth.decorators import login_required +from django.contrib.auth.forms import AuthenticationForm +from django.contrib.auth.models import User + +# PIL +from PIL import Image + +# tagging +from tagging.models import Tag + +#kiwipycon +from project.kiwipycon.utils import set_message_cookie +from project.kiwipycon.utils import slugify +from project.kiwipycon.user.models import UserProfile +from project.kiwipycon.user.forms import RegisterForm +from project.kiwipycon.user.utils import kiwipycon_createuser + +from .models import Talk +from .forms import TalkSubmitForm +from .forms import TalkEditForm +from .models import DURATION_CHOICES +from .models import AUDIENCE_CHOICES + +def list_talks(request): + objects = Talk.objects.filter(approved=True) + extra_context = dict(count=objects.count()) + return object_list(request, objects, extra_context=extra_context) + +def talk(request, id): + objects = Talk.objects.filter(approved=True) + audience = {} + for choice in AUDIENCE_CHOICES: + audience[choice[0]] = choice[1] + extra_context = dict(choices=audience) + return object_detail(request, objects, id, extra_context=extra_context) + +@login_required +def edit_talk(request, id, template_name='talk/edit-talk.html'): + '''Allows users that submitted a talk to edit it until the talk is approved. + ''' + talk = Talk.objects.get(pk=id) + + if talk.approved == True: + redirect_to = reverse('kiwipycon_account') + return set_message_cookie(redirect_to, + msg = u'Sorry but you cannot edit the talk once'\ + + ' it has been accepted.') + if talk.speaker != request.user: + redirect_to = reverse('kiwipycon_account') + return set_message_cookie(redirect_to, + msg = u'Redirected to account because the talk you selected' \ + + ' is not your own.') + + if request.method == 'POST': + form = TalkEditForm(data=request.POST) + if form.is_valid(): + talk.slug = slugify(form.data.get('title')) + talk.authors_bio = form.data.get('authors_bio') + talk.contact = form.data.get('contact') + talk.title = form.data.get('title') + talk.abstract = form.data.get('abstract') +# talk.outline = form.data.get('outline') + talk.topic = form.data.get('topic') +# talk.topic_other = form.data.get('topic_other') + talk.duration = form.data.get('duration') + talk.audience = form.data.get('audience') +# talk.audience_other = form.data.get('audience_other') +# talk.tags = form.data.get('tags') + talk.save() + # Saved.. redirect + redirect_to = reverse('kiwipycon_account') + return set_message_cookie(redirect_to, + msg = u'Your changes have been saved.') + else: + form = TalkEditForm(initial={ + 'id' : id, + 'authors_bio' : talk.authors_bio, + 'contact' : talk.contact, + 'title' : talk.title, + 'abstract' : talk.abstract, +# 'outline' : talk.outline, + 'topic' : talk.topic, +# 'topic_other' : talk.topic_other, + 'duration' : talk.duration, + 'audience' : talk.audience, +# 'audience_other' : talk.audience_other, +# 'tags' : talk.tags, + }) + + return render_to_response(template_name, RequestContext(request, locals())) + +@login_required() +def submit_talk(request, template_name='talk/submit-talk.html'): + '''Allows user to edit profile + ''' + user = request.user + if user.is_authenticated(): + try: + profile = user.get_profile() + except: + profile, new = UserProfile.objects.get_or_create(user=user) + if new: + profile.save() + message = None + + if request.method == 'POST': + talk_form = TalkSubmitForm(data=request.POST) + + register_form = RegisterForm(data=request.POST, + files=request.FILES) + + if request.POST.get('action', None) == 'login': + login_form = AuthenticationForm(data=request.POST) + if login_form.is_valid(): + + from django.contrib.auth import login + login(request, login_form.get_user()) + + redirect_to = reverse('kiwipycon_submit_talk') + return set_message_cookie(redirect_to, + msg = u'You have been logged in.') + + if request.POST.get('action', None) == 'register': + # add the new user + if register_form.is_valid(): + + user = kiwipycon_createuser(request, register_form.data) + + if talk_form.is_valid(): + if user.is_authenticated(): + title = talk_form.data.get('title') + talk = Talk.objects.create( + slug = slugify(title), + speaker = User.objects.get(pk=user.id), + authors_bio = talk_form.data.get('authors_bio'), + contact = talk_form.data.get('contact'), + title = talk_form.data.get('title'), + abstract = talk_form.data.get('abstract'), +# outline = talk_form.data.get('outline'), + topic = talk_form.data.get('topic'), +# topic_other = talk_form.data.get('topic_other'), + duration = talk_form.data.get('duration'), + audience = talk_form.data.get('audience'), +# audience_other = talk_form.data.get('audience_other'), + approved = False, +# tags = talk_form.data.get('tags') + ) + talk.save() + # Saved, ... redirect back to account + redirect_to = reverse('kiwipycon_account') + return set_message_cookie(redirect_to, + msg = u'Thanks, your talk has been submitted.') + else: + redirect_to = reverse('kiwipycon_submit_talk') + return set_message_cookie(redirect_to, + msg = u'Something is wrong here.') + + else: + talk_form = TalkSubmitForm() + register_form = RegisterForm() + login_form = AuthenticationForm() + + + return render_to_response(template_name, RequestContext(request, { + 'talk_form': talk_form, + 'register_form' : register_form, + 'message' : message, + 'login_form' : login_form + })) + +def list_talks(request, template_name='talk/list-all-talks.html'): + '''List all the tasks submitted by a user. + ''' + + talks = Talk.objects.filter(approved=True) + + return render_to_response(template_name, RequestContext(request, { + 'talk_list': talks, + }))