From: Lincoln de Sousa Date: Thu, 9 Aug 2007 12:55:38 +0000 (-0300) Subject: vixi, mesma mensagem do commit anterior... X-Git-Url: http://git.cascardo.info/?p=cascardo%2Feventmanager.git;a=commitdiff_plain;h=55f829952598de38c69be652ed5dff6560523ae5 vixi, mesma mensagem do commit anterior... --- diff --git a/__init__.py b/__init__.py index e69de29..832ba57 100644 --- a/__init__.py +++ b/__init__.py @@ -0,0 +1,16 @@ +def initialize(): + from eventos.models import Evento + from datetime import datetime + + emsl = Evento() + emsl.nome = 'Encontro Mineiro de Software Livre' + emsl.nome_local = 'UFLA' + emsl.nome_contato = 'Monserrat' + emsl.data_inicio = datetime(2007, 10, 18) + emsl.data_final = datetime(2007, 10, 20) + emsl.telefone = '' + emsl.rua = '' + emsl.numero = '' + emsl.cidade = 'Lavras' + emsl.uf = 'MG' + emsl.save() diff --git a/conteudo/models.py b/conteudo/models.py index b0c0568..306d00d 100644 --- a/conteudo/models.py +++ b/conteudo/models.py @@ -46,6 +46,8 @@ class Noticia(models.Model): class Secao(models.Model): nome = models.CharField(maxlength=100) + index = models.BooleanField(help_text='Se marcado aparecerá na index, ' + 'acima das notícias. Caso contrário, aparecerá no menu principal') corpo = models.TextField() class Meta: @@ -53,7 +55,8 @@ class Secao(models.Model): verbose_name_plural = 'seções' class Admin: - pass + js = ('/site_media/tiny_mce/tiny_mce.js', + '/site_media/js/textarea-noticias.js',) def __str__(self): return self.nome diff --git a/eventos/models.py b/eventos/models.py index adcbaa2..39c68e2 100644 --- a/eventos/models.py +++ b/eventos/models.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8; -*- +# -*- coding: utf8; -*- """ Copyright (C) 2007 Lincoln de Sousa @@ -18,7 +18,11 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. """ from django.db import models +from django.contrib.localflavor.br.br_states import STATE_CHOICES as _states +# bad hack! +STATE_CHOICES = [(x, unicode(y).encode('utf8')) for x, y in _states] +del _states class Evento(models.Model): nome = models.CharField(maxlength=100) @@ -29,7 +33,7 @@ class Evento(models.Model): nome_contato = models.CharField('Nome do contato', maxlength=100) telefone = models.CharField(maxlength=100) cidade = models.CharField(maxlength=100) - uf = models.CharField(maxlength=100) # TODO: should became a combobox + uf = models.CharField(maxlength=2, choices=STATE_CHOICES) rua = models.CharField(maxlength=100) numero = models.CharField('Número', maxlength=10) info_adicional = models.TextField() @@ -42,7 +46,7 @@ class Evento(models.Model): ) def __str__(self): - return self.name + return self.nome class AreaDeInteresse(models.Model): @@ -63,9 +67,9 @@ class Palestrante(models.Model): nome = models.CharField(maxlength=100) email = models.CharField(maxlength=100) - telefone_residencial = models.CharField(maxlength=11) - telefone_celular = models.CharField(maxlength=11) - telefone_comercial = models.CharField(maxlength=11) + telefone_residencial = models.CharField(maxlength=11, blank=True) + telefone_celular = models.CharField(maxlength=11, blank=True) + telefone_comercial = models.CharField(maxlength=11, blank=True) rua = models.CharField(maxlength=100) numero = models.CharField(maxlength=10) diff --git a/forms.py b/forms.py index 7a95937..b2f8111 100644 --- a/forms.py +++ b/forms.py @@ -1,3 +1,4 @@ +# -*- coding: utf8; -*- """ Copyright (C) 2007 Lincoln de Sousa @@ -17,26 +18,51 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. """ from django import newforms as forms -from django.newforms.widgets import Textarea +from django.newforms.widgets import Textarea, PasswordInput +from eventmanager.eventos.models import \ + AreaDeInteresse, CategoriaPalestra, STATE_CHOICES + +MKCHOICES = lambda K:[(x.id, str(x)) for x in K.objects.all()] class InscreverPalestra(forms.Form): - pass + def __init__(self, *args, **kwargs): + super(InscreverPalestra, self).__init__(*args, **kwargs) + + newchoices = MKCHOICES(CategoriaPalestra) + self.fields['categoria'].choices = newchoices + + titulo = forms.CharField(max_length=100) + tema = forms.CharField(max_length=100) + categoria = forms.ChoiceField() + descricao_curta = forms.CharField(widget=Textarea(), + label='Descrição curta') + descricao_longa = forms.CharField(widget=Textarea(), + label='Descrição longa') + class CadastroPalestrante(forms.Form): - nome = forms.CharField(max_length=100) + def __init__(self, *args, **kwargs): + super(CadastroPalestrante, self).__init__(*args, **kwargs) + + newchoices = MKCHOICES(AreaDeInteresse) + self.fields['area_interesse'].choices = newchoices + + nome_completo = forms.CharField(max_length=100) + nome_usuario = forms.CharField(max_length=100) + senha = forms.CharField(max_length=100, widget=PasswordInput()) email = forms.CharField(max_length=100) - telefone_comercial = forms.CharField(max_length=11) - telefone_residencial = forms.CharField(max_length=11) - telefone_celular = forms.CharField(max_length=11) + telefone_comercial = forms.CharField(max_length=11, required=False) + telefone_residencial = forms.CharField(max_length=11, required=False) + telefone_celular = forms.CharField(max_length=11, required=False) - instituicao = forms.CharField(max_length=100) - minicurriculo = forms.CharField(widget=Textarea()) + instituicao = forms.CharField(max_length=100, label='Instituição') + minicurriculo = forms.CharField(widget=Textarea(), label='Mini Currículo') rua = forms.CharField(max_length=100) - numero = forms.CharField(max_length=10) + numero = forms.CharField(max_length=10, label='Número') bairro = forms.CharField(max_length=100) cidade = forms.CharField(max_length=100) - uf = forms.CharField(max_length=100) + uf = forms.ChoiceField(choices=STATE_CHOICES) - areas_interesse = forms.MultipleChoiceField() + area_interesse = forms.MultipleChoiceField(label='Áreas de Interesse') diff --git a/templates/base.html b/templates/base.html index 866e564..9d9c7bd 100644 --- a/templates/base.html +++ b/templates/base.html @@ -8,12 +8,30 @@ - - -

