summaryrefslogtreecommitdiffstats
path: root/hyperkitty/views/thread.py
diff options
context:
space:
mode:
Diffstat (limited to 'hyperkitty/views/thread.py')
-rw-r--r--hyperkitty/views/thread.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/hyperkitty/views/thread.py b/hyperkitty/views/thread.py
new file mode 100644
index 0000000..06a1bda
--- /dev/null
+++ b/hyperkitty/views/thread.py
@@ -0,0 +1,113 @@
+import django.utils.simplejson as simplejson
+
+from django.http import HttpResponse, HttpResponseRedirect
+from django.template import RequestContext, loader
+from django.conf import settings
+from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger, InvalidPage
+from django.contrib.auth.decorators import (login_required,
+ permission_required,
+ user_passes_test)
+from kittystore.kittysastore import KittySAStore
+
+from gsoc.models import Rating
+from lib.mockup import *
+from forms import *
+from gsoc.utils import log
+
+STORE = KittySAStore(settings.KITTYSTORE_URL)
+
+
+
+def thread_index (request, mlist_fqdn, threadid):
+ ''' Displays all the email for a given thread identifier '''
+ list_name = mlist_fqdn.split('@')[0]
+
+ search_form = SearchForm(auto_id=False)
+ t = loader.get_template('thread.html')
+ threads = STORE.get_thread(list_name, threadid)
+ #prev_thread = mongo.get_thread_name(list_name, int(threadid) - 1)
+ prev_thread = []
+ if len(prev_thread) > 30:
+ prev_thread = '%s...' % prev_thread[:31]
+ #next_thread = mongo.get_thread_name(list_name, int(threadid) + 1)
+ next_thread = []
+ if len(next_thread) > 30:
+ next_thread = '%s...' % next_thread[:31]
+
+ participants = {}
+ cnt = 0
+
+ for message in threads:
+ # @TODO: Move this logic inside KittyStore?
+ message.email = message.email.strip()
+
+ # Extract all the votes for this message
+ try:
+ votes = Rating.objects.filter(messageid = message.message_id)
+ except Rating.DoesNotExist:
+ votes = {}
+
+ likes = 0
+ dislikes = 0
+
+ for vote in votes:
+ if vote.vote == 1:
+ likes = likes + 1
+ elif vote.vote == -1:
+ dislikes = dislikes + 1
+ else:
+ pass
+
+ message.votes = votes
+ message.likes = likes
+ message.dislikes = dislikes
+
+ # Statistics on how many participants and threads this month
+ participants[message.sender] = {'email': message.email}
+ cnt = cnt + 1
+
+ archives_length = STORE.get_archives_length(list_name)
+ from_url = '/thread/%s/%s/' %(mlist_fqdn, threadid)
+ tag_form = AddTagForm(initial={'from_url' : from_url})
+
+ c = RequestContext(request, {
+ 'list_name' : list_name,
+ 'list_address': mlist_fqdn,
+ 'search_form': search_form,
+ 'addtag_form': tag_form,
+ 'month': 'Thread',
+ 'participants': participants,
+ 'answers': cnt,
+ 'first_mail': threads[0],
+ 'threads': threads[1:],
+ 'next_thread': next_thread,
+ 'next_thread_id': 0,
+ 'prev_thread': prev_thread,
+ 'prev_thread_id': 0,
+ 'archives_length': archives_length,
+ })
+ return HttpResponse(t.render(c))
+
+
+@login_required
+def add_tag(request, mlist_fqdn, email_id):
+ """ Add a tag to a given thread. """
+ t = loader.get_template('threads/add_tag_form.html')
+ if request.method == 'POST':
+ form = AddTagForm(request.POST)
+ if form.is_valid():
+ print "THERE WE ARE"
+ # TODO: Add the logic to add the tag
+ if form.data['from_url']:
+ return HttpResponseRedirect(form.data['from_url'])
+ else:
+ return HttpResponseRedirect('/')
+ else:
+ form = AddTagForm()
+ c = RequestContext(request, {
+ 'list_address': mlist_fqdn,
+ 'email_id': email_id,
+ 'addtag_form': form,
+ })
+ return HttpResponse(t.render(c))
+