Skip to content

Commit 2f26ea2

Browse files
author
Leidson Cruz
committed
Nem lembro mais oaieuioaeu
1 parent 5e8a4f8 commit 2f26ea2

File tree

8 files changed

+153
-17
lines changed

8 files changed

+153
-17
lines changed

core/announcers/models.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
# -*- encoding: utf-8 -*-
22
from django.db import models
3+
from django.core import serializers
34

45
# Create your models here.
56
class Announcer(models.Model):
67
name = models.CharField(u"nome", max_length=255, blank=False, null=False)
78
bio = models.TextField(u"biografia", blank=True, null=True)
8-
photo = models.ImageField(u"foto", blank=True, null=True)
9-
email = models.CharField(u"email",max_length=255, blank=False, null=False, unique=True)
9+
photo = models.ImageField(u"foto", blank=False, null=False)
10+
email = models.EmailField(u"email",max_length=255, blank=False, null=False, unique=True)
1011

1112
class Meta:
1213
verbose_name = u'Palestrante'

core/announcers/templates/ann_dashboard.html

+31-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ <h3>{{organizacao}}</h3>
55
<div class="row">
66
<div class="col-xs-12 col-sm-12 col-md-12">
77
<div class="btn-group">
8-
<a class="btn btn-success">Novo</a>
9-
<a class="btn btn-warning">Editar</a>
10-
<a class="btn btn-danger">Excluir</a>
8+
<a class="btn btn-success" href="palestrante">Novo</a>
119
</div>
1210
</div>
1311
</div>
@@ -21,20 +19,49 @@ <h3>{{organizacao}}</h3>
2119
<th>Foto</th>
2220
<th>Nome</th>
2321
<th>Biografia</th>
22+
<th>Ações</th>
2423
</tr>
2524
</thead>
2625
<tbody>
2726
{% for announcer in announcers %}
2827
<tr>
2928
<th scope="row">{{forloop.counter}}</th>
30-
<td><img width="50" height="50" src="/media/{{announcer.photo}}" /></td>
29+
<td><img width="80" height="80" class="img-circle" src="/media/{{announcer.photo}}" /></td>
3130
<td>{{announcer.name}}</td>
3231
<td>{{announcer.bio}}</td>
32+
<td>
33+
<div class="btn-group">
34+
<button type="button" class="btn btn-default" aria-label="Left Align">
35+
<a href="{{announcer.id}}" class="glyphicon glyphicon-pencil"></a>
36+
</button>
37+
<button type="button" class="btn btn-default" aria-label="Center Align">
38+
<a href="#" data-url="excluir/{{announcer.id}}" class="glyphicon glyphicon-trash" data-toggle="modal" data-target="#delete-dialog" ></a>
39+
</button>
40+
</div>
41+
</td>
3342
</tr>
3443
{% endfor %}
3544
</tbody>
3645
</table>
3746
</div>
3847
</div>
3948
</div>
49+
50+
<div id="delete-dialog" class="modal fade">
51+
<div class="modal-dialog">
52+
<div class="modal-content">
53+
<div class="modal-header">
54+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
55+
<h4 class="modal-title">Excluir palestrante</h4>
56+
</div>
57+
<div class="modal-body">
58+
<p>Você tem certeza que deseja excluir o palestrante?</p>
59+
</div>
60+
<div class="modal-footer">
61+
<button type="button" class="btn btn-danger confirm-dialog">Excluir</button>
62+
<button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
63+
</div>
64+
</div><!-- /.modal-content -->
65+
</div><!-- /.modal-dialog -->
66+
</div><!-- /.modal -->
4067
{% endblock content %}
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{% extends "base.html" %}
2+
{% load staticfiles %}
3+
{% block content %}
4+
<div class="jumbotron">
5+
<div class="container">
6+
<form action="/palestrantes/add/" method="POST" enctype="multipart/form-data">
7+
{% csrf_token %}
8+
<input type="hidden" id="palestrante_id" value="{{announcer.id}}">
9+
<div class="form-group">
10+
<label for="palestrante_nome">Nome</label>
11+
<input type="text" class="form-control" name="nome" id="palestrante_nome" placeholder="Nome do palestrante aqui." value="{{announcer.name}}">
12+
</div>
13+
<div class="form-group">
14+
<label for="palestrante_email">Email</label>
15+
<input type="text" class="form-control" name="email" id="palestrante_email" placeholder="Email do palestrante aqui." value="{{announcer.email}}">
16+
</div>
17+
<div class="form-group">
18+
<label for="palestrante_biografia">Biografia</label>
19+
<textarea name="bio" class="form-control" id="palestrante_biografia">
20+
{{announcer.bio}}
21+
</textarea>
22+
</div>
23+
<div class="form-group">
24+
<label for="palestrante_foto">Foto</label>
25+
<input type="file" name="foto" id="palestrante_foto">
26+
<p class="help-block">
27+
{% if announcer.photo %}
28+
<img width="100" height="100" src="/media/{{announcer.photo}}" class="img-circle" alt="Foto palestrante" />
29+
{% endif %}
30+
</p>
31+
</div>
32+
<button type="submit" class="btn btn-success">Salvar</button>
33+
<a href="/palestrantes" class="btn btn-danger">Cancelar</a>
34+
</form>
35+
</div>
36+
</div>
37+
{% endblock content %}

