summaryrefslogtreecommitdiffstats
path: root/hyperkitty/views
diff options
context:
space:
mode:
Diffstat (limited to 'hyperkitty/views')
-rw-r--r--hyperkitty/views/accounts.py17
-rw-r--r--hyperkitty/views/list.py17
-rw-r--r--hyperkitty/views/thread.py55
3 files changed, 78 insertions, 11 deletions
diff --git a/hyperkitty/views/accounts.py b/hyperkitty/views/accounts.py
index 69db991..85b6a9a 100644
--- a/hyperkitty/views/accounts.py
+++ b/hyperkitty/views/accounts.py
@@ -39,7 +39,7 @@ from django.shortcuts import render_to_response, redirect
from django.template import Context, loader, RequestContext
from django.utils.translation import gettext as _
-from hyperkitty.models import UserProfile, Rating
+from hyperkitty.models import UserProfile, Rating, Favorite
from hyperkitty.views.forms import RegistrationForm
from hyperkitty.lib import get_store
@@ -57,6 +57,7 @@ def user_profile(request, user_email=None):
if not request.user.is_authenticated():
return redirect('user_login')
t = loader.get_template('user_profile.html')
+ store = get_store(request)
# try to render the user profile.
try:
@@ -65,11 +66,11 @@ def user_profile(request, user_email=None):
except:
user_profile = UserProfile.objects.create(user=request.user)
+ # Votes
try:
votes = Rating.objects.filter(user=request.user)
except Rating.DoesNotExist:
- votes = {}
- store = get_store(request)
+ votes = []
votes_up = []
votes_down = []
for vote in votes:
@@ -84,10 +85,20 @@ def user_profile(request, user_email=None):
elif vote.vote == -1:
votes_down.append(vote_data)
+ # Favorites
+ try:
+ favorites = Favorite.objects.filter(user=request.user)
+ except Favorite.DoesNotExist:
+ favorites = []
+ for fav in favorites:
+ thread = store.get_thread(fav.list_address, fav.threadid)
+ fav.thread = thread
+
c = RequestContext(request, {
'user_profile' : user_profile,
'votes_up': votes_up,
'votes_down': votes_down,
+ 'favorites': favorites,
'use_mockups': settings.USE_MOCKUPS,
})
diff --git a/hyperkitty/views/list.py b/hyperkitty/views/list.py
index a782ffb..dc846cc 100644
--- a/hyperkitty/views/list.py
+++ b/hyperkitty/views/list.py
@@ -40,7 +40,7 @@ from django.contrib.auth.decorators import (login_required,
permission_required,
user_passes_test)
-from hyperkitty.models import Rating, Tag
+from hyperkitty.models import Rating, Tag, Favorite
from hyperkitty.lib import get_months, get_store, get_display_dates
from forms import *
@@ -127,6 +127,18 @@ def archives(request, mlist_fqdn, year=None, month=None, day=None):
#threads[cnt] = thread
#cnt = cnt + 1
+ # Favorites
+ thread.favorite = False
+ if request.user.is_authenticated():
+ try:
+ Favorite.objects.get(list_address=mlist_fqdn,
+ threadid=thread.thread_id,
+ user=request.user)
+ except Favorite.DoesNotExist:
+ pass
+ else:
+ thread.favorite = True
+
paginator = Paginator(all_threads, 10)
pageNo = request.GET.get('page')
@@ -191,7 +203,6 @@ def list(request, mlist_fqdn=None):
thread = Thread(thread_obj.thread_id, thread_obj.subject,
thread_obj.participants, len(thread_obj),
thread_obj.date_active)
- threads.append(thread)
month = thread.date_active.month
if month < 10:
@@ -207,6 +218,8 @@ def list(request, mlist_fqdn=None):
# Statistics on how many participants and threads this month
participants.update(thread.participants)
+ threads.append(thread)
+
# top threads are the one with the most answers
top_threads = sorted(threads, key=lambda t: t.length, reverse=True)
diff --git a/hyperkitty/views/thread.py b/hyperkitty/views/thread.py
index 397e45d..6769034 100644
--- a/hyperkitty/views/thread.py
+++ b/hyperkitty/views/thread.py
@@ -34,7 +34,7 @@ from django.contrib.auth.decorators import (login_required,
permission_required,
user_passes_test)
-from hyperkitty.models import Rating, Tag
+from hyperkitty.models import Rating, Tag, Favorite
#from hyperkitty.lib.mockup import *
from forms import *
from hyperkitty.lib import get_months, get_store, stripped_subject
@@ -99,13 +99,24 @@ def thread_index(request, mlist_fqdn, threadid, month=None, year=None):
archives_length = get_months(store, mlist_fqdn)
from_url = reverse("thread", kwargs={"mlist_fqdn":mlist_fqdn,
"threadid":threadid})
+ # Tags
tag_form = AddTagForm(initial={'from_url' : from_url})
-
try:
tags = Tag.objects.filter(threadid=threadid, list_address=mlist_fqdn)
except Tag.DoesNotExist:
tags = {}
+ # Favorites
+ fav_action = "add"
+ if request.user.is_authenticated():
+ try:
+ Favorite.objects.get(list_address=mlist_fqdn, threadid=threadid,
+ user=request.user)
+ except Favorite.DoesNotExist:
+ pass
+ else:
+ fav_action = "rm"
+
# Extract relative dates
today = datetime.date.today()
days_old = today - thread.starting_email.date.date()
@@ -132,11 +143,12 @@ def thread_index(request, mlist_fqdn, threadid, month=None, year=None):
'days_old': days_old.days,
'use_mockups': settings.USE_MOCKUPS,
'sort_mode': sort_mode,
+ 'fav_action': fav_action,
})
return HttpResponse(t.render(c))
-def add_tag(request, mlist_fqdn, hashid):
+def add_tag(request, mlist_fqdn, threadid):
""" Add a tag to a given thread. """
if not request.user.is_authenticated():
return HttpResponse('You must be logged in to add a tag',
@@ -152,14 +164,14 @@ def add_tag(request, mlist_fqdn, hashid):
content_type="text/plain", status=500)
tag = form.data['tag']
try:
- tag_obj = Tag.objects.get(threadid=hashid,
+ tag_obj = Tag.objects.get(threadid=threadid,
list_address=mlist_fqdn, tag=tag)
except Tag.DoesNotExist:
- tag_obj = Tag(list_address=mlist_fqdn, threadid=hashid, tag=tag)
+ tag_obj = Tag(list_address=mlist_fqdn, threadid=threadid, tag=tag)
tag_obj.save()
# Now refresh the tag list
- tags = Tag.objects.filter(threadid=hashid, list_address=mlist_fqdn)
+ tags = Tag.objects.filter(threadid=threadid, list_address=mlist_fqdn)
t = loader.get_template('threads/tags.html')
html = t.render(RequestContext(request, {
"tags": tags,
@@ -169,3 +181,34 @@ def add_tag(request, mlist_fqdn, hashid):
return HttpResponse(simplejson.dumps(response),
mimetype='application/javascript')
+
+
+def favorite(request, mlist_fqdn, threadid):
+ """ Add or remove from favorites"""
+ if not request.user.is_authenticated():
+ return HttpResponse('You must be logged in to have favorites',
+ content_type="text/plain", status=403)
+
+ if request.method != 'POST':
+ return HttpResponse("Something went wrong here",
+ content_type="text/plain", status=500)
+
+ props = dict(list_address=mlist_fqdn, threadid=threadid, user=request.user)
+ if request.POST["action"] == "add":
+ try:
+ fav = Favorite.objects.get(**props)
+ except Favorite.DoesNotExist:
+ fav = Favorite(**props)
+ fav.save()
+ elif request.POST["action"] == "rm":
+ try:
+ fav = Favorite.objects.get(**props)
+ except Favorite.DoesNotExist:
+ pass
+ else:
+ fav.delete()
+ else:
+ return HttpResponse("Something went wrong here",
+ content_type="text/plain", status=500)
+ return HttpResponse("success", mimetype='text/plain')
+