deleting some old files
[cascardo/ema.git] / eventos / views.py
index 97a13c9..42c40a7 100644 (file)
 from django.http import HttpResponseRedirect, HttpResponseForbidden
 from django.contrib import auth
 from django.contrib.auth.forms import AuthenticationForm
-from django.newforms import form_for_instance, form_for_model
+from django.contrib.auth.models import User, Group
+from django.newforms import form_for_instance, form_for_model, HiddenInput
 from django.shortcuts import render_to_response, get_object_or_404
 from django.template import RequestContext, Context, loader
 from eventos.models import Palestrante, Trabalho
+from eventos.forms import RegisterSpeaker
 
 forbidden = \
     HttpResponseForbidden('<h2>You are not allowed to do this action.<h2>')
@@ -59,9 +61,42 @@ def logout(request):
     auth.logout(request)
     return HttpResponseRedirect('/')
 
-def lecturer_details(request, lid):
+def speaker_add(request):
+    """Adds a new speaker to the system.
+    """
+    uform = RegisterSpeaker(request.POST or None)
+
+    FormKlass = form_for_model(Palestrante)
+    form = FormKlass(request.POST or None)
+    del form.fields['usuario']
+
+    if request.POST and form.is_valid() and uform.is_valid():
+        cd = uform.cleaned_data
+        group = Group.objects.get_or_create(name='palestrantes')[0]
+
+        # creating the user that will be set as the user of the
+        # speaker.
+        user = User(username=cd['username'])
+        user.set_password(cd['password1'])
+        user.is_active = True
+        user.save()
+        user.groups.add(group)
+
+        # this commit=False is to avoid IntegritErrors, because at
+        # this point, the speaker doesn't have an user associated
+        # with it.
+        instance = form.save(commit=False)
+        instance.usuario = user
+        instance.save()
+        return HttpResponseRedirect('/')
+
+    c = {'form': form, 'uform': uform}
+    return render_to_response('eventos/speaker-add.html', Context(c),
+                              context_instance=RequestContext(request))
+
+def speaker_details(request, lid):
     """Shows a simple form containing all editable fields of a
-    lecturer and gives the lecturer the possibility to save them =)
+    speaker and gives the speaker the possibility to save them =)
     """
     if not hasattr(request.user, 'palestrante_set'):
         return forbidden
@@ -78,11 +113,11 @@ def lecturer_details(request, lid):
         form.save()
 
     c = {'form': form}
-    return render_to_response('eventos/lecturer-details.html', Context(c),
+    return render_to_response('eventos/speaker-details.html', Context(c),
                               context_instance=RequestContext(request))
 
-def lecturer_talks(request, lid):
-    """Lists all talks of a lecturer (based on lecturer id -- lid
+def speaker_talks(request, lid):
+    """Lists all talks of a speaker (based on speaker id -- lid
     parameter).
     """
     if not hasattr(request.user, 'palestrante_set'):
@@ -93,7 +128,7 @@ def lecturer_talks(request, lid):
         return forbidden
 
     talks = Trabalho.objects.filter(palestrante=entity)
-    c = {'lecturer': entity, 'talks': talks}
+    c = {'speaker': entity, 'talks': talks}
     return render_to_response('eventos/talk-list.html', Context(c),
                               context_instance=RequestContext(request))
 
@@ -117,38 +152,34 @@ def talk_delete(request, tid):
         return forbidden
 
     entity = request.user.palestrante_set.get()
-    if entity.id != int(lid):
+    talk = Trabalho.objects.filter(pk=tid, palestrante=entity)
+    if not talk:
         return forbidden
 
-    owner = Trabalho.objects.filter(pk=tid, palestrante=entity)
-    if not owner:
-        return forbidden
-
-    entity.delete()
-    return HttpResponseRedirect('/lecturer/%d/talks/' % entity.id)
+    talk.delete()
+    return HttpResponseRedirect('/speaker/%d/talks/' % entity.id)
 
 def talk_add(request):
-    """Shows a form to the lecturer send a talk
+    """Shows a form to the speaker send a talk
     """
     if not hasattr(request.user, 'palestrante_set'):
         return forbidden
 
     entity = request.user.palestrante_set.get()
-    if entity.id != int(lid):
-        return forbidden
-
     FormKlass = form_for_model(Trabalho)
-    form = FormKlass(request.POST or None)
+    form = FormKlass(request.POST or None,
+                     initial={'palestrante': entity.id})
+
+    # This field should not be shown to the user.
+    form.fields['palestrante'].widget = HiddenInput()
 
+    # hidding the owner in the other speakers list
     other = Palestrante.objects.exclude(pk=entity.id)
-    form.fields['palestrante'].label = u'Outros Palestrantes'
-    form.fields['palestrante'].required = False
-    form.fields['palestrante']._set_queryset(other)
+    form.fields['outros_palestrantes']._set_queryset(other)
 
     if request.POST and form.is_valid():
         instance = form.save()
-        instance.palestrante.add(entity)
-        return HttpResponseRedirect('/lecturer/%d/talks/' % entity.id)
+        return HttpResponseRedirect('/speaker/%d/talks/' % entity.id)
 
     c = {'form': form}
     return render_to_response('eventos/talk-add.html', Context(c),