core/announcers/views.py

+29-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,36 @@
1-
from django.shortcuts import render
1+
from django.shortcuts import render,redirect
22
from announcers.models import Announcer
3+
4+
35
# Create your views here.
46
def dashboard(request):
57
context = {
68
'ORGANIZACAO': request.user.organization,
7-
'announcers': Announcer.objects.all()
9+
'announcers': Announcer.objects.all(),
10+
}
11+
12+
return render(request,'ann_dashboard.html', context)
13+
14+
def ann_form(request,id=None):
15+
if id:
16+
context = {
17+
'announcer' : Announcer.objects.get(id=id)
18+
}
19+
20+
return render(request,'ann_form.html', context)
21+
else:
22+
return render(request,'ann_form.html')
23+
24+
def ann_remove(request, id):
25+
ann = Announcer.objects.get(id=id)
26+
ann.delete()
27+
context = {
28+
'ORGANIZACAO': request.user.organization,
29+
'announcers': Announcer.objects.all(),
830
}
931

10-
return render(request,'ann_dashboard.html', context)
32+
return redirect('/palestrantes', context)
33+
34+
def ann_add(request):
35+
print request.POST
36+
return render(request,'ann_form.html')

core/geral/static/js/comum.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1-
/**
2-
* Created by leonardocabral on 24/05/14.
3-
*/
1+
/*=========== Confirm dialog excluded ==========================*/
2+
var excluded_url;
3+
4+
$('#delete-dialog').on('show.bs.modal', function(event) {
5+
var button = $(event.relatedTarget); // Button that triggered the modal
6+
excluded_url = button.data('url'); // Extract info from data-* attributes
7+
});
8+
9+
$('#delete-dialog').find('.modal-footer > button.confirm-dialog').on('click', function(e) {
10+
$(location).attr('href',excluded_url);
11+
});

core/geral/urls.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@
1414
url(r'^organizacao/', 'organizations.views.dashboard', name='org_dashboard'),
1515
url(r'^meetups/', 'meetups.views.dashboard', name='meet_dashboard'),
1616
url(r'^talks/', 'talks.views.dashboard', name='talk_dashboard'),
17-
url(r'^palestrantes/', 'announcers.views.dashboard', name='ann_dashboard'),
17+
18+
url(r'^palestrantes/$', 'announcers.views.dashboard', name='ann_dashboard'),
19+
url(r'^palestrantes/palestrante$', 'announcers.views.ann_form', name='ann_form'),
20+
url(r'^palestrantes/(?P<id>[0-9]+)/$', 'announcers.views.ann_form', name='ann_form'),
21+
url(r'^palestrantes/add/$', 'announcers.views.ann_add', name='ann_add'),
22+
url(r'^palestrantes/excluir/(?P<id>[0-9]+)/$', 'announcers.views.ann_remove', name='ann_remove'),
1823

1924
url(r'^admin/', include(admin.site.urls)),
2025
url(r'^grappelli/', include('grappelli.urls')),

core/organizations/templates/org_dashboard.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<img width="100" height="100" alt="Logo da organização" src="/media/{{ORGANIZACAO.logo}}" />
2222
</p>
2323
</div>
24-
<button type="submit" class="btn btn-primary">Salvar</button>
24+
<button type="submit" class="btn btn-success">Salvar</button>
2525
<button class="btn btn-danger">Cancelar</button>
2626
</form>
2727
</div>

core/users/models.py

+35-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,43 @@
11
# -*- encoding: utf-8 -*-
22
from django.db import models
3-
from django.contrib.auth.models import AbstractBaseUser,UserManager
3+
from django.contrib.auth.models import AbstractBaseUser,UserManager,BaseUserManager
4+
5+
6+
class MeetUserManager(BaseUserManager):
7+
def create_user(self, email, name, password=None):
8+
"""
9+
Creates and saves a User with the given email, date of
10+
birth and password.
11+
"""
12+
if not email:
13+
raise ValueError('Users must have an email address')
14+
15+
user = self.model(
16+
email=self.normalize_email(email),
17+
name=name,
18+
)
19+
20+
user.set_password(password)
21+
user.save(using=self._db)
22+
return user
23+
24+
def create_superuser(self, email, name, password):
25+
"""
26+
Creates and saves a superuser with the given email, date of
27+
birth and password.
28+
"""
29+
user = self.create_user(email,
30+
password=password,
31+
name=name
32+
)
33+
user.is_admin = True
34+
user.save(using=self._db)
35+
return user
436

537
# Create your models here.
638
class User(AbstractBaseUser):
739
name = models.CharField(u"nome",max_length=255, blank=False, null=False)
8-
email = models.CharField(u"email",max_length=255, blank=False, null=False, unique=True)
40+
email = models.EmailField(u"email",max_length=255, unique=True)
941
is_active = models.BooleanField(default=True)
1042
is_admin = models.BooleanField(default=False)
1143

@@ -14,7 +46,7 @@ class User(AbstractBaseUser):
1446
USERNAME_FIELD = 'email'
1547
REQUIRED_FIELDS = ['name']
1648

17-
objects = UserManager()
49+
objects = MeetUserManager()
1850

1951
class Meta:
2052
verbose_name = u'Usuário'

0 commit comments

Comments
 (0)