diff -r 60f67ccee452 -r fb27be005a5c project/kiwipycon/proceedings/views.py --- a/project/kiwipycon/proceedings/views.py Tue May 11 03:51:25 2010 +0530 +++ b/project/kiwipycon/proceedings/views.py Tue Jul 13 01:01:02 2010 +0530 @@ -1,51 +1,23 @@ - # -*- coding: utf-8 -*- - -import os +# -*- coding: utf-8 -*- +import json from django.contrib.auth import login from django.contrib.auth.decorators import login_required from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.models import User -from django.core.urlresolvers import reverse +from django.http import HttpResponse from django.shortcuts import render_to_response from django.template import RequestContext -from django.utils import simplejson as json -from project.kiwipycon.proceedings.booklet import mk_scipy_paper -from project.kiwipycon.proceedings.forms import ProceedingsForm -from project.kiwipycon.proceedings.models import Paper from project.kiwipycon.user.forms import RegisterForm from project.kiwipycon.user.models import UserProfile -from project.kiwipycon.user.utils import kiwipycon_createuser -from project.kiwipycon.utils import set_message_cookie -from project import settings - - -def handleUploadedFile(proceedings_form_data, rst_file): - """Handles the uploaded file content and process the form - """ - - title = proceedings_form_data.get('title') - abstract = proceedings_form_data.get('abstract') - body = proceedings_form_data.get('body') - - if rst_file: - # TODO: using stating only for testing purposes. - destination = open('some/file/name.txt', 'wb+') - for chunk in rst_file.chunks(): - destination.write(chunk) - destination.close() - - return title, abstract, body +from project.kiwipycon.proceedings.forms import ProceedingsForm @login_required -def submit(request, id=None, template='proceedings/submit.html'): +def submit(request, template = 'proceedings/submit.html'): """View to submit the proceedings paper. """ - - context = RequestContext(request, {}) - user = request.user if user.is_authenticated(): try: @@ -57,7 +29,10 @@ message = None if request.method == 'POST': - register_form = RegisterForm(data=request.POST) + proceedings_form = ProceedingsForm(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) @@ -72,141 +47,67 @@ if request.POST.get('action', None) == 'register': # add the new user if register_form.is_valid(): + user = kiwipycon_createuser(request, register_form.data) - proceedings_form = ProceedingsForm(data=request.POST, - files=request.FILES) - if proceedings_form.is_valid(): if user.is_authenticated(): - # Data from reSt file is appended to the data in fields - title, abstract, body = handleUploadedFile( - proceedings_form.cleaned_data, request.FILES.get('file')) - authors = request.POST.get('as_values_authors') - - paper = edit(id, title=title, - abstract=abstract, body=body, - authors=authors) if id else create(title=title, - abstract=abstract, body=body, - authors=authors) + title = proceedings_form.data.get('title') - # Successfully saved. So get back to the edit page. - redirect_to = reverse('kiwipycon_submit_proceedings', - args=[paper.id]) - return set_message_cookie( - redirect_to, msg = u'Thanks, your paper has been submitted.') + # Saved, ... redirect back to account + redirect_to = reverse('kiwipycon_account') + return set_message_cookie(redirect_to, + msg = u'Thanks, your paper has been submitted.') else: - # This is impossible. Something was wrong so return back - # to submit page redirect_to = reverse('kiwipycon_submit_proceedings') - return set_message_cookie( - redirect_to, msg = u'Something is wrong here.') + return set_message_cookie(redirect_to, + msg = u'Something is wrong here.') + else: - if id: - # If id exists initialize the form with old values - paper = Paper.objects.get(id=id) - proceedings_form = ProceedingsForm( - initial={'title': paper.title, - 'abstract': paper.abstract, - 'body': paper.body, - }) - context['initial_authors'] = json.dumps([ - {'name': str(author.username), - 'value': '%s (%s)' % (author.get_full_name(), author.username) - } for author in paper.authors.all()]) - else: - # Otherwise create a new form - proceedings_form = ProceedingsForm() + proceedings_form = ProceedingsForm() + register_form = RegisterForm() + login_form = AuthenticationForm() - register_form = RegisterForm() - login_form = AuthenticationForm() + + proceedings_form = ProceedingsForm() + register_form = RegisterForm() + login_form = AuthenticationForm() - context['proceedings_form'] = proceedings_form - context['register_form'] = register_form - context['message'] = message - context['login_form'] = login_form - context['id'] = id if id else None + context = RequestContext(request, { + 'proceedings_form': proceedings_form, + 'register_form' : register_form, + 'message' : message, + 'login_form' : login_form + }) return render_to_response(template, context) -def create(**kwargs): - """View to create a new proceedings. - """ - - title = kwargs.get('title') - abstract = kwargs.get('abstract') - body = kwargs.get('body') - authors = kwargs.get('authors') - - paper = Paper(title=title, abstract=abstract, body=body) - paper.save() - - if authors: - authors = authors.split(',') - for author in authors: - user = User.objects.get(username=author.strip()) - paper.authors.add(user) - - return paper - - -def edit(id, **kwargs): +def edit(request, id, template = 'proceedings/edit.html'): """View to edit the proceedings paper. """ - paper = Paper.objects.get(id=id) - - paper.title = kwargs.get('title') - paper.abstract = kwargs.get('abstract') - paper.body = kwargs.get('body') - authors = kwargs.get('authors') + context = RequestContext(request, { + 'proceedings_form': proceedings_form, + 'register_form' : register_form, + 'message' : message, + 'login_form' : login_form + }) - if authors: - authors = authors.strip(' ,').split(',') - for author in authors: - user = User.objects.get(username=author.strip()) - paper.authors.add(user) - - paper.save() - - return paper + return render_to_response(template, context) -def show_paper(request, id): - """Display the thumbnail of the rendered paper for download +def getUsers(request): + """View function called by autocomplete jQuery plugin to get + the user names. """ - paper = Paper.objects.get(id=id) + query = request.GET['query'] + suggestions = User.objects.filter(username__startswith=query) + + suggest_data = { + 'query': query, + 'suggestions':[user.username for user in suggestions], + } - # TODO: Address and country should be required field in the user forms - # henceforth. Also contact numbers. - paper_data = { - 'paper_abstract': paper.abstract, - 'authors': [ - {'first_names': author.first_name, - 'surname': author.last_name, - 'address': 'None', - 'country': 'India', - 'email_address': author.email, - 'institution': author.registration_set.get().organisation, - 'city': author.registration_set.get().city - } for author in paper.authors.all()], - 'title': paper.title - } - - abstract = mk_scipy_paper.Bunch(**paper_data) - abstract.authors = [mk_scipy_paper.Bunch(**a) for a in abstract.authors] - - abstract['paper_text'] = paper.body - - out_dir = attach_dir = os.path.join(settings.STATIC_ROOT, - 'proceedings', 'output') - outfilename = os.path.join(out_dir, 'paper%d.pdf' % (paper.id)) - mk_scipy_paper.mk_abstract_preview(abstract, outfilename, attach_dir) - - context = {'paper_id': paper.id, - 'out_path': '/static/proceedings/output' } - template = 'proceedings/show_paper_preview.html' - - return render_to_response(template, context) + return HttpResponse(json.dumps(suggest_data)) \ No newline at end of file