Encontro Mineiro de Software Livre

- {% if user.is_authenticated %} - - + #menu { + } - {% else %} + #content { + padding: 5px; + } -
-

Login

-
- - -
-
- - + #news { + list-style-type: none; + padding-left: 0px; + border: dotted 1px #d7d7d7; + } - -
+ #news li { + padding: 4px; + } - Cadastre-se -
+ .even { + background-color: #f7e7fe; + } + + + +
+

Encontro Mineiro de Software Livre

+
+ + {% if user.is_authenticated %} + + + {% else %} + +
+

Login

+
+ + +
+
+ + + + +
+ + Cadastre-se +
+ {% endif %} - {% endif %} +
- {% if menu %} - - {% endif %} + {% if menu %} + + {% endif %} +
+
-
+
{% block content %}{% endblock %}
diff --git a/templates/cadastro.html b/templates/cadastro.html index da2e8b8..4eef47a 100644 --- a/templates/cadastro.html +++ b/templates/cadastro.html @@ -1,6 +1,21 @@ {% extends "base.html" %} {% block content %} -{{ form.as_p }} +{% if ok %} + +
+

Cadastro efetuado com sucesso, você já foi autenticado.

+ +

Use o menu que apareceu para cadastrar uma palestra ou um minicurso

+
+ +{% else %} + +
+ {{ form.as_p }} + +
+ +{% endif %} {% endblock %} diff --git a/templates/index.html b/templates/index.html index efdbab8..fb29e70 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,12 +1,19 @@ {% extends "base.html" %} {% block content %} +{% if index_sections %} +{% for i in index_sections %} +

{{ i }}

+{{ i.corpo }} +

+{% endfor %} +{% endif %} + {% if news %} -

Notícias

    {% for i in news %} -
  • +
  • {{ i.titulo }}{{ i.data_criacao }} (por {{ i.autor }})

    {{ i.chamada }}

    Leia mais diff --git a/templates/inscrever_palestra.html b/templates/inscrever_palestra.html index da2e8b8..a771ca7 100644 --- a/templates/inscrever_palestra.html +++ b/templates/inscrever_palestra.html @@ -1,6 +1,19 @@ {% extends "base.html" %} {% block content %} -{{ form.as_p }} +{% if ok %} + +
    +

    Sua palestra foi cadastrada com sucesso!

    +
    + +{% else %} + +
    + {{ form.as_p }} + +
    + +{% endif %} {% endblock %} diff --git a/templates/noticia.html b/templates/noticia.html index 8f42426..22d6d59 100644 --- a/templates/noticia.html +++ b/templates/noticia.html @@ -7,4 +7,6 @@

    {{ noticia.chamada }}

    {{ noticia.corpo }}

    +Voltar + {% endblock %} diff --git a/views.py b/views.py index 1c3a6a4..ac2f4dc 100644 --- a/views.py +++ b/views.py @@ -1,3 +1,4 @@ +# -*- coding: utf8; -*- """ Copyright (C) 2007 Lincoln de Sousa @@ -18,28 +19,124 @@ 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.conteudo.models import Noticia, Menu +from eventmanager.conteudo.models import Noticia, Menu, Secao +from eventmanager.eventos.models import * @enable_login_form def index(request): news = Noticia.objects.order_by('-data_criacao') menus = Menu.objects.all() + index_sections = Secao.objects.filter(index=True) + menu_sections = Secao.objects.filter(index=False) - c = Context({'news': news, 'menu': menus}) + c = Context({'news': news, 'menu': menus, 'menu_sections': menu_sections, + 'index_sections': index_sections}) return render_to_response('index.html', c, context_instance=RequestContext(request)) + @enable_login_form def cadastro(request): - form = CadastroPalestrante() - c = Context({'form': form}) - return render_to_response('cadastro.html', c, + # context extension + 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 + wrong = False + + # XXX: really ugly hack to use django validation machinary... + badattr = form._BaseForm__errors + + 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] + + p = Palestrante() + p.user = User(username=cd['nome_usuario'], email=cd['email']) + p.user.set_password(cd['senha']) + p.user.save() + p.user.groups.add(group) + + 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 render_to_response('cadastro.html', Context(c), context_instance=RequestContext(request)) + +@login_required def inscrever_palestra(request): - form = InscreverPalestra() - c = Context({'form': form}) - return render_to_response('inscrever_palestra.html', c, + c = {} + 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() + c.update({'form': form}) + + return render_to_response('inscrever_palestra.html', Context(c), context_instance=RequestContext(request))