adicionando um pouco de documentacao nessa bosta
[cascardo/eventmanager.git] / views.py
index 243bf30..6f65dfd 100644 (file)
--- a/views.py
+++ b/views.py
@@ -1,3 +1,4 @@
+# -*- coding: utf8; -*-
 """
 Copyright (C) 2007 Lincoln de Sousa <lincoln@archlinux-br.org>
 
@@ -18,23 +19,141 @@ Boston, MA 02111-1307, USA.
 """
 from django.shortcuts import render_to_response
 from django.template import RequestContext, Context
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth.models import Group, User
+from django.contrib.auth.forms import AuthenticationForm
+from django.contrib.auth import login
+
 from eventmanager.decorators import enable_login_form
-from eventmanager.forms import InscreverPalestra, CadastroPalestrante
+from eventmanager.forms import *
+from eventmanager.conteudo.models import Noticia, Menu, Secao
+from eventmanager.eventos.models import *
+
+def build_response(request, template, extra={}):
+    """
+    Shortcut to build a response based on a C{template} and build a standard
+    context to this template. This context contains news itens, a list of menus
+    and a list of sections to be shown on index. But don't worry, this context
+    is extensible through the C{extra} parameter.
+
+    @param template: Contains the name of a template found in django
+     C{TEMPLATE_DIRS}
+    @type template: C{str}
+
+    @param extra: Extra variables to be passed to the context being built.
+    @type extra: C{dict}
+    """
+    news = Noticia.objects.order_by('-data_criacao')
+    menus = Menu.objects.all()
+    index_sections = Secao.objects.filter(index=True)
+    c = {'news': news, 'menu': menus,
+        'index_sections': index_sections}
+    c.update(extra)
+    return render_to_response(template, Context(c),
+            context_instance=RequestContext(request))
+
 
 @enable_login_form
 def index(request):
-    return render_to_response('index.html',
-            context_instance=RequestContext(request))
+    return build_response(request, 'index.html')
+
 
 @enable_login_form
 def cadastro(request):
-    form = CadastroPalestrante()
-    c = Context({'form': form})
-    return render_to_response('cadastro.html', c,
-            context_instance=RequestContext(request))
+    c = {}
+    if request.POST:
+        # django's newforms lib requires a new instance of a form to be bounded
+        # with data, to be validated and used.
+        form = CadastroPalestrante(request.POST)
+        if form.is_valid():
+            cd = form.cleaned_data
+            badattr = form.errors
+            wrong = False
+
+            if not cd['telefone_comercial'] and \
+               not cd['telefone_residencial'] and \
+               not cd['telefone_celular']:
+                badattr['telefone_comercial'] = ['Algum número de telefone '
+                                                 'precisa ser informado']
+                wrong = True
+
+            # don't save duplicated users...
+            try:
+                User.objects.get(username=cd['nome_usuario'])
+                badattr['nome_usuario'] = ['Este nome de usuário já existe!']
+                wrong = True
+            except User.DoesNotExist:
+                pass
+
+            if not wrong:
+                group = Group.objects.get_or_create(name='palestrantes')[0]
+
+                user = User(username=cd['nome_usuario'], email=cd['email'])
+                user.set_password(cd['senha'])
+                user.save()
+                user.groups.add(group)
 
+                p = Palestrante()
+                p.usuario = user
+
+                p.nome = cd['nome_completo']
+                p.email = cd['email']
+                p.telefone_comercial = cd['telefone_comercial']
+                p.telefone_residencial = cd['telefone_residencial']
+                p.telefone_celular = cd['telefone_celular']
+                p.rua = cd['rua']
+                p.numero = cd['numero']
+                p.bairro = cd['bairro']
+                p.cidade = cd['cidade']
+                p.uf = cd['uf']
+                p.minicurriculo = cd['minicurriculo']
+                p.save()
+
+                for i in cd['area_interesse']:
+                    p.area_interesse.add(i)
+
+                c.update({'ok': 1})
+
+                fakepost = request.POST.copy()
+                fakepost['username'] = cd['nome_usuario']
+                fakepost['password'] = cd['senha']
+
+                manipulator = AuthenticationForm(request)
+                errors = manipulator.get_validation_errors(fakepost)
+                got_user = manipulator.get_user()
+                login(request, got_user)
+    else:
+        form = CadastroPalestrante()
+    c.update({'form': form})
+    return build_response(request, 'cadastro.html', c)
+
+
+@enable_login_form
+def inscricao(request):
+    if request.POST:
+        form = Inscricao(request.POST)
+    else:
+        form = Inscricao()
+    return build_response(request, 'inscricao.html', {'form': form})
+
+
+@login_required
 def inscrever_palestra(request):
-    form = InscreverPalestra()
-    c = Context({'form': form})
-    return render_to_response('inscrever_palestra.html', c,
-            context_instance=RequestContext(request))
+    if request.POST:
+        form = InscreverPalestra(request.POST)
+        if form.is_valid():
+            cd = form.cleaned_data
+            p = Palestra()
+            p.titulo = cd['titulo']
+            p.tema = cd['tema']
+            p.categoria = CategoriaPalestra.objects.get(pk=cd['categoria'])
+            p.descricao_curta = cd['descricao_curta']
+            p.descricao_longa = cd['descricao_longa']
+            p.evento = Evento.objects.get(pk=1) # let the hammer play arround!
+            p.save()
+
+            up = User.objects.get(pk=request.user.id)
+            p.palestrante.add()
+    else:
+        form = InscreverPalestra()
+    return build_response(request, 'inscrever_palestra.html', {'form': form})