Commit a9bdea95041e2062f9a83fa5a9ba7eeffc769db9

Authored by Luan
2 parents 06dcae85 55f81ec7

Merge branch 'master' of github.com:TracyWebTech/colab

1 TODO 1 TODO
2 ----- 2 -----
3 3
  4 +Gestão de listas
  5 +================
  6 +* Sincronizar informações de membership do mailman com o django
  7 +* Usar informações do banco de dados local ao inves de fazer queries constantes
  8 +
  9 +Updates
  10 +======
  11 +* Update Django to 1.7 and remove south dependency
  12 +
  13 +Async
  14 +=====
  15 +* Usar celery para tornar tasks como envio de emails asincronas.
  16 +
  17 +
4 Envio de emails 18 Envio de emails
5 =============== 19 ===============
6 * Não perder o email em caso de falha de envio. Exibir o erro mas trazer a mensagem de volta para o usuário 20 * Não perder o email em caso de falha de envio. Exibir o erro mas trazer a mensagem de volta para o usuário
  21 +* Permitir apenas que usuarios pertencentes a lista enviem mensagens
  22 +
7 23
8 Planet 24 Planet
9 ====== 25 ======
src/accounts/models.py
1 1
2 import urlparse 2 import urlparse
  3 +import requests
3 4
4 from django.db import models 5 from django.db import models
  6 +from django.conf import settings
5 from django.contrib.auth.models import AbstractUser 7 from django.contrib.auth.models import AbstractUser
6 from django.core.urlresolvers import reverse 8 from django.core.urlresolvers import reverse
7 9
@@ -24,6 +26,15 @@ class User(AbstractUser): @@ -24,6 +26,15 @@ class User(AbstractUser):
24 def facebook_link(self): 26 def facebook_link(self):
25 return urlparse.urljoin('https://www.facebook.com', self.facebook) 27 return urlparse.urljoin('https://www.facebook.com', self.facebook)
26 28
  29 + def mailinglists(self):
  30 + list_set = set()
  31 + for email in self.emails.all():
  32 + lists = requests.get(settings.MAILMAN_API_URL, timeout=1,
  33 + params={'address': email.address})
  34 + list_set.update(lists.json())
  35 + return tuple(list_set)
  36 +
  37 +
27 # We need to have `email` field set as unique but Django does not 38 # We need to have `email` field set as unique but Django does not
28 # support field overriding (at least not until 1.6). 39 # support field overriding (at least not until 1.6).
29 # The following workaroud allows to change email field to unique 40 # The following workaroud allows to change email field to unique
src/accounts/templates/accounts/user_detail.html
@@ -60,6 +60,15 @@ @@ -60,6 +60,15 @@
60 {% endif %} 60 {% endif %}
61 {% endif %} 61 {% endif %}
62 </ul> 62 </ul>
  63 +
  64 + {% if user_.mailinglists %}
  65 + <b>{% trans 'Subscribes: ' %}</b>
  66 + {% for list in user_.mailinglists %}
  67 + <span class="label label-primary">{{ list }}</span>
  68 + {% endfor %}
  69 + {% endif %}
  70 +
  71 + <div class="divider"></div>
63 </div> 72 </div>
64 73
65 <div class="col-lg-4 col-md-4 col-sm-8"> 74 <div class="col-lg-4 col-md-4 col-sm-8">
src/accounts/views.py
@@ -8,11 +8,11 @@ from collections import OrderedDict @@ -8,11 +8,11 @@ from collections import OrderedDict
8 from django.contrib import messages 8 from django.contrib import messages
9 from django.db.models import Count 9 from django.db.models import Count
10 from django.contrib.auth import get_user_model 10 from django.contrib.auth import get_user_model
11 -from django.views.generic import DetailView, UpdateView  
12 from django.utils.translation import ugettext as _ 11 from django.utils.translation import ugettext as _
13 from django.shortcuts import render, redirect 12 from django.shortcuts import render, redirect
14 from django.core.urlresolvers import reverse 13 from django.core.urlresolvers import reverse
15 from django.core.exceptions import PermissionDenied 14 from django.core.exceptions import PermissionDenied
  15 +from django.views.generic import DetailView, UpdateView
16 16
17 from haystack.query import SearchQuerySet 17 from haystack.query import SearchQuerySet
18 18
src/super_archives/templates/superarchives/includes/message.html
@@ -53,7 +53,7 @@ @@ -53,7 +53,7 @@
53 <form method="POST"> 53 <form method="POST">
54 {% csrf_token %} 54 {% csrf_token %}
55 <p> 55 <p>
56 - <textarea placeholder="{% trans 'Send a message' %}" rows="5" class="form-control"></textarea> 56 + <textarea name="emailbody" placeholder="{% trans 'Send a message' %}" rows="5" class="form-control"></textarea>
57 </p> 57 </p>
58 <div class="col-lg-9 col-md-8 col-sm-8 col-xs-7"> 58 <div class="col-lg-9 col-md-8 col-sm-8 col-xs-7">
59 <p class="quiet">{% trans "After sending a message it will take few minutes before it shows up in here. Why don't you grab a coffee?" %}</p> 59 <p class="quiet">{% trans "After sending a message it will take few minutes before it shows up in here. Why don't you grab a coffee?" %}</p>
src/super_archives/views.py
@@ -79,10 +79,10 @@ def thread_post(request, mailinglist, thread_token): @@ -79,10 +79,10 @@ def thread_post(request, mailinglist, thread_token):
79 raise http.Http404 79 raise http.Http404
80 80
81 data = {} 81 data = {}
82 - data['email_from'] = '{} <{}>'.format(request.user.get_full_name(), 82 + data['from'] = '{} <{}>'.format(request.user.get_full_name(),
83 request.user.email) 83 request.user.email)
84 data['subject'] = thread.message_set.first().subject_clean 84 data['subject'] = thread.message_set.first().subject_clean
85 - data['body'] = request.POST.get('body', '').strip() 85 + data['body'] = request.POST.get('emailbody', '').strip()
86 86
87 url = urlparse.urljoin(settings.MAILMAN_API_URL, mailinglist + '/sendmail') 87 url = urlparse.urljoin(settings.MAILMAN_API_URL, mailinglist + '/sendmail')
88 88
@@ -103,10 +103,13 @@ def thread_post(request, mailinglist, thread_token): @@ -103,10 +103,13 @@ def thread_post(request, mailinglist, thread_token):
103 "in the meanwhile.")) 103 "in the meanwhile."))
104 else: 104 else:
105 if not error_msg: 105 if not error_msg:
106 - if resp and resp.status_code == 400:  
107 - error_msg = _('You cannot send an empty email') 106 + if resp is not None:
  107 + if resp.status_code == 400:
  108 + error_msg = _('You cannot send an empty email')
  109 + elif resp.status_code == 404:
  110 + error_msg = _('Mailing list does not exist')
108 else: 111 else:
109 - error_msg = _('Unkown error trying to connect to Mailman API') 112 + error_msg = _('Unkown error trying to connect to Mailman API')
110 messages.error(request, error_msg) 113 messages.error(request, error_msg)
111 114
112 return thread_get(request, mailinglist, thread_token) 115 return thread_get(request, mailinglist, thread_token)