summaryrefslogtreecommitdiffstats
path: root/hyperkitty/views
diff options
context:
space:
mode:
authorAurélien Bompard <aurelien@bompard.org>2013-08-10 17:47:49 -0400
committerAurélien Bompard <aurelien@bompard.org>2013-08-15 11:11:22 +0000
commit6103bcf05feeddace63fcc5857665d3762e25c8b (patch)
tree8c025f22fa12d9927850d04e628c379e66eb9f91 /hyperkitty/views
parent5ad794b6425a08550a7d68f76e201ebfdad13dfc (diff)
downloadhyperkitty-6103bcf05feeddace63fcc5857665d3762e25c8b.tar.gz
hyperkitty-6103bcf05feeddace63fcc5857665d3762e25c8b.tar.xz
hyperkitty-6103bcf05feeddace63fcc5857665d3762e25c8b.zip
Add email and subscriptions to the user profile
Diffstat (limited to 'hyperkitty/views')
-rw-r--r--hyperkitty/views/accounts.py68
1 files changed, 32 insertions, 36 deletions
diff --git a/hyperkitty/views/accounts.py b/hyperkitty/views/accounts.py
index 7a18ca9..b4c8759 100644
--- a/hyperkitty/views/accounts.py
+++ b/hyperkitty/views/accounts.py
@@ -30,7 +30,7 @@ from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.contrib.auth.views import login as django_login_view
from django.shortcuts import render, redirect
-from django.utils.http import is_safe_url, urlquote
+from django.utils.http import is_safe_url
from django.utils.timezone import utc, get_current_timezone
from django.http import Http404, HttpResponse
#from django.utils.translation import gettext as _
@@ -42,6 +42,7 @@ from hyperkitty.models import UserProfile, Rating, Favorite, LastView
from hyperkitty.views.forms import RegistrationForm, UserProfileForm
from hyperkitty.lib import get_store
from hyperkitty.lib.view_helpers import FLASH_MESSAGES, paginate
+from hyperkitty.lib.mailman import get_subscriptions
logger = logging.getLogger(__name__)
@@ -62,7 +63,7 @@ def login_view(request, *args, **kwargs):
@login_required
-def user_profile(request, user_email=None):
+def user_profile(request):
if not request.user.is_authenticated():
return redirect('user_login')
@@ -74,6 +75,16 @@ def user_profile(request, user_email=None):
except ObjectDoesNotExist:
user_profile = UserProfile.objects.create(user=request.user)
+ # get the Mailman user
+ try:
+ mm_client = mailmanclient.Client('%s/3.0' %
+ settings.MAILMAN_REST_SERVER,
+ settings.MAILMAN_API_USER,
+ settings.MAILMAN_API_PASS)
+ mm_user = mm_client.get_user(request.user.email)
+ except (HTTPError, mailmanclient.MailmanConnectionError):
+ mm_client = mm_user = None
+
if request.method == 'POST':
form = UserProfileForm(request.POST)
if form.is_valid():
@@ -82,6 +93,11 @@ def user_profile(request, user_email=None):
user_profile.timezone = form.cleaned_data["timezone"]
request.user.save()
user_profile.save()
+ # Now update the display name in Mailman
+ if mm_user is not None:
+ mm_user.display_name = "%s %s" % (
+ request.user.first_name, request.user.last_name)
+ mm_user.save()
redirect_url = reverse('user_profile')
redirect_url += "?msg=updated-ok"
return redirect(redirect_url)
@@ -104,6 +120,17 @@ def user_profile(request, user_email=None):
fav.delete() # thread has gone away?
favorites = [ f for f in favorites if f.thread is not None ]
+ # Emails
+ emails = []
+ if mm_user is not None:
+ for addr in mm_user.addresses:
+ addr = unicode(addr)
+ if addr != request.user.email:
+ emails.append(addr)
+
+ # Subscriptions
+ subscriptions = get_subscriptions(store, mm_client, mm_user)
+
# Flash messages
flash_messages = []
flash_msg = request.GET.get("msg")
@@ -115,7 +142,9 @@ def user_profile(request, user_email=None):
context = {
'user_profile' : user_profile,
'form': form,
+ 'emails': emails,
'favorites': favorites,
+ 'subscriptions': subscriptions,
'flash_messages': flash_messages,
}
return render(request, "user_profile.html", context)
@@ -225,41 +254,8 @@ def public_profile(request, user_id):
fullname = mm_user.display_name
if not fullname:
fullname = store.get_sender_name(user_id)
- subscriptions = []
# Subscriptions
- for mlist_id in mm_user.subscription_list_ids:
- mlist = client.get_list(mlist_id).fqdn_listname
- # de-duplicate subscriptions
- if mlist in [ s["list_name"] for s in subscriptions ]:
- continue
- email_hashes = store.get_message_hashes_by_user_id(user_id, mlist)
- try: # Compute the average vote value
- votes = Rating.objects.filter(list_address=mlist,
- messageid__in=email_hashes)
- except Rating.DoesNotExist:
- votes = []
- likes = dislikes = 0
- for v in votes:
- if v.vote == 1:
- likes += 1
- elif v.vote == -1:
- dislikes += 1
- all_posts_url = "%s?list=%s&query=user_id:%s" % \
- (reverse("search"), mlist, urlquote(user_id))
- likestatus = "neutral"
- if likes - dislikes >= 10:
- likestatus = "likealot"
- elif likes - dislikes > 0:
- likestatus = "like"
- subscriptions.append({
- "list_name": mlist,
- "first_post": store.get_first_post(mlist, user_id),
- "likes": likes,
- "dislikes": dislikes,
- "likestatus": likestatus,
- "all_posts_url": all_posts_url,
- "posts_count": len(email_hashes),
- })
+ subscriptions = get_subscriptions(store, client, mm_user)
likes = sum([s["likes"] for s in subscriptions])
dislikes = sum([s["dislikes"] for s in subscriptions])
likestatus = "neutral"