def subscriptions(request): profile = request.user.hyperkitty_profile mm_user_id = get_mailman_user_id(request.user) subs = [] for mlist_id in get_subscriptions(request.user): try: mlist = MailingList.objects.get(list_id=mlist_id) except MailingList.DoesNotExist: mlist = None # no archived email yet posts_count = likes = dislikes = 0 first_post = all_posts_url = None if mlist is not None: list_name = mlist.name posts_count = profile.emails.filter( mailinglist__name=mlist.name).count() likes, dislikes = profile.get_votes_in_list(mlist.name) first_post = profile.get_first_post(mlist) if mm_user_id is not None: all_posts_url = "%s?list=%s" % ( reverse("hk_user_posts", args=[mm_user_id]), mlist.name) else: list_name = get_mailman_client().get_list(mlist_id).fqdn_listname likestatus = "neutral" if likes - dislikes >= 10: likestatus = "likealot" elif likes - dislikes > 0: likestatus = "like" subs.append({ "list_name": list_name, "mlist": mlist, "posts_count": posts_count, "first_post": first_post, "likes": likes, "dislikes": dislikes, "likestatus": likestatus, "all_posts_url": all_posts_url, }) return render(request, 'hyperkitty/user_profile/subscriptions.html', { "subscriptions": subs, "subpage": "subscriptions", })
def overview_posted_to(request, mlist_fqdn): """Return the threads that the logged-in user has posted to.""" mlist = get_object_or_404(MailingList, name=mlist_fqdn) if request.user.is_authenticated: mm_user_id = get_mailman_user_id(request.user) threads_posted_to = [] if mm_user_id is not None: for thread in mlist.recent_threads: senders = set( [e.sender.mailman_id for e in thread.emails.all()]) if mm_user_id in senders: threads_posted_to.append(thread) else: threads_posted_to = [] return render( request, "hyperkitty/fragments/overview_threads.html", { 'mlist': mlist, 'threads': threads_posted_to, "empty": _('You have not posted to this list (yet).'), })
def overview(request, mlist_fqdn=None): if not mlist_fqdn: return redirect('/') mlist = get_object_or_404(MailingList, name=mlist_fqdn) threads = mlist.recent_threads # top threads are the one with the most answers top_threads = sorted(threads, key=lambda t: t.emails_count, reverse=True) # active threads are the ones that have the most recent posting active_threads = sorted(threads, key=lambda t: t.date_active, reverse=True) # top authors are the ones that have the most kudos. How do we determine # that? Most likes for their post? if getattr(settings, 'USE_MOCKUPS', False): from hyperkitty.lib.mockup import generate_top_author authors = generate_top_author() authors = sorted(authors, key=lambda author: author.kudos) authors.reverse() else: authors = [] # Popular threads pop_threads = [] for t in threads: votes = t.get_votes() if votes["likes"] - votes["dislikes"] > 0: pop_threads.append(t) def _get_thread_vote_result(t): votes = t.get_votes() return votes["likes"] - votes["dislikes"] pop_threads.sort(key=_get_thread_vote_result, reverse=True) # Threads by category threads_by_category = {} for thread in active_threads: if not thread.category: continue # don't use defaultdict, use .setdefault(): # http://stackoverflow.com/questions/4764110/django-template-cant-loop-defaultdict if len(threads_by_category.setdefault(thread.category, [])) >= 5: continue threads_by_category[thread.category].append(thread) # Personalized discussion groups: flagged/favorited threads and threads by # user. if request.user.is_authenticated(): favorites = [ f.thread for f in Favorite.objects.filter(thread__mailinglist=mlist, user=request.user) ] mm_user_id = get_mailman_user_id(request.user) threads_posted_to = [] if mm_user_id is not None: for thread in threads: senders = set( [e.sender.mailman_id for e in thread.emails.all()]) if mm_user_id in senders: threads_posted_to.append(thread) else: favorites = [] threads_posted_to = [] # Empty messages # TODO: translate this empty_messages = { "flagged": 'You have not flagged any discussions (yet).', "posted": 'You have not posted to this list (yet).', "active": 'No discussions this month (yet).', "popular": 'No vote has been cast this month (yet).', } # Export button recent_dates = [d.strftime("%Y-%m-%d") for d in mlist.get_recent_dates()] recent_url = "%s?start=%s&end=%s" % (reverse( "hk_list_export_mbox", kwargs={ "mlist_fqdn": mlist.name, "filename": "%s-%s-%s" % (mlist.name, recent_dates[0], recent_dates[1]) }), recent_dates[0], recent_dates[1]) today = datetime.date.today() month_dates = get_display_dates(today.year, today.month, None) month_url = "%s?start=%s&end=%s" % (reverse( "hk_list_export_mbox", kwargs={ "mlist_fqdn": mlist.name, "filename": "%s-%s" % (mlist.name, today.strftime("%Y-%m")) }), month_dates[0].strftime("%Y-%m-%d"), month_dates[1].strftime("%Y-%m-%d")) export = {"recent": recent_url, "month": month_url} context = { 'view_name': 'overview', 'mlist': mlist, 'top_threads': top_threads[:20], 'most_active_threads': active_threads[:20], 'top_author': authors, 'pop_threads': pop_threads[:20], 'threads_by_category': threads_by_category, 'months_list': get_months(mlist), 'flagged_threads': favorites, 'threads_posted_to': threads_posted_to, 'empty_messages': empty_messages, 'export': export, } return render(request, "hyperkitty/overview.html", context)
def test_get_user_id(self): self.mm_user.user_id = "dummy" mm_user_id = mailman.get_mailman_user_id(self.user) self.assertEqual(mm_user_id, "dummy")