project/scipycon/proceedings/views.py
changeset 94 87e77aa18610
child 96 178b89a3ca4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project/scipycon/proceedings/views.py	Tue Jul 13 17:59:47 2010 +0530
@@ -0,0 +1,203 @@
+  # -*- coding: utf-8 -*-
+
+import os
+
+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.shortcuts import render_to_response
+from django.template import RequestContext
+
+from project.kiwipycon.proceedings.models import Paper
+from project.kiwipycon.user.forms import RegisterForm
+from project.kiwipycon.user.models import UserProfile
+from project.kiwipycon.utils import set_message_cookie
+from project.kiwipycon.proceedings.booklet import mk_scipy_paper
+from project.kiwipycon.proceedings.forms import ProceedingsForm
+
+
+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')
+    authors = proceedings_form_data.get('authors')
+
+    if rst_file:
+        destination = open('some/file/name.txt', 'wb+')
+        for chunk in rst_file.chunks():
+            destination.write(chunk)
+        destination.close()
+
+    return title, abstract, body, authors
+
+
+@login_required
+def submit(request, id=None, template='proceedings/submit.html'):
+    """View to submit the proceedings paper.
+    """
+
+    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':
+        register_form = RegisterForm(data=request.POST)
+
+        if request.POST.get('action', None) == 'login':
+            login_form = AuthenticationForm(data=request.POST)
+            if login_form.is_valid():
+
+                login(request, login_form.get_user())
+
+                redirect_to = reverse('kiwipycon_submit_proceedings')
+                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)
+
+        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, authors = handleUploadedFile(
+                    proceedings_form.cleaned_data, request.FILES.get('file'))
+
+                paper = edit(id, title=title,
+                    abstract=abstract, body=body,
+                    authors=authors) if id else create(title=title,
+                    abstract=abstract, body=body,
+                    authors=authors)
+
+                # 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.')
+            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.')          
+    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,
+                         'authors': ', '.join([
+                             author.username for author in paper.authors.all()])
+                })
+        else:
+            # Otherwise create a new form
+            proceedings_form = ProceedingsForm()
+
+        register_form = RegisterForm()
+        login_form = AuthenticationForm()
+
+    context = RequestContext(request, {
+        'proceedings_form': proceedings_form,
+        'register_form' : register_form,
+        'message' : message,
+        'login_form' : login_form
+        })
+
+    context['id'] = id if id else None
+
+    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):
+    """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')
+
+    if authors:
+        authors = authors.split(',')
+        for author in authors:
+            user = User.objects.get(username=author.strip())
+            paper.authors.add(user)
+
+    paper.save()
+
+    return paper
+
+
+def show_paper(request, id):
+    """Display the thumbnail of the rendered paper for download
+    """
+    
+    paper = Paper.objects.get(id=id)
+
+    paper_data = {
+      'paper_abstract': paper.abstract,
+      'authors': [
+          {'first_names': author.first_name,
+            'surname': author.last_name,
+            'address': 'XXX',
+            'country': 'XXX',
+            'email_address': 'XXX@xx.com',
+            'institution': 'XXX'
+           } 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
+
+    outfilename = '/media/python/workspace/kiwipycon/project/kiwipycon/proceedings/booklet/output/paper.pdf'
+    attach_dir = os.path.dirname('/media/python/workspace/kiwipycon/project/kiwipycon/proceedings/booklet/output/')
+    mk_scipy_paper.mk_abstract_preview(abstract, outfilename, attach_dir)
+
+    from django.http import HttpResponse
+    return HttpResponse('Machi')
+
+ 
\ No newline at end of file