project/scipycon/talk/views.py
changeset 127 328b5244aa1c
parent 96 178b89a3ca4f
child 156 fdbefef52e1c
equal deleted inserted replaced
126:f185cb8316cf 127:328b5244aa1c
     1 # -*- coding: utf-8 -*-
     1 from django.core.urlresolvers import reverse
     2 from __future__ import absolute_import
     2 from django.contrib.auth.decorators import login_required
     3 
     3 from django.contrib.auth.forms import AuthenticationForm
     4 # python imports
     4 from django.contrib.auth.models import User
     5 from urlparse import urlparse
       
     6 
       
     7 # django
       
     8 from django.conf import settings
       
     9 from django.shortcuts import render_to_response
     5 from django.shortcuts import render_to_response
    10 from django.template import RequestContext
     6 from django.template import RequestContext
    11 from django.core.urlresolvers import reverse
       
    12 from django.views.generic.list_detail import object_list
     7 from django.views.generic.list_detail import object_list
    13 from django.views.generic.list_detail import object_detail
     8 from django.views.generic.list_detail import object_detail
    14 
     9 
    15 from django.contrib.auth.decorators import login_required
       
    16 from django.contrib.auth.forms import AuthenticationForm
       
    17 from django.contrib.auth.models import User
       
    18 
       
    19 # PIL
       
    20 from PIL import Image
    10 from PIL import Image
    21 
    11 
    22 # tagging
       
    23 from tagging.models import Tag
    12 from tagging.models import Tag
    24 
    13 
    25 #scipycon
    14 from project.scipycon.talk.models import Talk
       
    15 from project.scipycon.talk.forms import TalkSubmitForm
       
    16 from project.scipycon.talk.forms import TalkEditForm
       
    17 from project.scipycon.talk.models import DURATION_CHOICES
       
    18 from project.scipycon.talk.models import AUDIENCE_CHOICES
    26 from project.scipycon.utils import set_message_cookie
    19 from project.scipycon.utils import set_message_cookie
    27 from project.scipycon.utils import slugify
    20 from project.scipycon.utils import slugify
    28 from project.scipycon.user.models import UserProfile
    21 from project.scipycon.user.models import UserProfile
    29 from project.scipycon.user.forms import RegisterForm
    22 from project.scipycon.user.forms import RegisterForm
    30 from project.scipycon.user.utils import scipycon_createuser
    23 from project.scipycon.user.utils import scipycon_createuser
    31 
    24 
    32 from .models import Talk
       
    33 from .forms import TalkSubmitForm
       
    34 from .forms import TalkEditForm
       
    35 from .models import DURATION_CHOICES
       
    36 from .models import AUDIENCE_CHOICES
       
    37 
    25 
    38 def list_talks(request):
    26 def list_talks(request, scope):
    39     objects = Talk.objects.filter(approved=True)
    27     objects = Talk.objects.filter(approved=True)
    40     extra_context = dict(count=objects.count())
    28     extra_context = dict(count=objects.count())
    41     return object_list(request, objects, extra_context=extra_context)
    29     return object_list(request, objects, extra_context=extra_context)
    42 
    30 
    43 def talk(request, id):
    31 def talk(request, scope, id):
    44     objects = Talk.objects.filter(approved=True)
    32     objects = Talk.objects.filter(approved=True)
    45     audience = {}
    33     audience = {}
    46     for choice in AUDIENCE_CHOICES:
    34     for choice in AUDIENCE_CHOICES:
    47         audience[choice[0]] = choice[1]
    35         audience[choice[0]] = choice[1]
    48     extra_context = dict(choices=audience)
    36     extra_context = dict(choices=audience)
    49     return object_detail(request, objects, id, extra_context=extra_context)
    37     return object_detail(request, objects, id, extra_context=extra_context)
    50 
    38 
    51 @login_required
    39 @login_required
    52 def edit_talk(request, id, template_name='talk/edit-talk.html'):
    40 def edit_talk(request, scope, id, template_name='talk/edit-talk.html'):
    53     '''Allows users that submitted a talk to edit it until the talk is approved.
    41     """Allows users that submitted a talk to edit it until the talk is approved.
    54     '''
    42     """
       
    43 
    55     talk = Talk.objects.get(pk=id)
    44     talk = Talk.objects.get(pk=id)
    56 
    45 
    57     if talk.approved == True:
    46     if talk.approved == True:
    58         redirect_to = reverse('scipycon_account')
    47         redirect_to = reverse('scipycon_account', kwargs={'scope': scope})
    59         return set_message_cookie(redirect_to,
    48         return set_message_cookie(redirect_to,
    60                 msg = u'Sorry but you cannot edit the talk once'\
    49                 msg = u'Sorry but you cannot edit the talk once'\
    61                       + ' it has been accepted.')
    50                       + ' it has been accepted.')
       
    51 
    62     if talk.speaker != request.user:
    52     if talk.speaker != request.user:
    63         redirect_to = reverse('scipycon_account')
    53         redirect_to = reverse('scipycon_account', kwargs={'scope': scope})
    64         return set_message_cookie(redirect_to,
    54         return set_message_cookie(redirect_to,
    65                 msg = u'Redirected to account because the talk you selected' \
    55                 msg = u'Redirected to account because the talk you selected' \
    66                       + ' is not your own.')
    56                       + ' is not your own.')
    67 
    57 
    68     if request.method == 'POST':
    58     if request.method == 'POST':
    80             talk.audience = form.data.get('audience')
    70             talk.audience = form.data.get('audience')
    81 #            talk.audience_other = form.data.get('audience_other')
    71 #            talk.audience_other = form.data.get('audience_other')
    82 #            talk.tags = form.data.get('tags')
    72 #            talk.tags = form.data.get('tags')
    83             talk.save()
    73             talk.save()
    84             # Saved.. redirect
    74             # Saved.. redirect
    85             redirect_to = reverse('scipycon_account')
    75             redirect_to = reverse('scipycon_account', kwargs={'scope': scope})
    86             return set_message_cookie(redirect_to,
    76             return set_message_cookie(redirect_to,
    87                     msg = u'Your changes have been saved.')
    77                     msg = u'Your changes have been saved.')
    88     else:
    78     else:
    89         form = TalkEditForm(initial={
    79         form = TalkEditForm(initial={
    90                                     'id' : id,
    80                                     'id' : id,
   102             })
    92             })
   103 
    93 
   104     return render_to_response(template_name, RequestContext(request, locals()))
    94     return render_to_response(template_name, RequestContext(request, locals()))
   105 
    95 
   106 @login_required()
    96 @login_required()
   107 def submit_talk(request, template_name='talk/submit-talk.html'):
    97 def submit_talk(request, scope, template_name='talk/submit-talk.html'):
   108     '''Allows user to edit profile
    98     """Allows user to edit profile
   109     '''
    99     """
       
   100 
       
   101     from project.scipycon.base.models import Event
       
   102 
   110     user = request.user
   103     user = request.user
   111     if user.is_authenticated():
   104     if user.is_authenticated():
   112         try:
   105         try:
   113             profile = user.get_profile()
   106             profile = user.get_profile()
   114         except:
   107         except:
   115             profile, new = UserProfile.objects.get_or_create(user=user)
   108             scope_entity = Event.objects.get(scope=scope)
       
   109 
       
   110             profile, new = UserProfile.objects.get_or_create(
       
   111                 user=user, scope=scope_entity)
   116             if new:
   112             if new:
   117                 profile.save()
   113                 profile.save()
       
   114 
   118     message = None
   115     message = None
   119 
   116 
   120     if request.method == 'POST':
   117     if request.method == 'POST':
   121         talk_form = TalkSubmitForm(data=request.POST)
   118         talk_form = TalkSubmitForm(data=request.POST)
   122 
   119 
   123         register_form = RegisterForm(data=request.POST,
   120         register_form = RegisterForm(data=request.POST, files=request.FILES)
   124                                         files=request.FILES)
       
   125 
   121 
   126         if request.POST.get('action', None) == 'login':
   122         if request.POST.get('action', None) == 'login':
   127             login_form = AuthenticationForm(data=request.POST)
   123             login_form = AuthenticationForm(data=request.POST)
   128             if login_form.is_valid():
   124             if login_form.is_valid():
   129 
   125 
   130                 from django.contrib.auth import login
   126                 from django.contrib.auth import login
   131                 login(request, login_form.get_user())
   127                 login(request, login_form.get_user())
   132 
   128 
   133                 redirect_to = reverse('scipycon_submit_talk')
   129                 redirect_to = reverse('scipycon_submit_talk',
       
   130                                       kwargs={'scope': scope})
   134                 return set_message_cookie(redirect_to,
   131                 return set_message_cookie(redirect_to,
   135                         msg = u'You have been logged in.')
   132                         msg = u'You have been logged in.')
   136 
   133 
   137         if request.POST.get('action', None) == 'register':
   134         if request.POST.get('action', None) == 'register':
   138             # add the new user
   135             # add the new user
   148                     speaker = User.objects.get(pk=user.id),
   145                     speaker = User.objects.get(pk=user.id),
   149                     authors_bio = talk_form.data.get('authors_bio'),
   146                     authors_bio = talk_form.data.get('authors_bio'),
   150                     contact = talk_form.data.get('contact'),
   147                     contact = talk_form.data.get('contact'),
   151                     title = talk_form.data.get('title'),
   148                     title = talk_form.data.get('title'),
   152                     abstract = talk_form.data.get('abstract'),
   149                     abstract = talk_form.data.get('abstract'),
   153 #                    outline = talk_form.data.get('outline'),
       
   154                     topic = talk_form.data.get('topic'),
   150                     topic = talk_form.data.get('topic'),
   155 #                    topic_other = talk_form.data.get('topic_other'),
       
   156                     duration = talk_form.data.get('duration'),
   151                     duration = talk_form.data.get('duration'),
   157                     audience = talk_form.data.get('audience'),
   152                     audience = talk_form.data.get('audience'),
   158 #                    audience_other = talk_form.data.get('audience_other'),
       
   159                     approved = False,
   153                     approved = False,
   160 #                    tags = talk_form.data.get('tags')
   154 #                    tags = talk_form.data.get('tags')
   161                     )
   155                     )
   162                 talk.save()
   156                 talk.save()
   163                 # Saved, ... redirect back to account
   157                 # Saved, ... redirect back to account
   164                 redirect_to = reverse('scipycon_account')
   158                 redirect_to = reverse('scipycon_account',
       
   159                                       kwargs={'scope': scope})
   165                 return set_message_cookie(redirect_to,
   160                 return set_message_cookie(redirect_to,
   166                         msg = u'Thanks, your talk has been submitted.')
   161                         msg = u'Thanks, your talk has been submitted.')
   167             else:
   162             else:
   168                 redirect_to = reverse('scipycon_submit_talk')
   163                 redirect_to = reverse('scipycon_submit_talk',
       
   164                                       kwargs={'scope': scope})
   169                 return set_message_cookie(redirect_to,
   165                 return set_message_cookie(redirect_to,
   170                         msg = u'Something is wrong here.')
   166                         msg = u'Something is wrong here.')
   171 
   167 
   172     else:
   168     else:
   173         talk_form = TalkSubmitForm()
   169         talk_form = TalkSubmitForm()
   180         'register_form' : register_form,
   176         'register_form' : register_form,
   181         'message' : message,
   177         'message' : message,
   182         'login_form' : login_form
   178         'login_form' : login_form
   183     }))
   179     }))
   184 
   180 
   185 def list_talks(request, template_name='talk/list-all-talks.html'):
   181 def list_talks(request, scope, template_name='talk/list-all-talks.html'):
   186     '''List all the tasks submitted by a user.
   182     """List all the tasks submitted by a user.
   187     '''
   183     """
   188 
   184 
   189     talks = Talk.objects.filter(approved=True)
   185     talks = Talk.objects.filter(approved=True)
   190 
   186 
   191     return render_to_response(template_name, RequestContext(request, {
   187     return render_to_response(template_name, RequestContext(request, {
   192         'talk_list': talks,
   188         'talk_list': talks,