views.py
3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env python
# encoding: utf-8
from django.contrib import messages
from django.contrib.auth import get_user_model
from django.views.generic import DetailView, UpdateView
from django.utils.translation import ugettext as _
from django.shortcuts import render, redirect
from django.core.urlresolvers import reverse
from colab.deprecated import solrutils
from colab.deprecated import signup as signup_
from super_archives.models import EmailAddress, Message
from .forms import UserCreationForm, ListsForm, UserUpdateForm
class UserProfileBaseMixin(object):
model = get_user_model()
slug_field = 'username'
slug_url_kwarg = 'username'
context_object_name = 'user_'
class UserProfileUpdateView(UserProfileBaseMixin, UpdateView):
template_name = 'accounts/user_update_form.html'
form_class = UserUpdateForm
def get_success_url(self):
return reverse('user_profile', kwargs={'username': self.object.username})
class UserProfileDetailView(UserProfileBaseMixin, DetailView):
template_name = 'accounts/user_detail.html'
def get_context_data(self, **kwargs):
user = self.object
context = {}
# TODO: Use haystack instead of solrutils
context['type_count'] = solrutils.count_types(
filters={'collaborator': user.username}
)
# TODO: Use haystack instead of solrutils
context['docs'] = solrutils.get_latest_collaborations(
username=user.username
)
email_pks = [addr.pk for addr in user.emails.iterator()]
query = Message.objects.filter(from_address__in=email_pks)
query = query.order_by('-received_time')
context['emails'] = query[:10]
context.update(kwargs)
return super(UserProfileDetailView, self).get_context_data(**context)
def signup(request):
# If the request method is GET just return the form
if request.method == 'GET':
user_form = UserCreationForm()
lists_form = ListsForm()
return render(request, 'accounts/user_create_form.html',
{'user_form': user_form, 'lists_form': lists_form})
user_form = NewUserForm(request.POST)
lists_form = ListsForm(request.POST)
if not user_form.is_valid() or not lists_form.is_valid():
return render(request, 'accounts/user_create_form.html',
{'user_form': user_form, 'lists_form': lists_form})
user = user_form.save()
mailing_lists = lists_form.cleaned_data.get('lists')
if mailing_lists:
signup_.send_email_lists(user, mailing_lists)
# Check if the user's email have been used previously
# in the mainling lists to link the user to old messages
email_addr, created = EmailAddress.objects.get_or_create(address=user.email)
if created:
email_addr.real_name = user.get_full_name()
email_addr.user = user
email_addr.save()
messages.success(request, _('Your profile has been created!'))
messages.warning(request, _('You must login to validated your profile. '
'Profiles not validated are deleted in 24h.'))
return redirect('user_profile', username=user.username)