views.py
5 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
from django.template import RequestContext
from django.contrib.auth.models import User
from django.forms.models import model_to_dict
from django.contrib.auth.decorators import login_required
from django.shortcuts import render_to_response, get_object_or_404, redirect
from super_archives import queries
from super_archives.forms import UserCreationForm, UserUpdateForm
from super_archives.models import Message, Thread, UserProfile, EmailAddress
def home(request):
"""Index page view"""
latest_threads = queries.get_latest_threads()
hotest_threads = queries.get_voted_threads()
template_data = {
'hotest_threads': hotest_threads[:6],
'latest_threads': latest_threads[:6],
}
return render_to_response('home.html', template_data,
context_instance=RequestContext(request))
def signup(request):
# If the request method is GET just return the form
if request.method == 'GET':
form = UserCreationForm()
return render_to_response('signup-form.html', {'form': form},
RequestContext(request))
# If the request method is POST try to store data
form = UserCreationForm(request.POST)
# If there is validation errors give the form back to the user
if not form.is_valid():
return render_to_response('signup-form.html', {'form': form},
RequestContext(request))
user = User(
username=form.cleaned_data.get('username'),
email=form.cleaned_data.get('email'),
first_name=form.cleaned_data.get('first_name'),
last_name=form.cleaned_data.get('last_name'),
)
user.set_password(form.cleaned_data.get('password'))
user.save()
profile = UserProfile(
user=user,
institution=form.cleaned_data.get('institution'),
role=form.cleaned_data.get('role'),
twitter=form.cleaned_data.get('twitter'),
facebook=form.cleaned_data.get('facebook'),
google_talk=form.cleaned_data.get('google_talk'),
webpage=form.cleaned_data.get('webpage'),
)
profile.save()
# 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()
return redirect('colab.views.user_profile_username', user.username)
def user_profile(request, user, email_address=None, editable=False, form=None):
if form is None:
form = UserCreationForm()
if user:
email_addresses = user.emails.all()
else:
email_addresses = [email_address]
if not email_address:
email_address = email_addresses[0]
email_addresses_ids = tuple([str(addr.id) for addr in email_addresses])
query = """
SELECT
*
FROM
super_archives_message
WHERE
from_address_id IN (%(ids)s)
GROUP BY
thread_id
ORDER BY
received_time DESC
LIMIT 10;
""" % {'ids': ','.join(email_addresses_ids)}
emails = Message.objects.raw(query)
n_sent = Message.objects.filter(from_address__in=email_addresses).count()
if user:
profile = user.profile
else:
profile = None
template_data = {
'user_profile': profile,
'email_address': email_address,
'emails': emails or [],
'form': form,
'editable': editable,
}
return render_to_response('user-profile.html', template_data,
RequestContext(request))
@login_required
def user_profile_empty(request):
return user_profile(request, request.user)
def user_profile_username(request, username):
user = get_object_or_404(User, username=username)
return user_profile(request, user)
def user_profile_emailhash(request, emailhash):
email_addr = get_object_or_404(EmailAddress, md5=emailhash)
return user_profile(request, email_addr.user, email_addr)
@login_required
def user_profile_edit(request, username):
profile = get_object_or_404(UserProfile, user__username=username)
form = UserUpdateForm(initial=model_to_dict(profile))
if request.method == "GET":
return user_profile(request, profile.user, editable=True, form=form)
form = UserUpdateForm(request.POST)
if not form.is_valid():
return user_profile(request, profile.user, editable=True, form=form)
profile.institution = form.cleaned_data.get('institution')
profile.role = form.cleaned_data.get('role')
profile.twitter = form.cleaned_data.get('twitter')
profile.facebook = form.cleaned_data.get('facebook')
profile.google_talk = form.cleaned_data.get('google_talk')
profile.webpage = form.cleaned_data.get('webpage')
profile.save()
return redirect('colab.views.user_profile_username', profile.user.username)