diff options
Diffstat (limited to 'hyperkitty/views')
-rw-r--r-- | hyperkitty/views/accounts.py | 17 | ||||
-rw-r--r-- | hyperkitty/views/list.py | 17 | ||||
-rw-r--r-- | hyperkitty/views/thread.py | 55 |
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') + |